From 895e85c28c3da6d8c86e974af9c4d27dc153f6eb Mon Sep 17 00:00:00 2001 From: Siew Moi Khor Date: Wed, 22 Nov 2017 13:17:26 -0800 Subject: [PATCH 001/660] Merge table collection onDataChanged event from master to prod (#123) * Shows how to get, set, and remove axis unit, label and title in a chart. * Shows how to get, set, and remove axis unit, label and title in a chart. * Shows how to get, set, and remove axis unit, label and title in a chart. * Chart points and legend. (#101) * Shows how to create a line chart. (#104) * Update README.md * change to icon set that varies by shape as well as color (#107) * Shows how to add, apply, get and delete styles. (#106) * Shows how to add, apply, get and delete styles. * Shows how to add, apply, get and delete styles. * Add custom document properties snippets. (#108) * Draws a basic XY scatter chart. (#109) * Chart xyscatter (#111) * Draws a basic XY scatter chart. * Shows how to set and get custom document properties. * Add worksheet activated and deactivated event handlers. (#114) * Add worksheet activated and deactivated event handlers. * Add worksheet activated and deactivated event handlers. * Add event handlers for worksheet on activated and deactivated. * Set chart series markers (#115) * Set chart series markers. * Set chart series markers. * Add event handlers on the data changed and worksheet added events. (#118) * Add event handlers on the data changed and worksheet added events. * Add event handlers on the data changed and worksheet added events. * Add event handlers for table onDataChanged and onSelectionChanged events (#120) * Add an event handler for table collection onDataChanged event (#122) * Add an event handler for table collection onDataChanged event * Add an event handler for table collection onDataChanged event --- playlists/excel.yaml | 13 +- .../events-tablecollection-changed.yaml | 164 ++++++++++++++++++ .../events-worksheet-activated.yaml | 15 +- .../events-worksheet-changed.yaml | 4 +- .../89-preview-apis/range-hyperlink.yaml | 2 +- .../range-text-orientation.yaml | 2 +- samples/excel/89-preview-apis/style.yaml | 2 +- .../89-preview-apis/update-named-item.yaml | 2 +- .../worksheet-freeze-panes.yaml | 2 +- .../89-preview-apis/worksheet-gridlines.yaml | 2 +- .../89-preview-apis/worksheet-tab-color.yaml | 2 +- view/excel.json | 1 + 12 files changed, 193 insertions(+), 18 deletions(-) create mode 100644 samples/excel/89-preview-apis/events-tablecollection-changed.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index cac5ad920..7e76e4ec4 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -496,10 +496,19 @@ group: Preview APIs api_set: ExcelApi: 1.7 +- id: excel-events-tablecollection-changed + name: Events - Table collection changed + fileName: events-tablecollection-changed.yaml + description: Add event handlers for table collection onDataChanged event + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/events-tablecollection-changed.yaml + group: Preview APIs + api_set: + ExcelApi: 1.7 - id: excel-events-worksheet-activated name: Events - Worksheet activated fileName: events-worksheet-activated.yaml - description: Add an event handler on the worksheet activated and deactivated events + description: Add event handlers for worksheet onActivated and onDeactivated events rawUrl: >- https://raw.githubusercontent.com////samples/excel/89-preview-apis/events-worksheet-activated.yaml group: Preview APIs @@ -508,7 +517,7 @@ - id: excel-events-worksheet-changed name: Events - Worksheet changed fileName: events-worksheet-changed.yaml - description: Add event handlers on the data changed and worksheet added events + description: Add event handlers for worksheet onDataChanged and onAdded events rawUrl: >- https://raw.githubusercontent.com////samples/excel/89-preview-apis/events-worksheet-changed.yaml group: Preview APIs diff --git a/samples/excel/89-preview-apis/events-tablecollection-changed.yaml b/samples/excel/89-preview-apis/events-tablecollection-changed.yaml new file mode 100644 index 000000000..e78f7ec7e --- /dev/null +++ b/samples/excel/89-preview-apis/events-tablecollection-changed.yaml @@ -0,0 +1,164 @@ +order: 9 +id: excel-events-tablecollection-changed +name: Events - Table collection changed +description: Add event handlers for table collection onDataChanged event +host: EXCEL +api_set: + ExcelApi: 1.7 +script: + content: |+ + $("#setup").click(() => tryCatch(setup)); + $("#register-on-data-changed-handler").click(() => tryCatch(registerOnDataChangedHandler)); + $("#change-data").click(() => tryCatch(changeData)); + + async function registerOnDataChangedHandler() { + await Excel.run(async (context) => { + let tables = context.workbook.tables; + tables.onDataChanged.add(onDataChange); + + await context.sync(); + + OfficeHelpers.UI.notify("A handler has been registered for the table collection onDataChanged event", + "Try changing cell values in the tables, and watch the console output."); + }); + } + + async function changeData() { + await Excel.run(async (context) => { + let sheet = context.workbook.worksheets.getItem("Sample"); + + // Change two values to trigger two table onDataChanged events for demonstration purposes. + // You can also change only one value by commenting out one of the ranges. + let range1 = sheet.getRange("B7"); + let range2 = sheet.getRange("C15"); + range1.values = [[900]]; + range2.values = [[20]]; + range1.format.autofitColumns(); + range2.format.autofitColumns(); + + await context.sync(); + }); + } + + async function onDataChange(event) { + await Excel.run(async (context) => { + let table = context.workbook.tables.getItem(event.tableId); + let worksheet = context.workbook.worksheets.getItem(event.worksheetId); + worksheet.load("name"); + + await context.sync(); + + console.log("Handler for table collection onDataChanged event has been triggered. Data changed address : " + event.address); + console.log("Table Id : " + event.tableId); + console.log("Worksheet Id : " + worksheet.name); + }); + } + + async function setup() { + await Excel.run(async (context) => { + const sheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "Sample"); + createSalesTable(sheet); + createReturnsTable(sheet); + + let format = sheet.getRange().format; + format.autofitColumns(); + format.autofitRows(); + + sheet.activate(); + await context.sync(); + }); + } + + function createSalesTable(sheet: Excel.Worksheet) { + let salesTable = sheet.tables.add('A1:E1', true); + salesTable.name = "SalesTable"; + + salesTable.getHeaderRowRange().values = [["Sales", "Qtr1", "Qtr2", "Qtr3", "Qtr4"]]; + + salesTable.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] + ]); + } + + function createReturnsTable(sheet: Excel.Worksheet) { + let returnsTable = sheet.tables.add('A10:E10', true); + returnsTable.name = "ReturnsTable"; + + returnsTable.getHeaderRowRange().values = [["Returns", "Qtr1", "Qtr2", "Qtr3", "Qtr4"]]; + + returnsTable.rows.add(null, [ + ["Frames", 50, 70, 65, 77], + ["Saddles", 20, 23, 16, 31], + ["Brake levers", 20, 87, 56, 81], + ["Chains", 15, 18, 32, 33], + ["Mirrors", 15, 60, 23, 54], + ["Spokes", 25, 35, 45, 65] + ]); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + + + + language: typescript +template: + content: |+ +
+

This sample shows how to add an event handler for table collection onDataChanged 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: "section.samples {\r\n margin-top: 20px;\r\n}\r\n\r\nsection.samples .ms-Button, section.setup .ms-Button {\r\n display: block;\r\n margin-bottom: 5px;\r\n margin-left: 20px;\r\n min-width: 80px;\r\n}\r\n" + 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 + + @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 \ No newline at end of file diff --git a/samples/excel/89-preview-apis/events-worksheet-activated.yaml b/samples/excel/89-preview-apis/events-worksheet-activated.yaml index 2a386533d..6fb1c2572 100644 --- a/samples/excel/89-preview-apis/events-worksheet-activated.yaml +++ b/samples/excel/89-preview-apis/events-worksheet-activated.yaml @@ -1,7 +1,7 @@ -order: 9 +order: 10 id: excel-events-worksheet-activated name: Events - Worksheet activated -description: Add an event handler on the worksheet activated and deactivated events +description: Add event handlers for worksheet onActivated and onDeactivated events host: EXCEL api_set: ExcelApi: 1.7 @@ -20,7 +20,7 @@ script: await context.sync(); OfficeHelpers.UI.notify("A handler has been registered for the OnActivate event", - "Try changing a cell value in the table, and watch the console output."); + "Try selecting a different worksheet, and watch the console output."); }); } @@ -37,7 +37,8 @@ script: await context.sync(); - OfficeHelpers.UI.notify("A handler has been registered for the OnDeactivate event."); + OfficeHelpers.UI.notify("A handler has been registered for the OnDeactivate event", + "Try selecting a different worksheet, and watch the console output."); }); } @@ -112,7 +113,7 @@ script: template: content: |
-

This sample shows how to add the worksheet activated and deactivated event handlers.

+

This sample shows how to add event handlers for worksheet onActivated and onDeactivated events.

@@ -125,13 +126,13 @@ template:

Try it out

diff --git a/samples/excel/89-preview-apis/events-worksheet-changed.yaml b/samples/excel/89-preview-apis/events-worksheet-changed.yaml index 7af5857df..f84817739 100644 --- a/samples/excel/89-preview-apis/events-worksheet-changed.yaml +++ b/samples/excel/89-preview-apis/events-worksheet-changed.yaml @@ -1,7 +1,7 @@ -order: 10 +order: 11 id: excel-events-worksheet-changed name: Events - Worksheet changed -description: Add event handlers on the data changed and worksheet added events +description: Add event handlers for worksheet onDataChanged and onAdded events host: EXCEL api_set: ExcelApi: 1.7 diff --git a/samples/excel/89-preview-apis/range-hyperlink.yaml b/samples/excel/89-preview-apis/range-hyperlink.yaml index aad45c2e0..5c1a4d472 100644 --- a/samples/excel/89-preview-apis/range-hyperlink.yaml +++ b/samples/excel/89-preview-apis/range-hyperlink.yaml @@ -1,4 +1,4 @@ -order: 12 +order: 13 id: excel-range-hyperlink name: Range hyperlink description: 'Create, update, and clear a hyperlink for a range.' diff --git a/samples/excel/89-preview-apis/range-text-orientation.yaml b/samples/excel/89-preview-apis/range-text-orientation.yaml index 0cf1f3bfe..f5e0f5950 100644 --- a/samples/excel/89-preview-apis/range-text-orientation.yaml +++ b/samples/excel/89-preview-apis/range-text-orientation.yaml @@ -1,4 +1,4 @@ -order: 13 +order: 14 id: excel-range-text-orientation name: Range text orientation description: Set and get the text orientation within a range diff --git a/samples/excel/89-preview-apis/style.yaml b/samples/excel/89-preview-apis/style.yaml index dafab4a82..ae91904e2 100644 --- a/samples/excel/89-preview-apis/style.yaml +++ b/samples/excel/89-preview-apis/style.yaml @@ -1,4 +1,4 @@ -order: 14 +order: 15 id: excel-style name: Style description: 'Add, apply, get and delete styles.' diff --git a/samples/excel/89-preview-apis/update-named-item.yaml b/samples/excel/89-preview-apis/update-named-item.yaml index 40ec2424a..14d7d62d6 100644 --- a/samples/excel/89-preview-apis/update-named-item.yaml +++ b/samples/excel/89-preview-apis/update-named-item.yaml @@ -1,4 +1,4 @@ -order: 11 +order: 12 id: excel-update-named-item name: Update a named item description: Create and then update a named item diff --git a/samples/excel/89-preview-apis/worksheet-freeze-panes.yaml b/samples/excel/89-preview-apis/worksheet-freeze-panes.yaml index 07029bf95..175a09eee 100644 --- a/samples/excel/89-preview-apis/worksheet-freeze-panes.yaml +++ b/samples/excel/89-preview-apis/worksheet-freeze-panes.yaml @@ -1,4 +1,4 @@ -order: 17 +order: 18 id: excel-worksheet-freeze-panes name: Manage frozen panes in a worksheet description: 'Freeze columns, freeze rows, freeze a range, and manage frozen panes in a worksheet.' diff --git a/samples/excel/89-preview-apis/worksheet-gridlines.yaml b/samples/excel/89-preview-apis/worksheet-gridlines.yaml index ab540316f..5ae83599c 100644 --- a/samples/excel/89-preview-apis/worksheet-gridlines.yaml +++ b/samples/excel/89-preview-apis/worksheet-gridlines.yaml @@ -1,4 +1,4 @@ -order: 15 +order: 16 id: excel-gridlines name: Worksheet gridlines description: Hide and show gridlines in a worksheet diff --git a/samples/excel/89-preview-apis/worksheet-tab-color.yaml b/samples/excel/89-preview-apis/worksheet-tab-color.yaml index 5662c8aac..0026a9db3 100644 --- a/samples/excel/89-preview-apis/worksheet-tab-color.yaml +++ b/samples/excel/89-preview-apis/worksheet-tab-color.yaml @@ -1,4 +1,4 @@ -order: 16 +order: 17 id: excel-worksheet-tab-color name: Worksheet tab color description: Set and get the tab color of a worksheet diff --git a/view/excel.json b/view/excel.json index 560277765..39395a9e4 100644 --- a/view/excel.json +++ b/view/excel.json @@ -55,6 +55,7 @@ "excel-chart-trendlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-trendlines.yaml", "excel-document-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/document-properties.yaml", "excel-events-table-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-table-changed.yaml", + "excel-events-tablecollection-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-tablecollection-changed.yaml", "excel-events-worksheet-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-worksheet-activated.yaml", "excel-events-worksheet-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-worksheet-changed.yaml", "excel-update-named-item": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/update-named-item.yaml", From b867cfaaf24ea9982675930cf08c1004e3fc45a6 Mon Sep 17 00:00:00 2001 From: David Chesnut Date: Thu, 28 Dec 2017 13:32:51 -0800 Subject: [PATCH 002/660] Added code of conduct --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 18f5517b7..1ea3258ec 100644 --- a/README.md +++ b/README.md @@ -125,3 +125,6 @@ A few style rules to observe: * The scripts for building/validating the snippets are under the `config` folder -- in particular, under `build.ts`. There is also a `deploy.ts` for copying the built files to their final location.) > **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! + + +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 a7de25a81bb7f616cab932851c225a428e302335 Mon Sep 17 00:00:00 2001 From: Juan Balmori Date: Wed, 3 Jan 2018 17:13:04 -0800 Subject: [PATCH 003/660] Changing to Typescript (#125) * Changing to Typescript Went through all the plain JS files and added TypeScript versions. * fixed comments. adding fixes to all the comments. --- .../word/01-basics/basic-doc-assembly.yaml | 251 ++++++++++-------- .../01-basics/insert-and-get-pictures.yaml | 83 +++--- .../word/01-basics/insert-formatted-text.yaml | 66 +++-- samples/word/01-basics/insert-header.yaml | 28 +- .../insert-line-and-page-breaks.yaml | 67 ++--- samples/word/01-basics/search.yaml | 98 +++---- .../get-paragraph-on-insertion-point.yaml | 105 ++++---- .../insert-in-different-locations.yaml | 121 +++++---- .../02-paragraphs/paragraph-properties.yaml | 79 +++--- .../insert-and-change-content-controls.yaml | 145 +++++----- samples/word/04-range/scroll-to-range.yaml | 72 ++--- .../split-words-of-first-paragraph.yaml | 88 +++--- samples/word/05-tables/table-cell-access.yaml | 56 ++-- samples/word/06-lists/insert-list.yaml | 82 +++--- .../get-built-in-properties.yaml | 33 ++- ...read-write-custom-document-properties.yaml | 68 ++--- 16 files changed, 782 insertions(+), 660 deletions(-) diff --git a/samples/word/01-basics/basic-doc-assembly.yaml b/samples/word/01-basics/basic-doc-assembly.yaml index a71046013..ee7fce3ce 100644 --- a/samples/word/01-basics/basic-doc-assembly.yaml +++ b/samples/word/01-basics/basic-doc-assembly.yaml @@ -6,152 +6,185 @@ host: WORD api_set: WordApi: 1.1 script: - content: | - $("#insert-header").click(insertHeader); - $("#add-paragraphs").click(addParagraphs); - $("#add-content-controls").click(addContentControls); - $("#change-customer").click(changeCustomer); - $("#add-footer").click(addFooter); - - // Inserts a heading 1 Title. - function insertHeader() { - Word.run(function (context) { - var header = context.document.body.insertText("This is a sample Heading 1 Title!!", "start"); + 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)); + + async function insertHeader() { + await Word.run(async (context) => { + let 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; - return context.sync(); - }) - .catch(OfficeHelpers.Utilities.log); + + await context.sync(); + }); } - // Insert a set of paragraphs, a content control and a page break. - function addParagraphs() { - Word.run(function (context) { - var paragraph = context.document.body.insertParagraph("Timeline", "end"); + + async function addParagraphs() { + await Word.run(async (context) => { + let paragraph = context.document.body.insertParagraph("Timeline", "end"); paragraph.style = "Heading 2"; - var paragraph2 = context.document.body.insertParagraph("The Services shall commence on July 31, 2015, and shall continue through July 29, 2015.", "end"); + let paragraph2 = context.document.body.insertParagraph("The Services shall commence on July 31, 2015, and shall continue through July 29, 2015.", "end"); paragraph2.style = "Normal"; - var paragraph3 = context.document.body.insertParagraph("Project Costs by Phase", "end"); + let 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. - var paragraph4 = context.document.body.insertParagraph("", "end"); + let paragraph4 = context.document.body.insertParagraph("", "end"); paragraph4.style = "Normal"; paragraph4.font.highlightColor = "#FFFF00"; - var contentControl = paragraph4.insertContentControl(); + let contentControl = paragraph4.insertContentControl(); contentControl.title = "ProjectCosts"; - - var paragraph5 = context.document.body.insertParagraph("Project Team", "end"); + let paragraph5 = context.document.body.insertParagraph("Project Team", "end"); paragraph5.style = "Heading 2"; paragraph5.font.highlightColor = "#FFFFFF"; - - var paragraph6 = context.document.body.insertParagraph("Terms of Work", "end"); + let paragraph6 = context.document.body.insertParagraph("Terms of Work", "end"); paragraph6.style = "Heading 1"; - - var paragraph7 = context.document.body.insertParagraph("Contractor shall provide the Services and Deliverable(s) as follows:", "end"); + let paragraph7 = context.document.body.insertParagraph("Contractor shall provide the Services and Deliverable(s) as follows:", "end"); paragraph7.style = "Normal"; - - var paragraph8 = context.document.body.insertParagraph("Out-of-Pocket Expenses / Invoice Procedures", "end"); + let paragraph8 = context.document.body.insertParagraph("Out-of-Pocket Expenses / Invoice Procedures", "end"); paragraph8.style = "Heading 2"; - - var 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"); + 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"); paragraph9.style = "Normal"; // Insert a page break at the end of the document. context.document.body.insertBreak("page", "End"); - return context.sync() - .catch(OfficeHelpers.Utilities.log); + + await context.sync(); }); } - // Search the document for instances of the string "Contractor". Change the format of - // each search result, and wrap each search result in a content control. Set the tag and title property on each content control. - function addContentControls() { - Word.run(function (context) { - //we first search for the "Contractor string" - var results = context.document.body.search("Contractor"); - context.load(results); - return context.sync().then(function () { - // Once we have the results, we iterate - for (var i = 0; i < results.items.length; i++) { - results.items[i].font.highlightColor = "#FFFF00"; - results.items[i].font.bold = true; - var cc = results.items[i].insertContentControl(); - cc.tag = "customer"; // This value is used in another part of this sample. - cc.title = "Customer Name"; - } - return context.sync(); - }) - .catch(OfficeHelpers.Utilities.log); + //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() { + await Word.run(async (context) => { + let results = context.document.body.search("Contractor"); + results.load("font/bold"); + + await context.sync(); + + 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"; + } + + await context.sync(); }); } - function changeCustomer() { - Word.run(function (context) { - // Get all the tagged content controls. - var contentControls = context.document.contentControls.getByTag("customer"); - context.load(contentControls, { select: 'text', expand: 'font' }); - return context.sync() - .then(function () { - for (var i = 0; i < contentControls.items.length; i++) { - contentControls.items[i].insertText("Fabrikam", "replace"); - } - return context.sync(); - }) - .catch(OfficeHelpers.Utilities.log); + async function changeCustomer() { + await Word.run(async (context) => { + let contentControls = 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(); }); } - function addFooter() { - Word.run(function (context) { - // Headers and footers live in the section of the document, we need to retrieve them. - var sections = context.document.sections; - context.load(sections, 'body/style'); - return context.sync().then(function () { - // Get the primary footer of the first section and get its body. - var footer = sections.items[0].getFooter("primary"); - footer.insertParagraph("Confidential", "end"); - footer.insertBreak("line", "end"); - return context.sync(); - }) - .catch(OfficeHelpers.Utilities.log); + async function addFooter() { + await Word.run(async (context) => { + context.document.sections.getFirst() + .getFooter("primary").insertParagraph("Confidential", "end"); + + await context.sync(); }); } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } language: typescript template: - content: |4 -

This sample demonstrates how to use the basic document assembly objects by creating sample document, search, create a template, add paragraphs and footers. Just click the buttons in top-down order.

- - - - - - - + content: "

\n\tThis sample demonstrates how to use the basic document assembly objects by creating sample document, search, create a template,\n\tadd paragraphs and footers. Just click the buttons in top-down order.

\n\n
\n\t

\n\t\t

Try it out:

\n\t

\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n
" language: html style: - content: '' + content: |4 + body { + margin: 0; + padding: 10px; + } + + + /* Button customization, including overwriting some Fabric defaults */ + + .ms-Button, .ms-Button:focus { + background: #217346; + border: #217346; + } + + .ms-Button > .ms-Button-label, + .ms-Button:focus > .ms-Button-label, + .ms-Button:hover > .ms-Button-label { + color: white; + } + + .ms-Button:hover, .ms-Button:active { + background: #164b2e; + } + + .ms-Button.is-disabled, .ms-Button:disabled { + background-color: #f4f4f4; + border-color: #f4f4f4; + } + + .ms-Button.is-disabled .ms-Button-label, + .ms-Button:disabled .ms-Button-label { + color: #a6a6a6; + } + + #setup.ms-Button, #setup.ms-Button:focus { + background: darkred; + border: darkred; + } + + #setup.ms-Button:hover, #setup.ms-Button:active { + background: red; + } + + #samples-container { + margin-top: 20px; + } + + #samples-container .ms-Button { + display: block; + margin-bottom: 5px; + } + + #samples-container .ms-Button, #setup-container .ms-Button { + margin-left: 20px; + min-width: 80px; + } language: css -libraries: |- - // Office.js +libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - // NPM libraries - jquery@3.1.1 - office-ui-fabric-js@1.4.0/dist/js/fabric.min.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 - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js + 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 - // IntelliSense: Use dt~library_name for DefinitelyTyped or URLs to d.ts files - @types/office-js + jquery@3.1.1 @types/jquery - @types/core-js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts \ No newline at end of file diff --git a/samples/word/01-basics/insert-and-get-pictures.yaml b/samples/word/01-basics/insert-and-get-pictures.yaml index a4f8b5ce6..b96ab6f19 100644 --- a/samples/word/01-basics/insert-and-get-pictures.yaml +++ b/samples/word/01-basics/insert-and-get-pictures.yaml @@ -7,62 +7,59 @@ api_set: WordApi: 1.1 script: content: | - $("#setup").click(setup); - $("#insert").click(insertImage); - $("#get").click(getImage); + $("#setup").click(() => tryCatch(setup)); + $("#insert").click(() => tryCatch(insertImage)); + $("#get").click(() => tryCatch(getImage)); /** - * Setup by adding a dummy paragraph. + * Inserts an image anchored to the last paragraph. */ - async function setup() { - try { - 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 elements you want from the different Online galleries.", "replace"); - await context.sync(); - }); - } - catch (exception) { - OfficeHelpers.Utilities.log(exception); - } + async function insertImage() { + await Word.run(async (context) => { + context.document.body.paragraphs.getLast().insertParagraph("", "after").insertInlinePictureFromBase64(base64Image, "end"); + + await context.sync(); + }); } /** - * Inserts a blank paragraph at the end of the document - * and then an image anchored to it. + * Get the first image in the document */ - async function insertImage() { - try { - await Word.run(async (context) => { - context.document.body.paragraphs.getLast().insertParagraph("", "after").insertInlinePictureFromBase64(base64Image, "end"); - await context.sync(); - console.log("success"); - }); - } - catch (exception) { - OfficeHelpers.Utilities.log(exception); - } + async function getImage() { + 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}`); + //To get the image encoded as base64: + const base64 = firstPicture.getBase64ImageSrc(); + + await context.sync(); + console.log(base64.value); + }); } /** - * Get the first image in the document + * Setup by adding a dummy paragraph. */ - async function getImage() { - try { - Word.run(async (context) => { - const firstPicture = context.document.body.inlinePictures.getFirst(); - context.load(firstPicture); - await context.sync(); + async function setup() { + await Word.run(async (context) => { + 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.", "end"); + 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 elements you want from the different Online galleries.", "end"); - const base64 = firstPicture.getBase64ImageSrc(); - await context.sync(); + await context.sync(); + }); + } - console.log(base64.value); - }) + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); } - catch (exception) { - OfficeHelpers.Utilities.log(exception); + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); } } @@ -166,4 +163,4 @@ libraries: | @types/office-js @types/jquery @types/core-js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts \ No newline at end of file + @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts diff --git a/samples/word/01-basics/insert-formatted-text.yaml b/samples/word/01-basics/insert-formatted-text.yaml index 08f7d0689..9962507cf 100644 --- a/samples/word/01-basics/insert-formatted-text.yaml +++ b/samples/word/01-basics/insert-formatted-text.yaml @@ -6,39 +6,49 @@ host: WORD api_set: WordApi: 1.1 script: - content: | - $("#run").click(run); + content: |- + $("#run").click(() => tryCatch(run)); async function run() { - try { - await Word.run(async (context) => { - // Here we go to insert first sentence. Then we 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. - var firstSentence = context.document.body.insertText("This is some formatted text!", "replace"); - firstSentence.font.name = "Courier New"; - firstSentence.font.bold = true; - firstSentence.font.size = 18; + await Word.run(async (context) => { + // Insert first sentence. Then we 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 firstSentence = context.document.body.insertText("This is some formatted text!", "replace"); + firstSentence.font.set({ + name: "Courier New", + bold: true, + size: 18 + });; + + // Second sentence, let's insert it as a paragraph after the previously inserted one. + let secondSentence = context.document.body.insertParagraph("This is other formatted text.", "end"); + secondSentence.font.set({ + bold: false, + italic: true, + name: 'Berlin Sans FB', + color: 'blue', + size: 30 + });; - // Second sentence, let's insert it after the previously inserted one. - var secondSentence = context.document.body.insertText("This is other formatted text.", "end"); - secondSentence.font.bold = false; - secondSentence.font.italic = true; - secondSentence.font.name = "Berlin Sans FB"; - secondSentence.font.size = 30; - secondSentence.font.color = "blue"; + // You can also use pre-exsiting styles. + let lastSentence = context.document.body.insertParagraph("To be or not to be", "end"); - // You can also use pre-exsiting styles. - var lastSentence = 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"; + lastSentence.styleBuiltIn = Word.Style.intenseReference; - // Use styleBuiltIn to use an enumeration of existing styles. If your style is custom make sure to use range.style = "name of your style"; - lastSentence.styleBuiltIn = Word.Style.intenseReference; + await context.sync(); + }); + } - await context.sync() - console.log("success"); - }) - } catch (e) { - OfficeHelpers.Utilities.log(e); + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); } } language: typescript @@ -100,4 +110,4 @@ libraries: |- @types/office-js @types/jquery @types/core-js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts \ No newline at end of file + @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts diff --git a/samples/word/01-basics/insert-header.yaml b/samples/word/01-basics/insert-header.yaml index f76d4b94a..4ec1a87d4 100644 --- a/samples/word/01-basics/insert-header.yaml +++ b/samples/word/01-basics/insert-header.yaml @@ -7,15 +7,27 @@ api_set: WordApi: 1.1 script: content: |- - $("#run").click(run); + $("#run").click(() => tryCatch(run)); - function run() { - Word.run(function (context) { - var myHeader = context.document.sections.getFirst() + async function run() { + await Word.run(async (context) => { + context.document.sections.getFirst() .getHeader("primary").insertText("This is a header", "start"); - return context.sync(); - }) - .catch(OfficeHelpers.Utilities.log); + + await context.sync(); + }); + } + + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } } language: typescript template: @@ -76,4 +88,4 @@ libraries: |- @types/office-js @types/jquery @types/core-js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts \ No newline at end of file + @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts diff --git a/samples/word/01-basics/insert-line-and-page-breaks.yaml b/samples/word/01-basics/insert-line-and-page-breaks.yaml index aa01b0e34..9fa9a6c55 100644 --- a/samples/word/01-basics/insert-line-and-page-breaks.yaml +++ b/samples/word/01-basics/insert-line-and-page-breaks.yaml @@ -4,44 +4,51 @@ description: Shows how to insert page and line breaks in a document. author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: 1.2 script: content: |- - $("#setup").click(setup); - $("#line").click(insertLineBreak); - $("#page").click(insertPageBreak); - - function insertLineBreak() { - Word.run(function (context) { - var paragraph = context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.line, "after"); - return context.sync() - .then(function () { - console.log("success"); - }) - }) - .catch(OfficeHelpers.Utilities.log); + $("#setup").click(() => tryCatch(setup)); + $("#line").click(() => tryCatch(insertLineBreak)); + $("#page").click(() => tryCatch(insertPageBreak)); + + async function insertLineBreak() { + Word.run(async (context) => { + context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.line, "after"); + + await context.sync(); + console.log("success"); + }); } - function insertPageBreak() { - Word.run(function (context) { - var picture = context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.page, "after"); - return context.sync() - .then(function () { - console.log("success"); - }) - }) - .catch(OfficeHelpers.Utilities.log); + async function insertPageBreak() { + await Word.run(async (context) => { + context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.page, "after"); + + await context.sync(); + console.log("success"); + }); } - function setup() { - Word.run(function (context) { - // lets insert a couple of paragraphs to illustrate the point.. + async function setup() { + await Word.run(async (context) => { + // Let's insert a couple of paragraphs to illustrate the point.. 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 elements you want from the different Online galleries.", "replace"); - return context.sync(); - }) - .catch(OfficeHelpers.Utilities.log); + + await context.sync(); + console.log("success"); + }); + } + + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } } language: typescript template: @@ -144,4 +151,4 @@ libraries: |- @types/office-js @types/jquery @types/core-js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts \ No newline at end of file + @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts diff --git a/samples/word/01-basics/search.yaml b/samples/word/01-basics/search.yaml index f61954902..bca338856 100644 --- a/samples/word/01-basics/search.yaml +++ b/samples/word/01-basics/search.yaml @@ -7,54 +7,62 @@ api_set: WordApi: 1.1 script: content: |- - $("#setup").click(setup); - $("#basic").click(basicSearch); - $("#wildcard").click(wildcardSearch); - - - function basicSearch() { - Word.run(function (context) { - var results = context.document.body.search("Online"); - context.load(results); - return context.sync() - .then(function () { - //lets traverse the search results... and highlight.. - for (var i = 0; i < results.items.length; i++) { - results.items[i].font.highlightColor = "yellow"; - } - return context.sync(); - }) - }) - .catch(OfficeHelpers.Utilities.log); + $("#setup").click(() => tryCatch(setup)); + $("#basic-search").click(() => tryCatch(basicSearch)); + $("#wildcard-search").click(() => tryCatch(wildcardSearch)); + + async function basicSearch() { + await Word.run(async (context) => { + let results = context.document.body.search("Online"); + results.load("font/highlightColor"); + + await context.sync(); + + // Let's traverse the search results... and highlight... + for (let i = 0; i < results.items.length; i++) { + results.items[i].font.highlightColor = "yellow"; + } + + await context.sync(); + }); } - function wildcardSearch() { - Word.run(function (context) { - // check out how wildcard expression are built, also use the second parameter of the search method to include search modes (i.e. we are using wildcards). - var results = context.document.body.search("$*.[0-9][0-9]", { matchWildcards: true }); - context.load(results); - return context.sync() - .then(function () { - //lets traverse the search results... and highlight.. - for (var i = 0; i < results.items.length; i++) { - results.items[i].font.highlightColor = "red"; - results.items[i].font.color = "white"; - } - return context.sync(); - }) - }) - .catch(OfficeHelpers.Utilities.log); + async function wildcardSearch() { + 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. we are using wildcards). + let results = context.document.body.search("$*.[0-9][0-9]", { matchWildcards: true }); + results.load("font/highlightColor, font/color"); + + await context.sync(); + + // Let's traverse the search results... and highlight... + for (let i = 0; i < results.items.length; i++) { + results.items[i].font.highlightColor = "red"; + results.items[i].font.color = "white"; + } + + await context.sync(); + }); } - function setup() { - Word.run(function (context) { - // lets insert a couple of paragraphs to illustrate the point.. - context.document.body.clear(); + async function setup() { + await Word.run(async (context) => { + // Let's insert a couple of paragraphs to illustrate the point.. context.document.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.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"); - return context.sync(); - }) - .catch(OfficeHelpers.Utilities.log); + + await context.sync(); + }); + } + + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } } language: typescript template: @@ -74,10 +82,10 @@ template:

Sample snippets to try:

- - @@ -157,4 +165,4 @@ libraries: |- @types/office-js @types/jquery @types/core-js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts \ No newline at end of file + @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts diff --git a/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml b/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml index 7c24205d3..a094da3e2 100644 --- a/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml +++ b/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml @@ -7,63 +7,69 @@ api_set: WordApi: 1.1 script: content: |- - $("#get-paragraph").click(getParagraph); - $("#get-sentences").click(getSentences); - $("#setup").click(setup); - - - function getParagraph() { - Word.run(function (context) { - // the collection of paragraphs of the current selection returns the full paragraphs contanied on it. - var paragraph = context.document.getSelection().paragraphs.getFirst(); - context.load(paragraph); - return context.sync() - .then(function () { - console.log(paragraph.text); - }) - }) - .catch(OfficeHelpers.Utilities.log); + $("#get-paragraph").click(() => tryCatch(getParagraph)); + $("#get-sentences").click(() => tryCatch(getSentences)); + $("#setup").click(() => tryCatch(setup)); + + + async function getParagraph() { + await Word.run(async (context) => { + // The collection of paragraphs of the current selection returns the full paragraphs contanied on it. + let paragraph = context.document.getSelection().paragraphs.getFirst(); + paragraph.load("text"); + + await context.sync(); + console.log(paragraph.text); + }); } - function getSentences() { - Word.run(function (context) { - // gets the complete sentence (as range) associated with the insertion point. - var sentences = context.document + async function getSentences() { + 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*/); - context.load(sentences); - return context.sync() - .then(function () { - // expands the range to the end of the paragraph to get all the complete sentences. - var sentecesToTheEndOfParagraph = sentences.items[0].getRange() - .expandTo(context.document.getSelection().paragraphs - .getFirst().getRange("end") /* Expanding the range all the way to the end of the paragraph */).getTextRanges(["."], false); - context.load(sentecesToTheEndOfParagraph); - return context.sync() - .then(function () { - for (var i = 0; i < sentecesToTheEndOfParagraph.items.length; i++) { - console.log("Sentence " + (i + 1) + ":" - + sentecesToTheEndOfParagraph.items[i].text); - } - }); - }); - }) - .catch(OfficeHelpers.Utilities.log); + 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("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); + } + }); } - function setup() { - Word.run(function (context) { - // lets insert a couple of paragraphs to illustrate the point.. + async function setup() { + await Word.run(async (context) => { + // Let's insert a couple of paragraphs to illustrate the point.. 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 cover page, header, and sidebar. Click Insert and then choose the elements you want from the different galleries.", "replace"); - return context.sync() - .then(function () { - context.document.body.paragraphs.getFirst().alignment = "left"; - context.document.body.paragraphs.getLast().alignment = "left"; - return context.sync(); - }) + + await context.sync(); + + context.document.body.paragraphs.getFirst().alignment = "left"; + context.document.body.paragraphs.getLast().alignment = "left"; + + await context.sync(); }) - .catch(OfficeHelpers.Utilities.log); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } } language: typescript template: @@ -98,6 +104,7 @@ style: .ms-Button, .ms-Button:focus { background: #217346; border: #217346; + height: 70px; } .ms-Button > .ms-Button-label, @@ -159,4 +166,4 @@ libraries: |- @types/office-js @types/jquery @types/core-js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts \ No newline at end of file + @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts diff --git a/samples/word/02-paragraphs/insert-in-different-locations.yaml b/samples/word/02-paragraphs/insert-in-different-locations.yaml index b8a4ba2b2..5886d816f 100644 --- a/samples/word/02-paragraphs/insert-in-different-locations.yaml +++ b/samples/word/02-paragraphs/insert-in-different-locations.yaml @@ -4,95 +4,94 @@ description: Shows how to insert content using the different available locations author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: 1.2 script: content: |- - $("#setup").click(setup); - $("#before").click(before); - $("#start").click(start); - $("#end").click(end); - $("#after").click(after); - $("#replace").click(replace); - - - function before() { - Word.run(function (context) { - // lets insert before the first paragraph. - var range = context.document.body.paragraphs.getFirst().insertParagraph("This is Before", "before"); + $("#setup").click(() => tryCatch(setup)); + $("#before").click(() => tryCatch(before)); + $("#start").click(() => tryCatch(start)); + $("#end").click(() => tryCatch(end)); + $("#after").click(() => tryCatch(after)); + $("#replace").click(() => tryCatch(replace)); + + 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"); range.font.highlightColor = "yellow"; - return context.sync() - .then(function () { - console.log("success"); - }) - }) - .catch(OfficeHelpers.Utilities.log); + + await context.sync(); + }); } - function start() { - Word.run(function (context) { + async function start() { + await Word.run(async (context) => { // This button assumes the before was clicked, so we get the next paragraph and insert text at the begining.Note that there are no-valid locations depending on the object. For instance insertParagraph and "before" on a paragrpah object is not a valid combination. - var range = context.document.body.paragraphs.getFirst().getNext().insertText("This is Start", "start"); + let range = context.document.body.paragraphs + .getFirst().getNext().insertText("This is Start", "start"); range.font.highlightColor = "blue"; range.font.color = "white"; - return context.sync() - .then(function () { - console.log("success"); - }) - }) - .catch(OfficeHelpers.Utilities.log); + + await context.sync(); + }); } - function end() { - Word.run(function (context) { + async function end() { + await Word.run(async (context) => { // Here we go to insert on paragraph - var range = context.document.body.paragraphs.getFirst().getNext().insertText(" This is End", "end"); + let range = context.document.body.paragraphs + .getFirst().getNext().insertText(" This is End", "end"); range.font.highlightColor = "green"; range.font.color = "white"; - return context.sync() - .then(function () { - console.log("success"); - }) - }) - .catch(OfficeHelpers.Utilities.log); + + await context.sync(); + }); } - function after() { - Word.run(function (context) { + async function after() { + await Word.run(async (context) => { // Here we go to insert on paragraph - var range = context.document.body.paragraphs.getFirst().getNext().insertParagraph("This is After", "after"); + let range = context.document.body.paragraphs + .getFirst().getNext().insertParagraph("This is After", "after"); range.font.highlightColor = "red"; range.font.color = "white"; - return context.sync() - .then(function () { - console.log("success"); - }) - }) - .catch(OfficeHelpers.Utilities.log); + + await context.sync(); + }); } - function replace() { - Word.run(function (context) { + async function replace() { + await Word.run(async (context) => { // Here we go to insert on paragraph - var range = context.document.body.paragraphs.getLast().insertText("Just replaced the last paragraph!", "replace"); + let range = context.document.body.paragraphs + .getLast().insertText("Just replaced the last paragraph!", "replace"); range.font.highlightColor = "black"; range.font.color = "white"; - return context.sync() - .then(function () { - console.log("success"); - }) - }) - .catch(OfficeHelpers.Utilities.log); + + await context.sync(); + }); } - function setup() { - Word.run(function (context) { + async function setup() { + await Word.run(async (context) => { // lets insert a couple of paragraphs to illustrate the point.. 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 cover page, header, and sidebar. Click Insert and then choose the elements you want from the different galleries.", "replace"); - return context.sync(); - }) - .catch(OfficeHelpers.Utilities.log); + + await context.sync(); + }); + } + + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } } language: typescript template: @@ -203,4 +202,4 @@ libraries: |- @types/office-js @types/jquery @types/core-js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts \ No newline at end of file + @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts diff --git a/samples/word/02-paragraphs/paragraph-properties.yaml b/samples/word/02-paragraphs/paragraph-properties.yaml index cb7ed7d56..7580424aa 100644 --- a/samples/word/02-paragraphs/paragraph-properties.yaml +++ b/samples/word/02-paragraphs/paragraph-properties.yaml @@ -4,70 +4,77 @@ description: 'Shows how to set indentation, space between paragraphs and other p author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: 1.2 script: content: |- - $("#indent").click(indent); - $("#spacing").click(spacing); - $("#space-after").click(spaceAfter); - $("#align").click(align); - $("#setup").click(setup); - - function indent() { - Word.run(function (context) { + $("#indent").click(() => tryCatch(indent)); + $("#spacing").click(() => tryCatch(spacing)); + $("#space-after").click(() => tryCatch(spaceAfter)); + $("#align").click(() => tryCatch(align)); + $("#setup").click(() => tryCatch(setup)); + + async function indent() { + await Word.run(async (context) => { // Indents the first paragraph context.document.body.paragraphs. getFirst().leftIndent = 75; //units = points + return context.sync(); - }) - .catch(OfficeHelpers.Utilities.log); + }); } - function spacing() { - Word.run(function (context) { + async function spacing() { + await Word.run(async (context) => { // Adjusts line spacing context.document.body.paragraphs .getFirst().lineSpacing = 20; - return context.sync(); - }) - .catch(OfficeHelpers.Utilities.log); + + await context.sync(); + }); } - function spaceAfter() { - Word.run(function (context) { + async function spaceAfter() { + await Word.run(async (context) => { //Adjust space between paragraphs context.document.body.paragraphs .getFirst().spaceAfter = 20; - return context.sync(); - }) - .catch(OfficeHelpers.Utilities.log); + + await context.sync(); + }); } - function align() { - Word.run(function (context) { + async function align() { + await Word.run(async (context) => { // Centers last paragraph alignment context.document.body.paragraphs .getLast().alignment = "centered"; - return context.sync(); - }) - .catch(OfficeHelpers.Utilities.log); + await context.sync(); + }); } - function setup() { - Word.run(function (context) { + async function setup() { + await Word.run(async (context) => { // lets insert a couple of paragraphs to illustrate the point.. 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 cover page, header, and sidebar. Click Insert and then choose the elements you want from the different galleries.", "replace"); - return context.sync() - .then(function () { - context.document.body.paragraphs.getFirst().alignment = "left"; - context.document.body.paragraphs.getLast().alignment = "left"; - return context.sync(); - }) + context.document.body.paragraphs.getFirst().alignment = "left"; + context.document.body.paragraphs.getLast().alignment = "left"; + + await context.sync(); }) - .catch(OfficeHelpers.Utilities.log); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } } language: typescript template: @@ -173,4 +180,4 @@ libraries: |- @types/office-js @types/jquery @types/core-js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts \ No newline at end of file + @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts diff --git a/samples/word/03-content-controls/insert-and-change-content-controls.yaml b/samples/word/03-content-controls/insert-and-change-content-controls.yaml index 9994502fd..3926a6dde 100644 --- a/samples/word/03-content-controls/insert-and-change-content-controls.yaml +++ b/samples/word/03-content-controls/insert-and-change-content-controls.yaml @@ -7,82 +7,94 @@ api_set: WordApi: 1.1 script: content: |- - $("#insert-controls").click(insertContentControls); - $("#change-controls").click(modifyContentControls); - $("#setup").click(setup); - - - function insertContentControls() { - //traverses each paragraph of the document and wraps a content control on each with either a even or odd tags - Word.run(function (context) { - var paragraphs = context.document.body.paragraphs; - context.load(paragraphs); - return context.sync() - .then(function () { - for (var i = 0; i < paragraphs.items.length; i++) { - console.log(paragraphs.items.length); - var contentControl = paragraphs.items[i].insertContentControl(); - //for even we tag "even" - if (i % 2 == 0) - contentControl.tag = "even"; - - else - contentControl.tag = "odd"; - } - return context.sync(); - }) - }) - .catch(OfficeHelpers.Utilities.log); + $("#insert-controls").click(() => tryCatch(insertContentControls)); + $("#change-controls").click(() => tryCatch(modifyContentControls)); + $("#setup").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, we'll 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 we tag "even" + if (i % 2 === 0) { + contentControl.tag = "even"; + } + + else { + contentControl.tag = "odd"; + } + } + console.log("Content controls inserted: " + paragraphs.items.length) + + await context.sync(); + }); + } - function modifyContentControls() { + async function modifyContentControls() { // I'll add title and colors to odd and even content controls! and change appearance of all. - Word.run(function (context) { - // gets the complete sentence (as range) associated with the insertion point. - var evenContentControls = context.document.contentControls.getByTag("even"); - var oddContentControls = context.document.contentControls.getByTag("odd"); - context.load(evenContentControls); - context.load(oddContentControls); - return context.sync() - .then(function () { - for (var i = 0; i < evenContentControls.items.length; i++) { - //change a few properties and append a paragraph - evenContentControls.items[i].color = "red"; - evenContentControls.items[i].title = "Odd ContentControl #" + (i+1); - evenContentControls.items[i].appearance = "tags"; - evenContentControls.items[i].insertParagraph("This is an odd content control", "end"); - } - - for (var j = 0; j < oddContentControls.items.length; j++) { - //change a few properties and append a paragraph - oddContentControls.items[j].color = "green"; - oddContentControls.items[j].title = "Even ContentControl #" + (j+1); - oddContentControls.items[j].appearance = "tags"; - oddContentControls.items[j].insertHtml("This is an even content control", "end"); - } - return context.sync(); - + 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("color,title,appearance"); + oddContentControls.load("color,title,appearance"); + + 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' }); - }) - .catch(OfficeHelpers.Utilities.log); + 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(); + }); } - function setup() { - Word.run(function (context) { - // lets insert a couple of paragraphs to illustrate the point.. + async function setup() { + await Word.run(async (context) => { + // Let's insert a couple of paragraphs to illustrate the point.. 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"); - return context.sync() - .then(function () { - context.document.body.paragraphs.getFirst().alignment = "left"; - context.document.body.paragraphs.getLast().alignment = "left"; - return context.sync(); - }) - }) - .catch(OfficeHelpers.Utilities.log); + + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } } language: typescript template: @@ -117,6 +129,7 @@ style: .ms-Button, .ms-Button:focus { background: #217346; border: #217346; + height: 70px; } .ms-Button > .ms-Button-label, @@ -178,4 +191,4 @@ libraries: |- @types/office-js @types/jquery @types/core-js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts \ No newline at end of file + @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts diff --git a/samples/word/04-range/scroll-to-range.yaml b/samples/word/04-range/scroll-to-range.yaml index 82bd4692f..848e1ac25 100644 --- a/samples/word/04-range/scroll-to-range.yaml +++ b/samples/word/04-range/scroll-to-range.yaml @@ -4,47 +4,53 @@ description: Shows how to scroll to a range with and without selection. author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: 1.2 script: - content: | - $("#setup").click(setup); - $("#scroll").click(scroll); - $("#scroll-end").click(scrollEnd); - - function scroll() { - Word.run(function (context) { - //if select is called with no parameters it selects the object. - var paragraph = context.document.body.paragraphs.getLast().select(); - return context.sync() - .then(function () { - console.log("success"); - }); - }) - .catch(OfficeHelpers.Utilities.log); + content: |- + $("#setup").click(() => tryCatch(setup)); + $("#scroll").click(() => tryCatch(scroll)); + $("#scroll-end").click(() => tryCatch(scrollEnd)); + + + async function scroll() { + await Word.run(async (context) => { + // If select is called, with no parameters it selects the object. + context.document.body.paragraphs.getLast().select(); + + await context.sync(); + }); } - function scrollEnd() { - Word.run(function (context) { - // select can be at the start or end of a range, this by definition moves the insertion point without selecting the range. - var paragraph = context.document.body.paragraphs.getLast().select("end"); - return context.sync() - .then(function () { - console.log("success"); - }); - }) - .catch(OfficeHelpers.Utilities.log); + 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"); + + await context.sync(); + }); } - function setup() { - Word.run(function (context) { - // lets insert a couple of paragraphs to illustrate the point.. + async function setup() { + await Word.run(async (context) => { + //Let's insert a couple of paragraphs to illustrate the point.. context.document.body.clear(); - var firstSentence = 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"); + let firstSentence = 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"); firstSentence.insertBreak(Word.BreakType.page, "after"); 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"); - return context.sync(); + + await context.sync(); }) - .catch(OfficeHelpers.Utilities.log); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } } language: typescript template: @@ -146,4 +152,4 @@ libraries: |- @types/office-js @types/jquery @types/core-js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts \ No newline at end of file + @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts diff --git a/samples/word/04-range/split-words-of-first-paragraph.yaml b/samples/word/04-range/split-words-of-first-paragraph.yaml index cdcab4830..da5754913 100644 --- a/samples/word/04-range/split-words-of-first-paragraph.yaml +++ b/samples/word/04-range/split-words-of-first-paragraph.yaml @@ -4,59 +4,57 @@ description: 'Show how to split a paragraph into word ranges and then traverses author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: 1.3 script: content: |- - $("#setup").click(setup); - $("#highlight").click(highlightWords); - - function highlightWords() { - Word.run(function (context) { - var myPars = context.document.body.paragraphs; - context.load(myPars); - return context.sync() - .then(function () { - var myWords = myPars.items[0].split([" "], true /*used to trim delimiters*/, true /* used to trim spaces */); - context.load(myWords, { expand: 'font' }); - return context.sync() - .then(function () { - return forEach(myWords, function (item, i) { - if (i >= 1) { - myWords.items[i - 1].font.highlightColor = "#FFFFFF"; - } - myWords.items[i].font.highlightColor = "#FFFF00"; - return createTimerPromise(200).then(context.sync); - }) - }) - }) - }) - .catch(OfficeHelpers.Utilities.log); - - function createTimerPromise(ms) { - return new OfficeExtension.Promise(function (resolve) { - setTimeout(resolve, ms); - }) - } + $("#setup").click(() => tryCatch(setup)); + $("#highlight").click(() => tryCatch(highlightWords)); - function forEach(collection, handler) { - var promise = new OfficeExtension.Promise(function (resolve) { resolve(); }); - collection.items.forEach(function (item, index) { - promise = promise.then(function () { - return handler(item, index); - }) - }); - return promise; - } + async function highlightWords() { + await Word.run(async (context) => { + let paragraph = context.document.body.paragraphs.getFirst(); + let words = paragraph.split( + [" "], true /* trimDelimiters*/, true /* trimSpaces */); + words.load("$none"); //Don't need any properties. + + 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); //This is to wait 200ms to highlight the next word. + } + }); } - function setup() { - Word.run(function (context) { + function pause(milliseconds) { + return new Promise(resolve => setTimeout(resolve, milliseconds)); + } + + + async function setup() { + await Word.run(async (context) => { // lets insert a couple of paragraphs to illustrate the point.. 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"); - return context.sync(); - }) + await context.sync(); + }); + } + + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } } language: typescript template: @@ -157,4 +155,4 @@ libraries: |- @types/office-js @types/jquery @types/core-js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts \ No newline at end of file + @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts diff --git a/samples/word/05-tables/table-cell-access.yaml b/samples/word/05-tables/table-cell-access.yaml index e6f7e1ab2..14a4d5372 100644 --- a/samples/word/05-tables/table-cell-access.yaml +++ b/samples/word/05-tables/table-cell-access.yaml @@ -4,34 +4,42 @@ description: Shows how to access a specific cell in a table. author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: 1.3 script: - content: | - $("#run").click(getTableCell); - $("#setup").click(insertTable); - - - function getTableCell() { - Word.run(function (context) { - var firstCell = context.document.body.tables.getFirst().getCell(0, 0).body; - context.load(firstCell); - return context.sync() - .then(function () { - console.log("First cell text is " + firstCell.text); - }); - }) - .catch(OfficeHelpers.Utilities.log); + content: |- + $("#run").click(() => tryCatch(getTableCell)); + $("#setup").click(() => tryCatch(insertTable)); + + async function getTableCell() { + 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); + }); } - function insertTable() { - Word.run(function (context) { + async function insertTable() { + await Word.run(async (context) => { // We need a 2D array to hold the initial table values - var data = [["Apple", "Orange", "Pineapple"], ["Tokyo", "Beijing", "Seattle"]]; - var table = context.document.body.insertTable(3, 3, "start", data); + let data = [["Apple", "Orange", "Pineapple"], ["Tokyo", "Beijing", "Seattle"]]; + let table = context.document.body.insertTable(3, 3, "start", data); table.styleBuiltIn = Word.Style.gridTable5Dark_Accent2; - return context.sync(); - }) - .catch(OfficeHelpers.Utilities.log); + + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } } language: typescript template: @@ -128,4 +136,4 @@ libraries: |- @types/office-js @types/jquery @types/core-js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts \ No newline at end of file + @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts diff --git a/samples/word/06-lists/insert-list.yaml b/samples/word/06-lists/insert-list.yaml index 72b8bb660..cb5a5c5b3 100644 --- a/samples/word/06-lists/insert-list.yaml +++ b/samples/word/06-lists/insert-list.yaml @@ -4,52 +4,58 @@ description: Inserts a new list into the document. author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: 1.3 script: content: |- - $("#insert-controls").click(insertList); - $("#setup").click(setup); - - function insertList() { - //this example starts a new list stating with the second paragraph. - Word.run(function (context) { - var paragraphs = context.document.body.paragraphs; - paragraphs.load(); - return context.sync() - .then(function () { - var list = paragraphs.items[1].startNewList(); //indicates new list to be started in the second paragraph. - list.load(); - context.sync() - .then(function () { - //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'); - var 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. - //to add paragraphs outside the list use before/after - list.insertParagraph('New paragraph goes after (not part of the list)', 'after'); - return context.sync(); - }); - }); - }) - .catch(OfficeHelpers.Utilities.log); + $("#insert-controls").click(() => tryCatch(insertList)); + $("#setup").click(() => tryCatch(setup)); + + 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; + paragraphs.load("$none"); //We need no properties. + + await context.sync(); + + var list = paragraphs.items[1].startNewList(); //Indicates new list to be started in the second paragraph. + list.load("$none"); //We need no properties. + + await context.sync(); + + //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. + //To add paragraphs outside the list use before/after: + list.insertParagraph('New paragraph goes after (not part of the list)', 'after'); + + await context.sync(); + }); } - function setup() { - Word.run(function (context) { - // lets insert a couple of paragraphs to illustrate the point.. + async function setup() { + await Word.run(async (context) => { + // Let's insert a couple of paragraphs to illustrate the point.. context.document.body.clear(); context.document.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("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("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"); - return context.sync() - .then(function () { - context.document.body.paragraphs.getFirst().alignment = "left"; - context.document.body.paragraphs.getLast().alignment = "left"; - return context.sync(); - }) - }) - .catch(OfficeHelpers.Utilities.log); + + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } } language: typescript template: @@ -142,4 +148,4 @@ libraries: |- @types/office-js @types/jquery @types/core-js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts \ No newline at end of file + @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts diff --git a/samples/word/07-custom-properties/get-built-in-properties.yaml b/samples/word/07-custom-properties/get-built-in-properties.yaml index b5756abe3..ef1b8b4b1 100644 --- a/samples/word/07-custom-properties/get-built-in-properties.yaml +++ b/samples/word/07-custom-properties/get-built-in-properties.yaml @@ -6,22 +6,29 @@ host: WORD api_set: WordApi: 1.1 script: - content: |+ - $("#run").click(getProperties); + content: |- + $("#run").click(() => tryCatch(getProperties)); - function getProperties() { - Word.run(function (context) { - var builtInProperties = context.document.properties; - context.load(builtInProperties); - return context.sync() - .then(function () { - console.log(JSON.stringify(builtInProperties, null, 4)); - }); - }) - .catch(OfficeHelpers.Utilities.log); + async function getProperties() { + await Word.run(async (context) => { + let builtInProperties = context.document.properties; + builtInProperties.load("*"); // Let's get all! + await context.sync(); + console.log(JSON.stringify(builtInProperties, null, 4)); + }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } language: typescript template: content: |4 @@ -82,4 +89,4 @@ libraries: |- @types/office-js @types/jquery @types/core-js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts \ No newline at end of file + @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts diff --git a/samples/word/07-custom-properties/read-write-custom-document-properties.yaml b/samples/word/07-custom-properties/read-write-custom-document-properties.yaml index 12f672d94..4bdac6195 100644 --- a/samples/word/07-custom-properties/read-write-custom-document-properties.yaml +++ b/samples/word/07-custom-properties/read-write-custom-document-properties.yaml @@ -4,47 +4,51 @@ description: This sample shows how to add custom document properties of differen author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: 1.3 script: content: |- - $("#number").click(insertNumericProperty); - $("#string").click(insertStringProperty); - $("#read").click(readCustomDocumentProperties); + $("#number").click(() => tryCatch(insertNumericProperty)); + $("#string").click(() => tryCatch(insertStringProperty)); + $("#read").click(() => tryCatch(readCustomDocumentProperties)); - function insertNumericProperty() { - Word.run(function (context) { + async function insertNumericProperty() { + await Word.run(async (context) => { context.document.properties.customProperties.add("Numeric Property", 1234); - return context.sync() - .then(function () { - console.log("Property added"); - }) - .catch(OfficeHelpers.Utilities.log); - }) + await context.sync(); + console.log("Property added"); + }); } - function insertStringProperty() { - Word.run(function (context) { + async function insertStringProperty() { + await Word.run(async (context) => { context.document.properties.customProperties.add("String Property", "Hello World!"); - return context.sync() - .then(function () { - console.log("Property added"); - }) - .catch(OfficeHelpers.Utilities.log); - }) + + await context.sync(); + console.log("Property added"); + }); + } + + async function readCustomDocumentProperties() { + await Word.run(async (context) => { + let properties = context.document.properties.customProperties; + properties.load("key,type,value"); + + await context.sync(); + 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); + }); } - function readCustomDocumentProperties() { - Word.run(function (context) { - var properties = context.document.properties.customProperties; - context.load(properties); - return context.sync() - .then(function () { - 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); - }) - .catch(OfficeHelpers.Utilities.log); - }) + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } } language: typescript template: @@ -140,4 +144,4 @@ libraries: |- @types/office-js @types/jquery @types/core-js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts \ No newline at end of file + @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts From ec86ff3245ccd4ba2be29c7cc2f1155656673c95 Mon Sep 17 00:00:00 2001 From: Michael Zlatkovsky Date: Thu, 4 Jan 2018 13:43:04 -0800 Subject: [PATCH 004/660] Modernize & TypeScript-ify "Range Manipulation" sample (#99) --- .../split-words-of-first-paragraph.yaml | 118 ++++-------------- 1 file changed, 24 insertions(+), 94 deletions(-) diff --git a/samples/word/04-range/split-words-of-first-paragraph.yaml b/samples/word/04-range/split-words-of-first-paragraph.yaml index da5754913..3805f94d5 100644 --- a/samples/word/04-range/split-words-of-first-paragraph.yaml +++ b/samples/word/04-range/split-words-of-first-paragraph.yaml @@ -6,7 +6,7 @@ host: WORD api_set: WordApi: 1.3 script: - content: |- + content: | $("#setup").click(() => tryCatch(setup)); $("#highlight").click(() => tryCatch(highlightWords)); @@ -15,7 +15,7 @@ script: let paragraph = context.document.body.paragraphs.getFirst(); let words = paragraph.split( [" "], true /* trimDelimiters*/, true /* trimSpaces */); - words.load("$none"); //Don't need any properties. + words.load("text"); await context.sync(); @@ -26,8 +26,7 @@ script: words.items[i].font.highlightColor = "#FFFF00"; await context.sync(); - - await pause(200); //This is to wait 200ms to highlight the next word. + await pause(200); } }); } @@ -36,15 +35,14 @@ script: return new Promise(resolve => setTimeout(resolve, milliseconds)); } - async function setup() { await Word.run(async (context) => { - // lets insert a couple of paragraphs to illustrate the point.. 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"); + await context.sync(); - }); + }) } async function tryCatch(callback) { @@ -58,101 +56,33 @@ script: } language: typescript template: - content: |4 -

This sample demonstrates splitting and traversing ranges.

- - -
-

Click "setup" to insert sample text and between runs to reset the sample.

- - -
- - -
-

Sample snippets to try:

- - - - -
+ content: "
\n This sample demonstrates splitting and traversing ranges.\n
\n\n
\n\t

Set up

\n\t\n
\n\n
\n\t

Try it out

\n\t\n
\n" language: html style: - content: |4 - body { - margin: 0; - padding: 10px; - } - - - /* Button customization, including overwriting some Fabric defaults */ - - .ms-Button, .ms-Button:focus { - background: #217346; - border: #217346; - } - - .ms-Button > .ms-Button-label, - .ms-Button:focus > .ms-Button-label, - .ms-Button:hover > .ms-Button-label { - color: white; - } - - .ms-Button:hover, .ms-Button:active { - background: #164b2e; - } - - .ms-Button.is-disabled, .ms-Button:disabled { - background-color: #f4f4f4; - border-color: #f4f4f4; - } - - .ms-Button.is-disabled .ms-Button-label, - .ms-Button:disabled .ms-Button-label { - color: #a6a6a6; - } - - #setup.ms-Button, #setup.ms-Button:focus { - background: darkred; - border: darkred; - } - - #setup.ms-Button:hover, #setup.ms-Button:active { - background: red; - } - - #samples-container { - margin-top: 20px; - } - - #samples-container .ms-Button { - display: block; - margin-bottom: 5px; - } + content: | + section.samples { + margin-top: 20px; + } - #samples-container .ms-Button, #setup-container .ms-Button { - margin-left: 20px; - min-width: 80px; - } + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } language: css -libraries: |- - // Office.js +libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - // NPM libraries - jquery@3.1.1 - office-ui-fabric-js@1.4.0/dist/js/fabric.min.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 - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - core-js@2.4.1/client/core.min.js - // IntelliSense: Use dt~library_name for DefinitelyTyped or URLs to d.ts files - @types/office-js - @types/jquery + 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 From 33a9e3ca8fbbf70d19d362c2b53abb513f1fec35 Mon Sep 17 00:00:00 2001 From: Daniel Einspanjer Date: Wed, 31 Jan 2018 12:10:51 -0500 Subject: [PATCH 005/660] Add eventArgs example to Excel data changed sample (#128) --- samples/excel/70-events/data-changed.yaml | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/samples/excel/70-events/data-changed.yaml b/samples/excel/70-events/data-changed.yaml index f6c7c14e4..cf9266c43 100644 --- a/samples/excel/70-events/data-changed.yaml +++ b/samples/excel/70-events/data-changed.yaml @@ -14,8 +14,7 @@ script: await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const salesTable = sheet.tables.getItem("SalesTable"); - const dataRange = salesTable.getDataBodyRange(); - const salesByQuarterBinding = context.workbook.bindings.add(dataRange, "range", "SalesByQuarter"); + const salesByQuarterBinding = context.workbook.bindings.add(salesTable.getRange(), "table", "SalesByQuarter"); salesByQuarterBinding.onDataChanged.add(onSalesDataChanged); OfficeHelpers.UI.notify("The handler is registered.", "Change the value in one of the data cells and watch this message banner. (Be sure to complete the edit by pressing Enter or clicking in another cell.)"); @@ -24,11 +23,17 @@ script: }); } - async function onSalesDataChanged() { + async function onSalesDataChanged(eventArgs: Excel.BindingDataChangedEventArgs) { await Excel.run(async (context) => { - OfficeHelpers.UI.notify("Data was changed!!!!", ""); + OfficeHelpers.UI.notify("Data was changed", eventArgs.binding.id); + + // Get the name of the table that's changed. + const table: Excel.Table = context.workbook.bindings.getItem(eventArgs.binding.id).getTable(); + table.load("name"); await context.sync(); + + console.log("Name of the changed table: " + table.name); }); } @@ -107,4 +112,4 @@ libraries: | @types/office-js @types/core-js @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts - @types/jquery \ No newline at end of file + @types/jquery From c286e24c10784b9b3e6ad405cca030103ed4d782 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 5 Feb 2018 13:49:08 -0800 Subject: [PATCH 006/660] shows how to use workbook.getactivecell (#130) --- playlists/excel.yaml | 9 +++ playlists/word.yaml | 16 ++--- .../workbook-get-active-cell.yaml | 59 +++++++++++++++++++ .../word/01-basics/basic-doc-assembly.yaml | 33 ++++++++++- .../split-words-of-first-paragraph.yaml | 21 ++++++- snippet-extractor-output/excel.yaml | 3 +- view/excel.json | 1 + 7 files changed, 128 insertions(+), 14 deletions(-) create mode 100644 samples/excel/89-preview-apis/workbook-get-active-cell.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 7e76e4ec4..3cd0f8990 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -588,6 +588,15 @@ group: Preview APIs api_set: ExcelApi: 1.7 +- id: excel-workbook-get-active-cell + name: Get active cell + fileName: workbook-get-active-cell.yaml + description: Gets the active cell of the entire workbook. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/workbook-get-active-cell.yaml + group: Preview APIs + api_set: + ExcelApi: 1.7 - id: excel-just-for-fun-gradient name: Gradient fileName: gradient.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index 00ca85c66..d3aab13a2 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -60,7 +60,7 @@ https://raw.githubusercontent.com////samples/word/01-basics/insert-line-and-page-breaks.yaml group: Basics api_set: - WordApi: 1.1 + WordApi: 1.2 - id: word-basics-search name: Search fileName: search.yaml @@ -89,7 +89,7 @@ https://raw.githubusercontent.com////samples/word/02-paragraphs/insert-in-different-locations.yaml group: Paragraphs api_set: - WordApi: 1.1 + WordApi: 1.2 - id: word-paragraphs-get-paragraph-on-insertion-point name: Get paragraph from insertion point fileName: get-paragraph-on-insertion-point.yaml @@ -109,7 +109,7 @@ https://raw.githubusercontent.com////samples/word/02-paragraphs/paragraph-properties.yaml group: Paragraphs api_set: - WordApi: 1.1 + WordApi: 1.2 - id: word-content-controls-insert-and-change-content-controls name: Content control basics fileName: insert-and-change-content-controls.yaml @@ -127,7 +127,7 @@ https://raw.githubusercontent.com////samples/word/04-range/scroll-to-range.yaml group: Range api_set: - WordApi: 1.1 + WordApi: 1.2 - id: word-range-split-words-of-first-paragraph name: Range manipulation fileName: split-words-of-first-paragraph.yaml @@ -138,7 +138,7 @@ https://raw.githubusercontent.com////samples/word/04-range/split-words-of-first-paragraph.yaml group: Range api_set: - WordApi: 1.1 + WordApi: 1.3 - id: word-tables-table-cell-access name: Table cell access fileName: table-cell-access.yaml @@ -147,7 +147,7 @@ https://raw.githubusercontent.com////samples/word/05-tables/table-cell-access.yaml group: Tables api_set: - WordApi: 1.1 + WordApi: 1.3 - id: word-lists-insert-list name: List creation fileName: insert-list.yaml @@ -156,7 +156,7 @@ https://raw.githubusercontent.com////samples/word/06-lists/insert-list.yaml group: Lists api_set: - WordApi: 1.1 + WordApi: 1.3 - id: word-basics-read-write-custom-document-properties name: Read-write custom document properties fileName: read-write-custom-document-properties.yaml @@ -167,7 +167,7 @@ https://raw.githubusercontent.com////samples/word/07-custom-properties/read-write-custom-document-properties.yaml group: Custom Properties api_set: - WordApi: 1.1 + WordApi: 1.3 - id: word-custom-properties-get-built-in-properties name: Get built-in document properties. fileName: get-built-in-properties.yaml diff --git a/samples/excel/89-preview-apis/workbook-get-active-cell.yaml b/samples/excel/89-preview-apis/workbook-get-active-cell.yaml new file mode 100644 index 000000000..325ec33a9 --- /dev/null +++ b/samples/excel/89-preview-apis/workbook-get-active-cell.yaml @@ -0,0 +1,59 @@ +id: excel-workbook-get-active-cell +name: Get active cell +description: Gets the active cell of the entire workbook. +host: EXCEL +api_set: + ExcelApi: 1.7 +script: + content: | + $("#get-active-cell").click(() => tryCatch(run)); + + async function run() { + await Excel.run(async (context) => { + + const myWorkbook = context.workbook; + const activeCell = myWorkbook.getActiveCell(); + activeCell.load("address"); + + await context.sync(); + + console.log("The active cell is " + activeCell.address); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: | + + language: html +style: + content: | + /* Your style goes here */ + 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 + + @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 \ No newline at end of file diff --git a/samples/word/01-basics/basic-doc-assembly.yaml b/samples/word/01-basics/basic-doc-assembly.yaml index ee7fce3ce..69193f054 100644 --- a/samples/word/01-basics/basic-doc-assembly.yaml +++ b/samples/word/01-basics/basic-doc-assembly.yaml @@ -113,7 +113,36 @@ script: } language: typescript template: - content: "

\n\tThis sample demonstrates how to use the basic document assembly objects by creating sample document, search, create a template,\n\tadd paragraphs and footers. Just click the buttons in top-down order.

\n\n
\n\t

\n\t\t

Try it out:

\n\t

\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n
" + content: |- +

+ This sample demonstrates how to use the basic document assembly objects by creating sample document, search, create a template, + add paragraphs and footers. Just click the buttons in top-down order.

+ +
+

+

Try it out:

+

+ + + + + + + + + + +
language: html style: content: |4 @@ -187,4 +216,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery + @types/jquery \ No newline at end of file diff --git a/samples/word/04-range/split-words-of-first-paragraph.yaml b/samples/word/04-range/split-words-of-first-paragraph.yaml index 3805f94d5..4b918b612 100644 --- a/samples/word/04-range/split-words-of-first-paragraph.yaml +++ b/samples/word/04-range/split-words-of-first-paragraph.yaml @@ -56,7 +56,24 @@ script: } language: typescript template: - content: "
\n This sample demonstrates splitting and traversing ranges.\n
\n\n
\n\t

Set up

\n\t\n
\n\n
\n\t

Try it out

\n\t\n
\n" + content: | +
+ This sample demonstrates splitting and traversing ranges. +
+ +
+

Set up

+ +
+ +
+

Try it out

+ +
language: html style: content: | @@ -85,4 +102,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery + @types/jquery \ No newline at end of file diff --git a/snippet-extractor-output/excel.yaml b/snippet-extractor-output/excel.yaml index 09c74bb48..025c9059c 100644 --- a/snippet-extractor-output/excel.yaml +++ b/snippet-extractor-output/excel.yaml @@ -3,8 +3,7 @@ Excel.Binding.onDataChanged: await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const salesTable = sheet.tables.getItem("SalesTable"); - const dataRange = salesTable.getDataBodyRange(); - const salesByQuarterBinding = context.workbook.bindings.add(dataRange, "range", "SalesByQuarter"); + const salesByQuarterBinding = context.workbook.bindings.add(salesTable.getRange(), "table", "SalesByQuarter"); salesByQuarterBinding.onDataChanged.add(onSalesDataChanged); OfficeHelpers.UI.notify("The handler is registered.", "Change the value in one of the data cells and watch this message banner. (Be sure to complete the edit by pressing Enter or clicking in another cell.)"); diff --git a/view/excel.json b/view/excel.json index 39395a9e4..f347c29a5 100644 --- a/view/excel.json +++ b/view/excel.json @@ -65,6 +65,7 @@ "excel-gridlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-gridlines.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-tab-color.yaml", "excel-worksheet-freeze-panes": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-freeze-panes.yaml", + "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/workbook-get-active-cell.yaml", "excel-just-for-fun-gradient": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-just-for-fun/gradient.yaml", "excel-just-for-fun-patterns": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-just-for-fun/patterns.yaml", "excel-just-for-fun-path-finder-game": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-just-for-fun/path-finder-game.yaml", From e758d3e7065b8b57cb8cf623c9a7af7c862ff0b0 Mon Sep 17 00:00:00 2001 From: Rick-Kirkham Date: Mon, 5 Feb 2018 15:55:52 -0800 Subject: [PATCH 007/660] shows conditional formatting with overlapping ranges (#131) --- playlists/excel.yaml | 9 + .../conditional-formatting-advanced.yaml | 281 ++++++++++++++++++ view/excel.json | 1 + yarn.lock | 54 +--- 4 files changed, 293 insertions(+), 52 deletions(-) create mode 100644 samples/excel/30-range/conditional-formatting-advanced.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 3cd0f8990..895e64fd9 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -38,6 +38,15 @@ group: Scenarios api_set: ExcelApi: 1.1 +- id: excel-range-conditional-formatting-advanced + name: Conditional Formatting for Ranges - Advanced + fileName: conditional-formatting-advanced.yaml + description: Work with more than one conditional format on the same range. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/30-range/conditional-formatting-advanced.yaml + group: Range + api_set: + ExcelApi: 1.6 - id: excel-range-conditional-formatting-basic name: Conditional Formatting for Ranges - Basic fileName: conditional-formatting-basic.yaml diff --git a/samples/excel/30-range/conditional-formatting-advanced.yaml b/samples/excel/30-range/conditional-formatting-advanced.yaml new file mode 100644 index 000000000..c3219d1eb --- /dev/null +++ b/samples/excel/30-range/conditional-formatting-advanced.yaml @@ -0,0 +1,281 @@ +id: excel-range-conditional-formatting-advanced +name: Conditional Formatting for Ranges - Advanced +description: Work with more than one conditional format on the same range. +host: EXCEL +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)); + + + async function applyConditionalFormatsWithDefaultPriority() { + 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(); + }); + } + + async function applyPrioritizedConditionalFormats() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + queueCommandsToClearAllConditionalFormats(sheet); + + const temperatureDataRange = sheet.tables.getItem("TemperatureTable").getDataBodyRange(); + + /* Contradictions are resolved in favor of the format with + the lower priority number. In the example below, negative + numbers will get a bold font, but NOT a red font, because + priority goes to the format that gives them a blue font. + */ + + // Set low numbers to bold, dark red font and assign priority 1. + 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 }; + presetFormat.priority = 1; + + // Set negative numbers to blue font with green background and + // set priority 0. + 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" }; + cellValueFormat.priority = 0; + + await context.sync(); + }); + } + + async function applyPrioritizedConditionalFormatsWithStopOnTrue() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + queueCommandsToClearAllConditionalFormats(sheet); + + const temperatureDataRange = sheet.tables.getItem("TemperatureTable").getDataBodyRange(); + + /* Contradictions are resolved in favor of the format with + the lower priority number. In the example below, negative + numbers will get a bold font, but NOT a red font, because + priority goes to the format that gives them a blue font. + And the font will not be bolded because setting stopIfTrue + to true on the conditional format with priority 0 blocks + all formatting for any conditional formats with a higher + priority value. + */ + + // Set low numbers to bold, dark red font and assign priority 1. + 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 }; + presetFormat.priority = 1; + + // Set negative numbers to blue font with green background and + // set priority 0, but set stopIfTrue to true, so none of the + // formatting of the conditional format with the higher priority + // value will apply, not even the bolding of the font. + 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" }; + cellValueFormat.priority = 0; + cellValueFormat.stopIfTrue = true; + + await context.sync(); + }); + } + + async function removeConditionalFormat() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const temperatureDataRange = sheet.tables.getItem("TemperatureTable").getDataBodyRange(); + temperatureDataRange.conditionalFormats.getItemAt(0).delete(); + + await context.sync(); + }); + } + + function queueCommandsToClearAllConditionalFormats(sheet: Excel.Worksheet) { + const range = sheet.getRange(); + range.conditionalFormats.clearAll(); + } + + async function setup() { + await Excel.run(async (context) => { + const sheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "Sample"); + queueCommandsToCreateTemperatureTable(sheet); + sheet.activate(); + + await context.sync(); + }); + } + + function queueCommandsToCreateTemperatureTable(sheet: Excel.Worksheet) { + let temperatureTable = sheet.tables.add('A1:M1', true); + temperatureTable.name = "TemperatureTable"; + temperatureTable.getHeaderRowRange().values = [["Category", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]]; + temperatureTable.rows.add(null, [ + ["Avg High", 40, 38, 44, 45, 51, 56, 67, 72, 79, 59, 45, 41], + ["Avg Low", 34, 33, 38, 41, 45, 48, 51, 55, 54, 45, 41, 38], + ["Record High", 61, 69, 79, 83, 95, 97, 100, 101, 94, 87, 72, 66], + ["Record Low", -1, 2, 9, 24, 28, 32, 36, 39, 35, 21, 12, 4] + ]); + temperatureTable.getRange().format.autofitColumns(); + temperatureTable.getRange().format.autofitRows(); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + + /** + * Display the notification having synced the changes. + */ + function showNotification(message: string) { + const messageBanner = $('.ms-MessageBanner'); + $('.ms-MessageBanner-clipper').text(message); + $('.ms-MessageBanner-close').click(() => { + messageBanner.hide(); + messageBanner.off('click'); + }); + messageBanner.show(); + } + 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

+ + + + + + + + +
+ + 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; + } + + body { + margin: 0; + padding: 0; + } + + #main { + margin: 10px; + } + + .ms-MessageBanner { + display: none; + } + language: css +libraries: | + # Office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + + # 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 + + # NPM libraries + core-js@2.4.1/client/core.min.js + @microsoft/office-js-helpers@0.6.0/dist/office.helpers.min.js + jquery@3.1.1 + + # IntelliSense: @types/library or node_modules paths or URL to d.ts files + @types/office-js + @types/core-js + @microsoft/office-js-helpers/dist/office.helpers.d.ts + @types/jquery \ No newline at end of file diff --git a/view/excel.json b/view/excel.json index f347c29a5..85ab50f04 100644 --- a/view/excel.json +++ b/view/excel.json @@ -5,6 +5,7 @@ "excel-chart-chart-title-js": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/private-samples/excel/20-chart/chart-title-js.yaml", "excel-chart-chart-title-ts": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/private-samples/excel/20-chart/chart-title-ts.yaml", "excel-advanced-report-generation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/20-scenarios/report-generation.yaml", + "excel-range-conditional-formatting-advanced": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-range/conditional-formatting-advanced.yaml", "excel-range-conditional-formatting-basic": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-range/conditional-formatting-basic.yaml", "excel-range-copy-multiply-values": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-range/copy-multiply-values.yaml", "excel-range-create-and-use-range-intersection": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-range/create-and-use-range-intersection.yaml", diff --git a/yarn.lock b/yarn.lock index 2963aa135..1ec731fdc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -299,16 +299,6 @@ 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" -csv-parser@^1.12.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/csv-parser/-/csv-parser-1.12.0.tgz#1453f7627794f13f757ace4256feee22d37bc91b" - dependencies: - generate-function "^1.0.1" - generate-object-property "^1.0.0" - inherits "^2.0.1" - minimist "^1.2.0" - ndjson "^1.4.0" - dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -462,16 +452,6 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -generate-function@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-1.1.0.tgz#54c21b080192b16d9877779c5bb81666e772365f" - -generate-object-property@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - dependencies: - is-property "^1.0.0" - get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" @@ -612,10 +592,6 @@ is-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" -is-property@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" @@ -673,7 +649,7 @@ json-stable-stringify@^1.0.1: dependencies: jsonify "~0.0.0" -json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: +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" @@ -782,15 +758,6 @@ natives@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.0.tgz#e9ff841418a6b2ec7a495e939984f78f163e6e31" -ndjson@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/ndjson/-/ndjson-1.5.0.tgz#ae603b36b134bcec347b452422b0bf98d5832ec8" - dependencies: - json-stringify-safe "^5.0.1" - minimist "^1.2.0" - split2 "^2.1.0" - through2 "^2.0.3" - node-pre-gyp@~0.6.32: version "0.6.39" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" @@ -962,7 +929,7 @@ rc@^1.1.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5: +readable-stream@^2.0.6, readable-stream@^2.1.4: version "2.3.3" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" dependencies: @@ -1117,12 +1084,6 @@ sntp@1.x.x: dependencies: hoek "2.x.x" -split2@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" - dependencies: - through2 "^2.0.2" - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -1219,13 +1180,6 @@ term-size@^0.1.0: dependencies: execa "^0.4.0" -through2@^2.0.2, through2@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" - dependencies: - readable-stream "^2.1.5" - xtend "~4.0.1" - timed-out@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" @@ -1374,10 +1328,6 @@ xdg-basedir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" -xtend@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - yallist@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.1.tgz#08309c7044b1761d5e1591dc12c67629271b6ac3" From c5d5b8d70d5fc798f3b2d17bc0cf52f9962e6683 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 5 Feb 2018 18:14:19 -0800 Subject: [PATCH 008/660] tweak workbook-get-active-cell sample --- .../89-preview-apis/workbook-get-active-cell.yaml | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/samples/excel/89-preview-apis/workbook-get-active-cell.yaml b/samples/excel/89-preview-apis/workbook-get-active-cell.yaml index 325ec33a9..cc0e1a931 100644 --- a/samples/excel/89-preview-apis/workbook-get-active-cell.yaml +++ b/samples/excel/89-preview-apis/workbook-get-active-cell.yaml @@ -17,7 +17,7 @@ script: await context.sync(); - console.log("The active cell is " + activeCell.address); + OfficeHelpers.UI.notify("The active cell is " + activeCell.address); }); } @@ -34,9 +34,16 @@ script: language: typescript template: content: | - +
+

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

+
+ +
+

Try it out

+ +
language: html style: content: | From a1f007d54ca56d3c8abceb090bcd94cd5199f125 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 5 Feb 2018 19:15:10 -0800 Subject: [PATCH 009/660] shows how to copy a worksheet (#132) * shows how to copy a worksheet * update sample UI description --- playlists/excel.yaml | 9 ++ .../excel/89-preview-apis/worksheet-copy.yaml | 106 ++++++++++++++++++ view/excel.json | 1 + 3 files changed, 116 insertions(+) create mode 100644 samples/excel/89-preview-apis/worksheet-copy.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 895e64fd9..7beffea32 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -606,6 +606,15 @@ group: Preview APIs api_set: ExcelApi: 1.7 +- 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////samples/excel/89-preview-apis/worksheet-copy.yaml + group: Preview APIs + api_set: + ExcelApi: 1.7 - id: excel-just-for-fun-gradient name: Gradient fileName: gradient.yaml diff --git a/samples/excel/89-preview-apis/worksheet-copy.yaml b/samples/excel/89-preview-apis/worksheet-copy.yaml new file mode 100644 index 000000000..599c42410 --- /dev/null +++ b/samples/excel/89-preview-apis/worksheet-copy.yaml @@ -0,0 +1,106 @@ +id: excel-worksheet-copy +name: Copy worksheet +description: Copies the active worksheet to the specified location. +host: EXCEL +api_set: + ExcelApi: 1.7 +script: + content: | + $("#setup").click(() => tryCatch(setup)); + $("#copy-worksheet").click(() => tryCatch(run)); + + async function run() { + await Excel.run(async (context) => { + + const myWorkbook = context.workbook; + const sampleSheet = myWorkbook.worksheets.getActiveWorksheet(); + const copiedSheet = sampleSheet.copy("end") + + sampleSheet.load("name"); + copiedSheet.load("name"); + + await context.sync(); + + OfficeHelpers.UI.notify("'" + sampleSheet.name + "' was copied to '" + copiedSheet.name + "'") + }); + } + + async function setup() { + await Excel.run(async (context) => { + const sheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "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] + ]); + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { + 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) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |- +
+

This sample shows how to copy a worksheet.

+
+ +
+

Set up

+ +
+ +
+

Try it out

+ +
+ language: html +style: + content: | + /* Your style goes here */ + 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 + + @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 \ No newline at end of file diff --git a/view/excel.json b/view/excel.json index 85ab50f04..fec57e6e5 100644 --- a/view/excel.json +++ b/view/excel.json @@ -67,6 +67,7 @@ "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-tab-color.yaml", "excel-worksheet-freeze-panes": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-freeze-panes.yaml", "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/workbook-get-active-cell.yaml", + "excel-worksheet-copy": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-copy.yaml", "excel-just-for-fun-gradient": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-just-for-fun/gradient.yaml", "excel-just-for-fun-patterns": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-just-for-fun/patterns.yaml", "excel-just-for-fun-path-finder-game": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-just-for-fun/path-finder-game.yaml", From bdcfe50465be8a8e95077b0689a06d464b80689d Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 6 Feb 2018 16:36:31 -0800 Subject: [PATCH 010/660] minor cleanup --- samples/excel/89-preview-apis/workbook-get-active-cell.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/samples/excel/89-preview-apis/workbook-get-active-cell.yaml b/samples/excel/89-preview-apis/workbook-get-active-cell.yaml index cc0e1a931..f3b51624c 100644 --- a/samples/excel/89-preview-apis/workbook-get-active-cell.yaml +++ b/samples/excel/89-preview-apis/workbook-get-active-cell.yaml @@ -11,13 +11,13 @@ script: async function run() { await Excel.run(async (context) => { - const myWorkbook = context.workbook; - const activeCell = myWorkbook.getActiveCell(); + let myWorkbook = context.workbook; + let activeCell = myWorkbook.getActiveCell(); activeCell.load("address"); await context.sync(); - OfficeHelpers.UI.notify("The active cell is " + activeCell.address); + console.log("The active cell is " + activeCell.address); }); } From b9362c5f0376134df18dede91db97890ad878c96 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 6 Feb 2018 16:47:07 -0800 Subject: [PATCH 011/660] tweak worksheet-copy sample --- samples/excel/89-preview-apis/worksheet-copy.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/samples/excel/89-preview-apis/worksheet-copy.yaml b/samples/excel/89-preview-apis/worksheet-copy.yaml index 599c42410..19843d845 100644 --- a/samples/excel/89-preview-apis/worksheet-copy.yaml +++ b/samples/excel/89-preview-apis/worksheet-copy.yaml @@ -12,16 +12,16 @@ script: async function run() { await Excel.run(async (context) => { - const myWorkbook = context.workbook; - const sampleSheet = myWorkbook.worksheets.getActiveWorksheet(); - const copiedSheet = sampleSheet.copy("end") + let myWorkbook = context.workbook; + let sampleSheet = myWorkbook.worksheets.getActiveWorksheet(); + let copiedSheet = sampleSheet.copy("end") sampleSheet.load("name"); copiedSheet.load("name"); await context.sync(); - OfficeHelpers.UI.notify("'" + sampleSheet.name + "' was copied to '" + copiedSheet.name + "'") + console.log("'" + sampleSheet.name + "' was copied to '" + copiedSheet.name + "'") }); } From c081d147c214ae60cdb465323c0bfc90ecbf0b22 Mon Sep 17 00:00:00 2001 From: Kim Brandl - MSFT Date: Sun, 11 Feb 2018 18:46:10 -0800 Subject: [PATCH 012/660] Update string values to match values in new d.ts (#135) --- samples/excel/20-scenarios/report-generation.yaml | 2 +- samples/excel/30-range/create-and-use-range-intersection.yaml | 4 ++-- samples/excel/30-range/test-for-used-range.yaml | 4 ++-- samples/excel/40-table/add-rows-and-columns-to-a-table.yaml | 2 +- samples/excel/50-chart/create-column-clustered-chart.yaml | 4 ++-- samples/excel/50-chart/create-doughnut-chart.yaml | 4 ++-- samples/excel/50-chart/create-line-chart.yaml | 4 ++-- samples/excel/50-chart/create-xyscatter-chart.yaml | 2 +- samples/excel/70-events/data-changed.yaml | 2 +- samples/excel/82-document/get-file-in-slices-async.yaml | 2 +- samples/excel/89-preview-apis/chart-axis.yaml | 2 +- samples/excel/89-preview-apis/chart-legend.yaml | 2 +- samples/excel/89-preview-apis/chart-point.yaml | 2 +- samples/excel/89-preview-apis/chart-series-markers.yaml | 2 +- samples/excel/89-preview-apis/chart-series.yaml | 4 ++-- samples/excel/89-preview-apis/chart-trendlines.yaml | 2 +- samples/excel/89-preview-apis/events-table-changed.yaml | 4 ++-- samples/excel/89-preview-apis/worksheet-copy.yaml | 2 +- samples/excel/90-just-for-fun/color-wheel.yaml | 2 +- 19 files changed, 26 insertions(+), 26 deletions(-) diff --git a/samples/excel/20-scenarios/report-generation.yaml b/samples/excel/20-scenarios/report-generation.yaml index ac3c27ada..43acf862c 100644 --- a/samples/excel/20-scenarios/report-generation.yaml +++ b/samples/excel/20-scenarios/report-generation.yaml @@ -97,7 +97,7 @@ script: const chartTopRow = dataRange.getLastRow().getOffsetRange(2, 0); chart.setPosition(chartTopRow, chartTopRow.getOffsetRange(14, 0)); chart.title.text = "Quarterly sales chart"; - chart.legend.position = "right" + chart.legend.position = "Right" chart.legend.format.fill.setSolidColor("white"); chart.dataLabels.format.font.size = 15; chart.dataLabels.format.font.color = "black"; diff --git a/samples/excel/30-range/create-and-use-range-intersection.yaml b/samples/excel/30-range/create-and-use-range-intersection.yaml index 6400c637b..14905489f 100644 --- a/samples/excel/30-range/create-and-use-range-intersection.yaml +++ b/samples/excel/30-range/create-and-use-range-intersection.yaml @@ -58,10 +58,10 @@ script: function createContinentChart(sheet: Excel.Worksheet, continent: string, contestRange: Excel.Range, startPosition: string, endPosition: string) { - let chart = sheet.charts.add("ColumnClustered", contestRange, "columns"); + let chart = sheet.charts.add("ColumnClustered", contestRange, "Columns"); chart.setPosition(startPosition, endPosition); chart.title.text = `${continent} Current Quarter Sales Contest`; - chart.legend.position = "right"; + chart.legend.position = "Right"; chart.legend.format.fill.setSolidColor("white"); chart.dataLabels.format.font.size = 15; chart.dataLabels.format.font.color = "black"; diff --git a/samples/excel/30-range/test-for-used-range.yaml b/samples/excel/30-range/test-for-used-range.yaml index 8de8fd2ff..623fe73fe 100644 --- a/samples/excel/30-range/test-for-used-range.yaml +++ b/samples/excel/30-range/test-for-used-range.yaml @@ -26,10 +26,10 @@ script: if (usedDataRange.isNullObject) { OfficeHelpers.UI.notify("Need Data to Make Chart", "To create a meaningful chart, 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"); + 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.position = "Right"; chart.legend.format.fill.setSolidColor("white"); chart.dataLabels.format.font.size = 15; chart.dataLabels.format.font.color = "black"; diff --git a/samples/excel/40-table/add-rows-and-columns-to-a-table.yaml b/samples/excel/40-table/add-rows-and-columns-to-a-table.yaml index e68fef3ed..6f1e99b5a 100644 --- a/samples/excel/40-table/add-rows-and-columns-to-a-table.yaml +++ b/samples/excel/40-table/add-rows-and-columns-to-a-table.yaml @@ -203,5 +203,5 @@ libraries: | // IntelliSense: @types/library or node_modules paths or URL to d.ts files @types/office-js @types/core-js - @microsoft/office-js-helpers@0.6.5/dist/office.helpers.d.ts + @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts @types/jquery \ No newline at end of file diff --git a/samples/excel/50-chart/create-column-clustered-chart.yaml b/samples/excel/50-chart/create-column-clustered-chart.yaml index 9e01bd667..65d2b4dd6 100644 --- a/samples/excel/50-chart/create-column-clustered-chart.yaml +++ b/samples/excel/50-chart/create-column-clustered-chart.yaml @@ -21,11 +21,11 @@ script: const dataRange = salesTable.getDataBodyRange(); - let chart = sheet.charts.add("ColumnClustered", dataRange, "auto"); + let chart = sheet.charts.add("ColumnClustered", dataRange, "Auto"); chart.setPosition("A15", "F30"); chart.title.text = "Quarterly sales chart"; - chart.legend.position = "right" + chart.legend.position = "Right" chart.legend.format.fill.setSolidColor("white"); chart.dataLabels.format.font.size = 15; chart.dataLabels.format.font.color = "black"; diff --git a/samples/excel/50-chart/create-doughnut-chart.yaml b/samples/excel/50-chart/create-doughnut-chart.yaml index 9a05ae1c7..dde32a5fe 100644 --- a/samples/excel/50-chart/create-doughnut-chart.yaml +++ b/samples/excel/50-chart/create-doughnut-chart.yaml @@ -21,7 +21,7 @@ script: const dataRange = expensesByCategoryTable.getDataBodyRange(); - let categoryChart = sheet.charts.add(Excel.ChartType.doughnut, dataRange, "auto"); + let categoryChart = sheet.charts.add(Excel.ChartType.doughnut, dataRange, "Auto"); categoryChart.setPosition("A15", "F25"); categoryChart.title.text = "Expenses By Category"; @@ -30,7 +30,7 @@ script: categoryChart.title.format.font.color = "#41AEBD"; categoryChart.legend.format.font.name = "Corbel"; categoryChart.legend.format.font.size = 8; - categoryChart.legend.position = "right"; + categoryChart.legend.position = "Right"; categoryChart.dataLabels.showPercentage = true; categoryChart.dataLabels.format.font.size = 8; categoryChart.dataLabels.format.font.color = "white"; diff --git a/samples/excel/50-chart/create-line-chart.yaml b/samples/excel/50-chart/create-line-chart.yaml index a11a70396..88d17f439 100644 --- a/samples/excel/50-chart/create-line-chart.yaml +++ b/samples/excel/50-chart/create-line-chart.yaml @@ -16,10 +16,10 @@ script: let salesTable = sheet.tables.getItem("SalesTable"); let dataRange = sheet.getRange("A1:E7"); - let chart = sheet.charts.add("Line", dataRange, "auto"); + let chart = sheet.charts.add("Line", dataRange, "Auto"); chart.setPosition("A15", "E30"); - chart.legend.position = "right" + chart.legend.position = "Right" chart.legend.format.fill.setSolidColor("white"); chart.dataLabels.format.font.size = 15; chart.dataLabels.format.font.color = "black"; diff --git a/samples/excel/50-chart/create-xyscatter-chart.yaml b/samples/excel/50-chart/create-xyscatter-chart.yaml index 621603aee..21b28a29e 100644 --- a/samples/excel/50-chart/create-xyscatter-chart.yaml +++ b/samples/excel/50-chart/create-xyscatter-chart.yaml @@ -19,7 +19,7 @@ script: let dataRange = sheet.getRange("A1:E7"); // Create an XY scatter chart. - let chart = sheet.charts.add("XYScatter", dataRange, "auto"); + let chart = sheet.charts.add("XYScatter", dataRange, "Auto"); chart.title.text = "Bicycle Parts Quarterly Sales"; await context.sync(); diff --git a/samples/excel/70-events/data-changed.yaml b/samples/excel/70-events/data-changed.yaml index cf9266c43..92c56b106 100644 --- a/samples/excel/70-events/data-changed.yaml +++ b/samples/excel/70-events/data-changed.yaml @@ -14,7 +14,7 @@ script: await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const salesTable = sheet.tables.getItem("SalesTable"); - const salesByQuarterBinding = context.workbook.bindings.add(salesTable.getRange(), "table", "SalesByQuarter"); + const salesByQuarterBinding = context.workbook.bindings.add(salesTable.getRange(), "Table", "SalesByQuarter"); salesByQuarterBinding.onDataChanged.add(onSalesDataChanged); OfficeHelpers.UI.notify("The handler is registered.", "Change the value in one of the data cells and watch this message banner. (Be sure to complete the edit by pressing Enter or clicking in another cell.)"); diff --git a/samples/excel/82-document/get-file-in-slices-async.yaml b/samples/excel/82-document/get-file-in-slices-async.yaml index 4c616e88a..7aa52efba 100644 --- a/samples/excel/82-document/get-file-in-slices-async.yaml +++ b/samples/excel/82-document/get-file-in-slices-async.yaml @@ -121,7 +121,7 @@ script: chart.setPosition("A15", "F30"); chart.title.text = "Quarterly sales chart"; - chart.legend.position = "right" + chart.legend.position = "Right" chart.legend.format.fill.setSolidColor("white"); chart.dataLabels.format.font.size = 15; chart.dataLabels.format.font.color = "black"; diff --git a/samples/excel/89-preview-apis/chart-axis.yaml b/samples/excel/89-preview-apis/chart-axis.yaml index 364c853b2..e52e2afad 100644 --- a/samples/excel/89-preview-apis/chart-axis.yaml +++ b/samples/excel/89-preview-apis/chart-axis.yaml @@ -6,7 +6,7 @@ host: EXCEL api_set: ExcelAPI: 1.7 script: - content: "$(\"#setup\").click(() => tryCatch(setup));\n$(\"#get-axis-unit\").click(() => tryCatch(getAxisUnit));\n$(\"#change-axis-unit\").click(() => tryCatch(changeAxisUnit));\n$(\"#remove-axis-label\").click(() => tryCatch(removeAxisLabel));\n$(\"#show-axis-label\").click(() => tryCatch(showAxisLabel));\n$(\"#set-axis-title\").click(() => tryCatch(setAxisTitle));\n \nasync function getAxisUnit() {\n await Excel.run(async (context) => {\n const sheet = context.workbook.worksheets.getItem(\"Sample\");\n\n let chart = sheet.charts.getItemAt(0);\n let categoryAxis = chart.axes.categoryAxis;\n let valueAxis = chart.axes.valueAxis;\n\n // Load to get display unit.\n valueAxis.load(\"displayUnit\");\n \n await context.sync();\n\n OfficeHelpers.UI.notify(\"The vertical axis display unit is: \" + valueAxis.displayUnit);\n });\n}\n\nasync function changeAxisUnit() {\n await Excel.run(async (context) => {\n const sheet = context.workbook.worksheets.getItem(\"Sample\");\n\n let chart = sheet.charts.getItemAt(0);\n let axis = chart.axes.valueAxis;\n\n // Set display unit.\n axis.displayUnit = \"Hundreds\";\n\n await context.sync();\n });\n}\n\nasync function removeAxisLabel() {\n await Excel.run(async (context) => {\n const sheet = context.workbook.worksheets.getItem(\"Sample\");\n\_\n let chart = sheet.charts.getItemAt(0);\n let axis = chart.axes.valueAxis;\n\n // Remove display unit.\n axis.showDisplayUnitLabel = false;\n\n await context.sync();\n });\n}\n\nasync function showAxisLabel() {\n await Excel.run(async (context) => {\n const sheet = context.workbook.worksheets.getItem(\"Sample\");\n\n let chart = sheet.charts.getItemAt(0);\n let axis = chart.axes.valueAxis;\n\n // Show display unit.\n axis.showDisplayUnitLabel = true;\n await context.sync();\n });\n}\n\nasync function setAxisTitle() {\n await Excel.run(async (context) => {\n const sheet = context.workbook.worksheets.getItem(\"Sample\");\n\n let chart = sheet.charts.getItemAt(0);\n let categoryAxis = chart.axes.categoryAxis;\n\n // Set horizontal axis title.\n categoryAxis.title.text = \"Bicycle parts\";\n\n let valueAxis = chart.axes.valueAxis;\n\n // Set vertical axis title.\n valueAxis.title.text = \"Number of items\";\n \n // Show small gridlines.\n valueAxis.minorGridlines.visible = true;\n\n categoryAxis.title.load(\"text\");\n valueAxis.load(\"text\");\n valueAxis.minorGridlines.load(\"visible\");\n\n await context.sync();\n\n console.log(\"The category axis title is: \" + categoryAxis.title.text);\n console.log(\"The value axis title is: \" + valueAxis.title.text);\n \n OfficeHelpers.UI.notify(\"The minor gridlines visibility is set to: \" + valueAxis.minorGridlines.visible);\n });\n}\n\nasync function setup() {\n await Excel.run(async (context) => {\n const sheet = await OfficeHelpers.ExcelUtilities\n .forceCreateSheet(context.workbook, \"Sample\");\n let expensesTable = sheet.tables.add('A1:E1', true);\n expensesTable.name = \"SalesTable\";\n\n expensesTable.getHeaderRowRange().values = [[\"Product\", \"Qtr1\", \"Qtr2\", \"Qtr3\", \"Qtr4\"]];\n\n expensesTable.rows.add(null, [\n [\"Frames\", 5000, 7000, 6544, 4377],\n [\"Saddles\", 400, 323, 276, 651],\n [\"Brake levers\", 12000, 8766, 8456, 9812],\n [\"Chains\", 1550, 1088, 692, 853],\n [\"Mirrors\", 225, 600, 923, 544],\n [\"Spokes\", 6005, 7634, 4589, 8765]\n ]);\n\n if (Office.context.requirements.isSetSupported(\"ExcelApi\", 1.7)) {\n sheet.getUsedRange().format.autofitColumns();\n sheet.getUsedRange().format.autofitRows();\n }\n\n const chart = createChart(context);\n addVerticalAxisLabel(chart);\n sheet.activate();\n\n await context.sync();\n });\n}\n\nfunction createChart(context: Excel.RequestContext) {\n const sheet = context.workbook.worksheets.getItem(\"Sample\");\n const salesTable = sheet.tables.getItem(\"SalesTable\");\n\n const dataRange = salesTable.getRange();\n\n let chart = sheet.charts.add(\"ColumnClustered\", dataRange, Excel.ChartSeriesBy.columns);\n\n chart.setPosition(\"A15\", \"F30\");\n chart.title.text = \"Quarterly sales chart\";\n chart.legend.position = \"right\"\n chart.legend.format.fill.setSolidColor(\"white\");\n chart.dataLabels.format.font.size = 15;\n chart.dataLabels.format.font.color = \"black\";\n let points = chart.series.getItemAt(0).points;\n\n return chart;\n}\n\nfunction addVerticalAxisLabel(chart: Excel.Chart) {\n let axis = chart.axes.valueAxis;\n axis.displayUnit = \"Thousands\";\n}\n\n/** Default helper for invoking an action and handling errors. */\nasync function tryCatch(callback) {\n try {\n await callback();\n }\n catch (error) {\n OfficeHelpers.UI.notify(error);\n OfficeHelpers.Utilities.log(error);\n }\n}\n" + content: "$(\"#setup\").click(() => tryCatch(setup));\n$(\"#get-axis-unit\").click(() => tryCatch(getAxisUnit));\n$(\"#change-axis-unit\").click(() => tryCatch(changeAxisUnit));\n$(\"#remove-axis-label\").click(() => tryCatch(removeAxisLabel));\n$(\"#show-axis-label\").click(() => tryCatch(showAxisLabel));\n$(\"#set-axis-title\").click(() => tryCatch(setAxisTitle));\n \nasync function getAxisUnit() {\n await Excel.run(async (context) => {\n const sheet = context.workbook.worksheets.getItem(\"Sample\");\n\n let chart = sheet.charts.getItemAt(0);\n let categoryAxis = chart.axes.categoryAxis;\n let valueAxis = chart.axes.valueAxis;\n\n // Load to get display unit.\n valueAxis.load(\"displayUnit\");\n \n await context.sync();\n\n OfficeHelpers.UI.notify(\"The vertical axis display unit is: \" + valueAxis.displayUnit);\n });\n}\n\nasync function changeAxisUnit() {\n await Excel.run(async (context) => {\n const sheet = context.workbook.worksheets.getItem(\"Sample\");\n\n let chart = sheet.charts.getItemAt(0);\n let axis = chart.axes.valueAxis;\n\n // Set display unit.\n axis.displayUnit = \"Hundreds\";\n\n await context.sync();\n });\n}\n\nasync function removeAxisLabel() {\n await Excel.run(async (context) => {\n const sheet = context.workbook.worksheets.getItem(\"Sample\");\n\_\n let chart = sheet.charts.getItemAt(0);\n let axis = chart.axes.valueAxis;\n\n // Remove display unit.\n axis.showDisplayUnitLabel = false;\n\n await context.sync();\n });\n}\n\nasync function showAxisLabel() {\n await Excel.run(async (context) => {\n const sheet = context.workbook.worksheets.getItem(\"Sample\");\n\n let chart = sheet.charts.getItemAt(0);\n let axis = chart.axes.valueAxis;\n\n // Show display unit.\n axis.showDisplayUnitLabel = true;\n await context.sync();\n });\n}\n\nasync function setAxisTitle() {\n await Excel.run(async (context) => {\n const sheet = context.workbook.worksheets.getItem(\"Sample\");\n\n let chart = sheet.charts.getItemAt(0);\n let categoryAxis = chart.axes.categoryAxis;\n\n // Set horizontal axis title.\n categoryAxis.title.text = \"Bicycle parts\";\n\n let valueAxis = chart.axes.valueAxis;\n\n // Set vertical axis title.\n valueAxis.title.text = \"Number of items\";\n \n // Show small gridlines.\n valueAxis.minorGridlines.visible = true;\n\n categoryAxis.title.load(\"text\");\n valueAxis.load(\"text\");\n valueAxis.minorGridlines.load(\"visible\");\n\n await context.sync();\n\n console.log(\"The category axis title is: \" + categoryAxis.title.text);\n console.log(\"The value axis title is: \" + valueAxis.title.text);\n \n OfficeHelpers.UI.notify(\"The minor gridlines visibility is set to: \" + valueAxis.minorGridlines.visible);\n });\n}\n\nasync function setup() {\n await Excel.run(async (context) => {\n const sheet = await OfficeHelpers.ExcelUtilities\n .forceCreateSheet(context.workbook, \"Sample\");\n let expensesTable = sheet.tables.add('A1:E1', true);\n expensesTable.name = \"SalesTable\";\n\n expensesTable.getHeaderRowRange().values = [[\"Product\", \"Qtr1\", \"Qtr2\", \"Qtr3\", \"Qtr4\"]];\n\n expensesTable.rows.add(null, [\n [\"Frames\", 5000, 7000, 6544, 4377],\n [\"Saddles\", 400, 323, 276, 651],\n [\"Brake levers\", 12000, 8766, 8456, 9812],\n [\"Chains\", 1550, 1088, 692, 853],\n [\"Mirrors\", 225, 600, 923, 544],\n [\"Spokes\", 6005, 7634, 4589, 8765]\n ]);\n\n if (Office.context.requirements.isSetSupported(\"ExcelApi\", 1.7)) {\n sheet.getUsedRange().format.autofitColumns();\n sheet.getUsedRange().format.autofitRows();\n }\n\n const chart = createChart(context);\n addVerticalAxisLabel(chart);\n sheet.activate();\n\n await context.sync();\n });\n}\n\nfunction createChart(context: Excel.RequestContext) {\n const sheet = context.workbook.worksheets.getItem(\"Sample\");\n const salesTable = sheet.tables.getItem(\"SalesTable\");\n\n const dataRange = salesTable.getRange();\n\n let chart = sheet.charts.add(\"ColumnClustered\", dataRange, Excel.ChartSeriesBy.columns);\n\n chart.setPosition(\"A15\", \"F30\");\n chart.title.text = \"Quarterly sales chart\";\n chart.legend.position = \"Right\"\n chart.legend.format.fill.setSolidColor(\"white\");\n chart.dataLabels.format.font.size = 15;\n chart.dataLabels.format.font.color = \"black\";\n let points = chart.series.getItemAt(0).points;\n\n return chart;\n}\n\nfunction addVerticalAxisLabel(chart: Excel.Chart) {\n let axis = chart.axes.valueAxis;\n axis.displayUnit = \"Thousands\";\n}\n\n/** Default helper for invoking an action and handling errors. */\nasync function tryCatch(callback) {\n try {\n await callback();\n }\n catch (error) {\n OfficeHelpers.UI.notify(error);\n OfficeHelpers.Utilities.log(error);\n }\n}\n" language: typescript template: content: |- diff --git a/samples/excel/89-preview-apis/chart-legend.yaml b/samples/excel/89-preview-apis/chart-legend.yaml index 4c2ef448b..f7060d854 100644 --- a/samples/excel/89-preview-apis/chart-legend.yaml +++ b/samples/excel/89-preview-apis/chart-legend.yaml @@ -72,7 +72,7 @@ script: chart.setPosition("A15", "F30"); chart.title.text = "Quarterly sales chart"; - chart.legend.position = "right" + chart.legend.position = "Right" chart.legend.format.fill.setSolidColor("white"); chart.dataLabels.format.font.size = 15; chart.dataLabels.format.font.color = "black"; diff --git a/samples/excel/89-preview-apis/chart-point.yaml b/samples/excel/89-preview-apis/chart-point.yaml index 181bf5ffa..1c48c29c0 100644 --- a/samples/excel/89-preview-apis/chart-point.yaml +++ b/samples/excel/89-preview-apis/chart-point.yaml @@ -66,7 +66,7 @@ script: chart.setPosition("A15", "F30"); chart.title.text = "Quarterly sales chart"; - chart.legend.position = "right" + chart.legend.position = "Right" chart.legend.format.fill.setSolidColor("white"); chart.dataLabels.format.font.size = 15; chart.dataLabels.format.font.color = "black"; diff --git a/samples/excel/89-preview-apis/chart-series-markers.yaml b/samples/excel/89-preview-apis/chart-series-markers.yaml index 1af78d5f6..258504bdd 100644 --- a/samples/excel/89-preview-apis/chart-series-markers.yaml +++ b/samples/excel/89-preview-apis/chart-series-markers.yaml @@ -17,7 +17,7 @@ script: let dataRange = sheet.getRange("A1:E7"); // Create an XY scatter chart. - let chart = sheet.charts.add("XYScatterSmooth", dataRange, "auto"); + let chart = sheet.charts.add("XYScatterSmooth", dataRange, "Auto"); chart.title.text = "Bicycle Parts Quarterly Sales"; let series = chart.series; diff --git a/samples/excel/89-preview-apis/chart-series.yaml b/samples/excel/89-preview-apis/chart-series.yaml index 662581296..4b6e6d878 100644 --- a/samples/excel/89-preview-apis/chart-series.yaml +++ b/samples/excel/89-preview-apis/chart-series.yaml @@ -98,10 +98,10 @@ script: const salesTable = sheet.tables.getItem("SalesTable"); let dataRange = sheet.getRange("A1:B7"); - let chart = sheet.charts.add("Line", dataRange, "auto"); + let chart = sheet.charts.add("Line", dataRange, "Auto"); chart.setPosition("A15", "E30"); - chart.legend.position = "right" + chart.legend.position = "Right" chart.legend.format.fill.setSolidColor("white"); chart.dataLabels.format.font.size = 15; chart.dataLabels.format.font.color = "black"; diff --git a/samples/excel/89-preview-apis/chart-trendlines.yaml b/samples/excel/89-preview-apis/chart-trendlines.yaml index 0d83989bc..5f576e29a 100644 --- a/samples/excel/89-preview-apis/chart-trendlines.yaml +++ b/samples/excel/89-preview-apis/chart-trendlines.yaml @@ -117,7 +117,7 @@ script: chart.setPosition("A15", "F30"); chart.title.text = "Quarterly sales chart"; - chart.legend.position = "right" + chart.legend.position = "Right" chart.legend.format.fill.setSolidColor("white"); chart.dataLabels.format.font.size = 15; chart.dataLabels.format.font.color = "black"; diff --git a/samples/excel/89-preview-apis/events-table-changed.yaml b/samples/excel/89-preview-apis/events-table-changed.yaml index 5dce217da..f86558315 100644 --- a/samples/excel/89-preview-apis/events-table-changed.yaml +++ b/samples/excel/89-preview-apis/events-table-changed.yaml @@ -8,7 +8,7 @@ api_set: script: content: |+ $("#setup").click(() => tryCatch(setup)); - $("#egister-on-data-changed-handler").click(() => tryCatch(registerOnDataChangedHandler)); + $("#register-on-data-changed-handler").click(() => tryCatch(registerOnDataChangedHandler)); $("#change-data").click(() => tryCatch(changeData)); $("#register-on-selection-changed-handler").click(() => tryCatch(registerOnSelectionChangedHandler)); $("#change-selection").click(() => tryCatch(changeSelection)); @@ -130,7 +130,7 @@ template:

Try it out

-
diff --git a/samples/excel/89-preview-apis/worksheet-copy.yaml b/samples/excel/89-preview-apis/worksheet-copy.yaml index 19843d845..e8d61aed2 100644 --- a/samples/excel/89-preview-apis/worksheet-copy.yaml +++ b/samples/excel/89-preview-apis/worksheet-copy.yaml @@ -14,7 +14,7 @@ script: let myWorkbook = context.workbook; let sampleSheet = myWorkbook.worksheets.getActiveWorksheet(); - let copiedSheet = sampleSheet.copy("end") + let copiedSheet = sampleSheet.copy("End") sampleSheet.load("name"); copiedSheet.load("name"); diff --git a/samples/excel/90-just-for-fun/color-wheel.yaml b/samples/excel/90-just-for-fun/color-wheel.yaml index bf1ba7147..ee9c2ef09 100644 --- a/samples/excel/90-just-for-fun/color-wheel.yaml +++ b/samples/excel/90-just-for-fun/color-wheel.yaml @@ -40,7 +40,7 @@ script: sheet.charts.load("id"); sheet.activate(); - let theWheel = sheet.charts.add(Excel.ChartType.pie, dataRange, "auto"); + let theWheel = sheet.charts.add(Excel.ChartType.pie, dataRange, "Auto"); theWheel.format.fill.setSolidColor('black') theWheel.setPosition("A1"); From d7cd8f29e01c7393cd4894a317b2fab1fe9a8510 Mon Sep 17 00:00:00 2001 From: Siew Moi Khor Date: Tue, 13 Feb 2018 11:20:39 -0800 Subject: [PATCH 013/660] Update event handler for table collection onChanged event (#136) --- playlists/excel.yaml | 2 +- .../events-tablecollection-changed.yaml | 24 +++++++-------- snippet-extractor-metadata/excel.xlsx | Bin 14821 -> 15027 bytes snippet-extractor-output/excel.yaml | 28 +++++++++--------- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 7beffea32..1a1b850de 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -508,7 +508,7 @@ - id: excel-events-tablecollection-changed name: Events - Table collection changed fileName: events-tablecollection-changed.yaml - description: Add event handlers for table collection onDataChanged event + description: Add event handlers for table collection onChanged event rawUrl: >- https://raw.githubusercontent.com////samples/excel/89-preview-apis/events-tablecollection-changed.yaml group: Preview APIs diff --git a/samples/excel/89-preview-apis/events-tablecollection-changed.yaml b/samples/excel/89-preview-apis/events-tablecollection-changed.yaml index 13cb90273..2d2e34aab 100644 --- a/samples/excel/89-preview-apis/events-tablecollection-changed.yaml +++ b/samples/excel/89-preview-apis/events-tablecollection-changed.yaml @@ -1,24 +1,24 @@ order: 9 id: excel-events-tablecollection-changed name: Events - Table collection changed -description: Add event handlers for table collection onDataChanged event +description: Add event handlers for table collection onChanged event host: EXCEL api_set: ExcelApi: 1.7 script: content: |+ $("#setup").click(() => tryCatch(setup)); - $("#register-on-data-changed-handler").click(() => tryCatch(registerOnDataChangedHandler)); + $("#register-on-changed-handler").click(() => tryCatch(registerOnChangedHandler)); $("#change-data").click(() => tryCatch(changeData)); - async function registerOnDataChangedHandler() { + async function registerOnChangedHandler() { await Excel.run(async (context) => { let tables = context.workbook.tables; - tables.onDataChanged.add(onDataChange); + tables.onChanged.add(onChange); await context.sync(); - OfficeHelpers.UI.notify("A handler has been registered for the table collection onDataChanged event", + OfficeHelpers.UI.notify("A handler has been registered for the table collection onChanged event", "Try changing cell values in the tables, and watch the console output."); }); } @@ -27,7 +27,7 @@ script: await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); - // Change two values to trigger two table onDataChanged events for demonstration purposes. + // Change two values to trigger two table onChanged events for demonstration purposes. // You can also change only one value by commenting out one of the ranges. let range1 = sheet.getRange("B7"); let range2 = sheet.getRange("C15"); @@ -40,7 +40,7 @@ script: }); } - async function onDataChange(event) { + async function onChange(event) { await Excel.run(async (context) => { let table = context.workbook.tables.getItem(event.tableId); let worksheet = context.workbook.worksheets.getItem(event.worksheetId); @@ -48,7 +48,7 @@ script: await context.sync(); - console.log("Handler for table collection onDataChanged event has been triggered. Data changed address : " + event.address); + console.log("Handler for table collection onChanged event has been triggered. Data changed address : " + event.address); console.log("Table Id : " + event.tableId); console.log("Worksheet Id : " + worksheet.name); }); @@ -119,7 +119,7 @@ script: template: content: |+
-

This sample shows how to add an event handler for table collection onDataChanged event.

+

This sample shows how to add an event handler for table collection onChanged event.

@@ -131,8 +131,8 @@ template:

Try it out

-
@@ -171,4 +171,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery \ No newline at end of file + @types/jquery diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 51b47f6db217912f359d8609d2f489cdb2c73b74..7a4950a6f1628857f01dc32fe53d8175ce8c5d61 100644 GIT binary patch delta 5628 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 aQx>Brm&Lj(n^P#rVLOxss1FtXy8H`gTYg#q delta 5426 zcmY*dWmFVg*M(t-AqQqex;tbDK}x!Zau5OOMoPMbkxmsDVrU5m1CVBrk`$2c25Ce> zIs`s^zIxuf*7>v7KIiVW@3}wDsq$I#Di;G0*9_Un&;oF9NP(z_AZjGa%smSRjoRbh zkuz%MwhY5lV13+-d7O!P_I<{g5MCbUYMb@K@h5T*w`1a?#CSD*pJXj_%fpT18uBz$U7w}K?4~t77^ROfz_??o8IES+?!RDtS*VR}@FDb`hMI1fx_EazJ zpO@mFv9`Vi^ktTqF;%1pVZP)=t#J08+U2>P8H#YrbuBI^6VZorBBk_q-RFiIrK`PU z;CAPA`Q}n(8@0?nxiC~;_Dt9J8W$W7aLw~NrnscO(aXY-D8^^llTP@P3I){E=iP^tvC4;DC^#-ztT8vEn1$!?9*KFsOS@qMM=Uov~A z?KfMyaKuI1A_si7?py*X5c3S@d(+xA{B}yq2bP-pUuXTZ{FVr0F!x)I$LE9!sb%~ z^#K5sBVAyYBmJ&p)IL9{eU6z7Skrn4?pSHz)rf zuK z$ftc=_Vf`6HZrGf(dF(EF&56}$c9T;V)As6*IQFG(ydh^+3?8;ab%x8##E`lk8m9M zvLlE4owNP#V)K4@Vd!IfGD~M+>5H@9b;kYJY#q&U%^;Dh&n)zNH_ha}4``F?Foce_~BDR$maa{QQyMX>xyXy8oE- zZmfa4=f>w%PqO)Zn(b^YhZKL~9uoU$7n$v z-b1sg0(<_209^5U3BS;lvV21!n+suE@LT@|vUqa$lax)lyIuslFhr zc`qy`K(`Ui62xQ6)(xNXepJ0YuZ`Jk!~$mLO@MpQCg4sZ>4P?`eAD=%39B3PO{e3l z!9|2{^ac~DL5Ta}4>0>f7ZQ@L3!bj8T}1hor3-z*fVaPEn#Mj}Ka%jRvVF6KT6(Y5 zrv?%E)g({=BpEv+;+c?RK=VV9!V`y@3-uNEmsbuaj2_>Z#Y>OzF#B!F&iqD`q)7nc z2rTr6d{-D4ak= zTd*s*xhzWEKNa9oW>geEv08*IKdtOUZHAq(=rUQYYIoz4otT$b)yv}{l~Vo0Dqec09$K zFt6DYYkWS=MGIYsoy?_}c*8w3wJI-MlCkU&z8z-#I`y4?6e6<5;64Fc-_uv$O0`0- zdpU#H$Ic1dHN<^r(oN~#0G=13_$ZihGf_D)F4<3Hxflp`4HCuWkM;5 zJBdo6WC1$2_-UZ9lrqRV(gf;H%URtXO*o%0RJ3Pj}6FdB- z)BT&$NneE5OKIDp2%}`iS!Wwf3zyoo7BuP6RaRVTF(Z= zh!NOV#nPL6IZ(b!vYMh6cu9K0D|5w+VgW&`m>{bpAeu1+IuI!i4iH7c%!)L2Us0uw zTqH!_ux!p#pLUir8d=kgQs4nm8LJtBqqRfHJbKmJwG)9l$1vc#hF7Y`q+ z)nr>&7}T}Am@VP9$aHIYR_8amFNN00+^GyUbi`o_!A%3D+JLy9Gm<5Zv2K(*nLBy=<&xNaspxhll zGlbj)^Gu0@KG?QOyJ<#;f>>gnlWu2p^x3q*&VkRU%VoIwWXblzIP#`)W(WD+H7&i{ z_2=&4_U^N3H(#CQ(PvFRTY`qSY^xg2&l+7DE=Fh0uc^6?Jr7E~Zjj2mi)U)W*L(Rz z{m-UrE>AwR`1V#Q7yzk1pFAzL3)NNGq;@!AdMwC)Z6WLx+r zjY*k#ZRWNtKGL|YU)RWq)3R65*BgjZv=d4&6gm!B-p zhH3x&B3x8JZgaiqM_hf`y%`U=QmYCK*~(G(WPDe)t~9zR6Y@FpYUEh5*gK~ve5%r{ zfew44BmT*1ANvr2lul_1{AIC=(f7?s3rMpM?<=-nL>iG*j`koAd=~4n4X=?mxtMJKZF z@%-dzo!O<&@|W7no~tq@uDJa!&;iAGa3j1<$!VT0r_B#5Ik1v~c%LMOzzQlR6og4FoJt^)sVsGQ{O9RvMfO$fH(^JJU#@I)< zp(kdpl4!I2>S4en;@;;goSViI_3jyV%3e1m@VgVY_h#moxJ;7|Wqj4-1lEC+!OjZc z;d;I>hM>vK(LsS@<|WZ%?(T}oz<83dn0rQ)t5b1>$cv4%3yOX0byBuB5t{>JSogIO z*lvM#!u;-F2Hp$IbxilJuCnbhsKB75+5q`d<#??zR-LCoPCscrk45v8V%~Zx(HJkd zEA$C8fdMxmiHW8#qa0sILz@x{M%z(7dhK+#)G}#Pil$ z_f;T}uk8zmpq;r79RT5CX<8of^oshz5Yoi9cJjdZ)H0{$>;(qD9nK2 z`z9#FwR)>e~Y>9Fap}y}b(>Q_*({6iZ3WRZFeHte0S@r)` zC_aM1SrFa4Xxt;9+(NNwF1a`pawG>g#3H2_S3 zKpV`squsz;F^@}g9%B}FYh^;VH7J}*-8d73u;xbJ_6bLAwskCdCX1aD7d$p6u_!WB zJDHl`1V2{0m+w9V)1lLyfJdC<92OZ+HYRc$lBbz2XDL} z5LM3_b=G}_Fj=VqIvZw;2l|OnjlB z#45~e0DWYbP|rJg`&+)qfaGrFf~lqtIQ&#nt8?vokAKW&Aom6N&V66X4^_kr^eA}V zn0<=7>TG6Dl|ndoog7q)9Oq6WAB6O@g*28do&M|l4p~8>T13sK!sb^ zp^)_v`nDRfKxL^B7H%7^r+V@B9k07AF#;2GQ9?o0`JoSt@%C)~19KQ&PFb_I`sWUj zabAw}cqmnHbwQ$tGBM&~kO^JV-g6!fM1-PcgaBLhXnQ2@xU678cVVj+vBD(VhkJwj zh6WnOxloM3X|)(z-o$MIZYWj0vA+6W5NY}s^~zCr{vuWJfHhrFv-~c`^7P1r0iG#QFfQZ@y8fz=#sPtTs=3cl&7dfml#nJbn%ObRcNqt4FV^0P2~33 zVR3f4m6}(jz$$4YOq8IvIi;lb2{n@PGxwo$M9~-192o17LWB-E&YNJgViS^MaG<_V zk+?^oD3M{4bcB38?XPi;U@^r4qudu}dYmxDlxo^fVv%2pBPj!3_z$r7r^~-3s$FvO z=nbs+3%{eRH|Iz+6{L!oVi`Q-j@J9e-T~d>4De5jj@f`F5B>zQsTz6o&J>BMd?_BR zC5+t$L`j8eo|g>7jglkVQ!((9TCbqLxFwI?V%(>JCLSdiV}Si?cl3g zKg)a`Y`5$Es?=4z4I-hg5-OAJ!xQ+YN16MZZ3x!NM6(FH@)#*D!QmH6UsQk!hec;q zldI(UwO1QRVBY&hdp(z+uguk_WGMNOVsyWOgsq}ub2Vc2Y~l6Sl+)evK^3>exTP0l zqt>#ooIbeP#0C4UZ?H+I_n@sblVr+POrlbY2L>^#e$nCg4%)2E>~EQFdi=y==hM)e zcFy8`@|Xm=B4mMlnJt>ytG&7?t9|@Kw6v_>vDe|?mmqW3QYlPsp1L1a;y%{5 zWp8%=IpSlBTlLPoYq8w*(ef^i+Z<oX3T9tT@0~eW)+^^FP14rzsH!7_LEkAH|vg7;!e9z6t zst;VY|K&;_!}#4-0;ilv^@n8`he(zq9Bnhbv^AX_K^o1T!)E? zunf0kkoLNF?U`ex>70AAFWI!*ANOT%)gEtU8N4rZ=`HLx`2UPy { const sheet = context.workbook.worksheets.getItem("Sample"); const salesTable = sheet.tables.getItem("SalesTable"); - const salesByQuarterBinding = context.workbook.bindings.add(salesTable.getRange(), "table", "SalesByQuarter"); + const salesByQuarterBinding = context.workbook.bindings.add(salesTable.getRange(), "Table", "SalesByQuarter"); salesByQuarterBinding.onDataChanged.add(onSalesDataChanged); OfficeHelpers.UI.notify("The handler is registered.", "Change the value in one of the data cells and watch this message banner. (Be sure to complete the edit by pressing Enter or clicking in another cell.)"); @@ -180,10 +180,10 @@ Excel.Range.getUsedRangeOrNullObject: if (usedDataRange.isNullObject) { OfficeHelpers.UI.notify("Need Data to Make Chart", "To create a meaningful chart, 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"); + 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.position = "Right"; chart.legend.format.fill.setSolidColor("white"); chart.dataLabels.format.font.size = 15; chart.dataLabels.format.font.color = "black"; @@ -1898,7 +1898,7 @@ Excel.ChartSeries.markerStyle: let dataRange = sheet.getRange("A1:E7"); // Create an XY scatter chart. - let chart = sheet.charts.add("XYScatterSmooth", dataRange, "auto"); + let chart = sheet.charts.add("XYScatterSmooth", dataRange, "Auto"); chart.title.text = "Bicycle Parts Quarterly Sales"; let series = chart.series; @@ -1927,7 +1927,7 @@ Excel.ChartSeries.markerSize: let dataRange = sheet.getRange("A1:E7"); // Create an XY scatter chart. - let chart = sheet.charts.add("XYScatterSmooth", dataRange, "auto"); + let chart = sheet.charts.add("XYScatterSmooth", dataRange, "Auto"); chart.title.text = "Bicycle Parts Quarterly Sales"; let series = chart.series; @@ -1956,7 +1956,7 @@ Excel.TableSelectionChangedEvent.markerForegroundColor: let dataRange = sheet.getRange("A1:E7"); // Create an XY scatter chart. - let chart = sheet.charts.add("XYScatterSmooth", dataRange, "auto"); + let chart = sheet.charts.add("XYScatterSmooth", dataRange, "Auto"); chart.title.text = "Bicycle Parts Quarterly Sales"; let series = chart.series; @@ -1985,7 +1985,7 @@ Excel.TableSelectionChangedEvent.markerBackgroundColor: let dataRange = sheet.getRange("A1:E7"); // Create an XY scatter chart. - let chart = sheet.charts.add("XYScatterSmooth", dataRange, "auto"); + let chart = sheet.charts.add("XYScatterSmooth", dataRange, "Auto"); chart.title.text = "Bicycle Parts Quarterly Sales"; let series = chart.series; @@ -2006,20 +2006,20 @@ Excel.TableSelectionChangedEvent.markerBackgroundColor: await context.sync(); }); -Excel.TableSelectionChangedEvent.onDataChanged: +Excel.TableSelectionChangedEvent.onChanged: - |- await Excel.run(async (context) => { let tables = context.workbook.tables; - tables.onDataChanged.add(onDataChange); + tables.onChanged.add(onChange); await context.sync(); - OfficeHelpers.UI.notify("A handler has been registered for the table collection onDataChanged event", + OfficeHelpers.UI.notify("A handler has been registered for the table collection onChanged event", "Try changing cell values in the tables, and watch the console output."); }); Excel.TableSelectionChangedEvent.worksheetId: - |- - async function onDataChange(event) { + async function onChange(event) { await Excel.run(async (context) => { let table = context.workbook.tables.getItem(event.tableId); let worksheet = context.workbook.worksheets.getItem(event.worksheetId); @@ -2027,14 +2027,14 @@ Excel.TableSelectionChangedEvent.worksheetId: await context.sync(); - console.log("Handler for table collection onDataChanged event has been triggered. Data changed address : " + event.address); + console.log("Handler for table collection onChanged event has been triggered. Data changed address : " + event.address); console.log("Table Id : " + event.tableId); console.log("Worksheet Id : " + worksheet.name); }); } Excel.TableSelectionChangedEvent.tableId: - |- - async function onDataChange(event) { + async function onChange(event) { await Excel.run(async (context) => { let table = context.workbook.tables.getItem(event.tableId); let worksheet = context.workbook.worksheets.getItem(event.worksheetId); @@ -2042,7 +2042,7 @@ Excel.TableSelectionChangedEvent.tableId: await context.sync(); - console.log("Handler for table collection onDataChanged event has been triggered. Data changed address : " + event.address); + console.log("Handler for table collection onChanged event has been triggered. Data changed address : " + event.address); console.log("Table Id : " + event.tableId); console.log("Worksheet Id : " + worksheet.name); }); From 87c4dc3e87e3d78160a3d68b52b46d086125d1aa Mon Sep 17 00:00:00 2001 From: Siew Moi Khor Date: Tue, 13 Feb 2018 15:02:13 -0800 Subject: [PATCH 014/660] Update code samples for onChanged events (#138) * Update code samples for onChanged events * Update code samples for onChanged event --- playlists/excel.yaml | 4 ++-- .../89-preview-apis/events-table-changed.yaml | 22 +++++++++--------- .../events-worksheet-changed.yaml | 22 +++++++++--------- snippet-extractor-metadata/excel.xlsx | Bin 15027 -> 15025 bytes snippet-extractor-output/excel.yaml | 12 +++++----- 5 files changed, 30 insertions(+), 30 deletions(-) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 1a1b850de..39966c2ce 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -499,7 +499,7 @@ - id: excel-events-table-changed name: Events - Table changed fileName: events-table-changed.yaml - description: Add event handlers for table onDataChanged and onSelectionChanged events + description: Add event handlers for table onChanged and onSelectionChanged events rawUrl: >- https://raw.githubusercontent.com////samples/excel/89-preview-apis/events-table-changed.yaml group: Preview APIs @@ -526,7 +526,7 @@ - id: excel-events-worksheet-changed name: Events - Worksheet changed fileName: events-worksheet-changed.yaml - description: Add event handlers for worksheet onDataChanged and onAdded events + description: Add event handlers for worksheet onChanged and onAdded events rawUrl: >- https://raw.githubusercontent.com////samples/excel/89-preview-apis/events-worksheet-changed.yaml group: Preview APIs diff --git a/samples/excel/89-preview-apis/events-table-changed.yaml b/samples/excel/89-preview-apis/events-table-changed.yaml index f86558315..32f8d8f95 100644 --- a/samples/excel/89-preview-apis/events-table-changed.yaml +++ b/samples/excel/89-preview-apis/events-table-changed.yaml @@ -1,26 +1,26 @@ order: 8 id: excel-events-table-changed name: Events - Table changed -description: Add event handlers for table onDataChanged and onSelectionChanged events +description: Add event handlers for table onChanged and onSelectionChanged events host: EXCEL api_set: ExcelApi: 1.7 script: content: |+ $("#setup").click(() => tryCatch(setup)); - $("#register-on-data-changed-handler").click(() => tryCatch(registerOnDataChangedHandler)); + $("#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)); - async function registerOnDataChangedHandler() { + async function registerOnChangedHandler() { await Excel.run(async (context) => { let table = context.workbook.tables.getItemAt(0); - table.onDataChanged.add(onDataChange); + table.onChanged.add(onChange); await context.sync(); - OfficeHelpers.UI.notify("A handler has been registered for the onDataChanged event", + OfficeHelpers.UI.notify("A handler has been registered for the onChanged event", "Try changing a cell value in the table, and watch the console output."); }); } @@ -38,9 +38,9 @@ script: }); } - async function onDataChange(event) { + async function onChange(event) { await Excel.run(async (context) => { - console.log("Handler for table onDataChanged event has been triggered. Data changed address : " + event.address); + console.log("Handler for table onChanged event has been triggered. Data changed address : " + event.address); }); } @@ -118,7 +118,7 @@ script: template: content: |+
-

This sample shows how to add event handlers for table onDataChanged and onSelectionChanged events.

+

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

@@ -130,8 +130,8 @@ template:

Try it out

-
@@ -184,4 +184,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery \ No newline at end of file + @types/jquery diff --git a/samples/excel/89-preview-apis/events-worksheet-changed.yaml b/samples/excel/89-preview-apis/events-worksheet-changed.yaml index b24f88a7d..95296e059 100644 --- a/samples/excel/89-preview-apis/events-worksheet-changed.yaml +++ b/samples/excel/89-preview-apis/events-worksheet-changed.yaml @@ -1,26 +1,26 @@ order: 11 id: excel-events-worksheet-changed name: Events - Worksheet changed -description: Add event handlers for worksheet onDataChanged and onAdded events +description: Add event handlers for worksheet onChanged and onAdded events host: EXCEL api_set: ExcelApi: 1.7 script: content: |+ $("#setup").click(() => tryCatch(setup)); - $("#register-on-data-changed-handler").click(() => tryCatch(registerOnDataChangedHandler)); + $("#register-on-changed-handler").click(() => tryCatch(registerOnChangedHandler)); $("#data-changed").click(() => tryCatch(changeData)); $("#register-on-add-handler").click(() => tryCatch(registerOnAddHandler)); $("#add-worksheet").click(() => tryCatch(addWorksheet)); - async function registerOnDataChangedHandler() { + async function registerOnChangedHandler() { await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); - sheet.onDataChanged.add(onDataChange); + sheet.onChanged.add(onChange); await context.sync(); - OfficeHelpers.UI.notify("A handler has been registered for the onDataChanged event."); + OfficeHelpers.UI.notify("A handler has been registered for the onChanged event."); }); } @@ -37,9 +37,9 @@ script: }); } - async function onDataChange(event) { + async function onChange(event) { await Excel.run(async (context) => { - console.log("Handler for worksheet onDataChanged event has been triggered. Data changed address : " + event.address); + console.log("Handler for worksheet onChanged event has been triggered. Data changed address : " + event.address); }); } @@ -118,7 +118,7 @@ script: template: content: |+
-

This sample shows how to add event handlers for worksheet onDataChanged and onAdded events.

+

This sample shows how to add event handlers for worksheet onChanged and onAdded events.

@@ -130,8 +130,8 @@ template:

Try it out

-
@@ -184,4 +184,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery \ No newline at end of file + @types/jquery diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 7a4950a6f1628857f01dc32fe53d8175ce8c5d61..346bde96678a805d80eb88f77be94e26608082bf 100644 GIT binary patch delta 6129 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 delta 6128 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 diff --git a/snippet-extractor-output/excel.yaml b/snippet-extractor-output/excel.yaml index 14e38470b..fcc6d1abf 100644 --- a/snippet-extractor-output/excel.yaml +++ b/snippet-extractor-output/excel.yaml @@ -1818,15 +1818,15 @@ Excel.TableSelectionChangedEvent.address: console.log("Handler for table onSelectionChanged event has been triggered. The new selection is : " + args.address); }); } -Excel.WorksheetAddedEvent.onDataChanged: +Excel.WorksheetAddedEvent.onChanged: - |- await Excel.run(async (context) => { let table = context.workbook.tables.getItemAt(0); - table.onDataChanged.add(onDataChange); + table.onChanged.add(onChange); await context.sync(); - OfficeHelpers.UI.notify("A handler has been registered for the onDataChanged event", + OfficeHelpers.UI.notify("A handler has been registered for the onChanged event", "Try changing a cell value in the table, and watch the console output."); }); Excel.WorksheetDataChangedEvent.onSelectionChanged: @@ -1851,15 +1851,15 @@ Excel.WorksheetAddedEvent.onAdded: OfficeHelpers.UI.notify("A handler has been registered for the OnAdded event", "Try adding a worksheet, and watch the console output."); }); -Excel.WorksheetDeactivatedEvent.onDataChanged: +Excel.WorksheetDeactivatedEvent.onChanged: - |- await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); - sheet.onDataChanged.add(onDataChange); + sheet.onChanged.add(onChange); await context.sync(); - OfficeHelpers.UI.notify("A handler has been registered for the onDataChanged event."); + OfficeHelpers.UI.notify("A handler has been registered for the onChanged event."); }); Excel.WorksheetActivatedEvent.worksheetId: - |- From 8e38c23e8b842315ec9e5be63e2572d2fd6e50e0 Mon Sep 17 00:00:00 2001 From: Ricky Kirkham Date: Tue, 13 Feb 2018 17:23:02 -0800 Subject: [PATCH 015/660] [Michael's change] use regular arrays and synchronous file-reading instead of observables --- .vscode/launch.json | 2 ++ config/build.ts | 21 +++++++-------- config/helpers.ts | 64 +++++++++++++++------------------------------ 3 files changed, 32 insertions(+), 55 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 4e2e4803e..6860b3da1 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -9,6 +9,8 @@ "request": "launch", "name": "Launch Program", "program": "${workspaceRoot}\\config\\build.js", + "cwd": "${workspaceFolder}", + "console": "integratedTerminal", "outFiles": [] }, { diff --git a/config/build.ts b/config/build.ts index 5769c0733..9b5dc353c 100644 --- a/config/build.ts +++ b/config/build.ts @@ -66,18 +66,15 @@ const defaultApiSets = { })(); -async function processSnippets(processedSnippets) { - return new Promise((resolve, reject) => { - banner('Loading & processing snippets'); - let files$ = getFiles(path.resolve(PRIVATE_SAMPLES)); - files$ = files$.merge(getFiles(path.resolve(PUBLIC_SAMPLES))); - - files$ - .mergeMap((file) => (processAndValidateSnippet(file))) - .filter(file => file !== null) - .map(file => processedSnippets.add(file.rawUrl, file)) - .subscribe(null, reject, resolve); - }); +async function processSnippets(processedSnippets: Dictionary) { + banner('Loading & processing snippets'); + let files: SnippetFileInput[] = [] + .concat(getFiles(path.resolve(PRIVATE_SAMPLES))) + .concat(getFiles(path.resolve(PUBLIC_SAMPLES))); + + (await Promise.all(files.map(file => processAndValidateSnippet(file)))) + .filter(file => file !== null) + .map(file => processedSnippets.add(file.rawUrl, file)); // Helpers: diff --git a/config/helpers.ts b/config/helpers.ts index c933485fa..0df238a89 100644 --- a/config/helpers.ts +++ b/config/helpers.ts @@ -3,12 +3,6 @@ import * as fs from 'fs'; import * as os from 'os'; import * as chalk from 'chalk'; import * as jsyaml from 'js-yaml'; -import { Observable } from 'rxjs/Observable'; -import 'rxjs/add/operator/mergeMap'; -import 'rxjs/add/operator/catch'; -import 'rxjs/add/observable/from'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/observable/throw'; import { console } from './status'; import * as rimraf from 'rimraf'; @@ -195,7 +189,7 @@ export const loadFileContents = (path: string) => * @param fullPath An absolute path to the file. * @param root An absolute path to the root directory. */ -export const getFileMetadata = (fullPath: string, root: string) => { +export function getFileMetadata(fullPath: string, root: string): SnippetFileInput { /* Determine the platform as windows uses '\' where as linux uses '/' */ const delimiter = os.platform() === 'win32' ? '\\' : '/'; @@ -216,59 +210,43 @@ export const getFileMetadata = (fullPath: string, root: string) => { host = host.toLowerCase(); - return Observable.of({ + return { relativePath: relativePath, fullPath, isPublic: !(/[\\/]private-samples$/.test(root)), host, group, file_name - }); -}; + }; +} /** * Recurrsively crawl through a folder and return all the files in it. * @param root An absolute path to the directory. */ -export function getFiles(root: string): Observable { - return getFilesHelper(root, root); - - /** A recursive helper: - * @param dir An absolute path to the directory. - * @param root An absolute path to the root directory. - */ - function getFilesHelper(dir: string, root: string): Observable { - /* - * Convert all the files into an Observable stream of files. - * This allows us to focus the remainder of the operations - * on a PER FILE basis. - */ - return Observable - .from(readDir(dir)) - .mergeMap(files => Observable.from(files)) - .mergeMap((file) => { - const filePath = path.join(dir, file); +export function getFiles(root: string): SnippetFileInput[] { + let files: SnippetFileInput[] = []; + syncRecurseThroughDirectory(root); + return files; + + + // 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(filePath)}. Name must only contain lowercase letters, numbers, and hyphens.`); + throw new Error(`Invalid name at ${chalk.bold.red(fullPath)}. Name must only contain lowercase letters, numbers, and hyphens.`); } - /* - * Check if the file is a folder and either return - * an Observable to the recurrsive walk operation or - * return an Observable of the file object itself. - */ - return Observable - .from(isDir(filePath)) - .mergeMap(pathIsDirectory => { - const files$ = pathIsDirectory ? - getFilesHelper(filePath, root) : - getFileMetadata(filePath, root); - return files$.catch(error => Observable.throw(error)); - }) - .catch(error => Observable.throw(error)); + if (fs.statSync(fullPath).isDirectory()) { + syncRecurseThroughDirectory(fullPath); + } else { + files.push(getFileMetadata(fullPath, root)); + } }); } } From cbf6ab977d3a5cf4f5c99b22cad7cb87e2164449 Mon Sep 17 00:00:00 2001 From: Zlatkovsky Date: Tue, 13 Feb 2018 17:44:17 -0800 Subject: [PATCH 016/660] Tiny tweak --- .gitignore | 1 + config/build.documentation.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 1cb7fa7e3..a133b9391 100644 --- a/.gitignore +++ b/.gitignore @@ -61,6 +61,7 @@ typings/** **/*.js **/*.map 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 diff --git a/config/build.documentation.ts b/config/build.documentation.ts index 2d522db74..9bf8c3206 100644 --- a/config/build.documentation.ts +++ b/config/build.documentation.ts @@ -134,7 +134,7 @@ function getExtractedDataFromSnippet( let arrayIndex = fullSnippetTextArray.findIndex(text => text.indexOf(targetText) >= 0); if (arrayIndex < 0) { - throw new Error(`Could not find the text "${targetText}" within snippet "${filename}"`); + throw new Error(`Invalid entry in the metadata mapping file -- snippet function "${row.snippetFunction}" does not exist within snippet "${filename}"`); } const functionDeclarationLine = fullSnippetTextArray[arrayIndex]; const functionHasNoParams = functionDeclarationLine.indexOf(targetText + ')') >= 0; From 813e59e2ee2ae8445a86a1e1c4f70bc3ec1d0f27 Mon Sep 17 00:00:00 2001 From: Rick-Kirkham Date: Wed, 14 Feb 2018 13:54:44 -0800 Subject: [PATCH 017/660] Create additional chart types (#140) * [Michael's change] use regular arrays and synchronous file-reading instead of observables * show how to create a variety of chart types --- .vscode/launch.json | 2 + config/build.ts | 21 +- config/helpers.ts | 64 ++--- playlists/excel.yaml | 9 + .../create-additional-chart-types.yaml | 254 ++++++++++++++++++ view/excel.json | 1 + 6 files changed, 296 insertions(+), 55 deletions(-) create mode 100644 samples/excel/50-chart/create-additional-chart-types.yaml diff --git a/.vscode/launch.json b/.vscode/launch.json index 4e2e4803e..6860b3da1 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -9,6 +9,8 @@ "request": "launch", "name": "Launch Program", "program": "${workspaceRoot}\\config\\build.js", + "cwd": "${workspaceFolder}", + "console": "integratedTerminal", "outFiles": [] }, { diff --git a/config/build.ts b/config/build.ts index 5769c0733..9b5dc353c 100644 --- a/config/build.ts +++ b/config/build.ts @@ -66,18 +66,15 @@ const defaultApiSets = { })(); -async function processSnippets(processedSnippets) { - return new Promise((resolve, reject) => { - banner('Loading & processing snippets'); - let files$ = getFiles(path.resolve(PRIVATE_SAMPLES)); - files$ = files$.merge(getFiles(path.resolve(PUBLIC_SAMPLES))); - - files$ - .mergeMap((file) => (processAndValidateSnippet(file))) - .filter(file => file !== null) - .map(file => processedSnippets.add(file.rawUrl, file)) - .subscribe(null, reject, resolve); - }); +async function processSnippets(processedSnippets: Dictionary) { + banner('Loading & processing snippets'); + let files: SnippetFileInput[] = [] + .concat(getFiles(path.resolve(PRIVATE_SAMPLES))) + .concat(getFiles(path.resolve(PUBLIC_SAMPLES))); + + (await Promise.all(files.map(file => processAndValidateSnippet(file)))) + .filter(file => file !== null) + .map(file => processedSnippets.add(file.rawUrl, file)); // Helpers: diff --git a/config/helpers.ts b/config/helpers.ts index c933485fa..0df238a89 100644 --- a/config/helpers.ts +++ b/config/helpers.ts @@ -3,12 +3,6 @@ import * as fs from 'fs'; import * as os from 'os'; import * as chalk from 'chalk'; import * as jsyaml from 'js-yaml'; -import { Observable } from 'rxjs/Observable'; -import 'rxjs/add/operator/mergeMap'; -import 'rxjs/add/operator/catch'; -import 'rxjs/add/observable/from'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/observable/throw'; import { console } from './status'; import * as rimraf from 'rimraf'; @@ -195,7 +189,7 @@ export const loadFileContents = (path: string) => * @param fullPath An absolute path to the file. * @param root An absolute path to the root directory. */ -export const getFileMetadata = (fullPath: string, root: string) => { +export function getFileMetadata(fullPath: string, root: string): SnippetFileInput { /* Determine the platform as windows uses '\' where as linux uses '/' */ const delimiter = os.platform() === 'win32' ? '\\' : '/'; @@ -216,59 +210,43 @@ export const getFileMetadata = (fullPath: string, root: string) => { host = host.toLowerCase(); - return Observable.of({ + return { relativePath: relativePath, fullPath, isPublic: !(/[\\/]private-samples$/.test(root)), host, group, file_name - }); -}; + }; +} /** * Recurrsively crawl through a folder and return all the files in it. * @param root An absolute path to the directory. */ -export function getFiles(root: string): Observable { - return getFilesHelper(root, root); - - /** A recursive helper: - * @param dir An absolute path to the directory. - * @param root An absolute path to the root directory. - */ - function getFilesHelper(dir: string, root: string): Observable { - /* - * Convert all the files into an Observable stream of files. - * This allows us to focus the remainder of the operations - * on a PER FILE basis. - */ - return Observable - .from(readDir(dir)) - .mergeMap(files => Observable.from(files)) - .mergeMap((file) => { - const filePath = path.join(dir, file); +export function getFiles(root: string): SnippetFileInput[] { + let files: SnippetFileInput[] = []; + syncRecurseThroughDirectory(root); + return files; + + + // 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(filePath)}. Name must only contain lowercase letters, numbers, and hyphens.`); + throw new Error(`Invalid name at ${chalk.bold.red(fullPath)}. Name must only contain lowercase letters, numbers, and hyphens.`); } - /* - * Check if the file is a folder and either return - * an Observable to the recurrsive walk operation or - * return an Observable of the file object itself. - */ - return Observable - .from(isDir(filePath)) - .mergeMap(pathIsDirectory => { - const files$ = pathIsDirectory ? - getFilesHelper(filePath, root) : - getFileMetadata(filePath, root); - return files$.catch(error => Observable.throw(error)); - }) - .catch(error => Observable.throw(error)); + if (fs.statSync(fullPath).isDirectory()) { + syncRecurseThroughDirectory(fullPath); + } else { + files.push(getFileMetadata(fullPath, root)); + } }); } } diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 39966c2ce..c4372bd84 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -348,6 +348,15 @@ group: Chart api_set: ExcelApi: 1.1 +- id: excel-chart-create-additonal-types + name: Create Additional Chart Types + fileName: create-additional-chart-types.yaml + description: 'Create area, radar, pie, 3D, cylinder, and 100% charts.' + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/50-chart/create-additional-chart-types.yaml + group: Chart + api_set: + ExcelApi: 1.1 - id: excel-pivottable-refresh-pivot-table name: Refresh pivot table fileName: refresh-pivot-table.yaml diff --git a/samples/excel/50-chart/create-additional-chart-types.yaml b/samples/excel/50-chart/create-additional-chart-types.yaml new file mode 100644 index 000000000..8c0db5b01 --- /dev/null +++ b/samples/excel/50-chart/create-additional-chart-types.yaml @@ -0,0 +1,254 @@ +order: 5 +id: excel-chart-create-additonal-types +name: Create Additional Chart Types +description: 'Create area, radar, pie, 3D, cylinder, and 100% charts.' +host: EXCEL +api_set: + ExcelApi: 1.1 +script: + content: |- + $("#setup").click(() => tryCatch(setup)); + $("#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)); + + 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("A49", "M64"); + 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("H34", "M47"); + 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 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("A27", "F47"); + 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("H17", "M32"); + 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 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("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 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("A10", "F25"); + 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) => { + await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + const sheet = context.workbook.worksheets.getItem("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] + ]); + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { + 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) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |- +
+

This sample shows how to create area, radar, pie, 3D, cylinder, and 100% charts.

+
+ +
+

Set up

+ +
+ +
+

Try it out

+ +

+ +

+ +

+ +

+ +

+ +

+ language: html +style: + content: | + /* Your style goes here */ + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/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 + + @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 \ No newline at end of file diff --git a/view/excel.json b/view/excel.json index fec57e6e5..36f5f47e9 100644 --- a/view/excel.json +++ b/view/excel.json @@ -39,6 +39,7 @@ "excel-chart-create-doughnut-chart": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/create-doughnut-chart.yaml", "excel-chart-create-line-chart": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/create-line-chart.yaml", "excel-chart-create-xyscatter-chart": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/create-xyscatter-chart.yaml", + "excel-chart-create-additonal-types": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/create-additional-chart-types.yaml", "excel-pivottable-refresh-pivot-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/55-pivot-table/refresh-pivot-table.yaml", "excel-events-data-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/data-changed.yaml", "excel-events-selection-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/selection-changed.yaml", From 1817a6deaf6fc11ab4b7322e9f4b6c29ad457210 Mon Sep 17 00:00:00 2001 From: Rick-Kirkham Date: Wed, 14 Feb 2018 14:02:29 -0800 Subject: [PATCH 018/660] Data validation (#141) * [Michael's change] use regular arrays and synchronous file-reading instead of observables * shows how to add data validation to ranges --- playlists/excel.yaml | 12 ++ .../89-preview-apis/data-validation.yaml | 178 ++++++++++++++++++ view/excel.json | 1 + 3 files changed, 191 insertions(+) create mode 100644 samples/excel/89-preview-apis/data-validation.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index c4372bd84..b3a49ac90 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -606,6 +606,18 @@ group: Preview APIs api_set: ExcelApi: 1.7 +- id: excel-data-validation + name: Data Validation + fileName: data-validation.yaml + description: >- + This snippet shows how to programmatically set a variety of data validation + rules on ranges, how to prompt users to enter valid data, and how to popup a + warning or informational message when invalid data is entered. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/data-validation.yaml + group: Preview APIs + api_set: + ExcelApi: 1.7 - id: excel-workbook-get-active-cell name: Get active cell fileName: workbook-get-active-cell.yaml diff --git a/samples/excel/89-preview-apis/data-validation.yaml b/samples/excel/89-preview-apis/data-validation.yaml new file mode 100644 index 000000000..3398d42ca --- /dev/null +++ b/samples/excel/89-preview-apis/data-validation.yaml @@ -0,0 +1,178 @@ +id: excel-data-validation +name: Data Validation +description: 'This snippet shows how to programmatically set a variety of data validation rules on ranges, how to prompt users to enter valid data, and how to popup a warning or informational message when invalid data is entered.' +host: EXCEL +api_set: + ExcelApi: 1.7 +script: + content: | + $("#setup").click(() => tryCatch(setup)); + $("#positive-number").click(() => tryCatch(addPositiveNumberRequirement)); + $("#require-approved-location").click(() => tryCatch(requireApprovedName)); + $("#comment-redundancy").click(() => tryCatch(warnAboutCommentRedundancy)); + + async function addPositiveNumberRequirement() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + 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(); + }); + } + + async function requireApprovedName() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const nameRange = sheet.tables.getItem("NameOptionsTable").columns .getItem("Baby Name").getDataBodyRange(); + + // When you are developing, it is a good practice to + // clear the dataValidation object with each run of your code. + nameRange.dataValidation.clear(); + // A bug in the preview version of the Excel 1.7 API makes the + // next line necessary. It can be deleted when the 1.7 API releases. + nameRange.dataValidation.load(); + + const nameSourceRange = context.workbook.worksheets.getItem("Names").getRange("A1:A3"); + + let approvedListRule = { + list: { + inCellDropDown: true, + // When bug is fixed, replace hardcoded list with + // the range object. + source: '=Names!$A$1:$A$3' + } + }; + nameRange.dataValidation.rule = approvedListRule; + + await context.sync(); + }); + } + + async function warnAboutCommentRedundancy() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + 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(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + const wrbk = context.workbook; + const decisionSheet = wrbk.worksheets.getActiveWorksheet(); + decisionSheet.name = "Decision"; + const optionsTable = decisionSheet.tables.add("A1:C4", true /*hasHeaders*/); + optionsTable.name = "NameOptionsTable"; + optionsTable.showBandedRows = false; + + optionsTable.getHeaderRowRange().values = [["Baby Name", "Ranking", "Comments"]]; + + decisionSheet.getUsedRange().format.autofitColumns(); + decisionSheet.getUsedRange().format.autofitRows(); + decisionSheet.activate(); + + // The names that will be allowed in the Baby Name column are + // listed in a range on the Names sheet. + const namesSheet = wrbk.worksheets.add("Names"); + namesSheet.getRange("A1:A3").values = [["Sue"], ["Ricky"], ["Liz"]]; + + await context.sync(); + }); + } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |+ +

Click this first and only once.

+ +

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.

+ +

Press Require positive numbers and then click on a cell in the Ranking column. Note the prompt. Try to set the value to a negative number and note the error message.

+ +

Press Warn about comment redundancy and then click on a cell in the Comments column and enter a comment that includes the baby name for the same row. Note the informational message that pops up.

+ + + + language: html +style: + content: | + /* Your style goes here */ + 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 + + @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 \ No newline at end of file diff --git a/view/excel.json b/view/excel.json index 36f5f47e9..12e88b095 100644 --- a/view/excel.json +++ b/view/excel.json @@ -67,6 +67,7 @@ "excel-gridlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-gridlines.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-tab-color.yaml", "excel-worksheet-freeze-panes": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-freeze-panes.yaml", + "excel-data-validation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/data-validation.yaml", "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/workbook-get-active-cell.yaml", "excel-worksheet-copy": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-copy.yaml", "excel-just-for-fun-gradient": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-just-for-fun/gradient.yaml", From 3da8baa647ebd0386031a97750027b6983b0c586 Mon Sep 17 00:00:00 2001 From: Rick-Kirkham Date: Wed, 14 Feb 2018 14:17:55 -0800 Subject: [PATCH 019/660] Data validation and create charts snippets (#142) * Tiny tweak * Create additional chart types (#140) * [Michael's change] use regular arrays and synchronous file-reading instead of observables * show how to create a variety of chart types * Data validation (#141) * [Michael's change] use regular arrays and synchronous file-reading instead of observables * shows how to add data validation to ranges --- .gitignore | 1 + .vscode/launch.json | 2 + config/build.documentation.ts | 2 +- config/build.ts | 21 +- config/helpers.ts | 64 ++--- playlists/excel.yaml | 21 ++ .../create-additional-chart-types.yaml | 254 ++++++++++++++++++ .../89-preview-apis/data-validation.yaml | 178 ++++++++++++ view/excel.json | 2 + 9 files changed, 489 insertions(+), 56 deletions(-) create mode 100644 samples/excel/50-chart/create-additional-chart-types.yaml create mode 100644 samples/excel/89-preview-apis/data-validation.yaml diff --git a/.gitignore b/.gitignore index 1cb7fa7e3..a133b9391 100644 --- a/.gitignore +++ b/.gitignore @@ -61,6 +61,7 @@ typings/** **/*.js **/*.map 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 diff --git a/.vscode/launch.json b/.vscode/launch.json index 4e2e4803e..6860b3da1 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -9,6 +9,8 @@ "request": "launch", "name": "Launch Program", "program": "${workspaceRoot}\\config\\build.js", + "cwd": "${workspaceFolder}", + "console": "integratedTerminal", "outFiles": [] }, { diff --git a/config/build.documentation.ts b/config/build.documentation.ts index 2d522db74..9bf8c3206 100644 --- a/config/build.documentation.ts +++ b/config/build.documentation.ts @@ -134,7 +134,7 @@ function getExtractedDataFromSnippet( let arrayIndex = fullSnippetTextArray.findIndex(text => text.indexOf(targetText) >= 0); if (arrayIndex < 0) { - throw new Error(`Could not find the text "${targetText}" within snippet "${filename}"`); + throw new Error(`Invalid entry in the metadata mapping file -- snippet function "${row.snippetFunction}" does not exist within snippet "${filename}"`); } const functionDeclarationLine = fullSnippetTextArray[arrayIndex]; const functionHasNoParams = functionDeclarationLine.indexOf(targetText + ')') >= 0; diff --git a/config/build.ts b/config/build.ts index 5769c0733..9b5dc353c 100644 --- a/config/build.ts +++ b/config/build.ts @@ -66,18 +66,15 @@ const defaultApiSets = { })(); -async function processSnippets(processedSnippets) { - return new Promise((resolve, reject) => { - banner('Loading & processing snippets'); - let files$ = getFiles(path.resolve(PRIVATE_SAMPLES)); - files$ = files$.merge(getFiles(path.resolve(PUBLIC_SAMPLES))); - - files$ - .mergeMap((file) => (processAndValidateSnippet(file))) - .filter(file => file !== null) - .map(file => processedSnippets.add(file.rawUrl, file)) - .subscribe(null, reject, resolve); - }); +async function processSnippets(processedSnippets: Dictionary) { + banner('Loading & processing snippets'); + let files: SnippetFileInput[] = [] + .concat(getFiles(path.resolve(PRIVATE_SAMPLES))) + .concat(getFiles(path.resolve(PUBLIC_SAMPLES))); + + (await Promise.all(files.map(file => processAndValidateSnippet(file)))) + .filter(file => file !== null) + .map(file => processedSnippets.add(file.rawUrl, file)); // Helpers: diff --git a/config/helpers.ts b/config/helpers.ts index c933485fa..0df238a89 100644 --- a/config/helpers.ts +++ b/config/helpers.ts @@ -3,12 +3,6 @@ import * as fs from 'fs'; import * as os from 'os'; import * as chalk from 'chalk'; import * as jsyaml from 'js-yaml'; -import { Observable } from 'rxjs/Observable'; -import 'rxjs/add/operator/mergeMap'; -import 'rxjs/add/operator/catch'; -import 'rxjs/add/observable/from'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/observable/throw'; import { console } from './status'; import * as rimraf from 'rimraf'; @@ -195,7 +189,7 @@ export const loadFileContents = (path: string) => * @param fullPath An absolute path to the file. * @param root An absolute path to the root directory. */ -export const getFileMetadata = (fullPath: string, root: string) => { +export function getFileMetadata(fullPath: string, root: string): SnippetFileInput { /* Determine the platform as windows uses '\' where as linux uses '/' */ const delimiter = os.platform() === 'win32' ? '\\' : '/'; @@ -216,59 +210,43 @@ export const getFileMetadata = (fullPath: string, root: string) => { host = host.toLowerCase(); - return Observable.of({ + return { relativePath: relativePath, fullPath, isPublic: !(/[\\/]private-samples$/.test(root)), host, group, file_name - }); -}; + }; +} /** * Recurrsively crawl through a folder and return all the files in it. * @param root An absolute path to the directory. */ -export function getFiles(root: string): Observable { - return getFilesHelper(root, root); - - /** A recursive helper: - * @param dir An absolute path to the directory. - * @param root An absolute path to the root directory. - */ - function getFilesHelper(dir: string, root: string): Observable { - /* - * Convert all the files into an Observable stream of files. - * This allows us to focus the remainder of the operations - * on a PER FILE basis. - */ - return Observable - .from(readDir(dir)) - .mergeMap(files => Observable.from(files)) - .mergeMap((file) => { - const filePath = path.join(dir, file); +export function getFiles(root: string): SnippetFileInput[] { + let files: SnippetFileInput[] = []; + syncRecurseThroughDirectory(root); + return files; + + + // 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(filePath)}. Name must only contain lowercase letters, numbers, and hyphens.`); + throw new Error(`Invalid name at ${chalk.bold.red(fullPath)}. Name must only contain lowercase letters, numbers, and hyphens.`); } - /* - * Check if the file is a folder and either return - * an Observable to the recurrsive walk operation or - * return an Observable of the file object itself. - */ - return Observable - .from(isDir(filePath)) - .mergeMap(pathIsDirectory => { - const files$ = pathIsDirectory ? - getFilesHelper(filePath, root) : - getFileMetadata(filePath, root); - return files$.catch(error => Observable.throw(error)); - }) - .catch(error => Observable.throw(error)); + if (fs.statSync(fullPath).isDirectory()) { + syncRecurseThroughDirectory(fullPath); + } else { + files.push(getFileMetadata(fullPath, root)); + } }); } } diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 39966c2ce..b3a49ac90 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -348,6 +348,15 @@ group: Chart api_set: ExcelApi: 1.1 +- id: excel-chart-create-additonal-types + name: Create Additional Chart Types + fileName: create-additional-chart-types.yaml + description: 'Create area, radar, pie, 3D, cylinder, and 100% charts.' + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/50-chart/create-additional-chart-types.yaml + group: Chart + api_set: + ExcelApi: 1.1 - id: excel-pivottable-refresh-pivot-table name: Refresh pivot table fileName: refresh-pivot-table.yaml @@ -597,6 +606,18 @@ group: Preview APIs api_set: ExcelApi: 1.7 +- id: excel-data-validation + name: Data Validation + fileName: data-validation.yaml + description: >- + This snippet shows how to programmatically set a variety of data validation + rules on ranges, how to prompt users to enter valid data, and how to popup a + warning or informational message when invalid data is entered. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/data-validation.yaml + group: Preview APIs + api_set: + ExcelApi: 1.7 - id: excel-workbook-get-active-cell name: Get active cell fileName: workbook-get-active-cell.yaml diff --git a/samples/excel/50-chart/create-additional-chart-types.yaml b/samples/excel/50-chart/create-additional-chart-types.yaml new file mode 100644 index 000000000..8c0db5b01 --- /dev/null +++ b/samples/excel/50-chart/create-additional-chart-types.yaml @@ -0,0 +1,254 @@ +order: 5 +id: excel-chart-create-additonal-types +name: Create Additional Chart Types +description: 'Create area, radar, pie, 3D, cylinder, and 100% charts.' +host: EXCEL +api_set: + ExcelApi: 1.1 +script: + content: |- + $("#setup").click(() => tryCatch(setup)); + $("#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)); + + 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("A49", "M64"); + 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("H34", "M47"); + 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 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("A27", "F47"); + 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("H17", "M32"); + 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 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("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 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("A10", "F25"); + 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) => { + await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + const sheet = context.workbook.worksheets.getItem("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] + ]); + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { + 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) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |- +
+

This sample shows how to create area, radar, pie, 3D, cylinder, and 100% charts.

+
+ +
+

Set up

+ +
+ +
+

Try it out

+ +

+ +

+ +

+ +

+ +

+ +

+ language: html +style: + content: | + /* Your style goes here */ + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/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 + + @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 \ No newline at end of file diff --git a/samples/excel/89-preview-apis/data-validation.yaml b/samples/excel/89-preview-apis/data-validation.yaml new file mode 100644 index 000000000..3398d42ca --- /dev/null +++ b/samples/excel/89-preview-apis/data-validation.yaml @@ -0,0 +1,178 @@ +id: excel-data-validation +name: Data Validation +description: 'This snippet shows how to programmatically set a variety of data validation rules on ranges, how to prompt users to enter valid data, and how to popup a warning or informational message when invalid data is entered.' +host: EXCEL +api_set: + ExcelApi: 1.7 +script: + content: | + $("#setup").click(() => tryCatch(setup)); + $("#positive-number").click(() => tryCatch(addPositiveNumberRequirement)); + $("#require-approved-location").click(() => tryCatch(requireApprovedName)); + $("#comment-redundancy").click(() => tryCatch(warnAboutCommentRedundancy)); + + async function addPositiveNumberRequirement() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + 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(); + }); + } + + async function requireApprovedName() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const nameRange = sheet.tables.getItem("NameOptionsTable").columns .getItem("Baby Name").getDataBodyRange(); + + // When you are developing, it is a good practice to + // clear the dataValidation object with each run of your code. + nameRange.dataValidation.clear(); + // A bug in the preview version of the Excel 1.7 API makes the + // next line necessary. It can be deleted when the 1.7 API releases. + nameRange.dataValidation.load(); + + const nameSourceRange = context.workbook.worksheets.getItem("Names").getRange("A1:A3"); + + let approvedListRule = { + list: { + inCellDropDown: true, + // When bug is fixed, replace hardcoded list with + // the range object. + source: '=Names!$A$1:$A$3' + } + }; + nameRange.dataValidation.rule = approvedListRule; + + await context.sync(); + }); + } + + async function warnAboutCommentRedundancy() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + 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(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + const wrbk = context.workbook; + const decisionSheet = wrbk.worksheets.getActiveWorksheet(); + decisionSheet.name = "Decision"; + const optionsTable = decisionSheet.tables.add("A1:C4", true /*hasHeaders*/); + optionsTable.name = "NameOptionsTable"; + optionsTable.showBandedRows = false; + + optionsTable.getHeaderRowRange().values = [["Baby Name", "Ranking", "Comments"]]; + + decisionSheet.getUsedRange().format.autofitColumns(); + decisionSheet.getUsedRange().format.autofitRows(); + decisionSheet.activate(); + + // The names that will be allowed in the Baby Name column are + // listed in a range on the Names sheet. + const namesSheet = wrbk.worksheets.add("Names"); + namesSheet.getRange("A1:A3").values = [["Sue"], ["Ricky"], ["Liz"]]; + + await context.sync(); + }); + } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |+ +

Click this first and only once.

+ +

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.

+ +

Press Require positive numbers and then click on a cell in the Ranking column. Note the prompt. Try to set the value to a negative number and note the error message.

+ +

Press Warn about comment redundancy and then click on a cell in the Comments column and enter a comment that includes the baby name for the same row. Note the informational message that pops up.

+ + + + language: html +style: + content: | + /* Your style goes here */ + 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 + + @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 \ No newline at end of file diff --git a/view/excel.json b/view/excel.json index fec57e6e5..12e88b095 100644 --- a/view/excel.json +++ b/view/excel.json @@ -39,6 +39,7 @@ "excel-chart-create-doughnut-chart": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/create-doughnut-chart.yaml", "excel-chart-create-line-chart": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/create-line-chart.yaml", "excel-chart-create-xyscatter-chart": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/create-xyscatter-chart.yaml", + "excel-chart-create-additonal-types": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/create-additional-chart-types.yaml", "excel-pivottable-refresh-pivot-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/55-pivot-table/refresh-pivot-table.yaml", "excel-events-data-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/data-changed.yaml", "excel-events-selection-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/selection-changed.yaml", @@ -66,6 +67,7 @@ "excel-gridlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-gridlines.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-tab-color.yaml", "excel-worksheet-freeze-panes": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-freeze-panes.yaml", + "excel-data-validation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/data-validation.yaml", "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/workbook-get-active-cell.yaml", "excel-worksheet-copy": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-copy.yaml", "excel-just-for-fun-gradient": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-just-for-fun/gradient.yaml", From b3551bfae2518af0f7c9c02ac679cff06fe8ed66 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 14 Feb 2018 16:38:09 -0800 Subject: [PATCH 020/660] shows how to protect workbook structure and data in worksheet --- playlists/excel.yaml | 9 + ...a-in-worksheet-and-workbook-structure.yaml | 258 ++++++++++++++++++ view/excel.json | 1 + 3 files changed, 268 insertions(+) create mode 100644 samples/excel/89-preview-apis/protect-data-in-worksheet-and-workbook-structure.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index b3a49ac90..49cecc96c 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -618,6 +618,15 @@ group: Preview APIs api_set: ExcelApi: 1.7 +- id: excel-protect-data-in-worksheet-and-workbook-structure + name: Protect data in worksheet and the workbook structure + fileName: protect-data-in-worksheet-and-workbook-structure.yaml + description: Shows how to protect data in a worksheet and the workbook structure. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/protect-data-in-worksheet-and-workbook-structure.yaml + group: Preview APIs + api_set: + ExcelApi: 1.7 - id: excel-workbook-get-active-cell name: Get active cell fileName: workbook-get-active-cell.yaml diff --git a/samples/excel/89-preview-apis/protect-data-in-worksheet-and-workbook-structure.yaml b/samples/excel/89-preview-apis/protect-data-in-worksheet-and-workbook-structure.yaml new file mode 100644 index 000000000..308d3caf0 --- /dev/null +++ b/samples/excel/89-preview-apis/protect-data-in-worksheet-and-workbook-structure.yaml @@ -0,0 +1,258 @@ +id: excel-protect-data-in-worksheet-and-workbook-structure +name: Protect data in worksheet and the workbook structure +description: Shows how to protect data in a worksheet and the workbook structure. +host: EXCEL +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)); + + async function protectDataInWorksheet() { + await Excel.run(async (context) => { + await worksheetHelper(context, true, false); + }); + } + + async function unprotectDataInWorksheet() { + await Excel.run(async (context) => { + await worksheetHelper(context, false, false); + }); + } + + async function protectWorkbookStructure() { + await Excel.run(async (context) => { + await workbookHelper(context, true, false); + }); + } + + async function unprotectWorkbookStructure() { + await Excel.run(async (context) => { + await workbookHelper(context, false, false); + }); + } + + async function passwordProtectDataInWorksheet() { + await Excel.run(async (context) => { + await worksheetHelper(context, true, true, await passwordHandler()); + }); + } + + async function passwordUnprotectDataInWorksheet() { + await Excel.run(async (context) => { + await worksheetHelper(context, false, true, await passwordHandler()); + }); + } + + async function passwordProtectWorkbookStructure() { + await Excel.run(async (context) => { + await workbookHelper(context, true, true, await passwordHandler()); + }); + } + + async function passwordUnprotectWorkbookStructure() { + await Excel.run(async (context) => { + await workbookHelper(context, false, true, await passwordHandler()); + }); + } + + async function worksheetHelper(context: Excel.RequestContext, expectProtection: boolean, expectPassword: boolean, password?: string) { + + await passwordHelper(expectPassword, password); + await Excel.run(async (context) => { + let activeSheet = context.workbook.worksheets.getActiveWorksheet(); + activeSheet.load("protection/protected"); + + await context.sync(); + + if (expectProtection && !activeSheet.protection.protected) { + activeSheet.protection.protect(null, password); + } else if (!expectProtection) { + activeSheet.protection.unprotect(password); + } + + activeSheet.load("name"); + activeSheet.load("protection/protected"); + + await context.sync(); + + console.log("Expected: Worksheet '" + activeSheet.name + "' should " + await messageHelper(expectProtection) + ". Protected? " + activeSheet.protection.protected); + }); + } + + async function workbookHelper(context: Excel.RequestContext, expectProtection: boolean, expectPassword: boolean, password?: string) { + + await passwordHelper(expectPassword, password); + await Excel.run(async (context) => { + let workbook = context.workbook; + workbook.load("protection/protected"); + + await context.sync(); + + if (expectProtection && !workbook.protection.protected) { + workbook.protection.protect(password); + } else if (!expectProtection) { + workbook.protection.unprotect(password); + } + + workbook.load("protection/protected"); + + await context.sync(); + + console.log("Expected: This workbook should " + await messageHelper(expectProtection) + ". Protected? " + workbook.protection.protected); + }); + } + + async function messageHelper(expectProtection: boolean): Promise { + + let message = "not be protected"; + if (expectProtection) { + message = "be protected"; + } + + return message; + } + + async function passwordHelper(expectPassword: boolean, password?: string) { + + if (expectPassword && (null == password || password.trim() == "")) { + let errorMessage = "Password is expected but not provided"; + OfficeHelpers.UI.notify(errorMessage); + OfficeHelpers.Utilities.log(errorMessage); + } + } + + async function passwordHandler(): Promise { + let settingName = "TheTestPasswordUsedByThisSnippet"; + let savedPassword = Office.context.document.settings.get(settingName); + if (null == savedPassword || savedPassword.trim() == "") { + let item = document.getElementById("test-password"); + let testPassword = item.hasAttribute("value") ? item.getAttribute("value") : null; + if (null != testPassword && testPassword.trim() != "") { + // store test password for retrieval upon re-opening this workbook + Office.context.document.settings.set(settingName, testPassword); + await Office.context.document.settings.saveAsync(); + + savedPassword = testPassword; + } + } else { + document.getElementById("test-password").setAttribute("value", savedPassword); + } + + console.log("Test password is " + savedPassword); + + return savedPassword; + } + + async function setup() { + await Excel.run(async (context) => { + const sheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "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] + ]); + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { + 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) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |- +
+

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

+
+ +
+

Set up

+ +
+ +
+

Try it out

+

Protect without password

+

+

+

+

+

Protect with password

+ + +

+

+

+

+
+ language: html +style: + content: | + /* Your style goes here */ + 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 + + @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 \ No newline at end of file diff --git a/view/excel.json b/view/excel.json index 12e88b095..4a13f8e8a 100644 --- a/view/excel.json +++ b/view/excel.json @@ -68,6 +68,7 @@ "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-tab-color.yaml", "excel-worksheet-freeze-panes": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-freeze-panes.yaml", "excel-data-validation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/data-validation.yaml", + "excel-protect-data-in-worksheet-and-workbook-structure": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/protect-data-in-worksheet-and-workbook-structure.yaml", "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/workbook-get-active-cell.yaml", "excel-worksheet-copy": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-copy.yaml", "excel-just-for-fun-gradient": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-just-for-fun/gradient.yaml", From 4fedb13a3ea3e29cf623d9c703bb4ae8e5a50166 Mon Sep 17 00:00:00 2001 From: Siew Moi Khor Date: Wed, 21 Feb 2018 13:28:48 -0800 Subject: [PATCH 021/660] Set the doughnutHoleSize property in a series for a dough nut chart. (#144) * Set the doughnutHoleSize property in a series for a dough nut chart. * Set the doughnutHoleSize property in a series for a dough nut chart. --- playlists/excel.yaml | 9 ++ .../chart-series-doughnutholesize.yaml | 138 ++++++++++++++++++ view/excel.json | 1 + 3 files changed, 148 insertions(+) create mode 100644 samples/excel/89-preview-apis/chart-series-doughnutholesize.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index b3a49ac90..3be4f73ce 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -606,6 +606,15 @@ group: Preview APIs api_set: ExcelApi: 1.7 +- id: excel-chart-series-doughnutholesize + name: Chart series - doughnutHoleSize + fileName: chart-series-doughnutholesize.yaml + description: Set the doughnutHoleSize property in a series for a dough nut chart. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/chart-series-doughnutholesize.yaml + group: Preview APIs + api_set: + ExcelApi: 1.7 - id: excel-data-validation name: Data Validation fileName: data-validation.yaml diff --git a/samples/excel/89-preview-apis/chart-series-doughnutholesize.yaml b/samples/excel/89-preview-apis/chart-series-doughnutholesize.yaml new file mode 100644 index 000000000..181a87102 --- /dev/null +++ b/samples/excel/89-preview-apis/chart-series-doughnutholesize.yaml @@ -0,0 +1,138 @@ +id: excel-chart-series-doughnutholesize +name: Chart series - doughnutHoleSize +description: Set the doughnutHoleSize property in a series for a dough nut chart. +host: EXCEL +api_set: + ExcelApi: 1.7 +script: + content: | + $("#setup").click(() => tryCatch(setup)); + $("#add-series").click(() => tryCatch(addSeries)); + + async function addSeries() { + 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); + + // Set the size of the dough nut hole. + // The hole size is expressed as a percentage + // of the chart size. + newSeries.doughnutHoleSize = 80; + + await context.sync(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + const sheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "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] + ]); + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + } + + createDoughnutExplodedChart(context); + sheet.activate(); + + await context.sync(); + }); + } + + async function createDoughnutExplodedChart(context: Excel.RequestContext) { + const sheet = context.workbook.worksheets.getItem("Sample"); + const salesTable = sheet.tables.getItem("SalesTable"); + + let dataRange = sheet.getRange("A1:B7"); + let chart = sheet.charts.add("doughnutExploded", dataRange, "auto"); + + chart.setPosition("A15", "E30"); + chart.legend.position = "right" + chart.legend.format.fill.setSolidColor("white"); + chart.dataLabels.format.font.size = 15; + chart.dataLabels.format.font.color = "black"; + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |+ +
+

This sample shows how to use the doughnutHoleSize property in a series for an exploded dough nut chart.

+
+ +
+

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 + + @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 diff --git a/view/excel.json b/view/excel.json index 12e88b095..7502e9edf 100644 --- a/view/excel.json +++ b/view/excel.json @@ -67,6 +67,7 @@ "excel-gridlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-gridlines.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-tab-color.yaml", "excel-worksheet-freeze-panes": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-freeze-panes.yaml", + "excel-chart-series-doughnutholesize": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-series-doughnutholesize.yaml", "excel-data-validation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/data-validation.yaml", "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/workbook-get-active-cell.yaml", "excel-worksheet-copy": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-copy.yaml", From 81e9b961a17ab3112baff3693a57e713a1c91e5d Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 21 Feb 2018 14:57:32 -0800 Subject: [PATCH 022/660] update based on feedback --- ...a-in-worksheet-and-workbook-structure.yaml | 127 ++++++++++++------ 1 file changed, 86 insertions(+), 41 deletions(-) diff --git a/samples/excel/89-preview-apis/protect-data-in-worksheet-and-workbook-structure.yaml b/samples/excel/89-preview-apis/protect-data-in-worksheet-and-workbook-structure.yaml index 308d3caf0..278e2e424 100644 --- a/samples/excel/89-preview-apis/protect-data-in-worksheet-and-workbook-structure.yaml +++ b/samples/excel/89-preview-apis/protect-data-in-worksheet-and-workbook-structure.yaml @@ -18,65 +18,81 @@ script: async function protectDataInWorksheet() { await Excel.run(async (context) => { - await worksheetHelper(context, true, false); + let activeSheet = context.workbook.worksheets.getActiveWorksheet(); + activeSheet.load("protection/protected"); + + await context.sync(); + + if (!activeSheet.protection.protected) { + activeSheet.protection.protect(); + } + + activeSheet.load("name"); + activeSheet.load("protection/protected"); + + await context.sync(); + + console.log("Expected: Worksheet '" + activeSheet.name + "' should " + messageHelper(true) + ". Protected? " + activeSheet.protection.protected); }); } async function unprotectDataInWorksheet() { await Excel.run(async (context) => { - await worksheetHelper(context, false, false); + let activeSheet = context.workbook.worksheets.getActiveWorksheet(); + activeSheet.protection.unprotect(); + + activeSheet.load("name"); + activeSheet.load("protection/protected"); + + await context.sync(); + + console.log("Expected: Worksheet '" + activeSheet.name + "' should " + messageHelper(false) + ". Protected? " + activeSheet.protection.protected); }); } async function protectWorkbookStructure() { await Excel.run(async (context) => { - await workbookHelper(context, true, false); - }); - } + let workbook = context.workbook; + workbook.load("protection/protected"); - async function unprotectWorkbookStructure() { - await Excel.run(async (context) => { - await workbookHelper(context, false, false); - }); - } + await context.sync(); - async function passwordProtectDataInWorksheet() { - await Excel.run(async (context) => { - await worksheetHelper(context, true, true, await passwordHandler()); - }); - } + if (!workbook.protection.protected) { + workbook.protection.protect(); + } - async function passwordUnprotectDataInWorksheet() { - await Excel.run(async (context) => { - await worksheetHelper(context, false, true, await passwordHandler()); - }); - } + workbook.load("protection/protected"); - async function passwordProtectWorkbookStructure() { - await Excel.run(async (context) => { - await workbookHelper(context, true, true, await passwordHandler()); + await context.sync(); + + console.log("Expected: This workbook should " + messageHelper(true) + ". Protected? " + workbook.protection.protected); }); } - async function passwordUnprotectWorkbookStructure() { + async function unprotectWorkbookStructure() { await Excel.run(async (context) => { - await workbookHelper(context, false, true, await passwordHandler()); + let workbook = context.workbook; + workbook.protection.unprotect(); + + workbook.load("protection/protected"); + + await context.sync(); + + console.log("Expected: This workbook should " + messageHelper(false) + ". Protected? " + workbook.protection.protected); }); } - async function worksheetHelper(context: Excel.RequestContext, expectProtection: boolean, expectPassword: boolean, password?: string) { - - await passwordHelper(expectPassword, password); + async function passwordProtectDataInWorksheet() { + let password = await passwordHandler(); + passwordHelper(password); await Excel.run(async (context) => { let activeSheet = context.workbook.worksheets.getActiveWorksheet(); activeSheet.load("protection/protected"); await context.sync(); - if (expectProtection && !activeSheet.protection.protected) { + if (!activeSheet.protection.protected) { activeSheet.protection.protect(null, password); - } else if (!expectProtection) { - activeSheet.protection.unprotect(password); } activeSheet.load("name"); @@ -84,34 +100,63 @@ script: await context.sync(); - console.log("Expected: Worksheet '" + activeSheet.name + "' should " + await messageHelper(expectProtection) + ". Protected? " + activeSheet.protection.protected); + console.log("Expected: Worksheet '" + activeSheet.name + "' should " + messageHelper(true) + ". Protected? " + activeSheet.protection.protected); }); } - async function workbookHelper(context: Excel.RequestContext, expectProtection: boolean, expectPassword: boolean, password?: string) { + async function passwordUnprotectDataInWorksheet() { + let password = await passwordHandler(); + passwordHelper(password); + await Excel.run(async (context) => { + let activeSheet = context.workbook.worksheets.getActiveWorksheet(); + activeSheet.protection.unprotect(password); - await passwordHelper(expectPassword, password); + activeSheet.load("name"); + activeSheet.load("protection/protected"); + + await context.sync(); + + console.log("Expected: Worksheet '" + activeSheet.name + "' should " + messageHelper(false) + ". Protected? " + activeSheet.protection.protected); + }); + } + + async function passwordProtectWorkbookStructure() { + let password = await passwordHandler(); + passwordHelper(password); await Excel.run(async (context) => { let workbook = context.workbook; workbook.load("protection/protected"); await context.sync(); - if (expectProtection && !workbook.protection.protected) { + if (!workbook.protection.protected) { workbook.protection.protect(password); - } else if (!expectProtection) { - workbook.protection.unprotect(password); } workbook.load("protection/protected"); await context.sync(); - console.log("Expected: This workbook should " + await messageHelper(expectProtection) + ". Protected? " + workbook.protection.protected); + console.log("Expected: This workbook should " + messageHelper(true) + ". Protected? " + workbook.protection.protected); + }); + } + + async function passwordUnprotectWorkbookStructure() { + let password = await passwordHandler(); + passwordHelper(password); + await Excel.run(async (context) => { + let workbook = context.workbook; + workbook.protection.unprotect(password); + + workbook.load("protection/protected"); + + await context.sync(); + + console.log("Expected: This workbook should " + messageHelper(false) + ". Protected? " + workbook.protection.protected); }); } - async function messageHelper(expectProtection: boolean): Promise { + function messageHelper(expectProtection: boolean): string { let message = "not be protected"; if (expectProtection) { @@ -121,9 +166,9 @@ script: return message; } - async function passwordHelper(expectPassword: boolean, password?: string) { + function passwordHelper(password: string) { - if (expectPassword && (null == password || password.trim() == "")) { + if (null == password || password.trim() == "") { let errorMessage = "Password is expected but not provided"; OfficeHelpers.UI.notify(errorMessage); OfficeHelpers.Utilities.log(errorMessage); From 367590641365e65803ff166d2bf23277336956d9 Mon Sep 17 00:00:00 2001 From: Siew Moi Khor Date: Thu, 22 Feb 2018 12:59:37 -0800 Subject: [PATCH 023/660] Get and set title substrings for a chart. (#146) * Get and set title substring for a chart. * Get and set title substring for a chart. --- playlists/excel.yaml | 9 ++ .../chart-title-substring.yaml | 128 ++++++++++++++++++ view/excel.json | 1 + 3 files changed, 138 insertions(+) create mode 100644 samples/excel/89-preview-apis/chart-title-substring.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 3be4f73ce..15348d591 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -615,6 +615,15 @@ group: Preview APIs api_set: ExcelApi: 1.7 +- id: excel-chart-title-substring + name: Chart - Title substring + fileName: chart-title-substring.yaml + description: Get and set title substring for a chart. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/chart-title-substring.yaml + group: Preview APIs + api_set: + ExcelApi: 1.7 - id: excel-data-validation name: Data Validation fileName: data-validation.yaml diff --git a/samples/excel/89-preview-apis/chart-title-substring.yaml b/samples/excel/89-preview-apis/chart-title-substring.yaml new file mode 100644 index 000000000..22fd98636 --- /dev/null +++ b/samples/excel/89-preview-apis/chart-title-substring.yaml @@ -0,0 +1,128 @@ +id: excel-chart-title-substring +name: Chart - Title substring +description: Get and set title substring for a chart. +host: EXCEL +api_set: + ExcelApi: 1.7 +script: + content: |+ + $("#setup").click(() => tryCatch(setup)); + $("#change-title-substring").click(() => tryCatch(changeTitleSubstring)); + + async function changeTitleSubstring() { + await Excel.run(async (context) => { + let sheet = context.workbook.worksheets.getItem("Sample"); + let chart = sheet.charts.getItemAt(0); + + // Get first seven characters of the title and highlight them to green. + let font = chart.title.getSubstring(0, 7).font; + font.color = "Green"; + + await context.sync(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + const sheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "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] + ]); + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + } + + createChart(context); + sheet.activate(); + + await context.sync(); + }); + } + + function createChart(context: Excel.RequestContext) { + let sheet = context.workbook.worksheets.getItem("Sample"); + + let dataRange = sheet.getRange("A3:E7"); + let chart = sheet.charts.add("columnStacked", dataRange, "auto"); + chart.title.text = "Bicycle parts sales"; + chart.setPosition("A10", "H33"); + chart.legend.position = "right"; + chart.legend.format.fill.setSolidColor("white"); + chart.dataLabels.format.font.size = 15; + chart.dataLabels.format.font.color = "black"; + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + + language: typescript +template: + content: |+ +
+

This sample shows how to get and set title substring for a chart.

+
+ +
+

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 + + @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 \ No newline at end of file diff --git a/view/excel.json b/view/excel.json index 7502e9edf..d0dc52929 100644 --- a/view/excel.json +++ b/view/excel.json @@ -68,6 +68,7 @@ "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-tab-color.yaml", "excel-worksheet-freeze-panes": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-freeze-panes.yaml", "excel-chart-series-doughnutholesize": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-series-doughnutholesize.yaml", + "excel-chart-title-substring": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-title-substring.yaml", "excel-data-validation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/data-validation.yaml", "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/workbook-get-active-cell.yaml", "excel-worksheet-copy": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-copy.yaml", From 3b1b6aaec97d93f450f3484697a68e075450fb13 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 22 Feb 2018 17:47:41 -0800 Subject: [PATCH 024/660] add instructions and remove logs --- ...a-in-worksheet-and-workbook-structure.yaml | 130 ++++++------------ 1 file changed, 44 insertions(+), 86 deletions(-) diff --git a/samples/excel/89-preview-apis/protect-data-in-worksheet-and-workbook-structure.yaml b/samples/excel/89-preview-apis/protect-data-in-worksheet-and-workbook-structure.yaml index 278e2e424..43d35ac2f 100644 --- a/samples/excel/89-preview-apis/protect-data-in-worksheet-and-workbook-structure.yaml +++ b/samples/excel/89-preview-apis/protect-data-in-worksheet-and-workbook-structure.yaml @@ -26,13 +26,6 @@ script: if (!activeSheet.protection.protected) { activeSheet.protection.protect(); } - - activeSheet.load("name"); - activeSheet.load("protection/protected"); - - await context.sync(); - - console.log("Expected: Worksheet '" + activeSheet.name + "' should " + messageHelper(true) + ". Protected? " + activeSheet.protection.protected); }); } @@ -40,13 +33,6 @@ script: await Excel.run(async (context) => { let activeSheet = context.workbook.worksheets.getActiveWorksheet(); activeSheet.protection.unprotect(); - - activeSheet.load("name"); - activeSheet.load("protection/protected"); - - await context.sync(); - - console.log("Expected: Worksheet '" + activeSheet.name + "' should " + messageHelper(false) + ". Protected? " + activeSheet.protection.protected); }); } @@ -60,12 +46,6 @@ script: if (!workbook.protection.protected) { workbook.protection.protect(); } - - workbook.load("protection/protected"); - - await context.sync(); - - console.log("Expected: This workbook should " + messageHelper(true) + ". Protected? " + workbook.protection.protected); }); } @@ -73,12 +53,6 @@ script: await Excel.run(async (context) => { let workbook = context.workbook; workbook.protection.unprotect(); - - workbook.load("protection/protected"); - - await context.sync(); - - console.log("Expected: This workbook should " + messageHelper(false) + ". Protected? " + workbook.protection.protected); }); } @@ -94,13 +68,6 @@ script: if (!activeSheet.protection.protected) { activeSheet.protection.protect(null, password); } - - activeSheet.load("name"); - activeSheet.load("protection/protected"); - - await context.sync(); - - console.log("Expected: Worksheet '" + activeSheet.name + "' should " + messageHelper(true) + ". Protected? " + activeSheet.protection.protected); }); } @@ -110,13 +77,6 @@ script: await Excel.run(async (context) => { let activeSheet = context.workbook.worksheets.getActiveWorksheet(); activeSheet.protection.unprotect(password); - - activeSheet.load("name"); - activeSheet.load("protection/protected"); - - await context.sync(); - - console.log("Expected: Worksheet '" + activeSheet.name + "' should " + messageHelper(false) + ". Protected? " + activeSheet.protection.protected); }); } @@ -132,12 +92,6 @@ script: if (!workbook.protection.protected) { workbook.protection.protect(password); } - - workbook.load("protection/protected"); - - await context.sync(); - - console.log("Expected: This workbook should " + messageHelper(true) + ". Protected? " + workbook.protection.protected); }); } @@ -147,25 +101,9 @@ script: await Excel.run(async (context) => { let workbook = context.workbook; workbook.protection.unprotect(password); - - workbook.load("protection/protected"); - - await context.sync(); - - console.log("Expected: This workbook should " + messageHelper(false) + ". Protected? " + workbook.protection.protected); }); } - function messageHelper(expectProtection: boolean): string { - - let message = "not be protected"; - if (expectProtection) { - message = "be protected"; - } - - return message; - } - function passwordHelper(password: string) { if (null == password || password.trim() == "") { @@ -253,33 +191,53 @@ template:

Try it out

Protect without password

-

-

-

-

+

+

Click the next button and then notice that you cannot edit data in the worksheet.

+ +

+

+ +

+

+

Click the next button and then notice that you cannot add or delete a worksheet.

+ +

+

+ +

Protect with password

-

-

-

-

+

+

Click the next button and then notice that you cannot edit data in the worksheet.

+ +

+

+ +

+

+

Click the next button and then notice that you cannot add or delete a worksheet.

+ +

+

+ +

language: html style: From 531d5cd3db2b365300dd17057ae8ba83e868379e Mon Sep 17 00:00:00 2001 From: Siew Moi Khor Date: Fri, 23 Feb 2018 14:19:48 -0800 Subject: [PATCH 025/660] Change the plot order of series in a chart. (#147) --- playlists/excel.yaml | 9 ++ .../chart-series-plotorder.yaml | 140 ++++++++++++++++++ view/excel.json | 1 + 3 files changed, 150 insertions(+) create mode 100644 samples/excel/89-preview-apis/chart-series-plotorder.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 15348d591..7ca8fec00 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -615,6 +615,15 @@ group: Preview APIs api_set: ExcelApi: 1.7 +- id: excel-chart-series-plotorder + name: Chart - series plot order + fileName: chart-series-plotorder.yaml + description: Order the plotting of series in a chart. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/chart-series-plotorder.yaml + group: Preview APIs + api_set: + ExcelAPI: 1.7 - id: excel-chart-title-substring name: Chart - Title substring fileName: chart-title-substring.yaml diff --git a/samples/excel/89-preview-apis/chart-series-plotorder.yaml b/samples/excel/89-preview-apis/chart-series-plotorder.yaml new file mode 100644 index 000000000..26d7f384b --- /dev/null +++ b/samples/excel/89-preview-apis/chart-series-plotorder.yaml @@ -0,0 +1,140 @@ +id: excel-chart-series-plotorder +name: Chart - series plot order +description: Order the plotting of series in a chart. +host: EXCEL +api_set: + ExcelAPI: 1.7 +script: + content: | + $("#setup").click(() => tryCatch(setup)); + $("#order-series-plot").click(() => tryCatch(addSeries)); + + async function addSeries() { + await Excel.run(async (context) => { + let 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 series. + let newSeries = seriesCollection.series.add("Qtr2"); + newSeries.setValues(rangeSelection); + newSeries.setXAxisValues(xRangeSelection); + let newSeries2 = seriesCollection.series.add("Qtr3"); + newSeries2.setValues(rangeSelection); + newSeries2.setXAxisValues(xRangeSelection); + + // Order the plotting of the series. + // In this case, Qtr 3 appears first, + // followed by Qtr 2, then Qtr 1. + newSeries2.plotOrder = 0; + newSeries.plotOrder = 1; + + await context.sync(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + let sheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "Sample"); + let salesTable = sheet.tables.add('A1:E1', true); + salesTable.name = "SalesTable"; + + salesTable.getHeaderRowRange().values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4"]]; + + salesTable.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] + ]); + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + } + + createChart(context); + sheet.activate(); + + await context.sync(); + }); + } + + async function createChart(context: Excel.RequestContext) { + const sheet = context.workbook.worksheets.getItem("Sample"); + const salesTable = sheet.tables.getItem("SalesTable"); + + let dataRange = sheet.getRange("A1:B7"); + let chart = sheet.charts.add("ColumnClustered", dataRange, "auto"); + + chart.setPosition("A15", "E30"); + chart.legend.position = "right" + chart.legend.format.fill.setSolidColor("white"); + chart.dataLabels.format.font.size = 15; + chart.dataLabels.format.font.color = "black"; + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: | +
+

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

+
+ +
+

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 + + @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 \ No newline at end of file diff --git a/view/excel.json b/view/excel.json index d0dc52929..4d7492d11 100644 --- a/view/excel.json +++ b/view/excel.json @@ -68,6 +68,7 @@ "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-tab-color.yaml", "excel-worksheet-freeze-panes": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-freeze-panes.yaml", "excel-chart-series-doughnutholesize": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-series-doughnutholesize.yaml", + "excel-chart-series-plotorder": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-series-plotorder.yaml", "excel-chart-title-substring": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-title-substring.yaml", "excel-data-validation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/data-validation.yaml", "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/workbook-get-active-cell.yaml", From ea3eebc820d74a0475ad9c4098f6a35f06a4a7d3 Mon Sep 17 00:00:00 2001 From: Rick-Kirkham Date: Mon, 26 Feb 2018 17:08:01 -0800 Subject: [PATCH 026/660] specify beta office.js --- samples/word/50-common-patterns/multiple-property-set.yaml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/samples/word/50-common-patterns/multiple-property-set.yaml b/samples/word/50-common-patterns/multiple-property-set.yaml index c96d59d0f..116a53bff 100644 --- a/samples/word/50-common-patterns/multiple-property-set.yaml +++ b/samples/word/50-common-patterns/multiple-property-set.yaml @@ -48,8 +48,7 @@ script: OfficeHelpers.Utilities.log(error); } } - language: typescript -template: + language: typescriptbetatemplate: content: |-

This sample shows how to format text using the object.set method of the Word API.

@@ -105,7 +104,7 @@ style: language: css libraries: |- // Office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/beta/hosted/office.js // NPM libraries jquery@3.1.1 @@ -119,4 +118,4 @@ libraries: |- @types/office-js @types/jquery @types/core-js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts \ No newline at end of file + @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts From 43bb41a36e497e8c57197058d179f2f88c3b527f Mon Sep 17 00:00:00 2001 From: Kim Brandl - MSFT Date: Tue, 27 Feb 2018 17:08:48 -0800 Subject: [PATCH 027/660] Fix yaml issues with multiple-property-set Word snippet and move it to 50-preview-apis folder. (#148) --- playlists/word.yaml | 4 ++-- .../multiple-property-set.yaml | 19 +++++++++---------- view/word.json | 2 +- 3 files changed, 12 insertions(+), 13 deletions(-) rename samples/word/{50-common-patterns => 50-preview-apis}/multiple-property-set.yaml (93%) diff --git a/playlists/word.yaml b/playlists/word.yaml index d3aab13a2..5ccfa2144 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -182,8 +182,8 @@ fileName: multiple-property-set.yaml description: Setting multiple properties at once with the API object set() method. rawUrl: >- - https://raw.githubusercontent.com////samples/word/50-common-patterns/multiple-property-set.yaml - group: Common Patterns + https://raw.githubusercontent.com////samples/word/50-preview-apis/multiple-property-set.yaml + group: Preview APIs api_set: WordApi: 1.4 - id: word-fabric-insert-form-data diff --git a/samples/word/50-common-patterns/multiple-property-set.yaml b/samples/word/50-preview-apis/multiple-property-set.yaml similarity index 93% rename from samples/word/50-common-patterns/multiple-property-set.yaml rename to samples/word/50-preview-apis/multiple-property-set.yaml index 116a53bff..877b57dfd 100644 --- a/samples/word/50-common-patterns/multiple-property-set.yaml +++ b/samples/word/50-preview-apis/multiple-property-set.yaml @@ -48,7 +48,8 @@ script: OfficeHelpers.Utilities.log(error); } } - language: typescriptbetatemplate: + language: typescript +template: content: |-

This sample shows how to format text using the object.set method of the Word API.

@@ -103,19 +104,17 @@ style: } language: css libraries: |- - // Office.js https://appsforoffice.microsoft.com/lib/beta/hosted/office.js + https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts - // NPM libraries - jquery@3.1.1 - office-ui-fabric-js@1.4.0/dist/js/fabric.min.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 - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - core-js@2.4.1/client/core.min.js - // IntelliSense: Use dt~library_name for DefinitelyTyped or URLs to d.ts files - @types/office-js - @types/jquery + 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 \ No newline at end of file diff --git a/view/word.json b/view/word.json index 35f4736f1..b8ace4f36 100644 --- a/view/word.json +++ b/view/word.json @@ -18,6 +18,6 @@ "word-lists-insert-list": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/06-lists/insert-list.yaml", "word-basics-read-write-custom-document-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/07-custom-properties/read-write-custom-document-properties.yaml", "word-custom-properties-get-built-in-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/07-custom-properties/get-built-in-properties.yaml", - "word-common-patterns-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/50-common-patterns/multiple-property-set.yaml", + "word-common-patterns-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/50-preview-apis/multiple-property-set.yaml", "word-fabric-insert-form-data": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/99-fabric/fabric-insert-form-data.yaml" } \ No newline at end of file From 15b139152d7ca08b1ba987d8ad06d3b3fff1254a Mon Sep 17 00:00:00 2001 From: Kim Brandl - MSFT Date: Wed, 28 Feb 2018 11:26:31 -0800 Subject: [PATCH 028/660] Update yaml and folder for multiple-property-set (Word) snippet. (#149) --- playlists/word.yaml | 6 +++--- .../multiple-property-set.yaml | 6 +++--- view/word.json | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) rename samples/word/{50-preview-apis => 50-common-patterns}/multiple-property-set.yaml (96%) diff --git a/playlists/word.yaml b/playlists/word.yaml index 5ccfa2144..20151724c 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -182,10 +182,10 @@ fileName: multiple-property-set.yaml description: Setting multiple properties at once with the API object set() method. rawUrl: >- - https://raw.githubusercontent.com////samples/word/50-preview-apis/multiple-property-set.yaml - group: Preview APIs + https://raw.githubusercontent.com////samples/word/50-common-patterns/multiple-property-set.yaml + group: Common Patterns api_set: - WordApi: 1.4 + WordApi: 1.3 - id: word-fabric-insert-form-data name: Fabric JS - Using form data fileName: fabric-insert-form-data.yaml diff --git a/samples/word/50-preview-apis/multiple-property-set.yaml b/samples/word/50-common-patterns/multiple-property-set.yaml similarity index 96% rename from samples/word/50-preview-apis/multiple-property-set.yaml rename to samples/word/50-common-patterns/multiple-property-set.yaml index 877b57dfd..0f410f608 100644 --- a/samples/word/50-preview-apis/multiple-property-set.yaml +++ b/samples/word/50-common-patterns/multiple-property-set.yaml @@ -3,7 +3,7 @@ name: Multiple Property Set description: Setting multiple properties at once with the API object set() method. host: WORD api_set: - WordApi: 1.4 + WordApi: 1.3 script: content: |- $("#set-multiple-properties-with-object").click(() => tryCatch(setMultiplePropertiesWithObject)); @@ -104,8 +104,8 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/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 diff --git a/view/word.json b/view/word.json index b8ace4f36..35f4736f1 100644 --- a/view/word.json +++ b/view/word.json @@ -18,6 +18,6 @@ "word-lists-insert-list": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/06-lists/insert-list.yaml", "word-basics-read-write-custom-document-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/07-custom-properties/read-write-custom-document-properties.yaml", "word-custom-properties-get-built-in-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/07-custom-properties/get-built-in-properties.yaml", - "word-common-patterns-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/50-preview-apis/multiple-property-set.yaml", + "word-common-patterns-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/50-common-patterns/multiple-property-set.yaml", "word-fabric-insert-form-data": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/99-fabric/fabric-insert-form-data.yaml" } \ No newline at end of file From daf75fd852050d3e6675f742d80e456968ba85ec Mon Sep 17 00:00:00 2001 From: Siew Moi Khor Date: Wed, 28 Feb 2018 17:05:10 -0800 Subject: [PATCH 029/660] Shows how to format the vertical and horizontal axis in a chart. (#150) * Shows how to format the vertical and horizontal axis in a chart. * Shows how to format the vertical and horizontal axis in a chart. * Shows how to format the vertical and horizontal axis in a chart. * Shows how to format the vertical and horizontal axis in a chart. --- playlists/excel.yaml | 9 + .../chart-axis-formatting.yaml | 187 ++++++++++++++++++ view/excel.json | 1 + 3 files changed, 197 insertions(+) create mode 100644 samples/excel/89-preview-apis/chart-axis-formatting.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 821b78bc7..bd0834a2e 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -606,6 +606,15 @@ group: Preview APIs api_set: ExcelApi: 1.7 +- id: excel-chart-axis-formatting + name: Chart - Axis formatting + fileName: chart-axis-formatting.yaml + description: Format the vertical and horizontal axis in a chart. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/chart-axis-formatting.yaml + group: Preview APIs + api_set: + ExcelAPI: 1.7 - id: excel-chart-series-doughnutholesize name: Chart series - doughnutHoleSize fileName: chart-series-doughnutholesize.yaml diff --git a/samples/excel/89-preview-apis/chart-axis-formatting.yaml b/samples/excel/89-preview-apis/chart-axis-formatting.yaml new file mode 100644 index 000000000..7d9dfeff4 --- /dev/null +++ b/samples/excel/89-preview-apis/chart-axis-formatting.yaml @@ -0,0 +1,187 @@ +id: excel-chart-axis-formatting +name: Chart - Axis formatting +description: Format the vertical and horizontal axis in a chart. +host: EXCEL +api_set: + ExcelAPI: 1.7 +script: + content: |+ + + $("#setup").click(() => tryCatch(setup)); + $("#format-horizontal-axis").click(formatHorizontalAxis); + $("#format-vertical-axis").click(formatVerticalAxis); + + async function formatHorizontalAxis() { + await Excel.run(async (context) => { + let sheet = context.workbook.worksheets.getActiveWorksheet(); + + let chart = sheet.charts.getItem("SalesChart"); + + let axis = chart.axes.categoryAxis; + + // Set the axis properties in a chart. + // For descriptions of each property, + // see https://github.com/OfficeDev/office-js-docs/blob/ExcelJs_OpenSpec/reference/excel/chartaxis.md + axis.reversePlotOrder = true; + axis.tickLabelSpacing = 1; + axis.tickMarkSpacing = 2; + axis.axisBetweenCategories = false; + axis.tickLabelPosition = "High"; + axis.majorTickMark = "Outside"; + axis.crosses = "Maximum"; + + await context.sync(); + }); + } + + async function formatVerticalAxis() { + await Excel.run(async (context) => { + let sheet = context.workbook.worksheets.getActiveWorksheet(); + + let chart = sheet.charts.getItem("SalesChart"); + + let axis = chart.axes.valueAxis; + + // Set the axis properties in a chart. + // For descriptions of each property, + // see https://github.com/OfficeDev/office-js-docs/blob/ExcelJs_OpenSpec/reference/excel/chartaxis.md + axis.displayUnit = "None"; + axis.scaleType = "Logarithmic"; + axis.logBase = 100; + axis.majorTickMark = "Cross"; + // Set the product name label location. + // In this case, the location is at 100 units. + axis.setCrossesAt(100); + + await context.sync(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + let sheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "Sample"); + let salesTable = sheet.tables.add('A1:E1', true); + salesTable.name = "SalesTable"; + + salesTable.getHeaderRowRange().values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4"]]; + + salesTable.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] + ]); + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + } + + createChart(context); + displayUnit(context); + sheet.activate(); + + await context.sync(); + }); + } + + async function createChart(context: Excel.RequestContext) { + let sheet = context.workbook.worksheets.getItem("Sample"); + let salesTable = sheet.tables.getItem("SalesTable"); + + let dataRange = sheet.getRange("A1:B7"); + let chart = sheet.charts.add("Line", dataRange, "auto"); + + chart.setPosition("A15", "I30"); + chart.legend.position = "right" + chart.legend.format.fill.setSolidColor("white"); + chart.dataLabels.format.font.size = 15; + chart.dataLabels.format.font.color = "black"; + + chart.axes.categoryAxis.majorGridlines.visible = true; + chart.axes.categoryAxis.majorTickMark = "None"; + chart.title.text = "Sales of Bicycle Parts"; + chart.name = "SalesChart"; + + await context.sync(); + } + + function displayUnit(context: Excel.RequestContext) { + let sheet = context.workbook.worksheets.getItem("Sample"); + + let chart = sheet.charts.getItem("SalesChart"); + + let axis = chart.axes.valueAxis; + axis.displayUnit = "Thousands"; + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + + 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: | + 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 + + @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 \ No newline at end of file diff --git a/view/excel.json b/view/excel.json index 486c03ffb..8aa62f43f 100644 --- a/view/excel.json +++ b/view/excel.json @@ -67,6 +67,7 @@ "excel-gridlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-gridlines.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-tab-color.yaml", "excel-worksheet-freeze-panes": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-freeze-panes.yaml", + "excel-chart-axis-formatting": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-axis-formatting.yaml", "excel-chart-series-doughnutholesize": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-series-doughnutholesize.yaml", "excel-chart-series-plotorder": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-series-plotorder.yaml", "excel-chart-title-substring": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-title-substring.yaml", From 5875f96feaf634eed50c8d423352199810f85ec2 Mon Sep 17 00:00:00 2001 From: Kim Brandl - MSFT Date: Thu, 8 Mar 2018 15:28:28 -0800 Subject: [PATCH 030/660] Publish recent updates to prod (#151) * Tiny tweak * Create additional chart types (#140) * [Michael's change] use regular arrays and synchronous file-reading instead of observables * show how to create a variety of chart types * Data validation (#141) * [Michael's change] use regular arrays and synchronous file-reading instead of observables * shows how to add data validation to ranges * shows how to protect workbook structure and data in worksheet * Set the doughnutHoleSize property in a series for a dough nut chart. (#144) * Set the doughnutHoleSize property in a series for a dough nut chart. * Set the doughnutHoleSize property in a series for a dough nut chart. * update based on feedback * Get and set title substrings for a chart. (#146) * Get and set title substring for a chart. * Get and set title substring for a chart. * add instructions and remove logs * Change the plot order of series in a chart. (#147) * specify beta office.js * Fix yaml issues with multiple-property-set Word snippet and move it to 50-preview-apis folder. (#148) * Update yaml and folder for multiple-property-set (Word) snippet. (#149) * Shows how to format the vertical and horizontal axis in a chart. (#150) * Shows how to format the vertical and horizontal axis in a chart. * Shows how to format the vertical and horizontal axis in a chart. * Shows how to format the vertical and horizontal axis in a chart. * Shows how to format the vertical and horizontal axis in a chart. --- playlists/excel.yaml | 45 +++ playlists/word.yaml | 2 +- .../chart-axis-formatting.yaml | 187 +++++++++++++ .../chart-series-doughnutholesize.yaml | 138 +++++++++ .../chart-series-plotorder.yaml | 140 ++++++++++ .../chart-title-substring.yaml | 128 +++++++++ ...a-in-worksheet-and-workbook-structure.yaml | 261 ++++++++++++++++++ .../multiple-property-set.yaml | 20 +- view/excel.json | 5 + 9 files changed, 914 insertions(+), 12 deletions(-) create mode 100644 samples/excel/89-preview-apis/chart-axis-formatting.yaml create mode 100644 samples/excel/89-preview-apis/chart-series-doughnutholesize.yaml create mode 100644 samples/excel/89-preview-apis/chart-series-plotorder.yaml create mode 100644 samples/excel/89-preview-apis/chart-title-substring.yaml create mode 100644 samples/excel/89-preview-apis/protect-data-in-worksheet-and-workbook-structure.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index b3a49ac90..bd0834a2e 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -606,6 +606,42 @@ group: Preview APIs api_set: ExcelApi: 1.7 +- id: excel-chart-axis-formatting + name: Chart - Axis formatting + fileName: chart-axis-formatting.yaml + description: Format the vertical and horizontal axis in a chart. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/chart-axis-formatting.yaml + group: Preview APIs + api_set: + ExcelAPI: 1.7 +- id: excel-chart-series-doughnutholesize + name: Chart series - doughnutHoleSize + fileName: chart-series-doughnutholesize.yaml + description: Set the doughnutHoleSize property in a series for a dough nut chart. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/chart-series-doughnutholesize.yaml + group: Preview APIs + api_set: + ExcelApi: 1.7 +- id: excel-chart-series-plotorder + name: Chart - series plot order + fileName: chart-series-plotorder.yaml + description: Order the plotting of series in a chart. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/chart-series-plotorder.yaml + group: Preview APIs + api_set: + ExcelAPI: 1.7 +- id: excel-chart-title-substring + name: Chart - Title substring + fileName: chart-title-substring.yaml + description: Get and set title substring for a chart. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/chart-title-substring.yaml + group: Preview APIs + api_set: + ExcelApi: 1.7 - id: excel-data-validation name: Data Validation fileName: data-validation.yaml @@ -618,6 +654,15 @@ group: Preview APIs api_set: ExcelApi: 1.7 +- id: excel-protect-data-in-worksheet-and-workbook-structure + name: Protect data in worksheet and the workbook structure + fileName: protect-data-in-worksheet-and-workbook-structure.yaml + description: Shows how to protect data in a worksheet and the workbook structure. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/protect-data-in-worksheet-and-workbook-structure.yaml + group: Preview APIs + api_set: + ExcelApi: 1.7 - id: excel-workbook-get-active-cell name: Get active cell fileName: workbook-get-active-cell.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index d3aab13a2..20151724c 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -185,7 +185,7 @@ https://raw.githubusercontent.com////samples/word/50-common-patterns/multiple-property-set.yaml group: Common Patterns api_set: - WordApi: 1.4 + WordApi: 1.3 - id: word-fabric-insert-form-data name: Fabric JS - Using form data fileName: fabric-insert-form-data.yaml diff --git a/samples/excel/89-preview-apis/chart-axis-formatting.yaml b/samples/excel/89-preview-apis/chart-axis-formatting.yaml new file mode 100644 index 000000000..7d9dfeff4 --- /dev/null +++ b/samples/excel/89-preview-apis/chart-axis-formatting.yaml @@ -0,0 +1,187 @@ +id: excel-chart-axis-formatting +name: Chart - Axis formatting +description: Format the vertical and horizontal axis in a chart. +host: EXCEL +api_set: + ExcelAPI: 1.7 +script: + content: |+ + + $("#setup").click(() => tryCatch(setup)); + $("#format-horizontal-axis").click(formatHorizontalAxis); + $("#format-vertical-axis").click(formatVerticalAxis); + + async function formatHorizontalAxis() { + await Excel.run(async (context) => { + let sheet = context.workbook.worksheets.getActiveWorksheet(); + + let chart = sheet.charts.getItem("SalesChart"); + + let axis = chart.axes.categoryAxis; + + // Set the axis properties in a chart. + // For descriptions of each property, + // see https://github.com/OfficeDev/office-js-docs/blob/ExcelJs_OpenSpec/reference/excel/chartaxis.md + axis.reversePlotOrder = true; + axis.tickLabelSpacing = 1; + axis.tickMarkSpacing = 2; + axis.axisBetweenCategories = false; + axis.tickLabelPosition = "High"; + axis.majorTickMark = "Outside"; + axis.crosses = "Maximum"; + + await context.sync(); + }); + } + + async function formatVerticalAxis() { + await Excel.run(async (context) => { + let sheet = context.workbook.worksheets.getActiveWorksheet(); + + let chart = sheet.charts.getItem("SalesChart"); + + let axis = chart.axes.valueAxis; + + // Set the axis properties in a chart. + // For descriptions of each property, + // see https://github.com/OfficeDev/office-js-docs/blob/ExcelJs_OpenSpec/reference/excel/chartaxis.md + axis.displayUnit = "None"; + axis.scaleType = "Logarithmic"; + axis.logBase = 100; + axis.majorTickMark = "Cross"; + // Set the product name label location. + // In this case, the location is at 100 units. + axis.setCrossesAt(100); + + await context.sync(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + let sheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "Sample"); + let salesTable = sheet.tables.add('A1:E1', true); + salesTable.name = "SalesTable"; + + salesTable.getHeaderRowRange().values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4"]]; + + salesTable.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] + ]); + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + } + + createChart(context); + displayUnit(context); + sheet.activate(); + + await context.sync(); + }); + } + + async function createChart(context: Excel.RequestContext) { + let sheet = context.workbook.worksheets.getItem("Sample"); + let salesTable = sheet.tables.getItem("SalesTable"); + + let dataRange = sheet.getRange("A1:B7"); + let chart = sheet.charts.add("Line", dataRange, "auto"); + + chart.setPosition("A15", "I30"); + chart.legend.position = "right" + chart.legend.format.fill.setSolidColor("white"); + chart.dataLabels.format.font.size = 15; + chart.dataLabels.format.font.color = "black"; + + chart.axes.categoryAxis.majorGridlines.visible = true; + chart.axes.categoryAxis.majorTickMark = "None"; + chart.title.text = "Sales of Bicycle Parts"; + chart.name = "SalesChart"; + + await context.sync(); + } + + function displayUnit(context: Excel.RequestContext) { + let sheet = context.workbook.worksheets.getItem("Sample"); + + let chart = sheet.charts.getItem("SalesChart"); + + let axis = chart.axes.valueAxis; + axis.displayUnit = "Thousands"; + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + + 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: | + 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 + + @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 \ No newline at end of file diff --git a/samples/excel/89-preview-apis/chart-series-doughnutholesize.yaml b/samples/excel/89-preview-apis/chart-series-doughnutholesize.yaml new file mode 100644 index 000000000..181a87102 --- /dev/null +++ b/samples/excel/89-preview-apis/chart-series-doughnutholesize.yaml @@ -0,0 +1,138 @@ +id: excel-chart-series-doughnutholesize +name: Chart series - doughnutHoleSize +description: Set the doughnutHoleSize property in a series for a dough nut chart. +host: EXCEL +api_set: + ExcelApi: 1.7 +script: + content: | + $("#setup").click(() => tryCatch(setup)); + $("#add-series").click(() => tryCatch(addSeries)); + + async function addSeries() { + 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); + + // Set the size of the dough nut hole. + // The hole size is expressed as a percentage + // of the chart size. + newSeries.doughnutHoleSize = 80; + + await context.sync(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + const sheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "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] + ]); + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + } + + createDoughnutExplodedChart(context); + sheet.activate(); + + await context.sync(); + }); + } + + async function createDoughnutExplodedChart(context: Excel.RequestContext) { + const sheet = context.workbook.worksheets.getItem("Sample"); + const salesTable = sheet.tables.getItem("SalesTable"); + + let dataRange = sheet.getRange("A1:B7"); + let chart = sheet.charts.add("doughnutExploded", dataRange, "auto"); + + chart.setPosition("A15", "E30"); + chart.legend.position = "right" + chart.legend.format.fill.setSolidColor("white"); + chart.dataLabels.format.font.size = 15; + chart.dataLabels.format.font.color = "black"; + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |+ +
+

This sample shows how to use the doughnutHoleSize property in a series for an exploded dough nut chart.

+
+ +
+

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 + + @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 diff --git a/samples/excel/89-preview-apis/chart-series-plotorder.yaml b/samples/excel/89-preview-apis/chart-series-plotorder.yaml new file mode 100644 index 000000000..26d7f384b --- /dev/null +++ b/samples/excel/89-preview-apis/chart-series-plotorder.yaml @@ -0,0 +1,140 @@ +id: excel-chart-series-plotorder +name: Chart - series plot order +description: Order the plotting of series in a chart. +host: EXCEL +api_set: + ExcelAPI: 1.7 +script: + content: | + $("#setup").click(() => tryCatch(setup)); + $("#order-series-plot").click(() => tryCatch(addSeries)); + + async function addSeries() { + await Excel.run(async (context) => { + let 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 series. + let newSeries = seriesCollection.series.add("Qtr2"); + newSeries.setValues(rangeSelection); + newSeries.setXAxisValues(xRangeSelection); + let newSeries2 = seriesCollection.series.add("Qtr3"); + newSeries2.setValues(rangeSelection); + newSeries2.setXAxisValues(xRangeSelection); + + // Order the plotting of the series. + // In this case, Qtr 3 appears first, + // followed by Qtr 2, then Qtr 1. + newSeries2.plotOrder = 0; + newSeries.plotOrder = 1; + + await context.sync(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + let sheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "Sample"); + let salesTable = sheet.tables.add('A1:E1', true); + salesTable.name = "SalesTable"; + + salesTable.getHeaderRowRange().values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4"]]; + + salesTable.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] + ]); + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + } + + createChart(context); + sheet.activate(); + + await context.sync(); + }); + } + + async function createChart(context: Excel.RequestContext) { + const sheet = context.workbook.worksheets.getItem("Sample"); + const salesTable = sheet.tables.getItem("SalesTable"); + + let dataRange = sheet.getRange("A1:B7"); + let chart = sheet.charts.add("ColumnClustered", dataRange, "auto"); + + chart.setPosition("A15", "E30"); + chart.legend.position = "right" + chart.legend.format.fill.setSolidColor("white"); + chart.dataLabels.format.font.size = 15; + chart.dataLabels.format.font.color = "black"; + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: | +
+

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

+
+ +
+

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 + + @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 \ No newline at end of file diff --git a/samples/excel/89-preview-apis/chart-title-substring.yaml b/samples/excel/89-preview-apis/chart-title-substring.yaml new file mode 100644 index 000000000..22fd98636 --- /dev/null +++ b/samples/excel/89-preview-apis/chart-title-substring.yaml @@ -0,0 +1,128 @@ +id: excel-chart-title-substring +name: Chart - Title substring +description: Get and set title substring for a chart. +host: EXCEL +api_set: + ExcelApi: 1.7 +script: + content: |+ + $("#setup").click(() => tryCatch(setup)); + $("#change-title-substring").click(() => tryCatch(changeTitleSubstring)); + + async function changeTitleSubstring() { + await Excel.run(async (context) => { + let sheet = context.workbook.worksheets.getItem("Sample"); + let chart = sheet.charts.getItemAt(0); + + // Get first seven characters of the title and highlight them to green. + let font = chart.title.getSubstring(0, 7).font; + font.color = "Green"; + + await context.sync(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + const sheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "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] + ]); + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + } + + createChart(context); + sheet.activate(); + + await context.sync(); + }); + } + + function createChart(context: Excel.RequestContext) { + let sheet = context.workbook.worksheets.getItem("Sample"); + + let dataRange = sheet.getRange("A3:E7"); + let chart = sheet.charts.add("columnStacked", dataRange, "auto"); + chart.title.text = "Bicycle parts sales"; + chart.setPosition("A10", "H33"); + chart.legend.position = "right"; + chart.legend.format.fill.setSolidColor("white"); + chart.dataLabels.format.font.size = 15; + chart.dataLabels.format.font.color = "black"; + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + + language: typescript +template: + content: |+ +
+

This sample shows how to get and set title substring for a chart.

+
+ +
+

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 + + @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 \ No newline at end of file diff --git a/samples/excel/89-preview-apis/protect-data-in-worksheet-and-workbook-structure.yaml b/samples/excel/89-preview-apis/protect-data-in-worksheet-and-workbook-structure.yaml new file mode 100644 index 000000000..43d35ac2f --- /dev/null +++ b/samples/excel/89-preview-apis/protect-data-in-worksheet-and-workbook-structure.yaml @@ -0,0 +1,261 @@ +id: excel-protect-data-in-worksheet-and-workbook-structure +name: Protect data in worksheet and the workbook structure +description: Shows how to protect data in a worksheet and the workbook structure. +host: EXCEL +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)); + + async function protectDataInWorksheet() { + 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(); + } + }); + } + + async function unprotectDataInWorksheet() { + await Excel.run(async (context) => { + let activeSheet = context.workbook.worksheets.getActiveWorksheet(); + activeSheet.protection.unprotect(); + }); + } + + async function protectWorkbookStructure() { + await Excel.run(async (context) => { + let workbook = context.workbook; + workbook.load("protection/protected"); + + await context.sync(); + + if (!workbook.protection.protected) { + workbook.protection.protect(); + } + }); + } + + async function unprotectWorkbookStructure() { + await Excel.run(async (context) => { + let workbook = context.workbook; + workbook.protection.unprotect(); + }); + } + + async function passwordProtectDataInWorksheet() { + let password = await passwordHandler(); + passwordHelper(password); + 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(null, password); + } + }); + } + + async function passwordUnprotectDataInWorksheet() { + let password = await passwordHandler(); + passwordHelper(password); + await Excel.run(async (context) => { + let activeSheet = context.workbook.worksheets.getActiveWorksheet(); + activeSheet.protection.unprotect(password); + }); + } + + async function passwordProtectWorkbookStructure() { + let password = await passwordHandler(); + passwordHelper(password); + await Excel.run(async (context) => { + let workbook = context.workbook; + workbook.load("protection/protected"); + + await context.sync(); + + if (!workbook.protection.protected) { + workbook.protection.protect(password); + } + }); + } + + async function passwordUnprotectWorkbookStructure() { + let password = await passwordHandler(); + passwordHelper(password); + await Excel.run(async (context) => { + let workbook = context.workbook; + workbook.protection.unprotect(password); + }); + } + + function passwordHelper(password: string) { + + if (null == password || password.trim() == "") { + let errorMessage = "Password is expected but not provided"; + OfficeHelpers.UI.notify(errorMessage); + OfficeHelpers.Utilities.log(errorMessage); + } + } + + async function passwordHandler(): Promise { + let settingName = "TheTestPasswordUsedByThisSnippet"; + let savedPassword = Office.context.document.settings.get(settingName); + if (null == savedPassword || savedPassword.trim() == "") { + let item = document.getElementById("test-password"); + let testPassword = item.hasAttribute("value") ? item.getAttribute("value") : null; + if (null != testPassword && testPassword.trim() != "") { + // store test password for retrieval upon re-opening this workbook + Office.context.document.settings.set(settingName, testPassword); + await Office.context.document.settings.saveAsync(); + + savedPassword = testPassword; + } + } else { + document.getElementById("test-password").setAttribute("value", savedPassword); + } + + console.log("Test password is " + savedPassword); + + return savedPassword; + } + + async function setup() { + await Excel.run(async (context) => { + const sheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "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] + ]); + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { + 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) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |- +
+

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

+
+ +
+

Set up

+ +
+ +
+

Try it out

+

Protect without password

+

+

Click the next button and then notice that you cannot edit data in the worksheet.

+ +

+

+ +

+

+

Click the next button and then notice that you cannot add or delete a worksheet.

+ +

+

+ +

+

Protect with password

+ + +

+

Click the next button and then notice that you cannot edit data in the worksheet.

+ +

+

+ +

+

+

Click the next button and then notice that you cannot add or delete a worksheet.

+ +

+

+ +

+
+ language: html +style: + content: | + /* Your style goes here */ + 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 + + @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 \ No newline at end of file diff --git a/samples/word/50-common-patterns/multiple-property-set.yaml b/samples/word/50-common-patterns/multiple-property-set.yaml index c96d59d0f..0f410f608 100644 --- a/samples/word/50-common-patterns/multiple-property-set.yaml +++ b/samples/word/50-common-patterns/multiple-property-set.yaml @@ -3,7 +3,7 @@ name: Multiple Property Set description: Setting multiple properties at once with the API object set() method. host: WORD api_set: - WordApi: 1.4 + WordApi: 1.3 script: content: |- $("#set-multiple-properties-with-object").click(() => tryCatch(setMultiplePropertiesWithObject)); @@ -104,19 +104,17 @@ style: } language: css libraries: |- - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - // NPM libraries - jquery@3.1.1 - office-ui-fabric-js@1.4.0/dist/js/fabric.min.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 - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - core-js@2.4.1/client/core.min.js - // IntelliSense: Use dt~library_name for DefinitelyTyped or URLs to d.ts files - @types/office-js - @types/jquery + core-js@2.4.1/client/core.min.js @types/core-js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts \ No newline at end of file + + @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 \ No newline at end of file diff --git a/view/excel.json b/view/excel.json index 12e88b095..8aa62f43f 100644 --- a/view/excel.json +++ b/view/excel.json @@ -67,7 +67,12 @@ "excel-gridlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-gridlines.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-tab-color.yaml", "excel-worksheet-freeze-panes": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-freeze-panes.yaml", + "excel-chart-axis-formatting": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-axis-formatting.yaml", + "excel-chart-series-doughnutholesize": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-series-doughnutholesize.yaml", + "excel-chart-series-plotorder": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-series-plotorder.yaml", + "excel-chart-title-substring": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-title-substring.yaml", "excel-data-validation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/data-validation.yaml", + "excel-protect-data-in-worksheet-and-workbook-structure": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/protect-data-in-worksheet-and-workbook-structure.yaml", "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/workbook-get-active-cell.yaml", "excel-worksheet-copy": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-copy.yaml", "excel-just-for-fun-gradient": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-just-for-fun/gradient.yaml", From a364d867fcf4c48d095971e82e6e19be5c3865e9 Mon Sep 17 00:00:00 2001 From: Kim Brandl - MSFT Date: Fri, 23 Mar 2018 10:07:21 -0700 Subject: [PATCH 031/660] Generate a single snippets.yaml file (for API Documenter) (#152) --- config/build.documentation.ts | 8 +- .../excel-ref-snippets-js.yaml | 59 ++++++++++++++ .../onenote-ref-snippets-js.yaml | 74 ++++++++++++++++++ snippet-extractor-metadata/excel.xlsx | Bin 15025 -> 15105 bytes snippet-extractor-metadata/onenote.xlsx | Bin 0 -> 11011 bytes .../{excel.yaml => snippets.yaml} | 39 +++++++++ view/excel.json | 1 + view/onenote.json | 3 + 8 files changed, 179 insertions(+), 5 deletions(-) create mode 100644 private-samples/excel/00-ref-snippets/excel-ref-snippets-js.yaml create mode 100644 private-samples/onenote/00-ref-snippets/onenote-ref-snippets-js.yaml create mode 100644 snippet-extractor-metadata/onenote.xlsx rename snippet-extractor-output/{excel.yaml => snippets.yaml} (98%) create mode 100644 view/onenote.json diff --git a/config/build.documentation.ts b/config/build.documentation.ts index 9bf8c3206..4a14e2ac4 100644 --- a/config/build.documentation.ts +++ b/config/build.documentation.ts @@ -34,11 +34,9 @@ export async function buildReferenceDocSnippetExtracts( await rmRf('snippet-extractor-output'); await mkDir('snippet-extractor-output'); - await Promise.all(snippetExtractsPerHost.map((extracts, index) => { - let contents = jsyaml.safeDump(extracts); - let fileName = `snippet-extractor-output/${files[index].substr(0, '.xlsx'.length)}.yaml`; - return writeFile(path.resolve(fileName), contents); - })); + + const contents = snippetExtractsPerHost.map(extracts => jsyaml.safeDump(extracts)).join(''); + await writeFile(path.resolve(`snippet-extractor-output/snippets.yaml`), contents); } async function buildSnippetExtractsPerHost( diff --git a/private-samples/excel/00-ref-snippets/excel-ref-snippets-js.yaml b/private-samples/excel/00-ref-snippets/excel-ref-snippets-js.yaml new file mode 100644 index 000000000..f0f77d405 --- /dev/null +++ b/private-samples/excel/00-ref-snippets/excel-ref-snippets-js.yaml @@ -0,0 +1,59 @@ +id: excel-ref-snippets-js +name: API Reference Docs - JavaScript Snippets +description: JavaScript snippets to be inserted into the API Reference docs. +author: OfficeDev +host: EXCEL +api_set: + ExcelApi: 1.1 +script: + content: | + function deleteChart() { + Excel.run(function (ctx) { + var chart = ctx.workbook.worksheets.getItem("Sheet1").charts.getItem("Chart1"); + chart.delete(); + return ctx.sync(); + }).catch(function(error) { + console.log("Error: " + error); + if (error instanceof OfficeExtension.Error) { + console.log("Debug info: " + JSON.stringify(error.debugInfo)); + } + }); + } + language: javascript +template: + 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: | + // Office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + + // 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 + + // NPM libraries + core-js@2.4.1/client/core.min.js + @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js + jquery@3.1.1 + + // IntelliSense: @types/library or node_modules paths or URL to d.ts files + @types/office-js + @types/core-js + @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts + @types/jquery \ No newline at end of file diff --git a/private-samples/onenote/00-ref-snippets/onenote-ref-snippets-js.yaml b/private-samples/onenote/00-ref-snippets/onenote-ref-snippets-js.yaml new file mode 100644 index 000000000..e3f9c3880 --- /dev/null +++ b/private-samples/onenote/00-ref-snippets/onenote-ref-snippets-js.yaml @@ -0,0 +1,74 @@ +id: onenote-ref-snippets-js +name: API Reference Docs - JavaScript Snippets +description: JavaScript snippets to be inserted into the API Reference docs. +author: OfficeDev +host: ONENOTE +api_set: + ExcelApi: 1.1 +script: + content: | + function getActiveNotebook() { + OneNote.run(function (context) { + + // Get the active notebook. + var notebook = context.application.getActiveNotebook(); + + // Queue a command to load the notebook. + // For best performance, request specific properties. + notebook.load('id,name'); + + // Run the queued commands, and return a promise to indicate task completion. + return context.sync() + .then(function () { + + // Show some properties. + console.log("Notebook name: " + notebook.name); + console.log("Notebook ID: " + notebook.id); + + }); + }) + .catch(function(error) { + console.log("Error: " + error); + if (error instanceof OfficeExtension.Error) { + console.log("Debug info: " + JSON.stringify(error.debugInfo)); + } + }); + } + language: javascript +template: + 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: | + // Office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + + // 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 + + // NPM libraries + core-js@2.4.1/client/core.min.js + @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js + jquery@3.1.1 + + // IntelliSense: @types/library or node_modules paths or URL to d.ts files + @types/office-js + @types/core-js + @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts + @types/jquery \ No newline at end of file diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 346bde96678a805d80eb88f77be94e26608082bf..bf9394b5c5e142cf96ff164c518b668032737995 100644 GIT binary patch delta 6901 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 C4kJbY delta 6822 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 IMgDgG4_kH42mk;8 diff --git a/snippet-extractor-metadata/onenote.xlsx b/snippet-extractor-metadata/onenote.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..428f6cb9bc896b1a284134bf5e2b21f8f95ce616 GIT binary patch literal 11011 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 Date: Tue, 3 Apr 2018 14:53:12 -0700 Subject: [PATCH 032/660] Remove code snippets (and mapping file info) for JS snippets (#154) This PR removes data that I previously added to test our ability to auto-inject JS snippets into the API Reference docs in the same way that we do for TS snippets; Script Lab content/functionality isn't in any way affected by this PR. --- .../excel-ref-snippets-js.yaml | 59 -------------- .../onenote-ref-snippets-js.yaml | 74 ------------------ snippet-extractor-metadata/excel.xlsx | Bin 15105 -> 15050 bytes snippet-extractor-metadata/onenote.xlsx | Bin 11011 -> 0 bytes snippet-extractor-output/snippets.yaml | 39 --------- view/excel.json | 1 - view/onenote.json | 3 - 7 files changed, 176 deletions(-) delete mode 100644 private-samples/excel/00-ref-snippets/excel-ref-snippets-js.yaml delete mode 100644 private-samples/onenote/00-ref-snippets/onenote-ref-snippets-js.yaml delete mode 100644 snippet-extractor-metadata/onenote.xlsx delete mode 100644 view/onenote.json diff --git a/private-samples/excel/00-ref-snippets/excel-ref-snippets-js.yaml b/private-samples/excel/00-ref-snippets/excel-ref-snippets-js.yaml deleted file mode 100644 index f0f77d405..000000000 --- a/private-samples/excel/00-ref-snippets/excel-ref-snippets-js.yaml +++ /dev/null @@ -1,59 +0,0 @@ -id: excel-ref-snippets-js -name: API Reference Docs - JavaScript Snippets -description: JavaScript snippets to be inserted into the API Reference docs. -author: OfficeDev -host: EXCEL -api_set: - ExcelApi: 1.1 -script: - content: | - function deleteChart() { - Excel.run(function (ctx) { - var chart = ctx.workbook.worksheets.getItem("Sheet1").charts.getItem("Chart1"); - chart.delete(); - return ctx.sync(); - }).catch(function(error) { - console.log("Error: " + error); - if (error instanceof OfficeExtension.Error) { - console.log("Debug info: " + JSON.stringify(error.debugInfo)); - } - }); - } - language: javascript -template: - 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: | - // Office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.js - - // 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 - - // NPM libraries - core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - // IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-js - @types/core-js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts - @types/jquery \ No newline at end of file diff --git a/private-samples/onenote/00-ref-snippets/onenote-ref-snippets-js.yaml b/private-samples/onenote/00-ref-snippets/onenote-ref-snippets-js.yaml deleted file mode 100644 index e3f9c3880..000000000 --- a/private-samples/onenote/00-ref-snippets/onenote-ref-snippets-js.yaml +++ /dev/null @@ -1,74 +0,0 @@ -id: onenote-ref-snippets-js -name: API Reference Docs - JavaScript Snippets -description: JavaScript snippets to be inserted into the API Reference docs. -author: OfficeDev -host: ONENOTE -api_set: - ExcelApi: 1.1 -script: - content: | - function getActiveNotebook() { - OneNote.run(function (context) { - - // Get the active notebook. - var notebook = context.application.getActiveNotebook(); - - // Queue a command to load the notebook. - // For best performance, request specific properties. - notebook.load('id,name'); - - // Run the queued commands, and return a promise to indicate task completion. - return context.sync() - .then(function () { - - // Show some properties. - console.log("Notebook name: " + notebook.name); - console.log("Notebook ID: " + notebook.id); - - }); - }) - .catch(function(error) { - console.log("Error: " + error); - if (error instanceof OfficeExtension.Error) { - console.log("Debug info: " + JSON.stringify(error.debugInfo)); - } - }); - } - language: javascript -template: - 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: | - // Office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.js - - // 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 - - // NPM libraries - core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - // IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-js - @types/core-js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts - @types/jquery \ No newline at end of file diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index bf9394b5c5e142cf96ff164c518b668032737995..f6d5116a408ea6177f06a155638acf39ab387d8e 100644 GIT binary patch delta 6835 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 delta 6865 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 diff --git a/snippet-extractor-metadata/onenote.xlsx b/snippet-extractor-metadata/onenote.xlsx deleted file mode 100644 index 428f6cb9bc896b1a284134bf5e2b21f8f95ce616..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11011 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 Date: Tue, 10 Apr 2018 22:29:29 -0700 Subject: [PATCH 033/660] shows how to use Excel areas to set properties on multiple ranges simulataneously --- playlists/excel.yaml | 11 ++ .../excel/89-preview-apis/range-areas.yaml | 103 ++++++++++++++++++ view/excel.json | 1 + 3 files changed, 115 insertions(+) create mode 100644 samples/excel/89-preview-apis/range-areas.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index bd0834a2e..a4e818616 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -663,6 +663,17 @@ group: Preview APIs api_set: ExcelApi: 1.7 +- id: excel-range-areas + name: Using Areas (Discontiguous Ranges) + fileName: range-areas.yaml + description: >- + Work with Areas, which are sets of ranges that need not be contiguous with + each other. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/range-areas.yaml + group: Preview APIs + api_set: + ExcelApi: 1.8 - id: excel-workbook-get-active-cell name: Get active cell fileName: workbook-get-active-cell.yaml diff --git a/samples/excel/89-preview-apis/range-areas.yaml b/samples/excel/89-preview-apis/range-areas.yaml new file mode 100644 index 000000000..45f47a409 --- /dev/null +++ b/samples/excel/89-preview-apis/range-areas.yaml @@ -0,0 +1,103 @@ +id: excel-range-areas +name: Using Areas (Discontiguous Ranges) +description: 'Work with Areas, which are sets of ranges that need not be contiguous with each other.' +host: EXCEL +api_set: + ExcelApi: 1.8 +script: + content: | + $("#create-sales-range").click(() => tryCatch(createSalesRange)); + $("#color-all-formula-cells").click(() => tryCatch(colorAllFormulaCells)); + + async function colorAllFormulaCells() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // To create a Range with multiple child areas, pass a + // comma-delimited string of range addresses to + // Worksheet.getRange. + const range = sheet.getRange("F3:F5, H3:H5"); + range.format.fill.color = "pink"; + + await context.sync(); + }); + } + + async function createSalesRange() { + await Excel.run(async (context) => { + const sheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "Sample"); + + const data = [ + ["Product", "Qty", "Category", "Unit Price", "Base Price", "Tax", "Total Charge"], + ["Almonds", 2, "Nuts", 7.50, "=C3 * E3", 0.1, "=SUM(F3,F3 * G3)"], + ["Coffee", 1, "Beverage", 34.50, "=C4 * E4", 0.0, "=SUM(F4,F4 * G4)"], + ["Chocolate", 5, "Candy", 9.56, "=C5 * E5", 0.2, "=SUM(F5,F5 * G5)"] + ]; + + const range = sheet.getRange("B2:H5"); + range.values = data; + range.format.autofitColumns(); + + sheet.activate(); + + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: | +

+

This sample shows how to use areas, which are sets of Ranges that are not necessarily contiguous with each other.

+
+ +
+

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 + + @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 \ No newline at end of file diff --git a/view/excel.json b/view/excel.json index 8aa62f43f..d68c578a4 100644 --- a/view/excel.json +++ b/view/excel.json @@ -73,6 +73,7 @@ "excel-chart-title-substring": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-title-substring.yaml", "excel-data-validation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/data-validation.yaml", "excel-protect-data-in-worksheet-and-workbook-structure": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/protect-data-in-worksheet-and-workbook-structure.yaml", + "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/range-areas.yaml", "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/workbook-get-active-cell.yaml", "excel-worksheet-copy": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-copy.yaml", "excel-just-for-fun-gradient": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-just-for-fun/gradient.yaml", From 8561fd2550aed597fe857dc62cad350d8d6e09f4 Mon Sep 17 00:00:00 2001 From: Ricky Kirkham Date: Wed, 11 Apr 2018 13:10:54 -0700 Subject: [PATCH 034/660] added new snippet to extractor metadata --- snippet-extractor-metadata/excel.xlsx | Bin 15050 -> 15109 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index f6d5116a408ea6177f06a155638acf39ab387d8e..348628d98c1f8604ebbf8949f99ec7f87526a94b 100644 GIT binary patch delta 6810 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 Gwf-N>1kg+X delta 6740 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 Date: Wed, 18 Apr 2018 18:17:17 -0700 Subject: [PATCH 035/660] add missing snippets (#157) * add missing snippets * added other functions --- snippet-extractor-metadata/excel.xlsx | Bin 15109 -> 15477 bytes snippet-extractor-output/snippets.yaml | 116 +++++++++++++++++++++++++ 2 files changed, 116 insertions(+) diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 348628d98c1f8604ebbf8949f99ec7f87526a94b..4eea23a7623db447d3055714f2eb1bd737ea8bcd 100644 GIT binary patch delta 6673 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
RpCb=!=yM2YhfhwHL9HrU#x@(&n1D zIzS)+?~lhRmB=rP@lt~hyy8qMCjrThkvbp)v1oD6J6-NQ93N{nlWYo#sez}M|E$vx zio5F+xE1J{wI$g51)B$tO1w-P8szLIWvX%!<5z=#?BhQQzTfw9C3K* zzF`>56a{U^3e!?~)91il)o4q%G2z-B6mTTG>T3*z1yT#TwTSPkWiY_WWA5~+DaCO< zhGKJ3D{XU8-Sq`-Tq!MWyBqcL(kF`4s#&H~{=tT^UVfa_f)-z0FBX#F?Z@qIQMM>R zT$GwxsfbF+eg)|^xqQPM-mPInEdU7e$1Cu}Yn#YlZ?eYSz;hPZ;8Z7BU7Fr3q@Its486zl!uQw`kB)O0#74jexmoo=`W33`hS^&t0`kV06cJ<465 z-v^yQ^(OD=@5zsxSNW{}G(OS27++s|`nVI8vr$`_Xx+WiFF^qHF; z4I^h?FkiiCgO>vZ2*@_g84kX)WVK*b3XBn=KskqR;Dw#x;{|Av$4tEn#?ceTCM+0r0b^ zv$q3HwNIv7(YGX01=GZ+mkn05;_=r*t=QZMb_UgJSet6+0K--O$H~@^V*aiH5(w#p z;3~?44a)~o?GxgqL$7%>^bxI4bZdMzls>=&_ic6+rN8xNTB(evOPS6pr{Re_?HZO& z;&7{Txae=owtMuRx&o8i*ALoWotq(Nx^51a1*W~u`J46|Q$}b_El(pF+@92AHaLE| zSI6Fb+&kx%QS7^uzyyQ8uoe%{+V1cK`$F_Nk`x+GuuqE(h=+vVPWzqBShu&Wv(nL= zou42F2MKLuRbpebNM`+n8S_z||3<8*AW`8A*ktJTNhBvtmI5zOP^Owb3c6wZudfwG zabep3e^w3pUke5A@8ntzwUiVtMal|a6z4+eful*t;mgv3K)z0V9-e+q)*f(qak3}> z|C{=MQGnjT0SQIar#$ds3D*B9FZ@J;994!NjwQ+bpENkHBn4`pAY4gO4%I;f9wVuP RdMyH9lVrkd75~Tde*i;%vNr$# delta 6290 zcmY*-WmFVUw>HusF*FFsP(uj}-JQx1g0x6?cZnk~#K3^SAPv$f9a0jKLpKN_HAoMj zA}L(_-fyk@-m}*Jv)7JiKl{Ww`z$CbpiY#Ch<$2Kz5*KyYXT`pL=ScM%mxE)<(=;y zT*?gm5X(>DCCa3A&aP~BRWK5e>?O9c%Z8QjL)S7>e;;Yh^Rv;fZS3UjU|N60ch!7k zM#ja1)X*gC@nUVpQV_qlD7X{K`srNRjUUVDMclLM zm45FRuNtx{MW!3@WnH1Hu9en&5{WLHMNzyAv;Nzy^f5Zx!I6oC@EgKtliJ`3;p9Lu z*WVPX4RJ2{wa>m+QdCbUU>h5>9hu3{`9B1lcWz#R-?CLrAm>XdQob7lJGjE+2Asb;`(^P zfLMpBvrn0+)N&+s>K5X0c?e|X)dmlEBv!jlxBOLeHK-sqr7;XK^%{?(R;!~4{WAjW z2>5d5g6v2uow@`3 z3kn}l9|v92>^9N}CzowfblrSWclq7p2xKDNr0C<5*-7z(?3LY6QJ*p6u)eRaE)}MKa5|KbH7QLQL_t`wg^-faDmkw}e zskE9Lj#%;lpZ*Y`B$##+_ws&~!~h~ldSq0^P#HFV(qjKe{<_zNk|a184repQ6AH;W zwbH3#+ILMWprk-c3VYVQy3-3Wsn+oUYQC0@_c~k&+QVy6co0Fg=6e+Np=}gs<}ey; z=93i>4${QfT|ig6BScv#GMt5$Y({8m z`4k@utBVN>iy8~LAw>&Cn6BuvO8~-j4R3q5&rOd#QmS7NFJU*@RbWG`k=l<3Ahvu? z#qi<>V~b^+;}>krva)6_%(-0^q01VUmaak}`0lMKLtDBm@`)NiEko}%*~e>w0�Y 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 V$O{<*>{wBxwk#XIy2QUw{{sLf*02Bo diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index fcc6d1abf..bd3288999 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -2047,3 +2047,119 @@ Excel.TableSelectionChangedEvent.tableId: console.log("Worksheet Id : " + worksheet.name); }); } +Excel.Worksheet.getRange: + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // To create a Range with multiple child areas, pass a + // comma-delimited string of range addresses to + // Worksheet.getRange. + const range = sheet.getRange("F3:F5, H3:H5"); + range.format.fill.color = "pink"; + + await context.sync(); + }); +Excel.Workbook.getActiveCell: + - |- + 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.Worksheet.copy: + - |- + 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.protect: + - |- + 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(); + } + }); + - |- + let password = await passwordHandler(); + passwordHelper(password); + 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(null, password); + } + }); +Excel.Worksheet.unprotect: + - |- + await Excel.run(async (context) => { + let activeSheet = context.workbook.worksheets.getActiveWorksheet(); + activeSheet.protection.unprotect(); + }); + - |- + let password = await passwordHandler(); + passwordHelper(password); + await Excel.run(async (context) => { + let activeSheet = context.workbook.worksheets.getActiveWorksheet(); + activeSheet.protection.unprotect(password); + }); +Excel.Workbook.protect: + - |- + await Excel.run(async (context) => { + let workbook = context.workbook; + workbook.load("protection/protected"); + + await context.sync(); + + if (!workbook.protection.protected) { + workbook.protection.protect(); + } + }); + - |- + let password = await passwordHandler(); + passwordHelper(password); + await Excel.run(async (context) => { + let workbook = context.workbook; + workbook.load("protection/protected"); + + await context.sync(); + + if (!workbook.protection.protected) { + workbook.protection.protect(password); + } + }); +Excel.Workbook.unprotect: + - |- + await Excel.run(async (context) => { + let workbook = context.workbook; + workbook.protection.unprotect(); + }); + - |- + let password = await passwordHandler(); + passwordHelper(password); + await Excel.run(async (context) => { + let workbook = context.workbook; + workbook.protection.unprotect(password); + }); From 213b3e72ad36cf34d110e55b4aee4893f88cb0a9 Mon Sep 17 00:00:00 2001 From: Michael Zlatkovsky Date: Fri, 4 May 2018 09:45:08 -0700 Subject: [PATCH 036/660] Fix minor red-squiggly issues --- samples/excel/89-preview-apis/style.yaml | 10 +++++----- samples/excel/90-just-for-fun/color-wheel.yaml | 10 +++++----- samples/excel/90-just-for-fun/gradient.yaml | 2 +- samples/excel/90-just-for-fun/path-finder-game.yaml | 2 +- samples/excel/90-just-for-fun/patterns.yaml | 6 +++--- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/samples/excel/89-preview-apis/style.yaml b/samples/excel/89-preview-apis/style.yaml index 1f3f8f3e2..7d1bf5c11 100644 --- a/samples/excel/89-preview-apis/style.yaml +++ b/samples/excel/89-preview-apis/style.yaml @@ -27,8 +27,8 @@ script: let newStyle = styles.getItem("Diagonal Orientation Style"); // The "Diagonal Orientation Style" properties. - newStyle.orientation = 38; - newStyle.addIndent = true; + newStyle.textOrientation = 38; + newStyle.autoIndent = true; newStyle.includeProtection = true; newStyle.shrinkToFit = true; newStyle.locked = false; @@ -85,13 +85,13 @@ script: async function getStyleAlignmentProperties() { await Excel.run(async (context) => { let style = context.workbook.styles.getItem("Diagonal Orientation Style"); - style.load("orientation, horizontalAlignment, addIndent, readingOrder, wrapText, includeProtection, shrinkToFit, locked"); + style.load("textOrientation, horizontalAlignment, autoIndent, readingOrder, wrapText, includeProtection, shrinkToFit, locked"); await context.sync(); - console.log("Orientation: " + style.orientation); + console.log("Orientation: " + style.textOrientation); console.log("Horizontal alignment: " + style.horizontalAlignment); - console.log("Add indent: " + style.addIndent); + console.log("Add indent: " + style.autoIndent); console.log("Reading order: " + style.readingOrder); console.log("Wrap text: " + style.wrapText); console.log("Include protection: " + style.includeProtection); diff --git a/samples/excel/90-just-for-fun/color-wheel.yaml b/samples/excel/90-just-for-fun/color-wheel.yaml index ee9c2ef09..f77b51ffe 100644 --- a/samples/excel/90-just-for-fun/color-wheel.yaml +++ b/samples/excel/90-just-for-fun/color-wheel.yaml @@ -11,7 +11,7 @@ script: $("#wheel").click(wheelGo); $("#stop").click(wheelStop); - let stop: boolean + let isStopped: boolean const pauseLength = 50; const numberOfSlices = 32; @@ -19,7 +19,7 @@ script: async function wheelGo() { try { Excel.run(async (context) => { - stop = false + isStopped = false; // Create a hidden sheet which will contain data for the color wheel chart: const sheetSettings = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Color Wheel Settings", true /*clearOnly*/); @@ -60,7 +60,7 @@ script: await pause(700); // Draw pretty colors, ad infinitum - while (!stop) { + while (!isStopped) { const colorMultiplier = 256 / numberOfSlices; await loopThroughColors(points, numberOfSlices * 2, i => rgb(255, colorMultiplier / 2 * i, 0)); /* red to orange to yellow*/ @@ -85,7 +85,7 @@ script: async function loopThroughColors(points: Excel.ChartPointsCollection, max, colorGenerator: (i: number) => string) { for (var i = 0; i < max; i++) { - if (stop) { + if (isStopped) { return; } var X = i % numberOfSlices; @@ -97,7 +97,7 @@ script: } function wheelStop() { - stop = true + isStopped = true; } function pause(milliseconds) { diff --git a/samples/excel/90-just-for-fun/gradient.yaml b/samples/excel/90-just-for-fun/gradient.yaml index 74dd5ef13..4860fca00 100644 --- a/samples/excel/90-just-for-fun/gradient.yaml +++ b/samples/excel/90-just-for-fun/gradient.yaml @@ -41,7 +41,7 @@ script: } }); - let originalSize = parseInt($('#size').val()); + let originalSize = parseInt($('#size').val() as string); // Create a 2D in-memory array to hold the colors const colors2D = Array(originalSize); diff --git a/samples/excel/90-just-for-fun/path-finder-game.yaml b/samples/excel/90-just-for-fun/path-finder-game.yaml index 030832862..e160cc453 100644 --- a/samples/excel/90-just-for-fun/path-finder-game.yaml +++ b/samples/excel/90-just-for-fun/path-finder-game.yaml @@ -20,7 +20,7 @@ script: let matrixPrevious: string[][] function setup() { - const density = parseInt($("#density").val()) / 100; + const density = parseInt($("#density").val() as string) / 100; const symbol = "\u25cf"; const matrix = new Array(GRID_ROW_COUNT); diff --git a/samples/excel/90-just-for-fun/patterns.yaml b/samples/excel/90-just-for-fun/patterns.yaml index 15d485ee0..ab2612ce0 100644 --- a/samples/excel/90-just-for-fun/patterns.yaml +++ b/samples/excel/90-just-for-fun/patterns.yaml @@ -19,7 +19,7 @@ script: sheet.activate(); formatBackground(sheet); - const size = parseInt($("#size").val()); + const size = parseInt($("#size").val() as string); for (var i = 0; i < size; i++) { const width = size * 2 - 2 * i; @@ -48,7 +48,7 @@ script: sheet.activate(); formatBackground(sheet); - const size = Math.floor(parseInt($("#size").val()) / 2); + const size = Math.floor(parseInt($("#size").val() as string) / 2); for (let i = 0; i < size - 1; i++) { @@ -113,7 +113,7 @@ script: sheet.activate(); formatBackground(sheet); - const size = Math.floor(parseInt($("#size").val()) / 2); + const size = Math.floor(parseInt($("#size").val() as string) / 2); for (var i = 0; i < size; i++) { const range1 = sheet.getCell(2 * i + 1, 2 * i + 1).getResizedRange(size - i, size - i); From d2c4f16528615a628f77ccdf4662d3e04a48c6be Mon Sep 17 00:00:00 2001 From: Ricky Kirkham Date: Fri, 4 May 2018 12:56:09 -0700 Subject: [PATCH 037/660] shows how to handle the Worksheet.onSelectionChanged event --- playlists/excel.yaml | 9 ++ .../events-worksheet-selectionchanged.yaml | 140 ++++++++++++++++++ snippet-extractor-output/snippets.yaml | 14 +- view/excel.json | 1 + 4 files changed, 157 insertions(+), 7 deletions(-) create mode 100644 samples/excel/89-preview-apis/events-worksheet-selectionchanged.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index a4e818616..1ac072be0 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -654,6 +654,15 @@ group: Preview APIs api_set: ExcelApi: 1.7 +- id: excel-events-worksheet-selectionchanged + name: Events - Worksheet onSelectionChanged + fileName: events-worksheet-selectionchanged.yaml + description: Add an event handler for the worksheet onSelectionChanged event + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/events-worksheet-selectionchanged.yaml + group: Preview APIs + api_set: + ExcelApi: 1.7 - id: excel-protect-data-in-worksheet-and-workbook-structure name: Protect data in worksheet and the workbook structure fileName: protect-data-in-worksheet-and-workbook-structure.yaml diff --git a/samples/excel/89-preview-apis/events-worksheet-selectionchanged.yaml b/samples/excel/89-preview-apis/events-worksheet-selectionchanged.yaml new file mode 100644 index 000000000..d72dfdd10 --- /dev/null +++ b/samples/excel/89-preview-apis/events-worksheet-selectionchanged.yaml @@ -0,0 +1,140 @@ +id: excel-events-worksheet-selectionchanged +name: Events - Worksheet onSelectionChanged +description: Add an event handler for the worksheet onSelectionChanged event +host: EXCEL +api_set: + ExcelApi: 1.7 +script: + content: |+ + $("#setup").click(() => tryCatch(setup)); + $("#register-on-selection-changed-handler").click(() => tryCatch(registerSelectionChangedHandler)); + $("#select-range").click(() => tryCatch(selectRange)); + + async function registerSelectionChangedHandler() { + await Excel.run(async (context) => { + + let sheet = context.workbook.worksheets.getItem("Sample"); + sheet.onSelectionChanged.add(onSelectionChange); + + await context.sync(); + + console.log("Added worksheet selection changed event handler."); + }); + } + + async function selectRange() { + await Excel.run(async (context) => { + let sheet = context.workbook.worksheets.getItem("Sample"); + let range = sheet.getRange("B7:C7"); + range.select(); + + await context.sync(); + }); + } + + async function onSelectionChange(event) { + await Excel.run(async (context) => { + console.log("The selected range has changed to: " + event.address); + }); + } + + async function setup() { + await Excel.run(async (context) => { + let sheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "Sample"); + let salesTable = sheet.tables.add('A1:E1', true); + salesTable.name = "SalesTable"; + + salesTable.getHeaderRowRange().values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4"]]; + + salesTable.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] + ]); + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { + 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) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + + + + language: typescript +template: + content: |+ +
+

This sample shows how to add an event handler for the worksheet onSelectionChanged event.

+
+ +
+

Set up

+ +
+ + +
+

Press the button and select a range manually. Watch the console. Next press the second button to select a range programmatically.

+ +
+ + +
+ +
+ + 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 + + @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 \ No newline at end of file diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index bd3288999..75b70ea04 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -1720,8 +1720,8 @@ Excel.Style.getItem: let newStyle = styles.getItem("Diagonal Orientation Style"); // The "Diagonal Orientation Style" properties. - newStyle.orientation = 38; - newStyle.addIndent = true; + newStyle.textOrientation = 38; + newStyle.autoIndent = true; newStyle.includeProtection = true; newStyle.shrinkToFit = true; newStyle.locked = false; @@ -1742,8 +1742,8 @@ Excel.Style.add: let newStyle = styles.getItem("Diagonal Orientation Style"); // The "Diagonal Orientation Style" properties. - newStyle.orientation = 38; - newStyle.addIndent = true; + newStyle.textOrientation = 38; + newStyle.autoIndent = true; newStyle.includeProtection = true; newStyle.shrinkToFit = true; newStyle.locked = false; @@ -1785,13 +1785,13 @@ Excel.TableDataChangedEvent.horizontalAlignment: - |- await Excel.run(async (context) => { let style = context.workbook.styles.getItem("Diagonal Orientation Style"); - style.load("orientation, horizontalAlignment, addIndent, readingOrder, wrapText, includeProtection, shrinkToFit, locked"); + style.load("textOrientation, horizontalAlignment, autoIndent, readingOrder, wrapText, includeProtection, shrinkToFit, locked"); await context.sync(); - console.log("Orientation: " + style.orientation); + console.log("Orientation: " + style.textOrientation); console.log("Horizontal alignment: " + style.horizontalAlignment); - console.log("Add indent: " + style.addIndent); + console.log("Add indent: " + style.autoIndent); console.log("Reading order: " + style.readingOrder); console.log("Wrap text: " + style.wrapText); console.log("Include protection: " + style.includeProtection); diff --git a/view/excel.json b/view/excel.json index d68c578a4..703fd2656 100644 --- a/view/excel.json +++ b/view/excel.json @@ -72,6 +72,7 @@ "excel-chart-series-plotorder": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-series-plotorder.yaml", "excel-chart-title-substring": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-title-substring.yaml", "excel-data-validation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/data-validation.yaml", + "excel-events-worksheet-selectionchanged": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-worksheet-selectionchanged.yaml", "excel-protect-data-in-worksheet-and-workbook-structure": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/protect-data-in-worksheet-and-workbook-structure.yaml", "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/range-areas.yaml", "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/workbook-get-active-cell.yaml", From 6ebaf248c032a1ec5ea8fc153cfe03093c090bef Mon Sep 17 00:00:00 2001 From: Ricky Kirkham Date: Tue, 8 May 2018 12:36:34 -0700 Subject: [PATCH 038/660] Excel API name changes and enum capitalization --- .../chart-axis-formatting.yaml | 51 +++++++++++++++++-- .../chart-series-doughnutholesize.yaml | 4 +- .../chart-series-plotorder.yaml | 4 +- .../chart-title-substring.yaml | 4 +- 4 files changed, 52 insertions(+), 11 deletions(-) diff --git a/samples/excel/89-preview-apis/chart-axis-formatting.yaml b/samples/excel/89-preview-apis/chart-axis-formatting.yaml index 7d9dfeff4..d202d0db0 100644 --- a/samples/excel/89-preview-apis/chart-axis-formatting.yaml +++ b/samples/excel/89-preview-apis/chart-axis-formatting.yaml @@ -3,10 +3,10 @@ name: Chart - Axis formatting description: Format the vertical and horizontal axis in a chart. host: EXCEL api_set: - ExcelAPI: 1.7 + ExcelAPI: 1.8 script: content: |+ - + $("#setup").click(() => tryCatch(setup)); $("#format-horizontal-axis").click(formatHorizontalAxis); $("#format-vertical-axis").click(formatVerticalAxis); @@ -25,10 +25,10 @@ script: axis.reversePlotOrder = true; axis.tickLabelSpacing = 1; axis.tickMarkSpacing = 2; - axis.axisBetweenCategories = false; + axis.isBetweenCategories = false; axis.tickLabelPosition = "High"; axis.majorTickMark = "Outside"; - axis.crosses = "Maximum"; + axis.position = "Maximum"; await context.sync(); }); @@ -51,7 +51,7 @@ script: axis.majorTickMark = "Cross"; // Set the product name label location. // In this case, the location is at 100 units. - axis.setCrossesAt(100); + axis.setPositionAt(100); await context.sync(); }); @@ -88,6 +88,47 @@ script: }); } + async function createChart(context: Excel.RequestContext) { + let sheet = context.workbook.worksheets.getItem("Sample"); + let salesTable = sheet.tables.getItem("SalesTable"); + + let dataRange = sheet.getRange("A1:B7"); + let chart = sheet.charts.add("Line", dataRange, "Auto"); + + chart.setPosition("A15", "I30"); + chart.legend.position = "Right" + chart.legend.format.fill.setSolidColor("white"); + chart.dataLabels.format.font.size = 15; + chart.dataLabels.format.font.color = "black"; + + chart.axes.categoryAxis.majorGridlines.visible = true; + chart.axes.categoryAxis.majorTickMark = "None"; + chart.title.text = "Sales of Bicycle Parts"; + chart.name = "SalesChart"; + + await context.sync(); + } + + function displayUnit(context: Excel.RequestContext) { + let sheet = context.workbook.worksheets.getItem("Sample"); + + let chart = sheet.charts.getItem("SalesChart"); + + let axis = chart.axes.valueAxis; + axis.displayUnit = "Thousands"; + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + async function createChart(context: Excel.RequestContext) { let sheet = context.workbook.worksheets.getItem("Sample"); let salesTable = sheet.tables.getItem("SalesTable"); diff --git a/samples/excel/89-preview-apis/chart-series-doughnutholesize.yaml b/samples/excel/89-preview-apis/chart-series-doughnutholesize.yaml index 181a87102..ef69f8c60 100644 --- a/samples/excel/89-preview-apis/chart-series-doughnutholesize.yaml +++ b/samples/excel/89-preview-apis/chart-series-doughnutholesize.yaml @@ -66,10 +66,10 @@ script: const salesTable = sheet.tables.getItem("SalesTable"); let dataRange = sheet.getRange("A1:B7"); - let chart = sheet.charts.add("doughnutExploded", dataRange, "auto"); + let chart = sheet.charts.add("DoughnutExploded", dataRange, "Auto"); chart.setPosition("A15", "E30"); - chart.legend.position = "right" + chart.legend.position = "Right" chart.legend.format.fill.setSolidColor("white"); chart.dataLabels.format.font.size = 15; chart.dataLabels.format.font.color = "black"; diff --git a/samples/excel/89-preview-apis/chart-series-plotorder.yaml b/samples/excel/89-preview-apis/chart-series-plotorder.yaml index 26d7f384b..4406d5519 100644 --- a/samples/excel/89-preview-apis/chart-series-plotorder.yaml +++ b/samples/excel/89-preview-apis/chart-series-plotorder.yaml @@ -70,10 +70,10 @@ script: const salesTable = sheet.tables.getItem("SalesTable"); let dataRange = sheet.getRange("A1:B7"); - let chart = sheet.charts.add("ColumnClustered", dataRange, "auto"); + let chart = sheet.charts.add("ColumnClustered", dataRange, "Auto"); chart.setPosition("A15", "E30"); - chart.legend.position = "right" + chart.legend.position = "Right" chart.legend.format.fill.setSolidColor("white"); chart.dataLabels.format.font.size = 15; chart.dataLabels.format.font.color = "black"; diff --git a/samples/excel/89-preview-apis/chart-title-substring.yaml b/samples/excel/89-preview-apis/chart-title-substring.yaml index 22fd98636..ff97d7a26 100644 --- a/samples/excel/89-preview-apis/chart-title-substring.yaml +++ b/samples/excel/89-preview-apis/chart-title-substring.yaml @@ -56,10 +56,10 @@ script: let sheet = context.workbook.worksheets.getItem("Sample"); let dataRange = sheet.getRange("A3:E7"); - let chart = sheet.charts.add("columnStacked", dataRange, "auto"); + let chart = sheet.charts.add("ColumnStacked", dataRange, "Auto"); chart.title.text = "Bicycle parts sales"; chart.setPosition("A10", "H33"); - chart.legend.position = "right"; + chart.legend.position = "Right"; chart.legend.format.fill.setSolidColor("white"); chart.dataLabels.format.font.size = 15; chart.dataLabels.format.font.color = "black"; From 86869f6ddad3a97696494cbe6dff87a0ff875608 Mon Sep 17 00:00:00 2001 From: Ricky Kirkham Date: Tue, 8 May 2018 12:41:33 -0700 Subject: [PATCH 039/660] ran travis on last commit --- playlists/excel.yaml | 2 +- samples/excel/89-preview-apis/chart-axis-formatting.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 1ac072be0..f2bcd2fa5 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -614,7 +614,7 @@ https://raw.githubusercontent.com////samples/excel/89-preview-apis/chart-axis-formatting.yaml group: Preview APIs api_set: - ExcelAPI: 1.7 + ExcelAPI: 1.8 - id: excel-chart-series-doughnutholesize name: Chart series - doughnutHoleSize fileName: chart-series-doughnutholesize.yaml diff --git a/samples/excel/89-preview-apis/chart-axis-formatting.yaml b/samples/excel/89-preview-apis/chart-axis-formatting.yaml index d202d0db0..ead37f493 100644 --- a/samples/excel/89-preview-apis/chart-axis-formatting.yaml +++ b/samples/excel/89-preview-apis/chart-axis-formatting.yaml @@ -6,7 +6,7 @@ api_set: ExcelAPI: 1.8 script: content: |+ - + $("#setup").click(() => tryCatch(setup)); $("#format-horizontal-axis").click(formatHorizontalAxis); $("#format-vertical-axis").click(formatVerticalAxis); From 5fd34baf3732d67d03aa06a1a8527c8efaf04443 Mon Sep 17 00:00:00 2001 From: Alex Jerabek Date: Tue, 8 May 2018 15:03:01 -0700 Subject: [PATCH 040/660] Moving preview snippets into proper categories --- playlists/excel.yaml | 265 ++---------------- .../conditional-formatting-advanced.yaml | 1 + .../conditional-formatting-basic.yaml | 1 + .../excel/30-range/copy-multiply-values.yaml | 1 + .../create-and-use-range-intersection.yaml | 1 + samples/excel/30-range/formatting.yaml | 1 + .../30-range/insert-delete-clear-range.yaml | 1 + .../range-hyperlink.yaml | 2 +- samples/excel/30-range/range-operations.yaml | 1 + .../range-text-orientation.yaml | 2 +- samples/excel/30-range/selected-range.yaml | 1 + samples/excel/30-range/set-get-values.yaml | 1 + .../excel/30-range/test-for-used-range.yaml | 1 + .../excel/30-range/working-with-dates.yaml | 1 + .../excel/35-worksheet/activeworksheet.yaml | 1 + .../add-delete-rename-move-worksheet.yaml | 1 + .../35-worksheet/hide-unhide-worksheet.yaml | 1 + .../excel/35-worksheet/list-worksheets.yaml | 1 + ...rence-worksheets-by-relative-position.yaml | 1 + .../workbook-get-active-cell.yaml | 1 + .../worksheet-copy.yaml | 1 + .../worksheet-freeze-panes.yaml | 2 +- .../worksheet-gridlines.yaml | 2 +- .../35-worksheet/worksheet-range-cell.yaml | 1 + .../worksheet-tab-color.yaml | 2 +- .../{89-preview-apis => 40-table}/style.yaml | 0 .../create-and-remove-named-item.yaml | 1 + .../create-and-use-named-item-for-range.yaml | 1 + .../45-named-item/create-named-item.yaml | 1 + .../excel/45-named-item/list-named-items.yaml | 1 + .../update-named-item.yaml | 2 +- .../chart-axis.yaml | 2 +- .../chart-legend.yaml | 2 +- .../chart-point.yaml | 2 +- .../chart-series-doughnutholesize.yaml | 1 + .../chart-series-markers.yaml | 2 +- .../chart-series-plotorder.yaml | 1 + .../chart-series.yaml | 2 +- .../chart-title-substring.yaml | 1 + .../chart-trendlines.yaml | 2 +- samples/excel/70-events/data-changed.yaml | 1 + .../events-table-changed.yaml | 2 +- .../events-tablecollection-changed.yaml | 2 +- .../events-worksheet-activated.yaml | 2 +- .../events-worksheet-changed.yaml | 2 +- .../events-worksheet-selectionchanged.yaml | 1 + .../excel/70-events/selection-changed.yaml | 1 + samples/excel/70-events/setting-changed.yaml | 1 + .../document-properties.yaml | 2 +- .../82-document/get-file-in-slices-async.yaml | 1 + ...a-in-worksheet-and-workbook-structure.yaml | 1 + view/excel.json | 31 +- 52 files changed, 71 insertions(+), 291 deletions(-) rename samples/excel/{89-preview-apis => 30-range}/range-hyperlink.yaml (99%) rename samples/excel/{89-preview-apis => 30-range}/range-text-orientation.yaml (99%) rename samples/excel/{89-preview-apis => 35-worksheet}/workbook-get-active-cell.yaml (99%) rename samples/excel/{89-preview-apis => 35-worksheet}/worksheet-copy.yaml (99%) rename samples/excel/{89-preview-apis => 35-worksheet}/worksheet-freeze-panes.yaml (99%) rename samples/excel/{89-preview-apis => 35-worksheet}/worksheet-gridlines.yaml (99%) rename samples/excel/{89-preview-apis => 35-worksheet}/worksheet-tab-color.yaml (99%) rename samples/excel/{89-preview-apis => 40-table}/style.yaml (100%) rename samples/excel/{89-preview-apis => 45-named-item}/update-named-item.yaml (99%) rename samples/excel/{89-preview-apis => 50-chart}/chart-axis.yaml (99%) rename samples/excel/{89-preview-apis => 50-chart}/chart-legend.yaml (99%) rename samples/excel/{89-preview-apis => 50-chart}/chart-point.yaml (99%) rename samples/excel/{89-preview-apis => 50-chart}/chart-series-doughnutholesize.yaml (99%) rename samples/excel/{89-preview-apis => 50-chart}/chart-series-markers.yaml (99%) rename samples/excel/{89-preview-apis => 50-chart}/chart-series-plotorder.yaml (99%) rename samples/excel/{89-preview-apis => 50-chart}/chart-series.yaml (99%) rename samples/excel/{89-preview-apis => 50-chart}/chart-title-substring.yaml (99%) rename samples/excel/{89-preview-apis => 50-chart}/chart-trendlines.yaml (99%) rename samples/excel/{89-preview-apis => 70-events}/events-table-changed.yaml (99%) rename samples/excel/{89-preview-apis => 70-events}/events-tablecollection-changed.yaml (99%) rename samples/excel/{89-preview-apis => 70-events}/events-worksheet-activated.yaml (99%) rename samples/excel/{89-preview-apis => 70-events}/events-worksheet-changed.yaml (99%) rename samples/excel/{89-preview-apis => 70-events}/events-worksheet-selectionchanged.yaml (99%) rename samples/excel/{89-preview-apis => 82-document}/document-properties.yaml (99%) rename samples/excel/{89-preview-apis => 82-document}/protect-data-in-worksheet-and-workbook-structure.yaml (99%) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 1ac072be0..ff1eb2140 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -38,15 +38,6 @@ group: Scenarios api_set: ExcelApi: 1.1 -- id: excel-range-conditional-formatting-advanced - name: Conditional Formatting for Ranges - Advanced - fileName: conditional-formatting-advanced.yaml - description: Work with more than one conditional format on the same range. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/30-range/conditional-formatting-advanced.yaml - group: Range - api_set: - ExcelApi: 1.6 - id: excel-range-conditional-formatting-basic name: Conditional Formatting for Ranges - Basic fileName: conditional-formatting-basic.yaml @@ -56,6 +47,15 @@ group: Range api_set: ExcelApi: 1.6 +- id: excel-range-conditional-formatting-advanced + name: Conditional Formatting for Ranges - Advanced + fileName: conditional-formatting-advanced.yaml + description: Work with more than one conditional format on the same range. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/30-range/conditional-formatting-advanced.yaml + group: Range + api_set: + ExcelApi: 1.6 - id: excel-range-copy-multiply-values name: Copy and multiply values fileName: copy-multiply-values.yaml @@ -276,12 +276,12 @@ group: Table api_set: ExcelApi: 1.1 -- id: excel-create-and-use-named-item-for-range - name: Create and use named range item - fileName: create-and-use-named-item-for-range.yaml - description: Create and use named range item +- id: excel-named-item-create-named-item + name: Create a named item + fileName: create-named-item.yaml + description: Create a named item for a formula rawUrl: >- - https://raw.githubusercontent.com////samples/excel/45-named-item/create-and-use-named-item-for-range.yaml + https://raw.githubusercontent.com////samples/excel/45-named-item/create-named-item.yaml group: Named Item api_set: ExcelApi: 1.4 @@ -294,12 +294,12 @@ group: Named Item api_set: ExcelApi: 1.4 -- id: excel-named-item-create-named-item - name: Create a named item - fileName: create-named-item.yaml - description: Create a named item for a formula +- id: excel-create-and-use-named-item-for-range + name: Create and use named range item + fileName: create-and-use-named-item-for-range.yaml + description: Create and use named range item rawUrl: >- - https://raw.githubusercontent.com////samples/excel/45-named-item/create-named-item.yaml + https://raw.githubusercontent.com////samples/excel/45-named-item/create-and-use-named-item-for-range.yaml group: Named Item api_set: ExcelApi: 1.4 @@ -442,170 +442,6 @@ group: Common Patterns api_set: ExcelApi: 1.4 -- id: excel-chart-axis - name: Chart axis - fileName: chart-axis.yaml - description: 'Get, set, and remove axis unit, label and title in a chart.' - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/chart-axis.yaml - group: Preview APIs - api_set: - ExcelAPI: 1.7 -- id: excel-chart-legend - name: Chart legend - fileName: chart-legend.yaml - description: Format legend font - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/chart-legend.yaml - group: Preview APIs - api_set: - ExcelAPI: 1.7 -- id: excel-chart-point - name: Chart point - fileName: chart-point.yaml - description: Set chart point color. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/chart-point.yaml - group: Preview APIs - api_set: - ExcelAPI: 1.7 -- id: excel-chart-series - name: Chart series - fileName: chart-series.yaml - description: 'Add, set, and delete a series in a chart.' - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/chart-series.yaml - group: Preview APIs - api_set: - ExcelAPI: 1.7 -- id: excel-chart-series-markers - name: Chart series markers - fileName: chart-series-markers.yaml - description: Set chart series marker properties - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/chart-series-markers.yaml - group: Preview APIs - api_set: - ExcelAPI: 1.7 -- id: excel-chart-trendlines - name: Chart trendlines - fileName: chart-trendlines.yaml - description: 'Add, get, and format trendlines in a chart.' - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/chart-trendlines.yaml - group: Preview APIs - api_set: - ExcelAPI: 1.7 -- id: excel-document-properties - name: Document properties - fileName: document-properties.yaml - description: Set and get document properties. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/document-properties.yaml - group: Preview APIs - api_set: - ExcelApi: 1.7 -- id: excel-events-table-changed - name: Events - Table changed - fileName: events-table-changed.yaml - description: Add event handlers for table onChanged and onSelectionChanged events - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/events-table-changed.yaml - group: Preview APIs - api_set: - ExcelApi: 1.7 -- id: excel-events-tablecollection-changed - name: Events - Table collection changed - fileName: events-tablecollection-changed.yaml - description: Add event handlers for table collection onChanged event - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/events-tablecollection-changed.yaml - group: Preview APIs - api_set: - ExcelApi: 1.7 -- id: excel-events-worksheet-activated - name: Events - Worksheet activated - fileName: events-worksheet-activated.yaml - description: Add event handlers for worksheet onActivated and onDeactivated events - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/events-worksheet-activated.yaml - group: Preview APIs - api_set: - ExcelApi: 1.7 -- id: excel-events-worksheet-changed - name: Events - Worksheet changed - fileName: events-worksheet-changed.yaml - description: Add event handlers for worksheet onChanged and onAdded events - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/events-worksheet-changed.yaml - group: Preview APIs - api_set: - ExcelApi: 1.7 -- id: excel-update-named-item - name: Update a named item - fileName: update-named-item.yaml - description: Create and then update a named item - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/update-named-item.yaml - group: Preview APIs - api_set: - ExcelApi: 1.7 -- id: excel-range-hyperlink - name: Range hyperlink - fileName: range-hyperlink.yaml - description: 'Create, update, and clear a hyperlink for a range.' - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/range-hyperlink.yaml - group: Preview APIs - api_set: - ExcelApi: 1.7 -- id: excel-range-text-orientation - name: Range text orientation - fileName: range-text-orientation.yaml - description: Set and get the text orientation within a range - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/range-text-orientation.yaml - group: Preview APIs - api_set: - ExcelApi: 1.7 -- id: excel-style - name: Style - fileName: style.yaml - description: 'Add, apply, get and delete styles.' - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/style.yaml - group: Preview APIs - api_set: - ExcelApi: 1.7 -- id: excel-gridlines - name: Worksheet gridlines - fileName: worksheet-gridlines.yaml - description: Hide and show gridlines in a worksheet - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/worksheet-gridlines.yaml - group: Preview APIs - api_set: - ExcelAPI: 1.7 -- id: excel-worksheet-tab-color - name: Worksheet tab color - fileName: worksheet-tab-color.yaml - description: Set and get the tab color of a worksheet - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/worksheet-tab-color.yaml - group: Preview APIs - api_set: - ExcelApi: 1.7 -- id: excel-worksheet-freeze-panes - name: Manage frozen panes in a worksheet - fileName: worksheet-freeze-panes.yaml - description: >- - Freeze columns, freeze rows, freeze a range, and manage frozen panes in a - worksheet. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/worksheet-freeze-panes.yaml - group: Preview APIs - api_set: - ExcelApi: 1.7 - id: excel-chart-axis-formatting name: Chart - Axis formatting fileName: chart-axis-formatting.yaml @@ -615,33 +451,6 @@ group: Preview APIs api_set: ExcelAPI: 1.7 -- id: excel-chart-series-doughnutholesize - name: Chart series - doughnutHoleSize - fileName: chart-series-doughnutholesize.yaml - description: Set the doughnutHoleSize property in a series for a dough nut chart. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/chart-series-doughnutholesize.yaml - group: Preview APIs - api_set: - ExcelApi: 1.7 -- id: excel-chart-series-plotorder - name: Chart - series plot order - fileName: chart-series-plotorder.yaml - description: Order the plotting of series in a chart. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/chart-series-plotorder.yaml - group: Preview APIs - api_set: - ExcelAPI: 1.7 -- id: excel-chart-title-substring - name: Chart - Title substring - fileName: chart-title-substring.yaml - description: Get and set title substring for a chart. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/chart-title-substring.yaml - group: Preview APIs - api_set: - ExcelApi: 1.7 - id: excel-data-validation name: Data Validation fileName: data-validation.yaml @@ -654,24 +463,6 @@ group: Preview APIs api_set: ExcelApi: 1.7 -- id: excel-events-worksheet-selectionchanged - name: Events - Worksheet onSelectionChanged - fileName: events-worksheet-selectionchanged.yaml - description: Add an event handler for the worksheet onSelectionChanged event - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/events-worksheet-selectionchanged.yaml - group: Preview APIs - api_set: - ExcelApi: 1.7 -- id: excel-protect-data-in-worksheet-and-workbook-structure - name: Protect data in worksheet and the workbook structure - fileName: protect-data-in-worksheet-and-workbook-structure.yaml - description: Shows how to protect data in a worksheet and the workbook structure. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/protect-data-in-worksheet-and-workbook-structure.yaml - group: Preview APIs - api_set: - ExcelApi: 1.7 - id: excel-range-areas name: Using Areas (Discontiguous Ranges) fileName: range-areas.yaml @@ -683,24 +474,6 @@ group: Preview APIs api_set: ExcelApi: 1.8 -- id: excel-workbook-get-active-cell - name: Get active cell - fileName: workbook-get-active-cell.yaml - description: Gets the active cell of the entire workbook. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/workbook-get-active-cell.yaml - group: Preview APIs - api_set: - ExcelApi: 1.7 -- 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////samples/excel/89-preview-apis/worksheet-copy.yaml - group: Preview APIs - api_set: - ExcelApi: 1.7 - id: excel-just-for-fun-gradient name: Gradient fileName: gradient.yaml diff --git a/samples/excel/30-range/conditional-formatting-advanced.yaml b/samples/excel/30-range/conditional-formatting-advanced.yaml index c3219d1eb..f6aa5a2c1 100644 --- a/samples/excel/30-range/conditional-formatting-advanced.yaml +++ b/samples/excel/30-range/conditional-formatting-advanced.yaml @@ -1,3 +1,4 @@ +order: 2 id: excel-range-conditional-formatting-advanced name: Conditional Formatting for Ranges - Advanced description: Work with more than one conditional format on the same range. diff --git a/samples/excel/30-range/conditional-formatting-basic.yaml b/samples/excel/30-range/conditional-formatting-basic.yaml index 83d468cf8..f8db819eb 100644 --- a/samples/excel/30-range/conditional-formatting-basic.yaml +++ b/samples/excel/30-range/conditional-formatting-basic.yaml @@ -1,3 +1,4 @@ +order: 1 id: excel-range-conditional-formatting-basic name: Conditional Formatting for Ranges - Basic description: Apply common types of conditional formatting to ranges. diff --git a/samples/excel/30-range/copy-multiply-values.yaml b/samples/excel/30-range/copy-multiply-values.yaml index 868222cf4..80ba2cf64 100644 --- a/samples/excel/30-range/copy-multiply-values.yaml +++ b/samples/excel/30-range/copy-multiply-values.yaml @@ -1,3 +1,4 @@ +order: 3 id: excel-range-copy-multiply-values name: Copy and multiply values description: Copy and multiply values in a range diff --git a/samples/excel/30-range/create-and-use-range-intersection.yaml b/samples/excel/30-range/create-and-use-range-intersection.yaml index 14905489f..e2e4facc1 100644 --- a/samples/excel/30-range/create-and-use-range-intersection.yaml +++ b/samples/excel/30-range/create-and-use-range-intersection.yaml @@ -1,3 +1,4 @@ +order: 4 id: excel-range-create-and-use-range-intersection name: Create and Use an Intersection of Ranges description: Create a an intersection of two ranges and make a chart of it. diff --git a/samples/excel/30-range/formatting.yaml b/samples/excel/30-range/formatting.yaml index 5716574fc..73e67de43 100644 --- a/samples/excel/30-range/formatting.yaml +++ b/samples/excel/30-range/formatting.yaml @@ -1,3 +1,4 @@ +order: 5 id: excel-range-formatting name: Formatting description: Format a range diff --git a/samples/excel/30-range/insert-delete-clear-range.yaml b/samples/excel/30-range/insert-delete-clear-range.yaml index 51c7ef353..c42ffab8b 100644 --- a/samples/excel/30-range/insert-delete-clear-range.yaml +++ b/samples/excel/30-range/insert-delete-clear-range.yaml @@ -1,3 +1,4 @@ +order: 6 id: excel-range-insert-delete-clear-range name: 'Insert, delete, clear range' description: 'Insert, delete and clear a range' diff --git a/samples/excel/89-preview-apis/range-hyperlink.yaml b/samples/excel/30-range/range-hyperlink.yaml similarity index 99% rename from samples/excel/89-preview-apis/range-hyperlink.yaml rename to samples/excel/30-range/range-hyperlink.yaml index 127e6b7f7..561484e9a 100644 --- a/samples/excel/89-preview-apis/range-hyperlink.yaml +++ b/samples/excel/30-range/range-hyperlink.yaml @@ -1,4 +1,4 @@ -order: 13 +order: 12 id: excel-range-hyperlink name: Range hyperlink description: 'Create, update, and clear a hyperlink for a range.' diff --git a/samples/excel/30-range/range-operations.yaml b/samples/excel/30-range/range-operations.yaml index 877304e81..2aefbdee5 100644 --- a/samples/excel/30-range/range-operations.yaml +++ b/samples/excel/30-range/range-operations.yaml @@ -1,3 +1,4 @@ +order: 7 id: excel-range-range-operations name: Range operations description: 'Bounding rect, intersection, offset and resized range' diff --git a/samples/excel/89-preview-apis/range-text-orientation.yaml b/samples/excel/30-range/range-text-orientation.yaml similarity index 99% rename from samples/excel/89-preview-apis/range-text-orientation.yaml rename to samples/excel/30-range/range-text-orientation.yaml index 24de56767..72a07576d 100644 --- a/samples/excel/89-preview-apis/range-text-orientation.yaml +++ b/samples/excel/30-range/range-text-orientation.yaml @@ -1,4 +1,4 @@ -order: 14 +order: 13 id: excel-range-text-orientation name: Range text orientation description: Set and get the text orientation within a range diff --git a/samples/excel/30-range/selected-range.yaml b/samples/excel/30-range/selected-range.yaml index 3803a1dca..8fc46e9db 100644 --- a/samples/excel/30-range/selected-range.yaml +++ b/samples/excel/30-range/selected-range.yaml @@ -1,3 +1,4 @@ +order: 8 id: excel-range-selected-range name: Selected range description: Get and set the currently selected range diff --git a/samples/excel/30-range/set-get-values.yaml b/samples/excel/30-range/set-get-values.yaml index 2d97f04cc..1e13809a2 100644 --- a/samples/excel/30-range/set-get-values.yaml +++ b/samples/excel/30-range/set-get-values.yaml @@ -1,3 +1,4 @@ +order: 9 id: excel-range-set-get-values name: Set and get values description: Set and get values and formulas for a range diff --git a/samples/excel/30-range/test-for-used-range.yaml b/samples/excel/30-range/test-for-used-range.yaml index 623fe73fe..8c9606029 100644 --- a/samples/excel/30-range/test-for-used-range.yaml +++ b/samples/excel/30-range/test-for-used-range.yaml @@ -1,3 +1,4 @@ +order: 10 id: excel-range-test-for-used-range name: Test for used range description: Create a chart from a table only if there's data in the table. diff --git a/samples/excel/30-range/working-with-dates.yaml b/samples/excel/30-range/working-with-dates.yaml index 70f20e225..ff976c8bc 100644 --- a/samples/excel/30-range/working-with-dates.yaml +++ b/samples/excel/30-range/working-with-dates.yaml @@ -1,3 +1,4 @@ +order: 11 id: excel-range-working-with-dates name: Working with dates description: Setting and getting date values in a range and manipulating them using the Moment JavaScript library with the Moment-MSDate plug-in diff --git a/samples/excel/35-worksheet/activeworksheet.yaml b/samples/excel/35-worksheet/activeworksheet.yaml index 13a8a7086..8d4ad77c1 100644 --- a/samples/excel/35-worksheet/activeworksheet.yaml +++ b/samples/excel/35-worksheet/activeworksheet.yaml @@ -1,3 +1,4 @@ +order: 1 id: excel-worksheet-activeworksheet name: Active worksheet description: Get and set the active worksheet diff --git a/samples/excel/35-worksheet/add-delete-rename-move-worksheet.yaml b/samples/excel/35-worksheet/add-delete-rename-move-worksheet.yaml index cacb0eb7f..4fd1aebdc 100644 --- a/samples/excel/35-worksheet/add-delete-rename-move-worksheet.yaml +++ b/samples/excel/35-worksheet/add-delete-rename-move-worksheet.yaml @@ -1,3 +1,4 @@ +order: 2 id: excel-worksheet-add-delete-rename-move-worksheet name: 'Add, delete, rename and move worksheet' description: 'Add, delete, rename and change the position of a worksheet' diff --git a/samples/excel/35-worksheet/hide-unhide-worksheet.yaml b/samples/excel/35-worksheet/hide-unhide-worksheet.yaml index 3ba949c3c..54fc2405a 100644 --- a/samples/excel/35-worksheet/hide-unhide-worksheet.yaml +++ b/samples/excel/35-worksheet/hide-unhide-worksheet.yaml @@ -1,3 +1,4 @@ +order: 3 id: excel-worksheet-hide-unhide-worksheet name: Hide and unhide worksheet description: Hide and unhide a worksheet diff --git a/samples/excel/35-worksheet/list-worksheets.yaml b/samples/excel/35-worksheet/list-worksheets.yaml index c6b6e5674..db8e2a016 100644 --- a/samples/excel/35-worksheet/list-worksheets.yaml +++ b/samples/excel/35-worksheet/list-worksheets.yaml @@ -1,3 +1,4 @@ +order: 4 id: excel-worksheet-list-worksheets name: List worksheets description: List the worksheets in the workbook diff --git a/samples/excel/35-worksheet/reference-worksheets-by-relative-position.yaml b/samples/excel/35-worksheet/reference-worksheets-by-relative-position.yaml index 6c63b267d..bd0a3a898 100644 --- a/samples/excel/35-worksheet/reference-worksheets-by-relative-position.yaml +++ b/samples/excel/35-worksheet/reference-worksheets-by-relative-position.yaml @@ -1,3 +1,4 @@ +order: 5 id: excel-worksheet-reference-worksheets-by-relative-position name: Reference worksheets by relative position description: 'Shows how to use the worksheet shortcut methods, such as getFirst, getLast, getPrevious, and getNext.' diff --git a/samples/excel/89-preview-apis/workbook-get-active-cell.yaml b/samples/excel/35-worksheet/workbook-get-active-cell.yaml similarity index 99% rename from samples/excel/89-preview-apis/workbook-get-active-cell.yaml rename to samples/excel/35-worksheet/workbook-get-active-cell.yaml index f3b51624c..522b3ae56 100644 --- a/samples/excel/89-preview-apis/workbook-get-active-cell.yaml +++ b/samples/excel/35-worksheet/workbook-get-active-cell.yaml @@ -1,3 +1,4 @@ +order: 7 id: excel-workbook-get-active-cell name: Get active cell description: Gets the active cell of the entire workbook. diff --git a/samples/excel/89-preview-apis/worksheet-copy.yaml b/samples/excel/35-worksheet/worksheet-copy.yaml similarity index 99% rename from samples/excel/89-preview-apis/worksheet-copy.yaml rename to samples/excel/35-worksheet/worksheet-copy.yaml index e8d61aed2..d49b54a9b 100644 --- a/samples/excel/89-preview-apis/worksheet-copy.yaml +++ b/samples/excel/35-worksheet/worksheet-copy.yaml @@ -1,3 +1,4 @@ +order: 8 id: excel-worksheet-copy name: Copy worksheet description: Copies the active worksheet to the specified location. diff --git a/samples/excel/89-preview-apis/worksheet-freeze-panes.yaml b/samples/excel/35-worksheet/worksheet-freeze-panes.yaml similarity index 99% rename from samples/excel/89-preview-apis/worksheet-freeze-panes.yaml rename to samples/excel/35-worksheet/worksheet-freeze-panes.yaml index 8b8b33993..5d9763745 100644 --- a/samples/excel/89-preview-apis/worksheet-freeze-panes.yaml +++ b/samples/excel/35-worksheet/worksheet-freeze-panes.yaml @@ -1,4 +1,4 @@ -order: 18 +order: 9 id: excel-worksheet-freeze-panes name: Manage frozen panes in a worksheet description: 'Freeze columns, freeze rows, freeze a range, and manage frozen panes in a worksheet.' diff --git a/samples/excel/89-preview-apis/worksheet-gridlines.yaml b/samples/excel/35-worksheet/worksheet-gridlines.yaml similarity index 99% rename from samples/excel/89-preview-apis/worksheet-gridlines.yaml rename to samples/excel/35-worksheet/worksheet-gridlines.yaml index 778c62fc6..eace58dd9 100644 --- a/samples/excel/89-preview-apis/worksheet-gridlines.yaml +++ b/samples/excel/35-worksheet/worksheet-gridlines.yaml @@ -1,4 +1,4 @@ -order: 16 +order: 10 id: excel-gridlines name: Worksheet gridlines description: Hide and show gridlines in a worksheet diff --git a/samples/excel/35-worksheet/worksheet-range-cell.yaml b/samples/excel/35-worksheet/worksheet-range-cell.yaml index b358358d5..f7b652a0c 100644 --- a/samples/excel/35-worksheet/worksheet-range-cell.yaml +++ b/samples/excel/35-worksheet/worksheet-range-cell.yaml @@ -1,3 +1,4 @@ +order: 6 id: excel-worksheet-worksheet-range-cell name: Worksheet range and cell description: Get a range or a cell in a worksheet diff --git a/samples/excel/89-preview-apis/worksheet-tab-color.yaml b/samples/excel/35-worksheet/worksheet-tab-color.yaml similarity index 99% rename from samples/excel/89-preview-apis/worksheet-tab-color.yaml rename to samples/excel/35-worksheet/worksheet-tab-color.yaml index 21234cef5..41b28f148 100644 --- a/samples/excel/89-preview-apis/worksheet-tab-color.yaml +++ b/samples/excel/35-worksheet/worksheet-tab-color.yaml @@ -1,4 +1,4 @@ -order: 17 +order: 11 id: excel-worksheet-tab-color name: Worksheet tab color description: Set and get the tab color of a worksheet diff --git a/samples/excel/89-preview-apis/style.yaml b/samples/excel/40-table/style.yaml similarity index 100% rename from samples/excel/89-preview-apis/style.yaml rename to samples/excel/40-table/style.yaml diff --git a/samples/excel/45-named-item/create-and-remove-named-item.yaml b/samples/excel/45-named-item/create-and-remove-named-item.yaml index 3b1898cc1..9e9f4ceda 100644 --- a/samples/excel/45-named-item/create-and-remove-named-item.yaml +++ b/samples/excel/45-named-item/create-and-remove-named-item.yaml @@ -1,3 +1,4 @@ +order: 2 id: excel-named-item-create-and-remove-named-item name: Create and remove named items description: Create and remove named items for a formula diff --git a/samples/excel/45-named-item/create-and-use-named-item-for-range.yaml b/samples/excel/45-named-item/create-and-use-named-item-for-range.yaml index 7e6e32fe3..5a472e871 100644 --- a/samples/excel/45-named-item/create-and-use-named-item-for-range.yaml +++ b/samples/excel/45-named-item/create-and-use-named-item-for-range.yaml @@ -1,3 +1,4 @@ +order: 3 id: excel-create-and-use-named-item-for-range name: Create and use named range item description: Create and use named range item diff --git a/samples/excel/45-named-item/create-named-item.yaml b/samples/excel/45-named-item/create-named-item.yaml index 2c4a0ed1e..d997aaef3 100644 --- a/samples/excel/45-named-item/create-named-item.yaml +++ b/samples/excel/45-named-item/create-named-item.yaml @@ -1,3 +1,4 @@ +order: 1 id: excel-named-item-create-named-item name: Create a named item description: Create a named item for a formula diff --git a/samples/excel/45-named-item/list-named-items.yaml b/samples/excel/45-named-item/list-named-items.yaml index 92855168a..46e564c93 100644 --- a/samples/excel/45-named-item/list-named-items.yaml +++ b/samples/excel/45-named-item/list-named-items.yaml @@ -1,3 +1,4 @@ +order: 4 id: excel-named-item-list-named-items name: List all named items in a workbook description: List all named items in a workbook diff --git a/samples/excel/89-preview-apis/update-named-item.yaml b/samples/excel/45-named-item/update-named-item.yaml similarity index 99% rename from samples/excel/89-preview-apis/update-named-item.yaml rename to samples/excel/45-named-item/update-named-item.yaml index e7f4fba6a..38b10f08a 100644 --- a/samples/excel/89-preview-apis/update-named-item.yaml +++ b/samples/excel/45-named-item/update-named-item.yaml @@ -1,4 +1,4 @@ -order: 12 +order: 5 id: excel-update-named-item name: Update a named item description: Create and then update a named item diff --git a/samples/excel/89-preview-apis/chart-axis.yaml b/samples/excel/50-chart/chart-axis.yaml similarity index 99% rename from samples/excel/89-preview-apis/chart-axis.yaml rename to samples/excel/50-chart/chart-axis.yaml index e52e2afad..edf15832a 100644 --- a/samples/excel/89-preview-apis/chart-axis.yaml +++ b/samples/excel/50-chart/chart-axis.yaml @@ -1,4 +1,4 @@ -order: 1 +order: 6 id: excel-chart-axis name: Chart axis description: 'Get, set, and remove axis unit, label and title in a chart.' diff --git a/samples/excel/89-preview-apis/chart-legend.yaml b/samples/excel/50-chart/chart-legend.yaml similarity index 99% rename from samples/excel/89-preview-apis/chart-legend.yaml rename to samples/excel/50-chart/chart-legend.yaml index f7060d854..d8166aab7 100644 --- a/samples/excel/89-preview-apis/chart-legend.yaml +++ b/samples/excel/50-chart/chart-legend.yaml @@ -1,4 +1,4 @@ -order: 2 +order: 7 id: excel-chart-legend name: Chart legend description: Format legend font diff --git a/samples/excel/89-preview-apis/chart-point.yaml b/samples/excel/50-chart/chart-point.yaml similarity index 99% rename from samples/excel/89-preview-apis/chart-point.yaml rename to samples/excel/50-chart/chart-point.yaml index 1c48c29c0..9bf9b76c9 100644 --- a/samples/excel/89-preview-apis/chart-point.yaml +++ b/samples/excel/50-chart/chart-point.yaml @@ -1,4 +1,4 @@ -order: 3 +order: 8 id: excel-chart-point name: Chart point description: Set chart point color. diff --git a/samples/excel/89-preview-apis/chart-series-doughnutholesize.yaml b/samples/excel/50-chart/chart-series-doughnutholesize.yaml similarity index 99% rename from samples/excel/89-preview-apis/chart-series-doughnutholesize.yaml rename to samples/excel/50-chart/chart-series-doughnutholesize.yaml index 181a87102..771ba1db8 100644 --- a/samples/excel/89-preview-apis/chart-series-doughnutholesize.yaml +++ b/samples/excel/50-chart/chart-series-doughnutholesize.yaml @@ -1,3 +1,4 @@ +order: 10 id: excel-chart-series-doughnutholesize name: Chart series - doughnutHoleSize description: Set the doughnutHoleSize property in a series for a dough nut chart. diff --git a/samples/excel/89-preview-apis/chart-series-markers.yaml b/samples/excel/50-chart/chart-series-markers.yaml similarity index 99% rename from samples/excel/89-preview-apis/chart-series-markers.yaml rename to samples/excel/50-chart/chart-series-markers.yaml index 258504bdd..c25aede7a 100644 --- a/samples/excel/89-preview-apis/chart-series-markers.yaml +++ b/samples/excel/50-chart/chart-series-markers.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 11 id: excel-chart-series-markers name: Chart series markers description: Set chart series marker properties diff --git a/samples/excel/89-preview-apis/chart-series-plotorder.yaml b/samples/excel/50-chart/chart-series-plotorder.yaml similarity index 99% rename from samples/excel/89-preview-apis/chart-series-plotorder.yaml rename to samples/excel/50-chart/chart-series-plotorder.yaml index 26d7f384b..4aedfabb7 100644 --- a/samples/excel/89-preview-apis/chart-series-plotorder.yaml +++ b/samples/excel/50-chart/chart-series-plotorder.yaml @@ -1,3 +1,4 @@ +order: 12 id: excel-chart-series-plotorder name: Chart - series plot order description: Order the plotting of series in a chart. diff --git a/samples/excel/89-preview-apis/chart-series.yaml b/samples/excel/50-chart/chart-series.yaml similarity index 99% rename from samples/excel/89-preview-apis/chart-series.yaml rename to samples/excel/50-chart/chart-series.yaml index 4b6e6d878..a61273249 100644 --- a/samples/excel/89-preview-apis/chart-series.yaml +++ b/samples/excel/50-chart/chart-series.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 9 id: excel-chart-series name: Chart series description: 'Add, set, and delete a series in a chart.' diff --git a/samples/excel/89-preview-apis/chart-title-substring.yaml b/samples/excel/50-chart/chart-title-substring.yaml similarity index 99% rename from samples/excel/89-preview-apis/chart-title-substring.yaml rename to samples/excel/50-chart/chart-title-substring.yaml index 22fd98636..43b5c29ab 100644 --- a/samples/excel/89-preview-apis/chart-title-substring.yaml +++ b/samples/excel/50-chart/chart-title-substring.yaml @@ -1,3 +1,4 @@ +order: 13 id: excel-chart-title-substring name: Chart - Title substring description: Get and set title substring for a chart. diff --git a/samples/excel/89-preview-apis/chart-trendlines.yaml b/samples/excel/50-chart/chart-trendlines.yaml similarity index 99% rename from samples/excel/89-preview-apis/chart-trendlines.yaml rename to samples/excel/50-chart/chart-trendlines.yaml index 5f576e29a..4a2be3c6f 100644 --- a/samples/excel/89-preview-apis/chart-trendlines.yaml +++ b/samples/excel/50-chart/chart-trendlines.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 14 id: excel-chart-trendlines name: Chart trendlines description: 'Add, get, and format trendlines in a chart.' diff --git a/samples/excel/70-events/data-changed.yaml b/samples/excel/70-events/data-changed.yaml index 92c56b106..690395929 100644 --- a/samples/excel/70-events/data-changed.yaml +++ b/samples/excel/70-events/data-changed.yaml @@ -1,3 +1,4 @@ +order: 1 id: excel-events-data-changed name: Handle the data changed event description: This snippet shows how to register a handler for the data-changed event. diff --git a/samples/excel/89-preview-apis/events-table-changed.yaml b/samples/excel/70-events/events-table-changed.yaml similarity index 99% rename from samples/excel/89-preview-apis/events-table-changed.yaml rename to samples/excel/70-events/events-table-changed.yaml index 32f8d8f95..552180b00 100644 --- a/samples/excel/89-preview-apis/events-table-changed.yaml +++ b/samples/excel/70-events/events-table-changed.yaml @@ -1,4 +1,4 @@ -order: 8 +order: 4 id: excel-events-table-changed name: Events - Table changed description: Add event handlers for table onChanged and onSelectionChanged events diff --git a/samples/excel/89-preview-apis/events-tablecollection-changed.yaml b/samples/excel/70-events/events-tablecollection-changed.yaml similarity index 99% rename from samples/excel/89-preview-apis/events-tablecollection-changed.yaml rename to samples/excel/70-events/events-tablecollection-changed.yaml index 2d2e34aab..af34f8406 100644 --- a/samples/excel/89-preview-apis/events-tablecollection-changed.yaml +++ b/samples/excel/70-events/events-tablecollection-changed.yaml @@ -1,4 +1,4 @@ -order: 9 +order: 5 id: excel-events-tablecollection-changed name: Events - Table collection changed description: Add event handlers for table collection onChanged event diff --git a/samples/excel/89-preview-apis/events-worksheet-activated.yaml b/samples/excel/70-events/events-worksheet-activated.yaml similarity index 99% rename from samples/excel/89-preview-apis/events-worksheet-activated.yaml rename to samples/excel/70-events/events-worksheet-activated.yaml index d08e8697f..056eb34be 100644 --- a/samples/excel/89-preview-apis/events-worksheet-activated.yaml +++ b/samples/excel/70-events/events-worksheet-activated.yaml @@ -1,4 +1,4 @@ -order: 10 +order: 6 id: excel-events-worksheet-activated name: Events - Worksheet activated description: Add event handlers for worksheet onActivated and onDeactivated events diff --git a/samples/excel/89-preview-apis/events-worksheet-changed.yaml b/samples/excel/70-events/events-worksheet-changed.yaml similarity index 99% rename from samples/excel/89-preview-apis/events-worksheet-changed.yaml rename to samples/excel/70-events/events-worksheet-changed.yaml index 95296e059..45c81f0bf 100644 --- a/samples/excel/89-preview-apis/events-worksheet-changed.yaml +++ b/samples/excel/70-events/events-worksheet-changed.yaml @@ -1,4 +1,4 @@ -order: 11 +order: 7 id: excel-events-worksheet-changed name: Events - Worksheet changed description: Add event handlers for worksheet onChanged and onAdded events diff --git a/samples/excel/89-preview-apis/events-worksheet-selectionchanged.yaml b/samples/excel/70-events/events-worksheet-selectionchanged.yaml similarity index 99% rename from samples/excel/89-preview-apis/events-worksheet-selectionchanged.yaml rename to samples/excel/70-events/events-worksheet-selectionchanged.yaml index d72dfdd10..589c83c71 100644 --- a/samples/excel/89-preview-apis/events-worksheet-selectionchanged.yaml +++ b/samples/excel/70-events/events-worksheet-selectionchanged.yaml @@ -1,3 +1,4 @@ +order: 8 id: excel-events-worksheet-selectionchanged name: Events - Worksheet onSelectionChanged description: Add an event handler for the worksheet onSelectionChanged event diff --git a/samples/excel/70-events/selection-changed.yaml b/samples/excel/70-events/selection-changed.yaml index f721d3cbf..bda490217 100644 --- a/samples/excel/70-events/selection-changed.yaml +++ b/samples/excel/70-events/selection-changed.yaml @@ -1,3 +1,4 @@ +order: 2 id: excel-events-selection-changed name: Selection Changed description: Add and remove an event handler on the selection changed event diff --git a/samples/excel/70-events/setting-changed.yaml b/samples/excel/70-events/setting-changed.yaml index 30d76097b..36d4139ac 100644 --- a/samples/excel/70-events/setting-changed.yaml +++ b/samples/excel/70-events/setting-changed.yaml @@ -1,3 +1,4 @@ +order: 3 id: excel-events-setting-changed name: Handle the settings-changed event description: This snippet shows how to register a handler for the SettingsChanged event. diff --git a/samples/excel/89-preview-apis/document-properties.yaml b/samples/excel/82-document/document-properties.yaml similarity index 99% rename from samples/excel/89-preview-apis/document-properties.yaml rename to samples/excel/82-document/document-properties.yaml index 2de1cf2bc..78432c5e3 100644 --- a/samples/excel/89-preview-apis/document-properties.yaml +++ b/samples/excel/82-document/document-properties.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 2 id: excel-document-properties name: Document properties description: Set and get document properties. diff --git a/samples/excel/82-document/get-file-in-slices-async.yaml b/samples/excel/82-document/get-file-in-slices-async.yaml index 7aa52efba..ba6c2d98f 100644 --- a/samples/excel/82-document/get-file-in-slices-async.yaml +++ b/samples/excel/82-document/get-file-in-slices-async.yaml @@ -1,3 +1,4 @@ +order: 1 id: excel-document-get-file-in-slices-async name: Get file (using slicing) description: Use slicing to get the byte array and base64-encoded string that represent the current document. diff --git a/samples/excel/89-preview-apis/protect-data-in-worksheet-and-workbook-structure.yaml b/samples/excel/82-document/protect-data-in-worksheet-and-workbook-structure.yaml similarity index 99% rename from samples/excel/89-preview-apis/protect-data-in-worksheet-and-workbook-structure.yaml rename to samples/excel/82-document/protect-data-in-worksheet-and-workbook-structure.yaml index 43d35ac2f..4226650b2 100644 --- a/samples/excel/89-preview-apis/protect-data-in-worksheet-and-workbook-structure.yaml +++ b/samples/excel/82-document/protect-data-in-worksheet-and-workbook-structure.yaml @@ -1,3 +1,4 @@ +order: 3 id: excel-protect-data-in-worksheet-and-workbook-structure name: Protect data in worksheet and the workbook structure description: Shows how to protect data in a worksheet and the workbook structure. diff --git a/view/excel.json b/view/excel.json index 703fd2656..b53a89b9a 100644 --- a/view/excel.json +++ b/view/excel.json @@ -5,8 +5,8 @@ "excel-chart-chart-title-js": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/private-samples/excel/20-chart/chart-title-js.yaml", "excel-chart-chart-title-ts": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/private-samples/excel/20-chart/chart-title-ts.yaml", "excel-advanced-report-generation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/20-scenarios/report-generation.yaml", - "excel-range-conditional-formatting-advanced": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-range/conditional-formatting-advanced.yaml", "excel-range-conditional-formatting-basic": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-range/conditional-formatting-basic.yaml", + "excel-range-conditional-formatting-advanced": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-range/conditional-formatting-advanced.yaml", "excel-range-copy-multiply-values": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-range/copy-multiply-values.yaml", "excel-range-create-and-use-range-intersection": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-range/create-and-use-range-intersection.yaml", "excel-range-formatting": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-range/formatting.yaml", @@ -31,9 +31,9 @@ "excel-table-get-visible-range-of-a-filtered-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/40-table/get-visible-range-of-a-filtered-table.yaml", "excel-table-import-json-data": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/40-table/import-json-data.yaml", "excel-table-sort-data": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/40-table/sort-data.yaml", - "excel-create-and-use-named-item-for-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/45-named-item/create-and-use-named-item-for-range.yaml", - "excel-named-item-create-and-remove-named-item": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/45-named-item/create-and-remove-named-item.yaml", "excel-named-item-create-named-item": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/45-named-item/create-named-item.yaml", + "excel-named-item-create-and-remove-named-item": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/45-named-item/create-and-remove-named-item.yaml", + "excel-create-and-use-named-item-for-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/45-named-item/create-and-use-named-item-for-range.yaml", "excel-named-item-list-named-items": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/45-named-item/list-named-items.yaml", "excel-chart-create-column-clustered-chart": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/create-column-clustered-chart.yaml", "excel-chart-create-doughnut-chart": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/create-doughnut-chart.yaml", @@ -49,34 +49,9 @@ "excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-custom-xml-parts/test-xml-for-unique-namespace.yaml", "excel-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/88-common-patterns/multiple-property-set.yaml", - "excel-chart-axis": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-axis.yaml", - "excel-chart-legend": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-legend.yaml", - "excel-chart-point": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-point.yaml", - "excel-chart-series": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-series.yaml", - "excel-chart-series-markers": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-series-markers.yaml", - "excel-chart-trendlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-trendlines.yaml", - "excel-document-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/document-properties.yaml", - "excel-events-table-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-table-changed.yaml", - "excel-events-tablecollection-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-tablecollection-changed.yaml", - "excel-events-worksheet-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-worksheet-activated.yaml", - "excel-events-worksheet-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-worksheet-changed.yaml", - "excel-update-named-item": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/update-named-item.yaml", - "excel-range-hyperlink": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/range-hyperlink.yaml", - "excel-range-text-orientation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/range-text-orientation.yaml", - "excel-style": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/style.yaml", - "excel-gridlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-gridlines.yaml", - "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-tab-color.yaml", - "excel-worksheet-freeze-panes": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-freeze-panes.yaml", "excel-chart-axis-formatting": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-axis-formatting.yaml", - "excel-chart-series-doughnutholesize": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-series-doughnutholesize.yaml", - "excel-chart-series-plotorder": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-series-plotorder.yaml", - "excel-chart-title-substring": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-title-substring.yaml", "excel-data-validation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/data-validation.yaml", - "excel-events-worksheet-selectionchanged": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-worksheet-selectionchanged.yaml", - "excel-protect-data-in-worksheet-and-workbook-structure": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/protect-data-in-worksheet-and-workbook-structure.yaml", "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/range-areas.yaml", - "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/workbook-get-active-cell.yaml", - "excel-worksheet-copy": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-copy.yaml", "excel-just-for-fun-gradient": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-just-for-fun/gradient.yaml", "excel-just-for-fun-patterns": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-just-for-fun/patterns.yaml", "excel-just-for-fun-path-finder-game": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-just-for-fun/path-finder-game.yaml", From 73fbe17605d3eb7c83d185de27fc24da21ed53b0 Mon Sep 17 00:00:00 2001 From: Alex Jerabek Date: Tue, 8 May 2018 17:19:06 -0700 Subject: [PATCH 041/660] Replacing office.js references with instead of beta --- playlists/excel.yaml | 137 ++++++++++++++++++ .../workbook-get-active-cell.yaml | 4 +- .../excel/35-worksheet/worksheet-copy.yaml | 4 +- .../35-worksheet/worksheet-freeze-panes.yaml | 4 +- .../35-worksheet/worksheet-gridlines.yaml | 4 +- .../35-worksheet/worksheet-tab-color.yaml | 6 +- samples/excel/50-chart/chart-axis.yaml | 4 +- samples/excel/50-chart/chart-legend.yaml | 4 +- samples/excel/50-chart/chart-point.yaml | 4 +- .../chart-series-doughnutholesize.yaml | 4 +- .../excel/50-chart/chart-series-markers.yaml | 4 +- .../50-chart/chart-series-plotorder.yaml | 4 +- samples/excel/50-chart/chart-series.yaml | 4 +- .../excel/50-chart/chart-title-substring.yaml | 4 +- samples/excel/50-chart/chart-trendlines.yaml | 4 +- .../excel/70-events/events-table-changed.yaml | 4 +- view/excel.json | 15 ++ 17 files changed, 183 insertions(+), 31 deletions(-) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index ff1eb2140..ce2f66480 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -195,6 +195,53 @@ group: Worksheet api_set: ExcelApi: 1.1 +- id: excel-workbook-get-active-cell + name: Get active cell + fileName: workbook-get-active-cell.yaml + description: Gets the active cell of the entire workbook. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/35-worksheet/workbook-get-active-cell.yaml + group: Worksheet + api_set: + ExcelApi: 1.7 +- 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////samples/excel/35-worksheet/worksheet-copy.yaml + group: Worksheet + api_set: + ExcelApi: 1.7 +- id: excel-worksheet-freeze-panes + name: Manage frozen panes in a worksheet + fileName: worksheet-freeze-panes.yaml + description: >- + Freeze columns, freeze rows, freeze a range, and manage frozen panes in a + worksheet. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/35-worksheet/worksheet-freeze-panes.yaml + group: Worksheet + api_set: + ExcelApi: 1.7 +- id: excel-gridlines + name: Worksheet gridlines + fileName: worksheet-gridlines.yaml + description: Hide and show gridlines in a worksheet + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/35-worksheet/worksheet-gridlines.yaml + group: Worksheet + api_set: + ExcelAPI: 1.7 +- id: excel-worksheet-worksheet-tab-color + name: Worksheet tab color + fileName: worksheet-tab-color.yaml + description: Set and get the tab color of a worksheet + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/35-worksheet/worksheet-tab-color.yaml + group: Worksheet + api_set: + ExcelApi: 1.7 - id: excel-table-add-rows-and-columns-to-a-table name: Add rows and columns fileName: add-rows-and-columns-to-a-table.yaml @@ -357,6 +404,87 @@ group: Chart api_set: ExcelApi: 1.1 +- id: excel-chart-axis + name: Chart axis + fileName: chart-axis.yaml + description: 'Get, set, and remove axis unit, label and title in a chart.' + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/50-chart/chart-axis.yaml + group: Chart + api_set: + ExcelAPI: 1.7 +- id: excel-chart-legend + name: Chart legend + fileName: chart-legend.yaml + description: Format legend font + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/50-chart/chart-legend.yaml + group: Chart + api_set: + ExcelAPI: 1.7 +- id: excel-chart-point + name: Chart point + fileName: chart-point.yaml + description: Set chart point color. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/50-chart/chart-point.yaml + group: Chart + api_set: + ExcelAPI: 1.7 +- id: excel-chart-series + name: Chart series + fileName: chart-series.yaml + description: 'Add, set, and delete a series in a chart.' + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/50-chart/chart-series.yaml + group: Chart + api_set: + ExcelAPI: 1.7 +- id: excel-chart-series-doughnutholesize + name: Chart series - doughnutHoleSize + fileName: chart-series-doughnutholesize.yaml + description: Set the doughnutHoleSize property in a series for a dough nut chart. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/50-chart/chart-series-doughnutholesize.yaml + group: Chart + api_set: + ExcelApi: 1.7 +- id: excel-chart-series-markers + name: Chart series markers + fileName: chart-series-markers.yaml + description: Set chart series marker properties + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/50-chart/chart-series-markers.yaml + group: Chart + api_set: + ExcelAPI: 1.7 +- id: excel-chart-series-plotorder + name: Chart - series plot order + fileName: chart-series-plotorder.yaml + description: Order the plotting of series in a chart. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/50-chart/chart-series-plotorder.yaml + group: Chart + api_set: + ExcelAPI: 1.7 +- id: excel-chart-title-substring + name: Chart - Title substring + fileName: chart-title-substring.yaml + description: Get and set title substring for a chart. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/50-chart/chart-title-substring.yaml + group: Chart + api_set: + ExcelApi: 1.7 +- id: excel-chart-trendlines + name: Chart trendlines + fileName: chart-trendlines.yaml + description: 'Add, get, and format trendlines in a chart.' + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/50-chart/chart-trendlines.yaml + group: Chart + api_set: + ExcelAPI: 1.7 - id: excel-pivottable-refresh-pivot-table name: Refresh pivot table fileName: refresh-pivot-table.yaml @@ -393,6 +521,15 @@ group: Events api_set: ExcelApi: 1.4 +- id: excel-events-table-changed + name: Events - Table changed + fileName: events-table-changed.yaml + description: Add event handlers for table onChanged and onSelectionChanged events + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/70-events/events-table-changed.yaml + group: Events + api_set: + ExcelApi: 1.7 - id: excel-settings-create-get-change-delete-settings name: 'Create, get, change, and delete a setting' fileName: create-get-change-delete-settings.yaml diff --git a/samples/excel/35-worksheet/workbook-get-active-cell.yaml b/samples/excel/35-worksheet/workbook-get-active-cell.yaml index 522b3ae56..fd85481c0 100644 --- a/samples/excel/35-worksheet/workbook-get-active-cell.yaml +++ b/samples/excel/35-worksheet/workbook-get-active-cell.yaml @@ -51,8 +51,8 @@ style: /* Your style goes here */ language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/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 diff --git a/samples/excel/35-worksheet/worksheet-copy.yaml b/samples/excel/35-worksheet/worksheet-copy.yaml index d49b54a9b..082cadfce 100644 --- a/samples/excel/35-worksheet/worksheet-copy.yaml +++ b/samples/excel/35-worksheet/worksheet-copy.yaml @@ -91,8 +91,8 @@ style: /* Your style goes here */ language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/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 diff --git a/samples/excel/35-worksheet/worksheet-freeze-panes.yaml b/samples/excel/35-worksheet/worksheet-freeze-panes.yaml index 5d9763745..cfd03792b 100644 --- a/samples/excel/35-worksheet/worksheet-freeze-panes.yaml +++ b/samples/excel/35-worksheet/worksheet-freeze-panes.yaml @@ -172,8 +172,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/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 diff --git a/samples/excel/35-worksheet/worksheet-gridlines.yaml b/samples/excel/35-worksheet/worksheet-gridlines.yaml index eace58dd9..1c4b4eec2 100644 --- a/samples/excel/35-worksheet/worksheet-gridlines.yaml +++ b/samples/excel/35-worksheet/worksheet-gridlines.yaml @@ -73,8 +73,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/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 diff --git a/samples/excel/35-worksheet/worksheet-tab-color.yaml b/samples/excel/35-worksheet/worksheet-tab-color.yaml index 41b28f148..96d96ae9d 100644 --- a/samples/excel/35-worksheet/worksheet-tab-color.yaml +++ b/samples/excel/35-worksheet/worksheet-tab-color.yaml @@ -1,5 +1,5 @@ order: 11 -id: excel-worksheet-tab-color +id: excel-worksheet-worksheet-tab-color name: Worksheet tab color description: Set and get the tab color of a worksheet author: OfficeDev @@ -102,8 +102,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/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 diff --git a/samples/excel/50-chart/chart-axis.yaml b/samples/excel/50-chart/chart-axis.yaml index edf15832a..1045ecead 100644 --- a/samples/excel/50-chart/chart-axis.yaml +++ b/samples/excel/50-chart/chart-axis.yaml @@ -66,8 +66,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/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 diff --git a/samples/excel/50-chart/chart-legend.yaml b/samples/excel/50-chart/chart-legend.yaml index d8166aab7..9104389b0 100644 --- a/samples/excel/50-chart/chart-legend.yaml +++ b/samples/excel/50-chart/chart-legend.yaml @@ -135,8 +135,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/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 diff --git a/samples/excel/50-chart/chart-point.yaml b/samples/excel/50-chart/chart-point.yaml index 9bf9b76c9..fb4159dd3 100644 --- a/samples/excel/50-chart/chart-point.yaml +++ b/samples/excel/50-chart/chart-point.yaml @@ -121,8 +121,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/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 diff --git a/samples/excel/50-chart/chart-series-doughnutholesize.yaml b/samples/excel/50-chart/chart-series-doughnutholesize.yaml index 771ba1db8..728bce489 100644 --- a/samples/excel/50-chart/chart-series-doughnutholesize.yaml +++ b/samples/excel/50-chart/chart-series-doughnutholesize.yaml @@ -123,8 +123,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/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 diff --git a/samples/excel/50-chart/chart-series-markers.yaml b/samples/excel/50-chart/chart-series-markers.yaml index c25aede7a..2de262fd0 100644 --- a/samples/excel/50-chart/chart-series-markers.yaml +++ b/samples/excel/50-chart/chart-series-markers.yaml @@ -114,8 +114,8 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/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 diff --git a/samples/excel/50-chart/chart-series-plotorder.yaml b/samples/excel/50-chart/chart-series-plotorder.yaml index 4aedfabb7..71e957637 100644 --- a/samples/excel/50-chart/chart-series-plotorder.yaml +++ b/samples/excel/50-chart/chart-series-plotorder.yaml @@ -125,8 +125,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/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 diff --git a/samples/excel/50-chart/chart-series.yaml b/samples/excel/50-chart/chart-series.yaml index a61273249..55157182c 100644 --- a/samples/excel/50-chart/chart-series.yaml +++ b/samples/excel/50-chart/chart-series.yaml @@ -164,8 +164,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/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 diff --git a/samples/excel/50-chart/chart-title-substring.yaml b/samples/excel/50-chart/chart-title-substring.yaml index 43b5c29ab..023035f18 100644 --- a/samples/excel/50-chart/chart-title-substring.yaml +++ b/samples/excel/50-chart/chart-title-substring.yaml @@ -113,8 +113,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/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 diff --git a/samples/excel/50-chart/chart-trendlines.yaml b/samples/excel/50-chart/chart-trendlines.yaml index 4a2be3c6f..0d046c9f7 100644 --- a/samples/excel/50-chart/chart-trendlines.yaml +++ b/samples/excel/50-chart/chart-trendlines.yaml @@ -191,8 +191,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/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 diff --git a/samples/excel/70-events/events-table-changed.yaml b/samples/excel/70-events/events-table-changed.yaml index 552180b00..c02bca54b 100644 --- a/samples/excel/70-events/events-table-changed.yaml +++ b/samples/excel/70-events/events-table-changed.yaml @@ -171,8 +171,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/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 diff --git a/view/excel.json b/view/excel.json index b53a89b9a..c57890f93 100644 --- a/view/excel.json +++ b/view/excel.json @@ -22,6 +22,11 @@ "excel-worksheet-list-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/list-worksheets.yaml", "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/reference-worksheets-by-relative-position.yaml", "excel-worksheet-worksheet-range-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/worksheet-range-cell.yaml", + "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/workbook-get-active-cell.yaml", + "excel-worksheet-copy": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/worksheet-copy.yaml", + "excel-worksheet-freeze-panes": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/worksheet-freeze-panes.yaml", + "excel-gridlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/worksheet-gridlines.yaml", + "excel-worksheet-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/worksheet-tab-color.yaml", "excel-table-add-rows-and-columns-to-a-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/40-table/add-rows-and-columns-to-a-table.yaml", "excel-table-convert-range-to-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/40-table/convert-range-to-table.yaml", "excel-table-create-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/40-table/create-table.yaml", @@ -40,10 +45,20 @@ "excel-chart-create-line-chart": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/create-line-chart.yaml", "excel-chart-create-xyscatter-chart": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/create-xyscatter-chart.yaml", "excel-chart-create-additonal-types": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/create-additional-chart-types.yaml", + "excel-chart-axis": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-axis.yaml", + "excel-chart-legend": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-legend.yaml", + "excel-chart-point": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-point.yaml", + "excel-chart-series": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-series.yaml", + "excel-chart-series-doughnutholesize": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-series-doughnutholesize.yaml", + "excel-chart-series-markers": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-series-markers.yaml", + "excel-chart-series-plotorder": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-series-plotorder.yaml", + "excel-chart-title-substring": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-title-substring.yaml", + "excel-chart-trendlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-trendlines.yaml", "excel-pivottable-refresh-pivot-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/55-pivot-table/refresh-pivot-table.yaml", "excel-events-data-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/data-changed.yaml", "excel-events-selection-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/selection-changed.yaml", "excel-events-setting-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/setting-changed.yaml", + "excel-events-table-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/events-table-changed.yaml", "excel-settings-create-get-change-delete-settings": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/80-settings/create-get-change-delete-settings.yaml", "excel-document-get-file-in-slices-async": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/82-document/get-file-in-slices-async.yaml", "excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml", From 0852947ebcd358f28e1caf821c39ab8b60c75129 Mon Sep 17 00:00:00 2001 From: Alex Jerabek Date: Wed, 9 May 2018 10:12:34 -0700 Subject: [PATCH 042/660] Switching library references from beta to 1 --- playlists/excel.yaml | 90 +++++++++++++++++++ samples/excel/30-range/range-hyperlink.yaml | 4 +- .../30-range/range-text-orientation.yaml | 4 +- samples/excel/40-table/style.yaml | 4 +- .../45-named-item/update-named-item.yaml | 4 +- .../events-tablecollection-changed.yaml | 4 +- .../70-events/events-worksheet-activated.yaml | 4 +- .../70-events/events-worksheet-changed.yaml | 4 +- .../events-worksheet-selectionchanged.yaml | 4 +- .../82-document/document-properties.yaml | 6 +- ...a-in-worksheet-and-workbook-structure.yaml | 4 +- view/excel.json | 10 +++ 12 files changed, 121 insertions(+), 21 deletions(-) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index ce2f66480..cfe254a54 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -139,6 +139,24 @@ group: Range api_set: ExcelApi: 1.1 +- id: excel-range-hyperlink + name: Range hyperlink + fileName: range-hyperlink.yaml + description: 'Create, update, and clear a hyperlink for a range.' + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/30-range/range-hyperlink.yaml + group: Range + api_set: + ExcelApi: 1.7 +- id: excel-range-text-orientation + name: Range text orientation + fileName: range-text-orientation.yaml + description: Set and get the text orientation within a range + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/30-range/range-text-orientation.yaml + group: Range + api_set: + ExcelApi: 1.7 - id: excel-worksheet-activeworksheet name: Active worksheet fileName: activeworksheet.yaml @@ -242,6 +260,15 @@ group: Worksheet api_set: ExcelApi: 1.7 +- id: excel-style + name: Style + fileName: style.yaml + description: 'Add, apply, get and delete styles.' + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/40-table/style.yaml + group: Table + api_set: + ExcelApi: 1.7 - id: excel-table-add-rows-and-columns-to-a-table name: Add rows and columns fileName: add-rows-and-columns-to-a-table.yaml @@ -359,6 +386,15 @@ group: Named Item api_set: ExcelApi: 1.3 +- id: excel-update-named-item + name: Update a named item + fileName: update-named-item.yaml + description: Create and then update a named item + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/45-named-item/update-named-item.yaml + group: Named Item + api_set: + ExcelApi: 1.7 - id: excel-chart-create-column-clustered-chart name: Column clustered chart fileName: create-column-clustered-chart.yaml @@ -530,6 +566,42 @@ group: Events api_set: ExcelApi: 1.7 +- id: excel-events-tablecollection-changed + name: Events - Table collection changed + fileName: events-tablecollection-changed.yaml + description: Add event handlers for table collection onChanged event + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/70-events/events-tablecollection-changed.yaml + group: Events + api_set: + ExcelApi: 1.7 +- id: excel-events-worksheet-activated + name: Events - Worksheet activated + fileName: events-worksheet-activated.yaml + description: Add event handlers for worksheet onActivated and onDeactivated events + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/70-events/events-worksheet-activated.yaml + group: Events + api_set: + ExcelApi: 1.7 +- id: excel-events-worksheet-changed + name: Events - Worksheet changed + fileName: events-worksheet-changed.yaml + description: Add event handlers for worksheet onChanged and onAdded events + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/70-events/events-worksheet-changed.yaml + group: Events + api_set: + ExcelApi: 1.7 +- id: excel-events-worksheet-selectionchanged + name: Events - Worksheet onSelectionChanged + fileName: events-worksheet-selectionchanged.yaml + description: Add an event handler for the worksheet onSelectionChanged event + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/70-events/events-worksheet-selectionchanged.yaml + group: Events + api_set: + ExcelApi: 1.7 - id: excel-settings-create-get-change-delete-settings name: 'Create, get, change, and delete a setting' fileName: create-get-change-delete-settings.yaml @@ -550,6 +622,24 @@ group: Document api_set: ExcelApi: 1.1 +- id: excel-document-document-properties + name: Document properties + fileName: document-properties.yaml + description: Set and get document properties. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/82-document/document-properties.yaml + group: Document + api_set: + ExcelApi: 1.7 +- id: excel-protect-data-in-worksheet-and-workbook-structure + name: Protect data in worksheet and the workbook structure + fileName: protect-data-in-worksheet-and-workbook-structure.yaml + description: Shows how to protect data in a worksheet and the workbook structure. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/82-document/protect-data-in-worksheet-and-workbook-structure.yaml + group: Document + api_set: + ExcelApi: 1.7 - id: excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts name: 'Create, set, get, and delete custom XML part' fileName: create-set-get-and-delete-custom-xml-parts.yaml diff --git a/samples/excel/30-range/range-hyperlink.yaml b/samples/excel/30-range/range-hyperlink.yaml index 561484e9a..d9c78cd25 100644 --- a/samples/excel/30-range/range-hyperlink.yaml +++ b/samples/excel/30-range/range-hyperlink.yaml @@ -325,8 +325,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/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 diff --git a/samples/excel/30-range/range-text-orientation.yaml b/samples/excel/30-range/range-text-orientation.yaml index 72a07576d..2ad3b22d8 100644 --- a/samples/excel/30-range/range-text-orientation.yaml +++ b/samples/excel/30-range/range-text-orientation.yaml @@ -114,8 +114,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/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 diff --git a/samples/excel/40-table/style.yaml b/samples/excel/40-table/style.yaml index 7d1bf5c11..3c464f65f 100644 --- a/samples/excel/40-table/style.yaml +++ b/samples/excel/40-table/style.yaml @@ -225,8 +225,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/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 diff --git a/samples/excel/45-named-item/update-named-item.yaml b/samples/excel/45-named-item/update-named-item.yaml index 38b10f08a..cdc505d66 100644 --- a/samples/excel/45-named-item/update-named-item.yaml +++ b/samples/excel/45-named-item/update-named-item.yaml @@ -120,8 +120,8 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/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 diff --git a/samples/excel/70-events/events-tablecollection-changed.yaml b/samples/excel/70-events/events-tablecollection-changed.yaml index af34f8406..5b1cca700 100644 --- a/samples/excel/70-events/events-tablecollection-changed.yaml +++ b/samples/excel/70-events/events-tablecollection-changed.yaml @@ -158,8 +158,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/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 diff --git a/samples/excel/70-events/events-worksheet-activated.yaml b/samples/excel/70-events/events-worksheet-activated.yaml index 056eb34be..25e055f04 100644 --- a/samples/excel/70-events/events-worksheet-activated.yaml +++ b/samples/excel/70-events/events-worksheet-activated.yaml @@ -157,8 +157,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/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 diff --git a/samples/excel/70-events/events-worksheet-changed.yaml b/samples/excel/70-events/events-worksheet-changed.yaml index 45c81f0bf..a4ebb180b 100644 --- a/samples/excel/70-events/events-worksheet-changed.yaml +++ b/samples/excel/70-events/events-worksheet-changed.yaml @@ -171,8 +171,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/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 diff --git a/samples/excel/70-events/events-worksheet-selectionchanged.yaml b/samples/excel/70-events/events-worksheet-selectionchanged.yaml index 589c83c71..d51d6c22b 100644 --- a/samples/excel/70-events/events-worksheet-selectionchanged.yaml +++ b/samples/excel/70-events/events-worksheet-selectionchanged.yaml @@ -125,8 +125,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/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 diff --git a/samples/excel/82-document/document-properties.yaml b/samples/excel/82-document/document-properties.yaml index 78432c5e3..75c327b45 100644 --- a/samples/excel/82-document/document-properties.yaml +++ b/samples/excel/82-document/document-properties.yaml @@ -1,5 +1,5 @@ order: 2 -id: excel-document-properties +id: excel-document-document-properties name: Document properties description: Set and get document properties. host: EXCEL @@ -174,8 +174,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/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 diff --git a/samples/excel/82-document/protect-data-in-worksheet-and-workbook-structure.yaml b/samples/excel/82-document/protect-data-in-worksheet-and-workbook-structure.yaml index 4226650b2..01812fe47 100644 --- a/samples/excel/82-document/protect-data-in-worksheet-and-workbook-structure.yaml +++ b/samples/excel/82-document/protect-data-in-worksheet-and-workbook-structure.yaml @@ -246,8 +246,8 @@ style: /* Your style goes here */ language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/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 diff --git a/view/excel.json b/view/excel.json index c57890f93..d6b7abb4f 100644 --- a/view/excel.json +++ b/view/excel.json @@ -16,6 +16,8 @@ "excel-range-set-get-values": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-range/set-get-values.yaml", "excel-range-test-for-used-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-range/test-for-used-range.yaml", "excel-range-working-with-dates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-range/working-with-dates.yaml", + "excel-range-hyperlink": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-range/range-hyperlink.yaml", + "excel-range-text-orientation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-range/range-text-orientation.yaml", "excel-worksheet-activeworksheet": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/activeworksheet.yaml", "excel-worksheet-add-delete-rename-move-worksheet": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/add-delete-rename-move-worksheet.yaml", "excel-worksheet-hide-unhide-worksheet": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/hide-unhide-worksheet.yaml", @@ -27,6 +29,7 @@ "excel-worksheet-freeze-panes": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/worksheet-freeze-panes.yaml", "excel-gridlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/worksheet-gridlines.yaml", "excel-worksheet-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/worksheet-tab-color.yaml", + "excel-style": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/40-table/style.yaml", "excel-table-add-rows-and-columns-to-a-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/40-table/add-rows-and-columns-to-a-table.yaml", "excel-table-convert-range-to-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/40-table/convert-range-to-table.yaml", "excel-table-create-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/40-table/create-table.yaml", @@ -40,6 +43,7 @@ "excel-named-item-create-and-remove-named-item": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/45-named-item/create-and-remove-named-item.yaml", "excel-create-and-use-named-item-for-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/45-named-item/create-and-use-named-item-for-range.yaml", "excel-named-item-list-named-items": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/45-named-item/list-named-items.yaml", + "excel-update-named-item": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/45-named-item/update-named-item.yaml", "excel-chart-create-column-clustered-chart": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/create-column-clustered-chart.yaml", "excel-chart-create-doughnut-chart": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/create-doughnut-chart.yaml", "excel-chart-create-line-chart": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/create-line-chart.yaml", @@ -59,8 +63,14 @@ "excel-events-selection-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/selection-changed.yaml", "excel-events-setting-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/setting-changed.yaml", "excel-events-table-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/events-table-changed.yaml", + "excel-events-tablecollection-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/events-tablecollection-changed.yaml", + "excel-events-worksheet-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/events-worksheet-activated.yaml", + "excel-events-worksheet-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/events-worksheet-changed.yaml", + "excel-events-worksheet-selectionchanged": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/events-worksheet-selectionchanged.yaml", "excel-settings-create-get-change-delete-settings": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/80-settings/create-get-change-delete-settings.yaml", "excel-document-get-file-in-slices-async": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/82-document/get-file-in-slices-async.yaml", + "excel-document-document-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/82-document/document-properties.yaml", + "excel-protect-data-in-worksheet-and-workbook-structure": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/82-document/protect-data-in-worksheet-and-workbook-structure.yaml", "excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-custom-xml-parts/test-xml-for-unique-namespace.yaml", "excel-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/88-common-patterns/multiple-property-set.yaml", From ecd5c350fab0155ede405181a80bc8d45d6e118b Mon Sep 17 00:00:00 2001 From: Alex Jerabek Date: Wed, 9 May 2018 11:55:41 -0700 Subject: [PATCH 043/660] create workbook section --- .../protect-data-in-worksheet-and-workbook-structure.yaml | 2 +- .../{35-worksheet => 37-workbook}/workbook-get-active-cell.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename samples/excel/{82-document => 37-workbook}/protect-data-in-worksheet-and-workbook-structure.yaml (99%) rename samples/excel/{35-worksheet => 37-workbook}/workbook-get-active-cell.yaml (99%) diff --git a/samples/excel/82-document/protect-data-in-worksheet-and-workbook-structure.yaml b/samples/excel/37-workbook/protect-data-in-worksheet-and-workbook-structure.yaml similarity index 99% rename from samples/excel/82-document/protect-data-in-worksheet-and-workbook-structure.yaml rename to samples/excel/37-workbook/protect-data-in-worksheet-and-workbook-structure.yaml index 01812fe47..8435143cb 100644 --- a/samples/excel/82-document/protect-data-in-worksheet-and-workbook-structure.yaml +++ b/samples/excel/37-workbook/protect-data-in-worksheet-and-workbook-structure.yaml @@ -1,4 +1,4 @@ -order: 3 +order: 2 id: excel-protect-data-in-worksheet-and-workbook-structure name: Protect data in worksheet and the workbook structure description: Shows how to protect data in a worksheet and the workbook structure. diff --git a/samples/excel/35-worksheet/workbook-get-active-cell.yaml b/samples/excel/37-workbook/workbook-get-active-cell.yaml similarity index 99% rename from samples/excel/35-worksheet/workbook-get-active-cell.yaml rename to samples/excel/37-workbook/workbook-get-active-cell.yaml index fd85481c0..8a2a93882 100644 --- a/samples/excel/35-worksheet/workbook-get-active-cell.yaml +++ b/samples/excel/37-workbook/workbook-get-active-cell.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 1 id: excel-workbook-get-active-cell name: Get active cell description: Gets the active cell of the entire workbook. From b20c5e3d19315c2f7b0fab9e993e0404393d5c65 Mon Sep 17 00:00:00 2001 From: Alex Jerabek Date: Wed, 9 May 2018 14:13:20 -0700 Subject: [PATCH 044/660] moving snippets to appropriate folders and reordering --- playlists/excel.yaml | 48 +++++++++---------- ...orksheet-tab-color.yaml => tab-color.yaml} | 4 +- .../excel/35-worksheet/worksheet-copy.yaml | 2 +- .../35-worksheet/worksheet-freeze-panes.yaml | 2 +- .../35-worksheet/worksheet-gridlines.yaml | 2 +- ...cument-properties.yaml => properties.yaml} | 2 +- view/excel.json | 8 ++-- 7 files changed, 34 insertions(+), 34 deletions(-) rename samples/excel/35-worksheet/{worksheet-tab-color.yaml => tab-color.yaml} (98%) rename samples/excel/82-document/{document-properties.yaml => properties.yaml} (99%) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index cfe254a54..ca56b943c 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -213,15 +213,6 @@ group: Worksheet api_set: ExcelApi: 1.1 -- id: excel-workbook-get-active-cell - name: Get active cell - fileName: workbook-get-active-cell.yaml - description: Gets the active cell of the entire workbook. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/35-worksheet/workbook-get-active-cell.yaml - group: Worksheet - api_set: - ExcelApi: 1.7 - id: excel-worksheet-copy name: Copy worksheet fileName: worksheet-copy.yaml @@ -251,15 +242,33 @@ group: Worksheet api_set: ExcelAPI: 1.7 -- id: excel-worksheet-worksheet-tab-color +- id: excel-worksheet-tab-color name: Worksheet tab color - fileName: worksheet-tab-color.yaml + fileName: tab-color.yaml description: Set and get the tab color of a worksheet rawUrl: >- - https://raw.githubusercontent.com////samples/excel/35-worksheet/worksheet-tab-color.yaml + https://raw.githubusercontent.com////samples/excel/35-worksheet/tab-color.yaml group: Worksheet api_set: ExcelApi: 1.7 +- id: excel-workbook-get-active-cell + name: Get active cell + fileName: workbook-get-active-cell.yaml + description: Gets the active cell of the entire workbook. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/37-workbook/workbook-get-active-cell.yaml + group: Workbook + api_set: + ExcelApi: 1.7 +- id: excel-protect-data-in-worksheet-and-workbook-structure + name: Protect data in worksheet and the workbook structure + fileName: protect-data-in-worksheet-and-workbook-structure.yaml + description: Shows how to protect data in a worksheet and the workbook structure. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/37-workbook/protect-data-in-worksheet-and-workbook-structure.yaml + group: Workbook + api_set: + ExcelApi: 1.7 - id: excel-style name: Style fileName: style.yaml @@ -622,21 +631,12 @@ group: Document api_set: ExcelApi: 1.1 -- id: excel-document-document-properties +- id: excel-document-properties name: Document properties - fileName: document-properties.yaml + fileName: properties.yaml description: Set and get document properties. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/82-document/document-properties.yaml - group: Document - api_set: - ExcelApi: 1.7 -- id: excel-protect-data-in-worksheet-and-workbook-structure - name: Protect data in worksheet and the workbook structure - fileName: protect-data-in-worksheet-and-workbook-structure.yaml - description: Shows how to protect data in a worksheet and the workbook structure. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/82-document/protect-data-in-worksheet-and-workbook-structure.yaml + https://raw.githubusercontent.com////samples/excel/82-document/properties.yaml group: Document api_set: ExcelApi: 1.7 diff --git a/samples/excel/35-worksheet/worksheet-tab-color.yaml b/samples/excel/35-worksheet/tab-color.yaml similarity index 98% rename from samples/excel/35-worksheet/worksheet-tab-color.yaml rename to samples/excel/35-worksheet/tab-color.yaml index 96d96ae9d..aa9cd573e 100644 --- a/samples/excel/35-worksheet/worksheet-tab-color.yaml +++ b/samples/excel/35-worksheet/tab-color.yaml @@ -1,5 +1,5 @@ -order: 11 -id: excel-worksheet-worksheet-tab-color +order: 10 +id: excel-worksheet-tab-color name: Worksheet tab color description: Set and get the tab color of a worksheet author: OfficeDev diff --git a/samples/excel/35-worksheet/worksheet-copy.yaml b/samples/excel/35-worksheet/worksheet-copy.yaml index 082cadfce..abeeb428c 100644 --- a/samples/excel/35-worksheet/worksheet-copy.yaml +++ b/samples/excel/35-worksheet/worksheet-copy.yaml @@ -1,4 +1,4 @@ -order: 8 +order: 7 id: excel-worksheet-copy name: Copy worksheet description: Copies the active worksheet to the specified location. diff --git a/samples/excel/35-worksheet/worksheet-freeze-panes.yaml b/samples/excel/35-worksheet/worksheet-freeze-panes.yaml index cfd03792b..60ef935d6 100644 --- a/samples/excel/35-worksheet/worksheet-freeze-panes.yaml +++ b/samples/excel/35-worksheet/worksheet-freeze-panes.yaml @@ -1,4 +1,4 @@ -order: 9 +order: 8 id: excel-worksheet-freeze-panes name: Manage frozen panes in a worksheet description: 'Freeze columns, freeze rows, freeze a range, and manage frozen panes in a worksheet.' diff --git a/samples/excel/35-worksheet/worksheet-gridlines.yaml b/samples/excel/35-worksheet/worksheet-gridlines.yaml index 1c4b4eec2..8659817db 100644 --- a/samples/excel/35-worksheet/worksheet-gridlines.yaml +++ b/samples/excel/35-worksheet/worksheet-gridlines.yaml @@ -1,4 +1,4 @@ -order: 10 +order: 9 id: excel-gridlines name: Worksheet gridlines description: Hide and show gridlines in a worksheet diff --git a/samples/excel/82-document/document-properties.yaml b/samples/excel/82-document/properties.yaml similarity index 99% rename from samples/excel/82-document/document-properties.yaml rename to samples/excel/82-document/properties.yaml index 75c327b45..25c221c93 100644 --- a/samples/excel/82-document/document-properties.yaml +++ b/samples/excel/82-document/properties.yaml @@ -1,5 +1,5 @@ order: 2 -id: excel-document-document-properties +id: excel-document-properties name: Document properties description: Set and get document properties. host: EXCEL diff --git a/view/excel.json b/view/excel.json index d6b7abb4f..7236378f9 100644 --- a/view/excel.json +++ b/view/excel.json @@ -24,11 +24,12 @@ "excel-worksheet-list-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/list-worksheets.yaml", "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/reference-worksheets-by-relative-position.yaml", "excel-worksheet-worksheet-range-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/worksheet-range-cell.yaml", - "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/workbook-get-active-cell.yaml", "excel-worksheet-copy": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/worksheet-copy.yaml", "excel-worksheet-freeze-panes": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/worksheet-freeze-panes.yaml", "excel-gridlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/worksheet-gridlines.yaml", - "excel-worksheet-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/worksheet-tab-color.yaml", + "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/tab-color.yaml", + "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/37-workbook/workbook-get-active-cell.yaml", + "excel-protect-data-in-worksheet-and-workbook-structure": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/37-workbook/protect-data-in-worksheet-and-workbook-structure.yaml", "excel-style": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/40-table/style.yaml", "excel-table-add-rows-and-columns-to-a-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/40-table/add-rows-and-columns-to-a-table.yaml", "excel-table-convert-range-to-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/40-table/convert-range-to-table.yaml", @@ -69,8 +70,7 @@ "excel-events-worksheet-selectionchanged": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/events-worksheet-selectionchanged.yaml", "excel-settings-create-get-change-delete-settings": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/80-settings/create-get-change-delete-settings.yaml", "excel-document-get-file-in-slices-async": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/82-document/get-file-in-slices-async.yaml", - "excel-document-document-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/82-document/document-properties.yaml", - "excel-protect-data-in-worksheet-and-workbook-structure": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/82-document/protect-data-in-worksheet-and-workbook-structure.yaml", + "excel-document-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/82-document/properties.yaml", "excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-custom-xml-parts/test-xml-for-unique-namespace.yaml", "excel-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/88-common-patterns/multiple-property-set.yaml", From 4556e9ff3216faed421cca2ab5c8e3b11657af0a Mon Sep 17 00:00:00 2001 From: Alex Jerabek Date: Wed, 9 May 2018 17:28:36 -0700 Subject: [PATCH 045/660] Correcting show/hide gridlines snippet to new API signiture --- samples/excel/35-worksheet/worksheet-gridlines.yaml | 4 ++-- snippet-extractor-output/snippets.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/samples/excel/35-worksheet/worksheet-gridlines.yaml b/samples/excel/35-worksheet/worksheet-gridlines.yaml index 8659817db..5bbfd805f 100644 --- a/samples/excel/35-worksheet/worksheet-gridlines.yaml +++ b/samples/excel/35-worksheet/worksheet-gridlines.yaml @@ -14,7 +14,7 @@ script: async function hideGridlines() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); - sheet.gridlines = false; + sheet.showGridlines = false; await context.sync(); }); @@ -23,7 +23,7 @@ script: async function showGridlines() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); - sheet.gridlines = true; + sheet.showGridlines = true; await context.sync(); }); diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 75b70ea04..42c3008c7 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -1502,7 +1502,7 @@ Excel.ChartTrendlineCollection.gridlines: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); - sheet.gridlines = true; + sheet.showGridlines = true; await context.sync(); }); From a78be34b4416e55d5b133a1cf378f5023a9f3edc Mon Sep 17 00:00:00 2001 From: Ricky Kirkham Date: Fri, 11 May 2018 13:14:49 -0700 Subject: [PATCH 046/660] handlers for calculated event --- playlists/excel.yaml | 18 ++ .../events-worksheet-calculated.yaml | 117 +++++++++++++ ...events-worksheetcollection-calculated.yaml | 159 ++++++++++++++++++ view/excel.json | 2 + 4 files changed, 296 insertions(+) create mode 100644 samples/excel/89-preview-apis/events-worksheet-calculated.yaml create mode 100644 samples/excel/89-preview-apis/events-worksheetcollection-calculated.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 553f9bde3..54a299ac4 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -690,6 +690,24 @@ group: Preview APIs api_set: ExcelApi: 1.7 +- id: excel-events-worksheet-calculated + name: Events - Worksheet onCalculated + fileName: events-worksheet-calculated.yaml + description: Add an event handler for the worksheet onCalculated event + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/events-worksheet-calculated.yaml + group: Preview APIs + api_set: + ExcelApi: 1.8 +- id: excel-events-worksheetcollection-calculated + name: Events - WorksheetCollection onCalculated + fileName: events-worksheetcollection-calculated.yaml + description: Add an event handler for the WorksheetCollection onCalculated event + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/events-worksheetcollection-calculated.yaml + group: Preview APIs + api_set: + ExcelApi: 1.8 - id: excel-range-areas name: Using Areas (Discontiguous Ranges) fileName: range-areas.yaml diff --git a/samples/excel/89-preview-apis/events-worksheet-calculated.yaml b/samples/excel/89-preview-apis/events-worksheet-calculated.yaml new file mode 100644 index 000000000..0b22b2ca7 --- /dev/null +++ b/samples/excel/89-preview-apis/events-worksheet-calculated.yaml @@ -0,0 +1,117 @@ +id: excel-events-worksheet-calculated +name: Events - Worksheet onCalculated +description: Add an event handler for the worksheet onCalculated event +host: EXCEL +api_set: + ExcelApi: 1.8 +script: + content: | + $("#setup").click(() => tryCatch(setup)); + $("#register-onCalculated-handler").click(() => tryCatch(registerOnCalculatedHandler)); + $("#recalculate").click(() => tryCatch(recalculate)); + async function registerOnCalculatedHandler() { + await Excel.run(async (context) => { + let sheet = context.workbook.worksheets.getItem("Sample"); + sheet.onCalculated.add(onCalculated); + await context.sync(); + console.log("Added worksheet selection changed event handler."); + }); + } + async function recalculate() { + await Excel.run(async (context) => { + let sheet = context.workbook.worksheets.getItem("Sample"); + + let row = sheet.tables.getItem("SalesTable").rows.getItemAt(0); + let newValue = [["Frames", 5000, 7000, 6544, 1, "=SUM(B2:E2)"]]; + row.values = newValue; + row.load('values'); + await context.sync(); + }); + } + + async function onCalculated(event) { + await Excel.run(async (context) => { + console.log("The worksheet has recalculated."); + }); + } + async function setup() { + await Excel.run(async (context) => { + let sheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "Sample"); + let salesTable = sheet.tables.add('A1:F1', true); + salesTable.name = "SalesTable"; + salesTable.getHeaderRowRange().values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4", "Total"]]; + salesTable.rows.add(null, [ + ["Frames", 5000, 7000, 6544, 4377, "=SUM(B2:E2)"], + ["Saddles", 400, 323, 276, 651, "=SUM(B3:E3)"], + ["Brake levers", 12000, 8766, 8456, 9812, "=SUM(B4:E4)"], + ["Chains", 1550, 1088, 692, 853, "=SUM(B5:E5)"], + ["Mirrors", 225, 600, 923, 544, "=SUM(B6:E6)"], + ["Spokes", 6005, 7634, 4589, 8765, "=SUM(B7:E7)"] + ]); + if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { + 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) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: | +
+

This sample shows how to add an event handler for the worksheet onCalculated event.

+
+
+

Set up

+ +
+
+

Press the Register onCalculated handler button and then manually trigger a recalculation by, for example, changing data in a data cell. Watch the console.

+ +
+
+

Next press the second button to force a recalculation programmatically.

+ +
+ 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 + @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 \ No newline at end of file diff --git a/samples/excel/89-preview-apis/events-worksheetcollection-calculated.yaml b/samples/excel/89-preview-apis/events-worksheetcollection-calculated.yaml new file mode 100644 index 000000000..7893fd608 --- /dev/null +++ b/samples/excel/89-preview-apis/events-worksheetcollection-calculated.yaml @@ -0,0 +1,159 @@ +id: excel-events-worksheetcollection-calculated +name: Events - WorksheetCollection onCalculated +description: Add an event handler for the WorksheetCollection onCalculated event +host: EXCEL +api_set: + ExcelApi: 1.8 +script: + content: |+ + $("#setup").click(() => tryCatch(setup)); + $("#register-onCalculated-handler").click(() => tryCatch(registerOnCalculatedHandler)); + $("#recalculate").click(() => tryCatch(recalculate)); + + async function registerOnCalculatedHandler() { + await Excel.run(async (context) => { + + context.workbook.worksheets.onCalculated.add(onAllSheetsCalculated); + + await context.sync(); + + console.log("Added WorksheetCollection.onCalculated event handler."); + }); + } + + async function recalculate() { + await Excel.run(async (context) => { + let sheet = context.workbook.worksheets.getItem("Fruit Sales"); + sheet.calculate(true); + + await context.sync(); + }); + } + + async function onAllSheetsCalculated(event) { + await Excel.run(async (context) => { + console.log("All worksheets have recalculated."); + }); + } + + async function setup() { + await Excel.run(async (context) => { + let currentSheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "Fruit Sales"); + let fruitTable = currentSheet.tables.add('A1:F1', true); + fruitTable.name = "FruitTable"; + + fruitTable.getHeaderRowRange().values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4", "Total"]]; + + fruitTable.rows.add(null, [ + ["Apples", 135, 700, 654, 437, "=SUM(B2:E2)"], + ["Oranges", 40, 32, 27, 51, "=SUM(B3:E3)"], + ["Mangoes", 2000, 766, 456, 812, "=SUM(B4:E4)"], + ["Limes", 550, 088, 92, 53, "=SUM(B5:E5)"], + ["Lemons", 25, 60, 23, 54, "=SUM(B6:E6)"], + ["Melons", 600, 763, 589, 765, "=SUM(B7:E7)"] + ]); + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { + currentSheet.getUsedRange().format.autofitColumns(); + currentSheet.getUsedRange().format.autofitRows(); + } + + let sheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "Bicycle Sales"); + let salesTable = sheet.tables.add('A1:F1', true); + salesTable.name = "SalesTable"; + + salesTable.getHeaderRowRange().values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4", "Total"]]; + + salesTable.rows.add(null, [ + ["Frames", 5000, 7000, 6544, 4377, "=SUM(B2:E2)"], + ["Saddles", 400, 323, 276, 651, "=SUM(B3:E3)"], + ["Brake levers", 12000, 8766, 8456, 9812, "=SUM(B4:E4)"], + ["Chains", 1550, 1088, 692, 853, "=SUM(B5:E5)"], + ["Mirrors", 225, 600, 923, 544, "=SUM(B6:E6)"], + ["Spokes", 6005, 7634, 4589, 8765, "=SUM(B7:E7)"] + ]); + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { + 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) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + + + + language: typescript +template: + content: |+ +
+

This sample shows how to add an event handler for the WorksheetCollection.onCalculated event.

+
+ +
+

Set up

+ +
+ + +
+

Press the Register onCalculated handler button, and then manually trigger a recalculation by, for example, changing data in a data cell. Watch the console.

Next, manually trigger recalculation on the other sheet.

Finally, with the Bicycle Sales sheet selected, press the Recalculate Fruit Sales button to force a recalculation of the Fruit Sales sheet programmatically.

+ +
+ + +
+ +
+ + 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 + + @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 \ No newline at end of file diff --git a/view/excel.json b/view/excel.json index 7236378f9..20df5f0a5 100644 --- a/view/excel.json +++ b/view/excel.json @@ -76,6 +76,8 @@ "excel-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/88-common-patterns/multiple-property-set.yaml", "excel-chart-axis-formatting": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-axis-formatting.yaml", "excel-data-validation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/data-validation.yaml", + "excel-events-worksheet-calculated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-worksheet-calculated.yaml", + "excel-events-worksheetcollection-calculated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-worksheetcollection-calculated.yaml", "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/range-areas.yaml", "excel-just-for-fun-gradient": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-just-for-fun/gradient.yaml", "excel-just-for-fun-patterns": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-just-for-fun/patterns.yaml", From 3ef1fc876724b7f20c521f81e4131db2551acaa9 Mon Sep 17 00:00:00 2001 From: Zlatkovsky Date: Thu, 17 May 2018 20:30:41 -0700 Subject: [PATCH 047/660] Break build on deployment failure --- config/deploy.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/config/deploy.ts b/config/deploy.ts index 77d10aa4c..ade3d92bf 100644 --- a/config/deploy.ts +++ b/config/deploy.ts @@ -49,10 +49,9 @@ const environmentVariables: IEnvironmentVariables = process.env; banner('An error has occurred', error.message || error, chalk.bold.red); banner('DEPLOYMENT DID NOT GET TRIGGERED', error.message || error, chalk.bold.red); - // Note: Don't exit the process with "process.exit(1);", since deployment - // failure does not imply dev failure, so don't want to "break the build". - // But do want to make it very obvious that deployment went wrong when - // looking at the logs. + // Even though deployment failure does not imply dev failure, we want to break the build + // to make it obvious that the deployment went wrong + process.exit(1); } process.exit(0); From a152d3b9e3f42407da2cc313e8efbdb61f9aeaa3 Mon Sep 17 00:00:00 2001 From: Zlatkovsky Date: Thu, 17 May 2018 20:42:30 -0700 Subject: [PATCH 048/660] Add commented-out skeleton for launching deployment on F5 --- .vscode/launch.json | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/.vscode/launch.json b/.vscode/launch.json index 6860b3da1..21798b350 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -13,6 +13,24 @@ "console": "integratedTerminal", "outFiles": [] }, + // { + // "type": "node", + // "request": "launch", + // "name": "Launch Program", + // "program": "${workspaceRoot}\\config\\deploy.js", + // "cwd": "${workspaceFolder}", + // "console": "integratedTerminal", + // "outFiles": [], + // "env": { + // "TRAVIS": "true", + // "TRAVIS_BRANCH": "master", + // "TRAVIS_PULL_REQUEST": "false", + // "TRAVIS_COMMIT_MESSAGE": "Deploy", + // "GH_ACCOUNT": "OfficeDev", + // "GH_REPO": "office-js-snippets", + // "GH_TOKEN": + // } + // }, { "type": "node", "request": "attach", From 384a5a26c2eeb1ac45e0847af5041b97c33d529a Mon Sep 17 00:00:00 2001 From: Michael Zlatkovsky Date: Thu, 17 May 2018 21:02:16 -0700 Subject: [PATCH 049/660] Remove -f (force) and -q (quiet) mode from git push output --- config/deploy.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/deploy.ts b/config/deploy.ts index ade3d92bf..1c72aacae 100644 --- a/config/deploy.ts +++ b/config/deploy.ts @@ -33,10 +33,10 @@ const environmentVariables: IEnvironmentVariables = process.env; shell.exec('git reset'); execCommand('git add -f samples private-samples playlists view snippet-extractor-output README.md'); - execCommand(`git commit -m "Travis auto-deploy of ${environmentVariables.TRAVIS_COMMIT_MESSAGE.replace(/\W/g, '_')}"`); + execCommand(`git commit -m "Travis auto-deploy of ${environmentVariables.TRAVIS_COMMIT_MESSAGE.replace(/\W/g, '_')} [skip ci]"`); const tokenizedGitHubGitUrl = `https://<<>>@github.com/${environmentVariables.GH_ACCOUNT}/${environmentVariables.GH_REPO}.git`; - execCommand(`git push ${tokenizedGitHubGitUrl} -q -f -u HEAD:refs/heads/${destinationBranch}`, { + execCommand(`git push ${tokenizedGitHubGitUrl} -u HEAD:refs/heads/${destinationBranch}`, { token: environmentVariables.GH_TOKEN }); From 3717abc666a716e8a3d52bfb0c32dc290a98e9e9 Mon Sep 17 00:00:00 2001 From: Michael Zlatkovsky Date: Thu, 17 May 2018 21:06:53 -0700 Subject: [PATCH 050/660] Re-add -f --- config/deploy.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/deploy.ts b/config/deploy.ts index 1c72aacae..be6fc2b60 100644 --- a/config/deploy.ts +++ b/config/deploy.ts @@ -36,7 +36,7 @@ const environmentVariables: IEnvironmentVariables = process.env; execCommand(`git commit -m "Travis auto-deploy of ${environmentVariables.TRAVIS_COMMIT_MESSAGE.replace(/\W/g, '_')} [skip ci]"`); const tokenizedGitHubGitUrl = `https://<<>>@github.com/${environmentVariables.GH_ACCOUNT}/${environmentVariables.GH_REPO}.git`; - execCommand(`git push ${tokenizedGitHubGitUrl} -u HEAD:refs/heads/${destinationBranch}`, { + execCommand(`git push ${tokenizedGitHubGitUrl} -f -u HEAD:refs/heads/${destinationBranch}`, { token: environmentVariables.GH_TOKEN }); From f421a674ca8e99b1a9f427563f1fe8eb8ca949af Mon Sep 17 00:00:00 2001 From: Kim Brandl - MSFT Date: Fri, 18 May 2018 16:23:39 -0700 Subject: [PATCH 051/660] Specify 'Worksheet gridlines' snippet as 1.8 and move it into 'Preview APIs'. (#171) --- playlists/excel.yaml | 18 +++++++++--------- samples/excel/35-worksheet/tab-color.yaml | 2 +- .../excel/89-preview-apis/data-validation.yaml | 6 +++--- .../worksheet-gridlines.yaml | 7 +++---- view/excel.json | 2 +- 5 files changed, 17 insertions(+), 18 deletions(-) rename samples/excel/{35-worksheet => 89-preview-apis}/worksheet-gridlines.yaml (94%) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 54a299ac4..28724504d 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -233,15 +233,6 @@ group: Worksheet api_set: ExcelApi: 1.7 -- id: excel-gridlines - name: Worksheet gridlines - fileName: worksheet-gridlines.yaml - description: Hide and show gridlines in a worksheet - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/35-worksheet/worksheet-gridlines.yaml - group: Worksheet - api_set: - ExcelAPI: 1.7 - id: excel-worksheet-tab-color name: Worksheet tab color fileName: tab-color.yaml @@ -708,6 +699,15 @@ group: Preview APIs api_set: ExcelApi: 1.8 +- id: excel-gridlines + name: Worksheet gridlines + fileName: worksheet-gridlines.yaml + description: Hide and show gridlines in a worksheet + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/worksheet-gridlines.yaml + group: Preview APIs + api_set: + ExcelAPI: 1.8 - id: excel-range-areas name: Using Areas (Discontiguous Ranges) fileName: range-areas.yaml diff --git a/samples/excel/35-worksheet/tab-color.yaml b/samples/excel/35-worksheet/tab-color.yaml index aa9cd573e..42a7f352a 100644 --- a/samples/excel/35-worksheet/tab-color.yaml +++ b/samples/excel/35-worksheet/tab-color.yaml @@ -1,4 +1,4 @@ -order: 10 +order: 9 id: excel-worksheet-tab-color name: Worksheet tab color description: Set and get the tab color of a worksheet diff --git a/samples/excel/89-preview-apis/data-validation.yaml b/samples/excel/89-preview-apis/data-validation.yaml index 3398d42ca..27e4a706c 100644 --- a/samples/excel/89-preview-apis/data-validation.yaml +++ b/samples/excel/89-preview-apis/data-validation.yaml @@ -3,7 +3,7 @@ name: Data Validation description: 'This snippet shows how to programmatically set a variety of data validation rules on ranges, how to prompt users to enter valid data, and how to popup a warning or informational message when invalid data is entered.' host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: 1.8 script: content: | $("#setup").click(() => tryCatch(setup)); @@ -53,8 +53,8 @@ script: // When you are developing, it is a good practice to // clear the dataValidation object with each run of your code. nameRange.dataValidation.clear(); - // A bug in the preview version of the Excel 1.7 API makes the - // next line necessary. It can be deleted when the 1.7 API releases. + // A bug in the preview version of the Excel 1.8 API makes the + // next line necessary. It can be deleted when the 1.8 API releases. nameRange.dataValidation.load(); const nameSourceRange = context.workbook.worksheets.getItem("Names").getRange("A1:A3"); diff --git a/samples/excel/35-worksheet/worksheet-gridlines.yaml b/samples/excel/89-preview-apis/worksheet-gridlines.yaml similarity index 94% rename from samples/excel/35-worksheet/worksheet-gridlines.yaml rename to samples/excel/89-preview-apis/worksheet-gridlines.yaml index 5bbfd805f..a9dbe28ec 100644 --- a/samples/excel/35-worksheet/worksheet-gridlines.yaml +++ b/samples/excel/89-preview-apis/worksheet-gridlines.yaml @@ -1,11 +1,10 @@ -order: 9 id: excel-gridlines name: Worksheet gridlines description: Hide and show gridlines in a worksheet author: OfficeDev host: EXCEL api_set: - ExcelAPI: 1.7 + ExcelAPI: 1.8 script: content: | $("#hide-gridlines").click(() => tryCatch(hideGridlines)); @@ -73,8 +72,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + 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 diff --git a/view/excel.json b/view/excel.json index 20df5f0a5..78d0e5a8f 100644 --- a/view/excel.json +++ b/view/excel.json @@ -26,7 +26,6 @@ "excel-worksheet-worksheet-range-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/worksheet-range-cell.yaml", "excel-worksheet-copy": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/worksheet-copy.yaml", "excel-worksheet-freeze-panes": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/worksheet-freeze-panes.yaml", - "excel-gridlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/worksheet-gridlines.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/tab-color.yaml", "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/37-workbook/workbook-get-active-cell.yaml", "excel-protect-data-in-worksheet-and-workbook-structure": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/37-workbook/protect-data-in-worksheet-and-workbook-structure.yaml", @@ -78,6 +77,7 @@ "excel-data-validation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/data-validation.yaml", "excel-events-worksheet-calculated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-worksheet-calculated.yaml", "excel-events-worksheetcollection-calculated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-worksheetcollection-calculated.yaml", + "excel-gridlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-gridlines.yaml", "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/range-areas.yaml", "excel-just-for-fun-gradient": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-just-for-fun/gradient.yaml", "excel-just-for-fun-patterns": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-just-for-fun/patterns.yaml", From 601558f831caa10891e33379c99782bd05d940d6 Mon Sep 17 00:00:00 2001 From: Darren Mart Date: Mon, 21 May 2018 12:37:46 -0700 Subject: [PATCH 052/660] Update Word samples with PascalCase strings. (#173) --- .../word/01-basics/basic-doc-assembly.yaml | 26 +++++++++---------- .../01-basics/insert-and-get-pictures.yaml | 6 ++--- .../word/01-basics/insert-formatted-text.yaml | 6 ++--- samples/word/01-basics/insert-header.yaml | 2 +- .../insert-line-and-page-breaks.yaml | 8 +++--- samples/word/01-basics/search.yaml | 4 +-- .../get-paragraph-on-insertion-point.yaml | 10 +++---- .../insert-in-different-locations.yaml | 14 +++++----- .../02-paragraphs/paragraph-properties.yaml | 10 +++---- .../insert-and-change-content-controls.yaml | 16 ++++++------ samples/word/04-range/scroll-to-range.yaml | 8 +++--- .../split-words-of-first-paragraph.yaml | 4 +-- samples/word/05-tables/table-cell-access.yaml | 2 +- samples/word/06-lists/insert-list.yaml | 14 +++++----- 14 files changed, 65 insertions(+), 65 deletions(-) diff --git a/samples/word/01-basics/basic-doc-assembly.yaml b/samples/word/01-basics/basic-doc-assembly.yaml index 69193f054..c16ed0a29 100644 --- a/samples/word/01-basics/basic-doc-assembly.yaml +++ b/samples/word/01-basics/basic-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", - "start" /*this means at the beginning of the body */); + "Start" /*this means at the beginning of the body */); header.styleBuiltIn = Word.Style.heading1; await context.sync(); @@ -25,31 +25,31 @@ script: async function addParagraphs() { await Word.run(async (context) => { - let paragraph = context.document.body.insertParagraph("Timeline", "end"); + let 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"); + let 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"); + let 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"); + let paragraph4 = context.document.body.insertParagraph("", "End"); paragraph4.style = "Normal"; paragraph4.font.highlightColor = "#FFFF00"; let contentControl = paragraph4.insertContentControl(); contentControl.title = "ProjectCosts"; - let paragraph5 = context.document.body.insertParagraph("Project Team", "end"); + let 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"); + let 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"); + let 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"); + let 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"); + 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"); paragraph9.style = "Normal"; // Insert a page break at the end of the document. - context.document.body.insertBreak("page", "End"); + context.document.body.insertBreak("Page", "End"); await context.sync(); }); @@ -85,7 +85,7 @@ script: await context.sync(); for (let i = 0; i < contentControls.items.length; i++) { - contentControls.items[i].insertText("Fabrikam", "replace"); + contentControls.items[i].insertText("Fabrikam", "Replace"); } await context.sync(); @@ -95,7 +95,7 @@ script: async function addFooter() { await Word.run(async (context) => { context.document.sections.getFirst() - .getFooter("primary").insertParagraph("Confidential", "end"); + .getFooter("Primary").insertParagraph("Confidential", "End"); await context.sync(); }); diff --git a/samples/word/01-basics/insert-and-get-pictures.yaml b/samples/word/01-basics/insert-and-get-pictures.yaml index b96ab6f19..b156a0d16 100644 --- a/samples/word/01-basics/insert-and-get-pictures.yaml +++ b/samples/word/01-basics/insert-and-get-pictures.yaml @@ -16,7 +16,7 @@ script: */ async function insertImage() { await Word.run(async (context) => { - context.document.body.paragraphs.getLast().insertParagraph("", "after").insertInlinePictureFromBase64(base64Image, "end"); + context.document.body.paragraphs.getLast().insertParagraph("", "After").insertInlinePictureFromBase64(base64Image, "End"); await context.sync(); }); @@ -45,8 +45,8 @@ script: */ async function setup() { await Word.run(async (context) => { - 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.", "end"); - 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 elements you want from the different Online galleries.", "end"); + 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.", "End"); + 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 elements you want from the different Online galleries.", "End"); await context.sync(); }); diff --git a/samples/word/01-basics/insert-formatted-text.yaml b/samples/word/01-basics/insert-formatted-text.yaml index 9962507cf..e7a93ccda 100644 --- a/samples/word/01-basics/insert-formatted-text.yaml +++ b/samples/word/01-basics/insert-formatted-text.yaml @@ -14,7 +14,7 @@ script: // Insert first sentence. Then we 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 firstSentence = context.document.body.insertText("This is some formatted text!", "replace"); + let firstSentence = context.document.body.insertText("This is some formatted text!", "Replace"); firstSentence.font.set({ name: "Courier New", bold: true, @@ -22,7 +22,7 @@ script: });; // Second sentence, let's insert it as a paragraph after the previously inserted one. - let secondSentence = context.document.body.insertParagraph("This is other formatted text.", "end"); + let secondSentence = context.document.body.insertParagraph("This is other formatted text.", "End"); secondSentence.font.set({ bold: false, italic: true, @@ -32,7 +32,7 @@ script: });; // You can also use pre-exsiting styles. - let lastSentence = context.document.body.insertParagraph("To be or not to be", "end"); + let lastSentence = 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"; lastSentence.styleBuiltIn = Word.Style.intenseReference; diff --git a/samples/word/01-basics/insert-header.yaml b/samples/word/01-basics/insert-header.yaml index 4ec1a87d4..3d59a7d2e 100644 --- a/samples/word/01-basics/insert-header.yaml +++ b/samples/word/01-basics/insert-header.yaml @@ -12,7 +12,7 @@ script: async function run() { await Word.run(async (context) => { context.document.sections.getFirst() - .getHeader("primary").insertText("This is a header", "start"); + .getHeader("Primary").insertText("This is a header", "Start"); await context.sync(); }); diff --git a/samples/word/01-basics/insert-line-and-page-breaks.yaml b/samples/word/01-basics/insert-line-and-page-breaks.yaml index 9fa9a6c55..0cb5c4abc 100644 --- a/samples/word/01-basics/insert-line-and-page-breaks.yaml +++ b/samples/word/01-basics/insert-line-and-page-breaks.yaml @@ -13,7 +13,7 @@ script: async function insertLineBreak() { Word.run(async (context) => { - context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.line, "after"); + context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.line, "After"); await context.sync(); console.log("success"); @@ -22,7 +22,7 @@ script: async function insertPageBreak() { await Word.run(async (context) => { - context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.page, "after"); + context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.page, "After"); await context.sync(); console.log("success"); @@ -33,8 +33,8 @@ script: await Word.run(async (context) => { // Let's insert a couple of paragraphs to illustrate the point.. 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 elements you want from the different Online galleries.", "replace"); + 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 elements you want from the different Online galleries.", "Replace"); await context.sync(); console.log("success"); diff --git a/samples/word/01-basics/search.yaml b/samples/word/01-basics/search.yaml index bca338856..cdddbb545 100644 --- a/samples/word/01-basics/search.yaml +++ b/samples/word/01-basics/search.yaml @@ -48,8 +48,8 @@ script: async function setup() { await Word.run(async (context) => { // Let's insert a couple of paragraphs to illustrate the point.. - context.document.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.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"); + context.document.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.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"); await context.sync(); }); diff --git a/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml b/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml index a094da3e2..9a864da77 100644 --- a/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml +++ b/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml @@ -35,7 +35,7 @@ script: // 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("end")).getTextRanges(["."], false /* Don't trim spaces*/); + .getFirst().getRange("End")).getTextRanges(["."], false /* Don't trim spaces*/); sentencesToTheEndOfParagraph.load("text"); await context.sync(); @@ -49,13 +49,13 @@ script: await Word.run(async (context) => { // Let's insert a couple of paragraphs to illustrate the point.. 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 cover page, header, and sidebar. Click Insert and then choose the elements you want from the different galleries.", "replace"); + 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"); await context.sync(); - context.document.body.paragraphs.getFirst().alignment = "left"; - context.document.body.paragraphs.getLast().alignment = "left"; + context.document.body.paragraphs.getFirst().alignment = "Left"; + context.document.body.paragraphs.getLast().alignment = "Left"; await context.sync(); }) diff --git a/samples/word/02-paragraphs/insert-in-different-locations.yaml b/samples/word/02-paragraphs/insert-in-different-locations.yaml index 5886d816f..87f62bfaf 100644 --- a/samples/word/02-paragraphs/insert-in-different-locations.yaml +++ b/samples/word/02-paragraphs/insert-in-different-locations.yaml @@ -18,7 +18,7 @@ script: await Word.run(async (context) => { // Let's insert before the first paragraph. let range = context.document.body.paragraphs - .getFirst().insertParagraph("This is Before", "before"); + .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 the before was clicked, so we get the next paragraph and insert text at the begining.Note that there are no-valid locations depending on the object. For instance insertParagraph and "before" on a paragrpah object is not a valid combination. let range = context.document.body.paragraphs - .getFirst().getNext().insertText("This is Start", "start"); + .getFirst().getNext().insertText("This is Start", "Start"); range.font.highlightColor = "blue"; range.font.color = "white"; @@ -41,7 +41,7 @@ script: await Word.run(async (context) => { // Here we go to insert on paragraph let range = context.document.body.paragraphs - .getFirst().getNext().insertText(" This is End", "end"); + .getFirst().getNext().insertText(" This is End", "End"); range.font.highlightColor = "green"; range.font.color = "white"; @@ -53,7 +53,7 @@ script: await Word.run(async (context) => { // Here we go to insert on paragraph let range = context.document.body.paragraphs - .getFirst().getNext().insertParagraph("This is After", "after"); + .getFirst().getNext().insertParagraph("This is After", "After"); range.font.highlightColor = "red"; range.font.color = "white"; @@ -65,7 +65,7 @@ script: await Word.run(async (context) => { // Here we go to insert on paragraph let range = context.document.body.paragraphs - .getLast().insertText("Just replaced the last paragraph!", "replace"); + .getLast().insertText("Just replaced the last paragraph!", "Replace"); range.font.highlightColor = "black"; range.font.color = "white"; @@ -77,8 +77,8 @@ script: await Word.run(async (context) => { // lets insert a couple of paragraphs to illustrate the point.. 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 cover page, header, and sidebar. Click Insert and then choose the elements you want from the different galleries.", "replace"); + 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"); await context.sync(); }); diff --git a/samples/word/02-paragraphs/paragraph-properties.yaml b/samples/word/02-paragraphs/paragraph-properties.yaml index 7580424aa..75c0b2ffa 100644 --- a/samples/word/02-paragraphs/paragraph-properties.yaml +++ b/samples/word/02-paragraphs/paragraph-properties.yaml @@ -47,7 +47,7 @@ script: await Word.run(async (context) => { // Centers last paragraph alignment context.document.body.paragraphs - .getLast().alignment = "centered"; + .getLast().alignment = "Centered"; await context.sync(); }); @@ -57,10 +57,10 @@ script: await Word.run(async (context) => { // lets insert a couple of paragraphs to illustrate the point.. 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 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"; + 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"); + context.document.body.paragraphs.getFirst().alignment = "Left"; + context.document.body.paragraphs.getLast().alignment = "Left"; await context.sync(); }) diff --git a/samples/word/03-content-controls/insert-and-change-content-controls.yaml b/samples/word/03-content-controls/insert-and-change-content-controls.yaml index 3926a6dde..37a18a82e 100644 --- a/samples/word/03-content-controls/insert-and-change-content-controls.yaml +++ b/samples/word/03-content-controls/insert-and-change-content-controls.yaml @@ -54,9 +54,9 @@ script: evenContentControls.items[i].set({ color: 'red', title: 'Odd ContentControl #' + (i + 1), - appearance: 'tags' + appearance: 'Tags' }); - evenContentControls.items[i].insertParagraph("This is an odd content control", "end"); + evenContentControls.items[i].insertParagraph("This is an odd content control", "End"); } for (let j = 0; j < oddContentControls.items.length; j++) { @@ -64,9 +64,9 @@ script: oddContentControls.items[j].set({ color: 'green', title: 'Even ContentControl #' + (j + 1), - appearance: 'tags' + appearance: 'Tags' }); - oddContentControls.items[j].insertHtml("This is an even content control", "end"); + oddContentControls.items[j].insertHtml("This is an even content control", "End"); } await context.sync(); @@ -77,10 +77,10 @@ script: await Word.run(async (context) => { // Let's insert a couple of paragraphs to illustrate the point.. 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"); + 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"); await context.sync(); }); diff --git a/samples/word/04-range/scroll-to-range.yaml b/samples/word/04-range/scroll-to-range.yaml index 848e1ac25..e854cb162 100644 --- a/samples/word/04-range/scroll-to-range.yaml +++ b/samples/word/04-range/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("End"); await context.sync(); }); @@ -34,9 +34,9 @@ script: await Word.run(async (context) => { //Let's insert a couple of paragraphs to illustrate the point.. context.document.body.clear(); - let firstSentence = 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"); - firstSentence.insertBreak(Word.BreakType.page, "after"); - 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"); + let firstSentence = 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"); + firstSentence.insertBreak(Word.BreakType.page, "After"); + 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"); await context.sync(); }) diff --git a/samples/word/04-range/split-words-of-first-paragraph.yaml b/samples/word/04-range/split-words-of-first-paragraph.yaml index 4b918b612..97d1b7db2 100644 --- a/samples/word/04-range/split-words-of-first-paragraph.yaml +++ b/samples/word/04-range/split-words-of-first-paragraph.yaml @@ -38,8 +38,8 @@ script: 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"); + 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"); await context.sync(); }) diff --git a/samples/word/05-tables/table-cell-access.yaml b/samples/word/05-tables/table-cell-access.yaml index 14a4d5372..37337a6bf 100644 --- a/samples/word/05-tables/table-cell-access.yaml +++ b/samples/word/05-tables/table-cell-access.yaml @@ -24,7 +24,7 @@ script: await Word.run(async (context) => { // We need a 2D array to hold the initial table values let data = [["Apple", "Orange", "Pineapple"], ["Tokyo", "Beijing", "Seattle"]]; - let table = context.document.body.insertTable(3, 3, "start", data); + let table = context.document.body.insertTable(3, 3, "Start", data); table.styleBuiltIn = Word.Style.gridTable5Dark_Accent2; await context.sync(); diff --git a/samples/word/06-lists/insert-list.yaml b/samples/word/06-lists/insert-list.yaml index cb5a5c5b3..8e6e9b9d2 100644 --- a/samples/word/06-lists/insert-list.yaml +++ b/samples/word/06-lists/insert-list.yaml @@ -24,11 +24,11 @@ script: await context.sync(); //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'); + 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. //To add paragraphs outside the list use before/after: - list.insertParagraph('New paragraph goes after (not part of the list)', 'after'); + list.insertParagraph('New paragraph goes after (not part of the list)', 'After'); await context.sync(); }); @@ -38,10 +38,10 @@ script: await Word.run(async (context) => { // Let's insert a couple of paragraphs to illustrate the point.. context.document.body.clear(); - context.document.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("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("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"); + context.document.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("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("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"); await context.sync(); }); From 555a0d90ad0e1130c0a93e3c9e53bc8f8f66fe4a Mon Sep 17 00:00:00 2001 From: Ricky Kirkham Date: Wed, 30 May 2018 11:00:41 -0700 Subject: [PATCH 053/660] snippets for chart and chartcollection events --- playlists/excel.yaml | 22 ++- .../events-chart-activated.yaml | 166 ++++++++++++++++++ ...vents-chartcollection-added-activated.yaml | 158 +++++++++++++++++ view/excel.json | 2 + 4 files changed, 347 insertions(+), 1 deletion(-) create mode 100644 samples/excel/89-preview-apis/events-chart-activated.yaml create mode 100644 samples/excel/89-preview-apis/events-chartcollection-added-activated.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 28724504d..638ccb87c 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -680,7 +680,27 @@ https://raw.githubusercontent.com////samples/excel/89-preview-apis/data-validation.yaml group: Preview APIs api_set: - ExcelApi: 1.7 + ExcelApi: 1.8 +- id: excel-events-chart-activated + name: Events - Chart Activate + fileName: events-chart-activated.yaml + description: Create handlers for the Chart.onActivated and Chart.onDeactivated events. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/events-chart-activated.yaml + group: Preview APIs + api_set: + ExcelApi: 1.8 +- id: excel-events-chartcollection-added-activated + name: Events - ChartCollection + fileName: events-chartcollection-added-activated.yaml + description: >- + Shows how to handle the ChartCollection onActivated, onDeactivated, onAdded, + and onDeleted events. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/events-chartcollection-added-activated.yaml + group: Preview APIs + api_set: + ExcelApi: 1.8 - id: excel-events-worksheet-calculated name: Events - Worksheet onCalculated fileName: events-worksheet-calculated.yaml diff --git a/samples/excel/89-preview-apis/events-chart-activated.yaml b/samples/excel/89-preview-apis/events-chart-activated.yaml new file mode 100644 index 000000000..0be638fb5 --- /dev/null +++ b/samples/excel/89-preview-apis/events-chart-activated.yaml @@ -0,0 +1,166 @@ +id: excel-events-chart-activated +name: Events - Chart Activate +description: Create handlers for the Chart.onActivated and Chart.onDeactivated events. +host: EXCEL +api_set: + ExcelApi: 1.8 +script: + content: |- + $("#setup").click(() => tryCatch(setup)); + $("#register-onactivated-deactivated-handlers").click(() => tryCatch(registerActivatonHandlers)); + $("#create-pie-chart").click(() => tryCatch(createPieChart)); + $("#create-cylinder-chart").click(() => tryCatch(createCylinderChart)); + + async function registerActivatonHandlers() { + await Excel.run(async (context) => { + + const pieChart = context.workbook.worksheets.getActiveWorksheet().charts.getItem("Pie"); + + pieChart.onActivated.add(chartActivated); + pieChart.onDeactivated.add(chartDeactivated); + + await context.sync(); + + console.log("Added handlers for Chart onActivated and onDeactivated events."); + }); + } + + async function chartActivated(event) { + await Excel.run(async (context) => { + console.log("The pie chart is the active chart. ID: " + event.chartId); + }); + } + + async function chartDeactivated(event) { + await Excel.run(async (context) => { + console.log("The pie chart is NOT active."); + }); + } + + async function setup() { + await Excel.run(async (context) => { + await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + const sheet = context.workbook.worksheets.getItem("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] + ]); + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + } + + createPieChart(); + createCylinderChart(); + sheet.activate(); + + 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.name = "Cylinder"; + chart.setPosition("A27", "F40"); + 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.name = "Pie"; + chart.setPosition("A10", "F25"); + 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(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |- +
+

This sample shows how to create handlers for the Chart onActivated and onDeactivated events.

+
+ +
+

Set up

+ +
+ +
+

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.

+ +
+ language: html +style: + content: | + /* Your style goes here */ + 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 + + @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 \ No newline at end of file diff --git a/samples/excel/89-preview-apis/events-chartcollection-added-activated.yaml b/samples/excel/89-preview-apis/events-chartcollection-added-activated.yaml new file mode 100644 index 000000000..1bd4bbc03 --- /dev/null +++ b/samples/excel/89-preview-apis/events-chartcollection-added-activated.yaml @@ -0,0 +1,158 @@ +id: excel-events-chartcollection-added-activated +name: Events - ChartCollection +description: 'Shows how to handle the ChartCollection onActivated, onDeactivated, onAdded, and onDeleted events.' +host: EXCEL +api_set: + ExcelApi: 1.8 +script: + content: |- + $("#setup").click(() => tryCatch(setup)); + $("#register-chartcollection-handlers").click(() => tryCatch(registerChartCollectionHandlers)); + $("#add-chart").click(() => tryCatch(createPieChart)); + + async function registerChartCollectionHandlers() { + await Excel.run(async (context) => { + + context.workbook.worksheets.getActiveWorksheet().charts.onAdded.add(chartAdded); + context.workbook.worksheets.getActiveWorksheet().charts.onActivated.add(chartActivated); + context.workbook.worksheets.getActiveWorksheet().charts.onDeactivated.add(chartDeactivated); + context.workbook.worksheets.getActiveWorksheet().charts.onDeleted.add(chartDeleted); + + await context.sync(); + + console.log("Added handlers for ChartCollection onActivated,onAdded, onDeleted, and onDeactivated events."); + }); + } + + async function chartAdded(event) { + await Excel.run(async (context) => { + console.log("A chart has been added with ID: " + event.chartId); + }); + } + + async function chartActivated(event) { + await Excel.run(async (context) => { + console.log("The ID of the active chart is: " + event.chartId); + }); + } + + async function chartDeactivated(event) { + await Excel.run(async (context) => { + console.log("The chart with this ID was deactivated: " + event.chartId); + }); + } + + async function chartDeleted(event) { + await Excel.run(async (context) => { + console.log("The chart with this ID was deleted: " + event.chartId); + }); + } + + async function setup() { + await Excel.run(async (context) => { + await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + const sheet = context.workbook.worksheets.getItem("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] + ]); + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + } + + sheet.activate(); + + 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.name = "Pie"; + chart.setPosition("A10", "F25"); + 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(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |- +
+

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

+
+ +
+

Set up

+ +
+ +
+

Try it out

+

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

+ +

Click the second button to programmatically add a chart and see the onAdded event fire. Watch the console.

+ +

Manually add another chart. You can use the same the table as a source. Watch the console.

+

Select one of the charts to see the onActivated event fire. Then select the other chart to see the onDeactivated event fire on one chart and onActivated for the other.

+

Delete one of the charts to see the onDeleted event fire.

+
+ language: html +style: + content: | + /* Your style goes here */ + 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 + + @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 \ No newline at end of file diff --git a/view/excel.json b/view/excel.json index 78d0e5a8f..552077ca0 100644 --- a/view/excel.json +++ b/view/excel.json @@ -75,6 +75,8 @@ "excel-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/88-common-patterns/multiple-property-set.yaml", "excel-chart-axis-formatting": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-axis-formatting.yaml", "excel-data-validation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/data-validation.yaml", + "excel-events-chart-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-chart-activated.yaml", + "excel-events-chartcollection-added-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-chartcollection-added-activated.yaml", "excel-events-worksheet-calculated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-worksheet-calculated.yaml", "excel-events-worksheetcollection-calculated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-worksheetcollection-calculated.yaml", "excel-gridlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-gridlines.yaml", From b15d2cdf8f473e7506dcd575b2e4c62ebb8c8d5a Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 15 Jun 2018 09:22:30 -0700 Subject: [PATCH 054/660] Mapping Word ScriptLab Snippets for Ref Gen (#177) * Adding Word Snippet Mapping file * Output after npm start * Fixing comments annd unmapping repeated snippets --- .../insert-in-different-locations.yaml | 9 +- snippet-extractor-metadata/word.xlsx | Bin 0 -> 12635 bytes snippet-extractor-output/snippets.yaml | 446 ++++++++++++++++++ 3 files changed, 451 insertions(+), 4 deletions(-) create mode 100644 snippet-extractor-metadata/word.xlsx diff --git a/samples/word/02-paragraphs/insert-in-different-locations.yaml b/samples/word/02-paragraphs/insert-in-different-locations.yaml index 87f62bfaf..28c553694 100644 --- a/samples/word/02-paragraphs/insert-in-different-locations.yaml +++ b/samples/word/02-paragraphs/insert-in-different-locations.yaml @@ -27,7 +27,8 @@ script: async function start() { await Word.run(async (context) => { - // This button assumes the before was clicked, so we get the next paragraph and insert text at the begining.Note that there are no-valid locations depending on the object. For instance insertParagraph and "before" on a paragrpah object is not a valid combination. + // 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 .getFirst().getNext().insertText("This is Start", "Start"); range.font.highlightColor = "blue"; @@ -39,7 +40,7 @@ script: async function end() { await Word.run(async (context) => { - // Here we go to insert on paragraph + // Here we insert text at the end of a paragraph let range = context.document.body.paragraphs .getFirst().getNext().insertText(" This is End", "End"); range.font.highlightColor = "green"; @@ -51,7 +52,7 @@ script: async function after() { await Word.run(async (context) => { - // Here we go to insert on paragraph + // Here we insert a paragraph after an existing one let range = context.document.body.paragraphs .getFirst().getNext().insertParagraph("This is After", "After"); range.font.highlightColor = "red"; @@ -63,7 +64,7 @@ script: async function replace() { await Word.run(async (context) => { - // Here we go to insert on paragraph + // Here we insert to replace text let range = context.document.body.paragraphs .getLast().insertText("Just replaced the last paragraph!", "Replace"); range.font.highlightColor = "black"; diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..72d22e9f76715ea6885d70b5a0c63a7d2dbedeaa GIT binary patch literal 12635 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 { + const firstPicture = context.document.body.inlinePictures.getFirst(); + firstPicture.load("width, height"); + + await context.sync(); + console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`); + //To get the image encoded as base64: + const base64 = firstPicture.getBase64ImageSrc(); + + await context.sync(); + console.log(base64.value); + }); +Word.Section.getHeader: + - |- + await Word.run(async (context) => { + context.document.sections.getFirst() + .getHeader("Primary").insertText("This is a header", "Start"); + + await context.sync(); + }); +Word.Paragraph.insertBreak: + - |- + Word.run(async (context) => { + context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.line, "After"); + + await context.sync(); + console.log("success"); + }); + - |- + await Word.run(async (context) => { + context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.page, "After"); + + await context.sync(); + console.log("success"); + }); +Word.Paragraph.insertParagraph: + - |- + await Word.run(async (context) => { + // Insert first sentence. Then we 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 firstSentence = context.document.body.insertText("This is some formatted text!", "Replace"); + firstSentence.font.set({ + name: "Courier New", + bold: true, + size: 18 + });; + + // Second sentence, let's insert it as a paragraph after the previously inserted one. + let secondSentence = context.document.body.insertParagraph("This is other formatted text.", "End"); + secondSentence.font.set({ + bold: false, + italic: true, + name: 'Berlin Sans FB', + color: 'blue', + size: 30 + });; + + // You can also use pre-exsiting styles. + let lastSentence = 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"; + lastSentence.styleBuiltIn = Word.Style.intenseReference; + + await context.sync(); + }); +Word.Body.search: + - |- + await Word.run(async (context) => { + let results = context.document.body.search("Online"); + results.load("font/highlightColor"); + + await context.sync(); + + // Let's traverse the search results... and highlight... + for (let i = 0; i < results.items.length; i++) { + results.items[i].font.highlightColor = "yellow"; + } + + await context.sync(); + }); + - |- + 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. we are using wildcards). + let results = context.document.body.search("$*.[0-9][0-9]", { matchWildcards: true }); + results.load("font/highlightColor, font/color"); + + await context.sync(); + + // Let's traverse the search results... and highlight... + 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.insertParagraph: + - |- + await Word.run(async (context) => { + let 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"); + paragraph2.style = "Normal"; + let 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"); + paragraph4.style = "Normal"; + paragraph4.font.highlightColor = "#FFFF00"; + let contentControl = paragraph4.insertContentControl(); + contentControl.title = "ProjectCosts"; + let 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"); + paragraph6.style = "Heading 1"; + let 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"); + 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"); + paragraph9.style = "Normal"; + // Insert a page break at the end of the document. + context.document.body.insertBreak("Page", "End"); + + await context.sync(); + }); +Word.Range.insertContentControl: + - |- + await Word.run(async (context) => { + let results = context.document.body.search("Contractor"); + results.load("font/bold"); + + await context.sync(); + + 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"; + } + + await context.sync(); + }); +Word.ContentControlCollection.getByTag: + - |- + await Word.run(async (context) => { + let contentControls = 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.Section.getFooter: + - |- + await Word.run(async (context) => { + context.document.sections.getFirst() + .getFooter("Primary").insertParagraph("Confidential", "End"); + + await context.sync(); + }); +Word.Paragraph.text: + - |- + await Word.run(async (context) => { + // The collection of paragraphs of the current selection returns the full paragraphs contanied on it. + let paragraph = context.document.getSelection().paragraphs.getFirst(); + paragraph.load("text"); + + await context.sync(); + console.log(paragraph.text); + }); +Word.Paragraph.getTextRanges: + - |- + 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("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.Paragraph.leftIndent: + - |- + await Word.run(async (context) => { + // Indents the first paragraph + context.document.body.paragraphs. + getFirst().leftIndent = 75; //units = points + + return context.sync(); + }); +Word.Paragraph.lineSpacing: + - |- + await Word.run(async (context) => { + // Adjusts line spacing + context.document.body.paragraphs + .getFirst().lineSpacing = 20; + + await context.sync(); + }); +Word.Paragraph.spaceAfter: + - |- + await Word.run(async (context) => { + //Adjust space between paragraphs + context.document.body.paragraphs + .getFirst().spaceAfter = 20; + + await context.sync(); + }); +Word.Paragraph.alignment: + - |- + await Word.run(async (context) => { + // Centers last paragraph alignment + context.document.body.paragraphs + .getLast().alignment = "Centered"; + + await context.sync(); + }); +Word.Paragraph.insertText: + - |- + await Word.run(async (context) => { + // Here we insert to replace text + let range = context.document.body.paragraphs + .getLast().insertText("Just replaced the last paragraph!", "Replace"); + range.font.highlightColor = "black"; + range.font.color = "white"; + + await context.sync(); + }); +Word.ContentControl.tag: + - > + // 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, we'll 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 we 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.ContentControl.set: + - >- + // I'll add title and colors to odd and even content controls! and change + appearance of all. + + 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("color,title,appearance"); + oddContentControls.load("color,title,appearance"); + + 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.Paragraph.select: + - |- + await Word.run(async (context) => { + // If select is called, with no parameters it selects the object. + context.document.body.paragraphs.getLast().select(); + + await context.sync(); + }); + - |- + 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"); + + await context.sync(); + }); +Word.Paragraph.split: + - |- + await Word.run(async (context) => { + let paragraph = context.document.body.paragraphs.getFirst(); + let words = paragraph.split( + [" "], true /* trimDelimiters*/, true /* trimSpaces */); + words.load("text"); + + 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.Table.getCell: + - |- + 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); + }); +Word.Body.insertTable: + - |- + await Word.run(async (context) => { + // We need a 2D array to hold the initial table values + let data = [["Apple", "Orange", "Pineapple"], ["Tokyo", "Beijing", "Seattle"]]; + let table = context.document.body.insertTable(3, 3, "Start", data); + table.styleBuiltIn = Word.Style.gridTable5Dark_Accent2; + + await context.sync(); + }); +Word.Paragraph.startNewList: + - |- + //This example starts a new list stating with the second paragraph. + await Word.run(async (context) => { + let paragraphs = context.document.body.paragraphs; + paragraphs.load("$none"); //We need no properties. + + await context.sync(); + + var list = paragraphs.items[1].startNewList(); //Indicates new list to be started in the second paragraph. + list.load("$none"); //We need no properties. + + await context.sync(); + + //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. + //To add paragraphs outside the list use before/after: + list.insertParagraph('New paragraph goes after (not part of the list)', 'After'); + + await context.sync(); + }); +Word.CustomPropertyCollection.add: + - |- + await Word.run(async (context) => { + context.document.properties.customProperties.add("Numeric Property", 1234); + + await context.sync(); + console.log("Property added"); + }); + - |- + await Word.run(async (context) => { + context.document.properties.customProperties.add("String Property", "Hello World!"); + + await context.sync(); + console.log("Property added"); + }); +'Word.CustomPropertyCollection.items ': + - |- + await Word.run(async (context) => { + let properties = context.document.properties.customProperties; + properties.load("key,type,value"); + + await context.sync(); + 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.properties: + - |- + await Word.run(async (context) => { + let builtInProperties = context.document.properties; + builtInProperties.load("*"); // Let's get all! + + await context.sync(); + console.log(JSON.stringify(builtInProperties, null, 4)); + }); +Word.Paragraph.set: + - |- + await Word.run(async (context) => { + const paragraph = context.document.body.paragraphs.getFirst(); + paragraph.set({ + leftIndent: 30, + font: { + bold: true, + color: "red" + } + }); + + await context.sync(); + }); + - |- + await Word.run(async (context) => { + const firstParagraph = context.document.body.paragraphs.getFirst(); + const secondParagraph = firstParagraph.getNext(); + firstParagraph.load("text, font/color, font/bold, leftIndent"); + + await context.sync(); + + secondParagraph.set(firstParagraph); + + await context.sync(); + }); From a447bd4a510f7af44e8395d1e6c3cbce7195d9c7 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 19 Jun 2018 11:31:32 -0700 Subject: [PATCH 055/660] update mappings (#178) * update mappings * update based on feedback --- snippet-extractor-metadata/excel.xlsx | Bin 15477 -> 15475 bytes snippet-extractor-metadata/word.xlsx | Bin 12635 -> 12610 bytes snippet-extractor-output/snippets.yaml | 159 ++++++++++++------------- 3 files changed, 79 insertions(+), 80 deletions(-) diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 4eea23a7623db447d3055714f2eb1bd737ea8bcd..3d193022aa625352443a93c5ba1ab234739f68d2 100644 GIT binary patch delta 6615 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 delta 6644 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 pyX=4h0ulcolr-E^QU=@uZPJ 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 delta 3715 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 { const settings = context.workbook.settings; @@ -281,7 +281,7 @@ Excel.Range.getUsedRange: await context.sync(); }); -Excel.CustomXmlPartCollection.set: +Excel.Range.set: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -316,7 +316,7 @@ Excel.CustomXmlPartCollection.set: targetRange.format.autofitColumns(); await context.sync(); }); -Excel.CustomXmlPart.add: +Excel.CustomXmlPartCollection.add: - |- await Excel.run(async (context) => { @@ -338,7 +338,7 @@ Excel.CustomXmlPart.add: await context.sync(); }); -Excel.CustomXmlPart.getItem: +Excel.CustomXmlPartCollection.getItem: - |- await Excel.run(async (context) => { const settings = context.workbook.settings; @@ -404,7 +404,7 @@ Excel.CustomXmlPart.id: await context.sync(); }); -Excel.CustomXmlPartCollection.setXml: +Excel.CustomXmlPart.setXml: - |- await Excel.run(async (context) => { const settings = context.workbook.settings; @@ -426,7 +426,7 @@ Excel.CustomXmlPartCollection.setXml: await context.sync(); }); -Excel.CustomXmlPartCollection.delete: +Excel.CustomXmlPart.delete: - |- await Excel.run(async (context) => { const settings = context.workbook.settings; @@ -482,7 +482,7 @@ Excel.CustomXmlPartScopedCollection.getItemOrNullObject: await context.sync(); }); -Excel.CustomXmlPartScopedCollection.getByNamespace: +Excel.CustomXmlPartCollection.getByNamespace: - |- await Excel.run(async (context) => { $("#display-xml").text(""); @@ -512,7 +512,7 @@ Excel.CustomXmlPartScopedCollection.getByNamespace: await context.sync(); }); -Excel.Worksheet.getCount: +Excel.CustomXmlPartScopedCollection.getCount: - |- await Excel.run(async (context) => { $("#display-xml").text(""); @@ -542,7 +542,7 @@ Excel.Worksheet.getCount: await context.sync(); }); -Excel.Worksheet.getOnlyItem: +Excel.CustomXmlPartScopedCollection.getOnlyItem: - |- await Excel.run(async (context) => { $("#display-xml").text(""); @@ -572,7 +572,7 @@ Excel.Worksheet.getOnlyItem: await context.sync(); }); -Excel.WorksheetCollection.getPrevious: +Excel.Worksheet.getPrevious: - |- await Excel.run(async (context) => { const sheets = context.workbook.worksheets; @@ -594,7 +594,7 @@ Excel.WorksheetCollection.getPrevious: await context.sync(); }); -Excel.WorksheetCollection.getNext: +Excel.Worksheet.getNext: - |- await Excel.run(async (context) => { const sheets = context.workbook.worksheets; @@ -620,7 +620,7 @@ Excel.WorksheetCollection.getNext: await context.sync(); }); -Excel.ConditionalFormatCollection.getFirst: +Excel.WorksheetCollection.getFirst: - |- await Excel.run(async (context) => { const sheets = context.workbook.worksheets; @@ -646,7 +646,7 @@ Excel.ConditionalFormatCollection.getFirst: await context.sync(); }); -Excel.ConditionalFormat.getLast: +Excel.WorksheetCollection.getLast: - |- await Excel.run(async (context) => { const sheets = context.workbook.worksheets; @@ -672,7 +672,7 @@ Excel.ConditionalFormat.getLast: await context.sync(); }); -Excel.ColorScaleConditionalFormat.add: +Excel.ConditionalFormatCollection.add: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -704,7 +704,7 @@ Excel.ConditionalFormat.colorScale: await context.sync(); }); -Excel.PresetCriteriaConditionalFormat.criteria: +Excel.ColorScaleConditionalFormat.criteria: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -720,7 +720,7 @@ Excel.PresetCriteriaConditionalFormat.criteria: await context.sync(); }); -Excel.ConditionalPresetCriteriaRule.preset: +Excel.ConditionalFormat.preset: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -732,7 +732,7 @@ Excel.ConditionalPresetCriteriaRule.preset: await context.sync(); }); -Excel.ConditionalFormat.rule: +Excel.PresetCriteriaConditionalFormat.rule: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -754,7 +754,7 @@ Excel.ConditionalFormat.rule: await context.sync(); }); -Excel.DataBarConditionalFormat.criterion: +Excel.ConditionalPresetCriteriaRule.criterion: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -777,7 +777,7 @@ Excel.ConditionalFormat.dataBar: await context.sync(); }); -Excel.IconSetConditionalFormat.barDirection: +Excel.DataBarConditionalFormat.barDirection: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -788,7 +788,7 @@ Excel.IconSetConditionalFormat.barDirection: await context.sync(); }); -Excel.IconSetConditionalFormat.iconSet: +Excel.ConditionalFormat.iconSet: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -828,7 +828,7 @@ Excel.IconSetConditionalFormat.iconSet: await context.sync(); }); -Excel.ConditionalIconCriterion.style: +Excel.IconSetConditionalFormat.style: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -868,7 +868,7 @@ Excel.ConditionalIconCriterion.style: await context.sync(); }); -Excel.ConditionalIconCriterion.criteria: +Excel.IconSetConditionalFormat.criteria: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -948,7 +948,7 @@ Excel.ConditionalIconCriterion.type: await context.sync(); }); -Excel.ConditionalFormat.operator: +Excel.ConditionalIconCriterion.operator: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -999,7 +999,7 @@ Excel.ConditionalFormat.operator: await context.sync(); }); -Excel.TextConditionalFormat.formula: +Excel.ConditionalIconCriterion.formula: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1039,7 +1039,7 @@ Excel.TextConditionalFormat.formula: await context.sync(); }); -Excel.TextConditionalFormat.textComparison: +Excel.ConditionalFormat.textComparison: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1051,7 +1051,7 @@ Excel.TextConditionalFormat.textComparison: await context.sync(); }); -Excel.ConditionalTextComparisonRule.format: +Excel.TextConditionalFormat.format: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1063,7 +1063,7 @@ Excel.ConditionalTextComparisonRule.format: await context.sync(); }); -Excel.ConditionalTextComparisonRule.rule: +Excel.TextConditionalFormat.rule: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1075,7 +1075,7 @@ Excel.ConditionalTextComparisonRule.rule: await context.sync(); }); -Excel.CellValueConditionalFormat.text: +Excel.ConditionalTextComparisonRule.text: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1087,7 +1087,7 @@ Excel.CellValueConditionalFormat.text: await context.sync(); }); -Excel.CellValueConditionalFormat.cellValue: +Excel.ConditionalFormat.cellValue: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1099,7 +1099,7 @@ Excel.CellValueConditionalFormat.cellValue: await context.sync(); }); -Excel.ConditionalCellValueRule.format: +Excel.CellValueConditionalFormat.format: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1111,7 +1111,7 @@ Excel.ConditionalCellValueRule.format: await context.sync(); }); -Excel.ConditionalCellValueRule.rule: +Excel.CellValueConditionalFormat.rule: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1123,7 +1123,7 @@ Excel.ConditionalCellValueRule.rule: await context.sync(); }); -Excel.ConditionalFormat.formula1: +Excel.ConditionalCellValueRule.formula1: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1135,7 +1135,7 @@ Excel.ConditionalFormat.formula1: await context.sync(); }); -Excel.CustomConditionalFormat.operator: +Excel.ConditionalCellValueRule.operator: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1147,7 +1147,7 @@ Excel.CustomConditionalFormat.operator: await context.sync(); }); -Excel.CustomConditionalFormat.custom: +Excel.ConditionalFormat.custom: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1158,7 +1158,7 @@ Excel.CustomConditionalFormat.custom: await context.sync(); }); -Excel.ConditionalFormatRule.format: +Excel.CustomConditionalFormat.format: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1169,7 +1169,7 @@ Excel.ConditionalFormatRule.format: await context.sync(); }); -Excel.ConditionalFormatCollection.formula: +Excel.ConditionalFormatRule.formula: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1248,7 +1248,7 @@ Excel.ConditionalFormatCollection.getItemAt: OfficeHelpers.UI.notify("None to display", "No conditional formats in workbook", "warning"); } }); -Excel.Range.getRange: +Excel.ConditionalFormat.getRange: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1282,7 +1282,7 @@ Excel.Range.getRange: OfficeHelpers.UI.notify("None to display", "No conditional formats in workbook", "warning"); } }); -Excel.RangeHyperlink.clearAll: +Excel.ConditionalFormatCollection.clearAll: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1293,7 +1293,7 @@ Excel.RangeHyperlink.clearAll: $(".conditional-formats").hide(); }); -Excel.RangeHyperlink.hyperlink: +Excel.Range.hyperlink: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Orders"); @@ -1377,7 +1377,7 @@ Excel.RangeHyperlink.screenTip: OfficeHelpers.UI.notify("Created a hyperlink to a URL for each of the products in the first table."); }); -Excel.RangeFormat.textToDisplay: +Excel.RangeHyperlink.textToDisplay: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Orders"); @@ -1405,7 +1405,7 @@ Excel.RangeFormat.textToDisplay: OfficeHelpers.UI.notify("Created a hyperlink to a URL for each of the products in the first table."); }); -Excel.WorksheetFreezePanes.documentReference: +Excel.RangeHyperlink.documentReference: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Orders"); @@ -1433,7 +1433,7 @@ Excel.WorksheetFreezePanes.documentReference: OfficeHelpers.UI.notify("Created a hyperlink to a location in this workbook for each of the products in the second table."); }); -Excel.WorksheetFreezePanes.textOrientation: +Excel.RangeFormat.textOrientation: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1475,7 +1475,7 @@ Excel.WorksheetFreezePanes.freezeRows: await context.sync(); }); -Excel.Worksheet.getLocationOrNullObject: +Excel.WorksheetFreezePanes.getLocationOrNullObject: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1490,7 +1490,7 @@ Excel.Worksheet.getLocationOrNullObject: OfficeHelpers.UI.notify(`The address of the frozen range (cells that are frozen in the top-and-left-most pane) is "${frozenRange.address}"`); } }); -Excel.Worksheet.unfreeze: +Excel.WorksheetFreezePanes.unfreeze: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1498,7 +1498,7 @@ Excel.Worksheet.unfreeze: await context.sync(); }); -Excel.ChartTrendlineCollection.gridlines: +Excel.Worksheet.gridlines: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -1506,7 +1506,7 @@ Excel.ChartTrendlineCollection.gridlines: await context.sync(); }); -Excel.ChartTrendline.tabColor: +Excel.Worksheet.tabColor: - |- await Excel.run(async (context) => { const activeSheet = context.workbook.worksheets.getActiveWorksheet(); @@ -1514,7 +1514,7 @@ Excel.ChartTrendline.tabColor: await context.sync(); }); -Excel.ChartTrendlineFormat.add: +Excel.ChartTrendlineCollection.add: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1526,7 +1526,7 @@ Excel.ChartTrendlineFormat.add: await context.sync(); }); -Excel.ChartTrendlineFormat.type: +Excel.ChartTrendline.type: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1541,7 +1541,7 @@ Excel.ChartTrendlineFormat.type: console.log("The trendline type is:" + trendline.type); }); -Excel.ChartSeriesCollection.line: +Excel.ChartTrendlineFormat.line: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1558,7 +1558,6 @@ Excel.ChartSeriesCollection.line: console.log("The trendline color is:" + line.color); }); -Excel.ChartSeries.line: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1574,7 +1573,7 @@ Excel.ChartSeries.line: console.log("The trendline color has been set to:" + line.color); }); -Excel.ChartAxis.delete: +Excel.ChartSeries.delete: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1587,7 +1586,7 @@ Excel.ChartAxis.delete: await context.sync(); }); -Excel.ChartAxis.setValues: +Excel.ChartSeries.setValues: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1606,7 +1605,7 @@ Excel.ChartAxis.setValues: OfficeHelpers.UI.notify("Number of series = " + seriesCollection.count); }); -Excel.ChartFormatString.displayUnit: +Excel.ChartAxis.displayUnit: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1622,7 +1621,7 @@ Excel.ChartFormatString.displayUnit: OfficeHelpers.UI.notify("The vertical axis display unit is: " + valueAxis.displayUnit); }); -Excel.ChartFill.showDisplayUnitLabel: +Excel.ChartAxis.showDisplayUnitLabel: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1635,7 +1634,7 @@ Excel.ChartFill.showDisplayUnitLabel: await context.sync(); }); -Excel.DocumentProperties.font: +Excel.ChartLegendFormat.font: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1654,7 +1653,7 @@ Excel.DocumentProperties.font: await context.sync(); }); -Excel.Style.setSolidColor: +Excel.ChartFill.setSolidColor: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1669,7 +1668,7 @@ Excel.Style.setSolidColor: OfficeHelpers.UI.notify("Successfully set chart point color to red (for the third item in series 1)."); }); -Excel.StyleCollection.properties: +Excel.Workbook.properties: - |- await Excel.run(async (context) => { let titleValue = "Excel document properties API"; @@ -1695,7 +1694,7 @@ Excel.StyleCollection.properties: OfficeHelpers.UI.notify("Set the following document properties: title, subject, keywords, comments, category, manager, company."); }); -Excel.StyleCollection.style: +Excel.Range.style: - |- await Excel.run(async (context) => { let worksheet = context.workbook.worksheets.getItem("Sample"); @@ -1708,7 +1707,7 @@ Excel.StyleCollection.style: await context.sync(); }); -Excel.Style.getItem: +Excel.StyleCollection.getItem: - |- await Excel.run(async (context) => { let styles = context.workbook.styles; @@ -1730,7 +1729,7 @@ Excel.Style.getItem: OfficeHelpers.UI.notify("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); -Excel.Style.add: +Excel.StyleCollection.add: - |- await Excel.run(async (context) => { let styles = context.workbook.styles; @@ -1781,7 +1780,7 @@ Excel.Style.delete: OfficeHelpers.UI.notify("Successfully deleted the diagonal orientation style from the Home tab ribbon."); }); -Excel.TableDataChangedEvent.horizontalAlignment: +Excel.Style.load: - |- await Excel.run(async (context) => { let style = context.workbook.styles.getItem("Diagonal Orientation Style"); @@ -1798,7 +1797,7 @@ Excel.TableDataChangedEvent.horizontalAlignment: console.log("Shrink to fit: " + style.shrinkToFit); console.log("Style locked: " + style.locked); }); -Excel.TableDataChangedEvent.fill: +Excel.Style.horizontalAlignment: - |- await Excel.run(async (context) => { let worksheet = context.workbook.worksheets.getItem("Sample"); @@ -1811,14 +1810,14 @@ Excel.TableDataChangedEvent.fill: await context.sync(); }); -Excel.TableSelectionChangedEvent.address: +Excel.TableSelectionChangedEventArgs.address: - |- 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); }); } -Excel.WorksheetAddedEvent.onChanged: +Excel.Table.onChanged: - |- await Excel.run(async (context) => { let table = context.workbook.tables.getItemAt(0); @@ -1829,7 +1828,7 @@ Excel.WorksheetAddedEvent.onChanged: OfficeHelpers.UI.notify("A handler has been registered for the onChanged event", "Try changing a cell value in the table, and watch the console output."); }); -Excel.WorksheetDataChangedEvent.onSelectionChanged: +Excel.Table.onSelectionChanged: - |- await Excel.run(async (context) => { let table = context.workbook.tables.getItemAt(0); @@ -1840,7 +1839,7 @@ Excel.WorksheetDataChangedEvent.onSelectionChanged: OfficeHelpers.UI.notify("A handler has been registered for table onSelectionChanged event", "Try changing a range selection in the table, and watch the console output."); }); -Excel.WorksheetAddedEvent.onAdded: +Excel.WorksheetCollection.onAdded: - |- await Excel.run(async (context) => { let sheet = context.workbook.worksheets; @@ -1851,7 +1850,7 @@ Excel.WorksheetAddedEvent.onAdded: OfficeHelpers.UI.notify("A handler has been registered for the OnAdded event", "Try adding a worksheet, and watch the console output."); }); -Excel.WorksheetDeactivatedEvent.onChanged: +Excel.Worksheet.onChanged: - |- await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); @@ -1861,14 +1860,14 @@ Excel.WorksheetDeactivatedEvent.onChanged: OfficeHelpers.UI.notify("A handler has been registered for the onChanged event."); }); -Excel.WorksheetActivatedEvent.worksheetId: +Excel.WorksheetAddedEventArgs.worksheetId: - |- 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.ChartSeries.onDeactivated: +Excel.WorksheetCollection.onDeactivated: - |- await Excel.run(async (context) => { let sheets = context.workbook.worksheets; @@ -1879,7 +1878,7 @@ Excel.ChartSeries.onDeactivated: OfficeHelpers.UI.notify("A handler has been registered for the OnDeactivate event", "Try selecting a different worksheet, and watch the console output."); }); -Excel.ChartSeries.onActivated: +Excel.WorksheetCollection.onActivated: - |- await Excel.run(async (context) => { let sheets = context.workbook.worksheets; @@ -1948,7 +1947,7 @@ Excel.ChartSeries.markerSize: await context.sync(); }); -Excel.TableSelectionChangedEvent.markerForegroundColor: +Excel.ChartSeries.markerForegroundColor: - |- await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); @@ -1977,7 +1976,7 @@ Excel.TableSelectionChangedEvent.markerForegroundColor: await context.sync(); }); -Excel.TableSelectionChangedEvent.markerBackgroundColor: +Excel.ChartSeries.markerBackgroundColor: - |- await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); @@ -2006,7 +2005,7 @@ Excel.TableSelectionChangedEvent.markerBackgroundColor: await context.sync(); }); -Excel.TableSelectionChangedEvent.onChanged: +Excel.TableCollection.onChanged: - |- await Excel.run(async (context) => { let tables = context.workbook.tables; @@ -2017,7 +2016,7 @@ Excel.TableSelectionChangedEvent.onChanged: OfficeHelpers.UI.notify("A handler has been registered for the table collection onChanged event", "Try changing cell values in the tables, and watch the console output."); }); -Excel.TableSelectionChangedEvent.worksheetId: +Excel.TableChangedEventArgs.worksheetId: - |- async function onChange(event) { await Excel.run(async (context) => { @@ -2032,7 +2031,7 @@ Excel.TableSelectionChangedEvent.worksheetId: console.log("Worksheet Id : " + worksheet.name); }); } -Excel.TableSelectionChangedEvent.tableId: +Excel.TableChangedEventArgs.tableId: - |- async function onChange(event) { await Excel.run(async (context) => { @@ -2087,7 +2086,7 @@ Excel.Worksheet.copy: console.log("'" + sampleSheet.name + "' was copied to '" + copiedSheet.name + "'") }); -Excel.Worksheet.protect: +Excel.WorksheetProtection.protect: - |- await Excel.run(async (context) => { let activeSheet = context.workbook.worksheets.getActiveWorksheet(); @@ -2112,7 +2111,7 @@ Excel.Worksheet.protect: activeSheet.protection.protect(null, password); } }); -Excel.Worksheet.unprotect: +Excel.WorksheetProtection.unprotect: - |- await Excel.run(async (context) => { let activeSheet = context.workbook.worksheets.getActiveWorksheet(); @@ -2125,7 +2124,7 @@ Excel.Worksheet.unprotect: let activeSheet = context.workbook.worksheets.getActiveWorksheet(); activeSheet.protection.unprotect(password); }); -Excel.Workbook.protect: +Excel.WorkbookProtection.protect: - |- await Excel.run(async (context) => { let workbook = context.workbook; @@ -2150,7 +2149,7 @@ Excel.Workbook.protect: workbook.protection.protect(password); } }); -Excel.Workbook.unprotect: +Excel.WorkbookProtection.unprotect: - |- await Excel.run(async (context) => { let workbook = context.workbook; @@ -2564,7 +2563,7 @@ Word.CustomPropertyCollection.add: await context.sync(); console.log("Property added"); }); -'Word.CustomPropertyCollection.items ': +Word.CustomPropertyCollection.items: - |- await Word.run(async (context) => { let properties = context.document.properties.customProperties; From 6233972065c6d5e8604dce2f518e22bb4e9f15a0 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 20 Jun 2018 14:04:51 -0700 Subject: [PATCH 056/660] Elizs update mapping (#179) * update name to showGridlines * updated mapping --- snippet-extractor-metadata/excel.xlsx | Bin 15475 -> 15504 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 3d193022aa625352443a93c5ba1ab234739f68d2..0985e98dc31bec1090f39f6c82a7730c1566ccc1 100644 GIT binary patch delta 6635 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 delta 6613 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 { const sheet = context.workbook.worksheets.getActiveWorksheet(); From 4a3d880c30228c32db6d3d19ce7c311987d352f3 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Mon, 30 Jul 2018 10:36:47 -0700 Subject: [PATCH 057/660] Pivot creation sample (#180) * Create and modify pivot table sample * Renaming file to follow pattern and fixing indentation --- .../pivot-table-create-and-modify.yaml | 262 ++++++++++++++++++ 1 file changed, 262 insertions(+) create mode 100644 samples/excel/89-preview-apis/pivot-table-create-and-modify.yaml diff --git a/samples/excel/89-preview-apis/pivot-table-create-and-modify.yaml b/samples/excel/89-preview-apis/pivot-table-create-and-modify.yaml new file mode 100644 index 000000000..f9b0b585c --- /dev/null +++ b/samples/excel/89-preview-apis/pivot-table-create-and-modify.yaml @@ -0,0 +1,262 @@ +id: excel-pivottable-pivot-table-create-and-modify +name: Create and modify pivot table +description: Create and modify pivot table +author: OfficeDev +host: EXCEL +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)); + + async function createWithNames() { + await Excel.run(async (context) => { + context.workbook.worksheets.getActiveWorksheet() + .pivotTables.add("Farm Sales", "Data!A1:E21", "Pivot!A2"); + + await context.sync(); + }); + } + + async function deletePivot() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItem("Pivot").pivotTables.getItem("Farm Sales").delete(); + + await context.sync(); + }); + } + + async function addRow() { + await Excel.run(async (context) => { + let pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); + + // check if the pivot table already has rows + let farmRow = pivotTable.rowHierarchies.getItemOrNullObject("Farm"); + let typeRow = pivotTable.rowHierarchies.getItemOrNullObject("Type"); + let classificationRow = pivotTable.rowHierarchies.getItemOrNullObject("Classification"); + pivotTable.rowHierarchies.load(); + await context.sync(); + + if (farmRow.isNullObject) { + pivotTable.rowHierarchies.add(pivotTable.hierarchies.getItem("Farm")); + } else if (typeRow.isNullObject) { + pivotTable.rowHierarchies.add(pivotTable.hierarchies.getItem("Type")); + } else if (classificationRow.isNullObject) { + pivotTable.rowHierarchies.add(pivotTable.hierarchies.getItem("Classification")); + } + + await context.sync(); + }); + } + + async function removeRow() { + await Excel.run(async (context) => { + let pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); + + // check if the pivot table already has rows + let farmRow = pivotTable.rowHierarchies.getItemOrNullObject("Farm"); + let typeRow = pivotTable.rowHierarchies.getItemOrNullObject("Type"); + let classificationRow = pivotTable.rowHierarchies.getItemOrNullObject("Classification"); + pivotTable.rowHierarchies.load(); + await context.sync(); + + if (!classificationRow.isNullObject) { + pivotTable.rowHierarchies.remove(classificationRow); + } else if (!typeRow.isNullObject) { + pivotTable.rowHierarchies.remove(typeRow); + } else if (!farmRow.isNullObject) { + pivotTable.rowHierarchies.remove(farmRow); + } + + await context.sync(); + }); + } + + async function toggleColumn() { + await Excel.run(async (context) => { + let pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); + + // check if the pivot table already has a column + let column = pivotTable.columnHierarchies.getItemOrNullObject("Farm"); + column.load("id"); + await context.sync(); + + if (column.isNullObject) { + pivotTable.columnHierarchies.add(pivotTable.hierarchies.getItem("Farm")); + } else { + pivotTable.columnHierarchies.remove(column); + } + + await context.sync(); + }); + } + + async function addValues() { + await Excel.run(async (context) => { + let 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(); + }); + } + + async function changeHierarchyNames() { + await Excel.run(async (context) => { + let pivotFields = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales").dataHierarchies; + pivotFields.load(); + await context.sync(); + + pivotFields.items[0].name = "Farm Sales"; + pivotFields.items[1].name = "Wholesale"; + await context.sync(); + }); + } + + async function changeLayout() { + await Excel.run(async (context) => { + let pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); + pivotTable.layout.load("layoutType"); + await context.sync(); + 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 setup() { + await Excel.run(async (context) => { + const sheetData = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "Data"); + const sheetPivot = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "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", 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 = sheetData.getRange("A1:E21"); + range.values = data; + range.format.autofitColumns(); + + sheetPivot.activate(); + + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |- +
+

This sample shows how to creatre pivot tables and show their hierarchy.

+
+ +
+

Set up

+ +
+ +
+

Create the pivot table

+ +
+ +
+

Adjust the pivot table

+
+
+
+ +
+ +
+

Adjust formatting

+
+ +
+ +
+

Delete the pivot table

+ +
+ language: html +style: + content: | + /* Your style goes here */ + 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 + + @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 \ No newline at end of file From e10f7396caffa6b8420f201e73f4c67cbd67b419 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Tue, 31 Jul 2018 12:54:40 -0700 Subject: [PATCH 058/660] Pointing snippets at DefinitelyTyped and reorging libraries (#181) * Pointing snippets at DefinitelyTyped and reorging libraries --- .../excel/01-basics/basic-api-call-es5.yaml | 2 +- samples/excel/01-basics/basic-api-call.yaml | 2 +- .../excel/01-basics/basic-common-api-call.yaml | 2 +- .../excel/20-scenarios/report-generation.yaml | 13 +++++-------- .../conditional-formatting-advanced.yaml | 15 ++++++--------- .../30-range/conditional-formatting-basic.yaml | 15 ++++++--------- .../excel/30-range/copy-multiply-values.yaml | 13 +++++-------- .../create-and-use-range-intersection.yaml | 13 +++++-------- samples/excel/30-range/formatting.yaml | 13 +++++-------- .../30-range/insert-delete-clear-range.yaml | 13 +++++-------- samples/excel/30-range/range-hyperlink.yaml | 2 +- samples/excel/30-range/range-operations.yaml | 13 +++++-------- .../excel/30-range/range-text-orientation.yaml | 2 +- samples/excel/30-range/selected-range.yaml | 13 +++++-------- samples/excel/30-range/set-get-values.yaml | 13 +++++-------- .../excel/30-range/test-for-used-range.yaml | 13 +++++-------- samples/excel/30-range/working-with-dates.yaml | 18 ++++++++---------- .../excel/35-worksheet/activeworksheet.yaml | 13 +++++-------- .../add-delete-rename-move-worksheet.yaml | 13 +++++-------- .../35-worksheet/hide-unhide-worksheet.yaml | 13 +++++-------- .../excel/35-worksheet/list-worksheets.yaml | 13 +++++-------- ...erence-worksheets-by-relative-position.yaml | 13 +++++-------- samples/excel/35-worksheet/tab-color.yaml | 2 +- samples/excel/35-worksheet/worksheet-copy.yaml | 2 +- .../35-worksheet/worksheet-freeze-panes.yaml | 2 +- .../35-worksheet/worksheet-range-cell.yaml | 13 +++++-------- ...ta-in-worksheet-and-workbook-structure.yaml | 2 +- .../37-workbook/workbook-get-active-cell.yaml | 2 +- .../add-rows-and-columns-to-a-table.yaml | 13 +++++-------- .../excel/40-table/convert-range-to-table.yaml | 13 +++++-------- samples/excel/40-table/create-table.yaml | 13 +++++-------- samples/excel/40-table/filter-data.yaml | 13 +++++-------- samples/excel/40-table/format-table.yaml | 13 +++++-------- .../excel/40-table/get-data-from-table.yaml | 13 +++++-------- .../get-visible-range-of-a-filtered-table.yaml | 13 +++++-------- samples/excel/40-table/import-json-data.yaml | 13 +++++-------- samples/excel/40-table/sort-data.yaml | 13 +++++-------- samples/excel/40-table/style.yaml | 2 +- .../create-and-remove-named-item.yaml | 13 +++++-------- .../create-and-use-named-item-for-range.yaml | 13 +++++-------- .../excel/45-named-item/create-named-item.yaml | 13 +++++-------- .../excel/45-named-item/list-named-items.yaml | 13 +++++-------- .../excel/45-named-item/update-named-item.yaml | 2 +- samples/excel/50-chart/chart-axis.yaml | 2 +- samples/excel/50-chart/chart-legend.yaml | 2 +- samples/excel/50-chart/chart-point.yaml | 2 +- .../chart-series-doughnutholesize.yaml | 2 +- .../excel/50-chart/chart-series-markers.yaml | 2 +- .../excel/50-chart/chart-series-plotorder.yaml | 2 +- samples/excel/50-chart/chart-series.yaml | 2 +- .../excel/50-chart/chart-title-substring.yaml | 2 +- samples/excel/50-chart/chart-trendlines.yaml | 2 +- .../create-additional-chart-types.yaml | 2 +- .../create-column-clustered-chart.yaml | 13 +++++-------- .../excel/50-chart/create-doughnut-chart.yaml | 13 +++++-------- samples/excel/50-chart/create-line-chart.yaml | 2 +- .../excel/50-chart/create-xyscatter-chart.yaml | 2 +- .../55-pivot-table/refresh-pivot-table.yaml | 13 +++++-------- samples/excel/70-events/data-changed.yaml | 13 +++++-------- .../excel/70-events/events-table-changed.yaml | 2 +- .../events-tablecollection-changed.yaml | 2 +- .../70-events/events-worksheet-activated.yaml | 2 +- .../70-events/events-worksheet-changed.yaml | 2 +- .../events-worksheet-selectionchanged.yaml | 2 +- samples/excel/70-events/selection-changed.yaml | 13 +++++-------- samples/excel/70-events/setting-changed.yaml | 13 +++++-------- .../create-get-change-delete-settings.yaml | 13 +++++-------- .../82-document/get-file-in-slices-async.yaml | 13 +++++-------- samples/excel/82-document/properties.yaml | 2 +- ...te-set-get-and-delete-custom-xml-parts.yaml | 13 +++++-------- .../test-xml-for-unique-namespace.yaml | 13 +++++-------- .../multiple-property-set.yaml | 13 +++++-------- .../events-worksheet-calculated.yaml | 6 +++++- samples/excel/90-just-for-fun/color-wheel.yaml | 13 +++++-------- samples/excel/90-just-for-fun/gradient.yaml | 15 ++++++--------- .../90-just-for-fun/path-finder-game.yaml | 13 +++++-------- samples/excel/90-just-for-fun/patterns.yaml | 13 +++++-------- samples/excel/default.yaml | 2 +- samples/onenote/default.yaml | 2 +- .../01-compose-basics/get-item-subject.yaml | 2 +- .../01-compose-basics/get-selected-text.yaml | 2 +- .../01-compose-basics/set-selected-text.yaml | 2 +- samples/outlook/default.yaml | 15 ++++++--------- .../basics/basic-common-api-call.yaml | 2 +- .../powerpoint/basics/get-slide-metadata.yaml | 2 +- samples/powerpoint/basics/insert-image.yaml | 2 +- samples/powerpoint/default.yaml | 2 +- .../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 +- .../word/01-basics/basic-common-api-call.yaml | 2 +- samples/word/01-basics/basic-doc-assembly.yaml | 2 +- .../01-basics/insert-and-get-pictures.yaml | 16 ++++++---------- .../word/01-basics/insert-formatted-text.yaml | 16 +++++++--------- samples/word/01-basics/insert-header.yaml | 16 +++++++--------- .../01-basics/insert-line-and-page-breaks.yaml | 16 +++++++--------- samples/word/01-basics/search.yaml | 16 +++++++--------- .../get-paragraph-on-insertion-point.yaml | 16 +++++++--------- .../insert-in-different-locations.yaml | 16 +++++++--------- .../02-paragraphs/paragraph-properties.yaml | 16 +++++++--------- .../insert-and-change-content-controls.yaml | 16 +++++++--------- samples/word/04-range/scroll-to-range.yaml | 16 +++++++--------- .../split-words-of-first-paragraph.yaml | 2 +- samples/word/05-tables/table-cell-access.yaml | 16 +++++++--------- samples/word/06-lists/insert-list.yaml | 16 +++++++--------- .../get-built-in-properties.yaml | 16 +++++++--------- .../read-write-custom-document-properties.yaml | 16 +++++++--------- .../multiple-property-set.yaml | 2 +- .../99-fabric/fabric-insert-form-data.yaml | 18 ++++++++---------- samples/word/default.yaml | 2 +- 111 files changed, 400 insertions(+), 568 deletions(-) diff --git a/samples/excel/01-basics/basic-api-call-es5.yaml b/samples/excel/01-basics/basic-api-call-es5.yaml index b861e8904..ad191cc16 100644 --- a/samples/excel/01-basics/basic-api-call-es5.yaml +++ b/samples/excel/01-basics/basic-api-call-es5.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 + @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/01-basics/basic-api-call.yaml b/samples/excel/01-basics/basic-api-call.yaml index 13d6b377b..408019022 100644 --- a/samples/excel/01-basics/basic-api-call.yaml +++ b/samples/excel/01-basics/basic-api-call.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 + @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/01-basics/basic-common-api-call.yaml b/samples/excel/01-basics/basic-common-api-call.yaml index 689b93f26..935e0f860 100644 --- a/samples/excel/01-basics/basic-common-api-call.yaml +++ b/samples/excel/01-basics/basic-common-api-call.yaml @@ -32,7 +32,7 @@ style: language: css libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + @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/20-scenarios/report-generation.yaml b/samples/excel/20-scenarios/report-generation.yaml index 43acf862c..3af6bbee3 100644 --- a/samples/excel/20-scenarios/report-generation.yaml +++ b/samples/excel/20-scenarios/report-generation.yaml @@ -149,20 +149,17 @@ style: } language: css libraries: | - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/30-range/conditional-formatting-advanced.yaml b/samples/excel/30-range/conditional-formatting-advanced.yaml index f6aa5a2c1..fa09e830c 100644 --- a/samples/excel/30-range/conditional-formatting-advanced.yaml +++ b/samples/excel/30-range/conditional-formatting-advanced.yaml @@ -263,20 +263,17 @@ style: } language: css libraries: | - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.6.0/dist/office.helpers.min.js - jquery@3.1.1 - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-js @types/core-js - @microsoft/office-js-helpers/dist/office.helpers.d.ts + + @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 \ No newline at end of file diff --git a/samples/excel/30-range/conditional-formatting-basic.yaml b/samples/excel/30-range/conditional-formatting-basic.yaml index f8db819eb..b104bce2a 100644 --- a/samples/excel/30-range/conditional-formatting-basic.yaml +++ b/samples/excel/30-range/conditional-formatting-basic.yaml @@ -363,20 +363,17 @@ style: } language: css libraries: | - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.6.0/dist/office.helpers.min.js - jquery@3.1.1 - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-js @types/core-js - @microsoft/office-js-helpers/dist/office.helpers.d.ts + + @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 \ No newline at end of file diff --git a/samples/excel/30-range/copy-multiply-values.yaml b/samples/excel/30-range/copy-multiply-values.yaml index 80ba2cf64..78bb310c3 100644 --- a/samples/excel/30-range/copy-multiply-values.yaml +++ b/samples/excel/30-range/copy-multiply-values.yaml @@ -163,20 +163,17 @@ style: } language: css libraries: | - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/30-range/create-and-use-range-intersection.yaml b/samples/excel/30-range/create-and-use-range-intersection.yaml index e2e4facc1..fb52417e7 100644 --- a/samples/excel/30-range/create-and-use-range-intersection.yaml +++ b/samples/excel/30-range/create-and-use-range-intersection.yaml @@ -146,20 +146,17 @@ style: } language: css libraries: | - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // 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 - // NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - // IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/30-range/formatting.yaml b/samples/excel/30-range/formatting.yaml index 73e67de43..f225425e7 100644 --- a/samples/excel/30-range/formatting.yaml +++ b/samples/excel/30-range/formatting.yaml @@ -118,20 +118,17 @@ style: } language: css libraries: | - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/30-range/insert-delete-clear-range.yaml b/samples/excel/30-range/insert-delete-clear-range.yaml index c42ffab8b..5e6552f4b 100644 --- a/samples/excel/30-range/insert-delete-clear-range.yaml +++ b/samples/excel/30-range/insert-delete-clear-range.yaml @@ -137,20 +137,17 @@ style: } language: css libraries: | - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/30-range/range-hyperlink.yaml b/samples/excel/30-range/range-hyperlink.yaml index d9c78cd25..565b6e95e 100644 --- a/samples/excel/30-range/range-hyperlink.yaml +++ b/samples/excel/30-range/range-hyperlink.yaml @@ -326,7 +326,7 @@ style: language: css libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + @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-range/range-operations.yaml b/samples/excel/30-range/range-operations.yaml index 2aefbdee5..a614942a3 100644 --- a/samples/excel/30-range/range-operations.yaml +++ b/samples/excel/30-range/range-operations.yaml @@ -163,20 +163,17 @@ style: } language: css libraries: | - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/30-range/range-text-orientation.yaml b/samples/excel/30-range/range-text-orientation.yaml index 2ad3b22d8..26af59adc 100644 --- a/samples/excel/30-range/range-text-orientation.yaml +++ b/samples/excel/30-range/range-text-orientation.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 + @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-range/selected-range.yaml b/samples/excel/30-range/selected-range.yaml index 8fc46e9db..fcab4d3f5 100644 --- a/samples/excel/30-range/selected-range.yaml +++ b/samples/excel/30-range/selected-range.yaml @@ -75,20 +75,17 @@ style: } language: css libraries: | - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/30-range/set-get-values.yaml b/samples/excel/30-range/set-get-values.yaml index 1e13809a2..00ce568d0 100644 --- a/samples/excel/30-range/set-get-values.yaml +++ b/samples/excel/30-range/set-get-values.yaml @@ -274,20 +274,17 @@ style: } language: css libraries: | - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/30-range/test-for-used-range.yaml b/samples/excel/30-range/test-for-used-range.yaml index 8c9606029..233a3f000 100644 --- a/samples/excel/30-range/test-for-used-range.yaml +++ b/samples/excel/30-range/test-for-used-range.yaml @@ -108,20 +108,17 @@ style: } language: css libraries: | - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/30-range/working-with-dates.yaml b/samples/excel/30-range/working-with-dates.yaml index ff976c8bc..369c21410 100644 --- a/samples/excel/30-range/working-with-dates.yaml +++ b/samples/excel/30-range/working-with-dates.yaml @@ -142,22 +142,20 @@ style: } language: css libraries: | - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM 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 - moment@2.18.1 - moment-msdate@0.2.2 + @types/jquery - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-js - @types/core-js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts - @types/jquery \ No newline at end of file + moment@2.18.1 + moment-msdate@0.2.2 \ No newline at end of file diff --git a/samples/excel/35-worksheet/activeworksheet.yaml b/samples/excel/35-worksheet/activeworksheet.yaml index 8d4ad77c1..86e20ae90 100644 --- a/samples/excel/35-worksheet/activeworksheet.yaml +++ b/samples/excel/35-worksheet/activeworksheet.yaml @@ -126,20 +126,17 @@ style: } language: css libraries: | - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/35-worksheet/add-delete-rename-move-worksheet.yaml b/samples/excel/35-worksheet/add-delete-rename-move-worksheet.yaml index 4fd1aebdc..fd7b05e8f 100644 --- a/samples/excel/35-worksheet/add-delete-rename-move-worksheet.yaml +++ b/samples/excel/35-worksheet/add-delete-rename-move-worksheet.yaml @@ -152,20 +152,17 @@ style: } language: css libraries: | - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/35-worksheet/hide-unhide-worksheet.yaml b/samples/excel/35-worksheet/hide-unhide-worksheet.yaml index 54fc2405a..76e470c64 100644 --- a/samples/excel/35-worksheet/hide-unhide-worksheet.yaml +++ b/samples/excel/35-worksheet/hide-unhide-worksheet.yaml @@ -99,20 +99,17 @@ style: } language: css libraries: | - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/35-worksheet/list-worksheets.yaml b/samples/excel/35-worksheet/list-worksheets.yaml index db8e2a016..de9905c9e 100644 --- a/samples/excel/35-worksheet/list-worksheets.yaml +++ b/samples/excel/35-worksheet/list-worksheets.yaml @@ -61,20 +61,17 @@ style: } language: css libraries: | - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/35-worksheet/reference-worksheets-by-relative-position.yaml b/samples/excel/35-worksheet/reference-worksheets-by-relative-position.yaml index bd0a3a898..8a0e61158 100644 --- a/samples/excel/35-worksheet/reference-worksheets-by-relative-position.yaml +++ b/samples/excel/35-worksheet/reference-worksheets-by-relative-position.yaml @@ -157,20 +157,17 @@ style: } language: css libraries: | - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/35-worksheet/tab-color.yaml b/samples/excel/35-worksheet/tab-color.yaml index 42a7f352a..091165b62 100644 --- a/samples/excel/35-worksheet/tab-color.yaml +++ b/samples/excel/35-worksheet/tab-color.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 + @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/35-worksheet/worksheet-copy.yaml b/samples/excel/35-worksheet/worksheet-copy.yaml index abeeb428c..8451305fc 100644 --- a/samples/excel/35-worksheet/worksheet-copy.yaml +++ b/samples/excel/35-worksheet/worksheet-copy.yaml @@ -92,7 +92,7 @@ style: language: css libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + @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/35-worksheet/worksheet-freeze-panes.yaml b/samples/excel/35-worksheet/worksheet-freeze-panes.yaml index 60ef935d6..fad0d2888 100644 --- a/samples/excel/35-worksheet/worksheet-freeze-panes.yaml +++ b/samples/excel/35-worksheet/worksheet-freeze-panes.yaml @@ -173,7 +173,7 @@ style: language: css libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + @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/35-worksheet/worksheet-range-cell.yaml b/samples/excel/35-worksheet/worksheet-range-cell.yaml index f7b652a0c..2d81c8035 100644 --- a/samples/excel/35-worksheet/worksheet-range-cell.yaml +++ b/samples/excel/35-worksheet/worksheet-range-cell.yaml @@ -161,20 +161,17 @@ style: } language: css libraries: | - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/37-workbook/protect-data-in-worksheet-and-workbook-structure.yaml b/samples/excel/37-workbook/protect-data-in-worksheet-and-workbook-structure.yaml index 8435143cb..d3fb18aac 100644 --- a/samples/excel/37-workbook/protect-data-in-worksheet-and-workbook-structure.yaml +++ b/samples/excel/37-workbook/protect-data-in-worksheet-and-workbook-structure.yaml @@ -247,7 +247,7 @@ style: language: css libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + @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/37-workbook/workbook-get-active-cell.yaml b/samples/excel/37-workbook/workbook-get-active-cell.yaml index 8a2a93882..55e0cff4f 100644 --- a/samples/excel/37-workbook/workbook-get-active-cell.yaml +++ b/samples/excel/37-workbook/workbook-get-active-cell.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 + @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/40-table/add-rows-and-columns-to-a-table.yaml b/samples/excel/40-table/add-rows-and-columns-to-a-table.yaml index 6f1e99b5a..d48695ec4 100644 --- a/samples/excel/40-table/add-rows-and-columns-to-a-table.yaml +++ b/samples/excel/40-table/add-rows-and-columns-to-a-table.yaml @@ -188,20 +188,17 @@ style: } language: css libraries: | - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // 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 - // NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - // IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/40-table/convert-range-to-table.yaml b/samples/excel/40-table/convert-range-to-table.yaml index 5ce7ebc20..d53cc11ff 100644 --- a/samples/excel/40-table/convert-range-to-table.yaml +++ b/samples/excel/40-table/convert-range-to-table.yaml @@ -106,20 +106,17 @@ style: } language: css libraries: | - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // 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 - // NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - // IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/40-table/create-table.yaml b/samples/excel/40-table/create-table.yaml index 58e1eb1cc..d557c96ec 100644 --- a/samples/excel/40-table/create-table.yaml +++ b/samples/excel/40-table/create-table.yaml @@ -75,20 +75,17 @@ style: } language: css libraries: | - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // 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 - // NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - // IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/40-table/filter-data.yaml b/samples/excel/40-table/filter-data.yaml index b990cd153..2eae54f53 100644 --- a/samples/excel/40-table/filter-data.yaml +++ b/samples/excel/40-table/filter-data.yaml @@ -134,20 +134,17 @@ style: } language: css libraries: | - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // 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 - // NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - // IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/40-table/format-table.yaml b/samples/excel/40-table/format-table.yaml index 2b7db1456..e1d337470 100644 --- a/samples/excel/40-table/format-table.yaml +++ b/samples/excel/40-table/format-table.yaml @@ -108,20 +108,17 @@ style: } language: css libraries: | - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // 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 - // NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - // IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/40-table/get-data-from-table.yaml b/samples/excel/40-table/get-data-from-table.yaml index d119b6e83..a1afe23e3 100644 --- a/samples/excel/40-table/get-data-from-table.yaml +++ b/samples/excel/40-table/get-data-from-table.yaml @@ -127,20 +127,17 @@ style: } language: css libraries: | - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // 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 - // NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - // IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/40-table/get-visible-range-of-a-filtered-table.yaml b/samples/excel/40-table/get-visible-range-of-a-filtered-table.yaml index d348ba119..2b07ee099 100644 --- a/samples/excel/40-table/get-visible-range-of-a-filtered-table.yaml +++ b/samples/excel/40-table/get-visible-range-of-a-filtered-table.yaml @@ -168,20 +168,17 @@ style: } language: css libraries: | - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // 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 - // NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - // IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/40-table/import-json-data.yaml b/samples/excel/40-table/import-json-data.yaml index ec8279d18..2b608a1c6 100644 --- a/samples/excel/40-table/import-json-data.yaml +++ b/samples/excel/40-table/import-json-data.yaml @@ -140,20 +140,17 @@ style: } language: css libraries: | - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // 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 - // NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - // IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/40-table/sort-data.yaml b/samples/excel/40-table/sort-data.yaml index 7ea0db4d0..443558e90 100644 --- a/samples/excel/40-table/sort-data.yaml +++ b/samples/excel/40-table/sort-data.yaml @@ -109,20 +109,17 @@ style: } language: css libraries: | - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // 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 - // NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - // IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/40-table/style.yaml b/samples/excel/40-table/style.yaml index 3c464f65f..74f00a46e 100644 --- a/samples/excel/40-table/style.yaml +++ b/samples/excel/40-table/style.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 + @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/45-named-item/create-and-remove-named-item.yaml b/samples/excel/45-named-item/create-and-remove-named-item.yaml index 9e9f4ceda..e11b4abfc 100644 --- a/samples/excel/45-named-item/create-and-remove-named-item.yaml +++ b/samples/excel/45-named-item/create-and-remove-named-item.yaml @@ -171,20 +171,17 @@ style: } language: css libraries: | - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // 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 - // NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - // IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/45-named-item/create-and-use-named-item-for-range.yaml b/samples/excel/45-named-item/create-and-use-named-item-for-range.yaml index 5a472e871..446c16e81 100644 --- a/samples/excel/45-named-item/create-and-use-named-item-for-range.yaml +++ b/samples/excel/45-named-item/create-and-use-named-item-for-range.yaml @@ -163,20 +163,17 @@ style: } language: css libraries: | - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // 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 - // NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - // IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/45-named-item/create-named-item.yaml b/samples/excel/45-named-item/create-named-item.yaml index d997aaef3..5322139e7 100644 --- a/samples/excel/45-named-item/create-named-item.yaml +++ b/samples/excel/45-named-item/create-named-item.yaml @@ -133,20 +133,17 @@ style: } language: css libraries: | - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // 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 - // NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - // IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/45-named-item/list-named-items.yaml b/samples/excel/45-named-item/list-named-items.yaml index 46e564c93..6a37b950b 100644 --- a/samples/excel/45-named-item/list-named-items.yaml +++ b/samples/excel/45-named-item/list-named-items.yaml @@ -58,20 +58,17 @@ style: } language: css libraries: | - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // 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 - // NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - // IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/45-named-item/update-named-item.yaml b/samples/excel/45-named-item/update-named-item.yaml index cdc505d66..8d1a23c4d 100644 --- a/samples/excel/45-named-item/update-named-item.yaml +++ b/samples/excel/45-named-item/update-named-item.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 + @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/50-chart/chart-axis.yaml b/samples/excel/50-chart/chart-axis.yaml index 1045ecead..c46fa2496 100644 --- a/samples/excel/50-chart/chart-axis.yaml +++ b/samples/excel/50-chart/chart-axis.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 + @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/50-chart/chart-legend.yaml b/samples/excel/50-chart/chart-legend.yaml index 9104389b0..c52e0fcf3 100644 --- a/samples/excel/50-chart/chart-legend.yaml +++ b/samples/excel/50-chart/chart-legend.yaml @@ -136,7 +136,7 @@ style: language: css libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + @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/50-chart/chart-point.yaml b/samples/excel/50-chart/chart-point.yaml index fb4159dd3..1cb2d50e0 100644 --- a/samples/excel/50-chart/chart-point.yaml +++ b/samples/excel/50-chart/chart-point.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 + @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/50-chart/chart-series-doughnutholesize.yaml b/samples/excel/50-chart/chart-series-doughnutholesize.yaml index 72cb6b94b..29a40a8de 100644 --- a/samples/excel/50-chart/chart-series-doughnutholesize.yaml +++ b/samples/excel/50-chart/chart-series-doughnutholesize.yaml @@ -124,7 +124,7 @@ style: language: css libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + @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/50-chart/chart-series-markers.yaml b/samples/excel/50-chart/chart-series-markers.yaml index 2de262fd0..158f64cde 100644 --- a/samples/excel/50-chart/chart-series-markers.yaml +++ b/samples/excel/50-chart/chart-series-markers.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 + @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/50-chart/chart-series-plotorder.yaml b/samples/excel/50-chart/chart-series-plotorder.yaml index 0f5c33cef..68e2ec672 100644 --- a/samples/excel/50-chart/chart-series-plotorder.yaml +++ b/samples/excel/50-chart/chart-series-plotorder.yaml @@ -126,7 +126,7 @@ style: language: css libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + @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/50-chart/chart-series.yaml b/samples/excel/50-chart/chart-series.yaml index 55157182c..27d634634 100644 --- a/samples/excel/50-chart/chart-series.yaml +++ b/samples/excel/50-chart/chart-series.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 + @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/50-chart/chart-title-substring.yaml b/samples/excel/50-chart/chart-title-substring.yaml index 65561f032..4b4979e8b 100644 --- a/samples/excel/50-chart/chart-title-substring.yaml +++ b/samples/excel/50-chart/chart-title-substring.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 + @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/50-chart/chart-trendlines.yaml b/samples/excel/50-chart/chart-trendlines.yaml index 0d046c9f7..7746e86e4 100644 --- a/samples/excel/50-chart/chart-trendlines.yaml +++ b/samples/excel/50-chart/chart-trendlines.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 + @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/50-chart/create-additional-chart-types.yaml b/samples/excel/50-chart/create-additional-chart-types.yaml index 8c0db5b01..3dd074b96 100644 --- a/samples/excel/50-chart/create-additional-chart-types.yaml +++ b/samples/excel/50-chart/create-additional-chart-types.yaml @@ -239,7 +239,7 @@ style: language: css libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + @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/50-chart/create-column-clustered-chart.yaml b/samples/excel/50-chart/create-column-clustered-chart.yaml index 65d2b4dd6..2cf11a379 100644 --- a/samples/excel/50-chart/create-column-clustered-chart.yaml +++ b/samples/excel/50-chart/create-column-clustered-chart.yaml @@ -117,20 +117,17 @@ style: } language: css libraries: | - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // 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 - // NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - // IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/50-chart/create-doughnut-chart.yaml b/samples/excel/50-chart/create-doughnut-chart.yaml index dde32a5fe..fbd671f41 100644 --- a/samples/excel/50-chart/create-doughnut-chart.yaml +++ b/samples/excel/50-chart/create-doughnut-chart.yaml @@ -122,20 +122,17 @@ style: } language: css libraries: | - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // 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 - // NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - // IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/50-chart/create-line-chart.yaml b/samples/excel/50-chart/create-line-chart.yaml index 88d17f439..0ec8e07e4 100644 --- a/samples/excel/50-chart/create-line-chart.yaml +++ b/samples/excel/50-chart/create-line-chart.yaml @@ -104,7 +104,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + @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/50-chart/create-xyscatter-chart.yaml b/samples/excel/50-chart/create-xyscatter-chart.yaml index 21b28a29e..3cfca1359 100644 --- a/samples/excel/50-chart/create-xyscatter-chart.yaml +++ b/samples/excel/50-chart/create-xyscatter-chart.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 + @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/55-pivot-table/refresh-pivot-table.yaml b/samples/excel/55-pivot-table/refresh-pivot-table.yaml index 03b5fbbb9..81144a811 100644 --- a/samples/excel/55-pivot-table/refresh-pivot-table.yaml +++ b/samples/excel/55-pivot-table/refresh-pivot-table.yaml @@ -120,20 +120,17 @@ style: } language: css libraries: | - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // 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 - // NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - // IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/70-events/data-changed.yaml b/samples/excel/70-events/data-changed.yaml index 690395929..9c7f66464 100644 --- a/samples/excel/70-events/data-changed.yaml +++ b/samples/excel/70-events/data-changed.yaml @@ -97,20 +97,17 @@ style: /* Your style goes here */ language: css libraries: | - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 diff --git a/samples/excel/70-events/events-table-changed.yaml b/samples/excel/70-events/events-table-changed.yaml index c02bca54b..5ed2aef1f 100644 --- a/samples/excel/70-events/events-table-changed.yaml +++ b/samples/excel/70-events/events-table-changed.yaml @@ -172,7 +172,7 @@ style: language: css libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + @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/70-events/events-tablecollection-changed.yaml b/samples/excel/70-events/events-tablecollection-changed.yaml index 5b1cca700..578c8b276 100644 --- a/samples/excel/70-events/events-tablecollection-changed.yaml +++ b/samples/excel/70-events/events-tablecollection-changed.yaml @@ -159,7 +159,7 @@ style: language: css libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + @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/70-events/events-worksheet-activated.yaml b/samples/excel/70-events/events-worksheet-activated.yaml index 25e055f04..ffc82535c 100644 --- a/samples/excel/70-events/events-worksheet-activated.yaml +++ b/samples/excel/70-events/events-worksheet-activated.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 + @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/70-events/events-worksheet-changed.yaml b/samples/excel/70-events/events-worksheet-changed.yaml index a4ebb180b..04e4a7ff0 100644 --- a/samples/excel/70-events/events-worksheet-changed.yaml +++ b/samples/excel/70-events/events-worksheet-changed.yaml @@ -172,7 +172,7 @@ style: language: css libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + @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/70-events/events-worksheet-selectionchanged.yaml b/samples/excel/70-events/events-worksheet-selectionchanged.yaml index d51d6c22b..1daa254a5 100644 --- a/samples/excel/70-events/events-worksheet-selectionchanged.yaml +++ b/samples/excel/70-events/events-worksheet-selectionchanged.yaml @@ -126,7 +126,7 @@ style: language: css libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + @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/70-events/selection-changed.yaml b/samples/excel/70-events/selection-changed.yaml index bda490217..dcf00d0aa 100644 --- a/samples/excel/70-events/selection-changed.yaml +++ b/samples/excel/70-events/selection-changed.yaml @@ -119,20 +119,17 @@ style: } language: css libraries: | - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/70-events/setting-changed.yaml b/samples/excel/70-events/setting-changed.yaml index 36d4139ac..1e5c5d457 100644 --- a/samples/excel/70-events/setting-changed.yaml +++ b/samples/excel/70-events/setting-changed.yaml @@ -124,20 +124,17 @@ style: } language: css libraries: | - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/80-settings/create-get-change-delete-settings.yaml b/samples/excel/80-settings/create-get-change-delete-settings.yaml index 7c8ad61a1..c6801e939 100644 --- a/samples/excel/80-settings/create-get-change-delete-settings.yaml +++ b/samples/excel/80-settings/create-get-change-delete-settings.yaml @@ -111,20 +111,17 @@ style: } language: css libraries: | - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/82-document/get-file-in-slices-async.yaml b/samples/excel/82-document/get-file-in-slices-async.yaml index ba6c2d98f..95cc29307 100644 --- a/samples/excel/82-document/get-file-in-slices-async.yaml +++ b/samples/excel/82-document/get-file-in-slices-async.yaml @@ -191,22 +191,19 @@ style: } language: css libraries: |- - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 https://unpkg.com/base64-js@1.2.1/base64js.min.js \ No newline at end of file diff --git a/samples/excel/82-document/properties.yaml b/samples/excel/82-document/properties.yaml index 25c221c93..a47e01340 100644 --- a/samples/excel/82-document/properties.yaml +++ b/samples/excel/82-document/properties.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 + @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-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml b/samples/excel/85-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml index a1fcfb516..7bb43c436 100644 --- a/samples/excel/85-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml +++ b/samples/excel/85-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml @@ -146,20 +146,17 @@ style: } language: css libraries: | - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/85-custom-xml-parts/test-xml-for-unique-namespace.yaml b/samples/excel/85-custom-xml-parts/test-xml-for-unique-namespace.yaml index 7c527741e..ec78c0fe3 100644 --- a/samples/excel/85-custom-xml-parts/test-xml-for-unique-namespace.yaml +++ b/samples/excel/85-custom-xml-parts/test-xml-for-unique-namespace.yaml @@ -132,20 +132,17 @@ style: } language: css libraries: | - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/88-common-patterns/multiple-property-set.yaml b/samples/excel/88-common-patterns/multiple-property-set.yaml index 9a5f0a5f8..9da9ede85 100644 --- a/samples/excel/88-common-patterns/multiple-property-set.yaml +++ b/samples/excel/88-common-patterns/multiple-property-set.yaml @@ -129,20 +129,17 @@ style: } language: css libraries: | - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/89-preview-apis/events-worksheet-calculated.yaml b/samples/excel/89-preview-apis/events-worksheet-calculated.yaml index 0b22b2ca7..13a15abce 100644 --- a/samples/excel/89-preview-apis/events-worksheet-calculated.yaml +++ b/samples/excel/89-preview-apis/events-worksheet-calculated.yaml @@ -106,12 +106,16 @@ style: language: css libraries: | https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + 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 + @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 \ No newline at end of file diff --git a/samples/excel/90-just-for-fun/color-wheel.yaml b/samples/excel/90-just-for-fun/color-wheel.yaml index f77b51ffe..d0d4fbc3b 100644 --- a/samples/excel/90-just-for-fun/color-wheel.yaml +++ b/samples/excel/90-just-for-fun/color-wheel.yaml @@ -141,20 +141,17 @@ style: } language: css libraries: | - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // 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 - // NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - // IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/90-just-for-fun/gradient.yaml b/samples/excel/90-just-for-fun/gradient.yaml index 4860fca00..9a6b6f4bf 100644 --- a/samples/excel/90-just-for-fun/gradient.yaml +++ b/samples/excel/90-just-for-fun/gradient.yaml @@ -192,22 +192,19 @@ style: } language: css libraries: |- - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.6.3/dist/office.helpers.min.js - jquery@3.1.1 - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-js @types/core-js - @microsoft/office-js-helpers/dist/office.helpers.d.ts + + @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 tinycolor2@1.4.1/tinycolor.js diff --git a/samples/excel/90-just-for-fun/path-finder-game.yaml b/samples/excel/90-just-for-fun/path-finder-game.yaml index e160cc453..b92d5c503 100644 --- a/samples/excel/90-just-for-fun/path-finder-game.yaml +++ b/samples/excel/90-just-for-fun/path-finder-game.yaml @@ -221,20 +221,17 @@ style: } language: css libraries: | - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/90-just-for-fun/patterns.yaml b/samples/excel/90-just-for-fun/patterns.yaml index ab2612ce0..ef2a3bbb4 100644 --- a/samples/excel/90-just-for-fun/patterns.yaml +++ b/samples/excel/90-just-for-fun/patterns.yaml @@ -189,20 +189,17 @@ style: } language: css libraries: | - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ No newline at end of file diff --git a/samples/excel/default.yaml b/samples/excel/default.yaml index 96b8665bc..ffb0586fa 100644 --- a/samples/excel/default.yaml +++ b/samples/excel/default.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 + @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/onenote/default.yaml b/samples/onenote/default.yaml index 3a336096a..75bb3c34f 100644 --- a/samples/onenote/default.yaml +++ b/samples/onenote/default.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 + @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/01-compose-basics/get-item-subject.yaml b/samples/outlook/01-compose-basics/get-item-subject.yaml index f460bac55..af8a6c646 100644 --- a/samples/outlook/01-compose-basics/get-item-subject.yaml +++ b/samples/outlook/01-compose-basics/get-item-subject.yaml @@ -31,7 +31,7 @@ style: language: css libraries: | https://unpkg.com/@microsoft/office-js@1.1.1-private.1/dist/office.js - https://unpkg.com/@microsoft/office-js@1.1.1-private.1/dist/office.d.ts + @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/01-compose-basics/get-selected-text.yaml b/samples/outlook/01-compose-basics/get-selected-text.yaml index eadb9e467..ce52c70d8 100644 --- a/samples/outlook/01-compose-basics/get-selected-text.yaml +++ b/samples/outlook/01-compose-basics/get-selected-text.yaml @@ -31,7 +31,7 @@ style: language: css libraries: | https://unpkg.com/@microsoft/office-js@1.1.1-private.1/dist/office.js - https://unpkg.com/@microsoft/office-js@1.1.1-private.1/dist/office.d.ts + @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/01-compose-basics/set-selected-text.yaml b/samples/outlook/01-compose-basics/set-selected-text.yaml index 1c3480df3..01541aa93 100644 --- a/samples/outlook/01-compose-basics/set-selected-text.yaml +++ b/samples/outlook/01-compose-basics/set-selected-text.yaml @@ -29,7 +29,7 @@ style: language: css libraries: | https://unpkg.com/@microsoft/office-js@1.1.1-private.1/dist/office.js - https://unpkg.com/@microsoft/office-js@1.1.1-private.1/dist/office.d.ts + @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/default.yaml b/samples/outlook/default.yaml index 87bd34444..138afe3a2 100644 --- a/samples/outlook/default.yaml +++ b/samples/outlook/default.yaml @@ -23,20 +23,17 @@ style: /* Your style goes here */ language: css libraries: | - # Office.js - https://unpkg.com/@microsoft/office-js@1.1.1-private.1/dist/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-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 \ 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 b5dc7098d..26d7079d7 100644 --- a/samples/powerpoint/basics/basic-common-api-call.yaml +++ b/samples/powerpoint/basics/basic-common-api-call.yaml @@ -32,7 +32,7 @@ style: language: css libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + @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/basics/get-slide-metadata.yaml b/samples/powerpoint/basics/get-slide-metadata.yaml index da08aa538..eb7fdc1af 100644 --- a/samples/powerpoint/basics/get-slide-metadata.yaml +++ b/samples/powerpoint/basics/get-slide-metadata.yaml @@ -69,7 +69,7 @@ style: language: css libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + @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/basics/insert-image.yaml b/samples/powerpoint/basics/insert-image.yaml index af77e72c7..1e474f5ec 100644 --- a/samples/powerpoint/basics/insert-image.yaml +++ b/samples/powerpoint/basics/insert-image.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 + @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/default.yaml b/samples/powerpoint/default.yaml index 3fa9b929b..1137ebb9c 100644 --- a/samples/powerpoint/default.yaml +++ b/samples/powerpoint/default.yaml @@ -30,7 +30,7 @@ style: language: css libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + @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/project/basics/basic-common-api-call.yaml b/samples/project/basics/basic-common-api-call.yaml index bf2020493..96a140ddf 100644 --- a/samples/project/basics/basic-common-api-call.yaml +++ b/samples/project/basics/basic-common-api-call.yaml @@ -32,7 +32,7 @@ style: language: css libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + @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/project/default.yaml b/samples/project/default.yaml index b37a46135..b2bbcb1e0 100644 --- a/samples/project/default.yaml +++ b/samples/project/default.yaml @@ -30,7 +30,7 @@ style: language: css libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + @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/01-basics/basic-api-call-es5.yaml b/samples/word/01-basics/basic-api-call-es5.yaml index 7017a89a3..803ff7e10 100644 --- a/samples/word/01-basics/basic-api-call-es5.yaml +++ b/samples/word/01-basics/basic-api-call-es5.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 + @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/01-basics/basic-api-call.yaml b/samples/word/01-basics/basic-api-call.yaml index 960d64e52..3bd2d1056 100644 --- a/samples/word/01-basics/basic-api-call.yaml +++ b/samples/word/01-basics/basic-api-call.yaml @@ -78,7 +78,7 @@ style: language: css libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + @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/01-basics/basic-common-api-call.yaml b/samples/word/01-basics/basic-common-api-call.yaml index ef2fcd607..cd01463ad 100644 --- a/samples/word/01-basics/basic-common-api-call.yaml +++ b/samples/word/01-basics/basic-common-api-call.yaml @@ -32,7 +32,7 @@ style: language: css libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + @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/01-basics/basic-doc-assembly.yaml b/samples/word/01-basics/basic-doc-assembly.yaml index c16ed0a29..5b23c9b0b 100644 --- a/samples/word/01-basics/basic-doc-assembly.yaml +++ b/samples/word/01-basics/basic-doc-assembly.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 + @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/01-basics/insert-and-get-pictures.yaml b/samples/word/01-basics/insert-and-get-pictures.yaml index b156a0d16..dd4ae0066 100644 --- a/samples/word/01-basics/insert-and-get-pictures.yaml +++ b/samples/word/01-basics/insert-and-get-pictures.yaml @@ -146,21 +146,17 @@ style: } language: css libraries: | - # Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - # 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 - # NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@.5.0/dist/office.helpers.min.js - jquery@3.1.1 - office-ui-fabric-js@1.4.0/dist/js/fabric.min.js - - # IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-js - @types/jquery @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 diff --git a/samples/word/01-basics/insert-formatted-text.yaml b/samples/word/01-basics/insert-formatted-text.yaml index e7a93ccda..064940afc 100644 --- a/samples/word/01-basics/insert-formatted-text.yaml +++ b/samples/word/01-basics/insert-formatted-text.yaml @@ -95,19 +95,17 @@ style: } language: css libraries: |- - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // NPM libraries - jquery@3.1.1 - office-ui-fabric-js@1.4.0/dist/js/fabric.min.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 - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - core-js@2.4.1/client/core.min.js - // IntelliSense: Use dt~library_name for DefinitelyTyped or URLs to d.ts files - @types/office-js - @types/jquery + 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 diff --git a/samples/word/01-basics/insert-header.yaml b/samples/word/01-basics/insert-header.yaml index 3d59a7d2e..77c5f8622 100644 --- a/samples/word/01-basics/insert-header.yaml +++ b/samples/word/01-basics/insert-header.yaml @@ -73,19 +73,17 @@ style: } language: css libraries: |- - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // NPM libraries - jquery@3.1.1 - office-ui-fabric-js@1.4.0/dist/js/fabric.min.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 - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - core-js@2.4.1/client/core.min.js - // IntelliSense: Use dt~library_name for DefinitelyTyped or URLs to d.ts files - @types/office-js - @types/jquery + 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 \ No newline at end of file diff --git a/samples/word/01-basics/insert-line-and-page-breaks.yaml b/samples/word/01-basics/insert-line-and-page-breaks.yaml index 0cb5c4abc..89985db97 100644 --- a/samples/word/01-basics/insert-line-and-page-breaks.yaml +++ b/samples/word/01-basics/insert-line-and-page-breaks.yaml @@ -136,19 +136,17 @@ style: } language: css libraries: |- - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // NPM libraries - jquery@3.1.1 - office-ui-fabric-js@1.4.0/dist/js/fabric.min.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 - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - core-js@2.4.1/client/core.min.js - // IntelliSense: Use dt~library_name for DefinitelyTyped or URLs to d.ts files - @types/office-js - @types/jquery + 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 \ No newline at end of file diff --git a/samples/word/01-basics/search.yaml b/samples/word/01-basics/search.yaml index cdddbb545..ccd0c0897 100644 --- a/samples/word/01-basics/search.yaml +++ b/samples/word/01-basics/search.yaml @@ -150,19 +150,17 @@ style: } language: css libraries: |- - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // NPM libraries - jquery@3.1.1 - office-ui-fabric-js@1.4.0/dist/js/fabric.min.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 - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - core-js@2.4.1/client/core.min.js - // IntelliSense: Use dt~library_name for DefinitelyTyped or URLs to d.ts files - @types/office-js - @types/jquery + 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 diff --git a/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml b/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml index 9a864da77..6d04e2701 100644 --- a/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml +++ b/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml @@ -151,19 +151,17 @@ style: } language: css libraries: |- - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // NPM libraries - jquery@3.1.1 - office-ui-fabric-js@1.4.0/dist/js/fabric.min.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 - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - core-js@2.4.1/client/core.min.js - // IntelliSense: Use dt~library_name for DefinitelyTyped or URLs to d.ts files - @types/office-js - @types/jquery + 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 \ No newline at end of file diff --git a/samples/word/02-paragraphs/insert-in-different-locations.yaml b/samples/word/02-paragraphs/insert-in-different-locations.yaml index 28c553694..d443df0bd 100644 --- a/samples/word/02-paragraphs/insert-in-different-locations.yaml +++ b/samples/word/02-paragraphs/insert-in-different-locations.yaml @@ -188,19 +188,17 @@ style: } language: css libraries: |- - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // NPM libraries - jquery@3.1.1 - office-ui-fabric-js@1.4.0/dist/js/fabric.min.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 - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - core-js@2.4.1/client/core.min.js - // IntelliSense: Use dt~library_name for DefinitelyTyped or URLs to d.ts files - @types/office-js - @types/jquery + 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 diff --git a/samples/word/02-paragraphs/paragraph-properties.yaml b/samples/word/02-paragraphs/paragraph-properties.yaml index 75c0b2ffa..63cd65a4e 100644 --- a/samples/word/02-paragraphs/paragraph-properties.yaml +++ b/samples/word/02-paragraphs/paragraph-properties.yaml @@ -165,19 +165,17 @@ style: } language: css libraries: |- - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // NPM libraries - jquery@3.1.1 - office-ui-fabric-js@1.4.0/dist/js/fabric.min.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 - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - core-js@2.4.1/client/core.min.js - // IntelliSense: Use dt~library_name for DefinitelyTyped or URLs to d.ts files - @types/office-js - @types/jquery + 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 \ No newline at end of file diff --git a/samples/word/03-content-controls/insert-and-change-content-controls.yaml b/samples/word/03-content-controls/insert-and-change-content-controls.yaml index 37a18a82e..2bb46098c 100644 --- a/samples/word/03-content-controls/insert-and-change-content-controls.yaml +++ b/samples/word/03-content-controls/insert-and-change-content-controls.yaml @@ -176,19 +176,17 @@ style: } language: css libraries: |- - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // NPM libraries - jquery@3.1.1 - office-ui-fabric-js@1.4.0/dist/js/fabric.min.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 - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - core-js@2.4.1/client/core.min.js - // IntelliSense: Use dt~library_name for DefinitelyTyped or URLs to d.ts files - @types/office-js - @types/jquery + 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 diff --git a/samples/word/04-range/scroll-to-range.yaml b/samples/word/04-range/scroll-to-range.yaml index e854cb162..36b68781c 100644 --- a/samples/word/04-range/scroll-to-range.yaml +++ b/samples/word/04-range/scroll-to-range.yaml @@ -137,19 +137,17 @@ style: } language: css libraries: |- - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // NPM libraries - jquery@3.1.1 - office-ui-fabric-js@1.4.0/dist/js/fabric.min.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 - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - core-js@2.4.1/client/core.min.js - // IntelliSense: Use dt~library_name for DefinitelyTyped or URLs to d.ts files - @types/office-js - @types/jquery + 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 diff --git a/samples/word/04-range/split-words-of-first-paragraph.yaml b/samples/word/04-range/split-words-of-first-paragraph.yaml index 97d1b7db2..c1e0f0043 100644 --- a/samples/word/04-range/split-words-of-first-paragraph.yaml +++ b/samples/word/04-range/split-words-of-first-paragraph.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 + @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/05-tables/table-cell-access.yaml b/samples/word/05-tables/table-cell-access.yaml index 37337a6bf..4c0a4ec9e 100644 --- a/samples/word/05-tables/table-cell-access.yaml +++ b/samples/word/05-tables/table-cell-access.yaml @@ -121,19 +121,17 @@ style: } language: css libraries: |- - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // NPM libraries - jquery@3.1.1 - office-ui-fabric-js@1.4.0/dist/js/fabric.min.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 - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - core-js@2.4.1/client/core.min.js - // IntelliSense: Use dt~library_name for DefinitelyTyped or URLs to d.ts files - @types/office-js - @types/jquery + 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 diff --git a/samples/word/06-lists/insert-list.yaml b/samples/word/06-lists/insert-list.yaml index 8e6e9b9d2..f0c1d296c 100644 --- a/samples/word/06-lists/insert-list.yaml +++ b/samples/word/06-lists/insert-list.yaml @@ -133,19 +133,17 @@ style: } language: css libraries: |- - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // NPM libraries - jquery@3.1.1 - office-ui-fabric-js@1.4.0/dist/js/fabric.min.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 - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - core-js@2.4.1/client/core.min.js - // IntelliSense: Use dt~library_name for DefinitelyTyped or URLs to d.ts files - @types/office-js - @types/jquery + 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 diff --git a/samples/word/07-custom-properties/get-built-in-properties.yaml b/samples/word/07-custom-properties/get-built-in-properties.yaml index ef1b8b4b1..bd25c705f 100644 --- a/samples/word/07-custom-properties/get-built-in-properties.yaml +++ b/samples/word/07-custom-properties/get-built-in-properties.yaml @@ -74,19 +74,17 @@ style: } language: css libraries: |- - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // NPM libraries - jquery@3.1.1 - office-ui-fabric-js@1.4.0/dist/js/fabric.min.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 - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - core-js@2.4.1/client/core.min.js - // IntelliSense: Use dt~library_name for DefinitelyTyped or URLs to d.ts files - @types/office-js - @types/jquery + 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 diff --git a/samples/word/07-custom-properties/read-write-custom-document-properties.yaml b/samples/word/07-custom-properties/read-write-custom-document-properties.yaml index 4bdac6195..7f87508a3 100644 --- a/samples/word/07-custom-properties/read-write-custom-document-properties.yaml +++ b/samples/word/07-custom-properties/read-write-custom-document-properties.yaml @@ -129,19 +129,17 @@ style: } language: css libraries: |- - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // NPM libraries - jquery@3.1.1 - office-ui-fabric-js@1.4.0/dist/js/fabric.min.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 - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - core-js@2.4.1/client/core.min.js - // IntelliSense: Use dt~library_name for DefinitelyTyped or URLs to d.ts files - @types/office-js - @types/jquery + 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 diff --git a/samples/word/50-common-patterns/multiple-property-set.yaml b/samples/word/50-common-patterns/multiple-property-set.yaml index 0f410f608..c455a2425 100644 --- a/samples/word/50-common-patterns/multiple-property-set.yaml +++ b/samples/word/50-common-patterns/multiple-property-set.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 + @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-fabric/fabric-insert-form-data.yaml b/samples/word/99-fabric/fabric-insert-form-data.yaml index 448fa0702..f9dd50ab3 100644 --- a/samples/word/99-fabric/fabric-insert-form-data.yaml +++ b/samples/word/99-fabric/fabric-insert-form-data.yaml @@ -193,19 +193,17 @@ style: content: '' language: css libraries: |- - // Office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js - // NPM libraries - jquery@3.1.1 - office-ui-fabric-js@1.4.0/dist/js/fabric.min.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 - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - core-js@2.4.1/client/core.min.js - // IntelliSense: Use dt~library_name for DefinitelyTyped or URLs to d.ts files - @types/office-js - @types/jquery + core-js@2.4.1/client/core.min.js @types/core-js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts \ No newline at end of file + + @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 \ No newline at end of file diff --git a/samples/word/default.yaml b/samples/word/default.yaml index 5168945d5..9ec9c36a2 100644 --- a/samples/word/default.yaml +++ b/samples/word/default.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 + @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 From 628d247b9d7a085b8732f27337d82c5b510229cb Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Mon, 6 Aug 2018 15:20:51 -0700 Subject: [PATCH 059/660] Chart formatting example (#183) * Chart property sample * Fixing description * Explictly syncing and removing unused onDataChanged listener --- .../89-preview-apis/chart-formatting.yaml | 311 ++++++++++++++++++ 1 file changed, 311 insertions(+) create mode 100644 samples/excel/89-preview-apis/chart-formatting.yaml diff --git a/samples/excel/89-preview-apis/chart-formatting.yaml b/samples/excel/89-preview-apis/chart-formatting.yaml new file mode 100644 index 000000000..3a86d126c --- /dev/null +++ b/samples/excel/89-preview-apis/chart-formatting.yaml @@ -0,0 +1,311 @@ +id: excel-chart-formatting +name: Chart - Formatting +description: Format labels and lines of a slope chart. +host: EXCEL +api_set: + ExcelAPI: 1.8 +script: + content: |+ + $("#addSampleData").click(() => tryCatch(addSampleData)); + $("#create-chart").click(() => tryCatch(createChart)); + $("#format-chart").click(() => tryCatch(formatChart)); + $("#show-datalabels").click(() => tryCatch(dataLabels)); + $("#change-color").click(() => tryCatch(changeColor)); + $("#clear").click(() => tryCatch(clearChart)); + + async function createChart() { + await Excel.run(async (context) => { + var worksheet = context.workbook.worksheets.getActiveWorksheet(); + var chart = worksheet.charts.add(Excel.ChartType.lineMarkers, worksheet.getRange("B6:G15"), Excel.ChartSeriesBy.rows); + chart.axes.categoryAxis.setCategoryNames(worksheet.getRange("C5:G5")); + chart.name = "SlopeChart"; + + // place chart below sample data + chart.top = 275; + chart.left = 50; + chart.height = 600; + chart.width = 850; + + chart.title.text = "GDP Per Capita , 1980 to 2017"; + chart.legend.position = "Bottom"; + + await context.sync(); + }); + } + + async function formatChart() { + await Excel.run(async (context) => { + var worksheet = context.workbook.worksheets.getActiveWorksheet(); + var chart = worksheet.charts.getItem("SlopeChart"); + + chart.axes.valueAxis.tickLabelPosition = "None"; + chart.plotArea.width = 800; + chart.plotArea.left = 80; + + chart.title.format.font.size = 14.4; + chart.title.text = "GDP PER CAPITA , 1980 TO 2017" + chart.title.format.font.name = "Times New Roman"; + chart.title.format.font.color = "#D9D9D9"; + + chart.legend.format.font.name = "Times New Roman"; + chart.legend.format.font.color = "#D9D9D9"; + + chart.axes.categoryAxis.format.font.name = "Times New Roman"; + chart.axes.categoryAxis.format.font.color = "#D9D9D9"; + chart.axes.valueAxis.majorGridlines.format.line.color = "#585858"; + chart.format.fill.setSolidColor("#404040"); + await context.sync(); + }); + } + + async function dataLabels() { + await Excel.run(async (context) => { + var worksheet = context.workbook.worksheets.getActiveWorksheet(); + var chart = worksheet.charts.getItem("SlopeChart"); + chart.series.load("count"); + await context.sync(); + var pointsLoaded = -1; + for (var i = 0; i < chart.series.count; i++){ + var series = chart.series.getItemAt(i); + series.hasDataLabels = true; + series.markerSize = 20; + + series.markerBackgroundColor = "#404040"; + series.markerForegroundColor = "#404040"; + + // there are an equal number of points in each series, so we only want to load and sync once + if (pointsLoaded < 0) { + series.points.load("count"); + await context.sync(); + pointsLoaded = series.points.count; + } + + for (var 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"; + } + + series.points.getItemAt(4).dataLabel.showSeriesName = true; + } + + chart.dataLabels.position = "Center"; + chart.dataLabels.separator = "\n"; + chart.dataLabels.format.font.color = "#D9D9D9"; + await context.sync(); + }); + } + + async function changeColor() { + await Excel.run(async (context) => { + + var worksheet = context.workbook.worksheets.getActiveWorksheet(); + var chart = worksheet.charts.getItem("SlopeChart"); + var increase = worksheet.getRange("I6:I15"); + var increaseRate = worksheet.getRange("J6:J15"); + increase.load("values"); + increaseRate.load("values"); + chart.series.load("count"); + await context.sync(); + + // find the countries with the highest GDP and the fasting GDP growth + var max = increase.values[0][0]; + var maxIndex = 0; + var fast = increaseRate.values[0][0]; + var fastIndex = 0; + + for (var i = 1; i < 10; i++){ + if (increase.values[i][0] > max) { + max = increase.values[i][0]; + maxIndex = i; + } + if (increaseRate.values[i][0] > fast) { + fast = increaseRate.values[i][0]; + fastIndex = i; + } + } + + // color everything grey before highlighting results + for (var i = 0; i < chart.series.count; i++){ + chart.series.getItemAt(i).format.line.color = "#636363"; + chart.series.getItemAt(i).dataLabels.format.font.color = "#636363"; + } + + var maxSeries = chart.series.getItemAt(maxIndex); + maxSeries.format.line.color = "#4472C4"; + maxSeries.dataLabels.format.font.color = "#D9D9D9"; + var fastSeries = chart.series.getItemAt(fastIndex); + fastSeries.format.line.color = "#75AB3B"; + fastSeries.dataLabels.format.font.color = "#D9D9D9"; + + maxSeries.load(); + fastSeries.load(); + await context.sync(); + maxSeries.name += " (Greatest Growth)"; + fastSeries.name += " (Greatest Relative Growth)"; + await context.sync(); + }); + } + + async function clearChart() { + await Excel.run(async (context) => { + var worksheet = context.workbook.worksheets.getActiveWorksheet(); + var charts = worksheet.charts; + charts.load("count"); + await context.sync(); + + for (var i = 0; i < charts.count; i++) { + charts.getItemAt(0).delete(); + } + await context.sync(); + }); + } + + async function addSampleData() { + await Excel.run(async (context) => { + await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + const sheet = context.workbook.worksheets.getItem("Sample"); + sheet.getRange("B5:G5").values = [["Country", "1980", "1990", "2000", "2010", "2017"]]; + let range = sheet.getRange("B6:G15"); + range.values = [ + ["Luxembourg", 17739, 33204, 49183, 106185, 107708], + ["Switzerland", 18870, 38666, 38007, 74908, 80837], + ["Norway", 15748, 28189, 38067, 87309, 73615], + ["Iceland", 15033, 25581, 31571, 41623, 73092], + ["Ireland", 6250, 13642, 26154, 48674, 68604], + ["Qatar", 31999, 15446, 29914, 72953, 50812], + ["United States", 12576, 23914, 36433, 48310, 59495], + ["Denmark", 13889, 26922, 30804, 58177, 56335], + ["Australia", 11018, 18866, 20860, 56360, 56135], + ["Singapore", 5004, 12766, 23793, 46569, 53880] + ]; + range.format.autofitColumns(); + + let range3 = sheet.getRange("I5:J5"); + range3.values = [["Increase", "% Increase"]]; + + let increaseRange = sheet.getRange("I6:I15"); + let data = []; + for (let i = 6; i < 16; i++) { + let item = []; + item.push("=G" + i.toString() + "-D" + i.toString()); + data.push(item); + } + increaseRange.formulas = data; + increaseRange.format.autofitColumns(); + + let increasePerRange = sheet.getRange("J6:J15"); + let data2 = []; + for (let i = 6; i < 16; i++) { + let item = []; + item.push("=G" + i.toString() + "/D" + i.toString()); + data2.push(item); + } + increasePerRange.formulas = data2; + increasePerRange.format.autofitColumns(); + + let formatnumber = []; + let formatnumberitem = ["###,0"]; + for (let i = 6; i < 16; i++) { + formatnumber.push(formatnumberitem); + } + sheet.getRange("C6:C15").numberFormat = formatnumber; + sheet.getRange("D6:D15").numberFormat = formatnumber; + sheet.getRange("E6:E15").numberFormat = formatnumber; + sheet.getRange("F6:F15").numberFormat = formatnumber; + sheet.getRange("G6:G15").numberFormat = formatnumber; + sheet.getRange("I6:I15").numberFormat = formatnumber; + + let formatnumber2 = []; + let formatnumberitem2 = ["#%"]; + for (let i = 6; i < 16; i++) { + formatnumber2.push(formatnumberitem2); + } + sheet.getRange("J6:J15").numberFormat = formatnumber2; + + sheet.getRange("B5:J5").format.font.bold = true; + sheet.getRange("B6:B15").format.font.bold = true; + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + } + sheet.activate(); + sheet.showGridlines = false; + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |- +

+ Setup GDP data +

+ +

+ +

+

+ Chart formatting +

+ +

+ +

+ +

+ Clean up +

+ + 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 + + @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 \ No newline at end of file From d3fb8854aacae29810eb6f5e3aab6e451e7a1644 Mon Sep 17 00:00:00 2001 From: Michael Zlatkovsky Date: Tue, 7 Aug 2018 16:19:38 -0800 Subject: [PATCH 060/660] Update gradient.yaml to make use of `range.untrack()` (#184) --- samples/excel/90-just-for-fun/gradient.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/samples/excel/90-just-for-fun/gradient.yaml b/samples/excel/90-just-for-fun/gradient.yaml index 9a6b6f4bf..4676f16fa 100644 --- a/samples/excel/90-just-for-fun/gradient.yaml +++ b/samples/excel/90-just-for-fun/gradient.yaml @@ -33,7 +33,7 @@ script: const sheet = await OfficeHelpers.ExcelUtilities .forceCreateSheet(context.workbook, "Gradient", true /*clearOnly*/); - sheet.getRange().format.set({ + sheet.getRange().untrack().format.set({ rowHeight: 15, columnWidth: 15, fill: { @@ -51,11 +51,11 @@ script: fillInColors(colors2D, originalSize); - let range = sheet.getCell(1, 1).getResizedRange( - originalSize - 1, originalSize - 1); + let range = sheet.getCell(1, 1).untrack().getResizedRange( + originalSize - 1, originalSize - 1).untrack(); for (let row = 0; row < originalSize; row++) { for (let col = 0; col < originalSize; col++) { - range.getCell(row, col).format.fill.color = + range.getCell(row, col).untrack().format.fill.color = colors2D[row][col]; } } @@ -141,7 +141,7 @@ template:

Size (width x height)

- +
-

Adjust the pivot table

+

Adjust the PivotTable


+ +


+ +


+ +

@@ -228,14 +235,15 @@ template:

Adjust formatting


+ +

-

Delete the pivot table

+

Delete the PivotTable

diff --git a/samples/excel/89-preview-apis/pivot-table-filters-and-summaries.yaml b/samples/excel/89-preview-apis/pivot-table-filters-and-summaries.yaml new file mode 100644 index 000000000..5926ff6fe --- /dev/null +++ b/samples/excel/89-preview-apis/pivot-table-filters-and-summaries.yaml @@ -0,0 +1,225 @@ +id: excel-pivottable-filters-and-summaries +name: Pivot table filters and summaries +description: Filter pivot table data and show different summarizations +author: OfficeDev +host: EXCEL +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)); + + 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(); + } + }); + } + + async function minFunc() { + genericFunctionSwitch(Excel.AggregationFunction.min); + } + async function maxFunc() { + genericFunctionSwitch(Excel.AggregationFunction.max); + } + async function countFunc() { + genericFunctionSwitch(Excel.AggregationFunction.count); + } + async function avgFunc() { + genericFunctionSwitch(Excel.AggregationFunction.average); + } + async function sumFunc() { + genericFunctionSwitch(Excel.AggregationFunction.sum); + } + + 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(); + + pivotTable.dataHierarchies.items[0].summarizeBy = functionType; + pivotTable.dataHierarchies.items[1].summarizeBy = functionType; + await context.sync(); + }); + } + + async function getCrateTotal() { + 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(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + // create the worksheets + const dataSheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "Data"); + const pivotSheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "Pivot"); + + // 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(); + pivotSheet.activate(); + + // 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"); + 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")); + + await context.sync(); + }); + } + + async function deletePivot() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItem("Pivot").pivotTables.getItem("Farm Sales").delete(); + + // also clean up the extra data from getCrateTotal() + context.workbook.worksheets.getActiveWorksheet().getRange("B27:C27").delete(Excel.DeleteShiftDirection.up); + await context.sync(); + }); + } + + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |- +
+

This sample shows how to filter pivot tables and manipulate their data.

+
+ +
+

Set up

+ +
+ +
+

Change functions

+

+

+

+

+ +

+ +
+

Filtering

+

+ After pressing the "Enable filter" button, manually select the classification filter for the pivot table + +

+

Data Manipulation

+ +
+ +
+

Clean up

+ +
+ language: html +style: + content: | + /* Your style goes here */ + 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 + + @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 \ No newline at end of file From 8ed26ae1826c103a9a3a88a349a81cbe117e9a30 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 10 Aug 2018 11:34:24 -0700 Subject: [PATCH 062/660] Fixing descriptions in pivot snippets (#185) --- .../excel/89-preview-apis/pivot-table-create-and-modify.yaml | 2 +- .../89-preview-apis/pivot-table-filters-and-summaries.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/excel/89-preview-apis/pivot-table-create-and-modify.yaml b/samples/excel/89-preview-apis/pivot-table-create-and-modify.yaml index e5f6a33b5..13aab2de0 100644 --- a/samples/excel/89-preview-apis/pivot-table-create-and-modify.yaml +++ b/samples/excel/89-preview-apis/pivot-table-create-and-modify.yaml @@ -1,6 +1,6 @@ id: excel-pivottable-pivot-table-create-and-modify name: Create and modify PivotTable -description: Create and modify PivotTable +description: Create and modify a PivotTable author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/89-preview-apis/pivot-table-filters-and-summaries.yaml b/samples/excel/89-preview-apis/pivot-table-filters-and-summaries.yaml index 5926ff6fe..290022b45 100644 --- a/samples/excel/89-preview-apis/pivot-table-filters-and-summaries.yaml +++ b/samples/excel/89-preview-apis/pivot-table-filters-and-summaries.yaml @@ -1,6 +1,6 @@ id: excel-pivottable-filters-and-summaries name: Pivot table filters and summaries -description: Filter pivot table data and show different summarizations +description: Filter PivotTable data and show different summarizations author: OfficeDev host: EXCEL api_set: From 0fe08dcb57ded437dff3efe0ddb03ef62ecf90bc Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 16 Aug 2018 12:02:25 -0700 Subject: [PATCH 063/660] Event toggling snippet (#186) * Event toggling snippet * Changing to always create worksheet and have better event result * More comments * Fixing typo --- .../events-disable-events.yaml | 177 ++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 samples/excel/89-preview-apis/events-disable-events.yaml diff --git a/samples/excel/89-preview-apis/events-disable-events.yaml b/samples/excel/89-preview-apis/events-disable-events.yaml new file mode 100644 index 000000000..56f912c92 --- /dev/null +++ b/samples/excel/89-preview-apis/events-disable-events.yaml @@ -0,0 +1,177 @@ +id: excel-events-disable-events +name: Disable Events +description: Toggle event firing on and off for performance. +host: EXCEL +api_set: + ExcelAPI: 1.8 +script: + content: |+ + $("#toggleEvents").click(() => tryCatch(toggleEvents)); + $("#setup").click(() => tryCatch(setup)); + $("#refreshData").click(() => tryCatch(addOrRefreshData)); + $("#registerSumChangedHandlers").click(() => tryCatch(registerSumChangedHandlers)); + + async function toggleEvents() { + await Excel.run(async (context) => { + context.runtime.load("enableEvents"); + await context.sync(); + + // check if events are enabled and toggle accordingly + const eventBoolean = !context.runtime.enableEvents + context.runtime.enableEvents = eventBoolean; + if (eventBoolean) { + console.log("Events are currently on."); + } else { + console.log("Events are currently off."); + } + await context.sync(); + }); + } + + async function registerSumChangedHandlers() { + 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 (var 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(); + }); + } + + async function onSumChanged(eventArgs: Excel.BindingDataChangedEventArgs) { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const cell = sheet.getRange("P21"); + + // get the grand total of the whole sum range + // note that we are having this program perform the sum instead of giving the Excel cell a function, + // this gives us updating control + let x = context.workbook.functions.sum(sheet.getRange("B20:P20")); + x.load("value"); + await context.sync(); + + cell.values = [[x.value]]; + await context.sync(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + const sheet = context.workbook.worksheets.getItem("Sample"); + let infoRange = sheet.getRange("A20:A21"); + infoRange.values = [["Sums"], ["Grand Total"]] + infoRange.format.autofitColumns(); + infoRange.format.font.bold = true; + addOrRefreshData(); + addSumRow(); + sheet.activate(); + await context.sync(); + }); + } + + async function addOrRefreshData() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const dataRange = sheet.getRange("B1:P19"); + dataRange.load(["rowCount", "columnCount"]); + 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++) { + dataRange.getCell(i, j).values = [[Math.round(Math.random() * 100)]]; + } + } + + await context.sync(); + }); + } + + async function addSumRow() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const dataRange = sheet.getRange("B1:P19"); + dataRange.load("rowCount"); + + // add a sum of each column to the top + const sumRange = sheet.getRange("B20:P20"); + sumRange.load(["columnCount"]); + await context.sync(); + + for (var 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); + startAddressCell.load("address"); + endAddressCell.load("address"); + await context.sync(); + formulaCell.formulas = [["=SUM(" + startAddressCell.address + ":" + endAddressCell.address + ")"]]; + formulaCell.format.font.bold = true; + } + + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |- +
+

This sample shows how to turn events on and off.

+
+
+

Setup

+

+ +

+
+

Try it out

+

+

+ You can also manually edit the cells to generate events. +

+ language: html +style: + content: | + /* Your style goes here */ + 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 + + @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 \ No newline at end of file From 14cd78791ddc123c9b536be8b02615419faf8a85 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 17 Aug 2018 12:33:21 -0700 Subject: [PATCH 064/660] Copy and paste sample (#187) * Copy and paste sample * Fixing casing * Updating skipBlanks to reflect true behavior * Explicitly documenting boolean arguments --- .../excel/89-preview-apis/range-copyfrom.yaml | 200 ++++++++++++++++++ 1 file changed, 200 insertions(+) create mode 100644 samples/excel/89-preview-apis/range-copyfrom.yaml diff --git a/samples/excel/89-preview-apis/range-copyfrom.yaml b/samples/excel/89-preview-apis/range-copyfrom.yaml new file mode 100644 index 000000000..2a64126b6 --- /dev/null +++ b/samples/excel/89-preview-apis/range-copyfrom.yaml @@ -0,0 +1,200 @@ +id: excel-range=copyfrom +name: Copy and paste ranges +description: Use the Range.copyFrom method to copy data and formatting. +host: EXCEL +api_set: + ExcelAPI: 1.8 +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)); + $("#transpose").click(() => tryCatch(transpose)); + $("#skipBlanks").click(() => tryCatch(skipBlanks)); + + async function copyAll() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + sheet.getRange("F1").values = [["Copied Range"]]; + sheet.getRange("F1").format.autofitColumns(); + + // copy a range starting at a single cell destination + sheet.getRange("G1").copyFrom("A1:E1"); + await context.sync(); + }); + } + + async function copyFormula() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + sheet.getRange("F2").values = [["Copied Formula"]]; + sheet.getRange("F2").format.autofitColumns(); + + // 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(); + }); + } + + async function copyFormulaResult() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + sheet.getRange("F3").values = [["Copied Formula Result"]]; + sheet.getRange("F3").format.autofitColumns(); + + // copy the resulting value of a formula + sheet.getRange("G3").copyFrom("E1", Excel.RangeCopyType.values); + await context.sync(); + }); + } + + async function copySingleAcrossRange() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + sheet.getRange("F4").values = [["Single Source"]]; + sheet.getRange("F4").format.autofitColumns(); + + // copy a single cell across an entire range + sheet.getRange("G4:K4").copyFrom("A1", Excel.RangeCopyType.values); + await context.sync(); + }); + } + + async function copyOnlyFormat() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + sheet.getRange("F5").values = [["Copied Formatting"]]; + sheet.getRange("F5").format.autofitColumns(); + + // copy only the formatting of the cells + sheet.getRange("G5").copyFrom("A1:E1", Excel.RangeCopyType.formats); + await context.sync(); + }); + } + + async function skipBlanks() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + sheet.getRange("F6").values = [["Copied Without Blanks"]]; + sheet.getRange("F6").format.autofitColumns(); + + // fill the destination range so we can see the blank being skipped + sheet.getRange("G6:K6").values = [["Old Data", "Old Data", "Old Data", "Old Data", "Old Data"]] + + // copy a range, omitting the blank cells so existing data is not overwritten in those cells + sheet.getRange("G6").copyFrom("A1:E1", + Excel.RangeCopyType.all, + true, // skipBlanks + false); // transpose + await context.sync(); + }); + } + + async function transpose() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + sheet.getRange("F7").values = [["Transpose"]]; + sheet.getRange("F7").format.autofitColumns(); + + // transpose a horizontal range of data into a vertical range + sheet.getRange("G7").copyFrom("A1:E1", + Excel.RangeCopyType.all, + false, // skipBlanks + true); // transpose + await context.sync(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + + const sheet = context.workbook.worksheets.getItem("Sample"); + sheet.getRange("A1:D1").values = [["3", "5", "7", ""]]; + sheet.getRange("A1:D1").format.font.italic = true; + sheet.getRange("A1:D1").format.font.color = "DarkMagenta"; + sheet.getRange("E1").formulas = [["=SUM(A1:D1)"]]; + sheet.getRange("E1").format.font.bold = true; + sheet.getRange("E1").format.fill.color = "LightGreen"; + + sheet.activate(); + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |- +
+

This sample shows the copy and paste functionality.

+
+
+

Setup

+ +
+
+

Try it out

+ +

+ +

+ +

+ +

+ +

+ +

+ +

+ language: html +style: + content: | + /* Your style goes here */ + 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 + + @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 \ No newline at end of file From bf6a651166726256fae383b20fba523069688ed5 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 17 Aug 2018 16:39:28 -0700 Subject: [PATCH 065/660] Switch to const where appropriate (#188) --- .../89-preview-apis/chart-formatting.yaml | 41 +++++++++---------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/samples/excel/89-preview-apis/chart-formatting.yaml b/samples/excel/89-preview-apis/chart-formatting.yaml index 3a86d126c..062ee5e8f 100644 --- a/samples/excel/89-preview-apis/chart-formatting.yaml +++ b/samples/excel/89-preview-apis/chart-formatting.yaml @@ -15,8 +15,8 @@ script: async function createChart() { await Excel.run(async (context) => { - var worksheet = context.workbook.worksheets.getActiveWorksheet(); - var chart = worksheet.charts.add(Excel.ChartType.lineMarkers, worksheet.getRange("B6:G15"), Excel.ChartSeriesBy.rows); + const worksheet = context.workbook.worksheets.getActiveWorksheet(); + const chart = worksheet.charts.add(Excel.ChartType.lineMarkers, worksheet.getRange("B6:G15"), Excel.ChartSeriesBy.rows); chart.axes.categoryAxis.setCategoryNames(worksheet.getRange("C5:G5")); chart.name = "SlopeChart"; @@ -35,8 +35,8 @@ script: async function formatChart() { await Excel.run(async (context) => { - var worksheet = context.workbook.worksheets.getActiveWorksheet(); - var chart = worksheet.charts.getItem("SlopeChart"); + const worksheet = context.workbook.worksheets.getActiveWorksheet(); + const chart = worksheet.charts.getItem("SlopeChart"); chart.axes.valueAxis.tickLabelPosition = "None"; chart.plotArea.width = 800; @@ -60,13 +60,13 @@ script: async function dataLabels() { await Excel.run(async (context) => { - var worksheet = context.workbook.worksheets.getActiveWorksheet(); - var chart = worksheet.charts.getItem("SlopeChart"); + const worksheet = context.workbook.worksheets.getActiveWorksheet(); + const chart = worksheet.charts.getItem("SlopeChart"); chart.series.load("count"); await context.sync(); var pointsLoaded = -1; for (var i = 0; i < chart.series.count; i++){ - var series = chart.series.getItemAt(i); + const series = chart.series.getItemAt(i); series.hasDataLabels = true; series.markerSize = 20; @@ -99,10 +99,10 @@ script: async function changeColor() { await Excel.run(async (context) => { - var worksheet = context.workbook.worksheets.getActiveWorksheet(); - var chart = worksheet.charts.getItem("SlopeChart"); - var increase = worksheet.getRange("I6:I15"); - var increaseRate = worksheet.getRange("J6:J15"); + const worksheet = context.workbook.worksheets.getActiveWorksheet(); + const chart = worksheet.charts.getItem("SlopeChart"); + const increase = worksheet.getRange("I6:I15"); + const increaseRate = worksheet.getRange("J6:J15"); increase.load("values"); increaseRate.load("values"); chart.series.load("count"); @@ -131,10 +131,10 @@ script: chart.series.getItemAt(i).dataLabels.format.font.color = "#636363"; } - var maxSeries = chart.series.getItemAt(maxIndex); + const maxSeries = chart.series.getItemAt(maxIndex); maxSeries.format.line.color = "#4472C4"; maxSeries.dataLabels.format.font.color = "#D9D9D9"; - var fastSeries = chart.series.getItemAt(fastIndex); + const fastSeries = chart.series.getItemAt(fastIndex); fastSeries.format.line.color = "#75AB3B"; fastSeries.dataLabels.format.font.color = "#D9D9D9"; @@ -149,8 +149,7 @@ script: async function clearChart() { await Excel.run(async (context) => { - var worksheet = context.workbook.worksheets.getActiveWorksheet(); - var charts = worksheet.charts; + const charts = context.workbook.worksheets.getActiveWorksheet().charts; charts.load("count"); await context.sync(); @@ -166,7 +165,7 @@ script: await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); const sheet = context.workbook.worksheets.getItem("Sample"); sheet.getRange("B5:G5").values = [["Country", "1980", "1990", "2000", "2010", "2017"]]; - let range = sheet.getRange("B6:G15"); + const range = sheet.getRange("B6:G15"); range.values = [ ["Luxembourg", 17739, 33204, 49183, 106185, 107708], ["Switzerland", 18870, 38666, 38007, 74908, 80837], @@ -181,10 +180,10 @@ script: ]; range.format.autofitColumns(); - let range3 = sheet.getRange("I5:J5"); + const range3 = sheet.getRange("I5:J5"); range3.values = [["Increase", "% Increase"]]; - let increaseRange = sheet.getRange("I6:I15"); + const increaseRange = sheet.getRange("I6:I15"); let data = []; for (let i = 6; i < 16; i++) { let item = []; @@ -194,7 +193,7 @@ script: increaseRange.formulas = data; increaseRange.format.autofitColumns(); - let increasePerRange = sheet.getRange("J6:J15"); + const increasePerRange = sheet.getRange("J6:J15"); let data2 = []; for (let i = 6; i < 16; i++) { let item = []; @@ -205,7 +204,7 @@ script: increasePerRange.format.autofitColumns(); let formatnumber = []; - let formatnumberitem = ["###,0"]; + const formatnumberitem = ["###,0"]; for (let i = 6; i < 16; i++) { formatnumber.push(formatnumberitem); } @@ -217,7 +216,7 @@ script: sheet.getRange("I6:I15").numberFormat = formatnumber; let formatnumber2 = []; - let formatnumberitem2 = ["#%"]; + const formatnumberitem2 = ["#%"]; for (let i = 6; i < 16; i++) { formatnumber2.push(formatnumberitem2); } From ff3fd8fab0df6ccb8dc1d08923270f927e2d7148 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 23 Aug 2018 11:54:51 -0700 Subject: [PATCH 066/660] Adding 1.8 Samples to ScriptLab playlist (#189) * Adding 18 Samples to ScriptLab playlist * Making PivotTable references consistent --- playlists/excel.yaml | 33 +++++++++++++++++-- ...yaml => pivottable-create-and-modify.yaml} | 2 +- ... => pivottable-filters-and-summaries.yaml} | 0 3 files changed, 31 insertions(+), 4 deletions(-) rename samples/excel/89-preview-apis/{pivot-table-create-and-modify.yaml => pivottable-create-and-modify.yaml} (99%) rename samples/excel/89-preview-apis/{pivot-table-filters-and-summaries.yaml => pivottable-filters-and-summaries.yaml} (100%) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 638ccb87c..0d5ce4a3b 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -522,12 +522,12 @@ api_set: ExcelAPI: 1.7 - id: excel-pivottable-refresh-pivot-table - name: Refresh pivot table + name: Refresh PivotTable fileName: refresh-pivot-table.yaml - description: Refresh pivot table + description: Refresh PivotTable rawUrl: >- https://raw.githubusercontent.com////samples/excel/55-pivot-table/refresh-pivot-table.yaml - group: Pivot Table + group: PivotTable api_set: ExcelApi: 1.3 - id: excel-events-data-changed @@ -660,6 +660,15 @@ group: Common Patterns api_set: ExcelApi: 1.4 +- id: excel-chart-formatting + name: Chart - Formatting + fileName: chart-formatting.yaml + description: Format labels and lines of a slope chart. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/chart-formatting.yaml + group: Preview APIs + api_set: + ExcelAPI: 1.8 - id: excel-chart-axis-formatting name: Chart - Axis formatting fileName: chart-axis-formatting.yaml @@ -728,6 +737,24 @@ group: Preview APIs api_set: ExcelAPI: 1.8 +- id: excel-pivottable-create-and-modify + name: Create and modify PivotTable + fileName: pivottable-create-and-modify.yaml + description: Create and modify a PivotTable + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/pivottable-create-and-modify.yaml + group: Preview APIs + api_set: + ExcelAPI: 1.8 +- id: excel-pivottable-filters-and-summaries + name: PivotTable filters and summaries + fileName: pivottable-filters-and-summaries.yaml + description: Filter PivotTable data and show different summarizations + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/pivottable-filters-and-summaries.yaml + group: Preview APIs + api_set: + ExcelAPI: 1.8 - id: excel-range-areas name: Using Areas (Discontiguous Ranges) fileName: range-areas.yaml diff --git a/samples/excel/89-preview-apis/pivot-table-create-and-modify.yaml b/samples/excel/89-preview-apis/pivottable-create-and-modify.yaml similarity index 99% rename from samples/excel/89-preview-apis/pivot-table-create-and-modify.yaml rename to samples/excel/89-preview-apis/pivottable-create-and-modify.yaml index 13aab2de0..f253f49cc 100644 --- a/samples/excel/89-preview-apis/pivot-table-create-and-modify.yaml +++ b/samples/excel/89-preview-apis/pivottable-create-and-modify.yaml @@ -1,4 +1,4 @@ -id: excel-pivottable-pivot-table-create-and-modify +id: excel-pivottable-create-and-modify name: Create and modify PivotTable description: Create and modify a PivotTable author: OfficeDev diff --git a/samples/excel/89-preview-apis/pivot-table-filters-and-summaries.yaml b/samples/excel/89-preview-apis/pivottable-filters-and-summaries.yaml similarity index 100% rename from samples/excel/89-preview-apis/pivot-table-filters-and-summaries.yaml rename to samples/excel/89-preview-apis/pivottable-filters-and-summaries.yaml From 709c1283913f44a4275ab418eaa57135e795563c Mon Sep 17 00:00:00 2001 From: Ricky Kirkham Date: Thu, 23 Aug 2018 15:53:38 -0700 Subject: [PATCH 067/660] update Excel areas sample to conform to new API shape --- samples/excel/89-preview-apis/range-areas.yaml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/samples/excel/89-preview-apis/range-areas.yaml b/samples/excel/89-preview-apis/range-areas.yaml index 45f47a409..4b6b26073 100644 --- a/samples/excel/89-preview-apis/range-areas.yaml +++ b/samples/excel/89-preview-apis/range-areas.yaml @@ -1,9 +1,9 @@ id: excel-range-areas -name: Using Areas (Discontiguous Ranges) -description: 'Work with Areas, which are sets of ranges that need not be contiguous with each other.' +name: Using RangeAreas (Discontiguous Ranges) +description: 'Work with RAngeAreas, which are sets of ranges that need not be contiguous with each other.' host: EXCEL api_set: - ExcelApi: 1.8 + ExcelApi: 1.9 script: content: | $("#create-sales-range").click(() => tryCatch(createSalesRange)); @@ -13,11 +13,11 @@ script: await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); - // To create a Range with multiple child areas, pass a + // To create a RangeAreas object with multiple child areas, pass a // comma-delimited string of range addresses to - // Worksheet.getRange. - const range = sheet.getRange("F3:F5, H3:H5"); - range.format.fill.color = "pink"; + // Worksheet.getRanges. + const rangeAreas = sheet.getRanges("F3:F5, H3:H5"); + rangeAreas.format.fill.color = "pink"; await context.sync(); }); @@ -59,7 +59,7 @@ script: template: content: |
-

This sample shows how to use areas, which are sets of Ranges that are not necessarily contiguous with each other.

+

This sample shows how to apply actions to sets of Ranges that are not necessarily contiguous with each other.

From 0c3eb0f40d4ac532527a7f53e83704d1bcaf090b Mon Sep 17 00:00:00 2001 From: Ricky Kirkham Date: Thu, 23 Aug 2018 15:56:15 -0700 Subject: [PATCH 068/660] typo --- samples/excel/89-preview-apis/range-areas.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/excel/89-preview-apis/range-areas.yaml b/samples/excel/89-preview-apis/range-areas.yaml index 4b6b26073..406cb606d 100644 --- a/samples/excel/89-preview-apis/range-areas.yaml +++ b/samples/excel/89-preview-apis/range-areas.yaml @@ -1,6 +1,6 @@ id: excel-range-areas name: Using RangeAreas (Discontiguous Ranges) -description: 'Work with RAngeAreas, which are sets of ranges that need not be contiguous with each other.' +description: 'Work with RangeAreas, which are sets of ranges that need not be contiguous with each other.' host: EXCEL api_set: ExcelApi: 1.9 From 33ade13812ecbf902c2efe7b7b339e3248a35dd9 Mon Sep 17 00:00:00 2001 From: Ricky Kirkham Date: Thu, 23 Aug 2018 16:00:04 -0700 Subject: [PATCH 069/660] update Excel areas sample for new API shape --- playlists/excel.yaml | 56 ++++++++++++------- .../89-preview-apis/chart-formatting.yaml | 2 +- .../events-disable-events.yaml | 2 +- .../excel/89-preview-apis/range-copyfrom.yaml | 4 +- snippet-extractor-output/snippets.yaml | 8 +-- view/excel.json | 5 ++ 6 files changed, 50 insertions(+), 27 deletions(-) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 0d5ce4a3b..083ae2631 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -522,12 +522,12 @@ api_set: ExcelAPI: 1.7 - id: excel-pivottable-refresh-pivot-table - name: Refresh PivotTable + name: Refresh pivot table fileName: refresh-pivot-table.yaml - description: Refresh PivotTable + description: Refresh pivot table rawUrl: >- https://raw.githubusercontent.com////samples/excel/55-pivot-table/refresh-pivot-table.yaml - group: PivotTable + group: Pivot Table api_set: ExcelApi: 1.3 - id: excel-events-data-changed @@ -660,15 +660,6 @@ group: Common Patterns api_set: ExcelApi: 1.4 -- id: excel-chart-formatting - name: Chart - Formatting - fileName: chart-formatting.yaml - description: Format labels and lines of a slope chart. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/chart-formatting.yaml - group: Preview APIs - api_set: - ExcelAPI: 1.8 - id: excel-chart-axis-formatting name: Chart - Axis formatting fileName: chart-axis-formatting.yaml @@ -678,6 +669,15 @@ group: Preview APIs api_set: ExcelAPI: 1.8 +- id: excel-chart-formatting + name: Chart - Formatting + fileName: chart-formatting.yaml + description: Format labels and lines of a slope chart. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/chart-formatting.yaml + group: Preview APIs + api_set: + ExcelAPI: 1.8 - id: excel-data-validation name: Data Validation fileName: data-validation.yaml @@ -710,6 +710,15 @@ group: Preview APIs api_set: ExcelApi: 1.8 +- id: excel-events-disable-events + name: Disable Events + fileName: events-disable-events.yaml + description: Toggle event firing on and off for performance. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/events-disable-events.yaml + group: Preview APIs + api_set: + ExcelAPI: 1.8 - id: excel-events-worksheet-calculated name: Events - Worksheet onCalculated fileName: events-worksheet-calculated.yaml @@ -745,27 +754,36 @@ https://raw.githubusercontent.com////samples/excel/89-preview-apis/pivottable-create-and-modify.yaml group: Preview APIs api_set: - ExcelAPI: 1.8 + ExcelApi: 1.8 - id: excel-pivottable-filters-and-summaries - name: PivotTable filters and summaries + name: Pivot table filters and summaries fileName: pivottable-filters-and-summaries.yaml description: Filter PivotTable data and show different summarizations rawUrl: >- https://raw.githubusercontent.com////samples/excel/89-preview-apis/pivottable-filters-and-summaries.yaml group: Preview APIs api_set: - ExcelAPI: 1.8 + ExcelApi: 1.8 - id: excel-range-areas - name: Using Areas (Discontiguous Ranges) + name: Using RangeAreas (Discontiguous Ranges) fileName: range-areas.yaml description: >- - Work with Areas, which are sets of ranges that need not be contiguous with - each other. + Work with RangeAreas, which are sets of ranges that need not be contiguous + with each other. rawUrl: >- https://raw.githubusercontent.com////samples/excel/89-preview-apis/range-areas.yaml group: Preview APIs api_set: - ExcelApi: 1.8 + ExcelApi: 1.9 +- id: excel-range-copyfrom + name: Copy and paste ranges + fileName: range-copyfrom.yaml + description: Use the Range.copyFrom method to copy data and formatting. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/range-copyfrom.yaml + group: Preview APIs + api_set: + ExcelAPI: 1.8 - id: excel-just-for-fun-gradient name: Gradient fileName: gradient.yaml diff --git a/samples/excel/89-preview-apis/chart-formatting.yaml b/samples/excel/89-preview-apis/chart-formatting.yaml index 062ee5e8f..69d44bd57 100644 --- a/samples/excel/89-preview-apis/chart-formatting.yaml +++ b/samples/excel/89-preview-apis/chart-formatting.yaml @@ -5,7 +5,7 @@ host: EXCEL api_set: ExcelAPI: 1.8 script: - content: |+ + content: | $("#addSampleData").click(() => tryCatch(addSampleData)); $("#create-chart").click(() => tryCatch(createChart)); $("#format-chart").click(() => tryCatch(formatChart)); diff --git a/samples/excel/89-preview-apis/events-disable-events.yaml b/samples/excel/89-preview-apis/events-disable-events.yaml index 56f912c92..61c9bb9de 100644 --- a/samples/excel/89-preview-apis/events-disable-events.yaml +++ b/samples/excel/89-preview-apis/events-disable-events.yaml @@ -5,7 +5,7 @@ host: EXCEL api_set: ExcelAPI: 1.8 script: - content: |+ + content: | $("#toggleEvents").click(() => tryCatch(toggleEvents)); $("#setup").click(() => tryCatch(setup)); $("#refreshData").click(() => tryCatch(addOrRefreshData)); diff --git a/samples/excel/89-preview-apis/range-copyfrom.yaml b/samples/excel/89-preview-apis/range-copyfrom.yaml index 2a64126b6..dc65982e9 100644 --- a/samples/excel/89-preview-apis/range-copyfrom.yaml +++ b/samples/excel/89-preview-apis/range-copyfrom.yaml @@ -1,11 +1,11 @@ -id: excel-range=copyfrom +id: excel-range-copyfrom name: Copy and paste ranges description: Use the Range.copyFrom method to copy data and formatting. host: EXCEL api_set: ExcelAPI: 1.8 script: - content: |+ + content: | $("#setup").click(() => tryCatch(setup)); $("#copyAll").click(() => tryCatch(copyAll)); $("#copyFormula").click(() => tryCatch(copyFormula)); diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index d134d08a9..eb7c039b8 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -2051,11 +2051,11 @@ Excel.Worksheet.getRange: await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); - // To create a Range with multiple child areas, pass a + // To create a RangeAreas object with multiple child areas, pass a // comma-delimited string of range addresses to - // Worksheet.getRange. - const range = sheet.getRange("F3:F5, H3:H5"); - range.format.fill.color = "pink"; + // Worksheet.getRanges. + const rangeAreas = sheet.getRanges("F3:F5, H3:H5"); + rangeAreas.format.fill.color = "pink"; await context.sync(); }); diff --git a/view/excel.json b/view/excel.json index 552077ca0..2319b8df2 100644 --- a/view/excel.json +++ b/view/excel.json @@ -74,13 +74,18 @@ "excel-custom-xml-parts-test-xml-for-unique-namespace": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-custom-xml-parts/test-xml-for-unique-namespace.yaml", "excel-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/88-common-patterns/multiple-property-set.yaml", "excel-chart-axis-formatting": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-axis-formatting.yaml", + "excel-chart-formatting": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-formatting.yaml", "excel-data-validation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/data-validation.yaml", "excel-events-chart-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-chart-activated.yaml", "excel-events-chartcollection-added-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-chartcollection-added-activated.yaml", + "excel-events-disable-events": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-disable-events.yaml", "excel-events-worksheet-calculated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-worksheet-calculated.yaml", "excel-events-worksheetcollection-calculated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-worksheetcollection-calculated.yaml", "excel-gridlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-gridlines.yaml", + "excel-pivottable-create-and-modify": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/pivottable-create-and-modify.yaml", + "excel-pivottable-filters-and-summaries": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/pivottable-filters-and-summaries.yaml", "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/range-areas.yaml", + "excel-range-copyfrom": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/range-copyfrom.yaml", "excel-just-for-fun-gradient": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-just-for-fun/gradient.yaml", "excel-just-for-fun-patterns": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-just-for-fun/patterns.yaml", "excel-just-for-fun-path-finder-game": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-just-for-fun/path-finder-game.yaml", From 734c786964d5e064fec41fa69443f547ea77e364 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 24 Aug 2018 09:54:31 -0700 Subject: [PATCH 070/660] Script lab linking (#190) * Adding 18 Samples to ScriptLab playlist * Making PivotTable references consistent * Running npm start * Rerunning npm start --- playlists/excel.yaml | 4 ++-- .../refresh-pivot-table.yaml | 4 ++-- .../89-preview-apis/pivottable-filters-and-summaries.yaml | 2 +- view/excel.json | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) rename samples/excel/{55-pivot-table => 55-pivottable}/refresh-pivot-table.yaml (98%) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 083ae2631..12fa1973e 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -526,8 +526,8 @@ fileName: refresh-pivot-table.yaml description: Refresh pivot table rawUrl: >- - https://raw.githubusercontent.com////samples/excel/55-pivot-table/refresh-pivot-table.yaml - group: Pivot Table + https://raw.githubusercontent.com////samples/excel/55-pivottable/refresh-pivot-table.yaml + group: Pivottable api_set: ExcelApi: 1.3 - id: excel-events-data-changed diff --git a/samples/excel/55-pivot-table/refresh-pivot-table.yaml b/samples/excel/55-pivottable/refresh-pivot-table.yaml similarity index 98% rename from samples/excel/55-pivot-table/refresh-pivot-table.yaml rename to samples/excel/55-pivottable/refresh-pivot-table.yaml index 81144a811..7ce30be47 100644 --- a/samples/excel/55-pivot-table/refresh-pivot-table.yaml +++ b/samples/excel/55-pivottable/refresh-pivot-table.yaml @@ -1,6 +1,6 @@ id: excel-pivottable-refresh-pivot-table -name: Refresh pivot table -description: Refresh pivot table +name: Refresh PivotTable +description: Refresh PivotTable author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/89-preview-apis/pivottable-filters-and-summaries.yaml b/samples/excel/89-preview-apis/pivottable-filters-and-summaries.yaml index 290022b45..0c8e70467 100644 --- a/samples/excel/89-preview-apis/pivottable-filters-and-summaries.yaml +++ b/samples/excel/89-preview-apis/pivottable-filters-and-summaries.yaml @@ -1,5 +1,5 @@ id: excel-pivottable-filters-and-summaries -name: Pivot table filters and summaries +name: PivotTable filters and summaries description: Filter PivotTable data and show different summarizations author: OfficeDev host: EXCEL diff --git a/view/excel.json b/view/excel.json index 2319b8df2..0172e05dd 100644 --- a/view/excel.json +++ b/view/excel.json @@ -58,7 +58,7 @@ "excel-chart-series-plotorder": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-series-plotorder.yaml", "excel-chart-title-substring": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-title-substring.yaml", "excel-chart-trendlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-trendlines.yaml", - "excel-pivottable-refresh-pivot-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/55-pivot-table/refresh-pivot-table.yaml", + "excel-pivottable-refresh-pivot-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/55-pivottable/refresh-pivot-table.yaml", "excel-events-data-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/data-changed.yaml", "excel-events-selection-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/selection-changed.yaml", "excel-events-setting-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/setting-changed.yaml", From 8c3b68bca692555c8cf6c96e2615f1fb5c07ca2a Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 24 Aug 2018 12:54:05 -0700 Subject: [PATCH 071/660] Unmap 1.9 snippet and fix pivot text (#194) --- playlists/excel.yaml | 6 +++--- snippet-extractor-metadata/excel.xlsx | Bin 15504 -> 15451 bytes snippet-extractor-output/snippets.yaml | 13 ------------- 3 files changed, 3 insertions(+), 16 deletions(-) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 12fa1973e..b86bef21f 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -522,9 +522,9 @@ api_set: ExcelAPI: 1.7 - id: excel-pivottable-refresh-pivot-table - name: Refresh pivot table + name: Refresh PivotTable fileName: refresh-pivot-table.yaml - description: Refresh pivot table + description: Refresh PivotTable rawUrl: >- https://raw.githubusercontent.com////samples/excel/55-pivottable/refresh-pivot-table.yaml group: Pivottable @@ -756,7 +756,7 @@ api_set: ExcelApi: 1.8 - id: excel-pivottable-filters-and-summaries - name: Pivot table filters and summaries + name: PivotTable filters and summaries fileName: pivottable-filters-and-summaries.yaml description: Filter PivotTable data and show different summarizations rawUrl: >- diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 0985e98dc31bec1090f39f6c82a7730c1566ccc1..c60aee88a64c2e5793575964b2d70f22eb12746f 100644 GIT binary patch delta 7235 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index eb7c039b8..9265d3a6c 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -2046,19 +2046,6 @@ Excel.TableChangedEventArgs.tableId: console.log("Worksheet Id : " + worksheet.name); }); } -Excel.Worksheet.getRange: - - |- - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - - // To create a RangeAreas object with multiple child areas, pass a - // comma-delimited string of range addresses to - // Worksheet.getRanges. - const rangeAreas = sheet.getRanges("F3:F5, H3:H5"); - rangeAreas.format.fill.color = "pink"; - - await context.sync(); - }); Excel.Workbook.getActiveCell: - |- await Excel.run(async (context) => { From eaf1ac58435f2c698f14896fffcece4b1eaa67c3 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Tue, 28 Aug 2018 09:59:28 -0700 Subject: [PATCH 072/660] Correcting PivotTable capitalization (#195) --- config/build.ts | 1 + playlists/excel.yaml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/config/build.ts b/config/build.ts index 9b5dc353c..f81f68a3a 100644 --- a/config/build.ts +++ b/config/build.ts @@ -137,6 +137,7 @@ async function processSnippets(processedSnippets: Dictionary- https://raw.githubusercontent.com////samples/excel/55-pivottable/refresh-pivot-table.yaml - group: Pivottable + group: PivotTable api_set: ExcelApi: 1.3 - id: excel-events-data-changed From bc130cdec0c3725728f2f105b524667750f534fe Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 30 Aug 2018 11:55:10 -0700 Subject: [PATCH 073/660] Adding a showAs PivotTable sample (#196) * Adding a showAs PivotTable sample * Removing references to other snippets --- playlists/excel.yaml | 13 +- .../pivottable-calculations.yaml | 215 ++++++++++++++++++ .../pivottable-create-and-modify.yaml | 14 +- .../pivottable-filters-and-summaries.yaml | 18 +- view/excel.json | 1 + 5 files changed, 251 insertions(+), 10 deletions(-) create mode 100644 samples/excel/89-preview-apis/pivottable-calculations.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index fff002e95..83a3937da 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -746,10 +746,19 @@ group: Preview APIs api_set: ExcelAPI: 1.8 +- id: excel-pivottable-calculations + name: PivotTable Calculations + fileName: pivottable-calculations.yaml + description: Change the calculations the PivotTable performs. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/pivottable-calculations.yaml + group: Preview APIs + api_set: + ExcelApi: 1.8 - id: excel-pivottable-create-and-modify name: Create and modify PivotTable fileName: pivottable-create-and-modify.yaml - description: Create and modify a PivotTable + description: Create and modify a PivotTable. rawUrl: >- https://raw.githubusercontent.com////samples/excel/89-preview-apis/pivottable-create-and-modify.yaml group: Preview APIs @@ -758,7 +767,7 @@ - id: excel-pivottable-filters-and-summaries name: PivotTable filters and summaries fileName: pivottable-filters-and-summaries.yaml - description: Filter PivotTable data and show different summarizations + description: Filter PivotTable data and show different summarizations. rawUrl: >- https://raw.githubusercontent.com////samples/excel/89-preview-apis/pivottable-filters-and-summaries.yaml group: Preview APIs diff --git a/samples/excel/89-preview-apis/pivottable-calculations.yaml b/samples/excel/89-preview-apis/pivottable-calculations.yaml new file mode 100644 index 000000000..cf3aaf9ba --- /dev/null +++ b/samples/excel/89-preview-apis/pivottable-calculations.yaml @@ -0,0 +1,215 @@ +id: excel-pivottable-calculations +name: PivotTable Calculations +description: Change the calculations the PivotTable performs. +author: OfficeDev +host: EXCEL +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)); + + async function showPercentages() { + 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(); + }); + } + + async function showDifferenceFrom() { + 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 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"); + farmShowAs.baseItem = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm").items.getItem("A Farms"); + farmDataHierarchy.showAs = farmShowAs; + + let wholesaleShowAs = wholesaleDataHierarchy.showAs; + wholesaleShowAs.calculation = Excel.ShowAsCalculation.differenceFrom; + wholesaleShowAs.baseField = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm"); + wholesaleShowAs.baseItem = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm").items.getItem("A Farms"); + wholesaleDataHierarchy.showAs = wholesaleShowAs; + await context.sync(); + }); + } + + async function showSums() { + 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 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; + + let wholesaleShowAs = wholesaleDataHierarchy.showAs; + wholesaleShowAs.calculation = Excel.ShowAsCalculation.none; + wholesaleDataHierarchy.showAs = wholesaleShowAs; + await context.sync(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + // create the worksheets + const dataSheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "Data"); + const pivotSheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "Pivot"); + + // 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(); + pivotSheet.activate(); + + // 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"); + 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")); + + await context.sync(); + }); + } + + async function deletePivot() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItem("Pivot").pivotTables.getItem("Farm Sales").delete(); + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |- +

+

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

+
+ +
+

Set up

+ +
+ +
+

Change calculations

+

+

+ +

+ +
+

Clean up

+ +
+ 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 + + @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 \ No newline at end of file diff --git a/samples/excel/89-preview-apis/pivottable-create-and-modify.yaml b/samples/excel/89-preview-apis/pivottable-create-and-modify.yaml index f253f49cc..a039bd4df 100644 --- a/samples/excel/89-preview-apis/pivottable-create-and-modify.yaml +++ b/samples/excel/89-preview-apis/pivottable-create-and-modify.yaml @@ -1,6 +1,6 @@ id: excel-pivottable-create-and-modify name: Create and modify PivotTable -description: Create and modify a PivotTable +description: Create and modify a PivotTable. author: OfficeDev host: EXCEL api_set: @@ -245,13 +245,21 @@ template:

Delete the PivotTable

language: html style: content: | - /* Your style goes here */ + 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 diff --git a/samples/excel/89-preview-apis/pivottable-filters-and-summaries.yaml b/samples/excel/89-preview-apis/pivottable-filters-and-summaries.yaml index 0c8e70467..9e72c4aab 100644 --- a/samples/excel/89-preview-apis/pivottable-filters-and-summaries.yaml +++ b/samples/excel/89-preview-apis/pivottable-filters-and-summaries.yaml @@ -1,6 +1,6 @@ id: excel-pivottable-filters-and-summaries name: PivotTable filters and summaries -description: Filter PivotTable data and show different summarizations +description: Filter PivotTable data and show different summarizations. author: OfficeDev host: EXCEL api_set: @@ -154,7 +154,7 @@ script: template: content: |-
-

This sample shows how to filter pivot tables and manipulate their data.

+

This sample shows how to filter PivotTables and manipulate their data.

@@ -188,7 +188,7 @@ template:

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

Data Manipulation

@@ -200,13 +200,21 @@ template:

Clean up

language: html style: content: | - /* Your style goes here */ + 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 diff --git a/view/excel.json b/view/excel.json index 0172e05dd..eaea7d36b 100644 --- a/view/excel.json +++ b/view/excel.json @@ -82,6 +82,7 @@ "excel-events-worksheet-calculated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-worksheet-calculated.yaml", "excel-events-worksheetcollection-calculated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-worksheetcollection-calculated.yaml", "excel-gridlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-gridlines.yaml", + "excel-pivottable-calculations": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/pivottable-calculations.yaml", "excel-pivottable-create-and-modify": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/pivottable-create-and-modify.yaml", "excel-pivottable-filters-and-summaries": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/pivottable-filters-and-summaries.yaml", "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/range-areas.yaml", From d7ea44d22ffc8764624c2efcfc3591c2faf582ff Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 30 Aug 2018 12:44:49 -0700 Subject: [PATCH 074/660] Update lodash version (#197) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4accfbdc8..052d25bc7 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "escape-string-regexp": "^1.0.5", "excel": "^0.1.7", "js-yaml": "3.7.0", - "lodash": "4.17.4", + "lodash": "4.17.5", "node-status": "1.0.0", "rimraf": "2.5.4", "rxjs": "5.2.0", From ff4e4365805e0174e365d699c4500092f0870fa8 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 31 Aug 2018 13:11:27 -0700 Subject: [PATCH 075/660] Merge to prod (#198) * Unmap 1.9 snippet and fix pivot text (#194) * Correcting PivotTable capitalization (#195) * Adding a showAs PivotTable sample (#196) * Adding a showAs PivotTable sample * Removing references to other snippets * Update lodash version (#197) --- config/build.ts | 1 + package.json | 2 +- playlists/excel.yaml | 21 +- .../pivottable-calculations.yaml | 215 ++++++++++++++++++ .../pivottable-create-and-modify.yaml | 14 +- .../pivottable-filters-and-summaries.yaml | 18 +- snippet-extractor-metadata/excel.xlsx | Bin 15504 -> 15451 bytes snippet-extractor-output/snippets.yaml | 13 -- view/excel.json | 1 + 9 files changed, 257 insertions(+), 28 deletions(-) create mode 100644 samples/excel/89-preview-apis/pivottable-calculations.yaml diff --git a/config/build.ts b/config/build.ts index 9b5dc353c..f81f68a3a 100644 --- a/config/build.ts +++ b/config/build.ts @@ -137,6 +137,7 @@ async function processSnippets(processedSnippets: Dictionary- https://raw.githubusercontent.com////samples/excel/55-pivottable/refresh-pivot-table.yaml - group: Pivottable + group: PivotTable api_set: ExcelApi: 1.3 - id: excel-events-data-changed @@ -746,19 +746,28 @@ group: Preview APIs api_set: ExcelAPI: 1.8 +- id: excel-pivottable-calculations + name: PivotTable Calculations + fileName: pivottable-calculations.yaml + description: Change the calculations the PivotTable performs. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/89-preview-apis/pivottable-calculations.yaml + group: Preview APIs + api_set: + ExcelApi: 1.8 - id: excel-pivottable-create-and-modify name: Create and modify PivotTable fileName: pivottable-create-and-modify.yaml - description: Create and modify a PivotTable + description: Create and modify a PivotTable. rawUrl: >- https://raw.githubusercontent.com////samples/excel/89-preview-apis/pivottable-create-and-modify.yaml group: Preview APIs api_set: ExcelApi: 1.8 - id: excel-pivottable-filters-and-summaries - name: Pivot table filters and summaries + name: PivotTable filters and summaries fileName: pivottable-filters-and-summaries.yaml - description: Filter PivotTable data and show different summarizations + description: Filter PivotTable data and show different summarizations. rawUrl: >- https://raw.githubusercontent.com////samples/excel/89-preview-apis/pivottable-filters-and-summaries.yaml group: Preview APIs diff --git a/samples/excel/89-preview-apis/pivottable-calculations.yaml b/samples/excel/89-preview-apis/pivottable-calculations.yaml new file mode 100644 index 000000000..cf3aaf9ba --- /dev/null +++ b/samples/excel/89-preview-apis/pivottable-calculations.yaml @@ -0,0 +1,215 @@ +id: excel-pivottable-calculations +name: PivotTable Calculations +description: Change the calculations the PivotTable performs. +author: OfficeDev +host: EXCEL +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)); + + async function showPercentages() { + 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(); + }); + } + + async function showDifferenceFrom() { + 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 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"); + farmShowAs.baseItem = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm").items.getItem("A Farms"); + farmDataHierarchy.showAs = farmShowAs; + + let wholesaleShowAs = wholesaleDataHierarchy.showAs; + wholesaleShowAs.calculation = Excel.ShowAsCalculation.differenceFrom; + wholesaleShowAs.baseField = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm"); + wholesaleShowAs.baseItem = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm").items.getItem("A Farms"); + wholesaleDataHierarchy.showAs = wholesaleShowAs; + await context.sync(); + }); + } + + async function showSums() { + 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 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; + + let wholesaleShowAs = wholesaleDataHierarchy.showAs; + wholesaleShowAs.calculation = Excel.ShowAsCalculation.none; + wholesaleDataHierarchy.showAs = wholesaleShowAs; + await context.sync(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + // create the worksheets + const dataSheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "Data"); + const pivotSheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "Pivot"); + + // 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(); + pivotSheet.activate(); + + // 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"); + 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")); + + await context.sync(); + }); + } + + async function deletePivot() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItem("Pivot").pivotTables.getItem("Farm Sales").delete(); + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |- +
+

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

+
+ +
+

Set up

+ +
+ +
+

Change calculations

+

+

+ +

+ +
+

Clean up

+ +
+ 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 + + @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 \ No newline at end of file diff --git a/samples/excel/89-preview-apis/pivottable-create-and-modify.yaml b/samples/excel/89-preview-apis/pivottable-create-and-modify.yaml index f253f49cc..a039bd4df 100644 --- a/samples/excel/89-preview-apis/pivottable-create-and-modify.yaml +++ b/samples/excel/89-preview-apis/pivottable-create-and-modify.yaml @@ -1,6 +1,6 @@ id: excel-pivottable-create-and-modify name: Create and modify PivotTable -description: Create and modify a PivotTable +description: Create and modify a PivotTable. author: OfficeDev host: EXCEL api_set: @@ -245,13 +245,21 @@ template:

Delete the PivotTable

language: html style: content: | - /* Your style goes here */ + 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 diff --git a/samples/excel/89-preview-apis/pivottable-filters-and-summaries.yaml b/samples/excel/89-preview-apis/pivottable-filters-and-summaries.yaml index 0c8e70467..9e72c4aab 100644 --- a/samples/excel/89-preview-apis/pivottable-filters-and-summaries.yaml +++ b/samples/excel/89-preview-apis/pivottable-filters-and-summaries.yaml @@ -1,6 +1,6 @@ id: excel-pivottable-filters-and-summaries name: PivotTable filters and summaries -description: Filter PivotTable data and show different summarizations +description: Filter PivotTable data and show different summarizations. author: OfficeDev host: EXCEL api_set: @@ -154,7 +154,7 @@ script: template: content: |-
-

This sample shows how to filter pivot tables and manipulate their data.

+

This sample shows how to filter PivotTables and manipulate their data.

@@ -188,7 +188,7 @@ template:

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

Data Manipulation

@@ -200,13 +200,21 @@ template:

Clean up

language: html style: content: | - /* Your style goes here */ + 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 diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 0985e98dc31bec1090f39f6c82a7730c1566ccc1..c60aee88a64c2e5793575964b2d70f22eb12746f 100644 GIT binary patch delta 7235 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index eb7c039b8..9265d3a6c 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -2046,19 +2046,6 @@ Excel.TableChangedEventArgs.tableId: console.log("Worksheet Id : " + worksheet.name); }); } -Excel.Worksheet.getRange: - - |- - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - - // To create a RangeAreas object with multiple child areas, pass a - // comma-delimited string of range addresses to - // Worksheet.getRanges. - const rangeAreas = sheet.getRanges("F3:F5, H3:H5"); - rangeAreas.format.fill.color = "pink"; - - await context.sync(); - }); Excel.Workbook.getActiveCell: - |- await Excel.run(async (context) => { diff --git a/view/excel.json b/view/excel.json index 0172e05dd..eaea7d36b 100644 --- a/view/excel.json +++ b/view/excel.json @@ -82,6 +82,7 @@ "excel-events-worksheet-calculated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-worksheet-calculated.yaml", "excel-events-worksheetcollection-calculated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-worksheetcollection-calculated.yaml", "excel-gridlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-gridlines.yaml", + "excel-pivottable-calculations": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/pivottable-calculations.yaml", "excel-pivottable-create-and-modify": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/pivottable-create-and-modify.yaml", "excel-pivottable-filters-and-summaries": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/pivottable-filters-and-summaries.yaml", "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/range-areas.yaml", From 7df460312abba3703dd0cd326531081299540983 Mon Sep 17 00:00:00 2001 From: Grant Timmerman Date: Fri, 31 Aug 2018 15:31:27 -0700 Subject: [PATCH 076/660] Fix broken link (#199) md URLs are relative unless specified --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1ea3258ec..434339eab 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ [![Build Status](https://travis-ci.com/OfficeDev/office-js-snippets.svg?token=paK2s5RGiCpVHK6bYoFs&branch=master)](https://travis-ci.org/OfficeDev/office-js-snippets) # Office JS Snippets -A collection of code snippets built with [Script Lab](github.com/OfficeDev/script-lab) +A collection of code snippets built with [Script Lab](//github.com/OfficeDev/script-lab) ![Script Lab import gallery screenshot](.github/images/addin-samples-gallery-screenshot.jpg) From 00576c67ea87e17aefbc326252f8673d712db7af Mon Sep 17 00:00:00 2001 From: Ricky Kirkham Date: Sat, 1 Sep 2018 15:22:15 -0700 Subject: [PATCH 077/660] expanded the RangeAreas snippet --- playlists/excel.yaml | 4 +- .../excel/89-preview-apis/range-areas.yaml | 126 +++++++++++++++--- 2 files changed, 106 insertions(+), 24 deletions(-) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 83a3937da..cf6155764 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -776,9 +776,7 @@ - id: excel-range-areas name: Using RangeAreas (Discontiguous Ranges) fileName: range-areas.yaml - description: >- - Work with RangeAreas, which are sets of ranges that need not be contiguous - with each other. + description: 'Work with RangeAreas, which are sets of ranges that need not be contiguous.' rawUrl: >- https://raw.githubusercontent.com////samples/excel/89-preview-apis/range-areas.yaml group: Preview APIs diff --git a/samples/excel/89-preview-apis/range-areas.yaml b/samples/excel/89-preview-apis/range-areas.yaml index 406cb606d..a10a99057 100644 --- a/samples/excel/89-preview-apis/range-areas.yaml +++ b/samples/excel/89-preview-apis/range-areas.yaml @@ -1,44 +1,110 @@ id: excel-range-areas name: Using RangeAreas (Discontiguous Ranges) -description: 'Work with RangeAreas, which are sets of ranges that need not be contiguous with each other.' +description: 'Work with RangeAreas, which are sets of ranges that need not be contiguous.' host: EXCEL api_set: ExcelApi: 1.9 script: content: | - $("#create-sales-range").click(() => tryCatch(createSalesRange)); - $("#color-all-formula-cells").click(() => tryCatch(colorAllFormulaCells)); + $("#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)); - async function colorAllFormulaCells() { + async function colorSelectedRanges() { await Excel.run(async (context) => { + + const selectedRanges = context.workbook.getSelectedRanges(); + selectedRanges.format.fill.color = "lightblue"; + + await context.sync(); + }) + } + + async function colorSpecifiedRanges() { + 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(); + }) + } + + async function colorAllFormulaRanges() { + await Excel.run(async (context) => { + + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const usedRange = sheet.getUsedRange(); + + // Find the ranges with formulas + const formulaRanges = usedRange.getSpecialCells("Formulas"); + formulaRanges.format.fill.color = "lightgreen"; + + await context.sync(); + }); + } + + async function colorAllLogicalAndTextRanges() { + 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"; - // To create a RangeAreas object with multiple child areas, pass a - // comma-delimited string of range addresses to - // Worksheet.getRanges. - const rangeAreas = sheet.getRanges("F3:F5, H3:H5"); - rangeAreas.format.fill.color = "pink"; + return context.sync(); + }); + } + + async function readPropertiesOfSpecifiedRanges() { + await Excel.run(async (context) => { + + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const specifiedRanges = sheet.getRanges("C3:C5, E3:E5"); + specifiedRanges.load("format/fill/color, isEntireColumn, address, areaCount"); + + await context.sync() + + // Non-boolean properties return null unless the + // property value on all member ranges is the same. + // (RangeAreas.address is an exception.) + console.log("Color is: " + specifiedRanges.format.fill.color); + + // Boolean properties return false unless the + // property is true on ALL member ranges. + console.log("Each range is an entireColumn: " + specifiedRanges.isEntireColumn); + + // Returns a comma-delimited string of all the + // addresses of the member ranges. + console.log("Range addresses: " + specifiedRanges.address); + console.log("Number of ranges: " + specifiedRanges.areaCount); await context.sync(); }); } - async function createSalesRange() { + async function reset() { await Excel.run(async (context) => { const sheet = await OfficeHelpers.ExcelUtilities .forceCreateSheet(context.workbook, "Sample"); const data = [ - ["Product", "Qty", "Category", "Unit Price", "Base Price", "Tax", "Total Charge"], - ["Almonds", 2, "Nuts", 7.50, "=C3 * E3", 0.1, "=SUM(F3,F3 * G3)"], - ["Coffee", 1, "Beverage", 34.50, "=C4 * E4", 0.0, "=SUM(F4,F4 * G4)"], - ["Chocolate", 5, "Candy", 9.56, "=C5 * E5", 0.2, "=SUM(F5,F5 * G5)"] + ["Product", "Qty", "Category", "Unit Price", "Base Price", "Tax", "Total Charge", "Manager's Discount", "Final Price"], + ["Almonds", 2, "Nuts", 7.50, "=C3 * E3", 0.1, "=SUM(F3,F3 * G3)", false, "=IF(I3 = TRUE, H3 * 0.9, H3)"], + ["Coffee", 1, "Beverage", 34.50, "=C4 * E4", 0.0, "=SUM(F4,F4 * G4)", true, "=IF(I4 = TRUE, H4 * 0.9, H4)"], + ["Chocolate", 5, "Candy", 9.56, "=C5 * E5", 0.2, "=SUM(F5,F5 * G5)", false, "=IF(I5 = TRUE, H5 * 0.9, H5)"] ]; - const range = sheet.getRange("B2:H5"); + const range = sheet.getRange("B2:J5"); range.values = data; range.format.autofitColumns(); - sheet.activate(); await context.sync(); @@ -59,18 +125,36 @@ script: template: content: |

-

This sample shows how to apply actions to sets of Ranges that are not necessarily contiguous with each other.

+

This sample shows how to apply actions simultaneously to multiple ranges that may not be contiguous.

Set up

-

Try it out

- +

Press the next button to color ranges that are specified by hard-coded addresses in the JavaScript.

+ +

Add a formula to any cells you want on the Sample worksheet and press the next button.

+ +

Add text to any cells and add a logical (Boolean) value to any cells on the Sample worksheet and press the next button.

+ +

In Excel, select range C3:C5 and format it's fill to a new color. Then set the fill for range E3:E5 to exactly the same color! Then press Read properties of Qty and Unit Price ranges. Watch the console.

+

Next, change the fill color of one of the two ranges and press the button again.

+
language: html style: From 565a7667e5c4096dd502b03b48a1efa7b542d794 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 5 Sep 2018 09:08:33 -0700 Subject: [PATCH 078/660] Add Application.createWorkbook as verification to file slicing (#201) * Adding createWorkbook to file snippet * Missing space --- .../82-document/get-file-in-slices-async.yaml | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/samples/excel/82-document/get-file-in-slices-async.yaml b/samples/excel/82-document/get-file-in-slices-async.yaml index 95cc29307..f3f2d4e2c 100644 --- a/samples/excel/82-document/get-file-in-slices-async.yaml +++ b/samples/excel/82-document/get-file-in-slices-async.yaml @@ -9,6 +9,7 @@ script: content: |- $("#setup").click(() => tryCatch(setup)); $("#get-file").click(() => tryCatch(getCurrentFile)); + $("#new-workbook-from-file").click(() => tryCatch(newWorkbookFromFile)); function getCurrentFile() { @@ -38,7 +39,7 @@ script: let base64string = base64js.fromByteArray(byteArray); $('#file-contents').val(base64string).show(); - OfficeHelpers.UI.notify("The base64-encoded string that represents the current document has been written to the text box below. To validate the string, use an online tool such as https://www.base64decode.org/ to decode the string, and then open the resulting file."); + OfficeHelpers.UI.notify("The base64-encoded string that represents the current document has been written to the text box below. To validate the string, load the preview API libraries and use the \"Create workbook from string\" button."); } } @@ -82,6 +83,14 @@ script: } } + // Note: this function uses preview APIs. Switch to the beta libraries to use Application.createWorkbook(). + async function newWorkbookFromFile() { + await Excel.run(async (context) => { + // create a new workbook from the TextArea and open it + context.application.createWorkbook($('#file-contents').text()).open(); + }); + } + async function setup() { await Excel.run(async (context) => { const sheet = await OfficeHelpers.ExcelUtilities @@ -104,7 +113,7 @@ script: sheet.getUsedRange().format.autofitColumns(); sheet.getUsedRange().format.autofitRows(); } - + createChart(context); sheet.activate(); @@ -170,6 +179,18 @@ template:
+ +
+

Note: Application.createWorkbook() is in preview and needs the beta libraries. Follow the comment instructions under "Libraries " to switch from production to beta.

+
+ +
+

Create a new workbook (requires preview APIs)

+ +
+
Date: Thu, 6 Sep 2018 16:02:35 -0700 Subject: [PATCH 079/660] Loading properties correctly (#202) --- samples/excel/89-preview-apis/chart-formatting.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/excel/89-preview-apis/chart-formatting.yaml b/samples/excel/89-preview-apis/chart-formatting.yaml index 69d44bd57..fa82a3a40 100644 --- a/samples/excel/89-preview-apis/chart-formatting.yaml +++ b/samples/excel/89-preview-apis/chart-formatting.yaml @@ -138,8 +138,8 @@ script: fastSeries.format.line.color = "#75AB3B"; fastSeries.dataLabels.format.font.color = "#D9D9D9"; - maxSeries.load(); - fastSeries.load(); + maxSeries.load("name"); + fastSeries.load("name"); await context.sync(); maxSeries.name += " (Greatest Growth)"; fastSeries.name += " (Greatest Relative Growth)"; From 6b96c9c7182e0c0c67c3516c0bf66cd98f3ad568 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 6 Sep 2018 17:21:02 -0700 Subject: [PATCH 080/660] Merge to prod (#203) * Unmap 1.9 snippet and fix pivot text (#194) * Correcting PivotTable capitalization (#195) * Adding a showAs PivotTable sample (#196) * Adding a showAs PivotTable sample * Removing references to other snippets * Update lodash version (#197) * Fix broken link (#199) md URLs are relative unless specified * expanded the RangeAreas snippet * Add Application.createWorkbook as verification to file slicing (#201) * Adding createWorkbook to file snippet * Missing space * Loading properties correctly (#202) --- README.md | 2 +- playlists/excel.yaml | 4 +- .../82-document/get-file-in-slices-async.yaml | 28 +++- .../89-preview-apis/chart-formatting.yaml | 4 +- .../excel/89-preview-apis/range-areas.yaml | 126 +++++++++++++++--- 5 files changed, 134 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index 1ea3258ec..434339eab 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ [![Build Status](https://travis-ci.com/OfficeDev/office-js-snippets.svg?token=paK2s5RGiCpVHK6bYoFs&branch=master)](https://travis-ci.org/OfficeDev/office-js-snippets) # Office JS Snippets -A collection of code snippets built with [Script Lab](github.com/OfficeDev/script-lab) +A collection of code snippets built with [Script Lab](//github.com/OfficeDev/script-lab) ![Script Lab import gallery screenshot](.github/images/addin-samples-gallery-screenshot.jpg) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 83a3937da..cf6155764 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -776,9 +776,7 @@ - id: excel-range-areas name: Using RangeAreas (Discontiguous Ranges) fileName: range-areas.yaml - description: >- - Work with RangeAreas, which are sets of ranges that need not be contiguous - with each other. + description: 'Work with RangeAreas, which are sets of ranges that need not be contiguous.' rawUrl: >- https://raw.githubusercontent.com////samples/excel/89-preview-apis/range-areas.yaml group: Preview APIs diff --git a/samples/excel/82-document/get-file-in-slices-async.yaml b/samples/excel/82-document/get-file-in-slices-async.yaml index 95cc29307..f3f2d4e2c 100644 --- a/samples/excel/82-document/get-file-in-slices-async.yaml +++ b/samples/excel/82-document/get-file-in-slices-async.yaml @@ -9,6 +9,7 @@ script: content: |- $("#setup").click(() => tryCatch(setup)); $("#get-file").click(() => tryCatch(getCurrentFile)); + $("#new-workbook-from-file").click(() => tryCatch(newWorkbookFromFile)); function getCurrentFile() { @@ -38,7 +39,7 @@ script: let base64string = base64js.fromByteArray(byteArray); $('#file-contents').val(base64string).show(); - OfficeHelpers.UI.notify("The base64-encoded string that represents the current document has been written to the text box below. To validate the string, use an online tool such as https://www.base64decode.org/ to decode the string, and then open the resulting file."); + OfficeHelpers.UI.notify("The base64-encoded string that represents the current document has been written to the text box below. To validate the string, load the preview API libraries and use the \"Create workbook from string\" button."); } } @@ -82,6 +83,14 @@ script: } } + // Note: this function uses preview APIs. Switch to the beta libraries to use Application.createWorkbook(). + async function newWorkbookFromFile() { + await Excel.run(async (context) => { + // create a new workbook from the TextArea and open it + context.application.createWorkbook($('#file-contents').text()).open(); + }); + } + async function setup() { await Excel.run(async (context) => { const sheet = await OfficeHelpers.ExcelUtilities @@ -104,7 +113,7 @@ script: sheet.getUsedRange().format.autofitColumns(); sheet.getUsedRange().format.autofitRows(); } - + createChart(context); sheet.activate(); @@ -170,6 +179,18 @@ template:
+ +
+

Note: Application.createWorkbook() is in preview and needs the beta libraries. Follow the comment instructions under "Libraries " to switch from production to beta.

+
+ +
+

Create a new workbook (requires preview APIs)

+ +
+
tryCatch(createSalesRange)); - $("#color-all-formula-cells").click(() => tryCatch(colorAllFormulaCells)); + $("#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)); - async function colorAllFormulaCells() { + async function colorSelectedRanges() { await Excel.run(async (context) => { + + const selectedRanges = context.workbook.getSelectedRanges(); + selectedRanges.format.fill.color = "lightblue"; + + await context.sync(); + }) + } + + async function colorSpecifiedRanges() { + 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(); + }) + } + + async function colorAllFormulaRanges() { + await Excel.run(async (context) => { + + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const usedRange = sheet.getUsedRange(); + + // Find the ranges with formulas + const formulaRanges = usedRange.getSpecialCells("Formulas"); + formulaRanges.format.fill.color = "lightgreen"; + + await context.sync(); + }); + } + + async function colorAllLogicalAndTextRanges() { + 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"; - // To create a RangeAreas object with multiple child areas, pass a - // comma-delimited string of range addresses to - // Worksheet.getRanges. - const rangeAreas = sheet.getRanges("F3:F5, H3:H5"); - rangeAreas.format.fill.color = "pink"; + return context.sync(); + }); + } + + async function readPropertiesOfSpecifiedRanges() { + await Excel.run(async (context) => { + + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const specifiedRanges = sheet.getRanges("C3:C5, E3:E5"); + specifiedRanges.load("format/fill/color, isEntireColumn, address, areaCount"); + + await context.sync() + + // Non-boolean properties return null unless the + // property value on all member ranges is the same. + // (RangeAreas.address is an exception.) + console.log("Color is: " + specifiedRanges.format.fill.color); + + // Boolean properties return false unless the + // property is true on ALL member ranges. + console.log("Each range is an entireColumn: " + specifiedRanges.isEntireColumn); + + // Returns a comma-delimited string of all the + // addresses of the member ranges. + console.log("Range addresses: " + specifiedRanges.address); + console.log("Number of ranges: " + specifiedRanges.areaCount); await context.sync(); }); } - async function createSalesRange() { + async function reset() { await Excel.run(async (context) => { const sheet = await OfficeHelpers.ExcelUtilities .forceCreateSheet(context.workbook, "Sample"); const data = [ - ["Product", "Qty", "Category", "Unit Price", "Base Price", "Tax", "Total Charge"], - ["Almonds", 2, "Nuts", 7.50, "=C3 * E3", 0.1, "=SUM(F3,F3 * G3)"], - ["Coffee", 1, "Beverage", 34.50, "=C4 * E4", 0.0, "=SUM(F4,F4 * G4)"], - ["Chocolate", 5, "Candy", 9.56, "=C5 * E5", 0.2, "=SUM(F5,F5 * G5)"] + ["Product", "Qty", "Category", "Unit Price", "Base Price", "Tax", "Total Charge", "Manager's Discount", "Final Price"], + ["Almonds", 2, "Nuts", 7.50, "=C3 * E3", 0.1, "=SUM(F3,F3 * G3)", false, "=IF(I3 = TRUE, H3 * 0.9, H3)"], + ["Coffee", 1, "Beverage", 34.50, "=C4 * E4", 0.0, "=SUM(F4,F4 * G4)", true, "=IF(I4 = TRUE, H4 * 0.9, H4)"], + ["Chocolate", 5, "Candy", 9.56, "=C5 * E5", 0.2, "=SUM(F5,F5 * G5)", false, "=IF(I5 = TRUE, H5 * 0.9, H5)"] ]; - const range = sheet.getRange("B2:H5"); + const range = sheet.getRange("B2:J5"); range.values = data; range.format.autofitColumns(); - sheet.activate(); await context.sync(); @@ -59,18 +125,36 @@ script: template: content: |
-

This sample shows how to apply actions to sets of Ranges that are not necessarily contiguous with each other.

+

This sample shows how to apply actions simultaneously to multiple ranges that may not be contiguous.

Set up

-

Try it out

- +

Press the next button to color ranges that are specified by hard-coded addresses in the JavaScript.

+ +

Add a formula to any cells you want on the Sample worksheet and press the next button.

+ +

Add text to any cells and add a logical (Boolean) value to any cells on the Sample worksheet and press the next button.

+ +

In Excel, select range C3:C5 and format it's fill to a new color. Then set the fill for range E3:E5 to exactly the same color! Then press Read properties of Qty and Unit Price ranges. Watch the console.

+

Next, change the fill color of one of the two ranges and press the button again.

+
language: html style: From 093a887ae934f759c65a40640cf19e4348a1bb1b Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Tue, 11 Sep 2018 11:00:10 -0700 Subject: [PATCH 081/660] Correcting sample to follow product team guidance (#204) --- samples/excel/82-document/get-file-in-slices-async.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/samples/excel/82-document/get-file-in-slices-async.yaml b/samples/excel/82-document/get-file-in-slices-async.yaml index f3f2d4e2c..387741942 100644 --- a/samples/excel/82-document/get-file-in-slices-async.yaml +++ b/samples/excel/82-document/get-file-in-slices-async.yaml @@ -83,11 +83,11 @@ script: } } - // Note: this function uses preview APIs. Switch to the beta libraries to use Application.createWorkbook(). + // Note: this function uses preview APIs. Switch to the beta libraries to use CreateWorkbook(). async function newWorkbookFromFile() { - await Excel.run(async (context) => { - // create a new workbook from the TextArea and open it - context.application.createWorkbook($('#file-contents').text()).open(); + await Excel.createWorkbook($('#file-contents').text()).catch(function (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); }); } From 035ba3d90fe4d07c7f65eaea5f9077e9787dfbdc Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 19 Sep 2018 10:12:46 -0700 Subject: [PATCH 082/660] Forcing sample to create new wortksheets (#205) --- .../excel/89-preview-apis/data-validation.yaml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/samples/excel/89-preview-apis/data-validation.yaml b/samples/excel/89-preview-apis/data-validation.yaml index 27e4a706c..560b9d32b 100644 --- a/samples/excel/89-preview-apis/data-validation.yaml +++ b/samples/excel/89-preview-apis/data-validation.yaml @@ -13,7 +13,7 @@ script: async function addPositiveNumberRequirement() { await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); + 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 @@ -47,7 +47,7 @@ script: async function requireApprovedName() { await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); + const sheet = context.workbook.worksheets.getItem("Decision"); const nameRange = sheet.tables.getItem("NameOptionsTable").columns .getItem("Baby Name").getDataBodyRange(); // When you are developing, it is a good practice to @@ -75,7 +75,7 @@ script: async function warnAboutCommentRedundancy() { await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); + 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 @@ -104,9 +104,8 @@ script: async function setup() { await Excel.run(async (context) => { - const wrbk = context.workbook; - const decisionSheet = wrbk.worksheets.getActiveWorksheet(); - decisionSheet.name = "Decision"; + const decisionSheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "Decision"); const optionsTable = decisionSheet.tables.add("A1:C4", true /*hasHeaders*/); optionsTable.name = "NameOptionsTable"; optionsTable.showBandedRows = false; @@ -115,13 +114,15 @@ script: decisionSheet.getUsedRange().format.autofitColumns(); decisionSheet.getUsedRange().format.autofitRows(); - decisionSheet.activate(); // The names that will be allowed in the Baby Name column are // listed in a range on the Names sheet. - const namesSheet = wrbk.worksheets.add("Names"); + const namesSheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "Names"); namesSheet.getRange("A1:A3").values = [["Sue"], ["Ricky"], ["Liz"]]; + decisionSheet.activate(); + await context.sync(); }); } From 798478ba89e38c885affa2a3817e108a67ff35e0 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 19 Sep 2018 13:14:56 -0700 Subject: [PATCH 083/660] Merging to prod (#206) * Unmap 1.9 snippet and fix pivot text (#194) * Correcting PivotTable capitalization (#195) * Adding a showAs PivotTable sample (#196) * Adding a showAs PivotTable sample * Removing references to other snippets * Update lodash version (#197) * Fix broken link (#199) md URLs are relative unless specified * expanded the RangeAreas snippet * Add Application.createWorkbook as verification to file slicing (#201) * Adding createWorkbook to file snippet * Missing space * Loading properties correctly (#202) * Correcting sample to follow product team guidance (#204) * Forcing sample to create new wortksheets (#205) --- .../82-document/get-file-in-slices-async.yaml | 8 ++++---- .../excel/89-preview-apis/data-validation.yaml | 17 +++++++++-------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/samples/excel/82-document/get-file-in-slices-async.yaml b/samples/excel/82-document/get-file-in-slices-async.yaml index f3f2d4e2c..387741942 100644 --- a/samples/excel/82-document/get-file-in-slices-async.yaml +++ b/samples/excel/82-document/get-file-in-slices-async.yaml @@ -83,11 +83,11 @@ script: } } - // Note: this function uses preview APIs. Switch to the beta libraries to use Application.createWorkbook(). + // Note: this function uses preview APIs. Switch to the beta libraries to use CreateWorkbook(). async function newWorkbookFromFile() { - await Excel.run(async (context) => { - // create a new workbook from the TextArea and open it - context.application.createWorkbook($('#file-contents').text()).open(); + await Excel.createWorkbook($('#file-contents').text()).catch(function (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); }); } diff --git a/samples/excel/89-preview-apis/data-validation.yaml b/samples/excel/89-preview-apis/data-validation.yaml index 27e4a706c..560b9d32b 100644 --- a/samples/excel/89-preview-apis/data-validation.yaml +++ b/samples/excel/89-preview-apis/data-validation.yaml @@ -13,7 +13,7 @@ script: async function addPositiveNumberRequirement() { await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); + 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 @@ -47,7 +47,7 @@ script: async function requireApprovedName() { await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); + const sheet = context.workbook.worksheets.getItem("Decision"); const nameRange = sheet.tables.getItem("NameOptionsTable").columns .getItem("Baby Name").getDataBodyRange(); // When you are developing, it is a good practice to @@ -75,7 +75,7 @@ script: async function warnAboutCommentRedundancy() { await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); + 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 @@ -104,9 +104,8 @@ script: async function setup() { await Excel.run(async (context) => { - const wrbk = context.workbook; - const decisionSheet = wrbk.worksheets.getActiveWorksheet(); - decisionSheet.name = "Decision"; + const decisionSheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "Decision"); const optionsTable = decisionSheet.tables.add("A1:C4", true /*hasHeaders*/); optionsTable.name = "NameOptionsTable"; optionsTable.showBandedRows = false; @@ -115,13 +114,15 @@ script: decisionSheet.getUsedRange().format.autofitColumns(); decisionSheet.getUsedRange().format.autofitRows(); - decisionSheet.activate(); // The names that will be allowed in the Baby Name column are // listed in a range on the Names sheet. - const namesSheet = wrbk.worksheets.add("Names"); + const namesSheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "Names"); namesSheet.getRange("A1:A3").values = [["Sue"], ["Ricky"], ["Liz"]]; + decisionSheet.activate(); + await context.sync(); }); } From c75eb031a765974cc21f009d045b1f42fcde9b0a Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 21 Sep 2018 16:56:45 -0700 Subject: [PATCH 084/660] Putting 1.8 Excel Snippets into proper folders (#207) --- playlists/excel.yaml | 226 +++++++++--------- .../data-validation.yaml | 4 +- .../worksheet-gridlines.yaml | 4 +- .../chart-axis-formatting.yaml | 4 +- .../chart-formatting.yaml | 4 +- .../pivottable-calculations.yaml | 4 +- .../pivottable-create-and-modify.yaml | 4 +- .../pivottable-filters-and-summaries.yaml | 4 +- .../events-chart-activated.yaml | 4 +- ...vents-chartcollection-added-activated.yaml | 4 +- .../events-disable-events.yaml | 4 +- .../events-worksheet-calculated.yaml | 4 +- ...events-worksheetcollection-calculated.yaml | 4 +- view/excel.json | 24 +- 14 files changed, 149 insertions(+), 149 deletions(-) rename samples/excel/{89-preview-apis => 35-worksheet}/data-validation.yaml (98%) rename samples/excel/{89-preview-apis => 35-worksheet}/worksheet-gridlines.yaml (95%) rename samples/excel/{89-preview-apis => 50-chart}/chart-axis-formatting.yaml (98%) rename samples/excel/{89-preview-apis => 50-chart}/chart-formatting.yaml (98%) rename samples/excel/{89-preview-apis => 55-pivottable}/pivottable-calculations.yaml (98%) rename samples/excel/{89-preview-apis => 55-pivottable}/pivottable-create-and-modify.yaml (98%) rename samples/excel/{89-preview-apis => 55-pivottable}/pivottable-filters-and-summaries.yaml (98%) rename samples/excel/{89-preview-apis => 70-events}/events-chart-activated.yaml (97%) rename samples/excel/{89-preview-apis => 70-events}/events-chartcollection-added-activated.yaml (97%) rename samples/excel/{89-preview-apis => 70-events}/events-disable-events.yaml (98%) rename samples/excel/{89-preview-apis => 70-events}/events-worksheet-calculated.yaml (97%) rename samples/excel/{89-preview-apis => 70-events}/events-worksheetcollection-calculated.yaml (97%) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index cf6155764..ac848238b 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -242,6 +242,27 @@ group: Worksheet api_set: ExcelApi: 1.7 +- id: excel-data-validation + name: Data Validation + fileName: data-validation.yaml + description: >- + This snippet shows how to programmatically set a variety of data validation + rules on ranges, how to prompt users to enter valid data, and how to popup a + warning or informational message when invalid data is entered. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/35-worksheet/data-validation.yaml + group: Worksheet + api_set: + ExcelApi: 1.8 +- id: excel-gridlines + name: Worksheet gridlines + fileName: worksheet-gridlines.yaml + description: Hide and show gridlines in a worksheet + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/35-worksheet/worksheet-gridlines.yaml + group: Worksheet + api_set: + ExcelAPI: 1.8 - id: excel-workbook-get-active-cell name: Get active cell fileName: workbook-get-active-cell.yaml @@ -521,6 +542,51 @@ group: Chart api_set: ExcelAPI: 1.7 +- id: excel-chart-axis-formatting + name: Chart - Axis formatting + fileName: chart-axis-formatting.yaml + description: Format the vertical and horizontal axis in a chart. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/50-chart/chart-axis-formatting.yaml + group: Chart + api_set: + ExcelAPI: 1.8 +- id: excel-chart-formatting + name: Chart - Formatting + fileName: chart-formatting.yaml + description: Format labels and lines of a slope chart. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/50-chart/chart-formatting.yaml + group: Chart + api_set: + ExcelAPI: 1.8 +- id: excel-pivottable-calculations + name: PivotTable Calculations + fileName: pivottable-calculations.yaml + description: Change the calculations the PivotTable performs. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/55-pivottable/pivottable-calculations.yaml + group: PivotTable + api_set: + ExcelApi: 1.8 +- id: excel-pivottable-create-and-modify + name: Create and modify PivotTable + fileName: pivottable-create-and-modify.yaml + description: Create and modify a PivotTable. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/55-pivottable/pivottable-create-and-modify.yaml + group: PivotTable + api_set: + ExcelApi: 1.8 +- id: excel-pivottable-filters-and-summaries + name: PivotTable filters and summaries + fileName: pivottable-filters-and-summaries.yaml + description: Filter PivotTable data and show different summarizations. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/55-pivottable/pivottable-filters-and-summaries.yaml + group: PivotTable + api_set: + ExcelApi: 1.8 - id: excel-pivottable-refresh-pivot-table name: Refresh PivotTable fileName: refresh-pivot-table.yaml @@ -602,6 +668,53 @@ group: Events api_set: ExcelApi: 1.7 +- id: excel-events-chart-activated + name: Events - Chart Activate + fileName: events-chart-activated.yaml + description: Create handlers for the Chart.onActivated and Chart.onDeactivated events. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/70-events/events-chart-activated.yaml + group: Events + api_set: + ExcelApi: 1.8 +- id: excel-events-chartcollection-added-activated + name: Events - ChartCollection + fileName: events-chartcollection-added-activated.yaml + description: >- + Shows how to handle the ChartCollection onActivated, onDeactivated, onAdded, + and onDeleted events. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/70-events/events-chartcollection-added-activated.yaml + group: Events + api_set: + ExcelApi: 1.8 +- id: excel-events-disable-events + name: Disable Events + fileName: events-disable-events.yaml + description: Toggle event firing on and off for performance. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/70-events/events-disable-events.yaml + group: Events + api_set: + ExcelAPI: 1.8 +- id: excel-events-worksheet-calculated + name: Events - Worksheet onCalculated + fileName: events-worksheet-calculated.yaml + description: Add an event handler for the worksheet onCalculated event + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/70-events/events-worksheet-calculated.yaml + group: Events + api_set: + ExcelApi: 1.8 +- id: excel-events-worksheetcollection-calculated + name: Events - WorksheetCollection onCalculated + fileName: events-worksheetcollection-calculated.yaml + description: Add an event handler for the WorksheetCollection onCalculated event + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/70-events/events-worksheetcollection-calculated.yaml + group: Events + api_set: + ExcelApi: 1.8 - id: excel-settings-create-get-change-delete-settings name: 'Create, get, change, and delete a setting' fileName: create-get-change-delete-settings.yaml @@ -660,119 +773,6 @@ group: Common Patterns api_set: ExcelApi: 1.4 -- id: excel-chart-axis-formatting - name: Chart - Axis formatting - fileName: chart-axis-formatting.yaml - description: Format the vertical and horizontal axis in a chart. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/chart-axis-formatting.yaml - group: Preview APIs - api_set: - ExcelAPI: 1.8 -- id: excel-chart-formatting - name: Chart - Formatting - fileName: chart-formatting.yaml - description: Format labels and lines of a slope chart. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/chart-formatting.yaml - group: Preview APIs - api_set: - ExcelAPI: 1.8 -- id: excel-data-validation - name: Data Validation - fileName: data-validation.yaml - description: >- - This snippet shows how to programmatically set a variety of data validation - rules on ranges, how to prompt users to enter valid data, and how to popup a - warning or informational message when invalid data is entered. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/data-validation.yaml - group: Preview APIs - api_set: - ExcelApi: 1.8 -- id: excel-events-chart-activated - name: Events - Chart Activate - fileName: events-chart-activated.yaml - description: Create handlers for the Chart.onActivated and Chart.onDeactivated events. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/events-chart-activated.yaml - group: Preview APIs - api_set: - ExcelApi: 1.8 -- id: excel-events-chartcollection-added-activated - name: Events - ChartCollection - fileName: events-chartcollection-added-activated.yaml - description: >- - Shows how to handle the ChartCollection onActivated, onDeactivated, onAdded, - and onDeleted events. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/events-chartcollection-added-activated.yaml - group: Preview APIs - api_set: - ExcelApi: 1.8 -- id: excel-events-disable-events - name: Disable Events - fileName: events-disable-events.yaml - description: Toggle event firing on and off for performance. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/events-disable-events.yaml - group: Preview APIs - api_set: - ExcelAPI: 1.8 -- id: excel-events-worksheet-calculated - name: Events - Worksheet onCalculated - fileName: events-worksheet-calculated.yaml - description: Add an event handler for the worksheet onCalculated event - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/events-worksheet-calculated.yaml - group: Preview APIs - api_set: - ExcelApi: 1.8 -- id: excel-events-worksheetcollection-calculated - name: Events - WorksheetCollection onCalculated - fileName: events-worksheetcollection-calculated.yaml - description: Add an event handler for the WorksheetCollection onCalculated event - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/events-worksheetcollection-calculated.yaml - group: Preview APIs - api_set: - ExcelApi: 1.8 -- id: excel-gridlines - name: Worksheet gridlines - fileName: worksheet-gridlines.yaml - description: Hide and show gridlines in a worksheet - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/worksheet-gridlines.yaml - group: Preview APIs - api_set: - ExcelAPI: 1.8 -- id: excel-pivottable-calculations - name: PivotTable Calculations - fileName: pivottable-calculations.yaml - description: Change the calculations the PivotTable performs. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/pivottable-calculations.yaml - group: Preview APIs - api_set: - ExcelApi: 1.8 -- id: excel-pivottable-create-and-modify - name: Create and modify PivotTable - fileName: pivottable-create-and-modify.yaml - description: Create and modify a PivotTable. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/pivottable-create-and-modify.yaml - group: Preview APIs - api_set: - ExcelApi: 1.8 -- id: excel-pivottable-filters-and-summaries - name: PivotTable filters and summaries - fileName: pivottable-filters-and-summaries.yaml - description: Filter PivotTable data and show different summarizations. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/pivottable-filters-and-summaries.yaml - group: Preview APIs - api_set: - ExcelApi: 1.8 - id: excel-range-areas name: Using RangeAreas (Discontiguous Ranges) fileName: range-areas.yaml diff --git a/samples/excel/89-preview-apis/data-validation.yaml b/samples/excel/35-worksheet/data-validation.yaml similarity index 98% rename from samples/excel/89-preview-apis/data-validation.yaml rename to samples/excel/35-worksheet/data-validation.yaml index 560b9d32b..68232f0b1 100644 --- a/samples/excel/89-preview-apis/data-validation.yaml +++ b/samples/excel/35-worksheet/data-validation.yaml @@ -163,8 +163,8 @@ style: /* Your style goes here */ language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + 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/89-preview-apis/worksheet-gridlines.yaml b/samples/excel/35-worksheet/worksheet-gridlines.yaml similarity index 95% rename from samples/excel/89-preview-apis/worksheet-gridlines.yaml rename to samples/excel/35-worksheet/worksheet-gridlines.yaml index a9dbe28ec..4f7926ec8 100644 --- a/samples/excel/89-preview-apis/worksheet-gridlines.yaml +++ b/samples/excel/35-worksheet/worksheet-gridlines.yaml @@ -72,8 +72,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + 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/89-preview-apis/chart-axis-formatting.yaml b/samples/excel/50-chart/chart-axis-formatting.yaml similarity index 98% rename from samples/excel/89-preview-apis/chart-axis-formatting.yaml rename to samples/excel/50-chart/chart-axis-formatting.yaml index ead37f493..8c3edb095 100644 --- a/samples/excel/89-preview-apis/chart-axis-formatting.yaml +++ b/samples/excel/50-chart/chart-axis-formatting.yaml @@ -212,8 +212,8 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + 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/89-preview-apis/chart-formatting.yaml b/samples/excel/50-chart/chart-formatting.yaml similarity index 98% rename from samples/excel/89-preview-apis/chart-formatting.yaml rename to samples/excel/50-chart/chart-formatting.yaml index fa82a3a40..0432fe1c4 100644 --- a/samples/excel/89-preview-apis/chart-formatting.yaml +++ b/samples/excel/50-chart/chart-formatting.yaml @@ -294,8 +294,8 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + 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/89-preview-apis/pivottable-calculations.yaml b/samples/excel/55-pivottable/pivottable-calculations.yaml similarity index 98% rename from samples/excel/89-preview-apis/pivottable-calculations.yaml rename to samples/excel/55-pivottable/pivottable-calculations.yaml index cf3aaf9ba..c4fa3eeee 100644 --- a/samples/excel/89-preview-apis/pivottable-calculations.yaml +++ b/samples/excel/55-pivottable/pivottable-calculations.yaml @@ -199,8 +199,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + 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/89-preview-apis/pivottable-create-and-modify.yaml b/samples/excel/55-pivottable/pivottable-create-and-modify.yaml similarity index 98% rename from samples/excel/89-preview-apis/pivottable-create-and-modify.yaml rename to samples/excel/55-pivottable/pivottable-create-and-modify.yaml index a039bd4df..9380bf0d6 100644 --- a/samples/excel/89-preview-apis/pivottable-create-and-modify.yaml +++ b/samples/excel/55-pivottable/pivottable-create-and-modify.yaml @@ -262,8 +262,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + 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/89-preview-apis/pivottable-filters-and-summaries.yaml b/samples/excel/55-pivottable/pivottable-filters-and-summaries.yaml similarity index 98% rename from samples/excel/89-preview-apis/pivottable-filters-and-summaries.yaml rename to samples/excel/55-pivottable/pivottable-filters-and-summaries.yaml index 9e72c4aab..085a770f7 100644 --- a/samples/excel/89-preview-apis/pivottable-filters-and-summaries.yaml +++ b/samples/excel/55-pivottable/pivottable-filters-and-summaries.yaml @@ -217,8 +217,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + 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/89-preview-apis/events-chart-activated.yaml b/samples/excel/70-events/events-chart-activated.yaml similarity index 97% rename from samples/excel/89-preview-apis/events-chart-activated.yaml rename to samples/excel/70-events/events-chart-activated.yaml index 0be638fb5..81a4b5cc3 100644 --- a/samples/excel/89-preview-apis/events-chart-activated.yaml +++ b/samples/excel/70-events/events-chart-activated.yaml @@ -150,8 +150,8 @@ style: /* Your style goes here */ language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + 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/89-preview-apis/events-chartcollection-added-activated.yaml b/samples/excel/70-events/events-chartcollection-added-activated.yaml similarity index 97% rename from samples/excel/89-preview-apis/events-chartcollection-added-activated.yaml rename to samples/excel/70-events/events-chartcollection-added-activated.yaml index 1bd4bbc03..7cff53e10 100644 --- a/samples/excel/89-preview-apis/events-chartcollection-added-activated.yaml +++ b/samples/excel/70-events/events-chartcollection-added-activated.yaml @@ -142,8 +142,8 @@ style: /* Your style goes here */ language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + 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/89-preview-apis/events-disable-events.yaml b/samples/excel/70-events/events-disable-events.yaml similarity index 98% rename from samples/excel/89-preview-apis/events-disable-events.yaml rename to samples/excel/70-events/events-disable-events.yaml index 61c9bb9de..2cbbffb49 100644 --- a/samples/excel/89-preview-apis/events-disable-events.yaml +++ b/samples/excel/70-events/events-disable-events.yaml @@ -161,8 +161,8 @@ style: /* Your style goes here */ language: css libraries: |- - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + 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/89-preview-apis/events-worksheet-calculated.yaml b/samples/excel/70-events/events-worksheet-calculated.yaml similarity index 97% rename from samples/excel/89-preview-apis/events-worksheet-calculated.yaml rename to samples/excel/70-events/events-worksheet-calculated.yaml index 13a15abce..00b881cf1 100644 --- a/samples/excel/89-preview-apis/events-worksheet-calculated.yaml +++ b/samples/excel/70-events/events-worksheet-calculated.yaml @@ -105,8 +105,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + 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/89-preview-apis/events-worksheetcollection-calculated.yaml b/samples/excel/70-events/events-worksheetcollection-calculated.yaml similarity index 97% rename from samples/excel/89-preview-apis/events-worksheetcollection-calculated.yaml rename to samples/excel/70-events/events-worksheetcollection-calculated.yaml index 7893fd608..9420564b4 100644 --- a/samples/excel/89-preview-apis/events-worksheetcollection-calculated.yaml +++ b/samples/excel/70-events/events-worksheetcollection-calculated.yaml @@ -143,8 +143,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + 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/view/excel.json b/view/excel.json index eaea7d36b..bc92f18a8 100644 --- a/view/excel.json +++ b/view/excel.json @@ -27,6 +27,8 @@ "excel-worksheet-copy": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/worksheet-copy.yaml", "excel-worksheet-freeze-panes": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/worksheet-freeze-panes.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/tab-color.yaml", + "excel-data-validation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/data-validation.yaml", + "excel-gridlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/worksheet-gridlines.yaml", "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/37-workbook/workbook-get-active-cell.yaml", "excel-protect-data-in-worksheet-and-workbook-structure": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/37-workbook/protect-data-in-worksheet-and-workbook-structure.yaml", "excel-style": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/40-table/style.yaml", @@ -58,6 +60,11 @@ "excel-chart-series-plotorder": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-series-plotorder.yaml", "excel-chart-title-substring": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-title-substring.yaml", "excel-chart-trendlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-trendlines.yaml", + "excel-chart-axis-formatting": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-axis-formatting.yaml", + "excel-chart-formatting": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-formatting.yaml", + "excel-pivottable-calculations": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/55-pivottable/pivottable-calculations.yaml", + "excel-pivottable-create-and-modify": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/55-pivottable/pivottable-create-and-modify.yaml", + "excel-pivottable-filters-and-summaries": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/55-pivottable/pivottable-filters-and-summaries.yaml", "excel-pivottable-refresh-pivot-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/55-pivottable/refresh-pivot-table.yaml", "excel-events-data-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/data-changed.yaml", "excel-events-selection-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/selection-changed.yaml", @@ -67,24 +74,17 @@ "excel-events-worksheet-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/events-worksheet-activated.yaml", "excel-events-worksheet-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/events-worksheet-changed.yaml", "excel-events-worksheet-selectionchanged": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/events-worksheet-selectionchanged.yaml", + "excel-events-chart-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/events-chart-activated.yaml", + "excel-events-chartcollection-added-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/events-chartcollection-added-activated.yaml", + "excel-events-disable-events": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/events-disable-events.yaml", + "excel-events-worksheet-calculated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/events-worksheet-calculated.yaml", + "excel-events-worksheetcollection-calculated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/events-worksheetcollection-calculated.yaml", "excel-settings-create-get-change-delete-settings": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/80-settings/create-get-change-delete-settings.yaml", "excel-document-get-file-in-slices-async": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/82-document/get-file-in-slices-async.yaml", "excel-document-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/82-document/properties.yaml", "excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-custom-xml-parts/test-xml-for-unique-namespace.yaml", "excel-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/88-common-patterns/multiple-property-set.yaml", - "excel-chart-axis-formatting": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-axis-formatting.yaml", - "excel-chart-formatting": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/chart-formatting.yaml", - "excel-data-validation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/data-validation.yaml", - "excel-events-chart-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-chart-activated.yaml", - "excel-events-chartcollection-added-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-chartcollection-added-activated.yaml", - "excel-events-disable-events": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-disable-events.yaml", - "excel-events-worksheet-calculated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-worksheet-calculated.yaml", - "excel-events-worksheetcollection-calculated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/events-worksheetcollection-calculated.yaml", - "excel-gridlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/worksheet-gridlines.yaml", - "excel-pivottable-calculations": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/pivottable-calculations.yaml", - "excel-pivottable-create-and-modify": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/pivottable-create-and-modify.yaml", - "excel-pivottable-filters-and-summaries": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/pivottable-filters-and-summaries.yaml", "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/range-areas.yaml", "excel-range-copyfrom": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/range-copyfrom.yaml", "excel-just-for-fun-gradient": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-just-for-fun/gradient.yaml", From d8382807f4766a9573adb6246c25987aa3287c9d Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 21 Sep 2018 17:39:49 -0700 Subject: [PATCH 085/660] Duplicate functions (#208) --- .../excel/50-chart/chart-axis-formatting.yaml | 41 ------------------- 1 file changed, 41 deletions(-) diff --git a/samples/excel/50-chart/chart-axis-formatting.yaml b/samples/excel/50-chart/chart-axis-formatting.yaml index 8c3edb095..fb70ca838 100644 --- a/samples/excel/50-chart/chart-axis-formatting.yaml +++ b/samples/excel/50-chart/chart-axis-formatting.yaml @@ -129,47 +129,6 @@ script: } } - async function createChart(context: Excel.RequestContext) { - let sheet = context.workbook.worksheets.getItem("Sample"); - let salesTable = sheet.tables.getItem("SalesTable"); - - let dataRange = sheet.getRange("A1:B7"); - let chart = sheet.charts.add("Line", dataRange, "auto"); - - chart.setPosition("A15", "I30"); - chart.legend.position = "right" - chart.legend.format.fill.setSolidColor("white"); - chart.dataLabels.format.font.size = 15; - chart.dataLabels.format.font.color = "black"; - - chart.axes.categoryAxis.majorGridlines.visible = true; - chart.axes.categoryAxis.majorTickMark = "None"; - chart.title.text = "Sales of Bicycle Parts"; - chart.name = "SalesChart"; - - await context.sync(); - } - - function displayUnit(context: Excel.RequestContext) { - let sheet = context.workbook.worksheets.getItem("Sample"); - - let chart = sheet.charts.getItem("SalesChart"); - - let axis = chart.axes.valueAxis; - axis.displayUnit = "Thousands"; - } - - /** Default helper for invoking an action and handling errors. */ - async function tryCatch(callback) { - try { - await callback(); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - language: typescript template: content: |- From c777ba8f27e2c1db740b35295e366741d673435a Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Mon, 8 Oct 2018 17:42:50 -0700 Subject: [PATCH 086/660] Mapping Excel 1.8 snippets to ref docs (#211) * Mapping Excel 1.8 snippets to ref docs git push * Sorting the Excel excel file * Removing preview comment * Fix layout map --- .../excel/35-worksheet/data-validation.yaml | 11 ++++------- .../excel/50-chart/chart-axis-formatting.yaml | 11 ++--------- .../82-document/get-file-in-slices-async.yaml | 1 - snippet-extractor-metadata/excel.xlsx | Bin 15451 -> 16154 bytes 4 files changed, 6 insertions(+), 17 deletions(-) diff --git a/samples/excel/35-worksheet/data-validation.yaml b/samples/excel/35-worksheet/data-validation.yaml index 68232f0b1..bcd9727a7 100644 --- a/samples/excel/35-worksheet/data-validation.yaml +++ b/samples/excel/35-worksheet/data-validation.yaml @@ -48,22 +48,18 @@ script: async function requireApprovedName() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Decision"); - const nameRange = sheet.tables.getItem("NameOptionsTable").columns .getItem("Baby Name").getDataBodyRange(); + const nameRange = + sheet.tables.getItem("NameOptionsTable").columns.getItem("Baby Name").getDataBodyRange(); // When you are developing, it is a good practice to // clear the dataValidation object with each run of your code. nameRange.dataValidation.clear(); - // A bug in the preview version of the Excel 1.8 API makes the - // next line necessary. It can be deleted when the 1.8 API releases. - nameRange.dataValidation.load(); const nameSourceRange = context.workbook.worksheets.getItem("Names").getRange("A1:A3"); let approvedListRule = { list: { inCellDropDown: true, - // When bug is fixed, replace hardcoded list with - // the range object. source: '=Names!$A$1:$A$3' } }; @@ -76,7 +72,8 @@ script: async function warnAboutCommentRedundancy() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Decision"); - const commentsRange = sheet.tables.getItem("NameOptionsTable").columns.getItem("Comments").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. diff --git a/samples/excel/50-chart/chart-axis-formatting.yaml b/samples/excel/50-chart/chart-axis-formatting.yaml index fb70ca838..5af0af995 100644 --- a/samples/excel/50-chart/chart-axis-formatting.yaml +++ b/samples/excel/50-chart/chart-axis-formatting.yaml @@ -16,12 +16,8 @@ script: let sheet = context.workbook.worksheets.getActiveWorksheet(); let chart = sheet.charts.getItem("SalesChart"); - let axis = chart.axes.categoryAxis; - - // Set the axis properties in a chart. - // For descriptions of each property, - // see https://github.com/OfficeDev/office-js-docs/blob/ExcelJs_OpenSpec/reference/excel/chartaxis.md + axis.reversePlotOrder = true; axis.tickLabelSpacing = 1; axis.tickMarkSpacing = 2; @@ -39,16 +35,13 @@ script: let sheet = context.workbook.worksheets.getActiveWorksheet(); let chart = sheet.charts.getItem("SalesChart"); - let axis = chart.axes.valueAxis; - // Set the axis properties in a chart. - // For descriptions of each property, - // see https://github.com/OfficeDev/office-js-docs/blob/ExcelJs_OpenSpec/reference/excel/chartaxis.md axis.displayUnit = "None"; axis.scaleType = "Logarithmic"; axis.logBase = 100; axis.majorTickMark = "Cross"; + // Set the product name label location. // In this case, the location is at 100 units. axis.setPositionAt(100); diff --git a/samples/excel/82-document/get-file-in-slices-async.yaml b/samples/excel/82-document/get-file-in-slices-async.yaml index 387741942..086fb4200 100644 --- a/samples/excel/82-document/get-file-in-slices-async.yaml +++ b/samples/excel/82-document/get-file-in-slices-async.yaml @@ -83,7 +83,6 @@ script: } } - // Note: this function uses preview APIs. Switch to the beta libraries to use CreateWorkbook(). async function newWorkbookFromFile() { await Excel.createWorkbook($('#file-contents').text()).catch(function (error) { OfficeHelpers.UI.notify(error); diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index c60aee88a64c2e5793575964b2d70f22eb12746f..f18a11f55c872c137fa9fdc78cdc323e5cbaf0e2 100644 GIT binary patch delta 8177 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%0Ac0Wir}AU(-Y`|$O`;Oyex_5@CiX` z%t#2gR|yaRkVb{~@UcP1eN#TulYUk?77$$Nr?zy95v)r({!(7@_j(aSJ=+UUe{H=_ za&I{xL9%-luk(5!Wmk_Q&j?YiV6dL3Ar`c@qZ9Kf^mGpGEJRq%sa4RJm?LqC z({%wYo)r@uu<0V`sP}0_RqXbiWHYYs zJZ8ze=%cT15j3|5(G@b&->W=3x!3s$Mv9pOC=mtBC}FH|ysVpIC}oU94K&#{ljrUPdSWpo*TI!3Z zFA6)APGF)F0pCvR|Jo~y+#;zbhoj0COt>S_XAmSRVxZ`z+OewXXwr(^>RuU$^H){8 z$w$LaM_ITHqBlvcQ*j6KHB`vJ3Iaj}dkoc*i6T@D=UGC{?Zp;ftff+hiO&a2obpQ@ zMRaX@o=czaKp|A~Wp%5jgtA}~!EX#H$a)6;_hlMW<8g*W8SY4I z{^ZqbxF-#ZqOjJ!MVR0xvhV;Q;8Kx~HU^Pr)^fr>%$9xMsogBbomm~V(_IQ&40Zfz zc79p9<$hZ8LH<0gDNy+H6|ixnwsl&FlM5}9f89y=53&46F5#z}Z%5VkcpvW%7rZLE z2pb;$)u&J=C21@*8%20nkf7TAwBYbH%?CW3Q_jg>LaIwlPFLFmgbo5-bj!|jX#`e2 z_t(=tm6i=RL!EnP?k6}0fv;10@kq^Q+2sZ3SpiH=re&HDuZ&~eB7lc2$sJWhw)+6$ z@!yA)29C^5$lpumtt^m)&KT`7C&_+_m68n^y(`=ly1?BT^mb-H35328GVweg7ye)) z$J_!OX7Z){+M|P~;H99(OM5wyLM4NV&16uJGbm7W^Zl^L;A%5mi%hh#kLpYQ0jcj; zS`i7_^(t{#{hO>Z)izQo>A_P(X}Zg7oz8I$N`XXb=;F#A33_^|pT$ihPmiVZdkE`; zlDf;vG&j`pLx;5AqnwgrGC&_Lcs3yuoJ$Nu`G0xu zzl{^QpIK0p@;@B*{|BSzf#--bQ~ujJNC1G-^Q+rmZtx>9EB{{n5iJ-u9=;j$9o7v|#sg!zBBzBEq& delta 7555 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 wOJPoif9Siz7w?4YKgU73Vu(sX9t8H?YSU!zV=N Date: Tue, 16 Oct 2018 09:51:28 -0700 Subject: [PATCH 087/660] Adding event snippet to mapping and running npm start (#213) * Adding event snippet and running npm start * Resorting --- snippet-extractor-metadata/excel.xlsx | Bin 16154 -> 16199 bytes snippet-extractor-output/snippets.yaml | 2704 +++++++++++++----------- yarn.lock | 239 ++- 3 files changed, 1719 insertions(+), 1224 deletions(-) diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index f18a11f55c872c137fa9fdc78cdc323e5cbaf0e2..9cdcc655655678825e5539a8267d31b1be466d41 100644 GIT binary patch delta 8025 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 t$!1c_6#oh?JRF?E->!uBe-z&HCFe;=!UrX<{k { - const sheet = context.workbook.worksheets.getItem("Sample"); - const salesTable = sheet.tables.getItem("SalesTable"); - const salesByQuarterBinding = context.workbook.bindings.add(salesTable.getRange(), "Table", "SalesByQuarter"); - salesByQuarterBinding.onDataChanged.add(onSalesDataChanged); + const sheet = context.workbook.worksheets.getItem("Sample"); - OfficeHelpers.UI.notify("The handler is registered.", "Change the value in one of the data cells and watch this message banner. (Be sure to complete the edit by pressing Enter or clicking in another cell.)"); + let chart = sheet.charts.getItemAt(0); + let categoryAxis = chart.axes.categoryAxis; + let valueAxis = chart.axes.valueAxis; + // Load to get display unit. + valueAxis.load("displayUnit"); + await context.sync(); + + OfficeHelpers.UI.notify("The vertical axis display unit is: " + valueAxis.displayUnit); }); -Excel.NamedItemCollection.add: +Excel.ChartAxis.showDisplayUnitLabel: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - const headerRange = sheet.getRange("A1:E1"); - sheet.names.add("ExpensesHeader", headerRange); - const namedItems = sheet.names.load("name, type"); - await context.sync(); + let chart = sheet.charts.getItemAt(0); + let axis = chart.axes.valueAxis; - let namedItemsList = `This workbook contains ${namedItems.items.length} named item(s):`; - for (let i = 0; i < namedItems.items.length; i++) { - namedItemsList += JSON.stringify(namedItems.items[i]); - } - OfficeHelpers.UI.notify(namedItemsList); + // Remove display unit. + axis.showDisplayUnitLabel = false; await context.sync(); }); +Excel.ChartLegendFormat.font: - |- - try { - await Excel.run(async (context) => { - - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - - const sheet = context.workbook.worksheets.getItem("Sample"); - - let expensesTable = sheet.tables.add("A1:D1", true); - expensesTable.name = "ExpensesTable"; - - expensesTable.getHeaderRowRange().values = [["DATE", "MERCHANT", "CATEGORY", "AMOUNT"]]; + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); - let newData = transactions.map(item => - [item.DATE, item.MERCHANT, item.CATEGORY, item.AMOUNT]); + let chart = sheet.charts.getItemAt(0); + chart.legend.visible = true; - expensesTable.rows.add(null, newData); + // Format the legend font. + let font = chart.legend.format.font; + font.bold = true; + font.color = "red"; + font.italic = true; + font.size = 15; + font.name = "Calibri"; + font.underline = "Single"; - sheet.names.add("TotalAmount", "=SUM(ExpensesTable[AMOUNT])"); + await context.sync(); + }); +Excel.ChartFill.setSolidColor: + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); - sheet.getRange("D11").values = [["=TotalAmount"]]; + let pointsCollection = sheet.charts.getItemAt(0).series.getItemAt(0).points; + let point = pointsCollection.getItemAt(2); - if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } + // Set color for chart point. + point.format.fill.setSolidColor('red'); - sheet.activate(); + await context.sync(); - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } -Excel.NamedItem.delete: + OfficeHelpers.UI.notify("Successfully set chart point color to red (for the third item in series 1)."); + }); +Excel.ChartSeries.delete: - |- - try { - await Excel.run(async (context) => { - - const sheet = context.workbook.worksheets.getItem("Sample"); - - sheet.names.getItem("TotalAmount").delete(); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); - // Replace the named item (TotalAmount) with the actual formula for TotalAmount to avoid displaying #NAME in the cell. - sheet.getRange("D11").values = [["=SUM(ExpensesTable[AMOUNT])"]]; + let seriesCollection = sheet.charts.getItemAt(0).series; + let series = seriesCollection.getItemAt(0); - await context.sync(); + // Delete the first series. + series.delete(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } -Excel.NamedItem.formula: + await context.sync(); + }); +Excel.ChartSeries.setValues: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - // Get the named item - const myNamedItem = sheet.names.getItemOrNullObject("MyRange"); - myNamedItem.load("name, formula"); - - await context.sync(); + let seriesCollection = sheet.charts.getItemAt(0).series; - if (myNamedItem.isNullObject) { - OfficeHelpers.UI.notify(`There is no named item with the name "MyRange".`); - } else { - - // Update named item to point to the second range - myNamedItem.formula = "=Sample!$B$10:$D$14"; + // Add new series. + let series = seriesCollection.add("New Product"); + let values = sheet.getRange("E2:E7"); - sheet.getRange("B10:D14").select(); + // Set the vertical values for the series. + series.setValues(values); + seriesCollection.load("count"); - await context.sync(); + await context.sync(); - OfficeHelpers.UI.notify(`Just updated the named item "${myNamedItem.name}" -- it's now located here: ${myNamedItem.formula}`); - } + OfficeHelpers.UI.notify("Number of series = " + seriesCollection.count); }); -Excel.SettingCollection.onSettingsChanged: +Excel.ChartSeries.markerStyle: - |- await Excel.run(async (context) => { - const settings = context.workbook.settings; - settings.onSettingsChanged.add(onChangedSetting); - OfficeHelpers.UI.notify("Handler registered", ""); + let sheet = context.workbook.worksheets.getItem("Sample"); + let salesTable = sheet.tables.getItem("SalesTable"); + let dataRange = sheet.getRange("A1:E7"); - await context.sync(); - }); -Excel.SettingCollection.add: - - |- - await Excel.run(async (context) => { - const settings = context.workbook.settings; - settings.onSettingsChanged.add(onChangedSetting); - OfficeHelpers.UI.notify("Handler registered", ""); + // 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"; + series0.markerForegroundColor = "black"; + series1.markerStyle = "Star"; + series1.markerForegroundColor = "black"; + series2.markerStyle = "X"; + series2.markerSize = 12; + series3.markerStyle = "Triangle"; + series3.markerBackgroundColor = "purple"; await context.sync(); }); -Excel.Setting.delete: +Excel.ChartSeries.markerSize: - |- await Excel.run(async (context) => { - const settings = context.workbook.settings; - let needsReview = settings.getItem("NeedsReview"); - needsReview.delete(); - needsReview = settings.getItemOrNullObject("NeedsReview"); + let sheet = context.workbook.worksheets.getItem("Sample"); + let salesTable = sheet.tables.getItem("SalesTable"); + let dataRange = sheet.getRange("A1:E7"); - await context.sync(); + // 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); - if (needsReview.isNullObject) { - OfficeHelpers.UI.notify("The setting has been deleted"); - } else { - OfficeHelpers.UI.notify("The setting was not deleted"); - } + // Set markers. + series0.markerStyle = "Dash"; + series0.markerForegroundColor = "black"; + series1.markerStyle = "Star"; + series1.markerForegroundColor = "black"; + series2.markerStyle = "X"; + series2.markerSize = 12; + series3.markerStyle = "Triangle"; + series3.markerBackgroundColor = "purple"; await context.sync(); }); -Excel.SettingCollection.getItemOrNullObject: +Excel.ChartSeries.markerForegroundColor: - |- await Excel.run(async (context) => { - const settings = context.workbook.settings; - let needsReview = settings.getItem("NeedsReview"); - needsReview.delete(); - needsReview = settings.getItemOrNullObject("NeedsReview"); + let sheet = context.workbook.worksheets.getItem("Sample"); + let salesTable = sheet.tables.getItem("SalesTable"); + let dataRange = sheet.getRange("A1:E7"); - await context.sync(); + // 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); - if (needsReview.isNullObject) { - OfficeHelpers.UI.notify("The setting has been deleted"); - } else { - OfficeHelpers.UI.notify("The setting was not deleted"); - } + // Set markers. + series0.markerStyle = "Dash"; + series0.markerForegroundColor = "black"; + series1.markerStyle = "Star"; + series1.markerForegroundColor = "black"; + series2.markerStyle = "X"; + series2.markerSize = 12; + series3.markerStyle = "Triangle"; + series3.markerBackgroundColor = "purple"; await context.sync(); }); -Excel.Range.getUsedRangeOrNullObject: +Excel.ChartSeries.markerBackgroundColor: - |- await Excel.run(async (context) => { + let sheet = context.workbook.worksheets.getItem("Sample"); + let salesTable = sheet.tables.getItem("SalesTable"); + let dataRange = sheet.getRange("A1:E7"); - const sheet = context.workbook.worksheets.getItem("Sample"); - const salesTable = sheet.tables.getItem("SalesTable"); - const dataRange = salesTable.getDataBodyRange(); + // 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); - // Pass true so only cells with values count as used - const usedDataRange = dataRange.getUsedRangeOrNullObject(true /* valuesOnly */); + // Set markers. + series0.markerStyle = "Dash"; + series0.markerForegroundColor = "black"; + series1.markerStyle = "Star"; + series1.markerForegroundColor = "black"; + series2.markerStyle = "X"; + series2.markerSize = 12; + series3.markerStyle = "Triangle"; + series3.markerBackgroundColor = "purple"; - //Must sync before reading value returned from *OrNullObject method/property. await context.sync(); + }); +Excel.ChartTrendline.type: + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); - if (usedDataRange.isNullObject) { - OfficeHelpers.UI.notify("Need Data to Make Chart", "To create a meaningful chart, 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"; - } + let seriesCollection = sheet.charts.getItemAt(0).series; + + // Get the trendline for series 1 and load its type property. + let trendline = seriesCollection.getItemAt(0).trendlines.getItem(0); + trendline.load("type"); await context.sync(); + + console.log("The trendline type is:" + trendline.type); }); -Excel.Range.getIntersectionOrNullObject: +Excel.ChartTrendlineCollection.add: - |- 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(); + const sheet = context.workbook.worksheets.getItem("Sample"); - // Asian and European teams have separate contests. - const asianSalesRange = sheet.getRange("A2:E4"); - const europeanSalesRange = sheet.getRange("A5:E7"); + let seriesCollection = sheet.charts.getItemAt(0).series; - // 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); + // Add a trendline. + seriesCollection.getItemAt(0).trendlines.add("Linear"); - // Must sync before you can test the output of *OrNullObject - // method/property. await context.sync(); + }); +Excel.ChartTrendlineFormat.line: + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); - 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 seriesCollection = sheet.charts.getItemAt(0).series; - 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"); - } + // Get the color of the chart trendline. + // In this example, it's #4472c4 which is blue. + 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); }); -Excel.Range.getUsedRange: - |- 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(); + const sheet = context.workbook.worksheets.getItem("Sample"); - // Asian and European teams have separate contests. - const asianSalesRange = sheet.getRange("A2:E4"); - const europeanSalesRange = sheet.getRange("A5:E7"); + let seriesCollection = sheet.charts.getItemAt(0).series; + let trendline = seriesCollection.getItemAt(0).trendlines.getItem(0); - // 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); + // Set format of the trendline to a solid, red line. + let line = trendline.format.line; + line.color = '#FF0000'; - // 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"); - } + console.log("The trendline color has been set to:" + line.color); + }); +Excel.NamedItemCollection.add: + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const headerRange = sheet.getRange("A1:E1"); + sheet.names.add("ExpensesHeader", headerRange); + const namedItems = sheet.names.load("name, type"); - 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(); + + let namedItemsList = `This workbook contains ${namedItems.items.length} named item(s):`; + for (let i = 0; i < namedItems.items.length; i++) { + namedItemsList += JSON.stringify(namedItems.items[i]); } + OfficeHelpers.UI.notify(namedItemsList); await context.sync(); }); -Excel.Range.set: - |- - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + try { + await Excel.run(async (context) => { - const range = sheet.getRange("B2:E2"); - range.set({ - format: { - fill: { - color: "#4472C4" - }, - font: { - name: "Verdana", - color: "white" - } + await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + + const sheet = context.workbook.worksheets.getItem("Sample"); + + let expensesTable = sheet.tables.add("A1:D1", true); + expensesTable.name = "ExpensesTable"; + + expensesTable.getHeaderRowRange().values = [["DATE", "MERCHANT", "CATEGORY", "AMOUNT"]]; + + let newData = transactions.map(item => + [item.DATE, item.MERCHANT, item.CATEGORY, item.AMOUNT]); + + expensesTable.rows.add(null, newData); + + sheet.names.add("TotalAmount", "=SUM(ExpensesTable[AMOUNT])"); + + sheet.getRange("D11").values = [["=TotalAmount"]]; + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); } - }) - range.format.autofitColumns(); - await context.sync(); - }); + + sheet.activate(); + + await context.sync(); + }); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } +Excel.CustomXmlPart.getXml: - |- 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"); + // 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(); - // Set properties based on the loaded and synced - // source range. - const targetRange = sheet.getRange("B7:E7"); - targetRange.set(sourceRange); - targetRange.format.autofitColumns(); + 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: +Excel.CustomXmlPart.id: - |- await Excel.run(async (context) => { @@ -338,7 +366,7 @@ Excel.CustomXmlPartCollection.add: await context.sync(); }); -Excel.CustomXmlPartCollection.getItem: +Excel.CustomXmlPart.setXml: - |- await Excel.run(async (context) => { const settings = context.workbook.settings; @@ -360,29 +388,35 @@ Excel.CustomXmlPartCollection.getItem: await context.sync(); }); -Excel.CustomXmlPart.getXml: +Excel.CustomXmlPart.delete: - |- await Excel.run(async (context) => { + const settings = context.workbook.settings; + const xmlPartIDSetting = settings.getItem("ContosoReviewXmlPartId").load("value"); - // 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"); + await context.sync(); + + let customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); const xmlBlob = customXmlPart.getXml(); + customXmlPart.delete(); + customXmlPart = context.workbook.customXmlParts.getItemOrNullObject(xmlPartIDSetting.value); await context.sync(); - const readableXml = addLineBreaksToXML(xmlBlob.value); - $("#display-xml").text(readableXml); + if (customXmlPart.isNullObject) { + $("#display-xml").text(`The XML part with the id ${xmlPartIDSetting.value} has been deleted.`); - // Store the XML part's ID in a setting. - const settings = context.workbook.settings; - settings.add("ContosoReviewXmlPartId", customXmlPart.id); + // 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); + } await context.sync(); }); -Excel.CustomXmlPart.id: +Excel.CustomXmlPartCollection.add: - |- await Excel.run(async (context) => { @@ -404,7 +438,7 @@ Excel.CustomXmlPart.id: await context.sync(); }); -Excel.CustomXmlPart.setXml: +Excel.CustomXmlPartCollection.getItem: - |- await Excel.run(async (context) => { const settings = context.workbook.settings; @@ -426,7 +460,7 @@ Excel.CustomXmlPart.setXml: await context.sync(); }); -Excel.CustomXmlPart.delete: +Excel.CustomXmlPartScopedCollection.getItemOrNullObject: - |- await Excel.run(async (context) => { const settings = context.workbook.settings; @@ -454,35 +488,7 @@ Excel.CustomXmlPart.delete: await context.sync(); }); -Excel.CustomXmlPartScopedCollection.getItemOrNullObject: - - |- - await Excel.run(async (context) => { - const settings = context.workbook.settings; - const xmlPartIDSetting = settings.getItem("ContosoReviewXmlPartId").load("value"); - - await context.sync(); - - let customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); - const xmlBlob = customXmlPart.getXml(); - customXmlPart.delete(); - customXmlPart = context.workbook.customXmlParts.getItemOrNullObject(xmlPartIDSetting.value); - - await context.sync(); - - if (customXmlPart.isNullObject) { - $("#display-xml").text(`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); - } - - await context.sync(); - }); -Excel.CustomXmlPartCollection.getByNamespace: +Excel.CustomXmlPartCollection.getByNamespace: - |- await Excel.run(async (context) => { $("#display-xml").text(""); @@ -572,522 +578,592 @@ Excel.CustomXmlPartScopedCollection.getOnlyItem: await context.sync(); }); -Excel.Worksheet.getPrevious: +Excel.DataValidation.errorAlert: - |- 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"); + const sheet = context.workbook.worksheets.getItem("Decision"); + const commentsRange = + sheet.tables.getItem("NameOptionsTable").columns.getItem("Comments").getDataBodyRange(); - await context.sync(); + // When you are developing, it is a good practice to + // clear the dataValidation object with each run of your code. + commentsRange.dataValidation.clear(); - let currentYear = currentSheet.name.substr(5, 4); - let previousYear = previousYearSheet.name.substr(5, 4); - OfficeHelpers.UI.notify("Two Year Tax Due Comparison", `Tax due for ${currentYear} was ${currentTaxDueRange.text[0][0]}\nTax due for ${previousYear} was ${previousTaxDueRange.text[0][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.Worksheet.getNext: +Excel.DataValidationRule .wholeNumber: - |- await Excel.run(async (context) => { - const sheets = context.workbook.worksheets; + const sheet = context.workbook.worksheets.getItem("Decision"); + const rankingRange = sheet.tables.getItem("NameOptionsTable").columns.getItem("Ranking").getDataBodyRange(); - // 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"); + // When you are developing, it is a good practice to + // clear the dataValidation object with each run of your code. + rankingRange.dataValidation.clear(); - firstSheet.load("name"); - lastSheet.load("name"); - firstTaxRateRange.load("text"); - lastTaxRateRange.load("text"); + let greaterThanZeroRule = { + wholeNumber: { + formula1: 0, + operator: Excel.DataValidationOperator.greaterThan + } + }; + rankingRange.dataValidation.rule = greaterThanZeroRule; - await context.sync(); + rankingRange.dataValidation.prompt = { + message: "Please enter a positive number.", + showPrompt: true, + title: "Positive numbers only." + }; - let firstYear = firstSheet.name.substr(5, 4); - let lastYear = lastSheet.name.substr(5, 4); - OfficeHelpers.UI.notify(`Tax Rate change from ${firstYear} to ${lastYear}`, `Tax rate for ${firstYear}: ${firstTaxRateRange.text[0][0]}\nTax rate for ${lastYear}: ${lastTaxRateRange.text[0][0]}`) + rankingRange.dataValidation.errorAlert = { + message: "Sorry, only positive numbers are allowed", + showAlert: true, + style: "Stop", + title: "Negative Number Entered" + }; await context.sync(); }); -Excel.WorksheetCollection.getFirst: +Excel.DataValidationRule .list: - |- 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"); + const sheet = context.workbook.worksheets.getItem("Decision"); + const nameRange = + sheet.tables.getItem("NameOptionsTable").columns.getItem("Baby Name").getDataBodyRange(); - firstSheet.load("name"); - lastSheet.load("name"); - firstTaxRateRange.load("text"); - lastTaxRateRange.load("text"); + // When you are developing, it is a good practice to + // clear the dataValidation object with each run of your code. + nameRange.dataValidation.clear(); - await context.sync(); + const nameSourceRange = context.workbook.worksheets.getItem("Names").getRange("A1:A3"); - let firstYear = firstSheet.name.substr(5, 4); - let lastYear = lastSheet.name.substr(5, 4); - OfficeHelpers.UI.notify(`Tax Rate change from ${firstYear} to ${lastYear}`, `Tax rate for ${firstYear}: ${firstTaxRateRange.text[0][0]}\nTax rate for ${lastYear}: ${lastTaxRateRange.text[0][0]}`) + let approvedListRule = { + list: { + inCellDropDown: true, + source: '=Names!$A$1:$A$3' + } + }; + nameRange.dataValidation.rule = approvedListRule; await context.sync(); }); -Excel.WorksheetCollection.getLast: +Excel.Workbook.properties: - |- await Excel.run(async (context) => { - const sheets = context.workbook.worksheets; + 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"; - // 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 docProperties = context.workbook.properties; - firstSheet.load("name"); - lastSheet.load("name"); - firstTaxRateRange.load("text"); - lastTaxRateRange.load("text"); + // 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(); - let firstYear = firstSheet.name.substr(5, 4); - let lastYear = lastSheet.name.substr(5, 4); - OfficeHelpers.UI.notify(`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(); + OfficeHelpers.UI.notify("Set the following document properties: title, subject, keywords, comments, category, manager, company."); }); -Excel.ConditionalFormatCollection.add: +Excel.Binding.onDataChanged: - |- 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; + const sheet = context.workbook.worksheets.getItem("Sample"); + const salesTable = sheet.tables.getItem("SalesTable"); + const salesByQuarterBinding = context.workbook.bindings.add(salesTable.getRange(), "Table", "SalesByQuarter"); + salesByQuarterBinding.onDataChanged.add(onSalesDataChanged); + + OfficeHelpers.UI.notify("The handler is registered.", "Change the value in one of the data cells and watch this message banner. (Be sure to complete the edit by pressing Enter or clicking in another cell.)"); await context.sync(); }); -Excel.ConditionalFormat.colorScale: +Excel.Runtime.enableEvents: - |- 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; + context.runtime.load("enableEvents"); + await context.sync(); + // check if events are enabled and toggle accordingly + const eventBoolean = !context.runtime.enableEvents + context.runtime.enableEvents = eventBoolean; + if (eventBoolean) { + console.log("Events are currently on."); + } else { + console.log("Events are currently off."); + } await context.sync(); }); -Excel.ColorScaleConditionalFormat.criteria: +Excel.SettingCollection.onSettingsChanged: - |- 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; + const settings = context.workbook.settings; + settings.onSettingsChanged.add(onChangedSetting); + OfficeHelpers.UI.notify("Handler registered", ""); await context.sync(); }); -Excel.ConditionalFormat.preset: +Excel.SettingCollection.add: - |- 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.presetCriteria); - conditionalFormat.preset.format.font.color = "white"; - conditionalFormat.preset.rule = { criterion: Excel.ConditionalFormatPresetCriterion.oneStdDevAboveAverage }; + const settings = context.workbook.settings; + settings.onSettingsChanged.add(onChangedSetting); + OfficeHelpers.UI.notify("Handler registered", ""); await context.sync(); }); -Excel.PresetCriteriaConditionalFormat.rule: +Excel.Table.onChanged: - |- 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.presetCriteria); - conditionalFormat.preset.format.font.color = "white"; - conditionalFormat.preset.rule = { criterion: Excel.ConditionalFormatPresetCriterion.oneStdDevAboveAverage }; + let table = context.workbook.tables.getItemAt(0); + table.onChanged.add(onChange); await context.sync(); + + OfficeHelpers.UI.notify("A handler has been registered for the onChanged event", + "Try changing a cell value in the table, and watch the console output."); }); +Excel.Table.onSelectionChanged: - |- 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"; + let table = context.workbook.tables.getItemAt(0); + table.onSelectionChanged.add(onSelectionChange); await context.sync(); + + OfficeHelpers.UI.notify("A handler has been registered for table onSelectionChanged event", + "Try changing a range selection in the table, and watch the console output."); }); -Excel.ConditionalPresetCriteriaRule.criterion: +Excel.TableSelectionChangedEventArgs.address: + - |- + 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); + }); + } +Excel.TableChangedEventArgs.worksheetId: + - |- + async function onChange(event) { + await Excel.run(async (context) => { + let table = context.workbook.tables.getItem(event.tableId); + let worksheet = context.workbook.worksheets.getItem(event.worksheetId); + worksheet.load("name"); + + await context.sync(); + + console.log("Handler for table collection onChanged event has been triggered. Data changed address : " + event.address); + console.log("Table Id : " + event.tableId); + console.log("Worksheet Id : " + worksheet.name); + }); + } +Excel.TableChangedEventArgs.tableId: + - |- + async function onChange(event) { + await Excel.run(async (context) => { + let table = context.workbook.tables.getItem(event.tableId); + let worksheet = context.workbook.worksheets.getItem(event.worksheetId); + worksheet.load("name"); + + await context.sync(); + + console.log("Handler for table collection onChanged event has been triggered. Data changed address : " + event.address); + console.log("Table Id : " + event.tableId); + console.log("Worksheet Id : " + worksheet.name); + }); + } +Excel.TableCollection.onChanged: - |- 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.presetCriteria); - conditionalFormat.preset.format.font.color = "white"; - conditionalFormat.preset.rule = { criterion: Excel.ConditionalFormatPresetCriterion.oneStdDevAboveAverage }; + let tables = context.workbook.tables; + tables.onChanged.add(onChange); await context.sync(); + + OfficeHelpers.UI.notify("A handler has been registered for the table collection onChanged event", + "Try changing cell values in the tables, and watch the console output."); }); -Excel.ConditionalFormat.dataBar: +Excel.WorksheetCollection.onDeactivated: - |- 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; + let sheets = context.workbook.worksheets; + sheets.onDeactivated.add(onDeactivate); await context.sync(); + + OfficeHelpers.UI.notify("A handler has been registered for the OnDeactivate event", + "Try selecting a different worksheet, and watch the console output."); }); -Excel.DataBarConditionalFormat.barDirection: +Excel.WorksheetCollection.onActivated: - |- 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; + let sheets = context.workbook.worksheets; + sheets.onActivated.add(onActivate); await context.sync(); + + OfficeHelpers.UI.notify("A handler has been registered for the OnActivate event", + "Try selecting a different worksheet, and watch the console output."); }); -Excel.ConditionalFormat.iconSet: +Excel.Worksheet.onChanged: - |- 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; + let sheet = context.workbook.worksheets.getItem("Sample"); + sheet.onChanged.add(onChange); - /* - 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. + await context.sync(); - 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 - 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", - } - ]; + OfficeHelpers.UI.notify("A handler has been registered for the onChanged event."); + }); +Excel.WorksheetAddedEventArgs.worksheetId: + - |- + 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.onAdded: + - |- + await Excel.run(async (context) => { + let sheet = context.workbook.worksheets; + sheet.onAdded.add(onWorksheetAdd); await context.sync(); + + OfficeHelpers.UI.notify("A handler has been registered for the OnAdded event", + "Try adding a worksheet, and watch the console output."); }); -Excel.IconSetConditionalFormat.style: +Excel.Worksheet.showGridlines: - |- 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; + const sheet = context.workbook.worksheets.getActiveWorksheet(); + sheet.showGridlines = true; - /* - 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. + await context.sync(); + }); +Excel.Range.set: + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); - 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 - 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", + const range = sheet.getRange("B2:E2"); + range.set({ + format: { + fill: { + color: "#4472C4" + }, + font: { + name: "Verdana", + color: "white" + } } - ]; - + }) + range.format.autofitColumns(); await context.sync(); }); -Excel.IconSetConditionalFormat.criteria: - |- 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. + const sourceRange = sheet.getRange("B2:E2"); + sourceRange.load("format/fill/color, format/font/name, format/font/color"); + await context.sync(); - 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 - 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", - } - ]; + // 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.NamedItem.delete: + - |- + try { + await Excel.run(async (context) => { + + const sheet = context.workbook.worksheets.getItem("Sample"); + + sheet.names.getItem("TotalAmount").delete(); + + // Replace the named item (TotalAmount) with the actual formula for TotalAmount to avoid displaying #NAME in the cell. + sheet.getRange("D11").values = [["=SUM(ExpensesTable[AMOUNT])"]]; + + await context.sync(); + + }); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } +Excel.DataPivotHierarchy.showAs: + - |- + 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.ConditionalIconCriterion.type: +Excel.ShowAsRule.baseItem: - |- 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; + 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"); - /* - 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. + farmDataHierarchy.load("showAs"); + wholesaleDataHierarchy.load("showAs"); + await context.sync(); - 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 - 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", - } - ]; + // 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"); + farmShowAs.baseItem = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm").items.getItem("A Farms"); + farmDataHierarchy.showAs = farmShowAs; + let wholesaleShowAs = wholesaleDataHierarchy.showAs; + wholesaleShowAs.calculation = Excel.ShowAsCalculation.differenceFrom; + wholesaleShowAs.baseField = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm"); + wholesaleShowAs.baseItem = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm").items.getItem("A Farms"); + wholesaleDataHierarchy.showAs = wholesaleShowAs; await context.sync(); }); -Excel.ConditionalIconCriterion.operator: +Excel.DataPivotHierarchy.name: - |- 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; + const dataHierarchies = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales").dataHierarchies + dataHierarchies.load("no-properties-needed"); + await context.sync(); - /* - 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. + dataHierarchies.items[0].name = "Farm Sales"; + dataHierarchies.items[1].name = "Wholesale"; + await context.sync(); + }); +Excel.PivotTable.delete: + - |- + await Excel.run(async (context) => { + context.workbook.worksheets.getItem("Pivot").pivotTables.getItem("Farm Sales").delete(); - 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 - 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.PivotTable.columnHierarchies: + - |- + 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) { + // ading 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: - |- 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" }; + 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.ConditionalIconCriterion.formula: +Excel.PivotTable.layout: - |- 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; + const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); + pivotTable.layout.load("layoutType"); + await context.sync(); - /* - 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. + // 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.PivotTableCollection.add: + - |- + await Excel.run(async (context) => { + const rangeToAnalyze = context.workbook.worksheets.getItem("Data").getRange("A1:E21"); + const rangeToPlacePivot = context.workbook.worksheets.getItem("Pivot").getRange("A2"); + context.workbook.worksheets.getItem("Pivot").pivotTables.add("Farm Sales", rangeToAnalyze, rangeToPlacePivot); - 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 - 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.PivotLayout.getDataBodyRange: + - |- + 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.PivotTable.filterHierarchies: + - |- + 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.WorkbookProtection.protect: + - |- + await Excel.run(async (context) => { + let workbook = context.workbook; + workbook.load("protection/protected"); await context.sync(); + + if (!workbook.protection.protected) { + workbook.protection.protect(); + } }); -Excel.ConditionalFormat.textComparison: - |- + let password = await passwordHandler(); + passwordHelper(password); 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" }; + let workbook = context.workbook; + workbook.load("protection/protected"); await context.sync(); + + if (!workbook.protection.protected) { + workbook.protection.protect(password); + } }); -Excel.TextConditionalFormat.format: +Excel.WorkbookProtection.unprotect: - |- 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" }; + let workbook = context.workbook; + workbook.protection.unprotect(); + }); + - |- + let password = await passwordHandler(); + passwordHelper(password); + await Excel.run(async (context) => { + let workbook = context.workbook; + workbook.protection.unprotect(password); + }); +Excel.WorksheetProtection.protect: + - |- + 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(); + } }); -Excel.TextConditionalFormat.rule: - |- + let password = await passwordHandler(); + passwordHelper(password); 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" }; + let activeSheet = context.workbook.worksheets.getActiveWorksheet(); + activeSheet.load("protection/protected"); await context.sync(); + + if (!activeSheet.protection.protected) { + activeSheet.protection.protect(null, password); + } }); -Excel.ConditionalTextComparisonRule.text: +Excel.WorksheetProtection.unprotect: + - |- + await Excel.run(async (context) => { + let activeSheet = context.workbook.worksheets.getActiveWorksheet(); + activeSheet.protection.unprotect(); + }); + - |- + let password = await passwordHandler(); + passwordHelper(password); + await Excel.run(async (context) => { + let activeSheet = context.workbook.worksheets.getActiveWorksheet(); + activeSheet.protection.unprotect(password); + }); +Excel.CellValueConditionalFormat.format: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - const range = sheet.getRange("B16:D18"); + const range = sheet.getRange("B21:E23"); const conditionalFormat = range.conditionalFormats - .add(Excel.ConditionalFormatType.containsText); - conditionalFormat.textComparison.format.font.color = "red"; - conditionalFormat.textComparison.rule = { operator: Excel.ConditionalTextOperator.contains, text: "Delayed" }; + .add(Excel.ConditionalFormatType.cellValue); + conditionalFormat.cellValue.format.font.color = "red"; + conditionalFormat.cellValue.rule = { formula1: "=0", operator: "LessThan" }; await context.sync(); }); -Excel.ConditionalFormat.cellValue: +Excel.CellValueConditionalFormat.rule: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1099,7 +1175,23 @@ Excel.ConditionalFormat.cellValue: await context.sync(); }); -Excel.CellValueConditionalFormat.format: +Excel.ColorScaleConditionalFormat.criteria: + - |- + 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.ConditionalCellValueRule.formula1: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1111,7 +1203,7 @@ Excel.CellValueConditionalFormat.format: await context.sync(); }); -Excel.CellValueConditionalFormat.rule: +Excel.ConditionalCellValueRule.operator: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1123,19 +1215,98 @@ Excel.CellValueConditionalFormat.rule: await context.sync(); }); -Excel.ConditionalCellValueRule.formula1: +Excel.ConditionalFormat.colorScale: + - |- + 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.ConditionalFormat.preset: + - |- + 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.presetCriteria); + conditionalFormat.preset.format.font.color = "white"; + conditionalFormat.preset.rule = { criterion: Excel.ConditionalFormatPresetCriterion.oneStdDevAboveAverage }; + + await context.sync(); + }); +Excel.ConditionalFormat.dataBar: + - |- + 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; + + await context.sync(); + }); +Excel.ConditionalFormat.iconSet: + - |- + 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 this method does below, 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.ConditionalFormat.textComparison: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - const range = sheet.getRange("B21:E23"); + const range = sheet.getRange("B16:D18"); const conditionalFormat = range.conditionalFormats - .add(Excel.ConditionalFormatType.cellValue); - conditionalFormat.cellValue.format.font.color = "red"; - conditionalFormat.cellValue.rule = { formula1: "=0", operator: "LessThan" }; + .add(Excel.ConditionalFormatType.containsText); + conditionalFormat.textComparison.format.font.color = "red"; + conditionalFormat.textComparison.rule = { operator: Excel.ConditionalTextOperator.contains, text: "Delayed" }; await context.sync(); }); -Excel.ConditionalCellValueRule.operator: +Excel.ConditionalFormat.cellValue: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1158,28 +1329,6 @@ Excel.ConditionalFormat.custom: await context.sync(); }); -Excel.CustomConditionalFormat.format: - - |- - 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.ConditionalFormatRule.formula: - - |- - 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.ConditionalFormat.type: - |- await Excel.run(async (context) => { @@ -1214,7 +1363,7 @@ Excel.ConditionalFormat.type: OfficeHelpers.UI.notify("None to display", "No conditional formats in workbook", "warning"); } }); -Excel.ConditionalFormatCollection.getItemAt: +Excel.ConditionalFormat.getRange: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1248,7 +1397,23 @@ Excel.ConditionalFormatCollection.getItemAt: OfficeHelpers.UI.notify("None to display", "No conditional formats in workbook", "warning"); } }); -Excel.ConditionalFormat.getRange: +Excel.ConditionalFormatCollection.add: + - |- + 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.ConditionalFormatCollection.getItemAt: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1293,406 +1458,625 @@ Excel.ConditionalFormatCollection.clearAll: $(".conditional-formats").hide(); }); -Excel.Range.hyperlink: +Excel.ConditionalFormatRule.formula: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Orders"); - - let productsRange = sheet.getRange("A3:A5"); - productsRange.load("values"); + 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.ConditionalIconCriterion.type: + - |- + 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; - // 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]; + /* + 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. - let hyperlink = { - textToDisplay: cellText, - screenTip: "Search Bing for '" + cellText + "'", - address: "https://www.bing.com/?q=" + cellText + 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 + 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", } - cellRange.hyperlink = hyperlink; - } + ]; await context.sync(); - - OfficeHelpers.UI.notify("Created a hyperlink to a URL for each of the products in the first table."); }); -Excel.RangeHyperlink.address: +Excel.ConditionalIconCriterion.operator: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Orders"); - - let productsRange = sheet.getRange("A3:A5"); - productsRange.load("values"); - - await context.sync(); + 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; - // 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]; + /* + 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. - let hyperlink = { - textToDisplay: cellText, - screenTip: "Search Bing for '" + cellText + "'", - address: "https://www.bing.com/?q=" + cellText + 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 + 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", } - cellRange.hyperlink = hyperlink; - } + ]; await context.sync(); - - OfficeHelpers.UI.notify("Created a hyperlink to a URL for each of the products in the first table."); }); -Excel.RangeHyperlink.screenTip: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Orders"); - - let productsRange = sheet.getRange("A3:A5"); - productsRange.load("values"); + 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.formula: + - |- + 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; - // 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]; + /* + 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. - let hyperlink = { - textToDisplay: cellText, - screenTip: "Search Bing for '" + cellText + "'", - address: "https://www.bing.com/?q=" + cellText + 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 + 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", } - cellRange.hyperlink = hyperlink; - } + ]; + + await context.sync(); + }); +Excel.ConditionalPresetCriteriaRule.criterion: + - |- + 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.presetCriteria); + conditionalFormat.preset.format.font.color = "white"; + conditionalFormat.preset.rule = { criterion: Excel.ConditionalFormatPresetCriterion.oneStdDevAboveAverage }; + + await context.sync(); + }); +Excel.ConditionalTextComparisonRule.text: + - |- + 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(); - - OfficeHelpers.UI.notify("Created a hyperlink to a URL for each of the products in the first table."); }); -Excel.RangeHyperlink.textToDisplay: +Excel.CustomConditionalFormat.format: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Orders"); + 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"; - let productsRange = sheet.getRange("A3:A5"); - productsRange.load("values"); + await context.sync(); + }); +Excel.DataBarConditionalFormat.barDirection: + - |- + 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; await context.sync(); + }); +Excel.IconSetConditionalFormat.style: + - |- + 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; - // 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]; + /* + 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. - let hyperlink = { - textToDisplay: cellText, - screenTip: "Search Bing for '" + cellText + "'", - address: "https://www.bing.com/?q=" + cellText + 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 + 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", } - cellRange.hyperlink = hyperlink; - } + ]; await context.sync(); - - OfficeHelpers.UI.notify("Created a hyperlink to a URL for each of the products in the first table."); }); -Excel.RangeHyperlink.documentReference: +Excel.IconSetConditionalFormat.criteria: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Orders"); - - let productsRange = sheet.getRange("A9:A11"); - productsRange.load("values"); - - await context.sync(); + 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; - // Create a hyperlink to a location within the workbook - // for each product name in the second table. - for (let i = 0; i < productsRange.values.length; i++) { - let cellRange = productsRange.getCell(i, 0); - let cellText = productsRange.values[i][0]; + /* + 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. - let hyperlink = { - textToDisplay: cellText, - screenTip: "Navigate to the '" + cellText + "' worksheet", - documentReference: cellText + "!A1" + 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 + 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", } - cellRange.hyperlink = hyperlink; - } + ]; await context.sync(); - - OfficeHelpers.UI.notify("Created a hyperlink to a location in this workbook for each of the products in the second table."); }); -Excel.RangeFormat.textOrientation: +Excel.PresetCriteriaConditionalFormat.rule: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - const range = sheet.getRange("B2:E2"); - - // Set textOrientation to either an integer between -90 and 90 - // or to 180 for vertically-oriented text. - range.format.textOrientation = 90; + const range = sheet.getRange("B2:M5"); + const conditionalFormat = range.conditionalFormats + .add(Excel.ConditionalFormatType.presetCriteria); + conditionalFormat.preset.format.font.color = "white"; + conditionalFormat.preset.rule = { criterion: Excel.ConditionalFormatPresetCriterion.oneStdDevAboveAverage }; await context.sync(); }); -Excel.WorksheetFreezePanes.freezeAt: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - - // Freeze the specified range in top-and-left-most pane of the worksheet. - sheet.freezePanes.freezeAt(sheet.getRange("H2:K5")); + 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.WorksheetFreezePanes.freezeColumns: +Excel.TextConditionalFormat.format: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - - // Freeze the first two columns in the worksheet. - sheet.freezePanes.freezeColumns(2); + 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.WorksheetFreezePanes.freezeRows: +Excel.TextConditionalFormat.rule: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - - // Freeze the top two rows in the worksheet. - sheet.freezePanes.freezeRows(2); + 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.WorksheetFreezePanes.getLocationOrNullObject: +Excel.Range.getIntersectionOrNullObject: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const frozenRange = sheet.freezePanes.getLocationOrNullObject(); - frozenRange.load("address"); + 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 (frozenRange.isNullObject) { - OfficeHelpers.UI.notify(`The worksheet does not contain a frozen pane.`); + if (asianContestRange.isNullObject) { + // See the declaration of this method for how to + // test this code path. + reportMissingData("Asian"); } else { - OfficeHelpers.UI.notify(`The address of the frozen range (cells that are frozen in the top-and-left-most pane) is "${frozenRange.address}"`); + 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.WorksheetFreezePanes.unfreeze: +Excel.Range.getUsedRange: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - sheet.freezePanes.unfreeze(); + 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.Worksheet.showGridlines: +Excel.Range.hyperlink: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - sheet.showGridlines = true; + const sheet = context.workbook.worksheets.getItem("Orders"); - await context.sync(); - }); -Excel.Worksheet.tabColor: - - |- - await Excel.run(async (context) => { - const activeSheet = context.workbook.worksheets.getActiveWorksheet(); - activeSheet.tabColor = "#FF0000"; + let productsRange = sheet.getRange("A3:A5"); + productsRange.load("values"); await context.sync(); - }); -Excel.ChartTrendlineCollection.add: - - |- - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - let seriesCollection = sheet.charts.getItemAt(0).series; + // 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]; - // Add a trendline. - seriesCollection.getItemAt(0).trendlines.add("Linear"); + let hyperlink = { + textToDisplay: cellText, + screenTip: "Search Bing for '" + cellText + "'", + address: "https://www.bing.com/?q=" + cellText + } + cellRange.hyperlink = hyperlink; + } await context.sync(); + + OfficeHelpers.UI.notify("Created a hyperlink to a URL for each of the products in the first table."); }); -Excel.ChartTrendline.type: +Excel.RangeHyperlink.address: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - let seriesCollection = sheet.charts.getItemAt(0).series; + const sheet = context.workbook.worksheets.getItem("Orders"); - // Get the trendline for series 1 and load its type property. - let trendline = seriesCollection.getItemAt(0).trendlines.getItem(0); - trendline.load("type"); + let productsRange = sheet.getRange("A3:A5"); + productsRange.load("values"); await context.sync(); - console.log("The trendline type is:" + trendline.type); - }); -Excel.ChartTrendlineFormat.line: - - |- - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - let seriesCollection = sheet.charts.getItemAt(0).series; + // 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]; - // Get the color of the chart trendline. - // In this example, it's #4472c4 which is blue. - let trendline = seriesCollection.getItemAt(0).trendlines.getItem(0); - let line = trendline.format.line; - line.load("color"); + let hyperlink = { + textToDisplay: cellText, + screenTip: "Search Bing for '" + cellText + "'", + address: "https://www.bing.com/?q=" + cellText + } + cellRange.hyperlink = hyperlink; + } await context.sync(); - console.log("The trendline color is:" + line.color); + OfficeHelpers.UI.notify("Created a hyperlink to a URL for each of the products in the first table."); }); +Excel.RangeHyperlink.screenTip: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - let seriesCollection = sheet.charts.getItemAt(0).series; - let trendline = seriesCollection.getItemAt(0).trendlines.getItem(0); + const sheet = context.workbook.worksheets.getItem("Orders"); - // Set format of the trendline to a solid, red line. - let line = trendline.format.line; - line.color = '#FF0000'; + let productsRange = sheet.getRange("A3:A5"); + productsRange.load("values"); await context.sync(); - console.log("The trendline color has been set to:" + line.color); - }); -Excel.ChartSeries.delete: - - |- - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - let seriesCollection = sheet.charts.getItemAt(0).series; - let series = seriesCollection.getItemAt(0); + // 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]; - // Delete the first series. - series.delete(); + let hyperlink = { + textToDisplay: cellText, + screenTip: "Search Bing for '" + cellText + "'", + address: "https://www.bing.com/?q=" + cellText + } + cellRange.hyperlink = hyperlink; + } await context.sync(); + + OfficeHelpers.UI.notify("Created a hyperlink to a URL for each of the products in the first table."); }); -Excel.ChartSeries.setValues: +Excel.RangeHyperlink.textToDisplay: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + const sheet = context.workbook.worksheets.getItem("Orders"); - let seriesCollection = sheet.charts.getItemAt(0).series; + let productsRange = sheet.getRange("A3:A5"); + productsRange.load("values"); - // Add new series. - let series = seriesCollection.add("New Product"); - let values = sheet.getRange("E2:E7"); + await context.sync(); - // Set the vertical values for the series. - series.setValues(values); - seriesCollection.load("count"); + // 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(); - OfficeHelpers.UI.notify("Number of series = " + seriesCollection.count); + OfficeHelpers.UI.notify("Created a hyperlink to a URL for each of the products in the first table."); }); -Excel.ChartAxis.displayUnit: +Excel.RangeHyperlink.documentReference: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + const sheet = context.workbook.worksheets.getItem("Orders"); - let chart = sheet.charts.getItemAt(0); - let categoryAxis = chart.axes.categoryAxis; - let valueAxis = chart.axes.valueAxis; + let productsRange = sheet.getRange("A9:A11"); + productsRange.load("values"); - // Load to get display unit. - valueAxis.load("displayUnit"); - await context.sync(); - OfficeHelpers.UI.notify("The vertical axis display unit is: " + valueAxis.displayUnit); + // Create a hyperlink to a location within the workbook + // for each product name in the second 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: "Navigate to the '" + cellText + "' worksheet", + documentReference: cellText + "!A1" + } + cellRange.hyperlink = hyperlink; + } + + await context.sync(); + + OfficeHelpers.UI.notify("Created a hyperlink to a location in this workbook for each of the products in the second table."); }); -Excel.ChartAxis.showDisplayUnitLabel: +Excel.Range.getUsedRangeOrNullObject: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - let chart = sheet.charts.getItemAt(0); - let axis = chart.axes.valueAxis; + const sheet = context.workbook.worksheets.getItem("Sample"); + const salesTable = sheet.tables.getItem("SalesTable"); + const dataRange = salesTable.getDataBodyRange(); - // Remove display unit. - axis.showDisplayUnitLabel = false; + // 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) { + OfficeHelpers.UI.notify("Need Data to Make Chart", "To create a meaningful chart, 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.ChartLegendFormat.font: +Excel.RangeFormat.textOrientation: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B2:E2"); - let chart = sheet.charts.getItemAt(0); - chart.legend.visible = true; - - // Format the legend font. - let font = chart.legend.format.font; - font.bold = true; - font.color = "red"; - font.italic = true; - font.size = 15; - font.name = "Calibri"; - font.underline = "Single"; + // Set textOrientation to either an integer between -90 and 90 + // or to 180 for vertically-oriented text. + range.format.textOrientation = 90; await context.sync(); }); -Excel.ChartFill.setSolidColor: +Excel.Setting.delete: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + const settings = context.workbook.settings; + let needsReview = settings.getItem("NeedsReview"); + needsReview.delete(); + needsReview = settings.getItemOrNullObject("NeedsReview"); - let pointsCollection = sheet.charts.getItemAt(0).series.getItemAt(0).points; - let point = pointsCollection.getItemAt(2); + await context.sync(); - // Set color for chart point. - point.format.fill.setSolidColor('red'); + if (needsReview.isNullObject) { + OfficeHelpers.UI.notify("The setting has been deleted"); + } else { + OfficeHelpers.UI.notify("The setting was not deleted"); + } await context.sync(); - - OfficeHelpers.UI.notify("Successfully set chart point color to red (for the third item in series 1)."); }); -Excel.Workbook.properties: +Excel.SettingCollection.getItemOrNullObject: - |- 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; + const settings = context.workbook.settings; + let needsReview = settings.getItem("NeedsReview"); + needsReview.delete(); + needsReview = settings.getItemOrNullObject("NeedsReview"); await context.sync(); - OfficeHelpers.UI.notify("Set the following document properties: title, subject, keywords, comments, category, manager, company."); + if (needsReview.isNullObject) { + OfficeHelpers.UI.notify("The setting has been deleted"); + } else { + OfficeHelpers.UI.notify("The setting was not deleted"); + } + + await context.sync(); }); Excel.Range.style: - |- @@ -1707,50 +2091,6 @@ Excel.Range.style: await context.sync(); }); -Excel.StyleCollection.getItem: - - |- - 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(); - - OfficeHelpers.UI.notify("Successfully added a new style with diagonal orientation to the Home tab ribbon."); - }); -Excel.StyleCollection.add: - - |- - 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(); - - OfficeHelpers.UI.notify("Successfully added a new style with diagonal orientation to the Home tab ribbon."); - }); Excel.Style.font: - |- await Excel.run(async (context) => { @@ -1798,254 +2138,87 @@ Excel.Style.load: console.log("Style locked: " + style.locked); }); Excel.Style.horizontalAlignment: - - |- - 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.TableSelectionChangedEventArgs.address: - - |- - 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); - }); - } -Excel.Table.onChanged: - - |- - await Excel.run(async (context) => { - let table = context.workbook.tables.getItemAt(0); - table.onChanged.add(onChange); - - await context.sync(); - - OfficeHelpers.UI.notify("A handler has been registered for the onChanged event", - "Try changing a cell value in the table, and watch the console output."); - }); -Excel.Table.onSelectionChanged: - - |- - await Excel.run(async (context) => { - let table = context.workbook.tables.getItemAt(0); - table.onSelectionChanged.add(onSelectionChange); - - await context.sync(); - - OfficeHelpers.UI.notify("A handler has been registered for table onSelectionChanged event", - "Try changing a range selection in the table, and watch the console output."); - }); -Excel.WorksheetCollection.onAdded: - - |- - await Excel.run(async (context) => { - let sheet = context.workbook.worksheets; - sheet.onAdded.add(onWorksheetAdd); - - await context.sync(); - - OfficeHelpers.UI.notify("A handler has been registered for the OnAdded event", - "Try adding a worksheet, and watch the console output."); - }); -Excel.Worksheet.onChanged: - - |- - await Excel.run(async (context) => { - let sheet = context.workbook.worksheets.getItem("Sample"); - sheet.onChanged.add(onChange); - - await context.sync(); - - OfficeHelpers.UI.notify("A handler has been registered for the onChanged event."); - }); -Excel.WorksheetAddedEventArgs.worksheetId: - - |- - 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.onDeactivated: - - |- - await Excel.run(async (context) => { - let sheets = context.workbook.worksheets; - sheets.onDeactivated.add(onDeactivate); - - await context.sync(); - - OfficeHelpers.UI.notify("A handler has been registered for the OnDeactivate event", - "Try selecting a different worksheet, and watch the console output."); - }); -Excel.WorksheetCollection.onActivated: - - |- - await Excel.run(async (context) => { - let sheets = context.workbook.worksheets; - sheets.onActivated.add(onActivate); - - await context.sync(); - - OfficeHelpers.UI.notify("A handler has been registered for the OnActivate event", - "Try selecting a different worksheet, and watch the console output."); - }); -Excel.ChartSeries.markerStyle: - - |- - 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); - - // Set markers. - series0.markerStyle = "Dash"; - series0.markerForegroundColor = "black"; - series1.markerStyle = "Star"; - series1.markerForegroundColor = "black"; - series2.markerStyle = "X"; - series2.markerSize = 12; - series3.markerStyle = "Triangle"; - series3.markerBackgroundColor = "purple"; - - await context.sync(); - }); -Excel.ChartSeries.markerSize: - - |- - 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); - - // Set markers. - series0.markerStyle = "Dash"; - series0.markerForegroundColor = "black"; - series1.markerStyle = "Star"; - series1.markerForegroundColor = "black"; - series2.markerStyle = "X"; - series2.markerSize = 12; - series3.markerStyle = "Triangle"; - series3.markerBackgroundColor = "purple"; - - await context.sync(); - }); -Excel.ChartSeries.markerForegroundColor: - - |- - 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); - - // Set markers. - series0.markerStyle = "Dash"; - series0.markerForegroundColor = "black"; - series1.markerStyle = "Star"; - series1.markerForegroundColor = "black"; - series2.markerStyle = "X"; - series2.markerSize = 12; - series3.markerStyle = "Triangle"; - series3.markerBackgroundColor = "purple"; - - await context.sync(); - }); -Excel.ChartSeries.markerBackgroundColor: - - |- - 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); - - // Set markers. - series0.markerStyle = "Dash"; - series0.markerForegroundColor = "black"; - series1.markerStyle = "Star"; - series1.markerForegroundColor = "black"; - series2.markerStyle = "X"; - series2.markerSize = 12; - series3.markerStyle = "Triangle"; - series3.markerBackgroundColor = "purple"; + - |- + 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.TableCollection.onChanged: +Excel.StyleCollection.getItem: - |- await Excel.run(async (context) => { - let tables = context.workbook.tables; - tables.onChanged.add(onChange); + 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(); - OfficeHelpers.UI.notify("A handler has been registered for the table collection onChanged event", - "Try changing cell values in the tables, and watch the console output."); + OfficeHelpers.UI.notify("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); -Excel.TableChangedEventArgs.worksheetId: +Excel.StyleCollection.add: - |- - async function onChange(event) { - await Excel.run(async (context) => { - let table = context.workbook.tables.getItem(event.tableId); - let worksheet = context.workbook.worksheets.getItem(event.worksheetId); - worksheet.load("name"); + await Excel.run(async (context) => { + let styles = context.workbook.styles; - await context.sync(); + // 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("Handler for table collection onChanged event has been triggered. Data changed address : " + event.address); - console.log("Table Id : " + event.tableId); - console.log("Worksheet Id : " + worksheet.name); - }); - } -Excel.TableChangedEventArgs.tableId: + OfficeHelpers.UI.notify("Successfully added a new style with diagonal orientation to the Home tab ribbon."); + }); +Excel.NamedItem.formula: - |- - async function onChange(event) { - await Excel.run(async (context) => { - let table = context.workbook.tables.getItem(event.tableId); - let worksheet = context.workbook.worksheets.getItem(event.worksheetId); - worksheet.load("name"); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + // Get the named item + const myNamedItem = sheet.names.getItemOrNullObject("MyRange"); + myNamedItem.load("name, formula"); + + await context.sync(); + + if (myNamedItem.isNullObject) { + OfficeHelpers.UI.notify(`There is no named item with the name "MyRange".`); + } else { + + // Update named item to point to the second range + myNamedItem.formula = "=Sample!$B$10:$D$14"; + + sheet.getRange("B10:D14").select(); await context.sync(); - console.log("Handler for table collection onChanged event has been triggered. Data changed address : " + event.address); - console.log("Table Id : " + event.tableId); - console.log("Worksheet Id : " + worksheet.name); - }); - } + OfficeHelpers.UI.notify(`Just updated the named item "${myNamedItem.name}" -- it's now located here: ${myNamedItem.formula}`); + } + }); Excel.Workbook.getActiveCell: - |- await Excel.run(async (context) => { @@ -2073,81 +2246,166 @@ Excel.Worksheet.copy: console.log("'" + sampleSheet.name + "' was copied to '" + copiedSheet.name + "'") }); -Excel.WorksheetProtection.protect: +Excel.WorksheetFreezePanes.freezeAt: - |- await Excel.run(async (context) => { - let activeSheet = context.workbook.worksheets.getActiveWorksheet(); - activeSheet.load("protection/protected"); + const sheet = context.workbook.worksheets.getItem("Sample"); + + // Freeze the specified range in top-and-left-most pane of the worksheet. + sheet.freezePanes.freezeAt(sheet.getRange("H2:K5")); await context.sync(); + }); +Excel.WorksheetFreezePanes.freezeColumns: + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); - if (!activeSheet.protection.protected) { - activeSheet.protection.protect(); - } + // Freeze the first two columns in the worksheet. + sheet.freezePanes.freezeColumns(2); + + await context.sync(); }); +Excel.WorksheetFreezePanes.freezeRows: - |- - let password = await passwordHandler(); - passwordHelper(password); await Excel.run(async (context) => { - let activeSheet = context.workbook.worksheets.getActiveWorksheet(); - activeSheet.load("protection/protected"); + const sheet = context.workbook.worksheets.getItem("Sample"); + + // Freeze the top two rows in the worksheet. + sheet.freezePanes.freezeRows(2); + + await context.sync(); + }); +Excel.WorksheetFreezePanes.getLocationOrNullObject: + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const frozenRange = sheet.freezePanes.getLocationOrNullObject(); + frozenRange.load("address"); await context.sync(); - if (!activeSheet.protection.protected) { - activeSheet.protection.protect(null, password); + if (frozenRange.isNullObject) { + OfficeHelpers.UI.notify(`The worksheet does not contain a frozen pane.`); + } else { + OfficeHelpers.UI.notify(`The address of the frozen range (cells that are frozen in the top-and-left-most pane) is "${frozenRange.address}"`); } }); -Excel.WorksheetProtection.unprotect: +Excel.WorksheetFreezePanes.unfreeze: - |- await Excel.run(async (context) => { - let activeSheet = context.workbook.worksheets.getActiveWorksheet(); - activeSheet.protection.unprotect(); + const sheet = context.workbook.worksheets.getItem("Sample"); + sheet.freezePanes.unfreeze(); + + await context.sync(); }); +Excel.Worksheet.getPrevious: - |- - let password = await passwordHandler(); - passwordHelper(password); await Excel.run(async (context) => { - let activeSheet = context.workbook.worksheets.getActiveWorksheet(); - activeSheet.protection.unprotect(password); + 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); + OfficeHelpers.UI.notify("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.WorkbookProtection.protect: +Excel.Worksheet.getNext: - |- await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.load("protection/protected"); + 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(); - if (!workbook.protection.protected) { - workbook.protection.protect(); - } + let firstYear = firstSheet.name.substr(5, 4); + let lastYear = lastSheet.name.substr(5, 4); + OfficeHelpers.UI.notify(`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.getFirst: - |- - let password = await passwordHandler(); - passwordHelper(password); await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.load("protection/protected"); + 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(); - if (!workbook.protection.protected) { - workbook.protection.protect(password); - } + let firstYear = firstSheet.name.substr(5, 4); + let lastYear = lastSheet.name.substr(5, 4); + OfficeHelpers.UI.notify(`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.WorkbookProtection.unprotect: +Excel.WorksheetCollection.getLast: - |- await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.protection.unprotect(); + 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); + OfficeHelpers.UI.notify(`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.tabColor: - |- - let password = await passwordHandler(); - passwordHelper(password); await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.protection.unprotect(password); + const activeSheet = context.workbook.worksheets.getActiveWorksheet(); + activeSheet.tabColor = "#FF0000"; + + await context.sync(); }); Word.InlinePicture.getBase64ImageSrc: - |- diff --git a/yarn.lock b/yarn.lock index 1ec731fdc..3e4ff00dd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,6 +5,7 @@ "@microsoft/office-js-helpers@^0.5.0": version "0.5.0" resolved "https://registry.yarnpkg.com/@microsoft/office-js-helpers/-/office-js-helpers-0.5.0.tgz#1afa7b0abe0c82b537932f947cd0674c3cd1af2b" + integrity sha1-Gvp7Cr4MgrU3ky+UfNBnTDzRrys= dependencies: "@types/jquery" "^2.0.39" "@types/lodash" "^4.14.50" @@ -15,40 +16,49 @@ "@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= "@types/jquery@^2.0.39": version "2.0.41" resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-2.0.41.tgz#b87ba051011f99edbe586d8f97282e7786e01a6d" + integrity sha1-uHugUQEfme2+WG2Plygud4bgGm0= "@types/js-yaml@3.5.29": version "3.5.29" resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.5.29.tgz#29f4dd9314fbccb080d8bd84b9c23811ec5090c2" + integrity sha1-KfTdkxT7zLCA2L2EucI4EexQkMI= "@types/lodash@4.14.54", "@types/lodash@^4.14.50": version "4.14.54" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.54.tgz#287dbbcd97d5da69c25ca99fb5afa81c4839b7fa" + integrity sha1-KH27zZfV2mnCXKmfta+oHEg5t/o= "@types/node@*", "@types/node@7.0.7": version "7.0.7" resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.7.tgz#92637c6c4844bfc9a0a686323e38f3e9319118c2" + integrity sha1-kmN8bEhEv8mgpoYyPjjz6TGRGMI= "@types/office-js@^0.0.37": version "0.0.37" resolved "https://registry.yarnpkg.com/@types/office-js/-/office-js-0.0.37.tgz#fba3ba06ffd9f4b83de0bbe66770245cd223b0da" + integrity sha1-+6O6Bv/Z9Lg94LvmZ3AkXNIjsNo= "@types/shelljs@0.7.0": version "0.7.0" resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.7.0.tgz#229c157c6bc1e67d6b990e6c5e18dbd2ff58cff0" + integrity sha1-IpwVfGvB5n1rmQ5sXhjb0v9Yz/A= dependencies: "@types/node" "*" abbrev@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== ajv@^4.9.1: version "4.11.8" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + integrity sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY= dependencies: co "^4.6.0" json-stable-stringify "^1.0.1" @@ -56,24 +66,29 @@ ajv@^4.9.1: ansi-align@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-1.1.0.tgz#2f0c1658829739add5ebb15e6b0c6e3423f016ba" + integrity sha1-LwwWWIKXOa3V67FeawxuNCPwFro= dependencies: string-width "^1.0.1" 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= aproba@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== are-we-there-yet@~1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + integrity sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0= dependencies: delegates "^1.0.0" readable-stream "^2.0.6" @@ -81,36 +96,44 @@ are-we-there-yet@~1.1.2: argparse@^1.0.7: version "1.0.9" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + integrity sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY= dependencies: sprintf-js "~1.0.2" asn1@~0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + integrity sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y= 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= assert-plus@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + integrity sha1-104bh+ev/A24qttwIfP+SBAasjQ= 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.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + integrity sha1-FDQt0428yU0OW4fXY81jYSwOeU8= aws4@^1.2.1: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + integrity sha1-g+9cqGCysy5KDe7e6MdxudtXRx4= babel-code-frame@^6.20.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" + integrity sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ= dependencies: chalk "^1.1.0" esutils "^2.0.2" @@ -119,20 +142,24 @@ babel-code-frame@^6.20.0: balanced-match@^0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg= 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.1" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + integrity sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40= dependencies: tweetnacl "^0.14.3" 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" @@ -140,22 +167,26 @@ binary@~0.3.0: bindings@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.2.1.tgz#14ad6113812d2d37d72e67b4cacb4bb726505f11" + integrity sha1-FK1hE4EtLTfXLme0ystLtyZQXxE= block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= dependencies: inherits "~2.0.0" boom@2.x.x: version "2.10.1" resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + integrity sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8= dependencies: hoek "2.x.x" boxen@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.0.0.tgz#b2694baf1f605f708ff0177c12193b22f29aaaab" + integrity sha1-smlLrx9gX3CP8Bd8Ehk7IvKaqqs= dependencies: ansi-align "^1.1.0" camelcase "^4.0.0" @@ -168,6 +199,7 @@ boxen@^1.0.0: brace-expansion@^1.0.0: version "1.1.6" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" + integrity sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk= dependencies: balanced-match "^0.4.1" concat-map "0.0.1" @@ -175,6 +207,7 @@ brace-expansion@^1.0.0: brace-expansion@^1.1.7: version "1.1.8" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" + integrity sha1-wHshHHyVLsH479Uad+8NHTmQopI= dependencies: balanced-match "^1.0.0" concat-map "0.0.1" @@ -182,28 +215,34 @@ brace-expansion@^1.1.7: buffers@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" + integrity sha1-skV5w77U1tOWru5tmorn9Ugqt7s= camelcase@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.0.0.tgz#8b0f90d44be5e281b903b9887349b92595ef07f2" + integrity sha1-iw+Q1Evl4oG5A7mIc0m5JZXvB/I= capture-stack-trace@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" + integrity sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0= 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" + integrity sha1-XqtQsor+WAdNDVgpE4iCi15fvJg= dependencies: traverse ">=0.3.0 <0.4" chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1: 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" @@ -214,48 +253,58 @@ chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1: 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-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= 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= co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= 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= colors@1.1.2, colors@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= combined-stream@^1.0.5, combined-stream@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + integrity sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk= dependencies: delayed-stream "~1.0.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= configstore@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.0.0.tgz#e1b8669c1803ccc50b545e92f8e6e79aa80e0196" + integrity sha1-4bhmnBgDzMULVF6S+ObnmqgOAZY= dependencies: dot-prop "^4.1.0" graceful-fs "^4.1.2" @@ -267,24 +316,29 @@ configstore@^3.0.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= core-js@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" + integrity sha1-TekR5mew6ukSTjQlS1OupvxhjT4= 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-async@^2.1.1: version "2.2.5" resolved "https://registry.yarnpkg.com/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz#845ff0c0834a3ded9d160daca6d390906bb288cc" + integrity sha1-hF/wwINKPe2dFg2sptOQkGuyiMw= dependencies: lru-cache "^4.0.0" which "^1.2.8" @@ -292,76 +346,92 @@ cross-spawn-async@^2.1.1: cryptiles@2.x.x: version "2.0.5" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + integrity sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g= dependencies: boom "2.x.x" 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= 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@^2.2.0: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" deep-extend@~0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" + integrity sha1-7+QRPQgIX05vlod1mBD4B0aeIlM= 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= detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= diff@^3.0.1: version "3.2.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" + integrity sha1-yc45Okt8vQsFinJck98pkCeGj/k= dot-prop@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.1.1.tgz#a8493f0b7b5eeec82525b5c7587fa7de7ca859c1" + integrity sha1-qEk/C3te7sglJbXHWH+n3nyoWcE= dependencies: is-obj "^1.0.0" duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= ecc-jsbn@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + integrity sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU= dependencies: jsbn "~0.1.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= esprima@^2.6.0: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= excel@^0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/excel/-/excel-0.1.7.tgz#00a88e6fed5fc06f44a4aaf6f88f65f85a93c0bc" + integrity sha1-AKiOb+1fwG9EpKr2+I9l+FqTwLw= dependencies: libxmljs "~0.18.0" node-promise "~0.5.3" @@ -371,6 +441,7 @@ excel@^0.1.7: execa@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.4.0.tgz#4eb6467a36a095fabb2970ff9d5e3fb7bce6ebc3" + integrity sha1-TrZGejaglfq7KXD/nV4/t7zm68M= dependencies: cross-spawn-async "^2.1.1" is-stream "^1.1.0" @@ -382,28 +453,34 @@ execa@^0.4.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= extend@~3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + integrity sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ= extsprintf@1.3.0, extsprintf@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= findup-sync@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16" + integrity sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY= dependencies: glob "~5.0.0" 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.1.1: version "2.1.4" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + integrity sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE= dependencies: asynckit "^0.4.0" combined-stream "^1.0.5" @@ -412,10 +489,12 @@ form-data@~2.1.1: 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-ignore@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" + integrity sha1-nDHa40dnAY/h0kmyTa2mfQktoQU= dependencies: fstream "^1.0.0" inherits "2" @@ -424,6 +503,7 @@ fstream-ignore@^1.0.5: fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: version "1.0.11" resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE= dependencies: graceful-fs "^4.1.2" inherits "~2.0.0" @@ -433,6 +513,7 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: fstream@~0.1.21: version "0.1.31" resolved "https://registry.yarnpkg.com/fstream/-/fstream-0.1.31.tgz#7337f058fbbbbefa8c9f561a28cab0849202c988" + integrity sha1-czfwWPu7vvqMn1YaKMqwhJICyYg= dependencies: graceful-fs "~3.0.2" inherits "~2.0.0" @@ -442,6 +523,7 @@ fstream@~0.1.21: 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" @@ -455,16 +537,19 @@ gauge@~2.7.3: 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= 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.0.5, glob@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" + integrity sha1-gFIR3wT6rxxjo2ADBs31reULLsg= dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -476,6 +561,7 @@ glob@^7.0.0, glob@^7.0.5, glob@^7.1.1: glob@~5.0.0: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= dependencies: inflight "^1.0.4" inherits "2" @@ -486,6 +572,7 @@ glob@~5.0.0: 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" @@ -502,20 +589,24 @@ got@^6.7.1: graceful-fs@^4.1.11, graceful-fs@^4.1.2: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg= graceful-fs@~3.0.2: version "3.0.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" + integrity sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg= dependencies: natives "^1.1.0" har-schema@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + integrity sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4= har-validator@~4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + integrity sha1-M0gdDxu/9gDdID11gSpqX7oALio= dependencies: ajv "^4.9.1" har-schema "^1.0.5" @@ -523,16 +614,19 @@ har-validator@~4.2.1: 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-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= hawk@3.1.3, hawk@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + integrity sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ= dependencies: boom "2.x.x" cryptiles "2.x.x" @@ -542,10 +636,12 @@ hawk@3.1.3, hawk@~3.1.3: hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + integrity sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0= http-signature@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + integrity sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8= dependencies: assert-plus "^0.2.0" jsprim "^1.2.2" @@ -554,10 +650,12 @@ http-signature@~1.1.0: imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 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" @@ -565,72 +663,89 @@ inflight@^1.0.4: inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= ini@~1.3.0: version "1.3.4" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" + integrity sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4= interpret@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c" + integrity sha1-1Xn7f2k7hYAElHrzn6DbSfeVYCw= 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-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: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= 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-retry-allowed@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" + integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ= 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-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" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= isexe@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" + integrity sha1-NvPiLmB1CSD15yQaR2qMakInWtA= 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@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" + integrity sha1-COnxMkhKLEWjCQfp3E1VZ7fxFNc= js-yaml@3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" + integrity sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A= dependencies: argparse "^1.0.7" esprima "^2.6.0" @@ -638,28 +753,34 @@ js-yaml@3.7.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-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-stable-stringify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= dependencies: jsonify "~0.0.0" 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= jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= 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" @@ -669,32 +790,43 @@ jsprim@^1.2.2: latest-version@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.0.0.tgz#3104f008c0c391084107f85a344bc61e38970649" + integrity sha1-MQTwCMDDkQhBB/haNEvGHjiXBkk= dependencies: package-json "^3.0.0" lazy-req@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-2.0.0.tgz#c9450a363ecdda2e6f0c70132ad4f37f8f06f2b4" + integrity sha1-yUUKNj7N2i5vDHATKtTzf48G8rQ= libxmljs@~0.18.0: version "0.18.7" resolved "https://registry.yarnpkg.com/libxmljs/-/libxmljs-0.18.7.tgz#3673eb17c74cbaffdef9f33cb83ddd82a25055b7" + integrity sha1-NnPrF8dMuv/e+fM8uD3dgqJQVbc= dependencies: bindings "1.2.1" nan "~2.5.0" node-pre-gyp "~0.6.32" -lodash@4.17.4, lodash@^4.17.4: +lodash@4.17.5: + version "4.17.5" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" + integrity sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw== + +lodash@^4.17.4: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + integrity sha1-eCA6TRwyiuHYbcpkYONptX9AVa4= lowercase-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" + integrity sha1-TjNms55/VFfjXxMkvfb4jQv8cwY= lru-cache@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" + integrity sha1-HRdnnAac2l0ECZGgnbwsDbN35V4= dependencies: pseudomap "^1.0.1" yallist "^2.0.0" @@ -702,6 +834,7 @@ lru-cache@^4.0.0: match-stream@~0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/match-stream/-/match-stream-0.0.2.tgz#99eb050093b34dffade421b9ac0b410a9cfa17cf" + integrity sha1-mesFAJOzTf+t5CG5rAtBCpz6F88= dependencies: buffers "~0.1.1" readable-stream "~1.0.0" @@ -709,58 +842,70 @@ match-stream@~0.0.2: mime-db@~1.30.0: version "1.30.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" + integrity sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE= mime-types@^2.1.12, mime-types@~2.1.7: version "2.1.17" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" + integrity sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo= dependencies: mime-db "~1.30.0" "minimatch@2 || 3", minimatch@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" + integrity sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q= dependencies: brace-expansion "^1.0.0" minimatch@^3.0.0: 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@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= mkdirp@0.5, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= dependencies: minimist "0.0.8" ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= nan@~2.5.0: version "2.5.1" resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2" + integrity sha1-1bAWkSUzJql6K77p5hxV2NYDUeI= natives@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.0.tgz#e9ff841418a6b2ec7a495e939984f78f163e6e31" + integrity sha1-6f+EFBimsux6SV6TmYT3jxY+bjE= node-pre-gyp@~0.6.32: version "0.6.39" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" + integrity sha512-OsJV74qxnvz/AMGgcfZoDaeDXKD3oY3QVIbBmwszTFkRisTSXbMQyn4UWzUMOtA5SVhrBZOTp0wcoSBgfMfMmQ== dependencies: detect-libc "^1.0.2" hawk "3.1.3" @@ -777,10 +922,12 @@ node-pre-gyp@~0.6.32: node-promise@~0.5.3: version "0.5.12" resolved "https://registry.yarnpkg.com/node-promise/-/node-promise-0.5.12.tgz#b0acf9bc2229a76407c077b926592f99b3b4e1f1" + integrity sha1-sKz5vCIpp2QHwHe5JlkvmbO04fE= 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" @@ -790,6 +937,7 @@ node-status@1.0.0: nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= dependencies: abbrev "1" osenv "^0.1.4" @@ -797,12 +945,14 @@ nopt@^4.0.1: npm-run-path@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-1.0.0.tgz#f5c32bf595fe81ae927daec52e82f8b000ac3c8f" + integrity sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8= dependencies: path-key "^1.0.0" npmlog@^4.0.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" @@ -812,28 +962,34 @@ npmlog@^4.0.2: 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.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + integrity sha1-Rqarfwrq2N6unsBWV4C31O/rnUM= object-assign@^4.0.1, 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, once@^1.3.3: 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= optimist@~0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= dependencies: minimist "~0.0.1" wordwrap "~0.0.2" @@ -841,14 +997,17 @@ optimist@~0.6.0: 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-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: version "0.1.4" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" + integrity sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ= dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.0" @@ -856,10 +1015,12 @@ osenv@^0.1.4: "over@>= 0.0.5 < 1": version "0.0.5" resolved "https://registry.yarnpkg.com/over/-/over-0.0.5.tgz#f29852e70fd7e25f360e013a8ec44c82aedb5708" + integrity sha1-8phS5w/X4l82DgE6jsRMgq7bVwg= package-json@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/package-json/-/package-json-3.1.0.tgz#ce281900fe8052150cc6709c6c006c18fdb2f379" + integrity sha1-zigZAP6AUhUMxnCcbABsGP2y83k= dependencies: got "^6.7.1" registry-auth-token "^3.0.1" @@ -869,34 +1030,42 @@ package-json@^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-key@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/path-key/-/path-key-1.0.0.tgz#5d53d578019646c0d68800db4e146e6bdc2ac7af" + integrity sha1-XVPVeAGWRsDWiADbThRua9wqx68= path-parse@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + integrity sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME= performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + integrity sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU= 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" + integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M= pseudomap@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= pullstream@~0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/pullstream/-/pullstream-0.4.1.tgz#d6fb3bf5aed697e831150eb1002c25a3f8ae1314" + integrity sha1-1vs79a7Wl+gxFQ6xACwlo/iuExQ= dependencies: over ">= 0.0.5 < 1" readable-stream "~1.0.31" @@ -906,14 +1075,17 @@ pullstream@~0.4.0: punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= qs@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + integrity sha1-E+JtKK1rD/qpExLNO/cI7TUecjM= rc@^1.0.1, rc@^1.1.6: version "1.1.7" resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.7.tgz#c5ea564bb07aff9fd3a5b32e906c1d3a65940fea" + integrity sha1-xepWS7B6/5/TpbMukGwdOmWUD+o= dependencies: deep-extend "~0.4.0" ini "~1.3.0" @@ -923,6 +1095,7 @@ rc@^1.0.1, rc@^1.1.6: rc@^1.1.7: version "1.2.2" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077" + integrity sha1-2M6ctX6NZNnHut2YdsfDTL48cHc= dependencies: deep-extend "~0.4.0" ini "~1.3.0" @@ -932,6 +1105,7 @@ rc@^1.1.7: readable-stream@^2.0.6, readable-stream@^2.1.4: version "2.3.3" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" + integrity sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -944,6 +1118,7 @@ readable-stream@^2.0.6, readable-stream@^2.1.4: readable-stream@~1.0.0, readable-stream@~1.0.31: version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= dependencies: core-util-is "~1.0.0" inherits "~2.0.1" @@ -953,24 +1128,28 @@ readable-stream@~1.0.0, readable-stream@~1.0.31: 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" registry-auth-token@^3.0.1: version "3.1.0" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.1.0.tgz#997c08256e0c7999837b90e944db39d8a790276b" + integrity sha1-mXwIJW4MeZmDe5DpRNs52KeQJ2s= dependencies: rc "^1.1.6" 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.81.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + integrity sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA= dependencies: aws-sign2 "~0.6.0" aws4 "^1.2.1" @@ -998,12 +1177,14 @@ request@2.81.0: resolve@^1.1.6, resolve@^1.1.7: version "1.3.2" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.2.tgz#1f0442c9e0cbb8136e87b9305f932f46c7f28235" + integrity sha1-HwRCyeDLuBNuh7kwX5MvRsfygjU= dependencies: path-parse "^1.0.5" 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" @@ -1011,54 +1192,65 @@ restore-cursor@^1.0.1: rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== dependencies: glob "^7.0.5" rimraf@2.5.4: version "2.5.4" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" + integrity sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ= dependencies: glob "^7.0.5" rxjs@5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.2.0.tgz#db537de8767c05fa73721587a29e0085307d318b" + integrity sha1-21N96HZ8BfpzchWHop4AhTB9MYs= dependencies: symbol-observable "^1.0.1" safe-buffer@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" + integrity sha1-0mPKVGls2KMGtcplUekt5XkY++c= safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + integrity sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg== 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@^5.0.3, semver@^5.1.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= semver@^5.3.0: version "5.4.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" + integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg== 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.2 < 2", setimmediate@~1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= shelljs@0.7.7: version "0.7.7" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1" + integrity sha1-svXHfvlxSPS09uImguELuoZnz/E= dependencies: glob "^7.0.0" interpret "^1.0.0" @@ -1067,30 +1259,36 @@ shelljs@0.7.7: signal-exit@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= "slice-stream@>= 1.0.0 < 2": version "1.0.0" resolved "https://registry.yarnpkg.com/slice-stream/-/slice-stream-1.0.0.tgz#5b33bd66f013b1a7f86460b03d463dec39ad3ea0" + integrity sha1-WzO9ZvATsaf4ZGCwPUY97DmtPqA= dependencies: readable-stream "~1.0.31" slide@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= sntp@1.x.x: version "1.0.9" resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + integrity sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg= dependencies: hoek "2.x.x" 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.13.1" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" + integrity sha1-US322mKHFEMW3EwY/hzx2UBzm+M= dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -1105,6 +1303,7 @@ sshpk@^1.7.0: string-width@^1.0.1, string-width@^1.0.2: 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" @@ -1113,6 +1312,7 @@ string-width@^1.0.1, string-width@^1.0.2: string-width@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" + integrity sha1-Y1xUNsxypuDDh87KJ41OLuxSaH4= dependencies: is-fullwidth-code-point "^2.0.0" strip-ansi "^3.0.0" @@ -1120,42 +1320,51 @@ string-width@^2.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" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= string_decoder@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" + integrity sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ== dependencies: safe-buffer "~5.1.0" stringstream@~0.0.4: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + integrity sha1-TkhM1N5aC7vuGORjB3EKioFiGHg= strip-ansi@^3.0.0, strip-ansi@^3.0.1: 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-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= 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= symbol-observable@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" + integrity sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0= tar-pack@^3.4.0: version "3.4.1" resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" + integrity sha512-PPRybI9+jM5tjtCbN2cxmmRU7YmqT3Zv/UDy48tAh2XRkLa9bAORtSWLkVc13+GJF+cdTh1yEnHEk3cpTaL5Kg== dependencies: debug "^2.2.0" fstream "^1.0.10" @@ -1169,6 +1378,7 @@ tar-pack@^3.4.0: tar@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE= dependencies: block-stream "*" fstream "^1.0.2" @@ -1177,26 +1387,31 @@ tar@^2.2.1: term-size@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/term-size/-/term-size-0.1.1.tgz#87360b96396cab5760963714cda0d0cbeecad9ca" + integrity sha1-hzYLljlsq1dgljcUzaDQy+7K2co= dependencies: execa "^0.4.0" 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= tough-cookie@~2.3.0: version "2.3.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" + integrity sha1-C2GKVWW23qkL80JdBNVe3EdadWE= dependencies: punycode "^1.4.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= tslint@4.5.1: version "4.5.1" resolved "https://registry.yarnpkg.com/tslint/-/tslint-4.5.1.tgz#05356871bef23a434906734006fc188336ba824b" + integrity sha1-BTVocb7yOkNJBnNABvwYgza6gks= dependencies: babel-code-frame "^6.20.0" colors "^1.1.2" @@ -1211,42 +1426,51 @@ tslint@4.5.1: tsutils@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-1.3.0.tgz#dd86cb304f7a2e86c012deade2f8d0f886f57808" + integrity sha1-3YbLME96LobAEt6t4vjQ+Ib1eAg= 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= typescript@2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.2.1.tgz#4862b662b988a4c8ff691cc7969622d24db76ae9" + integrity sha1-SGK2YrmIpMj/aRzHlpYi0k23auk= 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= underscore@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.3.3.tgz#47ac53683daf832bfa952e1774417da47817ae42" + integrity sha1-R6xTaD2vgyv6lS4XdEF9pHgXrkI= 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" 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= unzip2@0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/unzip2/-/unzip2-0.2.5.tgz#4ef7a579a78c15c51f550f6a053db194149c8992" + integrity sha1-TveleaeMFcUfVQ9qBT2xlBSciZI= dependencies: binary "~0.3.0" fstream "~0.1.21" @@ -1258,6 +1482,7 @@ unzip2@0.2.5: update-notifier@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.1.0.tgz#ec0c1e53536b76647a24b77cb83966d9315123d9" + integrity sha1-7AweU1NrdmR6JLd8uDlm2TFRI9k= dependencies: boxen "^1.0.0" chalk "^1.0.0" @@ -1271,20 +1496,24 @@ update-notifier@^2.0.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: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= uuid@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" + integrity sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g== 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" @@ -1293,32 +1522,38 @@ verror@1.10.0: which@^1.2.8: version "1.2.12" resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" + integrity sha1-3me15FAmnxlJCe8j7OTr5Bb6EZI= dependencies: isexe "^1.1.1" wide-align@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" + integrity sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w== dependencies: string-width "^1.0.2" widest-line@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c" + integrity sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw= dependencies: string-width "^1.0.1" wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= write-file-atomic@^1.1.2: version "1.3.1" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.1.tgz#7d45ba32316328dd1ec7d90f60ebc0d845bb759a" + integrity sha1-fUW6MjFjKN0ex9kPYOvA2EW7dZo= dependencies: graceful-fs "^4.1.11" imurmurhash "^0.1.4" @@ -1327,7 +1562,9 @@ write-file-atomic@^1.1.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= yallist@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.1.tgz#08309c7044b1761d5e1591dc12c67629271b6ac3" + integrity sha1-CDCccESxdh1eFZHcEsZ2KScbasM= From 5882e8d3bbaad9d77737614ee9ccfc694967800f Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 18 Oct 2018 14:23:21 -0700 Subject: [PATCH 088/660] Adding a top/bottom conditional formatting sample (#214) * Adding a top/bottom snippet to conditional formatting * Formatting change and clarifying what top means --- .../30-range/conditional-formatting-basic.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/samples/excel/30-range/conditional-formatting-basic.yaml b/samples/excel/30-range/conditional-formatting-basic.yaml index b104bce2a..e3872ba11 100644 --- a/samples/excel/30-range/conditional-formatting-basic.yaml +++ b/samples/excel/30-range/conditional-formatting-basic.yaml @@ -14,6 +14,7 @@ script: $("#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)); @@ -127,6 +128,19 @@ script: }); } + async function applyTopBottomFormat() { + 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.topBottom); + conditionalFormat.topBottom.format.fill.color = "green" + conditionalFormat.topBottom.rule = { rank: 1, type: "TopItems"} + + await context.sync(); + }); + } + async function applyCustomFormat() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -316,6 +330,10 @@ template: + + language: html style: content: |- - body { - margin: 0; - padding: 10px; + section.samples { + margin-top: 20px; } - - /* Button customization, including overwriting some Fabric defaults */ - - .ms-Button, .ms-Button:focus { - background: #2b579a; - border: #2b579a; + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; } - - .ms-Button > .ms-Button-label, - .ms-Button:focus > .ms-Button-label, - .ms-Button:hover > .ms-Button-label { - color: white; - } - - .ms-Button:hover, .ms-Button:active { - background: #204072; - } - - .ms-Button.is-disabled, .ms-Button:disabled { - background-color: #f4f4f4; - border-color: #f4f4f4; - } - - .ms-Button.is-disabled .ms-Button-label, - .ms-Button:disabled .ms-Button-label { - color: #a6a6a6; - } language: css libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js diff --git a/samples/word/01-basics/basic-api-call.yaml b/samples/word/01-basics/basic-api-call.yaml index 650c5cda6..6e49b3442 100644 --- a/samples/word/01-basics/basic-api-call.yaml +++ b/samples/word/01-basics/basic-api-call.yaml @@ -36,45 +36,25 @@ script: language: typescript template: content: |- -

Executes a simple code snippet. Make sure to select text before clicking "Run code".

+
+ 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". +
language: html style: content: |- - body { - margin: 0; - padding: 10px; + section.samples { + margin-top: 20px; } - - /* Button customization, including overwriting some Fabric defaults */ - - .ms-Button, .ms-Button:focus { - background: #2b579a; - border: #2b579a; + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; } - - .ms-Button > .ms-Button-label, - .ms-Button:focus > .ms-Button-label, - .ms-Button:hover > .ms-Button-label { - color: white; - } - - .ms-Button:hover, .ms-Button:active { - background: #204072; - } - - .ms-Button.is-disabled, .ms-Button:disabled { - background-color: #f4f4f4; - border-color: #f4f4f4; - } - - .ms-Button.is-disabled .ms-Button-label, - .ms-Button:disabled .ms-Button-label { - color: #a6a6a6; - } language: css libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js diff --git a/samples/word/01-basics/basic-common-api-call.yaml b/samples/word/01-basics/basic-common-api-call.yaml index 08c181c89..8373bdc60 100644 --- a/samples/word/01-basics/basic-common-api-call.yaml +++ b/samples/word/01-basics/basic-common-api-call.yaml @@ -22,13 +22,25 @@ 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". +
language: html style: - content: | - /* Your style goes here */ + 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 diff --git a/samples/word/01-basics/basic-doc-assembly.yaml b/samples/word/01-basics/basic-doc-assembly.yaml index cf677d311..0f9aca5b3 100644 --- a/samples/word/01-basics/basic-doc-assembly.yaml +++ b/samples/word/01-basics/basic-doc-assembly.yaml @@ -114,93 +114,43 @@ script: language: typescript template: content: |- -

- This sample demonstrates how to use the basic document assembly objects by creating sample document, search, create a template, - add paragraphs and footers. Just click the buttons in top-down order.

- -
-

-

Try it out:

-

- +
+ This sample demonstrates how to use the basic document assembly objects. It creates a sample document, searches for text, creates a template, and adds paragraphs and footers. +
+ +
+

Try it out

- + Add title +

+

- + Add paragraphs and controls +

+

- + Search and templetize +

- + Change customer +

-

+ Insert Footer + +
language: html style: - content: |4 - body { - margin: 0; - padding: 10px; - } - - - /* Button customization, including overwriting some Fabric defaults */ - - .ms-Button, .ms-Button:focus { - background: #217346; - border: #217346; - } - - .ms-Button > .ms-Button-label, - .ms-Button:focus > .ms-Button-label, - .ms-Button:hover > .ms-Button-label { - color: white; - } - - .ms-Button:hover, .ms-Button:active { - background: #164b2e; - } - - .ms-Button.is-disabled, .ms-Button:disabled { - background-color: #f4f4f4; - border-color: #f4f4f4; - } - - .ms-Button.is-disabled .ms-Button-label, - .ms-Button:disabled .ms-Button-label { - color: #a6a6a6; - } - - #setup.ms-Button, #setup.ms-Button:focus { - background: darkred; - border: darkred; - } - - #setup.ms-Button:hover, #setup.ms-Button:active { - background: red; - } - - #samples-container { - margin-top: 20px; - } - - #samples-container .ms-Button { - display: block; - margin-bottom: 5px; - } + content: |- + section.samples { + margin-top: 20px; + } - #samples-container .ms-Button, #setup-container .ms-Button { - margin-left: 20px; - min-width: 80px; - } + 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 diff --git a/samples/word/01-basics/insert-and-get-pictures.yaml b/samples/word/01-basics/insert-and-get-pictures.yaml index d9ccb025a..dc429345a 100644 --- a/samples/word/01-basics/insert-and-get-pictures.yaml +++ b/samples/word/01-basics/insert-and-get-pictures.yaml @@ -45,7 +45,7 @@ script: */ async function setup() { await Word.run(async (context) => { - 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.", "End"); + 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. ", "End"); 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 elements you want from the different Online galleries.", "End"); await context.sync(); @@ -67,80 +67,37 @@ script: "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"; language: typescript template: - content: | -

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

- -
-

Click "setup" to insert sample data and between runs to reset the sample.

+ content: |- +
+ This sample demonstrates how to insert and get inline pictures in a document. +
+
+

Set up

-
- -
-

Sample snippets to try.

+ Setup + +
+
+

Try it out

+ Insert picture +

-

+ Get pictures + +
language: html style: - content: | - body { - margin: 0; - padding: 10px; - } - - /* Button customization, including overwriting some Fabric defaults */ - .ms-Button, .ms-Button:focus { - background: #217346; - border: #217346; - } - - .ms-Button > .ms-Button-label, - .ms-Button:focus > .ms-Button-label, - .ms-Button:hover > .ms-Button-label { - color: white; - } - - .ms-Button:hover, .ms-Button:active { - background: #164b2e; - } - - .ms-Button.is-disabled, .ms-Button:disabled { - background-color: #f4f4f4; - border-color: #f4f4f4; - } - - .ms-Button.is-disabled .ms-Button-label, - .ms-Button:disabled .ms-Button-label { - color: #a6a6a6; - } - - #setup.ms-Button, #setup.ms-Button:focus { - background: darkred; - border: darkred; - } - - #setup.ms-Button:hover, #setup.ms-Button:active { - background: red; - } - - #samples-container { + content: |- + section.samples { margin-top: 20px; } - #samples-container .ms-Button { + section.samples .ms-Button, section.setup .ms-Button { display: block; margin-bottom: 5px; - } - - #samples-container .ms-Button, #setup-container .ms-Button { margin-left: 20px; min-width: 80px; } diff --git a/samples/word/01-basics/insert-formatted-text.yaml b/samples/word/01-basics/insert-formatted-text.yaml index bb72eb858..06eb7b478 100644 --- a/samples/word/01-basics/insert-formatted-text.yaml +++ b/samples/word/01-basics/insert-formatted-text.yaml @@ -54,45 +54,29 @@ script: language: typescript template: content: |- -

Shows how to insert basic formatted text and apply built-in styles.

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

Try it out

+ +
language: html style: content: |- - body { - margin: 0; - padding: 10px; + section.samples { + margin-top: 20px; } - - /* Button customization, including overwriting some Fabric defaults */ - - .ms-Button, .ms-Button:focus { - background: #2b579a; - border: #2b579a; + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; } - - .ms-Button > .ms-Button-label, - .ms-Button:focus > .ms-Button-label, - .ms-Button:hover > .ms-Button-label { - color: white; - } - - .ms-Button:hover, .ms-Button:active { - background: #204072; - } - - .ms-Button.is-disabled, .ms-Button:disabled { - background-color: #f4f4f4; - border-color: #f4f4f4; - } - - .ms-Button.is-disabled .ms-Button-label, - .ms-Button:disabled .ms-Button-label { - color: #a6a6a6; - } language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js diff --git a/samples/word/01-basics/insert-header.yaml b/samples/word/01-basics/insert-header.yaml index ab3927074..2a5daea5c 100644 --- a/samples/word/01-basics/insert-header.yaml +++ b/samples/word/01-basics/insert-header.yaml @@ -32,45 +32,29 @@ script: language: typescript template: content: |- -

Click to insert a header in the document

- +
+ This sample inserts a header in the document. +
+ +
+

Try it out

+ +
language: html style: content: |- - body { - margin: 0; - padding: 10px; + section.samples { + margin-top: 20px; } - - /* Button customization, including overwriting some Fabric defaults */ - - .ms-Button, .ms-Button:focus { - background: #2b579a; - border: #2b579a; + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; } - - .ms-Button > .ms-Button-label, - .ms-Button:focus > .ms-Button-label, - .ms-Button:hover > .ms-Button-label { - color: white; - } - - .ms-Button:hover, .ms-Button:active { - background: #204072; - } - - .ms-Button.is-disabled, .ms-Button:disabled { - background-color: #f4f4f4; - border-color: #f4f4f4; - } - - .ms-Button.is-disabled .ms-Button-label, - .ms-Button:disabled .ms-Button-label { - color: #a6a6a6; - } language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js diff --git a/samples/word/01-basics/insert-line-and-page-breaks.yaml b/samples/word/01-basics/insert-line-and-page-breaks.yaml index 04d125921..773349cdd 100644 --- a/samples/word/01-basics/insert-line-and-page-breaks.yaml +++ b/samples/word/01-basics/insert-line-and-page-breaks.yaml @@ -52,88 +52,40 @@ script: } language: typescript template: - content: |4 -

This sample demonstrates how to insert pagr and line breaks.

- - -
-

Click "setup" to insert sample text and between runs to reset the sample.

- - -
- - -
-

Sample snippets to try:

- - - - -
+ content: |- +
+ This sample demonstrates how to insert pagr and line breaks. +
+ +
+

Set up

+ +
+ +
+

Try it out

+

+ +

language: html style: - content: |4 - body { - margin: 0; - padding: 10px; - } - - - /* Button customization, including overwriting some Fabric defaults */ - - .ms-Button, .ms-Button:focus { - background: #217346; - border: #217346; - } - - .ms-Button > .ms-Button-label, - .ms-Button:focus > .ms-Button-label, - .ms-Button:hover > .ms-Button-label { - color: white; - } - - .ms-Button:hover, .ms-Button:active { - background: #164b2e; - } - - .ms-Button.is-disabled, .ms-Button:disabled { - background-color: #f4f4f4; - border-color: #f4f4f4; - } - - .ms-Button.is-disabled .ms-Button-label, - .ms-Button:disabled .ms-Button-label { - color: #a6a6a6; - } - - #setup.ms-Button, #setup.ms-Button:focus { - background: darkred; - border: darkred; - } - - #setup.ms-Button:hover, #setup.ms-Button:active { - background: red; - } - - #samples-container { - margin-top: 20px; - } - - #samples-container .ms-Button { - display: block; - margin-bottom: 5px; - } + content: |- + section.samples { + margin-top: 20px; + } - #samples-container .ms-Button, #setup-container .ms-Button { - margin-left: 20px; - min-width: 80px; - } + 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 diff --git a/samples/word/01-basics/search.yaml b/samples/word/01-basics/search.yaml index affa95889..978f169c4 100644 --- a/samples/word/01-basics/search.yaml +++ b/samples/word/01-basics/search.yaml @@ -66,88 +66,40 @@ script: } language: typescript template: - content: |4 -

This sample demonstrates basic and advanced search capabilities of the API.

- - -
-

Click "setup" to insert sample text and between runs to reset the sample.

- - -
- - -
-

Sample snippets to try:

- - - - -
+ content: |- +
+ This sample demonstrates basic and advanced search capabilities of the API. +
+ +
+

Set up

+ +
+ +
+

Try it out

+

+ +

language: html style: - content: |4 - body { - margin: 0; - padding: 10px; - } - - - /* Button customization, including overwriting some Fabric defaults */ - - .ms-Button, .ms-Button:focus { - background: #217346; - border: #217346; - } - - .ms-Button > .ms-Button-label, - .ms-Button:focus > .ms-Button-label, - .ms-Button:hover > .ms-Button-label { - color: white; - } - - .ms-Button:hover, .ms-Button:active { - background: #164b2e; - } - - .ms-Button.is-disabled, .ms-Button:disabled { - background-color: #f4f4f4; - border-color: #f4f4f4; - } - - .ms-Button.is-disabled .ms-Button-label, - .ms-Button:disabled .ms-Button-label { - color: #a6a6a6; - } - - #setup.ms-Button, #setup.ms-Button:focus { - background: darkred; - border: darkred; - } - - #setup.ms-Button:hover, #setup.ms-Button:active { - background: red; - } - - #samples-container { - margin-top: 20px; - } - - #samples-container .ms-Button { - display: block; - margin-bottom: 5px; - } + content: |- + section.samples { + margin-top: 20px; + } - #samples-container .ms-Button, #setup-container .ms-Button { - margin-left: 20px; - min-width: 80px; - } + 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 diff --git a/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml b/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml index fcb038cb1..4a2c9d573 100644 --- a/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml +++ b/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml @@ -74,78 +74,37 @@ script: language: typescript template: content: |- -

This sample demonstrates how to get the paragraph and paragraph sentences associated with the current insertion point.

- -
-

Click "setup" to reset the sample.

+
+ This sample demonstrates how to get the paragraph and paragraph sentences associated with the current insertion point. +
+
+

Set up

-
+ Setup + + -
+
+

Try it out

+ Select an insertion point in the document.

+ Get paragraph +

-

+ Get sentences + + language: html style: - content: | - body { - margin: 0; - padding: 10px; - } - - /* Button customization, including overwriting some Fabric defaults */ - .ms-Button, .ms-Button:focus { - background: #217346; - border: #217346; - height: 70px; - } - - .ms-Button > .ms-Button-label, - .ms-Button:focus > .ms-Button-label, - .ms-Button:hover > .ms-Button-label { - color: white; - } - - .ms-Button:hover, .ms-Button:active { - background: #164b2e; - } - - .ms-Button.is-disabled, .ms-Button:disabled { - background-color: #f4f4f4; - border-color: #f4f4f4; - } - - .ms-Button.is-disabled .ms-Button-label, - .ms-Button:disabled .ms-Button-label { - color: #a6a6a6; - } - - #setup.ms-Button, #setup.ms-Button:focus { - background: darkred; - border: darkred; - } - - #setup.ms-Button:hover, #setup.ms-Button:active { - background: red; - } - - #samples-container { + content: |- + section.samples { margin-top: 20px; } - #samples-container .ms-Button { + section.samples .ms-Button, section.setup .ms-Button { display: block; margin-bottom: 5px; - } - - #samples-container .ms-Button, #setup-container .ms-Button { margin-left: 20px; min-width: 80px; } diff --git a/samples/word/02-paragraphs/insert-in-different-locations.yaml b/samples/word/02-paragraphs/insert-in-different-locations.yaml index 1db7bd8df..7cd13e3be 100644 --- a/samples/word/02-paragraphs/insert-in-different-locations.yaml +++ b/samples/word/02-paragraphs/insert-in-different-locations.yaml @@ -96,96 +96,49 @@ script: } language: typescript template: - content: |4 -

This sample demonstrates a variety of insert locations available in the API.

- - -
-

Click "setup" to insert sample text and between runs to reset the sample.

- - -
- - -
-

Sample snippets to try. Click buttons top-down.

- - - - - - -
+ content: |- +
+ This sample demonstrates a variety of insert locations available in the API. +
+ +
+

Set up

+ +
+ +
+

Try it out

+

+

+

+

+ +

language: html style: - content: |4 - body { - margin: 0; - padding: 10px; - } - - - /* Button customization, including overwriting some Fabric defaults */ - - .ms-Button, .ms-Button:focus { - background: #217346; - border: #217346; - } - - .ms-Button > .ms-Button-label, - .ms-Button:focus > .ms-Button-label, - .ms-Button:hover > .ms-Button-label { - color: white; - } - - .ms-Button:hover, .ms-Button:active { - background: #164b2e; - } - - .ms-Button.is-disabled, .ms-Button:disabled { - background-color: #f4f4f4; - border-color: #f4f4f4; - } - - .ms-Button.is-disabled .ms-Button-label, - .ms-Button:disabled .ms-Button-label { - color: #a6a6a6; - } - - #setup.ms-Button, #setup.ms-Button:focus { - background: darkred; - border: darkred; - } - - #setup.ms-Button:hover, #setup.ms-Button:active { - background: red; - } - - #samples-container { - margin-top: 20px; - } - - #samples-container .ms-Button { - display: block; - margin-bottom: 5px; - } + content: |- + section.samples { + margin-top: 20px; + } - #samples-container .ms-Button, #setup-container .ms-Button { - margin-left: 20px; - min-width: 80px; - } + 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 diff --git a/samples/word/02-paragraphs/paragraph-properties.yaml b/samples/word/02-paragraphs/paragraph-properties.yaml index b4097ac03..d82101b50 100644 --- a/samples/word/02-paragraphs/paragraph-properties.yaml +++ b/samples/word/02-paragraphs/paragraph-properties.yaml @@ -79,90 +79,45 @@ script: language: typescript template: content: |- -

This sample demonstrates paragraph property usage.

- - -
-

Click "setup" to reset the sample.

+
+ This sample demonstrates paragraph property usage. +
+
+

Set up

-
+ Setup + + -
-

Sample snippets to try. Click buttons top-down.

+
+

Try it out

+ Indent first paragraph +

+ Adjust first paragraph's line spacing +

+ Adjust space between paragraphs +

-

+ Align last paragraph to center + + language: html style: - content: |4 - body { - margin: 0; - padding: 10px; - } - - - /* Button customization, including overwriting some Fabric defaults */ - - .ms-Button, .ms-Button:focus { - background: #217346; - border: #217346; - } - - .ms-Button > .ms-Button-label, - .ms-Button:focus > .ms-Button-label, - .ms-Button:hover > .ms-Button-label { - color: white; - } - - .ms-Button:hover, .ms-Button:active { - background: #164b2e; - } - - .ms-Button.is-disabled, .ms-Button:disabled { - background-color: #f4f4f4; - border-color: #f4f4f4; - } - - .ms-Button.is-disabled .ms-Button-label, - .ms-Button:disabled .ms-Button-label { - color: #a6a6a6; - } - - #setup.ms-Button, #setup.ms-Button:focus { - background: darkred; - border: darkred; - } - - #setup.ms-Button:hover, #setup.ms-Button:active { - background: red; - } - - #samples-container { - margin-top: 20px; - } - - #samples-container .ms-Button { - display: block; - margin-bottom: 5px; - } + content: |- + section.samples { + margin-top: 20px; + } - #samples-container .ms-Button, #setup-container .ms-Button { - margin-left: 20px; - min-width: 80px; - } + 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 diff --git a/samples/word/03-content-controls/insert-and-change-content-controls.yaml b/samples/word/03-content-controls/insert-and-change-content-controls.yaml index 30d73d848..c55b7dd1f 100644 --- a/samples/word/03-content-controls/insert-and-change-content-controls.yaml +++ b/samples/word/03-content-controls/insert-and-change-content-controls.yaml @@ -99,78 +99,38 @@ script: language: typescript template: content: |- -

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

- -
-

Click "setup" to reset the sample.

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

Set up

-
+ Setup + + -
+
+

Try it out

+ Insert content controls on each paragraph. - -
+ Insert +

+ Modify content control appearance and content. + + language: html style: - content: | - body { - margin: 0; - padding: 10px; - } - - /* Button customization, including overwriting some Fabric defaults */ - .ms-Button, .ms-Button:focus { - background: #217346; - border: #217346; - height: 70px; - } - - .ms-Button > .ms-Button-label, - .ms-Button:focus > .ms-Button-label, - .ms-Button:hover > .ms-Button-label { - color: white; - } - - .ms-Button:hover, .ms-Button:active { - background: #164b2e; - } - - .ms-Button.is-disabled, .ms-Button:disabled { - background-color: #f4f4f4; - border-color: #f4f4f4; - } - - .ms-Button.is-disabled .ms-Button-label, - .ms-Button:disabled .ms-Button-label { - color: #a6a6a6; - } - - #setup.ms-Button, #setup.ms-Button:focus { - background: darkred; - border: darkred; - } - - #setup.ms-Button:hover, #setup.ms-Button:active { - background: red; - } - - #samples-container { + content: |- + section.samples { margin-top: 20px; } - #samples-container .ms-Button { + section.samples .ms-Button, section.setup .ms-Button { display: block; margin-bottom: 5px; - } - - #samples-container .ms-Button, #setup-container .ms-Button { margin-left: 20px; min-width: 80px; } diff --git a/samples/word/04-range/scroll-to-range.yaml b/samples/word/04-range/scroll-to-range.yaml index 33ae82941..8eff712da 100644 --- a/samples/word/04-range/scroll-to-range.yaml +++ b/samples/word/04-range/scroll-to-range.yaml @@ -54,87 +54,41 @@ script: } language: typescript template: - content: |4 -

This sample demonstrates how to scroll to a range.

- - -
-

Click "setup" to insert sample text and between runs to reset the sample. This appends a paragraph in the second page to demonstrate scrolling of the document.

- - -
- - -
-

Sample snippets to try:

- - - -
+ content: |- +
+ This sample demonstrates how to scroll to a range. +
+ +
+

Set up

+ Click "setup" to insert sample text and between runs to reset the sample. This appends a paragraph in the second page to demonstrate scrolling of the document.

+ +

+ +
+

Try it out

+

+ +

language: html style: - content: |4 - body { - margin: 0; - padding: 10px; - } - - - /* Button customization, including overwriting some Fabric defaults */ - - .ms-Button, .ms-Button:focus { - background: #217346; - border: #217346; - } - - .ms-Button > .ms-Button-label, - .ms-Button:focus > .ms-Button-label, - .ms-Button:hover > .ms-Button-label { - color: white; - } - - .ms-Button:hover, .ms-Button:active { - background: #164b2e; - } - - .ms-Button.is-disabled, .ms-Button:disabled { - background-color: #f4f4f4; - border-color: #f4f4f4; - } - - .ms-Button.is-disabled .ms-Button-label, - .ms-Button:disabled .ms-Button-label { - color: #a6a6a6; - } - - #setup.ms-Button, #setup.ms-Button:focus { - background: darkred; - border: darkred; - } - - #setup.ms-Button:hover, #setup.ms-Button:active { - background: red; - } - - #samples-container { - margin-top: 20px; - } - - #samples-container .ms-Button { - display: block; - margin-bottom: 5px; - } + content: |- + section.samples { + margin-top: 20px; + } - #samples-container .ms-Button, #setup-container .ms-Button { - margin-left: 20px; - min-width: 80px; - } + 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 diff --git a/samples/word/04-range/split-words-of-first-paragraph.yaml b/samples/word/04-range/split-words-of-first-paragraph.yaml index 538876231..f2ac23dd5 100644 --- a/samples/word/04-range/split-words-of-first-paragraph.yaml +++ b/samples/word/04-range/split-words-of-first-paragraph.yaml @@ -76,7 +76,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } diff --git a/samples/word/05-tables/table-cell-access.yaml b/samples/word/05-tables/table-cell-access.yaml index 26317e3dc..fe2e34999 100644 --- a/samples/word/05-tables/table-cell-access.yaml +++ b/samples/word/05-tables/table-cell-access.yaml @@ -44,81 +44,33 @@ script: language: typescript template: content: |- -

Demostrates how to get a cell from a table.

- - -
-

Click "setup" to add a sample table:

- - -
- -
-

Get contents of first cell, first table:

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

Try it out

+

+ Get the contents of first cell.

+ +

language: html style: - content: |4 - body { - margin: 0; - padding: 10px; - } - - - /* Button customization, including overwriting some Fabric defaults */ - - .ms-Button, .ms-Button:focus { - background: #217346; - border: #217346; - } - - .ms-Button > .ms-Button-label, - .ms-Button:focus > .ms-Button-label, - .ms-Button:hover > .ms-Button-label { - color: white; - } - - .ms-Button:hover, .ms-Button:active { - background: #164b2e; - } - - .ms-Button.is-disabled, .ms-Button:disabled { - background-color: #f4f4f4; - border-color: #f4f4f4; - } - - .ms-Button.is-disabled .ms-Button-label, - .ms-Button:disabled .ms-Button-label { - color: #a6a6a6; - } - - #setup.ms-Button, #setup.ms-Button:focus { - background: darkred; - border: darkred; - } - - #setup.ms-Button:hover, #setup.ms-Button:active { - background: red; - } - - #samples-container { - margin-top: 20px; - } - - #samples-container .ms-Button { - display: block; - margin-bottom: 5px; - } + content: |- + section.samples { + margin-top: 20px; + } - #samples-container .ms-Button, #setup-container .ms-Button { - margin-left: 20px; - min-width: 80px; - } + 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 diff --git a/samples/word/06-lists/insert-list.yaml b/samples/word/06-lists/insert-list.yaml index aa4878545..d5c8a9ddf 100644 --- a/samples/word/06-lists/insert-list.yaml +++ b/samples/word/06-lists/insert-list.yaml @@ -60,74 +60,29 @@ script: language: typescript template: content: |- -

This sample demonstrates how to insert and change lists.

- -
-

Click "setup" to reset the sample.

+
+ This sample demonstrates how to insert and change lists. +
+
+

Try it out

-
- -
+ Setup +

-

+ Insert list + + language: html style: - content: | - body { - margin: 0; - padding: 10px; - } - - /* Button customization, including overwriting some Fabric defaults */ - .ms-Button, .ms-Button:focus { - background: #217346; - border: #217346; - } - - .ms-Button > .ms-Button-label, - .ms-Button:focus > .ms-Button-label, - .ms-Button:hover > .ms-Button-label { - color: white; - } - - .ms-Button:hover, .ms-Button:active { - background: #164b2e; - } - - .ms-Button.is-disabled, .ms-Button:disabled { - background-color: #f4f4f4; - border-color: #f4f4f4; - } - - .ms-Button.is-disabled .ms-Button-label, - .ms-Button:disabled .ms-Button-label { - color: #a6a6a6; - } - - #setup.ms-Button, #setup.ms-Button:focus { - background: darkred; - border: darkred; - } - - #setup.ms-Button:hover, #setup.ms-Button:active { - background: red; - } - - #samples-container { + content: |- + section.samples { margin-top: 20px; } - #samples-container .ms-Button { + section.samples .ms-Button, section.setup .ms-Button { display: block; margin-bottom: 5px; - } - - #samples-container .ms-Button, #setup-container .ms-Button { margin-left: 20px; min-width: 80px; } diff --git a/samples/word/07-custom-properties/get-built-in-properties.yaml b/samples/word/07-custom-properties/get-built-in-properties.yaml index 1a9b39559..6b17a0973 100644 --- a/samples/word/07-custom-properties/get-built-in-properties.yaml +++ b/samples/word/07-custom-properties/get-built-in-properties.yaml @@ -31,47 +31,30 @@ script: } language: typescript template: - content: |4 -

This sample demonstrates how to set headers.

- + content: |- +
+ This sample demonstrates how to get the built-in properties of a Word document. +
+ +
+

Try it out

+
language: html style: content: |- - body { - margin: 0; - padding: 10px; + section.samples { + margin-top: 20px; } - - /* Button customization, including overwriting some Fabric defaults */ - - .ms-Button, .ms-Button:focus { - background: #2b579a; - border: #2b579a; + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; } - - .ms-Button > .ms-Button-label, - .ms-Button:focus > .ms-Button-label, - .ms-Button:hover > .ms-Button-label { - color: white; - } - - .ms-Button:hover, .ms-Button:active { - background: #204072; - } - - .ms-Button.is-disabled, .ms-Button:disabled { - background-color: #f4f4f4; - border-color: #f4f4f4; - } - - .ms-Button.is-disabled .ms-Button-label, - .ms-Button:disabled .ms-Button-label { - color: #a6a6a6; - } language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js diff --git a/samples/word/07-custom-properties/read-write-custom-document-properties.yaml b/samples/word/07-custom-properties/read-write-custom-document-properties.yaml index 54b3c0cfc..94d2a59bd 100644 --- a/samples/word/07-custom-properties/read-write-custom-document-properties.yaml +++ b/samples/word/07-custom-properties/read-write-custom-document-properties.yaml @@ -52,81 +52,36 @@ script: } language: typescript template: - content: |4 -

This sample demonstrates how to insert custom document properties of different data types and how to read them.

- -
-

Sample snippets to try.

+ content: |- +
+ This sample demonstrates how to insert custom document properties of different data types and how to read them. +
- -

+ -

+ - -

+ + language: html style: - content: |4 - body { - margin: 0; - padding: 10px; - } - - - /* Button customization, including overwriting some Fabric defaults */ - - .ms-Button, .ms-Button:focus { - background: #217346; - border: #217346; - } - - .ms-Button > .ms-Button-label, - .ms-Button:focus > .ms-Button-label, - .ms-Button:hover > .ms-Button-label { - color: white; - } - - .ms-Button:hover, .ms-Button:active { - background: #164b2e; - } - - .ms-Button.is-disabled, .ms-Button:disabled { - background-color: #f4f4f4; - border-color: #f4f4f4; - } - - .ms-Button.is-disabled .ms-Button-label, - .ms-Button:disabled .ms-Button-label { - color: #a6a6a6; - } - - #setup.ms-Button, #setup.ms-Button:focus { - background: darkred; - border: darkred; - } - - #setup.ms-Button:hover, #setup.ms-Button:active { - background: red; - } - - #samples-container { - margin-top: 20px; - } - - #samples-container .ms-Button { - display: block; - margin-bottom: 5px; - } + content: |- + section.samples { + margin-top: 20px; + } - #samples-container .ms-Button, #setup-container .ms-Button { - margin-left: 20px; - min-width: 80px; - } + 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 diff --git a/samples/word/50-common-patterns/multiple-property-set.yaml b/samples/word/50-common-patterns/multiple-property-set.yaml index 63677fd6b..e700fe542 100644 --- a/samples/word/50-common-patterns/multiple-property-set.yaml +++ b/samples/word/50-common-patterns/multiple-property-set.yaml @@ -70,38 +70,16 @@ template: language: html style: content: |- - body { - margin: 0; - padding: 10px; + section.samples { + margin-top: 20px; } - - /* Button customization, including overwriting some Fabric defaults */ - - .ms-Button, .ms-Button:focus { - background: #2b579a; - border: #2b579a; + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; } - - .ms-Button > .ms-Button-label, - .ms-Button:focus > .ms-Button-label, - .ms-Button:hover > .ms-Button-label { - color: white; - } - - .ms-Button:hover, .ms-Button:active { - background: #204072; - } - - .ms-Button.is-disabled, .ms-Button:disabled { - background-color: #f4f4f4; - border-color: #f4f4f4; - } - - .ms-Button.is-disabled .ms-Button-label, - .ms-Button:disabled .ms-Button-label { - color: #a6a6a6; - } language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js diff --git a/samples/word/99-fabric/fabric-insert-form-data.yaml b/samples/word/99-fabric/fabric-insert-form-data.yaml index 56bbc9392..35eca1dd7 100644 --- a/samples/word/99-fabric/fabric-insert-form-data.yaml +++ b/samples/word/99-fabric/fabric-insert-form-data.yaml @@ -190,7 +190,17 @@ template: language: html style: - content: '' + 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 diff --git a/samples/word/default.yaml b/samples/word/default.yaml index f2d8dd6a0..0f234fd26 100644 --- a/samples/word/default.yaml +++ b/samples/word/default.yaml @@ -36,8 +36,17 @@ template: language: html style: - content: | - /* Your style goes here */ + 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 From 36f918b6e7b49db86f3c13c9f50750fc8edee7a9 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 24 Oct 2018 14:47:29 -0700 Subject: [PATCH 092/660] Adding explanations to the 2013 Excel snippet (#220) --- .../01-basics/basic-common-api-call.yaml | 41 ++++++++++++++----- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/samples/excel/01-basics/basic-common-api-call.yaml b/samples/excel/01-basics/basic-common-api-call.yaml index 5fc801a7b..8e5123a55 100644 --- a/samples/excel/01-basics/basic-common-api-call.yaml +++ b/samples/excel/01-basics/basic-common-api-call.yaml @@ -11,24 +11,45 @@ script: $("#run").click(run); function run() { - Office.context.document.getSelectedDataAsync(Office.CoercionType.Text, (asyncResult) => { - if (asyncResult.status === Office.AsyncResultStatus.Failed) { - console.log(asyncResult.error.message); - } else { - console.log(`The selected data is "${asyncResult.value}".`); - } - }); + Office.context.document.getSelectedDataAsync( + Office.CoercionType.Text, + asyncResult => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(asyncResult.error.message); + } else { + console.log(`The selected data is "${asyncResult.value}".`); + } + } + ); } language: typescript template: content: | +
+

This sample uses the Common APIs compatible with Office 2013.

+
+ +
+

Try it out

+ Select a cell in the worksheet. + Write to console +

+ Be sure to exit cell-editing context before using the add-in. +

language: html style: content: | - /* Your style goes here */ + 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 From 102c5bd2dde6aac1e1df6a9879c17e6309cd8281 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 24 Oct 2018 14:52:06 -0700 Subject: [PATCH 093/660] Combining simliar chart samples (#219) --- playlists/excel.yaml | 52 +-- .../50-chart/chart-create-several-charts.yaml | 310 ++++++++++++++++++ .../chart-series-doughnutholesize.yaml | 139 -------- .../create-additional-chart-types.yaml | 254 -------------- .../create-column-clustered-chart.yaml | 133 -------- .../excel/50-chart/create-doughnut-chart.yaml | 146 +++++---- samples/excel/50-chart/create-line-chart.yaml | 119 ------- .../50-chart/create-xyscatter-chart.yaml | 116 ------- view/excel.json | 6 +- 9 files changed, 401 insertions(+), 874 deletions(-) create mode 100644 samples/excel/50-chart/chart-create-several-charts.yaml delete mode 100644 samples/excel/50-chart/chart-series-doughnutholesize.yaml delete mode 100644 samples/excel/50-chart/create-additional-chart-types.yaml delete mode 100644 samples/excel/50-chart/create-column-clustered-chart.yaml delete mode 100644 samples/excel/50-chart/create-line-chart.yaml delete mode 100644 samples/excel/50-chart/create-xyscatter-chart.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index ac848238b..33d467ebe 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -416,51 +416,26 @@ group: Named Item api_set: ExcelApi: 1.7 -- id: excel-chart-create-column-clustered-chart - name: Column clustered chart - fileName: create-column-clustered-chart.yaml - description: Create a column clustered chart +- id: excel-chart-create-several-charts + name: Chart creation + fileName: chart-create-several-charts.yaml + description: >- + Create column-clustered, doughnut, line, XY-scatter, area, radar, pie, 3D, + cylinder, and 100% charts. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/50-chart/create-column-clustered-chart.yaml + https://raw.githubusercontent.com////samples/excel/50-chart/chart-create-several-charts.yaml group: Chart api_set: ExcelApi: 1.1 - id: excel-chart-create-doughnut-chart name: Doughnut chart fileName: create-doughnut-chart.yaml - description: Create a doughnut chart + description: Create a doughnut chart and adjust the size rawUrl: >- https://raw.githubusercontent.com////samples/excel/50-chart/create-doughnut-chart.yaml group: Chart api_set: - ExcelApi: 1.1 -- id: excel-chart-create-line-chart - name: Line chart - fileName: create-line-chart.yaml - description: Create a line chart - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/50-chart/create-line-chart.yaml - group: Chart - api_set: - ExcelApi: 1.1 -- id: excel-chart-create-xyscatter-chart - name: XY scatter chart - fileName: create-xyscatter-chart.yaml - description: Draws a basic XY scatter chart - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/50-chart/create-xyscatter-chart.yaml - group: Chart - api_set: - ExcelApi: 1.1 -- id: excel-chart-create-additonal-types - name: Create Additional Chart Types - fileName: create-additional-chart-types.yaml - description: 'Create area, radar, pie, 3D, cylinder, and 100% charts.' - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/50-chart/create-additional-chart-types.yaml - group: Chart - api_set: - ExcelApi: 1.1 + ExcelApi: 1.7 - id: excel-chart-axis name: Chart axis fileName: chart-axis.yaml @@ -497,15 +472,6 @@ group: Chart api_set: ExcelAPI: 1.7 -- id: excel-chart-series-doughnutholesize - name: Chart series - doughnutHoleSize - fileName: chart-series-doughnutholesize.yaml - description: Set the doughnutHoleSize property in a series for a dough nut chart. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/50-chart/chart-series-doughnutholesize.yaml - group: Chart - api_set: - ExcelApi: 1.7 - id: excel-chart-series-markers name: Chart series markers fileName: chart-series-markers.yaml diff --git a/samples/excel/50-chart/chart-create-several-charts.yaml b/samples/excel/50-chart/chart-create-several-charts.yaml new file mode 100644 index 000000000..8e88dfc7b --- /dev/null +++ b/samples/excel/50-chart/chart-create-several-charts.yaml @@ -0,0 +1,310 @@ +order: 1 +id: excel-chart-create-several-charts +name: Chart creation +description: 'Create column-clustered, doughnut, line, XY-scatter, area, radar, pie, 3D, cylinder, and 100% charts.' +author: OfficeDev +host: EXCEL +api_set: + ExcelApi: 1.1 +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)); + + async function createColumnClusteredChart() { + 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("ColumnClustered", dataRange, "Auto"); + + chart.setPosition("A9", "F20"); + 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"; + let 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 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(); + }); + } + + async function createXYScatterChart() { + 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("XYScatter", dataRange, "Auto"); + chart.title.text = "Bicycle Parts Quarterly Sales"; + chart.setPosition("A36", "F48"); + + 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(); + }); + } + + 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(); + }); + } + + 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(); + }); + } + + 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(); + }); + } + + 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(); + }); + } + + 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(); + }); + } + + async function setup() { + await Excel.run(async context => { + await OfficeHelpers.ExcelUtilities.forceCreateSheet( + context.workbook, + "Sample" + ); + + const sheet = context.workbook.worksheets.getItem("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] + ]); + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { + 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) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |- +
+

This sample shows how to create a column clustered chart.

+
+ +
+

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 + + @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 \ No newline at end of file diff --git a/samples/excel/50-chart/chart-series-doughnutholesize.yaml b/samples/excel/50-chart/chart-series-doughnutholesize.yaml deleted file mode 100644 index 848b94b2a..000000000 --- a/samples/excel/50-chart/chart-series-doughnutholesize.yaml +++ /dev/null @@ -1,139 +0,0 @@ -order: 10 -id: excel-chart-series-doughnutholesize -name: Chart series - doughnutHoleSize -description: Set the doughnutHoleSize property in a series for a dough nut chart. -host: EXCEL -api_set: - ExcelApi: 1.7 -script: - content: | - $("#setup").click(() => tryCatch(setup)); - $("#add-series").click(() => tryCatch(addSeries)); - - async function addSeries() { - 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); - - // Set the size of the dough nut hole. - // The hole size is expressed as a percentage - // of the chart size. - newSeries.doughnutHoleSize = 80; - - await context.sync(); - }); - } - - async function setup() { - await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "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] - ]); - - if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } - - createDoughnutExplodedChart(context); - sheet.activate(); - - await context.sync(); - }); - } - - async function createDoughnutExplodedChart(context: Excel.RequestContext) { - const sheet = context.workbook.worksheets.getItem("Sample"); - const salesTable = sheet.tables.getItem("SalesTable"); - - let dataRange = sheet.getRange("A1:B7"); - let chart = sheet.charts.add("DoughnutExploded", dataRange, "Auto"); - - chart.setPosition("A15", "E30"); - chart.legend.position = "Right" - chart.legend.format.fill.setSolidColor("white"); - chart.dataLabels.format.font.size = 15; - chart.dataLabels.format.font.color = "black"; - } - - /** Default helper for invoking an action and handling errors. */ - async function tryCatch(callback) { - try { - await callback(); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - language: typescript -template: - content: |+ -
-

This sample shows how to use the doughnutHoleSize property in a series for an exploded dough nut chart.

-
- -
-

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 - - @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.1.1 diff --git a/samples/excel/50-chart/create-additional-chart-types.yaml b/samples/excel/50-chart/create-additional-chart-types.yaml deleted file mode 100644 index 3df7ab37c..000000000 --- a/samples/excel/50-chart/create-additional-chart-types.yaml +++ /dev/null @@ -1,254 +0,0 @@ -order: 5 -id: excel-chart-create-additonal-types -name: Create Additional Chart Types -description: 'Create area, radar, pie, 3D, cylinder, and 100% charts.' -host: EXCEL -api_set: - ExcelApi: 1.1 -script: - content: |- - $("#setup").click(() => tryCatch(setup)); - $("#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)); - - 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("A49", "M64"); - 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("H34", "M47"); - 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 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("A27", "F47"); - 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("H17", "M32"); - 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 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("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 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("A10", "F25"); - 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) => { - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - const sheet = context.workbook.worksheets.getItem("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] - ]); - - if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { - 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) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - language: typescript -template: - content: |- -
-

This sample shows how to create area, radar, pie, 3D, cylinder, and 100% charts.

-
- -
-

Set up

- -
- -
-

Try it out

- -

- -

- -

- -

- -

- -

- language: html -style: - content: | - /* Your style goes here */ - 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 - - @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.1.1 \ No newline at end of file diff --git a/samples/excel/50-chart/create-column-clustered-chart.yaml b/samples/excel/50-chart/create-column-clustered-chart.yaml deleted file mode 100644 index 35ed84029..000000000 --- a/samples/excel/50-chart/create-column-clustered-chart.yaml +++ /dev/null @@ -1,133 +0,0 @@ -order: 1 -id: excel-chart-create-column-clustered-chart -name: Column clustered chart -description: Create a column clustered chart -author: OfficeDev -host: EXCEL -api_set: - ExcelApi: 1.1 -script: - content: |+ - $("#setup").click(setup); - $("#create-column-clustered-chart").click(createChart); - - async function createChart() { - try { - 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("ColumnClustered", dataRange, "Auto"); - - 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"; - let points = chart.series.getItemAt(0).points; - points.getItemAt(0).format.fill.setSolidColor("pink"); - points.getItemAt(1).format.fill.setSolidColor("indigo"); - - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - - async function setup() { - try { - await Excel.run(async (context) => { - - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - - const sheet = context.workbook.worksheets.getItem("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] - ]); - - if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } - - sheet.activate(); - - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - - - language: typescript -template: - content: |- -
-

This sample shows how to create a column clustered chart.

-
- -
-

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 - - @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.1.1 \ No newline at end of file diff --git a/samples/excel/50-chart/create-doughnut-chart.yaml b/samples/excel/50-chart/create-doughnut-chart.yaml index 22b32d0c1..02dbb57aa 100644 --- a/samples/excel/50-chart/create-doughnut-chart.yaml +++ b/samples/excel/50-chart/create-doughnut-chart.yaml @@ -1,86 +1,98 @@ order: 2 id: excel-chart-create-doughnut-chart name: Doughnut chart -description: Create a doughnut chart +description: Create a doughnut chart and adjust the size author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: 1.7 script: content: | - $("#setup").click(setup); - $("#create-doughnut-chart").click(createChart); + $("#setup").click(() => tryCatch(setup)); + $("#create-doughnut-chart").click(() => tryCatch(createChart)); + $("#add-series").click(() => tryCatch(addSeries)); async function createChart() { - try { - Excel.run(async (context) => { - - const sheet = context.workbook.worksheets.getItem("Sample"); - - const expensesByCategoryTable = sheet.tables.getItem("ExpensesByCategoryTable"); - - const dataRange = expensesByCategoryTable.getDataBodyRange(); - - let categoryChart = sheet.charts.add(Excel.ChartType.doughnut, dataRange, "Auto"); - - categoryChart.setPosition("A15", "F25"); - categoryChart.title.text = "Expenses By Category"; - categoryChart.title.format.font.size = 10; - categoryChart.title.format.font.name = "Corbel"; - categoryChart.title.format.font.color = "#41AEBD"; - categoryChart.legend.format.font.name = "Corbel"; - categoryChart.legend.format.font.size = 8; - categoryChart.legend.position = "Right"; - categoryChart.dataLabels.showPercentage = true; - categoryChart.dataLabels.format.font.size = 8; - categoryChart.dataLabels.format.font.color = "white"; - let points = categoryChart.series.getItemAt(0).points; - points.getItemAt(0).format.fill.setSolidColor("#0C8DB9"); - points.getItemAt(1).format.fill.setSolidColor("#B1D9F7"); - points.getItemAt(2).format.fill.setSolidColor("#4C66C5"); - points.getItemAt(3).format.fill.setSolidColor("#5CC9EF"); - points.getItemAt(4).format.fill.setSolidColor("#5CCBAD"); - points.getItemAt(5).format.fill.setSolidColor("#A5E750"); - - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const expensesByCategoryTable = sheet.tables.getItem("ExpensesByCategoryTable"); + const dataRange = expensesByCategoryTable.getDataBodyRange(); + + let categoryChart = sheet.charts.add(Excel.ChartType.doughnut, dataRange, "Auto"); + + categoryChart.setPosition("A15", "F25"); + categoryChart.title.text = "Expenses By Category"; + categoryChart.title.format.font.size = 10; + categoryChart.title.format.font.name = "Corbel"; + categoryChart.title.format.font.color = "#41AEBD"; + categoryChart.legend.format.font.name = "Corbel"; + categoryChart.legend.format.font.size = 8; + categoryChart.legend.position = "Right"; + categoryChart.dataLabels.showPercentage = true; + categoryChart.dataLabels.format.font.size = 8; + categoryChart.dataLabels.format.font.color = "gray"; + let points = categoryChart.series.getItemAt(0).points; + points.getItemAt(0).format.fill.setSolidColor("#0C8DB9"); + points.getItemAt(1).format.fill.setSolidColor("#B1D9F7"); + points.getItemAt(2).format.fill.setSolidColor("#4C66C5"); + points.getItemAt(3).format.fill.setSolidColor("#5CC9EF"); + points.getItemAt(4).format.fill.setSolidColor("#5CCBAD"); + points.getItemAt(5).format.fill.setSolidColor("#A5E750"); + + await context.sync(); + }); } - async function setup() { - try { - await Excel.run(async (context) => { + async function addSeries() { + await Excel.run(async context => { + const sheet = context.workbook.worksheets.getItem("Sample"); - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + let seriesCollection = sheet.charts.getItemAt(0); + let rangeSelection = sheet.getRange("C2:C7"); + let xRangeSelection = sheet.getRange("A1:A7"); - const sheet = context.workbook.worksheets.getItem("Sample"); + // Add a series. + let newSeries = seriesCollection.series.add("Qtr2"); + newSeries.setValues(rangeSelection); + newSeries.setXAxisValues(xRangeSelection); + // Set the size of the doughnut hole. + // The hole size is expressed as a percentage of the chart size. + newSeries.doughnutHoleSize = 80; - const expensesTable = sheet.tables.add('A1:B1', true); - expensesTable.name = "ExpensesByCategoryTable"; - - expensesTable.getHeaderRowRange().values = [["Category", "Expense"]]; - - expensesTable.rows.add(null, [ - ["Groceries", 5000], - ["Entertaiment", 400], - ["Education", 12000], - ["Charity", 1550], - ["Transportation", 225], - ["Other", 6005] - ]); - - sheet.getUsedRange().getEntireColumn().format.autofitColumns(); - sheet.getUsedRange().getEntireRow().format.autofitRows(); + await context.sync(); + }); + } - sheet.activate(); + async function setup() { + await Excel.run(async (context) => { + await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + const sheet = context.workbook.worksheets.getItem("Sample"); + const expensesTable = sheet.tables.add('A1:B1', true); + + expensesTable.name = "ExpensesByCategoryTable"; + expensesTable.getHeaderRowRange().values = [["Category", "Expense"]]; + expensesTable.rows.add(null, [ + ["Groceries", 5000], + ["Entertaiment", 400], + ["Education", 12000], + ["Charity", 1550], + ["Transportation", 225], + ["Other", 6005] + ]); + + sheet.getUsedRange().getEntireColumn().format.autofitColumns(); + sheet.getUsedRange().getEntireRow().format.autofitRows(); + sheet.activate(); + + await context.sync(); + }); + } - await context.sync(); - }); + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); } catch (error) { OfficeHelpers.UI.notify(error); @@ -105,6 +117,10 @@ template:

Try it out

+

Use the chart series to adjust the doughtnut hole size.

+ language: html diff --git a/samples/excel/50-chart/create-line-chart.yaml b/samples/excel/50-chart/create-line-chart.yaml deleted file mode 100644 index fde84171b..000000000 --- a/samples/excel/50-chart/create-line-chart.yaml +++ /dev/null @@ -1,119 +0,0 @@ -order: 3 -id: excel-chart-create-line-chart -name: Line chart -description: Create a line chart -host: EXCEL -api_set: - ExcelApi: 1.1 -script: - content: | - $("#setup").click(() => tryCatch(setup)); - $("#create-line-chart").click(() => tryCatch(createLineChart)); - - 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("A15", "E30"); - 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 setup() { - await Excel.run(async (context) => { - let sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "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] - ]); - - if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { - 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) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - language: typescript -template: - content: | -
-

This sample shows how to create a line chart.

-
- -
-

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 - - @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.1.1 \ No newline at end of file diff --git a/samples/excel/50-chart/create-xyscatter-chart.yaml b/samples/excel/50-chart/create-xyscatter-chart.yaml deleted file mode 100644 index ce5afa2a9..000000000 --- a/samples/excel/50-chart/create-xyscatter-chart.yaml +++ /dev/null @@ -1,116 +0,0 @@ -order: 4 -id: excel-chart-create-xyscatter-chart -name: XY scatter chart -description: Draws a basic XY scatter chart -host: EXCEL -api_set: - ExcelApi: 1.1 -script: - content: | - $("#setup").click(() => tryCatch(setup)); - $("#create-xy-scatter-chart").click(() => tryCatch(createXYScatterChart)); - - - async function createXYScatterChart() { - 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("XYScatter", dataRange, "Auto"); - chart.title.text = "Bicycle Parts Quarterly Sales"; - - await context.sync(); - }); - } - - async function setup() { - await Excel.run(async (context) => { - let sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); - let salesTable = sheet.tables.add('A1:E1', true); - salesTable.name = "SalesTable"; - - salesTable.getHeaderRowRange().values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4"]]; - - salesTable.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] - ]); - - if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { - 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) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - language: typescript -template: - content: |- -
-

This sample shows how to draw a basic XY scatter chart.

-
- -
-

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 - - @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.1.1 \ No newline at end of file diff --git a/view/excel.json b/view/excel.json index bc92f18a8..f396d48c8 100644 --- a/view/excel.json +++ b/view/excel.json @@ -46,16 +46,12 @@ "excel-create-and-use-named-item-for-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/45-named-item/create-and-use-named-item-for-range.yaml", "excel-named-item-list-named-items": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/45-named-item/list-named-items.yaml", "excel-update-named-item": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/45-named-item/update-named-item.yaml", - "excel-chart-create-column-clustered-chart": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/create-column-clustered-chart.yaml", + "excel-chart-create-several-charts": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-create-several-charts.yaml", "excel-chart-create-doughnut-chart": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/create-doughnut-chart.yaml", - "excel-chart-create-line-chart": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/create-line-chart.yaml", - "excel-chart-create-xyscatter-chart": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/create-xyscatter-chart.yaml", - "excel-chart-create-additonal-types": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/create-additional-chart-types.yaml", "excel-chart-axis": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-axis.yaml", "excel-chart-legend": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-legend.yaml", "excel-chart-point": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-point.yaml", "excel-chart-series": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-series.yaml", - "excel-chart-series-doughnutholesize": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-series-doughnutholesize.yaml", "excel-chart-series-markers": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-series-markers.yaml", "excel-chart-series-plotorder": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-series-plotorder.yaml", "excel-chart-title-substring": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-title-substring.yaml", From 541bcc3052255aa7cf8cf8dadb0fcd0168617d7c Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 24 Oct 2018 15:25:32 -0700 Subject: [PATCH 094/660] Using table sort (#221) --- samples/excel/40-table/sort-data.yaml | 116 +++++++++++++------------- 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/samples/excel/40-table/sort-data.yaml b/samples/excel/40-table/sort-data.yaml index 2b256b4e9..64d58f8dc 100644 --- a/samples/excel/40-table/sort-data.yaml +++ b/samples/excel/40-table/sort-data.yaml @@ -7,72 +7,72 @@ api_set: ExcelApi: 1.1 script: content: | - $("#setup").click(setup); - $("#sort-table").click(sortTable); + $("#setup").click(() => tryCatch(setup)); + $("#sort-table").click(() => tryCatch(sortTable)); async function sortTable() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - const expensesTable = sheet.tables.getItem("ExpensesTable"); - - // Queue a command to sort by most expensive transactions at the top (Amount, descending order) - var sortRange = expensesTable.getDataBodyRange(); - - sortRange.sort.apply([ - { - key: 3, - ascending: false, - }, - ]); - - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + await Excel.run(async context => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const expensesTable = sheet.tables.getItem("ExpensesTable"); + + // sort the table by the "Amount" column + const sortFields = [ + { + key: 3, + ascending: false + } + ]; + expensesTable.sort.apply(sortFields); + + await context.sync(); + }); } /** Create a new table with sample data */ async function setup() { - try { - await Excel.run(async (context) => { - - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - - const sheet = context.workbook.worksheets.getItem("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"] - ]); + await Excel.run(async context => { + await OfficeHelpers.ExcelUtilities.forceCreateSheet( + context.workbook, + "Sample" + ); + + const sheet = context.workbook.worksheets.getItem("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"] + ]); + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + } + sheet.activate(); - if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } - sheet.activate(); + await context.sync(); + }); + } - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } } language: typescript template: From 42dcd351a026c838b186c4300ed8808e6e5c4144 Mon Sep 17 00:00:00 2001 From: nico-bellante <35939126+nico-bellante@users.noreply.github.com> Date: Thu, 25 Oct 2018 14:32:42 -0700 Subject: [PATCH 095/660] 3.3.1 not 3.1.1 (#222) --- private-samples/excel/20-chart/chart-title-js.yaml | 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/20-scenarios/report-generation.yaml | 2 +- samples/excel/30-range/conditional-formatting-advanced.yaml | 2 +- samples/excel/30-range/conditional-formatting-basic.yaml | 2 +- samples/excel/30-range/copy-multiply-values.yaml | 2 +- samples/excel/30-range/create-and-use-range-intersection.yaml | 2 +- samples/excel/30-range/formatting.yaml | 2 +- samples/excel/30-range/insert-delete-clear-range.yaml | 2 +- samples/excel/30-range/range-hyperlink.yaml | 2 +- samples/excel/30-range/range-operations.yaml | 2 +- samples/excel/30-range/range-text-orientation.yaml | 2 +- samples/excel/30-range/selected-range.yaml | 2 +- samples/excel/30-range/set-get-values.yaml | 2 +- samples/excel/30-range/test-for-used-range.yaml | 2 +- samples/excel/30-range/working-with-dates.yaml | 2 +- samples/excel/35-worksheet/activeworksheet.yaml | 2 +- .../excel/35-worksheet/add-delete-rename-move-worksheet.yaml | 2 +- samples/excel/35-worksheet/data-validation.yaml | 2 +- samples/excel/35-worksheet/hide-unhide-worksheet.yaml | 2 +- samples/excel/35-worksheet/list-worksheets.yaml | 2 +- .../35-worksheet/reference-worksheets-by-relative-position.yaml | 2 +- samples/excel/35-worksheet/tab-color.yaml | 2 +- samples/excel/35-worksheet/worksheet-copy.yaml | 2 +- samples/excel/35-worksheet/worksheet-freeze-panes.yaml | 2 +- samples/excel/35-worksheet/worksheet-gridlines.yaml | 2 +- samples/excel/35-worksheet/worksheet-range-cell.yaml | 2 +- .../protect-data-in-worksheet-and-workbook-structure.yaml | 2 +- samples/excel/37-workbook/workbook-get-active-cell.yaml | 2 +- samples/excel/40-table/add-rows-and-columns-to-a-table.yaml | 2 +- samples/excel/40-table/convert-range-to-table.yaml | 2 +- samples/excel/40-table/create-table.yaml | 2 +- samples/excel/40-table/filter-data.yaml | 2 +- samples/excel/40-table/format-table.yaml | 2 +- samples/excel/40-table/get-data-from-table.yaml | 2 +- .../excel/40-table/get-visible-range-of-a-filtered-table.yaml | 2 +- samples/excel/40-table/import-json-data.yaml | 2 +- samples/excel/40-table/sort-data.yaml | 2 +- samples/excel/40-table/style.yaml | 2 +- samples/excel/45-named-item/create-and-remove-named-item.yaml | 2 +- .../45-named-item/create-and-use-named-item-for-range.yaml | 2 +- samples/excel/45-named-item/create-named-item.yaml | 2 +- samples/excel/45-named-item/list-named-items.yaml | 2 +- samples/excel/45-named-item/update-named-item.yaml | 2 +- samples/excel/50-chart/chart-axis-formatting.yaml | 2 +- samples/excel/50-chart/chart-axis.yaml | 2 +- samples/excel/50-chart/chart-formatting.yaml | 2 +- samples/excel/50-chart/chart-legend.yaml | 2 +- samples/excel/50-chart/chart-point.yaml | 2 +- samples/excel/50-chart/chart-series-markers.yaml | 2 +- samples/excel/50-chart/chart-series-plotorder.yaml | 2 +- samples/excel/50-chart/chart-series.yaml | 2 +- samples/excel/50-chart/chart-title-substring.yaml | 2 +- samples/excel/50-chart/chart-trendlines.yaml | 2 +- samples/excel/50-chart/create-doughnut-chart.yaml | 2 +- samples/excel/55-pivottable/pivottable-calculations.yaml | 2 +- samples/excel/55-pivottable/pivottable-create-and-modify.yaml | 2 +- .../excel/55-pivottable/pivottable-filters-and-summaries.yaml | 2 +- samples/excel/55-pivottable/refresh-pivot-table.yaml | 2 +- samples/excel/70-events/data-changed.yaml | 2 +- samples/excel/70-events/events-chart-activated.yaml | 2 +- .../excel/70-events/events-chartcollection-added-activated.yaml | 2 +- samples/excel/70-events/events-disable-events.yaml | 2 +- samples/excel/70-events/events-table-changed.yaml | 2 +- samples/excel/70-events/events-tablecollection-changed.yaml | 2 +- samples/excel/70-events/events-worksheet-activated.yaml | 2 +- samples/excel/70-events/events-worksheet-calculated.yaml | 2 +- samples/excel/70-events/events-worksheet-changed.yaml | 2 +- samples/excel/70-events/events-worksheet-selectionchanged.yaml | 2 +- .../excel/70-events/events-worksheetcollection-calculated.yaml | 2 +- samples/excel/70-events/selection-changed.yaml | 2 +- samples/excel/70-events/setting-changed.yaml | 2 +- .../excel/80-settings/create-get-change-delete-settings.yaml | 2 +- samples/excel/82-document/get-file-in-slices-async.yaml | 2 +- samples/excel/82-document/properties.yaml | 2 +- .../create-set-get-and-delete-custom-xml-parts.yaml | 2 +- .../85-custom-xml-parts/test-xml-for-unique-namespace.yaml | 2 +- samples/excel/88-common-patterns/multiple-property-set.yaml | 2 +- samples/excel/89-preview-apis/range-areas.yaml | 2 +- samples/excel/89-preview-apis/range-copyfrom.yaml | 2 +- samples/excel/90-just-for-fun/color-wheel.yaml | 2 +- samples/excel/90-just-for-fun/gradient.yaml | 2 +- samples/excel/90-just-for-fun/path-finder-game.yaml | 2 +- samples/excel/90-just-for-fun/patterns.yaml | 2 +- samples/excel/default.yaml | 2 +- samples/onenote/default.yaml | 2 +- samples/outlook/01-compose-basics/get-item-subject.yaml | 2 +- samples/outlook/01-compose-basics/get-selected-text.yaml | 2 +- samples/outlook/01-compose-basics/set-selected-text.yaml | 2 +- samples/outlook/default.yaml | 2 +- samples/powerpoint/basics/basic-common-api-call.yaml | 2 +- samples/powerpoint/basics/get-slide-metadata.yaml | 2 +- samples/powerpoint/basics/insert-image.yaml | 2 +- samples/powerpoint/default.yaml | 2 +- samples/project/basics/basic-common-api-call.yaml | 2 +- samples/project/default.yaml | 2 +- samples/web/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 +- samples/word/01-basics/basic-doc-assembly.yaml | 2 +- samples/word/01-basics/insert-and-get-pictures.yaml | 2 +- samples/word/01-basics/insert-formatted-text.yaml | 2 +- samples/word/01-basics/insert-header.yaml | 2 +- samples/word/01-basics/insert-line-and-page-breaks.yaml | 2 +- samples/word/01-basics/search.yaml | 2 +- .../word/02-paragraphs/get-paragraph-on-insertion-point.yaml | 2 +- samples/word/02-paragraphs/insert-in-different-locations.yaml | 2 +- samples/word/02-paragraphs/paragraph-properties.yaml | 2 +- .../03-content-controls/insert-and-change-content-controls.yaml | 2 +- samples/word/04-range/scroll-to-range.yaml | 2 +- samples/word/04-range/split-words-of-first-paragraph.yaml | 2 +- samples/word/05-tables/table-cell-access.yaml | 2 +- samples/word/06-lists/insert-list.yaml | 2 +- samples/word/07-custom-properties/get-built-in-properties.yaml | 2 +- .../read-write-custom-document-properties.yaml | 2 +- samples/word/50-common-patterns/multiple-property-set.yaml | 2 +- samples/word/99-fabric/fabric-insert-form-data.yaml | 2 +- samples/word/default.yaml | 2 +- 122 files changed, 122 insertions(+), 122 deletions(-) diff --git a/private-samples/excel/20-chart/chart-title-js.yaml b/private-samples/excel/20-chart/chart-title-js.yaml index a045028ee..d6eba987b 100644 --- a/private-samples/excel/20-chart/chart-title-js.yaml +++ b/private-samples/excel/20-chart/chart-title-js.yaml @@ -149,4 +149,4 @@ libraries: | @types/office-js @types/core-js @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/private-samples/excel/20-chart/chart-title-ts.yaml b/private-samples/excel/20-chart/chart-title-ts.yaml index 30e943f60..1feef0ca6 100644 --- a/private-samples/excel/20-chart/chart-title-ts.yaml +++ b/private-samples/excel/20-chart/chart-title-ts.yaml @@ -147,4 +147,4 @@ libraries: | @types/office-js @types/core-js @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/01-basics/basic-api-call-es5.yaml b/samples/excel/01-basics/basic-api-call-es5.yaml index a44f3b0cb..fc2353e65 100644 --- a/samples/excel/01-basics/basic-api-call-es5.yaml +++ b/samples/excel/01-basics/basic-api-call-es5.yaml @@ -56,4 +56,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ 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 b101726de..069a8b366 100644 --- a/samples/excel/01-basics/basic-api-call.yaml +++ b/samples/excel/01-basics/basic-api-call.yaml @@ -57,4 +57,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ 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 8e5123a55..78a2c5f3a 100644 --- a/samples/excel/01-basics/basic-common-api-call.yaml +++ b/samples/excel/01-basics/basic-common-api-call.yaml @@ -65,4 +65,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/20-scenarios/report-generation.yaml b/samples/excel/20-scenarios/report-generation.yaml index 30a4607e0..23100a1bd 100644 --- a/samples/excel/20-scenarios/report-generation.yaml +++ b/samples/excel/20-scenarios/report-generation.yaml @@ -162,4 +162,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/30-range/conditional-formatting-advanced.yaml b/samples/excel/30-range/conditional-formatting-advanced.yaml index e4d8241c4..160dc2459 100644 --- a/samples/excel/30-range/conditional-formatting-advanced.yaml +++ b/samples/excel/30-range/conditional-formatting-advanced.yaml @@ -276,4 +276,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/30-range/conditional-formatting-basic.yaml b/samples/excel/30-range/conditional-formatting-basic.yaml index e081becd6..15efe159f 100644 --- a/samples/excel/30-range/conditional-formatting-basic.yaml +++ b/samples/excel/30-range/conditional-formatting-basic.yaml @@ -394,4 +394,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/30-range/copy-multiply-values.yaml b/samples/excel/30-range/copy-multiply-values.yaml index fcb400b1d..416ac0d3d 100644 --- a/samples/excel/30-range/copy-multiply-values.yaml +++ b/samples/excel/30-range/copy-multiply-values.yaml @@ -176,4 +176,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/30-range/create-and-use-range-intersection.yaml b/samples/excel/30-range/create-and-use-range-intersection.yaml index 928f2cd02..53172059a 100644 --- a/samples/excel/30-range/create-and-use-range-intersection.yaml +++ b/samples/excel/30-range/create-and-use-range-intersection.yaml @@ -159,4 +159,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/30-range/formatting.yaml b/samples/excel/30-range/formatting.yaml index 3787e25ec..6239e7eb1 100644 --- a/samples/excel/30-range/formatting.yaml +++ b/samples/excel/30-range/formatting.yaml @@ -131,4 +131,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/30-range/insert-delete-clear-range.yaml b/samples/excel/30-range/insert-delete-clear-range.yaml index 4ad255227..c062283e8 100644 --- a/samples/excel/30-range/insert-delete-clear-range.yaml +++ b/samples/excel/30-range/insert-delete-clear-range.yaml @@ -150,4 +150,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/30-range/range-hyperlink.yaml b/samples/excel/30-range/range-hyperlink.yaml index 5365e3dbd..363f74702 100644 --- a/samples/excel/30-range/range-hyperlink.yaml +++ b/samples/excel/30-range/range-hyperlink.yaml @@ -338,4 +338,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/30-range/range-operations.yaml b/samples/excel/30-range/range-operations.yaml index e6f301d3d..e102535cd 100644 --- a/samples/excel/30-range/range-operations.yaml +++ b/samples/excel/30-range/range-operations.yaml @@ -176,4 +176,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/30-range/range-text-orientation.yaml b/samples/excel/30-range/range-text-orientation.yaml index 4c01c1908..0d36429ea 100644 --- a/samples/excel/30-range/range-text-orientation.yaml +++ b/samples/excel/30-range/range-text-orientation.yaml @@ -127,4 +127,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/30-range/selected-range.yaml b/samples/excel/30-range/selected-range.yaml index d9a67e3f6..983c60e6d 100644 --- a/samples/excel/30-range/selected-range.yaml +++ b/samples/excel/30-range/selected-range.yaml @@ -88,4 +88,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/30-range/set-get-values.yaml b/samples/excel/30-range/set-get-values.yaml index 647aeecc8..3eec082c2 100644 --- a/samples/excel/30-range/set-get-values.yaml +++ b/samples/excel/30-range/set-get-values.yaml @@ -287,4 +287,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/30-range/test-for-used-range.yaml b/samples/excel/30-range/test-for-used-range.yaml index 699523db8..511eff887 100644 --- a/samples/excel/30-range/test-for-used-range.yaml +++ b/samples/excel/30-range/test-for-used-range.yaml @@ -121,4 +121,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/30-range/working-with-dates.yaml b/samples/excel/30-range/working-with-dates.yaml index c6fb085e1..400e103ea 100644 --- a/samples/excel/30-range/working-with-dates.yaml +++ b/samples/excel/30-range/working-with-dates.yaml @@ -155,7 +155,7 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 + @types/jquery@3.3.1 moment@2.18.1 moment-msdate@0.2.2 \ No newline at end of file diff --git a/samples/excel/35-worksheet/activeworksheet.yaml b/samples/excel/35-worksheet/activeworksheet.yaml index 4a2d1e3a4..c64329d8e 100644 --- a/samples/excel/35-worksheet/activeworksheet.yaml +++ b/samples/excel/35-worksheet/activeworksheet.yaml @@ -139,4 +139,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/35-worksheet/add-delete-rename-move-worksheet.yaml b/samples/excel/35-worksheet/add-delete-rename-move-worksheet.yaml index 00887fc1b..6021a3546 100644 --- a/samples/excel/35-worksheet/add-delete-rename-move-worksheet.yaml +++ b/samples/excel/35-worksheet/add-delete-rename-move-worksheet.yaml @@ -165,4 +165,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/35-worksheet/data-validation.yaml b/samples/excel/35-worksheet/data-validation.yaml index cac1f1b49..fa2030da4 100644 --- a/samples/excel/35-worksheet/data-validation.yaml +++ b/samples/excel/35-worksheet/data-validation.yaml @@ -173,4 +173,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/35-worksheet/hide-unhide-worksheet.yaml b/samples/excel/35-worksheet/hide-unhide-worksheet.yaml index bb435ebdb..9d8dec053 100644 --- a/samples/excel/35-worksheet/hide-unhide-worksheet.yaml +++ b/samples/excel/35-worksheet/hide-unhide-worksheet.yaml @@ -112,4 +112,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/35-worksheet/list-worksheets.yaml b/samples/excel/35-worksheet/list-worksheets.yaml index f7d40344f..35852bdcb 100644 --- a/samples/excel/35-worksheet/list-worksheets.yaml +++ b/samples/excel/35-worksheet/list-worksheets.yaml @@ -74,4 +74,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/35-worksheet/reference-worksheets-by-relative-position.yaml b/samples/excel/35-worksheet/reference-worksheets-by-relative-position.yaml index ced029d0a..c2333800c 100644 --- a/samples/excel/35-worksheet/reference-worksheets-by-relative-position.yaml +++ b/samples/excel/35-worksheet/reference-worksheets-by-relative-position.yaml @@ -170,4 +170,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/35-worksheet/tab-color.yaml b/samples/excel/35-worksheet/tab-color.yaml index fe1adaeac..fec3fde07 100644 --- a/samples/excel/35-worksheet/tab-color.yaml +++ b/samples/excel/35-worksheet/tab-color.yaml @@ -115,4 +115,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/35-worksheet/worksheet-copy.yaml b/samples/excel/35-worksheet/worksheet-copy.yaml index 2ab9aaf09..ca46b5b51 100644 --- a/samples/excel/35-worksheet/worksheet-copy.yaml +++ b/samples/excel/35-worksheet/worksheet-copy.yaml @@ -104,4 +104,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/35-worksheet/worksheet-freeze-panes.yaml b/samples/excel/35-worksheet/worksheet-freeze-panes.yaml index c8230dd42..d22431c24 100644 --- a/samples/excel/35-worksheet/worksheet-freeze-panes.yaml +++ b/samples/excel/35-worksheet/worksheet-freeze-panes.yaml @@ -185,4 +185,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/35-worksheet/worksheet-gridlines.yaml b/samples/excel/35-worksheet/worksheet-gridlines.yaml index 1433fea9b..cd9189454 100644 --- a/samples/excel/35-worksheet/worksheet-gridlines.yaml +++ b/samples/excel/35-worksheet/worksheet-gridlines.yaml @@ -85,4 +85,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/35-worksheet/worksheet-range-cell.yaml b/samples/excel/35-worksheet/worksheet-range-cell.yaml index d2eee4cc4..adf021456 100644 --- a/samples/excel/35-worksheet/worksheet-range-cell.yaml +++ b/samples/excel/35-worksheet/worksheet-range-cell.yaml @@ -174,4 +174,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/37-workbook/protect-data-in-worksheet-and-workbook-structure.yaml b/samples/excel/37-workbook/protect-data-in-worksheet-and-workbook-structure.yaml index 75d9ee64e..5d336df4d 100644 --- a/samples/excel/37-workbook/protect-data-in-worksheet-and-workbook-structure.yaml +++ b/samples/excel/37-workbook/protect-data-in-worksheet-and-workbook-structure.yaml @@ -259,4 +259,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/37-workbook/workbook-get-active-cell.yaml b/samples/excel/37-workbook/workbook-get-active-cell.yaml index 97accb520..f73193bfe 100644 --- a/samples/excel/37-workbook/workbook-get-active-cell.yaml +++ b/samples/excel/37-workbook/workbook-get-active-cell.yaml @@ -64,4 +64,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/40-table/add-rows-and-columns-to-a-table.yaml b/samples/excel/40-table/add-rows-and-columns-to-a-table.yaml index bf238f3b8..215cdd55f 100644 --- a/samples/excel/40-table/add-rows-and-columns-to-a-table.yaml +++ b/samples/excel/40-table/add-rows-and-columns-to-a-table.yaml @@ -201,4 +201,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/40-table/convert-range-to-table.yaml b/samples/excel/40-table/convert-range-to-table.yaml index 1b426e0c2..ad49fbcd1 100644 --- a/samples/excel/40-table/convert-range-to-table.yaml +++ b/samples/excel/40-table/convert-range-to-table.yaml @@ -119,4 +119,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/40-table/create-table.yaml b/samples/excel/40-table/create-table.yaml index 1eb86f11e..33e274281 100644 --- a/samples/excel/40-table/create-table.yaml +++ b/samples/excel/40-table/create-table.yaml @@ -88,4 +88,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/40-table/filter-data.yaml b/samples/excel/40-table/filter-data.yaml index a04a0a862..96d6383dc 100644 --- a/samples/excel/40-table/filter-data.yaml +++ b/samples/excel/40-table/filter-data.yaml @@ -147,4 +147,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/40-table/format-table.yaml b/samples/excel/40-table/format-table.yaml index 404c0b2a3..a32a22b2b 100644 --- a/samples/excel/40-table/format-table.yaml +++ b/samples/excel/40-table/format-table.yaml @@ -121,4 +121,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/40-table/get-data-from-table.yaml b/samples/excel/40-table/get-data-from-table.yaml index a976ea7b5..4c211f7cc 100644 --- a/samples/excel/40-table/get-data-from-table.yaml +++ b/samples/excel/40-table/get-data-from-table.yaml @@ -140,4 +140,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/40-table/get-visible-range-of-a-filtered-table.yaml b/samples/excel/40-table/get-visible-range-of-a-filtered-table.yaml index 221560bec..8bc2053b7 100644 --- a/samples/excel/40-table/get-visible-range-of-a-filtered-table.yaml +++ b/samples/excel/40-table/get-visible-range-of-a-filtered-table.yaml @@ -181,4 +181,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/40-table/import-json-data.yaml b/samples/excel/40-table/import-json-data.yaml index f16c02439..7da1d2ba8 100644 --- a/samples/excel/40-table/import-json-data.yaml +++ b/samples/excel/40-table/import-json-data.yaml @@ -153,4 +153,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/40-table/sort-data.yaml b/samples/excel/40-table/sort-data.yaml index 64d58f8dc..fbdefbe3e 100644 --- a/samples/excel/40-table/sort-data.yaml +++ b/samples/excel/40-table/sort-data.yaml @@ -122,4 +122,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/40-table/style.yaml b/samples/excel/40-table/style.yaml index 4053ff778..6ab2ef5bc 100644 --- a/samples/excel/40-table/style.yaml +++ b/samples/excel/40-table/style.yaml @@ -238,4 +238,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/45-named-item/create-and-remove-named-item.yaml b/samples/excel/45-named-item/create-and-remove-named-item.yaml index 539e4a24a..151681c3d 100644 --- a/samples/excel/45-named-item/create-and-remove-named-item.yaml +++ b/samples/excel/45-named-item/create-and-remove-named-item.yaml @@ -184,4 +184,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/45-named-item/create-and-use-named-item-for-range.yaml b/samples/excel/45-named-item/create-and-use-named-item-for-range.yaml index 7fbc7c938..17a31d2d2 100644 --- a/samples/excel/45-named-item/create-and-use-named-item-for-range.yaml +++ b/samples/excel/45-named-item/create-and-use-named-item-for-range.yaml @@ -176,4 +176,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/45-named-item/create-named-item.yaml b/samples/excel/45-named-item/create-named-item.yaml index 5ef72872e..60bb49dc2 100644 --- a/samples/excel/45-named-item/create-named-item.yaml +++ b/samples/excel/45-named-item/create-named-item.yaml @@ -146,4 +146,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/45-named-item/list-named-items.yaml b/samples/excel/45-named-item/list-named-items.yaml index 15326deed..1d9009d88 100644 --- a/samples/excel/45-named-item/list-named-items.yaml +++ b/samples/excel/45-named-item/list-named-items.yaml @@ -71,4 +71,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/45-named-item/update-named-item.yaml b/samples/excel/45-named-item/update-named-item.yaml index 3bbd86e14..20f909c40 100644 --- a/samples/excel/45-named-item/update-named-item.yaml +++ b/samples/excel/45-named-item/update-named-item.yaml @@ -133,4 +133,4 @@ libraries: |- @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/50-chart/chart-axis-formatting.yaml b/samples/excel/50-chart/chart-axis-formatting.yaml index 6269aacd9..69af54d53 100644 --- a/samples/excel/50-chart/chart-axis-formatting.yaml +++ b/samples/excel/50-chart/chart-axis-formatting.yaml @@ -177,4 +177,4 @@ libraries: |- @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/50-chart/chart-axis.yaml b/samples/excel/50-chart/chart-axis.yaml index 837c9c1d5..ce65283ba 100644 --- a/samples/excel/50-chart/chart-axis.yaml +++ b/samples/excel/50-chart/chart-axis.yaml @@ -79,4 +79,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/50-chart/chart-formatting.yaml b/samples/excel/50-chart/chart-formatting.yaml index 99e8ebdd4..e52ef5f76 100644 --- a/samples/excel/50-chart/chart-formatting.yaml +++ b/samples/excel/50-chart/chart-formatting.yaml @@ -307,4 +307,4 @@ libraries: |- @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/50-chart/chart-legend.yaml b/samples/excel/50-chart/chart-legend.yaml index 5eea3b9af..74c987aa1 100644 --- a/samples/excel/50-chart/chart-legend.yaml +++ b/samples/excel/50-chart/chart-legend.yaml @@ -148,4 +148,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/50-chart/chart-point.yaml b/samples/excel/50-chart/chart-point.yaml index c47464454..4a264eb5a 100644 --- a/samples/excel/50-chart/chart-point.yaml +++ b/samples/excel/50-chart/chart-point.yaml @@ -134,4 +134,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/50-chart/chart-series-markers.yaml b/samples/excel/50-chart/chart-series-markers.yaml index e1ed55036..d03a44f8a 100644 --- a/samples/excel/50-chart/chart-series-markers.yaml +++ b/samples/excel/50-chart/chart-series-markers.yaml @@ -127,4 +127,4 @@ libraries: |- @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/50-chart/chart-series-plotorder.yaml b/samples/excel/50-chart/chart-series-plotorder.yaml index 1db5c7395..65a0a765f 100644 --- a/samples/excel/50-chart/chart-series-plotorder.yaml +++ b/samples/excel/50-chart/chart-series-plotorder.yaml @@ -138,4 +138,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/50-chart/chart-series.yaml b/samples/excel/50-chart/chart-series.yaml index fb37fd776..53da8b102 100644 --- a/samples/excel/50-chart/chart-series.yaml +++ b/samples/excel/50-chart/chart-series.yaml @@ -177,4 +177,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/50-chart/chart-title-substring.yaml b/samples/excel/50-chart/chart-title-substring.yaml index b504a6c55..91f1ce6bd 100644 --- a/samples/excel/50-chart/chart-title-substring.yaml +++ b/samples/excel/50-chart/chart-title-substring.yaml @@ -126,4 +126,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/50-chart/chart-trendlines.yaml b/samples/excel/50-chart/chart-trendlines.yaml index 957280b8b..bad3d46d8 100644 --- a/samples/excel/50-chart/chart-trendlines.yaml +++ b/samples/excel/50-chart/chart-trendlines.yaml @@ -204,4 +204,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/50-chart/create-doughnut-chart.yaml b/samples/excel/50-chart/create-doughnut-chart.yaml index 02dbb57aa..da28d6e5b 100644 --- a/samples/excel/50-chart/create-doughnut-chart.yaml +++ b/samples/excel/50-chart/create-doughnut-chart.yaml @@ -151,4 +151,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/55-pivottable/pivottable-calculations.yaml b/samples/excel/55-pivottable/pivottable-calculations.yaml index e0b0be91e..524cdcc54 100644 --- a/samples/excel/55-pivottable/pivottable-calculations.yaml +++ b/samples/excel/55-pivottable/pivottable-calculations.yaml @@ -212,4 +212,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/55-pivottable/pivottable-create-and-modify.yaml b/samples/excel/55-pivottable/pivottable-create-and-modify.yaml index d3c78e8d4..e4297c4a4 100644 --- a/samples/excel/55-pivottable/pivottable-create-and-modify.yaml +++ b/samples/excel/55-pivottable/pivottable-create-and-modify.yaml @@ -275,4 +275,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/55-pivottable/pivottable-filters-and-summaries.yaml b/samples/excel/55-pivottable/pivottable-filters-and-summaries.yaml index 25c0ba1e7..5e44f2803 100644 --- a/samples/excel/55-pivottable/pivottable-filters-and-summaries.yaml +++ b/samples/excel/55-pivottable/pivottable-filters-and-summaries.yaml @@ -230,4 +230,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/55-pivottable/refresh-pivot-table.yaml b/samples/excel/55-pivottable/refresh-pivot-table.yaml index 63f986f40..1b7b35ba5 100644 --- a/samples/excel/55-pivottable/refresh-pivot-table.yaml +++ b/samples/excel/55-pivottable/refresh-pivot-table.yaml @@ -133,4 +133,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/70-events/data-changed.yaml b/samples/excel/70-events/data-changed.yaml index cf13696e0..82b8c9a5b 100644 --- a/samples/excel/70-events/data-changed.yaml +++ b/samples/excel/70-events/data-changed.yaml @@ -110,4 +110,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 + @types/jquery@3.3.1 diff --git a/samples/excel/70-events/events-chart-activated.yaml b/samples/excel/70-events/events-chart-activated.yaml index 43fc7e89c..6b4465625 100644 --- a/samples/excel/70-events/events-chart-activated.yaml +++ b/samples/excel/70-events/events-chart-activated.yaml @@ -163,4 +163,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/70-events/events-chartcollection-added-activated.yaml b/samples/excel/70-events/events-chartcollection-added-activated.yaml index 2c0f9529e..3e2260c49 100644 --- a/samples/excel/70-events/events-chartcollection-added-activated.yaml +++ b/samples/excel/70-events/events-chartcollection-added-activated.yaml @@ -155,4 +155,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/70-events/events-disable-events.yaml b/samples/excel/70-events/events-disable-events.yaml index 0c359695a..024198afc 100644 --- a/samples/excel/70-events/events-disable-events.yaml +++ b/samples/excel/70-events/events-disable-events.yaml @@ -174,4 +174,4 @@ libraries: |- @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/70-events/events-table-changed.yaml b/samples/excel/70-events/events-table-changed.yaml index 34f1b9758..8ae7e07cf 100644 --- a/samples/excel/70-events/events-table-changed.yaml +++ b/samples/excel/70-events/events-table-changed.yaml @@ -184,4 +184,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 + @types/jquery@3.3.1 diff --git a/samples/excel/70-events/events-tablecollection-changed.yaml b/samples/excel/70-events/events-tablecollection-changed.yaml index fe95812d8..8958c0b6f 100644 --- a/samples/excel/70-events/events-tablecollection-changed.yaml +++ b/samples/excel/70-events/events-tablecollection-changed.yaml @@ -171,4 +171,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 + @types/jquery@3.3.1 diff --git a/samples/excel/70-events/events-worksheet-activated.yaml b/samples/excel/70-events/events-worksheet-activated.yaml index fd86f7084..46b7d3cf0 100644 --- a/samples/excel/70-events/events-worksheet-activated.yaml +++ b/samples/excel/70-events/events-worksheet-activated.yaml @@ -170,4 +170,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/70-events/events-worksheet-calculated.yaml b/samples/excel/70-events/events-worksheet-calculated.yaml index 954cc71c2..97c391c63 100644 --- a/samples/excel/70-events/events-worksheet-calculated.yaml +++ b/samples/excel/70-events/events-worksheet-calculated.yaml @@ -118,4 +118,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/70-events/events-worksheet-changed.yaml b/samples/excel/70-events/events-worksheet-changed.yaml index 7704f88d5..cd31a0b81 100644 --- a/samples/excel/70-events/events-worksheet-changed.yaml +++ b/samples/excel/70-events/events-worksheet-changed.yaml @@ -184,4 +184,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 + @types/jquery@3.3.1 diff --git a/samples/excel/70-events/events-worksheet-selectionchanged.yaml b/samples/excel/70-events/events-worksheet-selectionchanged.yaml index 94f608d27..0b0de94c3 100644 --- a/samples/excel/70-events/events-worksheet-selectionchanged.yaml +++ b/samples/excel/70-events/events-worksheet-selectionchanged.yaml @@ -138,4 +138,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/70-events/events-worksheetcollection-calculated.yaml b/samples/excel/70-events/events-worksheetcollection-calculated.yaml index dd47accb9..874274ebc 100644 --- a/samples/excel/70-events/events-worksheetcollection-calculated.yaml +++ b/samples/excel/70-events/events-worksheetcollection-calculated.yaml @@ -156,4 +156,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/70-events/selection-changed.yaml b/samples/excel/70-events/selection-changed.yaml index dfe4a876a..79d9efd52 100644 --- a/samples/excel/70-events/selection-changed.yaml +++ b/samples/excel/70-events/selection-changed.yaml @@ -132,4 +132,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/70-events/setting-changed.yaml b/samples/excel/70-events/setting-changed.yaml index 40d6fd27f..5eb7777a9 100644 --- a/samples/excel/70-events/setting-changed.yaml +++ b/samples/excel/70-events/setting-changed.yaml @@ -137,4 +137,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/80-settings/create-get-change-delete-settings.yaml b/samples/excel/80-settings/create-get-change-delete-settings.yaml index 673a111e9..822997a40 100644 --- a/samples/excel/80-settings/create-get-change-delete-settings.yaml +++ b/samples/excel/80-settings/create-get-change-delete-settings.yaml @@ -124,4 +124,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/82-document/get-file-in-slices-async.yaml b/samples/excel/82-document/get-file-in-slices-async.yaml index 10b4e6b5a..bd08f02bb 100644 --- a/samples/excel/82-document/get-file-in-slices-async.yaml +++ b/samples/excel/82-document/get-file-in-slices-async.yaml @@ -225,6 +225,6 @@ libraries: |- @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 + @types/jquery@3.3.1 https://unpkg.com/base64-js@1.2.1/base64js.min.js \ No newline at end of file diff --git a/samples/excel/82-document/properties.yaml b/samples/excel/82-document/properties.yaml index cf69b458b..1c625bb3f 100644 --- a/samples/excel/82-document/properties.yaml +++ b/samples/excel/82-document/properties.yaml @@ -187,4 +187,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/85-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml b/samples/excel/85-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml index 25d0c04e2..0ec57cba0 100644 --- a/samples/excel/85-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml +++ b/samples/excel/85-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml @@ -159,4 +159,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/85-custom-xml-parts/test-xml-for-unique-namespace.yaml b/samples/excel/85-custom-xml-parts/test-xml-for-unique-namespace.yaml index 4217eae5e..8311025a8 100644 --- a/samples/excel/85-custom-xml-parts/test-xml-for-unique-namespace.yaml +++ b/samples/excel/85-custom-xml-parts/test-xml-for-unique-namespace.yaml @@ -145,4 +145,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/88-common-patterns/multiple-property-set.yaml b/samples/excel/88-common-patterns/multiple-property-set.yaml index 5628aae68..593c44841 100644 --- a/samples/excel/88-common-patterns/multiple-property-set.yaml +++ b/samples/excel/88-common-patterns/multiple-property-set.yaml @@ -142,4 +142,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/89-preview-apis/range-areas.yaml b/samples/excel/89-preview-apis/range-areas.yaml index 94b26bb1f..dc1dd2345 100644 --- a/samples/excel/89-preview-apis/range-areas.yaml +++ b/samples/excel/89-preview-apis/range-areas.yaml @@ -184,4 +184,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/89-preview-apis/range-copyfrom.yaml b/samples/excel/89-preview-apis/range-copyfrom.yaml index b8546479d..01926a5c8 100644 --- a/samples/excel/89-preview-apis/range-copyfrom.yaml +++ b/samples/excel/89-preview-apis/range-copyfrom.yaml @@ -197,4 +197,4 @@ libraries: |- @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/90-just-for-fun/color-wheel.yaml b/samples/excel/90-just-for-fun/color-wheel.yaml index 274eae6b0..b4bc016e9 100644 --- a/samples/excel/90-just-for-fun/color-wheel.yaml +++ b/samples/excel/90-just-for-fun/color-wheel.yaml @@ -154,4 +154,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/90-just-for-fun/gradient.yaml b/samples/excel/90-just-for-fun/gradient.yaml index 112aa9983..b7f636e62 100644 --- a/samples/excel/90-just-for-fun/gradient.yaml +++ b/samples/excel/90-just-for-fun/gradient.yaml @@ -205,7 +205,7 @@ libraries: |- @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 + @types/jquery@3.3.1 tinycolor2@1.4.1/tinycolor.js @types/tinycolor2 diff --git a/samples/excel/90-just-for-fun/path-finder-game.yaml b/samples/excel/90-just-for-fun/path-finder-game.yaml index 5dc09621d..ba6c566b3 100644 --- a/samples/excel/90-just-for-fun/path-finder-game.yaml +++ b/samples/excel/90-just-for-fun/path-finder-game.yaml @@ -234,4 +234,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/90-just-for-fun/patterns.yaml b/samples/excel/90-just-for-fun/patterns.yaml index 025181872..4d6664463 100644 --- a/samples/excel/90-just-for-fun/patterns.yaml +++ b/samples/excel/90-just-for-fun/patterns.yaml @@ -202,4 +202,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/default.yaml b/samples/excel/default.yaml index 5a059085a..9d1e213e1 100644 --- a/samples/excel/default.yaml +++ b/samples/excel/default.yaml @@ -53,4 +53,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/onenote/default.yaml b/samples/onenote/default.yaml index b11850b6b..b1cd55397 100644 --- a/samples/onenote/default.yaml +++ b/samples/onenote/default.yaml @@ -53,4 +53,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/outlook/01-compose-basics/get-item-subject.yaml b/samples/outlook/01-compose-basics/get-item-subject.yaml index d730a9891..eecffba23 100644 --- a/samples/outlook/01-compose-basics/get-item-subject.yaml +++ b/samples/outlook/01-compose-basics/get-item-subject.yaml @@ -43,4 +43,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/outlook/01-compose-basics/get-selected-text.yaml b/samples/outlook/01-compose-basics/get-selected-text.yaml index 18bd0eb7e..104313881 100644 --- a/samples/outlook/01-compose-basics/get-selected-text.yaml +++ b/samples/outlook/01-compose-basics/get-selected-text.yaml @@ -43,4 +43,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/outlook/01-compose-basics/set-selected-text.yaml b/samples/outlook/01-compose-basics/set-selected-text.yaml index bcd5bd082..089fd0c7a 100644 --- a/samples/outlook/01-compose-basics/set-selected-text.yaml +++ b/samples/outlook/01-compose-basics/set-selected-text.yaml @@ -41,4 +41,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/outlook/default.yaml b/samples/outlook/default.yaml index 0c468bcbb..88856c9ee 100644 --- a/samples/outlook/default.yaml +++ b/samples/outlook/default.yaml @@ -36,4 +36,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @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 7fb53aa38..4cb7c4da7 100644 --- a/samples/powerpoint/basics/basic-common-api-call.yaml +++ b/samples/powerpoint/basics/basic-common-api-call.yaml @@ -44,4 +44,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/powerpoint/basics/get-slide-metadata.yaml b/samples/powerpoint/basics/get-slide-metadata.yaml index ecc71ffae..67d7e4860 100644 --- a/samples/powerpoint/basics/get-slide-metadata.yaml +++ b/samples/powerpoint/basics/get-slide-metadata.yaml @@ -81,4 +81,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/powerpoint/basics/insert-image.yaml b/samples/powerpoint/basics/insert-image.yaml index 5cfd3b9f8..dca742971 100644 --- a/samples/powerpoint/basics/insert-image.yaml +++ b/samples/powerpoint/basics/insert-image.yaml @@ -86,4 +86,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/powerpoint/default.yaml b/samples/powerpoint/default.yaml index 80bfe291d..e6696ccc7 100644 --- a/samples/powerpoint/default.yaml +++ b/samples/powerpoint/default.yaml @@ -42,4 +42,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ 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 1ef2f5472..99a30b69e 100644 --- a/samples/project/basics/basic-common-api-call.yaml +++ b/samples/project/basics/basic-common-api-call.yaml @@ -44,4 +44,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/project/default.yaml b/samples/project/default.yaml index 5f9c9c6e3..e3d70cd8c 100644 --- a/samples/project/default.yaml +++ b/samples/project/default.yaml @@ -42,4 +42,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/web/default.yaml b/samples/web/default.yaml index 00a6957ee..5bb1cb16a 100644 --- a/samples/web/default.yaml +++ b/samples/web/default.yaml @@ -33,4 +33,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/word/01-basics/basic-api-call-es5.yaml b/samples/word/01-basics/basic-api-call-es5.yaml index cb4895ae9..52ff7fdce 100644 --- a/samples/word/01-basics/basic-api-call-es5.yaml +++ b/samples/word/01-basics/basic-api-call-es5.yaml @@ -69,4 +69,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ 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 6e49b3442..7c6d930ac 100644 --- a/samples/word/01-basics/basic-api-call.yaml +++ b/samples/word/01-basics/basic-api-call.yaml @@ -70,4 +70,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ 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 8373bdc60..7ee641376 100644 --- a/samples/word/01-basics/basic-common-api-call.yaml +++ b/samples/word/01-basics/basic-common-api-call.yaml @@ -56,4 +56,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/word/01-basics/basic-doc-assembly.yaml b/samples/word/01-basics/basic-doc-assembly.yaml index 0f9aca5b3..6f95669aa 100644 --- a/samples/word/01-basics/basic-doc-assembly.yaml +++ b/samples/word/01-basics/basic-doc-assembly.yaml @@ -166,4 +166,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/word/01-basics/insert-and-get-pictures.yaml b/samples/word/01-basics/insert-and-get-pictures.yaml index dc429345a..d2418581a 100644 --- a/samples/word/01-basics/insert-and-get-pictures.yaml +++ b/samples/word/01-basics/insert-and-get-pictures.yaml @@ -116,4 +116,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 + @types/jquery@3.3.1 diff --git a/samples/word/01-basics/insert-formatted-text.yaml b/samples/word/01-basics/insert-formatted-text.yaml index 06eb7b478..174fdca13 100644 --- a/samples/word/01-basics/insert-formatted-text.yaml +++ b/samples/word/01-basics/insert-formatted-text.yaml @@ -92,4 +92,4 @@ libraries: |- @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 + @types/jquery@3.3.1 diff --git a/samples/word/01-basics/insert-header.yaml b/samples/word/01-basics/insert-header.yaml index 2a5daea5c..4440b7684 100644 --- a/samples/word/01-basics/insert-header.yaml +++ b/samples/word/01-basics/insert-header.yaml @@ -70,4 +70,4 @@ libraries: |- @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/word/01-basics/insert-line-and-page-breaks.yaml b/samples/word/01-basics/insert-line-and-page-breaks.yaml index 773349cdd..dc2fbb534 100644 --- a/samples/word/01-basics/insert-line-and-page-breaks.yaml +++ b/samples/word/01-basics/insert-line-and-page-breaks.yaml @@ -101,4 +101,4 @@ libraries: |- @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/word/01-basics/search.yaml b/samples/word/01-basics/search.yaml index 978f169c4..82baf6dce 100644 --- a/samples/word/01-basics/search.yaml +++ b/samples/word/01-basics/search.yaml @@ -115,4 +115,4 @@ libraries: |- @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 + @types/jquery@3.3.1 diff --git a/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml b/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml index 4a2c9d573..a3bca1fe6 100644 --- a/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml +++ b/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml @@ -123,4 +123,4 @@ libraries: |- @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/word/02-paragraphs/insert-in-different-locations.yaml b/samples/word/02-paragraphs/insert-in-different-locations.yaml index 7cd13e3be..10f8452bf 100644 --- a/samples/word/02-paragraphs/insert-in-different-locations.yaml +++ b/samples/word/02-paragraphs/insert-in-different-locations.yaml @@ -154,4 +154,4 @@ libraries: |- @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 + @types/jquery@3.3.1 diff --git a/samples/word/02-paragraphs/paragraph-properties.yaml b/samples/word/02-paragraphs/paragraph-properties.yaml index d82101b50..536f2616b 100644 --- a/samples/word/02-paragraphs/paragraph-properties.yaml +++ b/samples/word/02-paragraphs/paragraph-properties.yaml @@ -133,4 +133,4 @@ libraries: |- @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/word/03-content-controls/insert-and-change-content-controls.yaml b/samples/word/03-content-controls/insert-and-change-content-controls.yaml index c55b7dd1f..aca9f4295 100644 --- a/samples/word/03-content-controls/insert-and-change-content-controls.yaml +++ b/samples/word/03-content-controls/insert-and-change-content-controls.yaml @@ -149,4 +149,4 @@ libraries: |- @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 + @types/jquery@3.3.1 diff --git a/samples/word/04-range/scroll-to-range.yaml b/samples/word/04-range/scroll-to-range.yaml index 8eff712da..72223e4ad 100644 --- a/samples/word/04-range/scroll-to-range.yaml +++ b/samples/word/04-range/scroll-to-range.yaml @@ -104,4 +104,4 @@ libraries: |- @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 + @types/jquery@3.3.1 diff --git a/samples/word/04-range/split-words-of-first-paragraph.yaml b/samples/word/04-range/split-words-of-first-paragraph.yaml index f2ac23dd5..a4b54b4e8 100644 --- a/samples/word/04-range/split-words-of-first-paragraph.yaml +++ b/samples/word/04-range/split-words-of-first-paragraph.yaml @@ -102,4 +102,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/word/05-tables/table-cell-access.yaml b/samples/word/05-tables/table-cell-access.yaml index fe2e34999..a63a5ec6a 100644 --- a/samples/word/05-tables/table-cell-access.yaml +++ b/samples/word/05-tables/table-cell-access.yaml @@ -86,4 +86,4 @@ libraries: |- @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 + @types/jquery@3.3.1 diff --git a/samples/word/06-lists/insert-list.yaml b/samples/word/06-lists/insert-list.yaml index d5c8a9ddf..0355f3fd8 100644 --- a/samples/word/06-lists/insert-list.yaml +++ b/samples/word/06-lists/insert-list.yaml @@ -101,4 +101,4 @@ libraries: |- @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 + @types/jquery@3.3.1 diff --git a/samples/word/07-custom-properties/get-built-in-properties.yaml b/samples/word/07-custom-properties/get-built-in-properties.yaml index 6b17a0973..cac02d0f1 100644 --- a/samples/word/07-custom-properties/get-built-in-properties.yaml +++ b/samples/word/07-custom-properties/get-built-in-properties.yaml @@ -70,4 +70,4 @@ libraries: |- @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 + @types/jquery@3.3.1 diff --git a/samples/word/07-custom-properties/read-write-custom-document-properties.yaml b/samples/word/07-custom-properties/read-write-custom-document-properties.yaml index 94d2a59bd..f94ca12fb 100644 --- a/samples/word/07-custom-properties/read-write-custom-document-properties.yaml +++ b/samples/word/07-custom-properties/read-write-custom-document-properties.yaml @@ -97,4 +97,4 @@ libraries: |- @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 + @types/jquery@3.3.1 diff --git a/samples/word/50-common-patterns/multiple-property-set.yaml b/samples/word/50-common-patterns/multiple-property-set.yaml index e700fe542..150bcd1b6 100644 --- a/samples/word/50-common-patterns/multiple-property-set.yaml +++ b/samples/word/50-common-patterns/multiple-property-set.yaml @@ -95,4 +95,4 @@ libraries: |- @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/word/99-fabric/fabric-insert-form-data.yaml b/samples/word/99-fabric/fabric-insert-form-data.yaml index 35eca1dd7..252508945 100644 --- a/samples/word/99-fabric/fabric-insert-form-data.yaml +++ b/samples/word/99-fabric/fabric-insert-form-data.yaml @@ -216,4 +216,4 @@ libraries: |- @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/word/default.yaml b/samples/word/default.yaml index 0f234fd26..c32b46f56 100644 --- a/samples/word/default.yaml +++ b/samples/word/default.yaml @@ -62,4 +62,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.1.1 \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file From d1dd1cc0148864ef14037286fed9ca135594fa55 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 25 Oct 2018 16:24:05 -0700 Subject: [PATCH 096/660] Word snippet fixes (#223) * Word snippet fixes * Adding missing parans * Adding missing parans * Fixing merge conflict --- .../word/01-basics/basic-doc-assembly.yaml | 47 ++++--- .../word/01-basics/insert-formatted-text.yaml | 99 +++++++++------ samples/word/01-basics/insert-header.yaml | 42 ++++--- .../get-paragraph-on-insertion-point.yaml | 2 +- .../insert-in-different-locations.yaml | 2 +- .../02-paragraphs/paragraph-properties.yaml | 2 +- samples/word/04-range/scroll-to-range.yaml | 1 - samples/word/05-tables/table-cell-access.yaml | 43 ++++--- samples/word/06-lists/insert-list.yaml | 2 +- .../multiple-property-set.yaml | 83 ++++++++----- snippet-extractor-metadata/word.xlsx | Bin 12610 -> 12623 bytes snippet-extractor-output/snippets.yaml | 117 +++++++++--------- 12 files changed, 255 insertions(+), 185 deletions(-) diff --git a/samples/word/01-basics/basic-doc-assembly.yaml b/samples/word/01-basics/basic-doc-assembly.yaml index 6f95669aa..3c62710f3 100644 --- a/samples/word/01-basics/basic-doc-assembly.yaml +++ b/samples/word/01-basics/basic-doc-assembly.yaml @@ -55,24 +55,28 @@ 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. + // 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() { await Word.run(async (context) => { let results = context.document.body.search("Contractor"); results.load("font/bold"); + // check to make sure we haven't added these content controls 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"; + cc.title = "Customer Name " + i; } - + } await context.sync(); }); } @@ -85,7 +89,7 @@ script: await context.sync(); for (let i = 0; i < contentControls.items.length; i++) { - contentControls.items[i].insertText("Fabrikam", "Replace"); + contentControls.items[i].insertText("Fabrikam", "Replace"); } await context.sync(); @@ -115,26 +119,33 @@ script: template: content: |-
- This sample demonstrates how to use the basic document assembly objects. It creates a sample document, searches for text, creates a template, and adds paragraphs and footers. + This sample demonstrates how to use the basic document assembly objects. It creates a sample document, searches for text, + creates a template, and adds paragraphs and footers.

Try it out

-

- +

+ +

+

-

- +

+ +

+

- +

+

- +

+

diff --git a/samples/word/01-basics/insert-formatted-text.yaml b/samples/word/01-basics/insert-formatted-text.yaml index 174fdca13..5f17431cc 100644 --- a/samples/word/01-basics/insert-formatted-text.yaml +++ b/samples/word/01-basics/insert-formatted-text.yaml @@ -7,61 +7,88 @@ api_set: WordApi: 1.1 script: content: |- - $("#run").click(() => tryCatch(run)); + $("#add-text").click(() => tryCatch(addFormattedText)); + $("#add-paragraph").click(() => tryCatch(addFormattedParagraph)); + $("#add-preset").click(() => tryCatch(addPreStyledFormattedText)); - async function run() { - await Word.run(async (context) => { - // Insert first sentence. Then we 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 firstSentence = context.document.body.insertText("This is some formatted text!", "Replace"); - firstSentence.font.set({ - name: "Courier New", - bold: true, - size: 18 - });; + async function addFormattedText() { + await Word.run(async (context) => { + // 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( + "This is some formatted text!", + "Replace" + ); + sentence.font.set({ + name: "Courier New", + bold: true, + size: 18 + }); - // Second sentence, let's insert it as a paragraph after the previously inserted one. - let secondSentence = context.document.body.insertParagraph("This is other formatted text.", "End"); - secondSentence.font.set({ - bold: false, - italic: true, - name: 'Berlin Sans FB', - color: 'blue', - size: 30 - });; + await context.sync(); + }); + } - // You can also use pre-exsiting styles. - let lastSentence = context.document.body.insertParagraph("To be or not to be", "End"); + 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( + "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 + }); - // Use styleBuiltIn to use an enumeration of existing styles. If your style is custom make sure to use range.style = "name of your style"; - lastSentence.styleBuiltIn = Word.Style.intenseReference; + await context.sync(); + }); + } - await context.sync(); - }); + async function addPreStyledFormattedText() { + 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(); + }); } /** Default helper for invoking an action and handling errors. */ async function tryCatch(callback) { - try { - await callback(); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + try { + await callback(); + } catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } } language: typescript template: content: |-
- This sample shows how to insert basic formatted text and apply built-in styles. + This sample shows how to insert basic formatted text and apply built-in styles.

Try it out

-

+

+

language: html diff --git a/samples/word/01-basics/insert-header.yaml b/samples/word/01-basics/insert-header.yaml index 4440b7684..4f72ec327 100644 --- a/samples/word/01-basics/insert-header.yaml +++ b/samples/word/01-basics/insert-header.yaml @@ -7,39 +7,49 @@ api_set: WordApi: 1.1 script: content: |- - $("#run").click(() => tryCatch(run)); + $("#add-header").click(() => tryCatch(addHeader)); + $("#add-footer").click(() => tryCatch(addFooter)); - async function run() { - await Word.run(async (context) => { - context.document.sections.getFirst() - .getHeader("Primary").insertText("This is a header", "Start"); + async function addHeader() { + await Word.run(async (context) => { + context.document.sections.getFirst().getHeader("Primary") + .insertParagraph("This is a header", "End"); - await context.sync(); - }); + await context.sync(); + }); } + async function addFooter() { + await Word.run(async (context) => { + context.document.sections.getFirst().getFooter("Primary") + .insertParagraph("This is a footer", "End"); + + await context.sync(); + }); + } /** Default helper for invoking an action and handling errors. */ async function tryCatch(callback) { - try { - await callback(); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + try { + await callback(); + } catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } } language: typescript template: content: |-
- This sample inserts a header in the document. + This sample inserts a header and footer in the document.

Try it out

-
language: html diff --git a/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml b/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml index a3bca1fe6..f0e965758 100644 --- a/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml +++ b/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml @@ -32,7 +32,7 @@ script: await context.sync(); - // Expands the range to the end of the paragraph to get all the complete sentences. + // 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("End")).getTextRanges(["."], false /* Don't trim spaces*/); diff --git a/samples/word/02-paragraphs/insert-in-different-locations.yaml b/samples/word/02-paragraphs/insert-in-different-locations.yaml index 10f8452bf..3cabf43d8 100644 --- a/samples/word/02-paragraphs/insert-in-different-locations.yaml +++ b/samples/word/02-paragraphs/insert-in-different-locations.yaml @@ -76,7 +76,7 @@ script: async function setup() { await Word.run(async (context) => { - // lets insert a couple of paragraphs to illustrate the point.. + // insert a couple of paragraphs 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 cover page, header, and sidebar. Click Insert and then choose the elements you want from the different galleries.", "Replace"); diff --git a/samples/word/02-paragraphs/paragraph-properties.yaml b/samples/word/02-paragraphs/paragraph-properties.yaml index 536f2616b..2ed2d72bd 100644 --- a/samples/word/02-paragraphs/paragraph-properties.yaml +++ b/samples/word/02-paragraphs/paragraph-properties.yaml @@ -55,7 +55,7 @@ script: async function setup() { await Word.run(async (context) => { - // lets insert a couple of paragraphs to illustrate the point.. + // insert a couple of paragraphs 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 cover page, header, and sidebar. Click Insert and then choose the elements you want from the different galleries.", "Replace"); diff --git a/samples/word/04-range/scroll-to-range.yaml b/samples/word/04-range/scroll-to-range.yaml index 72223e4ad..0f03f1137 100644 --- a/samples/word/04-range/scroll-to-range.yaml +++ b/samples/word/04-range/scroll-to-range.yaml @@ -61,7 +61,6 @@ template:

Set up

- Click "setup" to insert sample text and between runs to reset the sample. This appends a paragraph in the second page to demonstrate scrolling of the document.

diff --git a/samples/word/05-tables/table-cell-access.yaml b/samples/word/05-tables/table-cell-access.yaml index a63a5ec6a..bbb53c12a 100644 --- a/samples/word/05-tables/table-cell-access.yaml +++ b/samples/word/05-tables/table-cell-access.yaml @@ -11,35 +11,38 @@ script: $("#setup").click(() => tryCatch(insertTable)); async function getTableCell() { - await Word.run(async (context) => { - let firstCell = context.document.body.tables.getFirst().getCell(0, 0).body; - firstCell.load("text"); + 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); - }); + await context.sync(); + console.log("First cell text is " + firstCell.text); + }); } async function insertTable() { - await Word.run(async (context) => { - // We need a 2D array to hold the initial table values - let data = [["Apple", "Orange", "Pineapple"], ["Tokyo", "Beijing", "Seattle"]]; - let table = context.document.body.insertTable(3, 3, "Start", data); - table.styleBuiltIn = Word.Style.gridTable5Dark_Accent2; + await Word.run(async (context) => { + // We need a 2D 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(); - }); + await context.sync(); + }); } /** Default helper for invoking an action and handling errors. */ async function tryCatch(callback) { - try { - await callback(); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + try { + await callback(); + } catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } } language: typescript template: diff --git a/samples/word/06-lists/insert-list.yaml b/samples/word/06-lists/insert-list.yaml index 0355f3fd8..5ec6466c8 100644 --- a/samples/word/06-lists/insert-list.yaml +++ b/samples/word/06-lists/insert-list.yaml @@ -65,7 +65,7 @@ template:

-

Try it out

+

Try it out

diff --git a/samples/word/50-common-patterns/multiple-property-set.yaml b/samples/word/50-common-patterns/multiple-property-set.yaml index 150bcd1b6..53d3b4a98 100644 --- a/samples/word/50-common-patterns/multiple-property-set.yaml +++ b/samples/word/50-common-patterns/multiple-property-set.yaml @@ -8,63 +8,88 @@ script: content: |- $("#set-multiple-properties-with-object").click(() => tryCatch(setMultiplePropertiesWithObject)); $("#copy-properties-from-paragraph").click(() => tryCatch(copyPropertiesFromParagraph)); + $("#setup").click(() => tryCatch(setup)); async function setMultiplePropertiesWithObject() { - await Word.run(async (context) => { - const paragraph = context.document.body.paragraphs.getFirst(); - paragraph.set({ - leftIndent: 30, - font: { - bold: true, - color: "red" - } - }); - - await context.sync(); + await Word.run(async (context) => { + const paragraph = context.document.body.paragraphs.getFirst(); + paragraph.set({ + leftIndent: 30, + font: { + bold: true, + color: "red" + } }); + + await context.sync(); + }); } async function copyPropertiesFromParagraph() { - await Word.run(async (context) => { - const firstParagraph = context.document.body.paragraphs.getFirst(); - const secondParagraph = firstParagraph.getNext(); - firstParagraph.load("text, font/color, font/bold, leftIndent"); + await Word.run(async (context) => { + const firstParagraph = context.document.body.paragraphs.getFirst(); + const secondParagraph = firstParagraph.getNext(); + firstParagraph.load("text, font/color, font/bold, leftIndent"); - await context.sync(); + await context.sync(); - secondParagraph.set(firstParagraph); + secondParagraph.set(firstParagraph); - await context.sync(); - }); + await context.sync(); + }); + } + + async function setup() { + await Word.run(async (context) => { + // insert a couple of paragraphs + 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 cover page, header, and sidebar. Click Insert and then choose the elements you want from the different galleries.", + "Replace" + ); + + await context.sync(); + }); } /** Default helper for invoking an action and handling errors. */ async function tryCatch(callback) { - try { - await callback(); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + try { + await callback(); + } catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } } language: typescript template: content: |-

This sample shows how to format text using the object.set method of the Word API.

-

Be sure that there are at least two paragraphs before you try it out.

+
+ +
+

Set up

+

Try it out

Set the styling of the first paragraph.

Now copy the formatting of the first paragraph to the second.

language: html diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 84a1e41ded86ed368a3e33c7352a060c1819d9de..8a11b5e8bbfae4a6cc65fbafd53d2e27adaba596 100644 GIT binary patch delta 3926 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 delta 3895 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 { - context.document.sections.getFirst() - .getHeader("Primary").insertText("This is a header", "Start"); + context.document.sections.getFirst().getHeader("Primary") + .insertParagraph("This is a header", "End"); - await context.sync(); + await context.sync(); }); Word.Paragraph.insertBreak: - |- @@ -2447,33 +2447,20 @@ Word.Paragraph.insertBreak: Word.Paragraph.insertParagraph: - |- await Word.run(async (context) => { - // Insert first sentence. Then we 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 firstSentence = context.document.body.insertText("This is some formatted text!", "Replace"); - firstSentence.font.set({ - name: "Courier New", - bold: true, - size: 18 - });; - - // Second sentence, let's insert it as a paragraph after the previously inserted one. - let secondSentence = context.document.body.insertParagraph("This is other formatted text.", "End"); - secondSentence.font.set({ - bold: false, - italic: true, - name: 'Berlin Sans FB', - color: 'blue', - size: 30 - });; - - // You can also use pre-exsiting styles. - let lastSentence = 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"; - lastSentence.styleBuiltIn = Word.Style.intenseReference; - - await context.sync(); + // 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.search: - |- @@ -2543,15 +2530,19 @@ Word.Range.insertContentControl: let results = context.document.body.search("Contractor"); results.load("font/bold"); + // check to make sure we haven't added these content controls 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"; + cc.title = "Customer Name " + i; } - + } await context.sync(); }); Word.ContentControlCollection.getByTag: @@ -2563,7 +2554,7 @@ Word.ContentControlCollection.getByTag: await context.sync(); for (let i = 0; i < contentControls.items.length; i++) { - contentControls.items[i].insertText("Fabrikam", "Replace"); + contentControls.items[i].insertText("Fabrikam", "Replace"); } await context.sync(); @@ -2571,10 +2562,10 @@ Word.ContentControlCollection.getByTag: Word.Section.getFooter: - |- await Word.run(async (context) => { - context.document.sections.getFirst() - .getFooter("Primary").insertParagraph("Confidential", "End"); + context.document.sections.getFirst().getFooter("Primary") + .insertParagraph("This is a footer", "End"); - await context.sync(); + await context.sync(); }); Word.Paragraph.text: - |- @@ -2596,7 +2587,7 @@ Word.Paragraph.getTextRanges: await context.sync(); - // Expands the range to the end of the paragraph to get all the complete sentences. + // 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("End")).getTextRanges(["."], false /* Don't trim spaces*/); @@ -2754,21 +2745,25 @@ Word.Paragraph.split: Word.Table.getCell: - |- await Word.run(async (context) => { - let firstCell = context.document.body.tables.getFirst().getCell(0, 0).body; - firstCell.load("text"); + 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); + await context.sync(); + console.log("First cell text is " + firstCell.text); }); Word.Body.insertTable: - |- await Word.run(async (context) => { - // We need a 2D array to hold the initial table values - let data = [["Apple", "Orange", "Pineapple"], ["Tokyo", "Beijing", "Seattle"]]; - let table = context.document.body.insertTable(3, 3, "Start", data); - table.styleBuiltIn = Word.Style.gridTable5Dark_Accent2; + // We need a 2D 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(); + await context.sync(); }); Word.Paragraph.startNewList: - |- @@ -2830,26 +2825,26 @@ Word.Document.properties: Word.Paragraph.set: - |- await Word.run(async (context) => { - const paragraph = context.document.body.paragraphs.getFirst(); - paragraph.set({ - leftIndent: 30, - font: { - bold: true, - color: "red" - } - }); + const paragraph = context.document.body.paragraphs.getFirst(); + paragraph.set({ + leftIndent: 30, + font: { + bold: true, + color: "red" + } + }); - await context.sync(); + await context.sync(); }); - |- await Word.run(async (context) => { - const firstParagraph = context.document.body.paragraphs.getFirst(); - const secondParagraph = firstParagraph.getNext(); - firstParagraph.load("text, font/color, font/bold, leftIndent"); + const firstParagraph = context.document.body.paragraphs.getFirst(); + const secondParagraph = firstParagraph.getNext(); + firstParagraph.load("text, font/color, font/bold, leftIndent"); - await context.sync(); + await context.sync(); - secondParagraph.set(firstParagraph); + secondParagraph.set(firstParagraph); - await context.sync(); + await context.sync(); }); From 5985ee466f30655824090f74d0f311a5bb9f1c1f Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Tue, 6 Nov 2018 09:53:56 -0800 Subject: [PATCH 097/660] Word snippet clean up - folders and descriptions (#226) * Word snippet organization * Applying feedback --- playlists/word.yaml | 195 +++++++--------- .../word/01-basics/basic-api-call-es5.yaml | 2 +- samples/word/01-basics/basic-api-call.yaml | 4 +- .../word/01-basics/basic-common-api-call.yaml | 4 +- .../get-paragraph-on-insertion-point.yaml | 1 + .../insert-formatted-text.yaml | 5 +- .../insert-header-and-footer.yaml} | 7 +- .../insert-in-different-locations.yaml | 7 +- .../insert-line-and-page-breaks.yaml | 5 +- .../02-paragraphs/paragraph-properties.yaml | 3 +- .../{01-basics => 02-paragraphs}/search.yaml | 3 +- .../insert-and-get-pictures.yaml | 7 +- .../scroll-to-range.yaml | 7 +- .../split-words-of-first-paragraph.yaml | 7 +- samples/word/05-tables/table-cell-access.yaml | 5 +- samples/word/06-lists/insert-list.yaml | 3 +- .../get-built-in-properties.yaml | 7 +- ...read-write-custom-document-properties.yaml | 13 +- .../insert-and-change-content-controls.yaml | 8 +- .../multiple-property-set.yaml | 5 +- .../basic-doc-assembly.yaml | 4 +- .../99-fabric/fabric-insert-form-data.yaml | 219 ------------------ snippet-extractor-metadata/word.xlsx | Bin 12623 -> 12648 bytes snippet-extractor-output/snippets.yaml | 2 +- view/word.json | 27 ++- 25 files changed, 165 insertions(+), 385 deletions(-) rename samples/word/{01-basics => 02-paragraphs}/insert-formatted-text.yaml (96%) rename samples/word/{01-basics/insert-header.yaml => 02-paragraphs/insert-header-and-footer.yaml} (94%) rename samples/word/{01-basics => 02-paragraphs}/insert-line-and-page-breaks.yaml (96%) rename samples/word/{01-basics => 02-paragraphs}/search.yaml (99%) rename samples/word/{01-basics => 03-images}/insert-and-get-pictures.yaml (99%) rename samples/word/{04-range => 04-ranges}/scroll-to-range.yaml (96%) rename samples/word/{04-range => 04-ranges}/split-words-of-first-paragraph.yaml (94%) rename samples/word/{07-custom-properties => 10-properties}/get-built-in-properties.yaml (93%) rename samples/word/{07-custom-properties => 10-properties}/read-write-custom-document-properties.yaml (89%) rename samples/word/{03-content-controls => 20-content-controls}/insert-and-change-content-controls.yaml (95%) rename samples/word/{01-basics => 80-scenarios}/basic-doc-assembly.yaml (98%) delete mode 100644 samples/word/99-fabric/fabric-insert-form-data.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index 20151724c..c76e2b2b8 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -1,13 +1,13 @@ - id: word-basics-basic-api-call name: Basic API call fileName: basic-api-call.yaml - description: Executes a basic Word API call using TypeScript. + description: Performs a basic Word API call using TypeScript. rawUrl: >- https://raw.githubusercontent.com////samples/word/01-basics/basic-api-call.yaml group: Basics api_set: WordApi: 1.1 -- id: word-basic-api-call-es5 +- 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. @@ -16,75 +16,30 @@ group: Basics api_set: WordApi: 1.1 -- id: word-basics-basic-doc-assembly - name: Basic document assembly - fileName: basic-doc-assembly.yaml - description: Basic document assembly capabilities of the Word JavaScript API. - rawUrl: >- - https://raw.githubusercontent.com////samples/word/01-basics/basic-doc-assembly.yaml - group: Basics - api_set: - WordApi: 1.1 -- id: word-basics-insert-and-get-pictures - name: Inline pictures - fileName: insert-and-get-pictures.yaml - description: Shows how to insert and get inline pictures. - rawUrl: >- - https://raw.githubusercontent.com////samples/word/01-basics/insert-and-get-pictures.yaml - group: Basics - api_set: - WordApi: 1.1 -- id: word-basics-insert-formatted-text - name: Insert formatted text - fileName: insert-formatted-text.yaml - description: Shows how to use formatting objects as well as applying pre-built styles. - rawUrl: >- - https://raw.githubusercontent.com////samples/word/01-basics/insert-formatted-text.yaml - group: Basics - api_set: - WordApi: 1.1 -- id: word-basics-insert-header - name: Insert header - fileName: insert-header.yaml - description: Demonstrates how to insert a header in the document. - rawUrl: >- - https://raw.githubusercontent.com////samples/word/01-basics/insert-header.yaml - group: Basics - api_set: - WordApi: 1.1 -- id: word-basics-insert-line-and-page-breaks - name: Insert breaks - fileName: insert-line-and-page-breaks.yaml - description: Shows how to insert page and line breaks in a document. - rawUrl: >- - https://raw.githubusercontent.com////samples/word/01-basics/insert-line-and-page-breaks.yaml - group: Basics - api_set: - WordApi: 1.2 -- id: word-basics-search - name: Search - fileName: search.yaml - description: Shows basic and advanced search capabilities. - rawUrl: >- - https://raw.githubusercontent.com////samples/word/01-basics/search.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: >- - Executes a basic Word API call using the "common API" syntax (compatible + Performs a basic Word API call using the "common API" syntax (compatible with Office 2013). rawUrl: >- https://raw.githubusercontent.com////samples/word/01-basics/basic-common-api-call.yaml group: Basics api_set: Selection: 1.1 -- id: word-basics-insert-in-different-locations - name: Insert locations. +- id: word-paragraphs-insert-formatted-text + name: Insert formatted text + fileName: insert-formatted-text.yaml + description: Shows how to use formatting objects as well as applying pre-built styles. + rawUrl: >- + https://raw.githubusercontent.com////samples/word/02-paragraphs/insert-formatted-text.yaml + group: Paragraphs + api_set: + WordApi: 1.1 +- id: word-paragraphs-insert-in-different-locations + name: Insert at different locations fileName: insert-in-different-locations.yaml - description: Shows how to insert content using the different available locations. + description: Inserts content at different document locations. rawUrl: >- https://raw.githubusercontent.com////samples/word/02-paragraphs/insert-in-different-locations.yaml group: Paragraphs @@ -99,50 +54,75 @@ group: Paragraphs api_set: WordApi: 1.1 +- id: word-paragraphs-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////samples/word/02-paragraphs/insert-line-and-page-breaks.yaml + group: Paragraphs + api_set: + WordApi: 1.2 +- id: word-paragraphs-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////samples/word/02-paragraphs/insert-header-and-footer.yaml + group: Paragraphs + api_set: + WordApi: 1.1 - id: word-paragraphs-paragraph-properties name: Paragraph properties fileName: paragraph-properties.yaml - description: >- - Shows how to set indentation, space between paragraphs and other paragraph - properties. + description: 'Sets indentation, space between paragraphs, and other paragraph properties.' rawUrl: >- https://raw.githubusercontent.com////samples/word/02-paragraphs/paragraph-properties.yaml group: Paragraphs api_set: WordApi: 1.2 -- id: word-content-controls-insert-and-change-content-controls - name: Content control basics - fileName: insert-and-change-content-controls.yaml - description: 'Insertion, manipulation and retrieval of content controls.' +- id: word-paragraphs-search + name: Search + fileName: search.yaml + description: Shows basic and advanced search capabilities. rawUrl: >- - https://raw.githubusercontent.com////samples/word/03-content-controls/insert-and-change-content-controls.yaml - group: Content Controls + https://raw.githubusercontent.com////samples/word/02-paragraphs/search.yaml + group: Paragraphs + api_set: + WordApi: 1.1 +- id: word-images-insert-and-get-pictures + name: Using inline pictures + fileName: insert-and-get-pictures.yaml + description: Inserts and gets inline pictures. + rawUrl: >- + https://raw.githubusercontent.com////samples/word/03-images/insert-and-get-pictures.yaml + group: Images api_set: WordApi: 1.1 -- id: word-basics-scroll-to-range - name: Scroll to range +- id: word-ranges-scroll-to-range + name: Scroll to a range fileName: scroll-to-range.yaml - description: Shows how to scroll to a range with and without selection. + description: Scrolls to a range with and without selection. rawUrl: >- - https://raw.githubusercontent.com////samples/word/04-range/scroll-to-range.yaml - group: Range + https://raw.githubusercontent.com////samples/word/04-ranges/scroll-to-range.yaml + group: Ranges api_set: WordApi: 1.2 -- id: word-range-split-words-of-first-paragraph - name: Range manipulation +- id: word-ranges-split-words-of-first-paragraph + name: Splitting a paragraph into ranges fileName: split-words-of-first-paragraph.yaml description: >- - Show how to split a paragraph into word ranges and then traverses all the - ranges to format each word, producing a "karaoke" effect. + 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////samples/word/04-range/split-words-of-first-paragraph.yaml - group: Range + https://raw.githubusercontent.com////samples/word/04-ranges/split-words-of-first-paragraph.yaml + group: Ranges api_set: WordApi: 1.3 - id: word-tables-table-cell-access - name: Table cell access + name: Creating and accessing a table fileName: table-cell-access.yaml - description: Shows how to access a specific cell in a table. + description: Creates a table and accesses a specific cell. rawUrl: >- https://raw.githubusercontent.com////samples/word/05-tables/table-cell-access.yaml group: Tables @@ -157,43 +137,48 @@ group: Lists api_set: WordApi: 1.3 -- id: word-basics-read-write-custom-document-properties - name: Read-write custom document properties +- 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////samples/word/10-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: >- - This sample shows how to add custom document properties of different types - and how to read them as well. + description: Adds and reads custom document properties of different types. rawUrl: >- - https://raw.githubusercontent.com////samples/word/07-custom-properties/read-write-custom-document-properties.yaml - group: Custom Properties + https://raw.githubusercontent.com////samples/word/10-properties/read-write-custom-document-properties.yaml + group: Properties api_set: WordApi: 1.3 -- id: word-custom-properties-get-built-in-properties - name: Get built-in document properties. - fileName: get-built-in-properties.yaml - description: Shows how to get built-in document properties. +- id: word-content-controls-insert-and-change-content-controls + name: Content control basics + fileName: insert-and-change-content-controls.yaml + description: 'Inserts, manipulates, and retrieves content controls.' rawUrl: >- - https://raw.githubusercontent.com////samples/word/07-custom-properties/get-built-in-properties.yaml - group: Custom Properties + https://raw.githubusercontent.com////samples/word/20-content-controls/insert-and-change-content-controls.yaml + group: Content Controls api_set: WordApi: 1.1 - id: word-common-patterns-multiple-property-set - name: Multiple Property Set + name: Multiple property set fileName: multiple-property-set.yaml - description: Setting multiple properties at once with the API object set() method. + description: Sets multiple properties at once with the API object set() method. rawUrl: >- https://raw.githubusercontent.com////samples/word/50-common-patterns/multiple-property-set.yaml group: Common Patterns api_set: WordApi: 1.3 -- id: word-fabric-insert-form-data - name: Fabric JS - Using form data - fileName: fabric-insert-form-data.yaml - description: >- - Takes form data entered in the task pane and pushes it into the document. - This is meant to show the use of common Fabric elements. +- id: word-scenarios-basic-doc-assembly + name: Basic document assembly + fileName: basic-doc-assembly.yaml + description: Composes different parts of a Word document. rawUrl: >- - https://raw.githubusercontent.com////samples/word/99-fabric/fabric-insert-form-data.yaml - group: Fabric + https://raw.githubusercontent.com////samples/word/80-scenarios/basic-doc-assembly.yaml + group: Scenarios api_set: WordApi: 1.1 diff --git a/samples/word/01-basics/basic-api-call-es5.yaml b/samples/word/01-basics/basic-api-call-es5.yaml index 52ff7fdce..799cb47cd 100644 --- a/samples/word/01-basics/basic-api-call-es5.yaml +++ b/samples/word/01-basics/basic-api-call-es5.yaml @@ -1,5 +1,5 @@ order: 2 -id: word-basic-api-call-es5 +id: word-basics-api-call-es5 name: Basic API call (JavaScript) description: Performs a basic Word API call using plain JavaScript & Promises. author: OfficeDev diff --git a/samples/word/01-basics/basic-api-call.yaml b/samples/word/01-basics/basic-api-call.yaml index 7c6d930ac..0b7e127c8 100644 --- a/samples/word/01-basics/basic-api-call.yaml +++ b/samples/word/01-basics/basic-api-call.yaml @@ -1,7 +1,7 @@ order: 1 id: word-basics-basic-api-call -name: Basic API call -description: Executes a basic Word API call using TypeScript. +name: Basic API call (TypeScript) +description: Performs a basic Word API call using TypeScript. author: OfficeDev host: WORD api_set: diff --git a/samples/word/01-basics/basic-common-api-call.yaml b/samples/word/01-basics/basic-common-api-call.yaml index 7ee641376..076d0e07b 100644 --- a/samples/word/01-basics/basic-common-api-call.yaml +++ b/samples/word/01-basics/basic-common-api-call.yaml @@ -1,7 +1,7 @@ -order: 1000 +order: 3 id: word-basics-basic-common-api-call name: Basic API call (Office 2013) -description: Executes a basic Word API call using the "common API" syntax (compatible with Office 2013). +description: Performs a basic Word API call using JavaScript with the "common API" syntax (compatible with Office 2013). author: OfficeDev host: WORD api_set: diff --git a/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml b/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml index f0e965758..8ec4e76b6 100644 --- a/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml +++ b/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml @@ -1,3 +1,4 @@ +order: 3 id: word-paragraphs-get-paragraph-on-insertion-point name: Get paragraph from insertion point description: Gets the full paragraph containing the insertion point. diff --git a/samples/word/01-basics/insert-formatted-text.yaml b/samples/word/02-paragraphs/insert-formatted-text.yaml similarity index 96% rename from samples/word/01-basics/insert-formatted-text.yaml rename to samples/word/02-paragraphs/insert-formatted-text.yaml index 5f17431cc..93bf702bd 100644 --- a/samples/word/01-basics/insert-formatted-text.yaml +++ b/samples/word/02-paragraphs/insert-formatted-text.yaml @@ -1,6 +1,7 @@ -id: word-basics-insert-formatted-text +order: 1 +id: word-paragraphs-insert-formatted-text name: Insert formatted text -description: Shows how to use formatting objects as well as applying pre-built styles. +description: Formats text with pre-built and custom styles. author: OfficeDev host: WORD api_set: diff --git a/samples/word/01-basics/insert-header.yaml b/samples/word/02-paragraphs/insert-header-and-footer.yaml similarity index 94% rename from samples/word/01-basics/insert-header.yaml rename to samples/word/02-paragraphs/insert-header-and-footer.yaml index 4f72ec327..765957932 100644 --- a/samples/word/01-basics/insert-header.yaml +++ b/samples/word/02-paragraphs/insert-header-and-footer.yaml @@ -1,6 +1,7 @@ -id: word-basics-insert-header -name: Insert header -description: Demonstrates how to insert a header in the document. +order: 5 +id: word-paragraphs-insert-header-and-footer +name: Insert a header and footer +description: Inserts a header and a footer in the document. author: OfficeDev host: WORD api_set: diff --git a/samples/word/02-paragraphs/insert-in-different-locations.yaml b/samples/word/02-paragraphs/insert-in-different-locations.yaml index 3cabf43d8..671c3c072 100644 --- a/samples/word/02-paragraphs/insert-in-different-locations.yaml +++ b/samples/word/02-paragraphs/insert-in-different-locations.yaml @@ -1,6 +1,7 @@ -id: word-basics-insert-in-different-locations -name: Insert locations. -description: Shows how to insert content using the different available locations. +order: 2 +id: word-paragraphs-insert-in-different-locations +name: Insert content at different locations +description: Inserts content at different document locations. author: OfficeDev host: WORD api_set: diff --git a/samples/word/01-basics/insert-line-and-page-breaks.yaml b/samples/word/02-paragraphs/insert-line-and-page-breaks.yaml similarity index 96% rename from samples/word/01-basics/insert-line-and-page-breaks.yaml rename to samples/word/02-paragraphs/insert-line-and-page-breaks.yaml index dc2fbb534..ae40d15bc 100644 --- a/samples/word/01-basics/insert-line-and-page-breaks.yaml +++ b/samples/word/02-paragraphs/insert-line-and-page-breaks.yaml @@ -1,6 +1,7 @@ -id: word-basics-insert-line-and-page-breaks +order: 4 +id: word-paragraphs-insert-line-and-page-breaks name: Insert breaks -description: Shows how to insert page and line breaks in a document. +description: Inserts page and line breaks in a document. author: OfficeDev host: WORD api_set: diff --git a/samples/word/02-paragraphs/paragraph-properties.yaml b/samples/word/02-paragraphs/paragraph-properties.yaml index 2ed2d72bd..c40452f66 100644 --- a/samples/word/02-paragraphs/paragraph-properties.yaml +++ b/samples/word/02-paragraphs/paragraph-properties.yaml @@ -1,6 +1,7 @@ +order: 6 id: word-paragraphs-paragraph-properties name: Paragraph properties -description: 'Shows how to set 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/01-basics/search.yaml b/samples/word/02-paragraphs/search.yaml similarity index 99% rename from samples/word/01-basics/search.yaml rename to samples/word/02-paragraphs/search.yaml index 82baf6dce..0533970cb 100644 --- a/samples/word/01-basics/search.yaml +++ b/samples/word/02-paragraphs/search.yaml @@ -1,4 +1,5 @@ -id: word-basics-search +order: 7 +id: word-paragraphs-search name: Search description: Shows basic and advanced search capabilities. author: OfficeDev diff --git a/samples/word/01-basics/insert-and-get-pictures.yaml b/samples/word/03-images/insert-and-get-pictures.yaml similarity index 99% rename from samples/word/01-basics/insert-and-get-pictures.yaml rename to samples/word/03-images/insert-and-get-pictures.yaml index d2418581a..c97de3184 100644 --- a/samples/word/01-basics/insert-and-get-pictures.yaml +++ b/samples/word/03-images/insert-and-get-pictures.yaml @@ -1,6 +1,7 @@ -id: word-basics-insert-and-get-pictures -name: Inline pictures -description: Shows how to insert and get inline pictures. +order: 1 +id: word-images-insert-and-get-pictures +name: Use inline pictures +description: Inserts and gets inline pictures. author: OfficeDev host: WORD api_set: diff --git a/samples/word/04-range/scroll-to-range.yaml b/samples/word/04-ranges/scroll-to-range.yaml similarity index 96% rename from samples/word/04-range/scroll-to-range.yaml rename to samples/word/04-ranges/scroll-to-range.yaml index 0f03f1137..040241eca 100644 --- a/samples/word/04-range/scroll-to-range.yaml +++ b/samples/word/04-ranges/scroll-to-range.yaml @@ -1,6 +1,7 @@ -id: word-basics-scroll-to-range -name: Scroll to range -description: Shows how to scroll to a range with and without selection. +order: 1 +id: word-ranges-scroll-to-range +name: Scroll to a range +description: Scrolls to a range with and without selection. author: OfficeDev host: WORD api_set: diff --git a/samples/word/04-range/split-words-of-first-paragraph.yaml b/samples/word/04-ranges/split-words-of-first-paragraph.yaml similarity index 94% rename from samples/word/04-range/split-words-of-first-paragraph.yaml rename to samples/word/04-ranges/split-words-of-first-paragraph.yaml index a4b54b4e8..c2ec9836f 100644 --- a/samples/word/04-range/split-words-of-first-paragraph.yaml +++ b/samples/word/04-ranges/split-words-of-first-paragraph.yaml @@ -1,6 +1,7 @@ -id: word-range-split-words-of-first-paragraph -name: Range manipulation -description: 'Show how to split a paragraph into word ranges and then traverses all the ranges to format each word, producing a "karaoke" effect.' +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.' author: OfficeDev host: WORD api_set: diff --git a/samples/word/05-tables/table-cell-access.yaml b/samples/word/05-tables/table-cell-access.yaml index bbb53c12a..3df6e22ca 100644 --- a/samples/word/05-tables/table-cell-access.yaml +++ b/samples/word/05-tables/table-cell-access.yaml @@ -1,6 +1,7 @@ +order: 1 id: word-tables-table-cell-access -name: Table cell access -description: Shows how to access a specific cell in a table. +name: Create and access a table +description: Creates a table and accesses a specific cell. author: OfficeDev host: WORD api_set: diff --git a/samples/word/06-lists/insert-list.yaml b/samples/word/06-lists/insert-list.yaml index 5ec6466c8..856231a45 100644 --- a/samples/word/06-lists/insert-list.yaml +++ b/samples/word/06-lists/insert-list.yaml @@ -1,5 +1,6 @@ +order: 1 id: word-lists-insert-list -name: List creation +name: Create a list description: Inserts a new list into the document. author: OfficeDev host: WORD diff --git a/samples/word/07-custom-properties/get-built-in-properties.yaml b/samples/word/10-properties/get-built-in-properties.yaml similarity index 93% rename from samples/word/07-custom-properties/get-built-in-properties.yaml rename to samples/word/10-properties/get-built-in-properties.yaml index cac02d0f1..29f39a113 100644 --- a/samples/word/07-custom-properties/get-built-in-properties.yaml +++ b/samples/word/10-properties/get-built-in-properties.yaml @@ -1,6 +1,7 @@ -id: word-custom-properties-get-built-in-properties -name: Get built-in document properties. -description: Shows how to get built-in document properties. +order: 1 +id: word-properties-get-built-in-properties +name: Built-in document properties +description: Gets built-in document properties. author: OfficeDev host: WORD api_set: diff --git a/samples/word/07-custom-properties/read-write-custom-document-properties.yaml b/samples/word/10-properties/read-write-custom-document-properties.yaml similarity index 89% rename from samples/word/07-custom-properties/read-write-custom-document-properties.yaml rename to samples/word/10-properties/read-write-custom-document-properties.yaml index f94ca12fb..059cb552e 100644 --- a/samples/word/07-custom-properties/read-write-custom-document-properties.yaml +++ b/samples/word/10-properties/read-write-custom-document-properties.yaml @@ -1,6 +1,7 @@ -id: word-basics-read-write-custom-document-properties -name: Read-write custom document properties -description: This sample shows how to add custom document properties of different types and how to read them as well. +order: 2 +id: word-properties-read-write-custom-document-properties +name: Custom document properties +description: Adds and reads custom document properties of different types. author: OfficeDev host: WORD api_set: @@ -36,7 +37,7 @@ script: await context.sync(); 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); + console.log("Property Name:" + properties.items[i].key + "; Type=" + properties.items[i].type + "; Property Value=" + properties.items[i].value); }); } @@ -60,10 +61,10 @@ template:

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 - - @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/word.xlsx b/snippet-extractor-metadata/word.xlsx index 8a11b5e8bbfae4a6cc65fbafd53d2e27adaba596..fab9f03baf6e760b85b2a8b3eb70daee587f15a3 100644 GIT binary patch delta 3801 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index b194b7802..1f668811e 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -2811,7 +2811,7 @@ Word.CustomPropertyCollection.items: await context.sync(); 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); + console.log("Property Name:" + properties.items[i].key + "; Type=" + properties.items[i].type + "; Property Value=" + properties.items[i].value); }); Word.Document.properties: - |- diff --git a/view/word.json b/view/word.json index 35f4736f1..18290e821 100644 --- a/view/word.json +++ b/view/word.json @@ -1,23 +1,22 @@ { "word-basics-basic-api-call": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/01-basics/basic-api-call.yaml", - "word-basic-api-call-es5": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/01-basics/basic-api-call-es5.yaml", - "word-basics-basic-doc-assembly": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/01-basics/basic-doc-assembly.yaml", - "word-basics-insert-and-get-pictures": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/01-basics/insert-and-get-pictures.yaml", - "word-basics-insert-formatted-text": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/01-basics/insert-formatted-text.yaml", - "word-basics-insert-header": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/01-basics/insert-header.yaml", - "word-basics-insert-line-and-page-breaks": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/01-basics/insert-line-and-page-breaks.yaml", - "word-basics-search": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/01-basics/search.yaml", + "word-basics-api-call-es5": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/01-basics/basic-api-call-es5.yaml", "word-basics-basic-common-api-call": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/01-basics/basic-common-api-call.yaml", - "word-basics-insert-in-different-locations": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/02-paragraphs/insert-in-different-locations.yaml", + "word-paragraphs-insert-formatted-text": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/02-paragraphs/insert-formatted-text.yaml", + "word-paragraphs-insert-in-different-locations": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/02-paragraphs/insert-in-different-locations.yaml", "word-paragraphs-get-paragraph-on-insertion-point": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml", + "word-paragraphs-insert-line-and-page-breaks": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/02-paragraphs/insert-line-and-page-breaks.yaml", + "word-paragraphs-insert-header-and-footer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/02-paragraphs/insert-header-and-footer.yaml", "word-paragraphs-paragraph-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/02-paragraphs/paragraph-properties.yaml", - "word-content-controls-insert-and-change-content-controls": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/03-content-controls/insert-and-change-content-controls.yaml", - "word-basics-scroll-to-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/04-range/scroll-to-range.yaml", - "word-range-split-words-of-first-paragraph": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/04-range/split-words-of-first-paragraph.yaml", + "word-paragraphs-search": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/02-paragraphs/search.yaml", + "word-images-insert-and-get-pictures": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/03-images/insert-and-get-pictures.yaml", + "word-ranges-scroll-to-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/04-ranges/scroll-to-range.yaml", + "word-ranges-split-words-of-first-paragraph": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/04-ranges/split-words-of-first-paragraph.yaml", "word-tables-table-cell-access": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/05-tables/table-cell-access.yaml", "word-lists-insert-list": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/06-lists/insert-list.yaml", - "word-basics-read-write-custom-document-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/07-custom-properties/read-write-custom-document-properties.yaml", - "word-custom-properties-get-built-in-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/07-custom-properties/get-built-in-properties.yaml", + "word-properties-get-built-in-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/10-properties/get-built-in-properties.yaml", + "word-properties-read-write-custom-document-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/10-properties/read-write-custom-document-properties.yaml", + "word-content-controls-insert-and-change-content-controls": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/20-content-controls/insert-and-change-content-controls.yaml", "word-common-patterns-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/50-common-patterns/multiple-property-set.yaml", - "word-fabric-insert-form-data": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/99-fabric/fabric-insert-form-data.yaml" + "word-scenarios-basic-doc-assembly": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/80-scenarios/basic-doc-assembly.yaml" } \ No newline at end of file From 3f4d29fce19c6d16b4a57fdd10783d357aaa02ab Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 6 Nov 2018 10:12:13 -0800 Subject: [PATCH 098/660] Remove whitespace from metadata (#227) * Remove whitespace from metadata * ran npm start --- snippet-extractor-metadata/excel.xlsx | Bin 16199 -> 16162 bytes snippet-extractor-output/snippets.yaml | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 9cdcc655655678825e5539a8267d31b1be466d41..a8ea317a6ecd302959599e93ae4b96bbc7351acb 100644 GIT binary patch delta 6945 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 MNHD#CzWzt}A09mjH~;_u delta 7002 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 a$Y6PSU^TK$UJmGtJeB9dkCXXV;r{^s+&m2c diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 1f668811e..aa6b4b99e 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -607,7 +607,7 @@ Excel.DataValidation.errorAlert: await context.sync(); }); -Excel.DataValidationRule .wholeNumber: +Excel.DataValidationRule.wholeNumber: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Decision"); @@ -640,7 +640,7 @@ Excel.DataValidationRule .wholeNumber: await context.sync(); }); -Excel.DataValidationRule .list: +Excel.DataValidationRule.list: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Decision"); From f597498246698e24c08bf92dd56cedae453556a6 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Tue, 6 Nov 2018 15:53:51 -0800 Subject: [PATCH 099/660] Standardizing user experience with Excel snippets (#225) * CSS changes * Partial Excel style cleanup * Work on consistent Excel snippet experiences * Running npm start and related fixes * Fixing merge conflict in Word sample * Update samples/excel/70-events/events-disable-events.yaml Co-Authored-By: AlexJerabek <38896772+AlexJerabek@users.noreply.github.com> * Update samples/excel/89-preview-apis/range-areas.yaml Co-Authored-By: AlexJerabek <38896772+AlexJerabek@users.noreply.github.com> * Applying PR feedback --- .../excel/01-basics/basic-api-call-es5.yaml | 26 +- samples/excel/01-basics/basic-api-call.yaml | 28 +- .../excel/20-scenarios/report-generation.yaml | 6 +- .../conditional-formatting-advanced.yaml | 45 +-- .../conditional-formatting-basic.yaml | 35 +- .../excel/35-worksheet/data-validation.yaml | 59 ++-- .../35-worksheet/hide-unhide-worksheet.yaml | 27 ++ .../excel/35-worksheet/worksheet-copy.yaml | 13 +- ...a-in-worksheet-and-workbook-structure.yaml | 15 +- .../37-workbook/workbook-get-active-cell.yaml | 13 +- samples/excel/40-table/style.yaml | 2 +- .../create-and-remove-named-item.yaml | 4 +- .../create-and-use-named-item-for-range.yaml | 4 +- .../45-named-item/create-named-item.yaml | 4 +- .../50-chart/chart-create-several-charts.yaml | 332 ++++++++++-------- samples/excel/50-chart/chart-formatting.yaml | 64 ++-- .../50-chart/chart-series-plotorder.yaml | 2 +- samples/excel/50-chart/chart-series.yaml | 2 +- .../excel/50-chart/chart-title-substring.yaml | 2 +- samples/excel/50-chart/chart-trendlines.yaml | 2 +- .../excel/50-chart/create-doughnut-chart.yaml | 2 +- .../pivottable-calculations.yaml | 2 +- .../pivottable-create-and-modify.yaml | 2 +- .../pivottable-filters-and-summaries.yaml | 2 +- .../55-pivottable/refresh-pivot-table.yaml | 2 +- samples/excel/70-events/data-changed.yaml | 13 +- .../70-events/events-chart-activated.yaml | 13 +- ...vents-chartcollection-added-activated.yaml | 13 +- .../70-events/events-disable-events.yaml | 19 +- .../82-document/get-file-in-slices-async.yaml | 7 +- .../test-xml-for-unique-namespace.yaml | 8 +- .../multiple-property-set.yaml | 2 +- .../excel/89-preview-apis/range-areas.yaml | 6 +- .../excel/89-preview-apis/range-copyfrom.yaml | 13 +- samples/excel/default.yaml | 13 +- samples/word/05-tables/table-cell-access.yaml | 2 +- samples/word/06-lists/insert-list.yaml | 10 +- 37 files changed, 467 insertions(+), 347 deletions(-) diff --git a/samples/excel/01-basics/basic-api-call-es5.yaml b/samples/excel/01-basics/basic-api-call-es5.yaml index fc2353e65..554fb5cf5 100644 --- a/samples/excel/01-basics/basic-api-call-es5.yaml +++ b/samples/excel/01-basics/basic-api-call-es5.yaml @@ -34,13 +34,29 @@ script: language: typescript template: content: | -

Executes a simple code snippet.

- +
+

This sample demonstrates basic Excel API calls.

+
+ +
+

Try it out

+ +
language: html style: - content: '' + 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 diff --git a/samples/excel/01-basics/basic-api-call.yaml b/samples/excel/01-basics/basic-api-call.yaml index 069a8b366..42c0706ec 100644 --- a/samples/excel/01-basics/basic-api-call.yaml +++ b/samples/excel/01-basics/basic-api-call.yaml @@ -34,14 +34,30 @@ script: } language: typescript template: - content: | -

Executes a simple code snippet.

- + content: |- +
+

This sample demonstrates basic Excel API calls.

+
+ +
+

Try it out

+ +
language: html style: - content: '' + 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 diff --git a/samples/excel/20-scenarios/report-generation.yaml b/samples/excel/20-scenarios/report-generation.yaml index 23100a1bd..cc8705da5 100644 --- a/samples/excel/20-scenarios/report-generation.yaml +++ b/samples/excel/20-scenarios/report-generation.yaml @@ -132,11 +132,7 @@ template:
language: html style: - content: | - .ms-MessageBanner { - display: none; - } - + content: |- section.samples { margin-top: 20px; } diff --git a/samples/excel/30-range/conditional-formatting-advanced.yaml b/samples/excel/30-range/conditional-formatting-advanced.yaml index 160dc2459..e93dc3d70 100644 --- a/samples/excel/30-range/conditional-formatting-advanced.yaml +++ b/samples/excel/30-range/conditional-formatting-advanced.yaml @@ -175,37 +175,12 @@ script: OfficeHelpers.Utilities.log(error); } } - - /** - * Display the notification having synced the changes. - */ - function showNotification(message: string) { - const messageBanner = $('.ms-MessageBanner'); - $('.ms-MessageBanner-clipper').text(message); - $('.ms-MessageBanner-close').click(() => { - messageBanner.hide(); - messageBanner.off('click'); - }); - messageBanner.show(); - } language: typescript template: - content: |+ - - -
-
-
-
-
-
- -
- + 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.

+

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

@@ -234,7 +209,6 @@ template: Remove conditional format
- language: html style: content: |- @@ -248,19 +222,6 @@ style: margin-left: 20px; min-width: 80px; } - - body { - margin: 0; - padding: 0; - } - - #main { - margin: 10px; - } - - .ms-MessageBanner { - display: none; - } language: css libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js diff --git a/samples/excel/30-range/conditional-formatting-basic.yaml b/samples/excel/30-range/conditional-formatting-basic.yaml index 15efe159f..a2366ee7f 100644 --- a/samples/excel/30-range/conditional-formatting-basic.yaml +++ b/samples/excel/30-range/conditional-formatting-basic.yaml @@ -279,20 +279,7 @@ script: } language: typescript template: - content: | - - -
-
-
-
-
-
- -
- + content: |-

This sample shows how to apply conditional formatting to ranges.

@@ -345,13 +332,6 @@ template: - -
- - language: html style: @@ -366,19 +346,6 @@ style: margin-left: 20px; min-width: 80px; } - - body { - margin: 0; - padding: 0; - } - - #main { - margin: 10px; - } - - .ms-MessageBanner { - display: none; - } language: css libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js diff --git a/samples/excel/35-worksheet/data-validation.yaml b/samples/excel/35-worksheet/data-validation.yaml index fa2030da4..ccf3fe790 100644 --- a/samples/excel/35-worksheet/data-validation.yaml +++ b/samples/excel/35-worksheet/data-validation.yaml @@ -135,29 +135,46 @@ script: } language: typescript template: - content: |+ -

Click this first and only once.

- -

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.

- -

Press Require positive numbers and then click on a cell in the Ranking column. Note the prompt. Try to set the value to a negative number and note the error message.

- -

Press Warn about comment redundancy and then click on a cell in the Comments column and enter a comment that includes the baby name for the same row. Note the informational message that pops up.

- - - + content: | +
+

This sample shows how to apply data validation to cells.

+
+ +
+

Set up

+ +
+ +
+

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.

+ +

Press Require positive numbers and then click on a cell in the Ranking column. Note the prompt. Try to set the value to a negative number and note the error message.

+ +

Press Warn about comment redundancy and then click on a cell in the Comments column and enter a comment that includes the baby name for the same row. Note the informational message that pops up.

+ +
language: html style: - content: | - /* Your style goes here */ + 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 diff --git a/samples/excel/35-worksheet/hide-unhide-worksheet.yaml b/samples/excel/35-worksheet/hide-unhide-worksheet.yaml index 9d8dec053..caf001446 100644 --- a/samples/excel/35-worksheet/hide-unhide-worksheet.yaml +++ b/samples/excel/35-worksheet/hide-unhide-worksheet.yaml @@ -68,6 +68,26 @@ script: return sheets.items.filter((s) => (s.visibility === visibility)); } + + async function setup() { + try { + await Excel.run(async context => { + const sheets = context.workbook.worksheets; + sheets.load("items"); + + await context.sync(); + + if (sheets.items.length < 2) { + sheets.add(); + + await context.sync(); + } + }); + } catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } language: typescript template: content: | @@ -75,6 +95,13 @@ template:

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

+
+

Set up

+ +
+

Try it out

language: html style: - content: | - /* Your style goes here */ + 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 diff --git a/samples/excel/37-workbook/protect-data-in-worksheet-and-workbook-structure.yaml b/samples/excel/37-workbook/protect-data-in-worksheet-and-workbook-structure.yaml index 5d336df4d..70fc0c688 100644 --- a/samples/excel/37-workbook/protect-data-in-worksheet-and-workbook-structure.yaml +++ b/samples/excel/37-workbook/protect-data-in-worksheet-and-workbook-structure.yaml @@ -179,7 +179,7 @@ script: template: content: |-
-

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

+

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

@@ -242,8 +242,17 @@ template:
language: html style: - content: | - /* Your style goes here */ + 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 diff --git a/samples/excel/37-workbook/workbook-get-active-cell.yaml b/samples/excel/37-workbook/workbook-get-active-cell.yaml index f73193bfe..a4e0394e7 100644 --- a/samples/excel/37-workbook/workbook-get-active-cell.yaml +++ b/samples/excel/37-workbook/workbook-get-active-cell.yaml @@ -47,8 +47,17 @@ template: language: html style: - content: | - /* Your style goes here */ + 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 diff --git a/samples/excel/40-table/style.yaml b/samples/excel/40-table/style.yaml index 6ab2ef5bc..249c51ab2 100644 --- a/samples/excel/40-table/style.yaml +++ b/samples/excel/40-table/style.yaml @@ -212,7 +212,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } diff --git a/samples/excel/45-named-item/create-and-remove-named-item.yaml b/samples/excel/45-named-item/create-and-remove-named-item.yaml index 151681c3d..01ccd42a8 100644 --- a/samples/excel/45-named-item/create-and-remove-named-item.yaml +++ b/samples/excel/45-named-item/create-and-remove-named-item.yaml @@ -139,7 +139,7 @@ script: template: content: |+
-

This sample shows how to create a named item using the Excel JavaScript API. Note that this API requires the Excel 1.4 requirement set.

+

This sample shows how to create a named item using the Excel JavaScript API.

@@ -158,7 +158,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } diff --git a/samples/excel/45-named-item/create-and-use-named-item-for-range.yaml b/samples/excel/45-named-item/create-and-use-named-item-for-range.yaml index 17a31d2d2..d55797f4a 100644 --- a/samples/excel/45-named-item/create-and-use-named-item-for-range.yaml +++ b/samples/excel/45-named-item/create-and-use-named-item-for-range.yaml @@ -131,7 +131,7 @@ script: template: content: |+
-

This sample shows how to create a named item using the Excel JavaScript API. Note that this API requires the Excel 1.4 requirement set.

+

This sample shows how to create a named item using the Excel JavaScript API.

@@ -150,7 +150,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } diff --git a/samples/excel/45-named-item/create-named-item.yaml b/samples/excel/45-named-item/create-named-item.yaml index 60bb49dc2..c008c6622 100644 --- a/samples/excel/45-named-item/create-named-item.yaml +++ b/samples/excel/45-named-item/create-named-item.yaml @@ -108,7 +108,7 @@ script: template: content: |+
-

This sample shows how to create a named item using the Excel JavaScript API. Note that this API requires the Excel 1.4 requirement set.

+

This sample shows how to create a named item using the Excel JavaScript API.

@@ -120,7 +120,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } diff --git a/samples/excel/50-chart/chart-create-several-charts.yaml b/samples/excel/50-chart/chart-create-several-charts.yaml index 8e88dfc7b..52ad180dd 100644 --- a/samples/excel/50-chart/chart-create-several-charts.yaml +++ b/samples/excel/50-chart/chart-create-several-charts.yaml @@ -44,172 +44,172 @@ script: } async function createLineChart() { - 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 chart = sheet.charts.add("Line", dataRange, "Auto"); + 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"; + 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 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("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("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("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(); + 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"); + 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"; + 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 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("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("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("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() { @@ -251,13 +251,13 @@ script: /** Default helper for invoking an action and handling errors. */ async function tryCatch(callback) { - try { - await callback(); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } } language: typescript template: @@ -276,8 +276,48 @@ template:

Try it out

+ Create a column clustered chart + +

+ + +

+ + +

+ + +

+ + +

+ + +

+ + +

+ + +

+ +

language: html style: @@ -307,4 +347,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery \ No newline at end of file + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/excel/50-chart/chart-formatting.yaml b/samples/excel/50-chart/chart-formatting.yaml index e52ef5f76..5c6e87fcc 100644 --- a/samples/excel/50-chart/chart-formatting.yaml +++ b/samples/excel/50-chart/chart-formatting.yaml @@ -248,40 +248,40 @@ script: language: typescript template: content: |- -

- Setup GDP data -

- -

- -

-

- Chart formatting -

- -

- -

- -

- Clean up -

- +
+

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

+
+ +
+

Set up

+

+ +

+ +
+

Try it out

+ +

+ +

+ + +
language: html style: - content: | + content: |- section.samples { margin-top: 20px; } diff --git a/samples/excel/50-chart/chart-series-plotorder.yaml b/samples/excel/50-chart/chart-series-plotorder.yaml index 65a0a765f..78b171992 100644 --- a/samples/excel/50-chart/chart-series-plotorder.yaml +++ b/samples/excel/50-chart/chart-series-plotorder.yaml @@ -112,7 +112,7 @@ template:
language: html style: - content: | + content: |- section.samples { margin-top: 20px; } diff --git a/samples/excel/50-chart/chart-series.yaml b/samples/excel/50-chart/chart-series.yaml index 53da8b102..cc51f2e8a 100644 --- a/samples/excel/50-chart/chart-series.yaml +++ b/samples/excel/50-chart/chart-series.yaml @@ -151,7 +151,7 @@ template:
language: html style: - content: | + content: |- section.samples { margin-top: 20px; } diff --git a/samples/excel/50-chart/chart-title-substring.yaml b/samples/excel/50-chart/chart-title-substring.yaml index 91f1ce6bd..cb02dd659 100644 --- a/samples/excel/50-chart/chart-title-substring.yaml +++ b/samples/excel/50-chart/chart-title-substring.yaml @@ -100,7 +100,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } diff --git a/samples/excel/50-chart/chart-trendlines.yaml b/samples/excel/50-chart/chart-trendlines.yaml index bad3d46d8..65192b88e 100644 --- a/samples/excel/50-chart/chart-trendlines.yaml +++ b/samples/excel/50-chart/chart-trendlines.yaml @@ -178,7 +178,7 @@ template:
language: html style: - content: | + content: |- section.samples { margin-top: 20px; } diff --git a/samples/excel/50-chart/create-doughnut-chart.yaml b/samples/excel/50-chart/create-doughnut-chart.yaml index da28d6e5b..786b9a5db 100644 --- a/samples/excel/50-chart/create-doughnut-chart.yaml +++ b/samples/excel/50-chart/create-doughnut-chart.yaml @@ -125,7 +125,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } diff --git a/samples/excel/55-pivottable/pivottable-calculations.yaml b/samples/excel/55-pivottable/pivottable-calculations.yaml index 524cdcc54..143ce1022 100644 --- a/samples/excel/55-pivottable/pivottable-calculations.yaml +++ b/samples/excel/55-pivottable/pivottable-calculations.yaml @@ -187,7 +187,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } diff --git a/samples/excel/55-pivottable/pivottable-create-and-modify.yaml b/samples/excel/55-pivottable/pivottable-create-and-modify.yaml index e4297c4a4..2c7a27685 100644 --- a/samples/excel/55-pivottable/pivottable-create-and-modify.yaml +++ b/samples/excel/55-pivottable/pivottable-create-and-modify.yaml @@ -250,7 +250,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } diff --git a/samples/excel/55-pivottable/pivottable-filters-and-summaries.yaml b/samples/excel/55-pivottable/pivottable-filters-and-summaries.yaml index 5e44f2803..94e3ca1b3 100644 --- a/samples/excel/55-pivottable/pivottable-filters-and-summaries.yaml +++ b/samples/excel/55-pivottable/pivottable-filters-and-summaries.yaml @@ -205,7 +205,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } diff --git a/samples/excel/55-pivottable/refresh-pivot-table.yaml b/samples/excel/55-pivottable/refresh-pivot-table.yaml index 1b7b35ba5..16a7a3ffd 100644 --- a/samples/excel/55-pivottable/refresh-pivot-table.yaml +++ b/samples/excel/55-pivottable/refresh-pivot-table.yaml @@ -80,7 +80,7 @@ script: template: content: |+
-

This sample shows how to refresh a PivotTable using the Excel JavaScript API. Note that this API requires the Excel 1.3 requirement set.

+

This sample shows how to refresh a PivotTable using the Excel JavaScript API.

diff --git a/samples/excel/70-events/data-changed.yaml b/samples/excel/70-events/data-changed.yaml index 82b8c9a5b..74a0f394c 100644 --- a/samples/excel/70-events/data-changed.yaml +++ b/samples/excel/70-events/data-changed.yaml @@ -93,8 +93,17 @@ template:
language: html style: - content: | - /* Your style goes here */ + 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 diff --git a/samples/excel/70-events/events-chart-activated.yaml b/samples/excel/70-events/events-chart-activated.yaml index 6b4465625..ecbcd2709 100644 --- a/samples/excel/70-events/events-chart-activated.yaml +++ b/samples/excel/70-events/events-chart-activated.yaml @@ -146,8 +146,17 @@ template: language: html style: - content: | - /* Your style goes here */ + 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 diff --git a/samples/excel/70-events/events-chartcollection-added-activated.yaml b/samples/excel/70-events/events-chartcollection-added-activated.yaml index 3e2260c49..1d0ca0bc0 100644 --- a/samples/excel/70-events/events-chartcollection-added-activated.yaml +++ b/samples/excel/70-events/events-chartcollection-added-activated.yaml @@ -138,8 +138,17 @@ template: language: html style: - content: | - /* Your style goes here */ + 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 diff --git a/samples/excel/70-events/events-disable-events.yaml b/samples/excel/70-events/events-disable-events.yaml index 024198afc..688530633 100644 --- a/samples/excel/70-events/events-disable-events.yaml +++ b/samples/excel/70-events/events-disable-events.yaml @@ -147,18 +147,27 @@ template:

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.

- You can also manually edit the cells to generate events. +

language: html style: - content: | - /* Your style goes here */ + 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 @@ -174,4 +183,4 @@ libraries: |- @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 + @types/jquery@3.3.1 diff --git a/samples/excel/82-document/get-file-in-slices-async.yaml b/samples/excel/82-document/get-file-in-slices-async.yaml index bd08f02bb..e7aa9b143 100644 --- a/samples/excel/82-document/get-file-in-slices-async.yaml +++ b/samples/excel/82-document/get-file-in-slices-async.yaml @@ -179,12 +179,8 @@ template: -
-

Note: Application.createWorkbook() is in preview and needs the beta libraries. Follow the comment instructions under "Libraries " to switch from production to beta.

-
-
-

Create a new workbook (requires preview APIs)

+

Create a new workbook

@@ -211,7 +207,6 @@ style: } language: css libraries: |- - // replace the "1" with "beta" in both lines when switching to the preview API https://appsforoffice.microsoft.com/lib/1/hosted/office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts diff --git a/samples/excel/85-custom-xml-parts/test-xml-for-unique-namespace.yaml b/samples/excel/85-custom-xml-parts/test-xml-for-unique-namespace.yaml index 8311025a8..673f196bc 100644 --- a/samples/excel/85-custom-xml-parts/test-xml-for-unique-namespace.yaml +++ b/samples/excel/85-custom-xml-parts/test-xml-for-unique-namespace.yaml @@ -97,15 +97,15 @@ template:

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.

+

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.

-

Press the Test for unique namespace button to see if there is more than one XML part with the Contoso namespace. If there is more than one, an error is thrown.

+

Press the "Test for unique namespace" button to see if there is more than one XML part with the Contoso namespace. If there is more than one, an error is thrown.

-

To start over, press the button below to delete all the XML parts.

+

To start over, press "Delete all XML parts".

@@ -119,7 +119,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } diff --git a/samples/excel/88-common-patterns/multiple-property-set.yaml b/samples/excel/88-common-patterns/multiple-property-set.yaml index 593c44841..a87a0ecaa 100644 --- a/samples/excel/88-common-patterns/multiple-property-set.yaml +++ b/samples/excel/88-common-patterns/multiple-property-set.yaml @@ -116,7 +116,7 @@ template:
language: html style: - content: | + content: |- section.samples { margin-top: 20px; } diff --git a/samples/excel/89-preview-apis/range-areas.yaml b/samples/excel/89-preview-apis/range-areas.yaml index dc1dd2345..39f58ae70 100644 --- a/samples/excel/89-preview-apis/range-areas.yaml +++ b/samples/excel/89-preview-apis/range-areas.yaml @@ -150,7 +150,7 @@ template: -

In Excel, select range C3:C5 and format it's fill to a new color. Then set the fill for range E3:E5 to exactly the same color! Then press Read properties of Qty and Unit Price ranges. Watch the console.

+

In Excel, select range C3:C5 and format its fill to a new color. Then set the fill for range E3:E5 to exactly the same color! Then press "Read properties of Qty and Unit Price ranges". Watch the console.

Next, change the fill color of one of the two ranges and press the button again.

language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -184,4 +184,4 @@ libraries: | @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 + @types/jquery@3.3.1 diff --git a/samples/excel/89-preview-apis/range-copyfrom.yaml b/samples/excel/89-preview-apis/range-copyfrom.yaml index 01926a5c8..2f74f80eb 100644 --- a/samples/excel/89-preview-apis/range-copyfrom.yaml +++ b/samples/excel/89-preview-apis/range-copyfrom.yaml @@ -180,8 +180,17 @@ template: language: html style: - content: | - /* Your style goes here */ + 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 diff --git a/samples/excel/default.yaml b/samples/excel/default.yaml index 9d1e213e1..017fcb265 100644 --- a/samples/excel/default.yaml +++ b/samples/excel/default.yaml @@ -36,8 +36,17 @@ template: language: html style: - content: | - /* Your style goes here */ + 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 diff --git a/samples/word/05-tables/table-cell-access.yaml b/samples/word/05-tables/table-cell-access.yaml index 3df6e22ca..f2018d7a9 100644 --- a/samples/word/05-tables/table-cell-access.yaml +++ b/samples/word/05-tables/table-cell-access.yaml @@ -55,7 +55,7 @@ template:

Try it out

Get the contents of first cell.

+
+

Set up

+ +
+

Try it out

-

From 59b7be4dfbde39504880e672070cc9bb1569f318 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Mon, 12 Nov 2018 11:03:24 -0800 Subject: [PATCH 100/660] Snippet Ordering (#228) * Reordering snippets * Incorporating feedback * Returning basics to their own folder --- playlists/excel.yaml | 1146 ++++++++--------- playlists/word.yaml | 176 +-- .../excel/01-basics/basic-api-call-es5.yaml | 4 +- samples/excel/01-basics/basic-api-call.yaml | 6 +- .../01-basics/basic-common-api-call.yaml | 4 +- .../chart-axis-formatting.yaml | 5 +- .../{50-chart => 10-chart}/chart-axis.yaml | 6 +- .../chart-create-several-charts.yaml | 6 +- .../chart-formatting.yaml | 5 +- .../{50-chart => 10-chart}/chart-legend.yaml | 6 +- .../{50-chart => 10-chart}/chart-point.yaml | 6 +- .../chart-series-markers.yaml | 6 +- .../chart-series-plotorder.yaml | 6 +- .../{50-chart => 10-chart}/chart-series.yaml | 6 +- .../chart-title-substring.yaml | 6 +- .../chart-trendlines.yaml | 6 +- .../create-doughnut-chart.yaml | 4 +- .../conditional-formatting-advanced.yaml | 6 +- .../conditional-formatting-basic.yaml | 6 +- ...e-set-get-and-delete-custom-xml-parts.yaml | 5 +- .../test-xml-for-unique-namespace.yaml | 5 +- .../data-validation.yaml | 5 +- .../create-get-change-delete-settings.yaml | 5 +- .../get-file-in-slices-async.yaml | 4 +- .../properties.yaml | 4 +- .../data-changed.yaml | 6 +- .../events-chart-activated.yaml | 5 +- ...vents-chartcollection-added-activated.yaml | 5 +- .../events-disable-events.yaml | 5 +- .../events-table-changed.yaml | 6 +- .../events-tablecollection-changed.yaml | 6 +- .../events-worksheet-activated.yaml | 6 +- .../events-worksheet-calculated.yaml | 5 +- .../events-worksheet-changed.yaml | 6 +- .../events-worksheet-selectionchanged.yaml | 6 +- ...events-worksheetcollection-calculated.yaml | 5 +- .../selection-changed.yaml | 6 +- .../setting-changed.yaml | 9 +- .../excel/30-range/copy-multiply-values.yaml | 179 --- .../create-and-use-range-intersection.yaml | 162 --- samples/excel/30-range/range-operations.yaml | 179 --- .../create-and-remove-named-item.yaml | 10 +- .../create-and-use-named-item-for-range.yaml | 4 +- .../list-named-items.yaml | 6 +- .../update-named-item.yaml | 6 +- .../pivottable-calculations.yaml | 5 +- .../pivottable-create-and-modify.yaml | 5 +- .../pivottable-filters-and-summaries.yaml | 5 +- .../refresh-pivot-table.yaml | 5 +- .../{30-range => 42-range}/formatting.yaml | 4 +- .../insert-delete-clear-range.yaml | 8 +- .../range-hyperlink.yaml | 6 +- .../excel/42-range/range-relationships.yaml | 268 ++++ .../range-text-orientation.yaml | 6 +- .../selected-range.yaml | 4 +- .../set-get-values.yaml | 8 +- .../test-for-used-range.yaml | 4 +- .../45-named-item/create-named-item.yaml | 149 --- .../add-rows-and-columns-to-a-table.yaml | 3 +- .../convert-range-to-table.yaml | 5 +- .../{40-table => 46-table}/create-table.yaml | 3 +- .../{40-table => 46-table}/filter-data.yaml | 3 +- .../formatting.yaml} | 7 +- .../get-data-from-table.yaml | 15 +- ...get-visible-range-of-a-filtered-table.yaml | 5 +- .../import-json-data.yaml | 3 +- .../{40-table => 46-table}/sort-data.yaml | 5 +- .../excel/{40-table => 46-table}/style.yaml | 6 +- .../data-protection.yaml} | 6 +- .../workbook-get-active-cell.yaml | 2 +- .../active-worksheet.yaml} | 4 +- .../add-delete-rename-move-worksheet.yaml | 4 +- .../gridlines.yaml} | 7 +- .../list-worksheets.yaml | 4 +- ...rence-worksheets-by-relative-position.yaml | 4 +- .../tab-color.yaml | 4 +- .../worksheet-copy.yaml | 2 +- .../worksheet-freeze-panes.yaml | 6 +- .../worksheet-range-cell.yaml | 6 +- .../worksheet-visibility.yaml} | 8 +- .../range-areas.yaml | 7 +- .../range-copyfrom.yaml | 3 +- .../multiple-property-set.yaml | 7 +- .../report-generation.yaml | 3 +- .../working-with-dates.yaml | 6 +- .../color-wheel.yaml | 0 .../gradient.yaml | 2 +- .../path-finder-game.yaml | 2 +- .../patterns.yaml | 4 +- .../insert-and-change-content-controls.yaml | 0 .../insert-and-get-pictures.yaml | 0 .../{06-lists => 20-lists}/insert-list.yaml | 0 .../get-paragraph-on-insertion-point.yaml | 4 +- .../insert-formatted-text.yaml | 4 +- .../insert-header-and-footer.yaml | 2 +- .../insert-in-different-locations.yaml | 4 +- .../insert-line-and-page-breaks.yaml | 4 +- .../paragraph-properties.yaml | 2 +- .../search.yaml | 2 +- .../get-built-in-properties.yaml | 0 ...read-write-custom-document-properties.yaml | 0 .../scroll-to-range.yaml | 0 .../split-words-of-first-paragraph.yaml | 0 .../table-cell-access.yaml | 0 .../doc-assembly.yaml} | 5 +- .../multiple-property-set.yaml | 4 +- snippet-extractor-metadata/excel.xlsx | Bin 16162 -> 16169 bytes snippet-extractor-metadata/word.xlsx | Bin 12648 -> 12632 bytes snippet-extractor-output/snippets.yaml | 197 ++- view/excel.json | 167 ++- view/word.json | 34 +- 111 files changed, 1355 insertions(+), 1763 deletions(-) rename samples/excel/{50-chart => 10-chart}/chart-axis-formatting.yaml (98%) rename samples/excel/{50-chart => 10-chart}/chart-axis.yaml (98%) rename samples/excel/{50-chart => 10-chart}/chart-create-several-charts.yaml (98%) rename samples/excel/{50-chart => 10-chart}/chart-formatting.yaml (99%) rename samples/excel/{50-chart => 10-chart}/chart-legend.yaml (98%) rename samples/excel/{50-chart => 10-chart}/chart-point.yaml (98%) rename samples/excel/{50-chart => 10-chart}/chart-series-markers.yaml (98%) rename samples/excel/{50-chart => 10-chart}/chart-series-plotorder.yaml (98%) rename samples/excel/{50-chart => 10-chart}/chart-series.yaml (98%) rename samples/excel/{50-chart => 10-chart}/chart-title-substring.yaml (97%) rename samples/excel/{50-chart => 10-chart}/chart-trendlines.yaml (98%) rename samples/excel/{50-chart => 10-chart}/create-doughnut-chart.yaml (98%) rename samples/excel/{30-range => 14-conditional-formatting}/conditional-formatting-advanced.yaml (98%) rename samples/excel/{30-range => 14-conditional-formatting}/conditional-formatting-basic.yaml (99%) rename samples/excel/{85-custom-xml-parts => 18-custom-xml-parts}/create-set-get-and-delete-custom-xml-parts.yaml (97%) rename samples/excel/{85-custom-xml-parts => 18-custom-xml-parts}/test-xml-for-unique-namespace.yaml (97%) rename samples/excel/{35-worksheet => 22-data-validation}/data-validation.yaml (96%) rename samples/excel/{80-settings => 26-document}/create-get-change-delete-settings.yaml (96%) rename samples/excel/{82-document => 26-document}/get-file-in-slices-async.yaml (98%) rename samples/excel/{82-document => 26-document}/properties.yaml (99%) rename samples/excel/{70-events => 30-events}/data-changed.yaml (97%) rename samples/excel/{70-events => 30-events}/events-chart-activated.yaml (98%) rename samples/excel/{70-events => 30-events}/events-chartcollection-added-activated.yaml (97%) rename samples/excel/{70-events => 30-events}/events-disable-events.yaml (98%) rename samples/excel/{70-events => 30-events}/events-table-changed.yaml (98%) rename samples/excel/{70-events => 30-events}/events-tablecollection-changed.yaml (97%) rename samples/excel/{70-events => 30-events}/events-worksheet-activated.yaml (97%) rename samples/excel/{70-events => 30-events}/events-worksheet-calculated.yaml (97%) rename samples/excel/{70-events => 30-events}/events-worksheet-changed.yaml (97%) rename samples/excel/{70-events => 30-events}/events-worksheet-selectionchanged.yaml (97%) rename samples/excel/{70-events => 30-events}/events-worksheetcollection-calculated.yaml (97%) rename samples/excel/{70-events => 30-events}/selection-changed.yaml (97%) rename samples/excel/{70-events => 30-events}/setting-changed.yaml (96%) delete mode 100644 samples/excel/30-range/copy-multiply-values.yaml delete mode 100644 samples/excel/30-range/create-and-use-range-intersection.yaml delete mode 100644 samples/excel/30-range/range-operations.yaml rename samples/excel/{45-named-item => 34-named-item}/create-and-remove-named-item.yaml (98%) rename samples/excel/{45-named-item => 34-named-item}/create-and-use-named-item-for-range.yaml (98%) rename samples/excel/{45-named-item => 34-named-item}/list-named-items.yaml (95%) rename samples/excel/{45-named-item => 34-named-item}/update-named-item.yaml (98%) rename samples/excel/{55-pivottable => 38-pivottable}/pivottable-calculations.yaml (99%) rename samples/excel/{55-pivottable => 38-pivottable}/pivottable-create-and-modify.yaml (99%) rename samples/excel/{55-pivottable => 38-pivottable}/pivottable-filters-and-summaries.yaml (98%) rename samples/excel/{55-pivottable => 38-pivottable}/refresh-pivot-table.yaml (98%) rename samples/excel/{30-range => 42-range}/formatting.yaml (99%) rename samples/excel/{30-range => 42-range}/insert-delete-clear-range.yaml (97%) rename samples/excel/{30-range => 42-range}/range-hyperlink.yaml (99%) create mode 100644 samples/excel/42-range/range-relationships.yaml rename samples/excel/{30-range => 42-range}/range-text-orientation.yaml (97%) rename samples/excel/{30-range => 42-range}/selected-range.yaml (97%) rename samples/excel/{30-range => 42-range}/set-get-values.yaml (98%) rename samples/excel/{30-range => 42-range}/test-for-used-range.yaml (98%) delete mode 100644 samples/excel/45-named-item/create-named-item.yaml rename samples/excel/{40-table => 46-table}/add-rows-and-columns-to-a-table.yaml (99%) rename samples/excel/{40-table => 46-table}/convert-range-to-table.yaml (98%) rename samples/excel/{40-table => 46-table}/create-table.yaml (98%) rename samples/excel/{40-table => 46-table}/filter-data.yaml (99%) rename samples/excel/{40-table/format-table.yaml => 46-table/formatting.yaml} (98%) rename samples/excel/{40-table => 46-table}/get-data-from-table.yaml (98%) rename samples/excel/{40-table => 46-table}/get-visible-range-of-a-filtered-table.yaml (98%) rename samples/excel/{40-table => 46-table}/import-json-data.yaml (98%) rename samples/excel/{40-table => 46-table}/sort-data.yaml (98%) rename samples/excel/{40-table => 46-table}/style.yaml (98%) rename samples/excel/{37-workbook/protect-data-in-worksheet-and-workbook-structure.yaml => 50-workbook/data-protection.yaml} (98%) rename samples/excel/{37-workbook => 50-workbook}/workbook-get-active-cell.yaml (98%) rename samples/excel/{35-worksheet/activeworksheet.yaml => 54-worksheet/active-worksheet.yaml} (98%) rename samples/excel/{35-worksheet => 54-worksheet}/add-delete-rename-move-worksheet.yaml (97%) rename samples/excel/{35-worksheet/worksheet-gridlines.yaml => 54-worksheet/gridlines.yaml} (96%) rename samples/excel/{35-worksheet => 54-worksheet}/list-worksheets.yaml (97%) rename samples/excel/{35-worksheet => 54-worksheet}/reference-worksheets-by-relative-position.yaml (98%) rename samples/excel/{35-worksheet => 54-worksheet}/tab-color.yaml (98%) rename samples/excel/{35-worksheet => 54-worksheet}/worksheet-copy.yaml (99%) rename samples/excel/{35-worksheet => 54-worksheet}/worksheet-freeze-panes.yaml (97%) rename samples/excel/{35-worksheet => 54-worksheet}/worksheet-range-cell.yaml (97%) rename samples/excel/{35-worksheet/hide-unhide-worksheet.yaml => 54-worksheet/worksheet-visibility.yaml} (97%) rename samples/excel/{89-preview-apis => 85-preview-apis}/range-areas.yaml (97%) rename samples/excel/{89-preview-apis => 85-preview-apis}/range-copyfrom.yaml (99%) rename samples/excel/{88-common-patterns => 90-scenarios}/multiple-property-set.yaml (96%) rename samples/excel/{20-scenarios => 90-scenarios}/report-generation.yaml (99%) rename samples/excel/{30-range => 90-scenarios}/working-with-dates.yaml (96%) rename samples/excel/{90-just-for-fun => 99-just-for-fun}/color-wheel.yaml (100%) rename samples/excel/{90-just-for-fun => 99-just-for-fun}/gradient.yaml (99%) rename samples/excel/{90-just-for-fun => 99-just-for-fun}/path-finder-game.yaml (98%) rename samples/excel/{90-just-for-fun => 99-just-for-fun}/patterns.yaml (98%) rename samples/word/{20-content-controls => 10-content-controls}/insert-and-change-content-controls.yaml (100%) rename samples/word/{03-images => 15-images}/insert-and-get-pictures.yaml (100%) rename samples/word/{06-lists => 20-lists}/insert-list.yaml (100%) rename samples/word/{02-paragraphs => 25-paragraph}/get-paragraph-on-insertion-point.yaml (98%) rename samples/word/{02-paragraphs => 25-paragraph}/insert-formatted-text.yaml (98%) rename samples/word/{02-paragraphs => 25-paragraph}/insert-header-and-footer.yaml (98%) rename samples/word/{02-paragraphs => 25-paragraph}/insert-in-different-locations.yaml (99%) rename samples/word/{02-paragraphs => 25-paragraph}/insert-line-and-page-breaks.yaml (98%) rename samples/word/{02-paragraphs => 25-paragraph}/paragraph-properties.yaml (99%) rename samples/word/{02-paragraphs => 25-paragraph}/search.yaml (99%) rename samples/word/{10-properties => 30-properties}/get-built-in-properties.yaml (100%) rename samples/word/{10-properties => 30-properties}/read-write-custom-document-properties.yaml (100%) rename samples/word/{04-ranges => 35-ranges}/scroll-to-range.yaml (100%) rename samples/word/{04-ranges => 35-ranges}/split-words-of-first-paragraph.yaml (100%) rename samples/word/{05-tables => 40-tables}/table-cell-access.yaml (100%) rename samples/word/{80-scenarios/basic-doc-assembly.yaml => 90-scenarios/doc-assembly.yaml} (99%) rename samples/word/{50-common-patterns => 90-scenarios}/multiple-property-set.yaml (98%) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 33d467ebe..3cadb36ac 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -1,16 +1,16 @@ -- id: excel-basic-api-call - name: Basic API call +- id: excel-basics-basic-api-call + name: Basic API call (TypeScript) fileName: basic-api-call.yaml - description: Executes a basic Excel API call + description: Performs a basic Excel API call using TypeScript. rawUrl: >- https://raw.githubusercontent.com////samples/excel/01-basics/basic-api-call.yaml group: Basics api_set: ExcelApi: 1.1 -- id: excel-basic-api-call-es5 +- id: excel-basics-basic-api-call-es5 name: Basic API call (JavaScript) fileName: basic-api-call-es5.yaml - description: Executes a basic Excel API call using plain JavaScript & Promises + description: Performs a basic Excel API call using plain JavaScript & Promises. rawUrl: >- https://raw.githubusercontent.com////samples/excel/01-basics/basic-api-call-es5.yaml group: Basics @@ -20,762 +20,746 @@ name: Basic API call (Office 2013) fileName: basic-common-api-call.yaml description: >- - Executes a basic Excel API call using the "common API" syntax (compatible - with Office 2013). + Performs a basic Excel API call using JavaScript with the "common API" + syntax (compatible with Office 2013). rawUrl: >- https://raw.githubusercontent.com////samples/excel/01-basics/basic-common-api-call.yaml group: Basics api_set: Selection: 1.1 -- id: excel-advanced-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////samples/excel/20-scenarios/report-generation.yaml - group: Scenarios - api_set: - ExcelApi: 1.1 -- id: excel-range-conditional-formatting-basic - name: Conditional Formatting for Ranges - Basic - fileName: conditional-formatting-basic.yaml - description: Apply common types of conditional formatting to ranges. +- 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////samples/excel/30-range/conditional-formatting-basic.yaml - group: Range + https://raw.githubusercontent.com////samples/excel/10-chart/chart-axis.yaml + group: Chart api_set: - ExcelApi: 1.6 -- id: excel-range-conditional-formatting-advanced - name: Conditional Formatting for Ranges - Advanced - fileName: conditional-formatting-advanced.yaml - description: Work with more than one conditional format on the same range. + 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////samples/excel/30-range/conditional-formatting-advanced.yaml - group: Range + https://raw.githubusercontent.com////samples/excel/10-chart/chart-axis-formatting.yaml + group: Chart api_set: - ExcelApi: 1.6 -- id: excel-range-copy-multiply-values - name: Copy and multiply values - fileName: copy-multiply-values.yaml - description: Copy and multiply values in a range + ExcelAPI: 1.8 +- id: excel-chart-create-several-charts + name: Create charts + fileName: chart-create-several-charts.yaml + description: >- + Creates column-clustered, doughnut, line, XY-scatter, area, radar, pie, 3D, + cylinder, and 100% charts. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/30-range/copy-multiply-values.yaml - group: Range + https://raw.githubusercontent.com////samples/excel/10-chart/chart-create-several-charts.yaml + group: Chart api_set: ExcelApi: 1.1 -- id: excel-range-create-and-use-range-intersection - name: Create and Use an Intersection of Ranges - fileName: create-and-use-range-intersection.yaml - description: Create a an intersection of two ranges and make a chart of it. +- 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////samples/excel/30-range/create-and-use-range-intersection.yaml - group: Range + https://raw.githubusercontent.com////samples/excel/10-chart/create-doughnut-chart.yaml + group: Chart api_set: - ExcelApi: 1.4 -- id: excel-range-formatting + ExcelApi: 1.7 +- id: excel-chart-formatting name: Formatting - fileName: formatting.yaml - description: Format a range - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/30-range/formatting.yaml - group: Range - api_set: - ExcelApi: 1.1 -- id: excel-range-insert-delete-clear-range - name: 'Insert, delete, clear range' - fileName: insert-delete-clear-range.yaml - description: 'Insert, delete and clear a range' + fileName: chart-formatting.yaml + description: Formats labels and lines of a slope chart. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/30-range/insert-delete-clear-range.yaml - group: Range + https://raw.githubusercontent.com////samples/excel/10-chart/chart-formatting.yaml + group: Chart api_set: - ExcelApi: 1.1 -- id: excel-range-range-operations - name: Range operations - fileName: range-operations.yaml - description: 'Bounding rect, intersection, offset and resized range' + ExcelAPI: 1.8 +- id: excel-chart-legend + name: Legend + fileName: chart-legend.yaml + description: Formats the legend's font. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/30-range/range-operations.yaml - group: Range + https://raw.githubusercontent.com////samples/excel/10-chart/chart-legend.yaml + group: Chart api_set: - ExcelApi: 1.1 -- id: excel-range-selected-range - name: Selected range - fileName: selected-range.yaml - description: Get and set the currently selected range + 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////samples/excel/30-range/selected-range.yaml - group: Range + https://raw.githubusercontent.com////samples/excel/10-chart/chart-point.yaml + group: Chart api_set: - ExcelApi: 1.1 -- id: excel-range-set-get-values - name: Set and get values - fileName: set-get-values.yaml - description: Set and get values and formulas for a range + ExcelAPI: 1.7 +- id: excel-chart-series + name: Series + fileName: chart-series.yaml + description: 'Adds, sets, and deletes a series in a chart.' rawUrl: >- - https://raw.githubusercontent.com////samples/excel/30-range/set-get-values.yaml - group: Range + https://raw.githubusercontent.com////samples/excel/10-chart/chart-series.yaml + group: Chart api_set: - ExcelApi: 1.1 -- id: excel-range-test-for-used-range - name: Test for used range - fileName: test-for-used-range.yaml - description: Create a chart from a table only if there's data in the table. + 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////samples/excel/30-range/test-for-used-range.yaml - group: Range + https://raw.githubusercontent.com////samples/excel/10-chart/chart-series-markers.yaml + group: Chart api_set: - ExcelApi: 1.4 -- id: excel-range-working-with-dates - name: Working with dates - fileName: working-with-dates.yaml - description: >- - Setting and getting date values in a range and manipulating them using the - Moment JavaScript library with the Moment-MSDate plug-in + 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////samples/excel/30-range/working-with-dates.yaml - group: Range + https://raw.githubusercontent.com////samples/excel/10-chart/chart-series-plotorder.yaml + group: Chart api_set: - ExcelApi: 1.1 -- id: excel-range-hyperlink - name: Range hyperlink - fileName: range-hyperlink.yaml - description: 'Create, update, and clear a hyperlink for a range.' + ExcelAPI: 1.7 +- id: excel-chart-title-substring + name: Title substring + fileName: chart-title-substring.yaml + description: Changes the color for a substring in the chart's title. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/30-range/range-hyperlink.yaml - group: Range + https://raw.githubusercontent.com////samples/excel/10-chart/chart-title-substring.yaml + group: Chart api_set: ExcelApi: 1.7 -- id: excel-range-text-orientation - name: Range text orientation - fileName: range-text-orientation.yaml - description: Set and get the text orientation within a range +- id: excel-chart-trendlines + name: Trendlines + fileName: chart-trendlines.yaml + description: 'Adds, gets, and formats trendlines in a chart.' rawUrl: >- - https://raw.githubusercontent.com////samples/excel/30-range/range-text-orientation.yaml - group: Range + https://raw.githubusercontent.com////samples/excel/10-chart/chart-trendlines.yaml + group: Chart api_set: - ExcelApi: 1.7 -- id: excel-worksheet-activeworksheet - name: Active worksheet - fileName: activeworksheet.yaml - description: Get and set the active worksheet + ExcelAPI: 1.7 +- id: excel-range-conditional-formatting-advanced + name: Advanced conditional formats + fileName: conditional-formatting-advanced.yaml + description: Applies more than one conditional format on the same range. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/35-worksheet/activeworksheet.yaml - group: Worksheet + https://raw.githubusercontent.com////samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml + group: Conditional Formatting 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: 'Add, delete, rename and change the position of a worksheet' + ExcelApi: 1.6 +- 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////samples/excel/35-worksheet/add-delete-rename-move-worksheet.yaml - group: Worksheet + https://raw.githubusercontent.com////samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + group: Conditional Formatting api_set: - ExcelApi: 1.1 -- id: excel-worksheet-hide-unhide-worksheet - name: Hide and unhide worksheet - fileName: hide-unhide-worksheet.yaml - description: Hide and unhide a worksheet + ExcelApi: 1.6 +- 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////samples/excel/35-worksheet/hide-unhide-worksheet.yaml - group: Worksheet + https://raw.githubusercontent.com////samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml + group: Custom XML Parts api_set: - ExcelApi: 1.1 -- id: excel-worksheet-list-worksheets - name: List worksheets - fileName: list-worksheets.yaml - description: List the worksheets in the workbook + 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////samples/excel/35-worksheet/list-worksheets.yaml - group: Worksheet + https://raw.githubusercontent.com////samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml + group: Custom XML Parts api_set: - ExcelApi: 1.1 -- id: excel-worksheet-reference-worksheets-by-relative-position - name: Reference worksheets by relative position - fileName: reference-worksheets-by-relative-position.yaml + ExcelApi: 1.5 +- id: excel-data-validation + name: Data validation + fileName: data-validation.yaml description: >- - Shows how to use the worksheet shortcut methods, such as getFirst, getLast, - getPrevious, and getNext. + 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////samples/excel/35-worksheet/reference-worksheets-by-relative-position.yaml - group: Worksheet + https://raw.githubusercontent.com////samples/excel/22-data-validation/data-validation.yaml + group: Data Validation api_set: - ExcelApi: 1.5 -- id: excel-worksheet-worksheet-range-cell - name: Worksheet range and cell - fileName: worksheet-range-cell.yaml - description: Get a range or a cell in a worksheet + 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////samples/excel/35-worksheet/worksheet-range-cell.yaml - group: Worksheet + https://raw.githubusercontent.com////samples/excel/26-document/get-file-in-slices-async.yaml + group: Document api_set: ExcelApi: 1.1 -- id: excel-worksheet-copy - name: Copy worksheet - fileName: worksheet-copy.yaml - description: Copies the active worksheet to the specified location. +- id: excel-document-properties + name: Properties + fileName: properties.yaml + description: Gets and sets document properties. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/35-worksheet/worksheet-copy.yaml - group: Worksheet + https://raw.githubusercontent.com////samples/excel/26-document/properties.yaml + group: Document api_set: ExcelApi: 1.7 -- id: excel-worksheet-freeze-panes - name: Manage frozen panes in a worksheet - fileName: worksheet-freeze-panes.yaml - description: >- - Freeze columns, freeze rows, freeze a range, and manage frozen panes in a - worksheet. +- id: excel-settings-create-get-change-delete-settings + name: Settings + fileName: create-get-change-delete-settings.yaml + description: 'Creates, gets, changes, and deletes settings in the document.' rawUrl: >- - https://raw.githubusercontent.com////samples/excel/35-worksheet/worksheet-freeze-panes.yaml - group: Worksheet + https://raw.githubusercontent.com////samples/excel/26-document/create-get-change-delete-settings.yaml + group: Document api_set: - ExcelApi: 1.7 -- id: excel-worksheet-tab-color - name: Worksheet tab color - fileName: tab-color.yaml - description: Set and get the tab color of a worksheet + ExcelApi: 1.4 +- id: excel-events-chart-activated + name: Chart events + fileName: events-chart-activated.yaml + description: >- + Registers event handlers that run when the chart is activated or + deactivated. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/35-worksheet/tab-color.yaml - group: Worksheet + https://raw.githubusercontent.com////samples/excel/30-events/events-chart-activated.yaml + group: Events api_set: - ExcelApi: 1.7 -- id: excel-data-validation - name: Data Validation - fileName: data-validation.yaml + ExcelApi: 1.8 +- id: excel-events-chartcollection-added-activated + name: Chart collection events + fileName: events-chartcollection-added-activated.yaml description: >- - This snippet shows how to programmatically set a variety of data validation - rules on ranges, how to prompt users to enter valid data, and how to popup a - warning or informational message when invalid data is entered. + Registers event handlers that run when a chart collection is activated, + deactivated, added, or deleted. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/35-worksheet/data-validation.yaml - group: Worksheet + https://raw.githubusercontent.com////samples/excel/30-events/events-chartcollection-added-activated.yaml + group: Events api_set: ExcelApi: 1.8 -- id: excel-gridlines - name: Worksheet gridlines - fileName: worksheet-gridlines.yaml - description: Hide and show gridlines in a worksheet +- 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////samples/excel/35-worksheet/worksheet-gridlines.yaml - group: Worksheet + https://raw.githubusercontent.com////samples/excel/30-events/data-changed.yaml + group: Events api_set: - ExcelAPI: 1.8 -- id: excel-workbook-get-active-cell - name: Get active cell - fileName: workbook-get-active-cell.yaml - description: Gets the active cell of the entire workbook. + ExcelApi: 1.3 +- 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////samples/excel/37-workbook/workbook-get-active-cell.yaml - group: Workbook + https://raw.githubusercontent.com////samples/excel/30-events/events-disable-events.yaml + group: Events api_set: - ExcelApi: 1.7 -- id: excel-protect-data-in-worksheet-and-workbook-structure - name: Protect data in worksheet and the workbook structure - fileName: protect-data-in-worksheet-and-workbook-structure.yaml - description: Shows how to protect data in a worksheet and the workbook structure. + ExcelAPI: 1.8 +- id: excel-events-selection-changed + name: Selection event + fileName: selection-changed.yaml + description: >- + Registers an event handler that runs when the selection changes in the + workbook. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/37-workbook/protect-data-in-worksheet-and-workbook-structure.yaml - group: Workbook + https://raw.githubusercontent.com////samples/excel/30-events/selection-changed.yaml + group: Events api_set: - ExcelApi: 1.7 -- id: excel-style - name: Style - fileName: style.yaml - description: 'Add, apply, get and delete styles.' + ExcelApi: 1.2 +- 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////samples/excel/40-table/style.yaml - group: Table + https://raw.githubusercontent.com////samples/excel/30-events/events-table-changed.yaml + group: Events api_set: ExcelApi: 1.7 -- 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: Add rows and columns to a table - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/40-table/add-rows-and-columns-to-a-table.yaml - group: Table - api_set: - ExcelApi: 1.1 -- id: excel-table-convert-range-to-table - name: Convert a range to a table - fileName: convert-range-to-table.yaml - description: Convert a range to a table - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/40-table/convert-range-to-table.yaml - group: Table - api_set: - ExcelApi: 1.1 -- id: excel-table-create-table - name: Create a table - fileName: create-table.yaml - description: Creates a table with four columns and seven rows. +- 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////samples/excel/40-table/create-table.yaml - group: Table + https://raw.githubusercontent.com////samples/excel/30-events/events-tablecollection-changed.yaml + group: Events api_set: - ExcelApi: 1.1 -- id: excel-table-filter-data - name: Filter data - fileName: filter-data.yaml - description: Filter data in a table + ExcelApi: 1.7 +- id: excel-events-setting-changed + name: Workbook events + fileName: setting-changed.yaml + description: Registers an event handler that runs when the workbook's settings change. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/40-table/filter-data.yaml - group: Table + https://raw.githubusercontent.com////samples/excel/30-events/setting-changed.yaml + group: Events api_set: - ExcelApi: 1.1 -- id: excel-table-format-table - name: Format table - fileName: format-table.yaml - description: Format a table + ExcelApi: 1.4 +- id: excel-events-worksheet-activated + name: Worksheet activation events + fileName: events-worksheet-activated.yaml + description: >- + Registers event handlers that run when a worksheet is activated or + deactivated. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/40-table/format-table.yaml - group: Table + https://raw.githubusercontent.com////samples/excel/30-events/events-worksheet-activated.yaml + group: Events api_set: - ExcelApi: 1.1 -- id: excel-table-get-data-from-table - name: Get data from a table - fileName: get-data-from-table.yaml - description: Get data from a table + ExcelApi: 1.7 +- id: excel-events-worksheet-calculated + name: Worksheet calculation event + fileName: events-worksheet-calculated.yaml + description: Registers an event handler that runs when the worksheet has recalculated. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/40-table/get-data-from-table.yaml - group: Table + https://raw.githubusercontent.com////samples/excel/30-events/events-worksheet-calculated.yaml + group: Events api_set: - ExcelApi: 1.1 -- id: excel-table-get-visible-range-of-a-filtered-table - name: Get visible range from a filtered table - fileName: get-visible-range-of-a-filtered-table.yaml - description: Get visible range from a filtered table + ExcelApi: 1.8 +- id: excel-events-worksheet-changed + name: Worksheet change and addition events + fileName: events-worksheet-changed.yaml + description: Registers event handlers that runs when a worksheet is added or changed. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/40-table/get-visible-range-of-a-filtered-table.yaml - group: Table + https://raw.githubusercontent.com////samples/excel/30-events/events-worksheet-changed.yaml + group: Events api_set: - ExcelApi: 1.1 -- id: excel-table-import-json-data - name: Import JSON data - fileName: import-json-data.yaml - description: Import JSON data into a table + ExcelApi: 1.7 +- id: excel-events-worksheetcollection-calculated + name: Worksheet collection calculation event + fileName: events-worksheetcollection-calculated.yaml + description: >- + Registers an event handler that runs when the worksheet collection + recalculates. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/40-table/import-json-data.yaml - group: Table + https://raw.githubusercontent.com////samples/excel/30-events/events-worksheetcollection-calculated.yaml + group: Events api_set: - ExcelApi: 1.1 -- id: excel-table-sort-data - name: Sort table data - fileName: sort-data.yaml - description: Sort table data + ExcelApi: 1.8 +- id: excel-events-worksheet-selectionchanged + name: Worksheet selection change event + fileName: events-worksheet-selectionchanged.yaml + description: Registers an event handler that runs when the selected worksheet changes. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/40-table/sort-data.yaml - group: Table + https://raw.githubusercontent.com////samples/excel/30-events/events-worksheet-selectionchanged.yaml + group: Events api_set: - ExcelApi: 1.1 -- id: excel-named-item-create-named-item - name: Create a named item - fileName: create-named-item.yaml - description: Create a named item for a formula + ExcelApi: 1.7 +- id: excel-named-item-create-and-remove-named-item + name: Create and remove + fileName: create-and-remove-named-item.yaml + description: Creates and removes named items for a formula. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/45-named-item/create-named-item.yaml + https://raw.githubusercontent.com////samples/excel/34-named-item/create-and-remove-named-item.yaml group: Named Item api_set: ExcelApi: 1.4 -- id: excel-named-item-create-and-remove-named-item - name: Create and remove named items - fileName: create-and-remove-named-item.yaml - description: Create and remove named items for a formula +- id: excel-named-item-list-named-items + name: List all + fileName: list-named-items.yaml + description: Lists all the named items in a workbook. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/45-named-item/create-and-remove-named-item.yaml + https://raw.githubusercontent.com////samples/excel/34-named-item/list-named-items.yaml group: Named Item api_set: - ExcelApi: 1.4 + ExcelApi: 1.3 - id: excel-create-and-use-named-item-for-range - name: Create and use named range item + name: Use named range item fileName: create-and-use-named-item-for-range.yaml - description: Create and use named range item + description: Creates and uses a named range item. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/45-named-item/create-and-use-named-item-for-range.yaml + https://raw.githubusercontent.com////samples/excel/34-named-item/create-and-use-named-item-for-range.yaml group: Named Item api_set: ExcelApi: 1.4 -- id: excel-named-item-list-named-items - name: List all named items in a workbook - fileName: list-named-items.yaml - description: List all named items in a workbook - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/45-named-item/list-named-items.yaml - group: Named Item - api_set: - ExcelApi: 1.3 - id: excel-update-named-item - name: Update a named item + name: Update fileName: update-named-item.yaml - description: Create and then update a named item + description: Creates and then updates a named item. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/45-named-item/update-named-item.yaml + https://raw.githubusercontent.com////samples/excel/34-named-item/update-named-item.yaml group: Named Item api_set: - ExcelApi: 1.7 -- id: excel-chart-create-several-charts - name: Chart creation - fileName: chart-create-several-charts.yaml - description: >- - Create column-clustered, doughnut, line, XY-scatter, area, radar, pie, 3D, - cylinder, and 100% charts. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/50-chart/chart-create-several-charts.yaml - group: Chart - api_set: - ExcelApi: 1.1 -- id: excel-chart-create-doughnut-chart - name: Doughnut chart - fileName: create-doughnut-chart.yaml - description: Create a doughnut chart and adjust the size - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/50-chart/create-doughnut-chart.yaml - group: Chart - api_set: - ExcelApi: 1.7 -- id: excel-chart-axis - name: Chart axis - fileName: chart-axis.yaml - description: 'Get, set, and remove axis unit, label and title in a chart.' - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/50-chart/chart-axis.yaml - group: Chart - api_set: - ExcelAPI: 1.7 -- id: excel-chart-legend - name: Chart legend - fileName: chart-legend.yaml - description: Format legend font - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/50-chart/chart-legend.yaml - group: Chart - api_set: - ExcelAPI: 1.7 -- id: excel-chart-point - name: Chart point - fileName: chart-point.yaml - description: Set chart point color. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/50-chart/chart-point.yaml - group: Chart - api_set: - ExcelAPI: 1.7 -- id: excel-chart-series - name: Chart series - fileName: chart-series.yaml - description: 'Add, set, and delete a series in a chart.' - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/50-chart/chart-series.yaml - group: Chart - api_set: - ExcelAPI: 1.7 -- id: excel-chart-series-markers - name: Chart series markers - fileName: chart-series-markers.yaml - description: Set chart series marker properties - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/50-chart/chart-series-markers.yaml - group: Chart - api_set: - ExcelAPI: 1.7 -- id: excel-chart-series-plotorder - name: Chart - series plot order - fileName: chart-series-plotorder.yaml - description: Order the plotting of series in a chart. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/50-chart/chart-series-plotorder.yaml - group: Chart - api_set: - ExcelAPI: 1.7 -- id: excel-chart-title-substring - name: Chart - Title substring - fileName: chart-title-substring.yaml - description: Get and set title substring for a chart. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/50-chart/chart-title-substring.yaml - group: Chart - api_set: - ExcelApi: 1.7 -- id: excel-chart-trendlines - name: Chart trendlines - fileName: chart-trendlines.yaml - description: 'Add, get, and format trendlines in a chart.' - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/50-chart/chart-trendlines.yaml - group: Chart - api_set: - ExcelAPI: 1.7 -- id: excel-chart-axis-formatting - name: Chart - Axis formatting - fileName: chart-axis-formatting.yaml - description: Format the vertical and horizontal axis in a chart. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/50-chart/chart-axis-formatting.yaml - group: Chart - api_set: - ExcelAPI: 1.8 -- id: excel-chart-formatting - name: Chart - Formatting - fileName: chart-formatting.yaml - description: Format labels and lines of a slope chart. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/50-chart/chart-formatting.yaml - group: Chart - api_set: - ExcelAPI: 1.8 + ExcelApi: 1.7 - id: excel-pivottable-calculations - name: PivotTable Calculations + name: Calculations fileName: pivottable-calculations.yaml - description: Change the calculations the PivotTable performs. + description: Changes the calculations the PivotTable performs. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/55-pivottable/pivottable-calculations.yaml + https://raw.githubusercontent.com////samples/excel/38-pivottable/pivottable-calculations.yaml group: PivotTable api_set: ExcelApi: 1.8 - id: excel-pivottable-create-and-modify - name: Create and modify PivotTable + name: Create and modify fileName: pivottable-create-and-modify.yaml - description: Create and modify a PivotTable. + description: Creates and modifies a PivotTable. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/55-pivottable/pivottable-create-and-modify.yaml + https://raw.githubusercontent.com////samples/excel/38-pivottable/pivottable-create-and-modify.yaml group: PivotTable api_set: ExcelApi: 1.8 - id: excel-pivottable-filters-and-summaries - name: PivotTable filters and summaries + name: Filters and summaries fileName: pivottable-filters-and-summaries.yaml - description: Filter PivotTable data and show different summarizations. + description: Filters PivotTable data and shows different summarizations. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/55-pivottable/pivottable-filters-and-summaries.yaml + https://raw.githubusercontent.com////samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml group: PivotTable api_set: ExcelApi: 1.8 - id: excel-pivottable-refresh-pivot-table - name: Refresh PivotTable + name: Refresh fileName: refresh-pivot-table.yaml - description: Refresh PivotTable + description: Refreshes a PivotTable. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/55-pivottable/refresh-pivot-table.yaml + https://raw.githubusercontent.com////samples/excel/38-pivottable/refresh-pivot-table.yaml group: PivotTable api_set: ExcelApi: 1.3 -- id: excel-events-data-changed - name: Handle the data changed event - fileName: data-changed.yaml - description: This snippet shows how to register a handler for the data-changed event. +- id: excel-range-formatting + name: Formatting + fileName: formatting.yaml + description: Formats a range. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/70-events/data-changed.yaml - group: Events + https://raw.githubusercontent.com////samples/excel/42-range/formatting.yaml + group: Range api_set: - ExcelApi: 1.3 -- id: excel-events-selection-changed - name: Selection Changed - fileName: selection-changed.yaml - description: Add and remove an event handler on the selection changed event + ExcelApi: 1.1 +- id: excel-range-hyperlink + name: Hyperlinks + fileName: range-hyperlink.yaml + description: 'Creates, updates, and clears hyperlinks in a range.' rawUrl: >- - https://raw.githubusercontent.com////samples/excel/70-events/selection-changed.yaml - group: Events + https://raw.githubusercontent.com////samples/excel/42-range/range-hyperlink.yaml + group: Range api_set: - ExcelApi: 1.2 -- id: excel-events-setting-changed - name: Handle the settings-changed event - fileName: setting-changed.yaml - description: This snippet shows how to register a handler for the SettingsChanged event. + 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////samples/excel/70-events/setting-changed.yaml - group: Events + https://raw.githubusercontent.com////samples/excel/42-range/insert-delete-clear-range.yaml + group: Range + api_set: + ExcelApi: 1.1 +- 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////samples/excel/42-range/range-relationships.yaml + group: Range + api_set: + ExcelApi: 1.1 +- 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////samples/excel/42-range/selected-range.yaml + group: Range + api_set: + ExcelApi: 1.1 +- id: excel-range-test-for-used-range + name: Test for used range + fileName: test-for-used-range.yaml + description: Creates a chart from a table only if there's data in the table. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/42-range/test-for-used-range.yaml + group: Range api_set: ExcelApi: 1.4 -- id: excel-events-table-changed - name: Events - Table changed - fileName: events-table-changed.yaml - description: Add event handlers for table onChanged and onSelectionChanged events +- 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////samples/excel/70-events/events-table-changed.yaml - group: Events + https://raw.githubusercontent.com////samples/excel/42-range/range-text-orientation.yaml + group: Range api_set: ExcelApi: 1.7 -- id: excel-events-tablecollection-changed - name: Events - Table collection changed - fileName: events-tablecollection-changed.yaml - description: Add event handlers for table collection onChanged event +- 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////samples/excel/70-events/events-tablecollection-changed.yaml - group: Events + https://raw.githubusercontent.com////samples/excel/42-range/set-get-values.yaml + group: Range api_set: - ExcelApi: 1.7 -- id: excel-events-worksheet-activated - name: Events - Worksheet activated - fileName: events-worksheet-activated.yaml - description: Add event handlers for worksheet onActivated and onDeactivated events + ExcelApi: 1.1 +- 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////samples/excel/70-events/events-worksheet-activated.yaml - group: Events + https://raw.githubusercontent.com////samples/excel/46-table/add-rows-and-columns-to-a-table.yaml + group: Table api_set: - ExcelApi: 1.7 -- id: excel-events-worksheet-changed - name: Events - Worksheet changed - fileName: events-worksheet-changed.yaml - description: Add event handlers for worksheet onChanged and onAdded events + ExcelApi: 1.1 +- 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////samples/excel/70-events/events-worksheet-changed.yaml - group: Events + https://raw.githubusercontent.com////samples/excel/46-table/convert-range-to-table.yaml + group: Table api_set: - ExcelApi: 1.7 -- id: excel-events-worksheet-selectionchanged - name: Events - Worksheet onSelectionChanged - fileName: events-worksheet-selectionchanged.yaml - description: Add an event handler for the worksheet onSelectionChanged event + ExcelApi: 1.1 +- id: excel-table-create-table + name: Create a table + fileName: create-table.yaml + description: Creates a table. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/70-events/events-worksheet-selectionchanged.yaml - group: Events + https://raw.githubusercontent.com////samples/excel/46-table/create-table.yaml + group: Table api_set: - ExcelApi: 1.7 -- id: excel-events-chart-activated - name: Events - Chart Activate - fileName: events-chart-activated.yaml - description: Create handlers for the Chart.onActivated and Chart.onDeactivated events. + ExcelApi: 1.1 +- id: excel-table-filter-data + name: Filter data + fileName: filter-data.yaml + description: Filters table data. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/70-events/events-chart-activated.yaml - group: Events + https://raw.githubusercontent.com////samples/excel/46-table/filter-data.yaml + group: Table api_set: - ExcelApi: 1.8 -- id: excel-events-chartcollection-added-activated - name: Events - ChartCollection - fileName: events-chartcollection-added-activated.yaml - description: >- - Shows how to handle the ChartCollection onActivated, onDeactivated, onAdded, - and onDeleted events. + ExcelApi: 1.1 +- id: excel-table-formatting + name: Formatting + fileName: formatting.yaml + description: Formats a table. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/70-events/events-chartcollection-added-activated.yaml - group: Events + https://raw.githubusercontent.com////samples/excel/46-table/formatting.yaml + group: Table api_set: - ExcelApi: 1.8 -- id: excel-events-disable-events - name: Disable Events - fileName: events-disable-events.yaml - description: Toggle event firing on and off for performance. + ExcelApi: 1.1 +- 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////samples/excel/70-events/events-disable-events.yaml - group: Events + https://raw.githubusercontent.com////samples/excel/46-table/get-data-from-table.yaml + group: Table api_set: - ExcelAPI: 1.8 -- id: excel-events-worksheet-calculated - name: Events - Worksheet onCalculated - fileName: events-worksheet-calculated.yaml - description: Add an event handler for the worksheet onCalculated event + ExcelApi: 1.1 +- 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////samples/excel/70-events/events-worksheet-calculated.yaml - group: Events + https://raw.githubusercontent.com////samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml + group: Table api_set: - ExcelApi: 1.8 -- id: excel-events-worksheetcollection-calculated - name: Events - WorksheetCollection onCalculated - fileName: events-worksheetcollection-calculated.yaml - description: Add an event handler for the WorksheetCollection onCalculated event + ExcelApi: 1.1 +- 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////samples/excel/70-events/events-worksheetcollection-calculated.yaml - group: Events + https://raw.githubusercontent.com////samples/excel/46-table/import-json-data.yaml + group: Table api_set: - ExcelApi: 1.8 -- id: excel-settings-create-get-change-delete-settings - name: 'Create, get, change, and delete a setting' - fileName: create-get-change-delete-settings.yaml - description: 'Show how to create, get, change, and delete settings in the document.' + ExcelApi: 1.1 +- id: excel-table-sort-data + name: Sort data + fileName: sort-data.yaml + description: Sorts the data within a table. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/80-settings/create-get-change-delete-settings.yaml - group: Settings + https://raw.githubusercontent.com////samples/excel/46-table/sort-data.yaml + group: Table api_set: - ExcelApi: 1.4 -- id: excel-document-get-file-in-slices-async - name: Get file (using slicing) - fileName: get-file-in-slices-async.yaml + ExcelApi: 1.1 +- id: excel-table-style + name: Style + fileName: style.yaml description: >- - Use slicing to get the byte array and base64-encoded string that represent - the current document. + Creates a custom style, applies a custom and built-in styles to a table, + gets style properties, and deletes the custom style. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/82-document/get-file-in-slices-async.yaml - group: Document + https://raw.githubusercontent.com////samples/excel/46-table/style.yaml + group: Table + api_set: + ExcelApi: 1.7 +- 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////samples/excel/50-workbook/workbook-get-active-cell.yaml + group: Workbook + api_set: + ExcelApi: 1.7 +- 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////samples/excel/50-workbook/data-protection.yaml + group: Workbook + api_set: + ExcelApi: 1.7 +- id: excel-worksheet-active-worksheet + name: Active worksheet + fileName: active-worksheet.yaml + description: Gets and sets the active worksheet. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/54-worksheet/active-worksheet.yaml + group: Worksheet api_set: ExcelApi: 1.1 -- id: excel-document-properties - name: Document properties - fileName: properties.yaml - description: Set and get document properties. +- 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////samples/excel/82-document/properties.yaml - group: Document + https://raw.githubusercontent.com////samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml + group: Worksheet + api_set: + ExcelApi: 1.1 +- 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////samples/excel/54-worksheet/worksheet-copy.yaml + group: Worksheet api_set: ExcelApi: 1.7 -- id: excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts - name: 'Create, set, get, and delete custom XML part' - fileName: create-set-get-and-delete-custom-xml-parts.yaml - description: 'Shows how to create, set, get, and delete a custom XML part.' +- 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////samples/excel/85-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml - group: Custom XML Parts + https://raw.githubusercontent.com////samples/excel/54-worksheet/worksheet-freeze-panes.yaml + group: Worksheet api_set: - ExcelApi: 1.5 -- id: excel-custom-xml-parts-test-xml-for-unique-namespace - name: Test custom XML part for unique namespace - fileName: test-xml-for-unique-namespace.yaml + ExcelApi: 1.7 +- id: excel-worksheet-worksheet-range-cell + name: Get range or cell + fileName: worksheet-range-cell.yaml description: >- - Shows how to test to see if there is only one XML part for a specified - namespace. + Gets the used range, the entire range of a worksheet, the specified range, + and the specified cell. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/85-custom-xml-parts/test-xml-for-unique-namespace.yaml - group: Custom XML Parts + https://raw.githubusercontent.com////samples/excel/54-worksheet/worksheet-range-cell.yaml + group: Worksheet + api_set: + ExcelApi: 1.1 +- id: excel-worksheet-gridlines + name: Gridlines + fileName: gridlines.yaml + description: Hides and shows a worksheet's gridlines. + rawUrl: >- + https://raw.githubusercontent.com////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////samples/excel/54-worksheet/list-worksheets.yaml + group: Worksheet + api_set: + ExcelApi: 1.1 +- 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////samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml + group: Worksheet api_set: ExcelApi: 1.5 -- id: excel-multiple-property-set - name: Multiple Property Set - fileName: multiple-property-set.yaml - description: Setting multiple properties at once with the rich API object set() method. +- 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////samples/excel/88-common-patterns/multiple-property-set.yaml - group: Common Patterns + https://raw.githubusercontent.com////samples/excel/54-worksheet/tab-color.yaml + group: Worksheet api_set: - ExcelApi: 1.4 -- id: excel-range-areas - name: Using RangeAreas (Discontiguous Ranges) - fileName: range-areas.yaml - description: 'Work with RangeAreas, which are sets of ranges that need not be contiguous.' + ExcelApi: 1.7 +- id: excel-worksheet-visibility + name: Visibility + fileName: worksheet-visibility.yaml + description: Hides and unhides a worksheet. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/range-areas.yaml - group: Preview APIs + https://raw.githubusercontent.com////samples/excel/54-worksheet/worksheet-visibility.yaml + group: Worksheet api_set: - ExcelApi: 1.9 + ExcelApi: 1.1 - id: excel-range-copyfrom name: Copy and paste ranges fileName: range-copyfrom.yaml - description: Use the Range.copyFrom method to copy data and formatting. + description: Copies data and formatting with the Range.copyFrom method. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/89-preview-apis/range-copyfrom.yaml + https://raw.githubusercontent.com////samples/excel/85-preview-apis/range-copyfrom.yaml group: Preview APIs api_set: ExcelAPI: 1.8 -- id: excel-just-for-fun-gradient - name: Gradient - fileName: gradient.yaml +- id: excel-range-areas + name: RangeAreas (discontiguous ranges) + fileName: range-areas.yaml description: >- - Uses range formatting and external libraries to draw a colorful gradient - within a range. Contributed by Alexander Zlatkovski. + Creates and uses RangeAreas, which are sets of ranges that need not be + contiguous. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/90-just-for-fun/gradient.yaml - group: Just For Fun + https://raw.githubusercontent.com////samples/excel/85-preview-apis/range-areas.yaml + group: Preview APIs api_set: - ExcelApi: 1.2 + 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////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////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////samples/excel/90-scenarios/working-with-dates.yaml + group: Scenarios + api_set: + ExcelApi: 1.1 - id: excel-just-for-fun-patterns name: Colorful Patterns fileName: patterns.yaml description: >- - Shows how to use range formatting to draw interesting pattern. Contributed - by Alexander Zlatkovski + Uses range formatting to draw interesting pattern. Contributed by Alexander + Zlatkovski. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/99-just-for-fun/patterns.yaml + group: Just For Fun + api_set: + ExcelApi: 1.2 +- 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////samples/excel/90-just-for-fun/patterns.yaml + https://raw.githubusercontent.com////samples/excel/99-just-for-fun/gradient.yaml group: Just For Fun api_set: ExcelApi: 1.2 @@ -783,10 +767,10 @@ name: Path finder fileName: path-finder-game.yaml description: >- - Using range formatting to play a "pathfinder game". Contributed by Alexander - Zlatkovski + Uses range formatting to play a "pathfinder game". Contributed by Alexander + Zlatkovski. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/90-just-for-fun/path-finder-game.yaml + https://raw.githubusercontent.com////samples/excel/99-just-for-fun/path-finder-game.yaml group: Just For Fun api_set: ExcelApi: 1.2 @@ -797,7 +781,7 @@ Uses chart formatting to draw a wheel with changing colors. Contributed by Alexander Zlatkovski. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/90-just-for-fun/color-wheel.yaml + https://raw.githubusercontent.com////samples/excel/99-just-for-fun/color-wheel.yaml group: Just For Fun api_set: ExcelApi: 1.1 diff --git a/playlists/word.yaml b/playlists/word.yaml index c76e2b2b8..17a5b80cc 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -1,5 +1,5 @@ - id: word-basics-basic-api-call - name: Basic API call + name: Basic API call (TypeScript) fileName: basic-api-call.yaml description: Performs a basic Word API call using TypeScript. rawUrl: >- @@ -20,165 +20,165 @@ name: Basic API call (Office 2013) fileName: basic-common-api-call.yaml description: >- - Performs a basic Word API call using the "common API" syntax (compatible - with Office 2013). + Performs a basic Word API call using JavaScript with the "common API" syntax + (compatible with Office 2013). rawUrl: >- https://raw.githubusercontent.com////samples/word/01-basics/basic-common-api-call.yaml group: Basics api_set: Selection: 1.1 -- id: word-paragraphs-insert-formatted-text - name: Insert formatted text - fileName: insert-formatted-text.yaml - description: Shows how to use formatting objects as well as applying pre-built styles. +- 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////samples/word/02-paragraphs/insert-formatted-text.yaml - group: Paragraphs + https://raw.githubusercontent.com////samples/word/10-content-controls/insert-and-change-content-controls.yaml + group: Content Controls api_set: WordApi: 1.1 -- id: word-paragraphs-insert-in-different-locations - name: Insert at different locations - fileName: insert-in-different-locations.yaml - description: Inserts content at different document locations. +- 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////samples/word/02-paragraphs/insert-in-different-locations.yaml - group: Paragraphs + https://raw.githubusercontent.com////samples/word/15-images/insert-and-get-pictures.yaml + group: Images api_set: - WordApi: 1.2 -- id: word-paragraphs-get-paragraph-on-insertion-point + 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////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////samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml - group: Paragraphs + https://raw.githubusercontent.com////samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml + group: Paragraph api_set: WordApi: 1.1 -- id: word-paragraphs-insert-line-and-page-breaks +- 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////samples/word/02-paragraphs/insert-line-and-page-breaks.yaml - group: Paragraphs + https://raw.githubusercontent.com////samples/word/25-paragraph/insert-line-and-page-breaks.yaml + group: Paragraph api_set: WordApi: 1.2 -- id: word-paragraphs-insert-header-and-footer +- 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////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////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////samples/word/02-paragraphs/insert-header-and-footer.yaml - group: Paragraphs + https://raw.githubusercontent.com////samples/word/25-paragraph/insert-header-and-footer.yaml + group: Paragraph api_set: WordApi: 1.1 -- id: word-paragraphs-paragraph-properties +- 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////samples/word/02-paragraphs/paragraph-properties.yaml - group: Paragraphs + https://raw.githubusercontent.com////samples/word/25-paragraph/paragraph-properties.yaml + group: Paragraph api_set: WordApi: 1.2 -- id: word-paragraphs-search +- id: word-paragraph-search name: Search fileName: search.yaml description: Shows basic and advanced search capabilities. rawUrl: >- - https://raw.githubusercontent.com////samples/word/02-paragraphs/search.yaml - group: Paragraphs + https://raw.githubusercontent.com////samples/word/25-paragraph/search.yaml + group: Paragraph api_set: WordApi: 1.1 -- id: word-images-insert-and-get-pictures - name: Using inline pictures - fileName: insert-and-get-pictures.yaml - description: Inserts and gets inline pictures. +- 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////samples/word/03-images/insert-and-get-pictures.yaml - group: Images + https://raw.githubusercontent.com////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////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////samples/word/04-ranges/scroll-to-range.yaml + https://raw.githubusercontent.com////samples/word/35-ranges/scroll-to-range.yaml group: Ranges api_set: WordApi: 1.2 - id: word-ranges-split-words-of-first-paragraph - name: Splitting a paragraph into ranges + 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////samples/word/04-ranges/split-words-of-first-paragraph.yaml + https://raw.githubusercontent.com////samples/word/35-ranges/split-words-of-first-paragraph.yaml group: Ranges api_set: WordApi: 1.3 - id: word-tables-table-cell-access - name: Creating and accessing a table + 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////samples/word/05-tables/table-cell-access.yaml + https://raw.githubusercontent.com////samples/word/40-tables/table-cell-access.yaml group: Tables api_set: WordApi: 1.3 -- id: word-lists-insert-list - name: List creation - fileName: insert-list.yaml - description: Inserts a new list into the document. - rawUrl: >- - https://raw.githubusercontent.com////samples/word/06-lists/insert-list.yaml - group: Lists - api_set: - WordApi: 1.3 -- 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////samples/word/10-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////samples/word/10-properties/read-write-custom-document-properties.yaml - group: Properties - api_set: - WordApi: 1.3 -- id: word-content-controls-insert-and-change-content-controls - name: Content control basics - fileName: insert-and-change-content-controls.yaml - description: 'Inserts, manipulates, and retrieves content controls.' +- 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////samples/word/20-content-controls/insert-and-change-content-controls.yaml - group: Content Controls + https://raw.githubusercontent.com////samples/word/90-scenarios/doc-assembly.yaml + group: Scenarios api_set: WordApi: 1.1 -- id: word-common-patterns-multiple-property-set - name: Multiple property set +- 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////samples/word/50-common-patterns/multiple-property-set.yaml - group: Common Patterns - api_set: - WordApi: 1.3 -- id: word-scenarios-basic-doc-assembly - name: Basic document assembly - fileName: basic-doc-assembly.yaml - description: Composes different parts of a Word document. - rawUrl: >- - https://raw.githubusercontent.com////samples/word/80-scenarios/basic-doc-assembly.yaml + https://raw.githubusercontent.com////samples/word/90-scenarios/multiple-property-set.yaml group: Scenarios api_set: - WordApi: 1.1 + WordApi: 1.3 diff --git a/samples/excel/01-basics/basic-api-call-es5.yaml b/samples/excel/01-basics/basic-api-call-es5.yaml index 554fb5cf5..8e6a3888b 100644 --- a/samples/excel/01-basics/basic-api-call-es5.yaml +++ b/samples/excel/01-basics/basic-api-call-es5.yaml @@ -1,7 +1,7 @@ order: 2 -id: excel-basic-api-call-es5 +id: excel-basics-basic-api-call-es5 name: Basic API call (JavaScript) -description: Executes a basic Excel API call using plain JavaScript & Promises +description: Performs a basic Excel API call using plain JavaScript & Promises. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/01-basics/basic-api-call.yaml b/samples/excel/01-basics/basic-api-call.yaml index 42c0706ec..a08649d1c 100644 --- a/samples/excel/01-basics/basic-api-call.yaml +++ b/samples/excel/01-basics/basic-api-call.yaml @@ -1,7 +1,7 @@ order: 1 -id: excel-basic-api-call -name: Basic API call -description: Executes a basic Excel API call +id: excel-basics-basic-api-call +name: Basic API call (TypeScript) +description: Performs a basic Excel API call using TypeScript. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/01-basics/basic-common-api-call.yaml b/samples/excel/01-basics/basic-common-api-call.yaml index 78a2c5f3a..b0768af82 100644 --- a/samples/excel/01-basics/basic-common-api-call.yaml +++ b/samples/excel/01-basics/basic-common-api-call.yaml @@ -1,7 +1,7 @@ -order: 1000 +order: 3 id: excel-basics-basic-common-api-call name: Basic API call (Office 2013) -description: Executes a basic Excel API call using the "common API" syntax (compatible with Office 2013). +description: Performs a basic Excel API call using JavaScript with the "common API" syntax (compatible with Office 2013). author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/50-chart/chart-axis-formatting.yaml b/samples/excel/10-chart/chart-axis-formatting.yaml similarity index 98% rename from samples/excel/50-chart/chart-axis-formatting.yaml rename to samples/excel/10-chart/chart-axis-formatting.yaml index 69af54d53..41add9cef 100644 --- a/samples/excel/50-chart/chart-axis-formatting.yaml +++ b/samples/excel/10-chart/chart-axis-formatting.yaml @@ -1,6 +1,7 @@ +order: 2 id: excel-chart-axis-formatting -name: Chart - Axis formatting -description: Format the vertical and horizontal axis in a chart. +name: Axis formatting +description: Formats the vertical and horizontal axes in a chart. host: EXCEL api_set: ExcelAPI: 1.8 diff --git a/samples/excel/50-chart/chart-axis.yaml b/samples/excel/10-chart/chart-axis.yaml similarity index 98% rename from samples/excel/50-chart/chart-axis.yaml rename to samples/excel/10-chart/chart-axis.yaml index ce65283ba..b6904fdf2 100644 --- a/samples/excel/50-chart/chart-axis.yaml +++ b/samples/excel/10-chart/chart-axis.yaml @@ -1,7 +1,7 @@ -order: 6 +order: 1 id: excel-chart-axis -name: Chart axis -description: 'Get, set, and remove axis unit, label and title in a chart.' +name: Axis details +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/50-chart/chart-create-several-charts.yaml b/samples/excel/10-chart/chart-create-several-charts.yaml similarity index 98% rename from samples/excel/50-chart/chart-create-several-charts.yaml rename to samples/excel/10-chart/chart-create-several-charts.yaml index 52ad180dd..bf9999edb 100644 --- a/samples/excel/50-chart/chart-create-several-charts.yaml +++ b/samples/excel/10-chart/chart-create-several-charts.yaml @@ -1,7 +1,7 @@ -order: 1 +order: 3 id: excel-chart-create-several-charts -name: Chart creation -description: 'Create column-clustered, doughnut, line, XY-scatter, area, radar, pie, 3D, cylinder, and 100% charts.' +name: Create charts +description: 'Creates column-clustered, doughnut, line, XY-scatter, area, radar, pie, 3D, cylinder, and 100% charts.' author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/50-chart/chart-formatting.yaml b/samples/excel/10-chart/chart-formatting.yaml similarity index 99% rename from samples/excel/50-chart/chart-formatting.yaml rename to samples/excel/10-chart/chart-formatting.yaml index 5c6e87fcc..68cc810fe 100644 --- a/samples/excel/50-chart/chart-formatting.yaml +++ b/samples/excel/10-chart/chart-formatting.yaml @@ -1,6 +1,7 @@ +order: 5 id: excel-chart-formatting -name: Chart - Formatting -description: Format labels and lines of a slope chart. +name: Formatting +description: Formats labels and lines of a slope chart. host: EXCEL api_set: ExcelAPI: 1.8 diff --git a/samples/excel/50-chart/chart-legend.yaml b/samples/excel/10-chart/chart-legend.yaml similarity index 98% rename from samples/excel/50-chart/chart-legend.yaml rename to samples/excel/10-chart/chart-legend.yaml index 74c987aa1..9680c6110 100644 --- a/samples/excel/50-chart/chart-legend.yaml +++ b/samples/excel/10-chart/chart-legend.yaml @@ -1,7 +1,7 @@ -order: 7 +order: 6 id: excel-chart-legend -name: Chart legend -description: Format legend font +name: Legend +description: Formats the legend's font. host: EXCEL api_set: ExcelAPI: 1.7 diff --git a/samples/excel/50-chart/chart-point.yaml b/samples/excel/10-chart/chart-point.yaml similarity index 98% rename from samples/excel/50-chart/chart-point.yaml rename to samples/excel/10-chart/chart-point.yaml index 4a264eb5a..1bf2640ba 100644 --- a/samples/excel/50-chart/chart-point.yaml +++ b/samples/excel/10-chart/chart-point.yaml @@ -1,7 +1,7 @@ -order: 8 +order: 7 id: excel-chart-point -name: Chart point -description: Set chart point color. +name: Points +description: Sets the color of a point on the chart. host: EXCEL api_set: ExcelAPI: 1.7 diff --git a/samples/excel/50-chart/chart-series-markers.yaml b/samples/excel/10-chart/chart-series-markers.yaml similarity index 98% rename from samples/excel/50-chart/chart-series-markers.yaml rename to samples/excel/10-chart/chart-series-markers.yaml index d03a44f8a..e29482f0b 100644 --- a/samples/excel/50-chart/chart-series-markers.yaml +++ b/samples/excel/10-chart/chart-series-markers.yaml @@ -1,7 +1,7 @@ -order: 11 +order: 9 id: excel-chart-series-markers -name: Chart series markers -description: Set chart series marker properties +name: Series markers +description: Sets the chart series marker properties. host: EXCEL api_set: ExcelAPI: 1.7 diff --git a/samples/excel/50-chart/chart-series-plotorder.yaml b/samples/excel/10-chart/chart-series-plotorder.yaml similarity index 98% rename from samples/excel/50-chart/chart-series-plotorder.yaml rename to samples/excel/10-chart/chart-series-plotorder.yaml index 78b171992..b5dda452b 100644 --- a/samples/excel/50-chart/chart-series-plotorder.yaml +++ b/samples/excel/10-chart/chart-series-plotorder.yaml @@ -1,7 +1,7 @@ -order: 12 +order: 10 id: excel-chart-series-plotorder -name: Chart - series plot order -description: Order the plotting of series in a chart. +name: Series plot order +description: Orders the plotting of series in a chart. host: EXCEL api_set: ExcelAPI: 1.7 diff --git a/samples/excel/50-chart/chart-series.yaml b/samples/excel/10-chart/chart-series.yaml similarity index 98% rename from samples/excel/50-chart/chart-series.yaml rename to samples/excel/10-chart/chart-series.yaml index cc51f2e8a..af78ceda2 100644 --- a/samples/excel/50-chart/chart-series.yaml +++ b/samples/excel/10-chart/chart-series.yaml @@ -1,7 +1,7 @@ -order: 9 +order: 8 id: excel-chart-series -name: Chart series -description: 'Add, set, and delete a series in a chart.' +name: Series +description: 'Adds, sets, and deletes a series in a chart.' host: EXCEL api_set: ExcelAPI: 1.7 diff --git a/samples/excel/50-chart/chart-title-substring.yaml b/samples/excel/10-chart/chart-title-substring.yaml similarity index 97% rename from samples/excel/50-chart/chart-title-substring.yaml rename to samples/excel/10-chart/chart-title-substring.yaml index cb02dd659..29553b6f4 100644 --- a/samples/excel/50-chart/chart-title-substring.yaml +++ b/samples/excel/10-chart/chart-title-substring.yaml @@ -1,7 +1,7 @@ -order: 13 +order: 11 id: excel-chart-title-substring -name: Chart - Title substring -description: Get and set title substring for a chart. +name: Title substring +description: Changes the color for a substring in the chart's title. host: EXCEL api_set: ExcelApi: 1.7 diff --git a/samples/excel/50-chart/chart-trendlines.yaml b/samples/excel/10-chart/chart-trendlines.yaml similarity index 98% rename from samples/excel/50-chart/chart-trendlines.yaml rename to samples/excel/10-chart/chart-trendlines.yaml index 65192b88e..4d66d23f7 100644 --- a/samples/excel/50-chart/chart-trendlines.yaml +++ b/samples/excel/10-chart/chart-trendlines.yaml @@ -1,7 +1,7 @@ -order: 14 +order: 12 id: excel-chart-trendlines -name: Chart trendlines -description: 'Add, get, and format trendlines in a chart.' +name: Trendlines +description: 'Adds, gets, and formats trendlines in a chart.' host: EXCEL api_set: ExcelAPI: 1.7 diff --git a/samples/excel/50-chart/create-doughnut-chart.yaml b/samples/excel/10-chart/create-doughnut-chart.yaml similarity index 98% rename from samples/excel/50-chart/create-doughnut-chart.yaml rename to samples/excel/10-chart/create-doughnut-chart.yaml index 786b9a5db..ced98846a 100644 --- a/samples/excel/50-chart/create-doughnut-chart.yaml +++ b/samples/excel/10-chart/create-doughnut-chart.yaml @@ -1,7 +1,7 @@ -order: 2 +order: 4 id: excel-chart-create-doughnut-chart name: Doughnut chart -description: Create a doughnut chart and adjust the size +description: Creates a doughnut chart and adjusts its size. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/30-range/conditional-formatting-advanced.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml similarity index 98% rename from samples/excel/30-range/conditional-formatting-advanced.yaml rename to samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml index e93dc3d70..a62cd7635 100644 --- a/samples/excel/30-range/conditional-formatting-advanced.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml @@ -1,7 +1,7 @@ -order: 2 +order: 1 id: excel-range-conditional-formatting-advanced -name: Conditional Formatting for Ranges - Advanced -description: Work with more than one conditional format on the same range. +name: Advanced conditional formats +description: Applies more than one conditional format on the same range. host: EXCEL api_set: ExcelApi: 1.6 diff --git a/samples/excel/30-range/conditional-formatting-basic.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml similarity index 99% rename from samples/excel/30-range/conditional-formatting-basic.yaml rename to samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml index a2366ee7f..e781951d9 100644 --- a/samples/excel/30-range/conditional-formatting-basic.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -1,7 +1,7 @@ -order: 1 +order: 2 id: excel-range-conditional-formatting-basic -name: Conditional Formatting for Ranges - Basic -description: Apply common types of conditional formatting to ranges. +name: Basic conditional formatting +description: Applies common types of conditional formatting to ranges. host: EXCEL api_set: ExcelApi: 1.6 diff --git a/samples/excel/85-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 similarity index 97% rename from samples/excel/85-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml rename to samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml index 0ec57cba0..2a91670b4 100644 --- a/samples/excel/85-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,6 +1,7 @@ +order: 1 id: excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts -name: 'Create, set, get, and delete custom XML part' -description: 'Shows how to create, set, get, and delete a custom XML part.' +name: Using custom XML parts +description: 'Creates, sets, gets, and deletes a custom XML part.' author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/85-custom-xml-parts/test-xml-for-unique-namespace.yaml b/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml similarity index 97% rename from samples/excel/85-custom-xml-parts/test-xml-for-unique-namespace.yaml rename to samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml index 673f196bc..06f890c79 100644 --- a/samples/excel/85-custom-xml-parts/test-xml-for-unique-namespace.yaml +++ b/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml @@ -1,6 +1,7 @@ +order: 2 id: excel-custom-xml-parts-test-xml-for-unique-namespace -name: Test custom XML part for unique namespace -description: Shows how to test to see if there is only one XML part for a specified namespace. +name: Unique namespaces in custom XML +description: Tests to see if there is only one XML part for a specified namespace. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/35-worksheet/data-validation.yaml b/samples/excel/22-data-validation/data-validation.yaml similarity index 96% rename from samples/excel/35-worksheet/data-validation.yaml rename to samples/excel/22-data-validation/data-validation.yaml index ccf3fe790..c26f7add9 100644 --- a/samples/excel/35-worksheet/data-validation.yaml +++ b/samples/excel/22-data-validation/data-validation.yaml @@ -1,6 +1,7 @@ +order: 1 id: excel-data-validation -name: Data Validation -description: 'This snippet shows how to programmatically set a variety of data validation rules on ranges, how to prompt users to enter valid data, and how to popup a warning or informational message when invalid data is entered.' +name: Data validation +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/80-settings/create-get-change-delete-settings.yaml b/samples/excel/26-document/create-get-change-delete-settings.yaml similarity index 96% rename from samples/excel/80-settings/create-get-change-delete-settings.yaml rename to samples/excel/26-document/create-get-change-delete-settings.yaml index 822997a40..d29b318cc 100644 --- a/samples/excel/80-settings/create-get-change-delete-settings.yaml +++ b/samples/excel/26-document/create-get-change-delete-settings.yaml @@ -1,6 +1,7 @@ +order: 3 id: excel-settings-create-get-change-delete-settings -name: 'Create, get, change, and delete a setting' -description: 'Show how to create, get, change, and delete settings in the document.' +name: Settings +description: 'Creates, gets, changes, and deletes settings in the document.' author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/82-document/get-file-in-slices-async.yaml b/samples/excel/26-document/get-file-in-slices-async.yaml similarity index 98% rename from samples/excel/82-document/get-file-in-slices-async.yaml rename to samples/excel/26-document/get-file-in-slices-async.yaml index e7aa9b143..ec9d430e4 100644 --- a/samples/excel/82-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: Use slicing to get the byte array and base64-encoded string that represent the current document. +name: Get file using slicing +description: Uses slicing to get the byte array and base64-encoded string that represent the current document. host: EXCEL api_set: ExcelApi: 1.1 diff --git a/samples/excel/82-document/properties.yaml b/samples/excel/26-document/properties.yaml similarity index 99% rename from samples/excel/82-document/properties.yaml rename to samples/excel/26-document/properties.yaml index 1c625bb3f..40728effa 100644 --- a/samples/excel/82-document/properties.yaml +++ b/samples/excel/26-document/properties.yaml @@ -1,7 +1,7 @@ order: 2 id: excel-document-properties -name: Document properties -description: Set and get document properties. +name: Properties +description: Gets and sets document properties. host: EXCEL api_set: ExcelApi: 1.7 diff --git a/samples/excel/70-events/data-changed.yaml b/samples/excel/30-events/data-changed.yaml similarity index 97% rename from samples/excel/70-events/data-changed.yaml rename to samples/excel/30-events/data-changed.yaml index 74a0f394c..22d73a603 100644 --- a/samples/excel/70-events/data-changed.yaml +++ b/samples/excel/30-events/data-changed.yaml @@ -1,7 +1,7 @@ -order: 1 +order: 3 id: excel-events-data-changed -name: Handle the data changed event -description: This snippet shows how to register a handler for the data-changed event. +name: Data change event +description: Registers an event handler that runs when data is changed. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/70-events/events-chart-activated.yaml b/samples/excel/30-events/events-chart-activated.yaml similarity index 98% rename from samples/excel/70-events/events-chart-activated.yaml rename to samples/excel/30-events/events-chart-activated.yaml index ecbcd2709..afda43798 100644 --- a/samples/excel/70-events/events-chart-activated.yaml +++ b/samples/excel/30-events/events-chart-activated.yaml @@ -1,6 +1,7 @@ +order: 1 id: excel-events-chart-activated -name: Events - Chart Activate -description: Create handlers for the Chart.onActivated and Chart.onDeactivated events. +name: Chart events +description: Registers event handlers that run when the chart is activated or deactivated. host: EXCEL api_set: ExcelApi: 1.8 diff --git a/samples/excel/70-events/events-chartcollection-added-activated.yaml b/samples/excel/30-events/events-chartcollection-added-activated.yaml similarity index 97% rename from samples/excel/70-events/events-chartcollection-added-activated.yaml rename to samples/excel/30-events/events-chartcollection-added-activated.yaml index 1d0ca0bc0..9f08fb8a4 100644 --- a/samples/excel/70-events/events-chartcollection-added-activated.yaml +++ b/samples/excel/30-events/events-chartcollection-added-activated.yaml @@ -1,6 +1,7 @@ +order: 2 id: excel-events-chartcollection-added-activated -name: Events - ChartCollection -description: 'Shows how to handle the ChartCollection onActivated, onDeactivated, onAdded, and onDeleted events.' +name: Chart collection events +description: 'Registers event handlers that run when a chart collection is activated, deactivated, added, or deleted.' host: EXCEL api_set: ExcelApi: 1.8 diff --git a/samples/excel/70-events/events-disable-events.yaml b/samples/excel/30-events/events-disable-events.yaml similarity index 98% rename from samples/excel/70-events/events-disable-events.yaml rename to samples/excel/30-events/events-disable-events.yaml index 688530633..be6ab266f 100644 --- a/samples/excel/70-events/events-disable-events.yaml +++ b/samples/excel/30-events/events-disable-events.yaml @@ -1,6 +1,7 @@ +order: 4 id: excel-events-disable-events -name: Disable Events -description: Toggle event firing on and off for performance. +name: Enable and disable events +description: Toggles event firing on and off. host: EXCEL api_set: ExcelAPI: 1.8 diff --git a/samples/excel/70-events/events-table-changed.yaml b/samples/excel/30-events/events-table-changed.yaml similarity index 98% rename from samples/excel/70-events/events-table-changed.yaml rename to samples/excel/30-events/events-table-changed.yaml index 8ae7e07cf..38cf325dd 100644 --- a/samples/excel/70-events/events-table-changed.yaml +++ b/samples/excel/30-events/events-table-changed.yaml @@ -1,7 +1,7 @@ -order: 4 +order: 6 id: excel-events-table-changed -name: Events - Table changed -description: Add event handlers for table onChanged and onSelectionChanged events +name: Table events +description: Registers event handlers that run when a table is changed or selected. host: EXCEL api_set: ExcelApi: 1.7 diff --git a/samples/excel/70-events/events-tablecollection-changed.yaml b/samples/excel/30-events/events-tablecollection-changed.yaml similarity index 97% rename from samples/excel/70-events/events-tablecollection-changed.yaml rename to samples/excel/30-events/events-tablecollection-changed.yaml index 8958c0b6f..5342e1daf 100644 --- a/samples/excel/70-events/events-tablecollection-changed.yaml +++ b/samples/excel/30-events/events-tablecollection-changed.yaml @@ -1,7 +1,7 @@ -order: 5 +order: 7 id: excel-events-tablecollection-changed -name: Events - Table collection changed -description: Add event handlers for table collection onChanged event +name: Table collection events +description: Registers an event handler that runs when a table collection is changed. host: EXCEL api_set: ExcelApi: 1.7 diff --git a/samples/excel/70-events/events-worksheet-activated.yaml b/samples/excel/30-events/events-worksheet-activated.yaml similarity index 97% rename from samples/excel/70-events/events-worksheet-activated.yaml rename to samples/excel/30-events/events-worksheet-activated.yaml index 46b7d3cf0..5e3a51325 100644 --- a/samples/excel/70-events/events-worksheet-activated.yaml +++ b/samples/excel/30-events/events-worksheet-activated.yaml @@ -1,7 +1,7 @@ -order: 6 +order: 9 id: excel-events-worksheet-activated -name: Events - Worksheet activated -description: Add event handlers for worksheet onActivated and onDeactivated events +name: Worksheet activation events +description: Registers event handlers that run when a worksheet is activated or deactivated. host: EXCEL api_set: ExcelApi: 1.7 diff --git a/samples/excel/70-events/events-worksheet-calculated.yaml b/samples/excel/30-events/events-worksheet-calculated.yaml similarity index 97% rename from samples/excel/70-events/events-worksheet-calculated.yaml rename to samples/excel/30-events/events-worksheet-calculated.yaml index 97c391c63..d6d9f4f90 100644 --- a/samples/excel/70-events/events-worksheet-calculated.yaml +++ b/samples/excel/30-events/events-worksheet-calculated.yaml @@ -1,6 +1,7 @@ +order: 10 id: excel-events-worksheet-calculated -name: Events - Worksheet onCalculated -description: Add an event handler for the worksheet onCalculated event +name: Worksheet calculation event +description: Registers an event handler that runs when the worksheet has recalculated. host: EXCEL api_set: ExcelApi: 1.8 diff --git a/samples/excel/70-events/events-worksheet-changed.yaml b/samples/excel/30-events/events-worksheet-changed.yaml similarity index 97% rename from samples/excel/70-events/events-worksheet-changed.yaml rename to samples/excel/30-events/events-worksheet-changed.yaml index cd31a0b81..0aca0d583 100644 --- a/samples/excel/70-events/events-worksheet-changed.yaml +++ b/samples/excel/30-events/events-worksheet-changed.yaml @@ -1,7 +1,7 @@ -order: 7 +order: 11 id: excel-events-worksheet-changed -name: Events - Worksheet changed -description: Add event handlers for worksheet onChanged and onAdded events +name: Worksheet change and addition events +description: Registers event handlers that runs when a worksheet is added or changed. host: EXCEL api_set: ExcelApi: 1.7 diff --git a/samples/excel/70-events/events-worksheet-selectionchanged.yaml b/samples/excel/30-events/events-worksheet-selectionchanged.yaml similarity index 97% rename from samples/excel/70-events/events-worksheet-selectionchanged.yaml rename to samples/excel/30-events/events-worksheet-selectionchanged.yaml index 0b0de94c3..a76cc2320 100644 --- a/samples/excel/70-events/events-worksheet-selectionchanged.yaml +++ b/samples/excel/30-events/events-worksheet-selectionchanged.yaml @@ -1,7 +1,7 @@ -order: 8 +order: 13 id: excel-events-worksheet-selectionchanged -name: Events - Worksheet onSelectionChanged -description: Add an event handler for the worksheet onSelectionChanged event +name: Worksheet selection change event +description: Registers an event handler that runs when the selected worksheet changes. host: EXCEL api_set: ExcelApi: 1.7 diff --git a/samples/excel/70-events/events-worksheetcollection-calculated.yaml b/samples/excel/30-events/events-worksheetcollection-calculated.yaml similarity index 97% rename from samples/excel/70-events/events-worksheetcollection-calculated.yaml rename to samples/excel/30-events/events-worksheetcollection-calculated.yaml index 874274ebc..b22126084 100644 --- a/samples/excel/70-events/events-worksheetcollection-calculated.yaml +++ b/samples/excel/30-events/events-worksheetcollection-calculated.yaml @@ -1,6 +1,7 @@ +order: 12 id: excel-events-worksheetcollection-calculated -name: Events - WorksheetCollection onCalculated -description: Add an event handler for the WorksheetCollection onCalculated event +name: Worksheet collection calculation event +description: Registers an event handler that runs when the worksheet collection recalculates. host: EXCEL api_set: ExcelApi: 1.8 diff --git a/samples/excel/70-events/selection-changed.yaml b/samples/excel/30-events/selection-changed.yaml similarity index 97% rename from samples/excel/70-events/selection-changed.yaml rename to samples/excel/30-events/selection-changed.yaml index 79d9efd52..43315a9dc 100644 --- a/samples/excel/70-events/selection-changed.yaml +++ b/samples/excel/30-events/selection-changed.yaml @@ -1,7 +1,7 @@ -order: 2 +order: 5 id: excel-events-selection-changed -name: Selection Changed -description: Add and remove an event handler on the selection changed event +name: Selection event +description: Registers an event handler that runs when the selection changes in the workbook. host: EXCEL api_set: ExcelApi: 1.2 diff --git a/samples/excel/70-events/setting-changed.yaml b/samples/excel/30-events/setting-changed.yaml similarity index 96% rename from samples/excel/70-events/setting-changed.yaml rename to samples/excel/30-events/setting-changed.yaml index 5eb7777a9..145915dd9 100644 --- a/samples/excel/70-events/setting-changed.yaml +++ b/samples/excel/30-events/setting-changed.yaml @@ -1,7 +1,7 @@ -order: 3 +order: 8 id: excel-events-setting-changed -name: Handle the settings-changed event -description: This snippet shows how to register a handler for the SettingsChanged event. +name: Workbook events +description: Registers an event handler that runs when the workbook's settings change. author: OfficeDev host: EXCEL api_set: @@ -37,8 +37,7 @@ script: }); } - async function onChangedSetting(args: Excel.SettingsChangedEventArgs) - { + async function onChangedSetting(args: Excel.SettingsChangedEventArgs) { try { await Excel.run(async (context) => { const changedSetting = args.settings.getItem("NeedsReview"); diff --git a/samples/excel/30-range/copy-multiply-values.yaml b/samples/excel/30-range/copy-multiply-values.yaml deleted file mode 100644 index 416ac0d3d..000000000 --- a/samples/excel/30-range/copy-multiply-values.yaml +++ /dev/null @@ -1,179 +0,0 @@ -order: 3 -id: excel-range-copy-multiply-values -name: Copy and multiply values -description: Copy and multiply values in a range -author: OfficeDev -host: EXCEL -api_set: - ExcelApi: 1.1 -script: - content: |+ - $("#setup").click(setup); - - $("#copy-values").click(copyValues); - $("#multiply-values-for-loop").click(multiplyValuesForLoop); - $("#multiply-values-map").click(multiplyValuesMap); - - async function copyValues() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - const fromRange = sheet.getRange("B2:E5"); - fromRange.load("values"); - - await context.sync(); - - const toRange = sheet.getRange("B10:E13"); - toRange.values = fromRange.values; - - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - - async function multiplyValuesForLoop() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - const range = sheet.getRange("C3:C5"); - range.load("values"); - - await context.sync(); - - var newValues = range.values; - for (var i = 0; i < newValues.length; i++){ - for (var j = 0; j < newValues[i].length; j++){ - newValues[i][j] = newValues[i][j] * 10; - } - } - range.values = newValues; - - range.format.autofitColumns(); - - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - - async function multiplyValuesMap() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - const range = sheet.getRange("C3:C5"); - range.load("values"); - - await context.sync(); - - range.values = range.values.map( - (rowValues) => rowValues.map((cellValue) => cellValue * 10) - ); - - range.format.autofitColumns(); - - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - - async function setup() { - try { - await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); - - const data = [ - ["Product", "Qty", "Unit Price", "Total Price"], - ["Almonds", 2, 7.50, "=C3 * D3"], - ["Coffee", 1, 34.50, "=C4 * D4"], - ["Chocolate", 5, 9.56, "=C5 * D5"] - ]; - - const range = sheet.getRange("B2:E5"); - range.values = data; - range.format.autofitColumns(); - - const header = range.getRow(0); - header.format.fill.color = "#4472C4"; - header.format.font.color = "white"; - - sheet.activate(); - - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - - language: typescript -template: - content: | -

-

This sample shows how to copy, move and multiply the values in a range using the Excel API.

-
- -
-

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 - - @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/samples/excel/30-range/create-and-use-range-intersection.yaml b/samples/excel/30-range/create-and-use-range-intersection.yaml deleted file mode 100644 index 53172059a..000000000 --- a/samples/excel/30-range/create-and-use-range-intersection.yaml +++ /dev/null @@ -1,162 +0,0 @@ -order: 4 -id: excel-range-create-and-use-range-intersection -name: Create and Use an Intersection of Ranges -description: Create a an intersection of two ranges and make a chart of it. -author: OfficeDev -host: EXCEL -api_set: - ExcelApi: 1.4 -script: - content: | - $("#setup").click(() => tryCatch(setup)); - $("#create-sales-contest-charts").click(() => tryCatch(createContestCharts)); - - async function createContestCharts() { - 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(); - }); - } - - function createContinentChart(sheet: Excel.Worksheet, continent: string, contestRange: Excel.Range, startPosition: string, endPosition: string) { - - let chart = sheet.charts.add("ColumnClustered", contestRange, "Columns"); - chart.setPosition(startPosition, endPosition); - chart.title.text = `${continent} Current Quarter Sales Contest`; - chart.legend.position = "Right"; - chart.legend.format.fill.setSolidColor("white"); - chart.dataLabels.format.font.size = 15; - chart.dataLabels.format.font.color = "black"; - } - - function reportMissingData(continent: string) { - // To test this method, - // (1) Press "Create Table" - // (2) Delete data from the rows for one continent, - // INCLUDING THE "Sales Team" COLUMN VALUES. - // (3) Press "Create sales contest charts". - OfficeHelpers.UI.notify(`Missing ${continent} Data`, `There is no data for the ${continent} teams.`); - } - - async function setup() { - await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - let salesTable = sheet.tables.add('A1:E1', true); - salesTable.name = "SalesTable"; - salesTable.getHeaderRowRange().values = [["Sales Team", "Qtr1", "Qtr2", "Qtr3", "Qtr4"]]; - - salesTable.rows.add(null, [ - ["Asian Team 1", 500, 700, 654, null ], - ["Asian Team 2", 400, 323, 276, null ], - ["Asian Team 3", 1200, 876, 845, null ], - ["European Team 1", 600, 500, 854, null ], - ["European Team 2", 5001, 2232, 4763, null ], - ["European Team 3", 130, 776, 104, null ] - ]); - - salesTable.getRange().format.autofitColumns(); - salesTable.getRange().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) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - language: typescript -template: - content: |- -
-

This sample shows how to use the range.getIntersectionOrNullObject method to work with an intersection 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 - - @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/samples/excel/30-range/range-operations.yaml b/samples/excel/30-range/range-operations.yaml deleted file mode 100644 index e102535cd..000000000 --- a/samples/excel/30-range/range-operations.yaml +++ /dev/null @@ -1,179 +0,0 @@ -order: 7 -id: excel-range-range-operations -name: Range operations -description: 'Bounding rect, intersection, offset and resized range' -author: OfficeDev -host: EXCEL -api_set: - ExcelApi: 1.1 -script: - content: | - $("#setup").click(setup); - $("#bounding-rect").click(boundingRect); - $("#intersection").click(intersection); - $("#offset-range").click(offsetRange); - $("#resized-range").click(resizedRange); - - async function boundingRect() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - const rangeA = sheet.getRange("B2:D5"); - const rangeB = sheet.getRange("D4:F8"); - - const boundingRect = rangeA.getBoundingRect(rangeB); - boundingRect.format.fill.color = "Blue"; - boundingRect.getCell(0, 0).values = [["Bounding Rect"]]; - - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - - async function intersection() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - const rangeA = sheet.getRange("B2:D5"); - const rangeB = sheet.getRange("D4:F8"); - - const intersection = rangeA.getIntersection(rangeB); - intersection.format.fill.color = "Blue"; - intersection.getCell(0, 0).values = [["Intersection"]]; - - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - - async function offsetRange() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - const rangeA = sheet.getRange("B2:D5"); - - const offsetRange = rangeA.getOffsetRange(6, 3); - offsetRange.format.fill.color = "Blue"; - offsetRange.getCell(0, 0).values = [["OffsetRange(6,3)"]]; - - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - - async function resizedRange() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - const rangeB = sheet.getRange("D4:F8"); - - const resizedRange = rangeB.getResizedRange(2, -1); - resizedRange.format.fill.color = "Blue"; - resizedRange.getCell(0, 0).values = [["ResizedRange(2,-1)"]]; - - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - - async function setup() { - try { - await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); - - const rangeA = sheet.getRange("B2:D5"); - rangeA.format.fill.color = "green"; - rangeA.getCell(0, 0).values = [["Range A"]]; - - const rangeB = sheet.getRange("D4:F8"); - rangeB.format.fill.color = "yellow"; - rangeB.getCell(0, 0).values = [["Range B"]]; - - sheet.activate(); - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - language: typescript -template: - content: | -
-

This sample shows how to do various operations on ranges, for example, getting the bounding rect of two ranges, using the Excel JavaScript API.

-
- -
-

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 - - @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/samples/excel/45-named-item/create-and-remove-named-item.yaml b/samples/excel/34-named-item/create-and-remove-named-item.yaml similarity index 98% rename from samples/excel/45-named-item/create-and-remove-named-item.yaml rename to samples/excel/34-named-item/create-and-remove-named-item.yaml index 01ccd42a8..9b3149dc6 100644 --- a/samples/excel/45-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: 2 +order: 1 id: excel-named-item-create-and-remove-named-item -name: Create and remove named items -description: Create and remove named items for a formula +name: Create and remove +description: Creates and removes named items for a formula. host: EXCEL api_set: ExcelApi: 1.4 @@ -14,13 +14,9 @@ script: async function addName() { try { await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - sheet.names.add("TotalAmount", "=SUM(ExpensesTable[AMOUNT])"); - sheet.getRange("D11").values = [["=TotalAmount"]]; - await context.sync(); }); } diff --git a/samples/excel/45-named-item/create-and-use-named-item-for-range.yaml b/samples/excel/34-named-item/create-and-use-named-item-for-range.yaml similarity index 98% rename from samples/excel/45-named-item/create-and-use-named-item-for-range.yaml rename to samples/excel/34-named-item/create-and-use-named-item-for-range.yaml index d55797f4a..592df3ab2 100644 --- a/samples/excel/45-named-item/create-and-use-named-item-for-range.yaml +++ b/samples/excel/34-named-item/create-and-use-named-item-for-range.yaml @@ -1,7 +1,7 @@ order: 3 id: excel-create-and-use-named-item-for-range -name: Create and use named range item -description: Create and use named range item +name: Use named range item +description: Creates and uses a named range item. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/45-named-item/list-named-items.yaml b/samples/excel/34-named-item/list-named-items.yaml similarity index 95% rename from samples/excel/45-named-item/list-named-items.yaml rename to samples/excel/34-named-item/list-named-items.yaml index 1d9009d88..4a08c4864 100644 --- a/samples/excel/45-named-item/list-named-items.yaml +++ b/samples/excel/34-named-item/list-named-items.yaml @@ -1,7 +1,7 @@ -order: 4 +order: 2 id: excel-named-item-list-named-items -name: List all named items in a workbook -description: List all named items in a workbook +name: List all +description: Lists all the named items in a workbook. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/45-named-item/update-named-item.yaml b/samples/excel/34-named-item/update-named-item.yaml similarity index 98% rename from samples/excel/45-named-item/update-named-item.yaml rename to samples/excel/34-named-item/update-named-item.yaml index 20f909c40..b3a9fd3a3 100644 --- a/samples/excel/45-named-item/update-named-item.yaml +++ b/samples/excel/34-named-item/update-named-item.yaml @@ -1,7 +1,7 @@ -order: 5 +order: 4 id: excel-update-named-item -name: Update a named item -description: Create and then update a named item +name: Update +description: Creates and then updates a named item. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/55-pivottable/pivottable-calculations.yaml b/samples/excel/38-pivottable/pivottable-calculations.yaml similarity index 99% rename from samples/excel/55-pivottable/pivottable-calculations.yaml rename to samples/excel/38-pivottable/pivottable-calculations.yaml index 143ce1022..b5f6367b6 100644 --- a/samples/excel/55-pivottable/pivottable-calculations.yaml +++ b/samples/excel/38-pivottable/pivottable-calculations.yaml @@ -1,6 +1,7 @@ +order: 1 id: excel-pivottable-calculations -name: PivotTable Calculations -description: Change the calculations the PivotTable performs. +name: Calculations +description: Changes the calculations the PivotTable performs. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/55-pivottable/pivottable-create-and-modify.yaml b/samples/excel/38-pivottable/pivottable-create-and-modify.yaml similarity index 99% rename from samples/excel/55-pivottable/pivottable-create-and-modify.yaml rename to samples/excel/38-pivottable/pivottable-create-and-modify.yaml index 2c7a27685..b6405bf18 100644 --- a/samples/excel/55-pivottable/pivottable-create-and-modify.yaml +++ b/samples/excel/38-pivottable/pivottable-create-and-modify.yaml @@ -1,6 +1,7 @@ +order: 2 id: excel-pivottable-create-and-modify -name: Create and modify PivotTable -description: Create and modify a PivotTable. +name: Create and modify +description: Creates and modifies a PivotTable. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/55-pivottable/pivottable-filters-and-summaries.yaml b/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml similarity index 98% rename from samples/excel/55-pivottable/pivottable-filters-and-summaries.yaml rename to samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml index 94e3ca1b3..b4097dfbd 100644 --- a/samples/excel/55-pivottable/pivottable-filters-and-summaries.yaml +++ b/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml @@ -1,6 +1,7 @@ +order: 3 id: excel-pivottable-filters-and-summaries -name: PivotTable filters and summaries -description: Filter PivotTable data and show different summarizations. +name: Filters and summaries +description: Filters PivotTable data and shows different summarizations. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/55-pivottable/refresh-pivot-table.yaml b/samples/excel/38-pivottable/refresh-pivot-table.yaml similarity index 98% rename from samples/excel/55-pivottable/refresh-pivot-table.yaml rename to samples/excel/38-pivottable/refresh-pivot-table.yaml index 16a7a3ffd..728c8d691 100644 --- a/samples/excel/55-pivottable/refresh-pivot-table.yaml +++ b/samples/excel/38-pivottable/refresh-pivot-table.yaml @@ -1,6 +1,7 @@ +order: 4 id: excel-pivottable-refresh-pivot-table -name: Refresh PivotTable -description: Refresh PivotTable +name: Refresh +description: Refreshes a PivotTable. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/30-range/formatting.yaml b/samples/excel/42-range/formatting.yaml similarity index 99% rename from samples/excel/30-range/formatting.yaml rename to samples/excel/42-range/formatting.yaml index 6239e7eb1..d4fc92b8f 100644 --- a/samples/excel/30-range/formatting.yaml +++ b/samples/excel/42-range/formatting.yaml @@ -1,7 +1,7 @@ -order: 5 +order: 1 id: excel-range-formatting name: Formatting -description: Format a range +description: Formats a range. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/30-range/insert-delete-clear-range.yaml b/samples/excel/42-range/insert-delete-clear-range.yaml similarity index 97% rename from samples/excel/30-range/insert-delete-clear-range.yaml rename to samples/excel/42-range/insert-delete-clear-range.yaml index c062283e8..4bd85af23 100644 --- a/samples/excel/30-range/insert-delete-clear-range.yaml +++ b/samples/excel/42-range/insert-delete-clear-range.yaml @@ -1,7 +1,7 @@ -order: 6 -id: excel-range-insert-delete-clear-range -name: 'Insert, delete, clear range' -description: 'Insert, delete and clear a range' +order: 3 +id: excel-range-insert-delete-and-clear-range +name: 'Insert, delete, and clear' +description: 'Inserts, deletes, and clears a range.' author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/30-range/range-hyperlink.yaml b/samples/excel/42-range/range-hyperlink.yaml similarity index 99% rename from samples/excel/30-range/range-hyperlink.yaml rename to samples/excel/42-range/range-hyperlink.yaml index 363f74702..b62895783 100644 --- a/samples/excel/30-range/range-hyperlink.yaml +++ b/samples/excel/42-range/range-hyperlink.yaml @@ -1,7 +1,7 @@ -order: 12 +order: 2 id: excel-range-hyperlink -name: Range hyperlink -description: 'Create, update, and clear a hyperlink for a range.' +name: Hyperlinks +description: 'Creates, updates, and clears hyperlinks in a range.' author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/42-range/range-relationships.yaml b/samples/excel/42-range/range-relationships.yaml new file mode 100644 index 000000000..4706e61f7 --- /dev/null +++ b/samples/excel/42-range/range-relationships.yaml @@ -0,0 +1,268 @@ +order: 4 +id: excel-range-range-relationships +name: Range relationships +description: 'Shows relationships between ranges, such as bounding rectangles and intersections.' +author: OfficeDev +host: EXCEL +api_set: + ExcelApi: 1.1 +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)); + + async function boundingRect() { + await Excel.run(async context => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + const rangeA = sheet.getRange("H2:J5"); + const rangeB = sheet.getRange("J4:L8"); + + const boundingRect = rangeA.getBoundingRect(rangeB); + boundingRect.format.fill.color = "Blue"; + boundingRect.getCell(0, 0).values = [["Bounding Rect"]]; + + await context.sync(); + }); + } + + async function intersection() { + await Excel.run(async context => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + const rangeA = sheet.getRange("H2:J5"); + const rangeB = sheet.getRange("J4:L8"); + + const intersection = rangeA.getIntersection(rangeB); + intersection.format.fill.color = "Blue"; + intersection.getCell(0, 0).values = [["Intersection"]]; + + await context.sync(); + }); + } + + async function offsetRange() { + await Excel.run(async context => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + const rangeA = sheet.getRange("H2:J5"); + + const offsetRange = rangeA.getOffsetRange(6, 3); + offsetRange.format.fill.color = "Blue"; + offsetRange.getCell(0, 0).values = [["OffsetRange(6,3)"]]; + + await context.sync(); + }); + } + + async function resizedRange() { + await Excel.run(async context => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + const rangeB = sheet.getRange("J4:L8"); + + const resizedRange = rangeB.getResizedRange(2, -1); + resizedRange.format.fill.color = "Blue"; + resizedRange.getCell(0, 0).values = [["ResizedRange(2,-1)"]]; + + await context.sync(); + }); + } + + async function createContestCharts() { + 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(); + }); + } + + function createContinentChart( + sheet: Excel.Worksheet, + continent: string, + contestRange: Excel.Range, + startPosition: string, + endPosition: string + ) { + let chart = sheet.charts.add("ColumnClustered", contestRange, "Columns"); + chart.setPosition(startPosition, endPosition); + chart.title.text = `${continent} Current Quarter Sales Contest`; + chart.legend.position = "Right"; + chart.legend.format.fill.setSolidColor("white"); + chart.dataLabels.format.font.size = 15; + chart.dataLabels.format.font.color = "black"; + } + + function reportMissingData(continent: string) { + // To test this method, + // (1) Press "Create Table" + // (2) Delete data from the rows for one continent, + // INCLUDING THE "Sales Team" COLUMN VALUES. + // (3) Press "Create sales contest charts". + OfficeHelpers.UI.notify( + `Missing ${continent} Data`, + `There is no data for the ${continent} teams.` + ); + } + + async function setup() { + await Excel.run(async context => { + const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet( + context.workbook, + "Sample" + ); + + const rangeA = sheet.getRange("H2:J5"); + rangeA.format.fill.color = "green"; + rangeA.getCell(0, 0).values = [["Range A"]]; + + const rangeB = sheet.getRange("J4:L8"); + rangeB.format.fill.color = "yellow"; + rangeB.getCell(0, 0).values = [["Range B"]]; + + let salesTable = sheet.tables.add("A1:E1", true); + salesTable.name = "SalesTable"; + salesTable.getHeaderRowRange().values = [ + ["Sales Team", "Qtr1", "Qtr2", "Qtr3", "Qtr4"] + ]; + + salesTable.rows.add(null, [ + ["Asian Team 1", 500, 700, 654, null], + ["Asian Team 2", 400, 323, 276, null], + ["Asian Team 3", 1200, 876, 845, null], + ["European Team 1", 600, 500, 854, null], + ["European Team 2", 5001, 2232, 4763, null], + ["European Team 3", 130, 776, 104, null] + ]); + + salesTable.getRange().format.autofitColumns(); + salesTable.getRange().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) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |- +
+

This sample shows how to do various operations on ranges, for example, getting the bounding rect of two ranges, using + the Excel JavaScript API.

+
+ +
+

Set up

+ +
+ +
+

Try it out

+

+

+

+

+

Display charts based on the intersection of the current quarter and a continent.

+ +
+ 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 + + @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/samples/excel/30-range/range-text-orientation.yaml b/samples/excel/42-range/range-text-orientation.yaml similarity index 97% rename from samples/excel/30-range/range-text-orientation.yaml rename to samples/excel/42-range/range-text-orientation.yaml index 0d36429ea..321e1c0a4 100644 --- a/samples/excel/30-range/range-text-orientation.yaml +++ b/samples/excel/42-range/range-text-orientation.yaml @@ -1,7 +1,7 @@ -order: 13 +order: 7 id: excel-range-text-orientation -name: Range text orientation -description: Set and get the text orientation within a range +name: Text orientation +description: Gets and sets the text orientation within a range. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/30-range/selected-range.yaml b/samples/excel/42-range/selected-range.yaml similarity index 97% rename from samples/excel/30-range/selected-range.yaml rename to samples/excel/42-range/selected-range.yaml index 983c60e6d..4f7ec528c 100644 --- a/samples/excel/30-range/selected-range.yaml +++ b/samples/excel/42-range/selected-range.yaml @@ -1,7 +1,7 @@ -order: 8 +order: 5 id: excel-range-selected-range name: Selected range -description: Get and set the currently selected range +description: Gets and sets the currently selected range. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/30-range/set-get-values.yaml b/samples/excel/42-range/set-get-values.yaml similarity index 98% rename from samples/excel/30-range/set-get-values.yaml rename to samples/excel/42-range/set-get-values.yaml index 3eec082c2..d8dbe5841 100644 --- a/samples/excel/30-range/set-get-values.yaml +++ b/samples/excel/42-range/set-get-values.yaml @@ -1,7 +1,7 @@ -order: 9 -id: excel-range-set-get-values -name: Set and get values -description: Set and get values and formulas for a range +order: 8 +id: excel-range-values-and-formulas +name: Values and formulas +description: Gets and sets values and formulas for a range. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/30-range/test-for-used-range.yaml b/samples/excel/42-range/test-for-used-range.yaml similarity index 98% rename from samples/excel/30-range/test-for-used-range.yaml rename to samples/excel/42-range/test-for-used-range.yaml index 511eff887..354c7b671 100644 --- a/samples/excel/30-range/test-for-used-range.yaml +++ b/samples/excel/42-range/test-for-used-range.yaml @@ -1,7 +1,7 @@ -order: 10 +order: 6 id: excel-range-test-for-used-range name: Test for used range -description: Create a chart from a table only if there's data in the table. +description: Creates a chart from a table only if there's data in the table. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/45-named-item/create-named-item.yaml b/samples/excel/45-named-item/create-named-item.yaml deleted file mode 100644 index c008c6622..000000000 --- a/samples/excel/45-named-item/create-named-item.yaml +++ /dev/null @@ -1,149 +0,0 @@ -order: 1 -id: excel-named-item-create-named-item -name: Create a named item -description: Create a named item for a formula -author: OfficeDev -host: EXCEL -api_set: - ExcelApi: 1.4 -script: - content: | - $("#add-name").click(addName); - - async function addName() { - try { - await Excel.run(async (context) => { - - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - - const sheet = context.workbook.worksheets.getItem("Sample"); - - let expensesTable = sheet.tables.add("A1:D1", true); - expensesTable.name = "ExpensesTable"; - - expensesTable.getHeaderRowRange().values = [["DATE", "MERCHANT", "CATEGORY", "AMOUNT"]]; - - let newData = transactions.map(item => - [item.DATE, item.MERCHANT, item.CATEGORY, item.AMOUNT]); - - expensesTable.rows.add(null, newData); - - sheet.names.add("TotalAmount", "=SUM(ExpensesTable[AMOUNT])"); - - sheet.getRange("D11").values = [["=TotalAmount"]]; - - if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } - - sheet.activate(); - - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - - const transactions = [ - { - "DATE": "1/1/2017", - "MERCHANT": "The Phone Company", - "CATEGORY": "Communications", - "AMOUNT": "$120" - }, - { - "DATE": "1/1/2017", - "MERCHANT": "SouthRidge Video", - "CATEGORY": "Entertainment", - "AMOUNT": "$40" - }, - { - "DATE": "1/1/2017", - "MERCHANT": "Coho Winery", - "CATEGORY": "Restaurant", - "AMOUNT": "$47" - }, - { - "DATE": "1/2/2017", - "MERCHANT": "Contoso, Ltd", - "CATEGORY": "Shopping", - "AMOUNT": "$56" - }, - { - "DATE": "1/2/2017", - "MERCHANT": "Contoso, Ltd", - "CATEGORY": "Shopping", - "AMOUNT": "$110" - }, - { - "DATE": "1/2/2017", - "MERCHANT": "Liberty Bakery & Cafe", - "CATEGORY": "Groceries", - "AMOUNT": "$27" - }, - { - "DATE": "1/2/2017", - "MERCHANT": "Liberty Bakery & Cafe", - "CATEGORY": "Groceries", - "AMOUNT": "$38" - }, - { - "DATE": "1/2/2017", - "MERCHANT": "Northwind Electric Cars", - "CATEGORY": "Transportation", - "AMOUNT": "$42" - }, - { - "DATE": "1/2/2017", - "MERCHANT": "Best For You Organics Company", - "CATEGORY": "Groceries", - "AMOUNT": "$27" - } - ]; - language: typescript -template: - content: |+ -
-

This sample shows how to create a named item using the Excel JavaScript API.

-
- -
-

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 - - @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/samples/excel/40-table/add-rows-and-columns-to-a-table.yaml b/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml similarity index 99% rename from samples/excel/40-table/add-rows-and-columns-to-a-table.yaml rename to samples/excel/46-table/add-rows-and-columns-to-a-table.yaml index 215cdd55f..56d874b00 100644 --- a/samples/excel/40-table/add-rows-and-columns-to-a-table.yaml +++ b/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml @@ -1,6 +1,7 @@ +order: 1 id: excel-table-add-rows-and-columns-to-a-table name: Add rows and columns -description: Add rows and columns to a table +description: Adds rows and columns to a table. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/40-table/convert-range-to-table.yaml b/samples/excel/46-table/convert-range-to-table.yaml similarity index 98% rename from samples/excel/40-table/convert-range-to-table.yaml rename to samples/excel/46-table/convert-range-to-table.yaml index ad49fbcd1..d516f50c4 100644 --- a/samples/excel/40-table/convert-range-to-table.yaml +++ b/samples/excel/46-table/convert-range-to-table.yaml @@ -1,6 +1,7 @@ +order: 2 id: excel-table-convert-range-to-table -name: Convert a range to a table -description: Convert a range to a table +name: Convert a range +description: Converts a range to a table. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/40-table/create-table.yaml b/samples/excel/46-table/create-table.yaml similarity index 98% rename from samples/excel/40-table/create-table.yaml rename to samples/excel/46-table/create-table.yaml index 33e274281..102ed99c6 100644 --- a/samples/excel/40-table/create-table.yaml +++ b/samples/excel/46-table/create-table.yaml @@ -1,6 +1,7 @@ +order: 3 id: excel-table-create-table name: Create a table -description: Creates a table with four columns and seven rows. +description: Creates a table. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/40-table/filter-data.yaml b/samples/excel/46-table/filter-data.yaml similarity index 99% rename from samples/excel/40-table/filter-data.yaml rename to samples/excel/46-table/filter-data.yaml index 96d6383dc..c5329c44c 100644 --- a/samples/excel/40-table/filter-data.yaml +++ b/samples/excel/46-table/filter-data.yaml @@ -1,6 +1,7 @@ +order: 4 id: excel-table-filter-data name: Filter data -description: Filter data in a table +description: Filters table data. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/40-table/format-table.yaml b/samples/excel/46-table/formatting.yaml similarity index 98% rename from samples/excel/40-table/format-table.yaml rename to samples/excel/46-table/formatting.yaml index a32a22b2b..a84febeb6 100644 --- a/samples/excel/40-table/format-table.yaml +++ b/samples/excel/46-table/formatting.yaml @@ -1,6 +1,7 @@ -id: excel-table-format-table -name: Format table -description: Format a table +order: 5 +id: excel-table-formatting +name: Formatting +description: Formats a table. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/40-table/get-data-from-table.yaml b/samples/excel/46-table/get-data-from-table.yaml similarity index 98% rename from samples/excel/40-table/get-data-from-table.yaml rename to samples/excel/46-table/get-data-from-table.yaml index 4c211f7cc..6215bf9ad 100644 --- a/samples/excel/40-table/get-data-from-table.yaml +++ b/samples/excel/46-table/get-data-from-table.yaml @@ -1,6 +1,7 @@ +order: 6 id: excel-table-get-data-from-table -name: Get data from a table -description: Get data from a table +name: Get data +description: Gets data from a table. author: OfficeDev host: EXCEL api_set: @@ -13,17 +14,12 @@ script: async function getData() { try { await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const expensesTable = sheet.tables.getItem("ExpensesTable"); const headerRange = expensesTable.getHeaderRowRange().load("values"); - const bodyRange = expensesTable.getDataBodyRange().load("values"); - const columnRange = expensesTable.columns.getItem("MERCHANT").getDataBodyRange().load("values"); - const rowRange= expensesTable.rows.getItemAt(1).load("values"); await sheet.context.sync(); @@ -34,14 +30,11 @@ script: const secondRowValues = rowRange.values; sheet.getRange("A18:A18").values = [["Results"]]; - sheet.getRange("A20:D20").values = headerValues; - sheet.getRange("A21:D27").values = bodyValues; - sheet.getRange("B30:B36").values = merchantColumnValues; - sheet.getRange("A17:D17").values = secondRowValues; + await context.sync(); }); } diff --git a/samples/excel/40-table/get-visible-range-of-a-filtered-table.yaml b/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml similarity index 98% rename from samples/excel/40-table/get-visible-range-of-a-filtered-table.yaml rename to samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml index 8bc2053b7..3db0ef520 100644 --- a/samples/excel/40-table/get-visible-range-of-a-filtered-table.yaml +++ b/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml @@ -1,6 +1,7 @@ +order: 7 id: excel-table-get-visible-range-of-a-filtered-table -name: Get visible range from a filtered table -description: Get visible range from a filtered table +name: Get visible range +description: Gets the visible range from a filtered table. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/40-table/import-json-data.yaml b/samples/excel/46-table/import-json-data.yaml similarity index 98% rename from samples/excel/40-table/import-json-data.yaml rename to samples/excel/46-table/import-json-data.yaml index 7da1d2ba8..ab940045f 100644 --- a/samples/excel/40-table/import-json-data.yaml +++ b/samples/excel/46-table/import-json-data.yaml @@ -1,6 +1,7 @@ +order: 8 id: excel-table-import-json-data name: Import JSON data -description: Import JSON data into a table +description: Imports JSON data into a table. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/40-table/sort-data.yaml b/samples/excel/46-table/sort-data.yaml similarity index 98% rename from samples/excel/40-table/sort-data.yaml rename to samples/excel/46-table/sort-data.yaml index fbdefbe3e..0b19630ed 100644 --- a/samples/excel/40-table/sort-data.yaml +++ b/samples/excel/46-table/sort-data.yaml @@ -1,6 +1,7 @@ +order: 9 id: excel-table-sort-data -name: Sort table data -description: Sort table data +name: Sort data +description: Sorts the data within a table. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/40-table/style.yaml b/samples/excel/46-table/style.yaml similarity index 98% rename from samples/excel/40-table/style.yaml rename to samples/excel/46-table/style.yaml index 249c51ab2..93a913873 100644 --- a/samples/excel/40-table/style.yaml +++ b/samples/excel/46-table/style.yaml @@ -1,7 +1,7 @@ -order: 15 -id: excel-style +order: 10 +id: excel-table-style name: Style -description: 'Add, apply, get and delete styles.' +description: 'Creates a custom style, applies a custom and built-in styles to a table, gets style properties, and deletes the custom style.' author: siewmoi host: EXCEL api_set: diff --git a/samples/excel/37-workbook/protect-data-in-worksheet-and-workbook-structure.yaml b/samples/excel/50-workbook/data-protection.yaml similarity index 98% rename from samples/excel/37-workbook/protect-data-in-worksheet-and-workbook-structure.yaml rename to samples/excel/50-workbook/data-protection.yaml index 70fc0c688..a60683153 100644 --- a/samples/excel/37-workbook/protect-data-in-worksheet-and-workbook-structure.yaml +++ b/samples/excel/50-workbook/data-protection.yaml @@ -1,7 +1,7 @@ order: 2 -id: excel-protect-data-in-worksheet-and-workbook-structure -name: Protect data in worksheet and the workbook structure -description: Shows how to protect data in a worksheet and the workbook structure. +id: excel-workbook-data-protection +name: Data protection +description: Protects data in a worksheet and the workbook structure. host: EXCEL api_set: ExcelApi: 1.7 diff --git a/samples/excel/37-workbook/workbook-get-active-cell.yaml b/samples/excel/50-workbook/workbook-get-active-cell.yaml similarity index 98% rename from samples/excel/37-workbook/workbook-get-active-cell.yaml rename to samples/excel/50-workbook/workbook-get-active-cell.yaml index a4e0394e7..c32110f93 100644 --- a/samples/excel/37-workbook/workbook-get-active-cell.yaml +++ b/samples/excel/50-workbook/workbook-get-active-cell.yaml @@ -1,6 +1,6 @@ order: 1 id: excel-workbook-get-active-cell -name: Get active cell +name: Active cell description: Gets the active cell of the entire workbook. host: EXCEL api_set: diff --git a/samples/excel/35-worksheet/activeworksheet.yaml b/samples/excel/54-worksheet/active-worksheet.yaml similarity index 98% rename from samples/excel/35-worksheet/activeworksheet.yaml rename to samples/excel/54-worksheet/active-worksheet.yaml index c64329d8e..18c101834 100644 --- a/samples/excel/35-worksheet/activeworksheet.yaml +++ b/samples/excel/54-worksheet/active-worksheet.yaml @@ -1,7 +1,7 @@ order: 1 -id: excel-worksheet-activeworksheet +id: excel-worksheet-active-worksheet name: Active worksheet -description: Get and set the active worksheet +description: Gets and sets the active worksheet. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/35-worksheet/add-delete-rename-move-worksheet.yaml b/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml similarity index 97% rename from samples/excel/35-worksheet/add-delete-rename-move-worksheet.yaml rename to samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml index 6021a3546..52455e737 100644 --- a/samples/excel/35-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: 'Add, delete, rename and change the position of 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/35-worksheet/worksheet-gridlines.yaml b/samples/excel/54-worksheet/gridlines.yaml similarity index 96% rename from samples/excel/35-worksheet/worksheet-gridlines.yaml rename to samples/excel/54-worksheet/gridlines.yaml index cd9189454..ebe3c665e 100644 --- a/samples/excel/35-worksheet/worksheet-gridlines.yaml +++ b/samples/excel/54-worksheet/gridlines.yaml @@ -1,6 +1,7 @@ -id: excel-gridlines -name: Worksheet gridlines -description: Hide and show gridlines in a worksheet +order: 6 +id: excel-worksheet-gridlines +name: Gridlines +description: Hides and shows a worksheet's gridlines. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/35-worksheet/list-worksheets.yaml b/samples/excel/54-worksheet/list-worksheets.yaml similarity index 97% rename from samples/excel/35-worksheet/list-worksheets.yaml rename to samples/excel/54-worksheet/list-worksheets.yaml index 35852bdcb..454be585b 100644 --- a/samples/excel/35-worksheet/list-worksheets.yaml +++ b/samples/excel/54-worksheet/list-worksheets.yaml @@ -1,7 +1,7 @@ -order: 4 +order: 7 id: excel-worksheet-list-worksheets name: List worksheets -description: List the worksheets in the workbook +description: Lists the worksheets in the workbook. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/35-worksheet/reference-worksheets-by-relative-position.yaml b/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml similarity index 98% rename from samples/excel/35-worksheet/reference-worksheets-by-relative-position.yaml rename to samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml index c2333800c..a07c0d443 100644 --- a/samples/excel/35-worksheet/reference-worksheets-by-relative-position.yaml +++ b/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml @@ -1,7 +1,7 @@ -order: 5 +order: 8 id: excel-worksheet-reference-worksheets-by-relative-position name: Reference worksheets by relative position -description: 'Shows how to use the worksheet shortcut methods, such as getFirst, getLast, getPrevious, and getNext.' +description: Gets a worksheet by using its relative position within the workbook. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/35-worksheet/tab-color.yaml b/samples/excel/54-worksheet/tab-color.yaml similarity index 98% rename from samples/excel/35-worksheet/tab-color.yaml rename to samples/excel/54-worksheet/tab-color.yaml index fec3fde07..e0d209676 100644 --- a/samples/excel/35-worksheet/tab-color.yaml +++ b/samples/excel/54-worksheet/tab-color.yaml @@ -1,7 +1,7 @@ order: 9 id: excel-worksheet-tab-color -name: Worksheet tab color -description: Set and get the tab color of a worksheet +name: Tab color +description: Gets and sets the tab color of a worksheet. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/35-worksheet/worksheet-copy.yaml b/samples/excel/54-worksheet/worksheet-copy.yaml similarity index 99% rename from samples/excel/35-worksheet/worksheet-copy.yaml rename to samples/excel/54-worksheet/worksheet-copy.yaml index 9f68212fd..0d46787eb 100644 --- a/samples/excel/35-worksheet/worksheet-copy.yaml +++ b/samples/excel/54-worksheet/worksheet-copy.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 3 id: excel-worksheet-copy name: Copy worksheet description: Copies the active worksheet to the specified location. diff --git a/samples/excel/35-worksheet/worksheet-freeze-panes.yaml b/samples/excel/54-worksheet/worksheet-freeze-panes.yaml similarity index 97% rename from samples/excel/35-worksheet/worksheet-freeze-panes.yaml rename to samples/excel/54-worksheet/worksheet-freeze-panes.yaml index d22431c24..678f81cae 100644 --- a/samples/excel/35-worksheet/worksheet-freeze-panes.yaml +++ b/samples/excel/54-worksheet/worksheet-freeze-panes.yaml @@ -1,7 +1,7 @@ -order: 8 +order: 4 id: excel-worksheet-freeze-panes -name: Manage frozen panes in a worksheet -description: 'Freeze columns, freeze rows, freeze a range, and manage frozen panes in a worksheet.' +name: 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/35-worksheet/worksheet-range-cell.yaml b/samples/excel/54-worksheet/worksheet-range-cell.yaml similarity index 97% rename from samples/excel/35-worksheet/worksheet-range-cell.yaml rename to samples/excel/54-worksheet/worksheet-range-cell.yaml index adf021456..edcef9990 100644 --- a/samples/excel/35-worksheet/worksheet-range-cell.yaml +++ b/samples/excel/54-worksheet/worksheet-range-cell.yaml @@ -1,7 +1,7 @@ -order: 6 +order: 5 id: excel-worksheet-worksheet-range-cell -name: Worksheet range and cell -description: Get a range or a cell in a worksheet +name: Get range or 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/35-worksheet/hide-unhide-worksheet.yaml b/samples/excel/54-worksheet/worksheet-visibility.yaml similarity index 97% rename from samples/excel/35-worksheet/hide-unhide-worksheet.yaml rename to samples/excel/54-worksheet/worksheet-visibility.yaml index caf001446..762c6a595 100644 --- a/samples/excel/35-worksheet/hide-unhide-worksheet.yaml +++ b/samples/excel/54-worksheet/worksheet-visibility.yaml @@ -1,7 +1,7 @@ -order: 3 -id: excel-worksheet-hide-unhide-worksheet -name: Hide and unhide worksheet -description: Hide and unhide a worksheet +order: 10 +id: excel-worksheet-visibility +name: Visibility +description: Hides and unhides a worksheet. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/89-preview-apis/range-areas.yaml b/samples/excel/85-preview-apis/range-areas.yaml similarity index 97% rename from samples/excel/89-preview-apis/range-areas.yaml rename to samples/excel/85-preview-apis/range-areas.yaml index 39f58ae70..edc71bd1e 100644 --- a/samples/excel/89-preview-apis/range-areas.yaml +++ b/samples/excel/85-preview-apis/range-areas.yaml @@ -1,6 +1,7 @@ +order: 2 id: excel-range-areas -name: Using RangeAreas (Discontiguous Ranges) -description: 'Work with RangeAreas, which are sets of ranges that need not be contiguous.' +name: RangeAreas (discontiguous ranges) +description: 'Creates and uses RangeAreas, which are sets of ranges that need not be contiguous.' host: EXCEL api_set: ExcelApi: 1.9 @@ -184,4 +185,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts 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/89-preview-apis/range-copyfrom.yaml b/samples/excel/85-preview-apis/range-copyfrom.yaml similarity index 99% rename from samples/excel/89-preview-apis/range-copyfrom.yaml rename to samples/excel/85-preview-apis/range-copyfrom.yaml index 2f74f80eb..1ffb62194 100644 --- a/samples/excel/89-preview-apis/range-copyfrom.yaml +++ b/samples/excel/85-preview-apis/range-copyfrom.yaml @@ -1,6 +1,7 @@ +order: 1 id: excel-range-copyfrom name: Copy and paste ranges -description: Use the Range.copyFrom method to copy data and formatting. +description: Copies data and formatting with the Range.copyFrom method. host: EXCEL api_set: ExcelAPI: 1.8 diff --git a/samples/excel/88-common-patterns/multiple-property-set.yaml b/samples/excel/90-scenarios/multiple-property-set.yaml similarity index 96% rename from samples/excel/88-common-patterns/multiple-property-set.yaml rename to samples/excel/90-scenarios/multiple-property-set.yaml index a87a0ecaa..a4b44b5d2 100644 --- a/samples/excel/88-common-patterns/multiple-property-set.yaml +++ b/samples/excel/90-scenarios/multiple-property-set.yaml @@ -1,6 +1,7 @@ -id: excel-multiple-property-set -name: Multiple Property Set -description: Setting multiple properties at once with the rich API object set() method. +order: 2 +id: excel-scenarios-multiple-property-set +name: Set multiple properties +description: Sets multiple properties at once with the API object set() method. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/20-scenarios/report-generation.yaml b/samples/excel/90-scenarios/report-generation.yaml similarity index 99% rename from samples/excel/20-scenarios/report-generation.yaml rename to samples/excel/90-scenarios/report-generation.yaml index cc8705da5..cb31b61a3 100644 --- a/samples/excel/20-scenarios/report-generation.yaml +++ b/samples/excel/90-scenarios/report-generation.yaml @@ -1,4 +1,5 @@ -id: excel-advanced-report-generation +order: 1 +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.' author: OfficeDev diff --git a/samples/excel/30-range/working-with-dates.yaml b/samples/excel/90-scenarios/working-with-dates.yaml similarity index 96% rename from samples/excel/30-range/working-with-dates.yaml rename to samples/excel/90-scenarios/working-with-dates.yaml index 400e103ea..9f92c9f42 100644 --- a/samples/excel/30-range/working-with-dates.yaml +++ b/samples/excel/90-scenarios/working-with-dates.yaml @@ -1,7 +1,7 @@ -order: 11 -id: excel-range-working-with-dates +order: 3 +id: excel-scenarios-working-with-dates name: Working with dates -description: Setting and getting date values in a range and manipulating them using the Moment JavaScript library with the Moment-MSDate plug-in +description: Shows how to work with dates by using the Moment JavaScript library with the Moment-MSDate plug-in. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/90-just-for-fun/color-wheel.yaml b/samples/excel/99-just-for-fun/color-wheel.yaml similarity index 100% rename from samples/excel/90-just-for-fun/color-wheel.yaml rename to samples/excel/99-just-for-fun/color-wheel.yaml diff --git a/samples/excel/90-just-for-fun/gradient.yaml b/samples/excel/99-just-for-fun/gradient.yaml similarity index 99% rename from samples/excel/90-just-for-fun/gradient.yaml rename to samples/excel/99-just-for-fun/gradient.yaml index b7f636e62..7753da285 100644 --- a/samples/excel/90-just-for-fun/gradient.yaml +++ b/samples/excel/99-just-for-fun/gradient.yaml @@ -1,4 +1,4 @@ -order: 1 +order: 2 id: excel-just-for-fun-gradient name: Gradient description: Uses range formatting and external libraries to draw a colorful gradient within a range. Contributed by Alexander Zlatkovski. diff --git a/samples/excel/90-just-for-fun/path-finder-game.yaml b/samples/excel/99-just-for-fun/path-finder-game.yaml similarity index 98% rename from samples/excel/90-just-for-fun/path-finder-game.yaml rename to samples/excel/99-just-for-fun/path-finder-game.yaml index ba6c566b3..bc881b0e0 100644 --- a/samples/excel/90-just-for-fun/path-finder-game.yaml +++ b/samples/excel/99-just-for-fun/path-finder-game.yaml @@ -1,7 +1,7 @@ order: 3 id: excel-just-for-fun-path-finder-game name: Path finder -description: Using range formatting to play a "pathfinder game". Contributed by Alexander Zlatkovski +description: Uses range formatting to play a "pathfinder game". Contributed by Alexander Zlatkovski. author: AlexanderZlatkovski host: EXCEL api_set: diff --git a/samples/excel/90-just-for-fun/patterns.yaml b/samples/excel/99-just-for-fun/patterns.yaml similarity index 98% rename from samples/excel/90-just-for-fun/patterns.yaml rename to samples/excel/99-just-for-fun/patterns.yaml index 4d6664463..828f9b9c5 100644 --- a/samples/excel/90-just-for-fun/patterns.yaml +++ b/samples/excel/99-just-for-fun/patterns.yaml @@ -1,7 +1,7 @@ -order: 2 +order: 1 id: excel-just-for-fun-patterns name: Colorful Patterns -description: Shows how to use range formatting to draw interesting pattern. Contributed by Alexander Zlatkovski +description: Uses range formatting to draw interesting pattern. Contributed by Alexander Zlatkovski. author: AlexanderZlatkovski host: EXCEL api_set: diff --git a/samples/word/20-content-controls/insert-and-change-content-controls.yaml b/samples/word/10-content-controls/insert-and-change-content-controls.yaml similarity index 100% rename from samples/word/20-content-controls/insert-and-change-content-controls.yaml rename to samples/word/10-content-controls/insert-and-change-content-controls.yaml diff --git a/samples/word/03-images/insert-and-get-pictures.yaml b/samples/word/15-images/insert-and-get-pictures.yaml similarity index 100% rename from samples/word/03-images/insert-and-get-pictures.yaml rename to samples/word/15-images/insert-and-get-pictures.yaml diff --git a/samples/word/06-lists/insert-list.yaml b/samples/word/20-lists/insert-list.yaml similarity index 100% rename from samples/word/06-lists/insert-list.yaml rename to samples/word/20-lists/insert-list.yaml diff --git a/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml b/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml similarity index 98% rename from samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml rename to samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml index 8ec4e76b6..5c0b81af7 100644 --- a/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml +++ b/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -1,5 +1,5 @@ -order: 3 -id: word-paragraphs-get-paragraph-on-insertion-point +order: 1 +id: word-paragraph-get-paragraph-on-insertion-point name: Get paragraph from insertion point description: Gets the full paragraph containing the insertion point. author: OfficeDev diff --git a/samples/word/02-paragraphs/insert-formatted-text.yaml b/samples/word/25-paragraph/insert-formatted-text.yaml similarity index 98% rename from samples/word/02-paragraphs/insert-formatted-text.yaml rename to samples/word/25-paragraph/insert-formatted-text.yaml index 93bf702bd..f79f1bd76 100644 --- a/samples/word/02-paragraphs/insert-formatted-text.yaml +++ b/samples/word/25-paragraph/insert-formatted-text.yaml @@ -1,5 +1,5 @@ -order: 1 -id: word-paragraphs-insert-formatted-text +order: 4 +id: word-paragraph-insert-formatted-text name: Insert formatted text description: Formats text with pre-built and custom styles. author: OfficeDev diff --git a/samples/word/02-paragraphs/insert-header-and-footer.yaml b/samples/word/25-paragraph/insert-header-and-footer.yaml similarity index 98% rename from samples/word/02-paragraphs/insert-header-and-footer.yaml rename to samples/word/25-paragraph/insert-header-and-footer.yaml index 765957932..bba3740c9 100644 --- a/samples/word/02-paragraphs/insert-header-and-footer.yaml +++ b/samples/word/25-paragraph/insert-header-and-footer.yaml @@ -1,5 +1,5 @@ order: 5 -id: word-paragraphs-insert-header-and-footer +id: word-paragraph-insert-header-and-footer name: Insert a header and footer description: Inserts a header and a footer in the document. author: OfficeDev diff --git a/samples/word/02-paragraphs/insert-in-different-locations.yaml b/samples/word/25-paragraph/insert-in-different-locations.yaml similarity index 99% rename from samples/word/02-paragraphs/insert-in-different-locations.yaml rename to samples/word/25-paragraph/insert-in-different-locations.yaml index 671c3c072..46c12ba77 100644 --- a/samples/word/02-paragraphs/insert-in-different-locations.yaml +++ b/samples/word/25-paragraph/insert-in-different-locations.yaml @@ -1,5 +1,5 @@ -order: 2 -id: word-paragraphs-insert-in-different-locations +order: 3 +id: word-paragraph-insert-in-different-locations name: Insert content at different locations description: Inserts content at different document locations. author: OfficeDev diff --git a/samples/word/02-paragraphs/insert-line-and-page-breaks.yaml b/samples/word/25-paragraph/insert-line-and-page-breaks.yaml similarity index 98% rename from samples/word/02-paragraphs/insert-line-and-page-breaks.yaml rename to samples/word/25-paragraph/insert-line-and-page-breaks.yaml index ae40d15bc..694a97718 100644 --- a/samples/word/02-paragraphs/insert-line-and-page-breaks.yaml +++ b/samples/word/25-paragraph/insert-line-and-page-breaks.yaml @@ -1,5 +1,5 @@ -order: 4 -id: word-paragraphs-insert-line-and-page-breaks +order: 2 +id: word-paragraph-insert-line-and-page-breaks name: Insert breaks description: Inserts page and line breaks in a document. author: OfficeDev diff --git a/samples/word/02-paragraphs/paragraph-properties.yaml b/samples/word/25-paragraph/paragraph-properties.yaml similarity index 99% rename from samples/word/02-paragraphs/paragraph-properties.yaml rename to samples/word/25-paragraph/paragraph-properties.yaml index c40452f66..1b77ac78c 100644 --- a/samples/word/02-paragraphs/paragraph-properties.yaml +++ b/samples/word/25-paragraph/paragraph-properties.yaml @@ -1,5 +1,5 @@ order: 6 -id: word-paragraphs-paragraph-properties +id: word-paragraph-paragraph-properties name: Paragraph properties description: 'Sets indentation, space between paragraphs, and other paragraph properties.' author: OfficeDev diff --git a/samples/word/02-paragraphs/search.yaml b/samples/word/25-paragraph/search.yaml similarity index 99% rename from samples/word/02-paragraphs/search.yaml rename to samples/word/25-paragraph/search.yaml index 0533970cb..dac7628d1 100644 --- a/samples/word/02-paragraphs/search.yaml +++ b/samples/word/25-paragraph/search.yaml @@ -1,5 +1,5 @@ order: 7 -id: word-paragraphs-search +id: word-paragraph-search name: Search description: Shows basic and advanced search capabilities. author: OfficeDev diff --git a/samples/word/10-properties/get-built-in-properties.yaml b/samples/word/30-properties/get-built-in-properties.yaml similarity index 100% rename from samples/word/10-properties/get-built-in-properties.yaml rename to samples/word/30-properties/get-built-in-properties.yaml diff --git a/samples/word/10-properties/read-write-custom-document-properties.yaml b/samples/word/30-properties/read-write-custom-document-properties.yaml similarity index 100% rename from samples/word/10-properties/read-write-custom-document-properties.yaml rename to samples/word/30-properties/read-write-custom-document-properties.yaml diff --git a/samples/word/04-ranges/scroll-to-range.yaml b/samples/word/35-ranges/scroll-to-range.yaml similarity index 100% rename from samples/word/04-ranges/scroll-to-range.yaml rename to samples/word/35-ranges/scroll-to-range.yaml diff --git a/samples/word/04-ranges/split-words-of-first-paragraph.yaml b/samples/word/35-ranges/split-words-of-first-paragraph.yaml similarity index 100% rename from samples/word/04-ranges/split-words-of-first-paragraph.yaml rename to samples/word/35-ranges/split-words-of-first-paragraph.yaml diff --git a/samples/word/05-tables/table-cell-access.yaml b/samples/word/40-tables/table-cell-access.yaml similarity index 100% rename from samples/word/05-tables/table-cell-access.yaml rename to samples/word/40-tables/table-cell-access.yaml diff --git a/samples/word/80-scenarios/basic-doc-assembly.yaml b/samples/word/90-scenarios/doc-assembly.yaml similarity index 99% rename from samples/word/80-scenarios/basic-doc-assembly.yaml rename to samples/word/90-scenarios/doc-assembly.yaml index 63bb44c06..52e1ba186 100644 --- a/samples/word/80-scenarios/basic-doc-assembly.yaml +++ b/samples/word/90-scenarios/doc-assembly.yaml @@ -1,5 +1,6 @@ -id: word-scenarios-basic-doc-assembly -name: Basic document assembly +order: 1 +id: word-scenarios-doc-assembly +name: Document assembly description: Composes different parts of a Word document. author: OfficeDev host: WORD diff --git a/samples/word/50-common-patterns/multiple-property-set.yaml b/samples/word/90-scenarios/multiple-property-set.yaml similarity index 98% rename from samples/word/50-common-patterns/multiple-property-set.yaml rename to samples/word/90-scenarios/multiple-property-set.yaml index 7891eb41e..56673c107 100644 --- a/samples/word/50-common-patterns/multiple-property-set.yaml +++ b/samples/word/90-scenarios/multiple-property-set.yaml @@ -1,5 +1,5 @@ -order: 1 -id: word-common-patterns-multiple-property-set +order: 2 +id: word-scenarios-multiple-property-set name: Set multiple properties at once description: Sets multiple properties at once with the API object set() method. host: WORD diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index a8ea317a6ecd302959599e93ae4b96bbc7351acb..84b5d94386862d692e863f817d13c72716eadd4f 100644 GIT binary patch delta 7297 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 E0J%mL!vFvP delta 3742 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 IEdT%j0Qu)1<^TWy diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index aa6b4b99e..7b6ab7733 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -289,32 +289,9 @@ Excel.NamedItemCollection.add: - |- try { await Excel.run(async (context) => { - - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - const sheet = context.workbook.worksheets.getItem("Sample"); - - let expensesTable = sheet.tables.add("A1:D1", true); - expensesTable.name = "ExpensesTable"; - - expensesTable.getHeaderRowRange().values = [["DATE", "MERCHANT", "CATEGORY", "AMOUNT"]]; - - let newData = transactions.map(item => - [item.DATE, item.MERCHANT, item.CATEGORY, item.AMOUNT]); - - expensesTable.rows.add(null, newData); - sheet.names.add("TotalAmount", "=SUM(ExpensesTable[AMOUNT])"); - sheet.getRange("D11").values = [["=TotalAmount"]]; - - if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } - - sheet.activate(); - await context.sync(); }); } @@ -1774,93 +1751,111 @@ Excel.TextConditionalFormat.rule: }); Excel.Range.getIntersectionOrNullObject: - |- - 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); + 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(); + // 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 (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"); - } + 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(); + await context.sync(); }); Excel.Range.getUsedRange: - |- - 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); + 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(); + // 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 (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"); - } + 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(); + await context.sync(); }); Excel.Range.hyperlink: - |- @@ -2673,8 +2668,8 @@ Word.ContentControl.tag: }); Word.ContentControl.set: - >- - // I'll add title and colors to odd and even content controls! and change - appearance of all. + // 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. diff --git a/view/excel.json b/view/excel.json index f396d48c8..b065d8f14 100644 --- a/view/excel.json +++ b/view/excel.json @@ -1,90 +1,87 @@ { - "excel-basic-api-call": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/01-basics/basic-api-call.yaml", - "excel-basic-api-call-es5": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/01-basics/basic-api-call-es5.yaml", + "excel-basics-basic-api-call": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/01-basics/basic-api-call.yaml", + "excel-basics-basic-api-call-es5": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/01-basics/basic-api-call-es5.yaml", "excel-basics-basic-common-api-call": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/01-basics/basic-common-api-call.yaml", + "excel-chart-axis": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-axis.yaml", + "excel-chart-axis-formatting": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-axis-formatting.yaml", + "excel-chart-create-several-charts": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-create-several-charts.yaml", + "excel-chart-create-doughnut-chart": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/create-doughnut-chart.yaml", + "excel-chart-formatting": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-formatting.yaml", + "excel-chart-legend": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-legend.yaml", + "excel-chart-point": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-point.yaml", + "excel-chart-series": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-series.yaml", + "excel-chart-series-markers": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-series-markers.yaml", + "excel-chart-series-plotorder": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-series-plotorder.yaml", + "excel-chart-title-substring": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-title-substring.yaml", + "excel-chart-trendlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-trendlines.yaml", + "excel-range-conditional-formatting-advanced": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml", + "excel-range-conditional-formatting-basic": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml", + "excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml", "excel-chart-chart-title-js": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/private-samples/excel/20-chart/chart-title-js.yaml", "excel-chart-chart-title-ts": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/private-samples/excel/20-chart/chart-title-ts.yaml", - "excel-advanced-report-generation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/20-scenarios/report-generation.yaml", - "excel-range-conditional-formatting-basic": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-range/conditional-formatting-basic.yaml", - "excel-range-conditional-formatting-advanced": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-range/conditional-formatting-advanced.yaml", - "excel-range-copy-multiply-values": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-range/copy-multiply-values.yaml", - "excel-range-create-and-use-range-intersection": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-range/create-and-use-range-intersection.yaml", - "excel-range-formatting": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-range/formatting.yaml", - "excel-range-insert-delete-clear-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-range/insert-delete-clear-range.yaml", - "excel-range-range-operations": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-range/range-operations.yaml", - "excel-range-selected-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-range/selected-range.yaml", - "excel-range-set-get-values": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-range/set-get-values.yaml", - "excel-range-test-for-used-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-range/test-for-used-range.yaml", - "excel-range-working-with-dates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-range/working-with-dates.yaml", - "excel-range-hyperlink": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-range/range-hyperlink.yaml", - "excel-range-text-orientation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-range/range-text-orientation.yaml", - "excel-worksheet-activeworksheet": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/activeworksheet.yaml", - "excel-worksheet-add-delete-rename-move-worksheet": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/add-delete-rename-move-worksheet.yaml", - "excel-worksheet-hide-unhide-worksheet": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/hide-unhide-worksheet.yaml", - "excel-worksheet-list-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/list-worksheets.yaml", - "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/reference-worksheets-by-relative-position.yaml", - "excel-worksheet-worksheet-range-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/worksheet-range-cell.yaml", - "excel-worksheet-copy": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/worksheet-copy.yaml", - "excel-worksheet-freeze-panes": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/worksheet-freeze-panes.yaml", - "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/tab-color.yaml", - "excel-data-validation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/data-validation.yaml", - "excel-gridlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/35-worksheet/worksheet-gridlines.yaml", - "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/37-workbook/workbook-get-active-cell.yaml", - "excel-protect-data-in-worksheet-and-workbook-structure": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/37-workbook/protect-data-in-worksheet-and-workbook-structure.yaml", - "excel-style": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/40-table/style.yaml", - "excel-table-add-rows-and-columns-to-a-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/40-table/add-rows-and-columns-to-a-table.yaml", - "excel-table-convert-range-to-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/40-table/convert-range-to-table.yaml", - "excel-table-create-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/40-table/create-table.yaml", - "excel-table-filter-data": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/40-table/filter-data.yaml", - "excel-table-format-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/40-table/format-table.yaml", - "excel-table-get-data-from-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/40-table/get-data-from-table.yaml", - "excel-table-get-visible-range-of-a-filtered-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/40-table/get-visible-range-of-a-filtered-table.yaml", - "excel-table-import-json-data": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/40-table/import-json-data.yaml", - "excel-table-sort-data": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/40-table/sort-data.yaml", - "excel-named-item-create-named-item": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/45-named-item/create-named-item.yaml", - "excel-named-item-create-and-remove-named-item": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/45-named-item/create-and-remove-named-item.yaml", - "excel-create-and-use-named-item-for-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/45-named-item/create-and-use-named-item-for-range.yaml", - "excel-named-item-list-named-items": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/45-named-item/list-named-items.yaml", - "excel-update-named-item": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/45-named-item/update-named-item.yaml", - "excel-chart-create-several-charts": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-create-several-charts.yaml", - "excel-chart-create-doughnut-chart": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/create-doughnut-chart.yaml", - "excel-chart-axis": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-axis.yaml", - "excel-chart-legend": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-legend.yaml", - "excel-chart-point": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-point.yaml", - "excel-chart-series": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-series.yaml", - "excel-chart-series-markers": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-series-markers.yaml", - "excel-chart-series-plotorder": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-series-plotorder.yaml", - "excel-chart-title-substring": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-title-substring.yaml", - "excel-chart-trendlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-trendlines.yaml", - "excel-chart-axis-formatting": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-axis-formatting.yaml", - "excel-chart-formatting": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-chart/chart-formatting.yaml", - "excel-pivottable-calculations": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/55-pivottable/pivottable-calculations.yaml", - "excel-pivottable-create-and-modify": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/55-pivottable/pivottable-create-and-modify.yaml", - "excel-pivottable-filters-and-summaries": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/55-pivottable/pivottable-filters-and-summaries.yaml", - "excel-pivottable-refresh-pivot-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/55-pivottable/refresh-pivot-table.yaml", - "excel-events-data-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/data-changed.yaml", - "excel-events-selection-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/selection-changed.yaml", - "excel-events-setting-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/setting-changed.yaml", - "excel-events-table-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/events-table-changed.yaml", - "excel-events-tablecollection-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/events-tablecollection-changed.yaml", - "excel-events-worksheet-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/events-worksheet-activated.yaml", - "excel-events-worksheet-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/events-worksheet-changed.yaml", - "excel-events-worksheet-selectionchanged": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/events-worksheet-selectionchanged.yaml", - "excel-events-chart-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/events-chart-activated.yaml", - "excel-events-chartcollection-added-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/events-chartcollection-added-activated.yaml", - "excel-events-disable-events": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/events-disable-events.yaml", - "excel-events-worksheet-calculated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/events-worksheet-calculated.yaml", - "excel-events-worksheetcollection-calculated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/70-events/events-worksheetcollection-calculated.yaml", - "excel-settings-create-get-change-delete-settings": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/80-settings/create-get-change-delete-settings.yaml", - "excel-document-get-file-in-slices-async": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/82-document/get-file-in-slices-async.yaml", - "excel-document-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/82-document/properties.yaml", - "excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-custom-xml-parts/test-xml-for-unique-namespace.yaml", - "excel-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/88-common-patterns/multiple-property-set.yaml", - "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/range-areas.yaml", - "excel-range-copyfrom": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/89-preview-apis/range-copyfrom.yaml", - "excel-just-for-fun-gradient": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-just-for-fun/gradient.yaml", - "excel-just-for-fun-patterns": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-just-for-fun/patterns.yaml", - "excel-just-for-fun-path-finder-game": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-just-for-fun/path-finder-game.yaml", - "excel-just-for-fun-color-wheel": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-just-for-fun/color-wheel.yaml" + "excel-data-validation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/22-data-validation/data-validation.yaml", + "excel-document-get-file-in-slices-async": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/26-document/get-file-in-slices-async.yaml", + "excel-document-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/26-document/properties.yaml", + "excel-settings-create-get-change-delete-settings": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/26-document/create-get-change-delete-settings.yaml", + "excel-events-chart-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-chart-activated.yaml", + "excel-events-chartcollection-added-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-chartcollection-added-activated.yaml", + "excel-events-data-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/data-changed.yaml", + "excel-events-disable-events": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-disable-events.yaml", + "excel-events-selection-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/selection-changed.yaml", + "excel-events-table-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-table-changed.yaml", + "excel-events-tablecollection-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-tablecollection-changed.yaml", + "excel-events-setting-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/setting-changed.yaml", + "excel-events-worksheet-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-worksheet-activated.yaml", + "excel-events-worksheet-calculated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-worksheet-calculated.yaml", + "excel-events-worksheet-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-worksheet-changed.yaml", + "excel-events-worksheetcollection-calculated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-worksheetcollection-calculated.yaml", + "excel-events-worksheet-selectionchanged": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-worksheet-selectionchanged.yaml", + "excel-named-item-create-and-remove-named-item": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/34-named-item/create-and-remove-named-item.yaml", + "excel-named-item-list-named-items": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/34-named-item/list-named-items.yaml", + "excel-create-and-use-named-item-for-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/34-named-item/create-and-use-named-item-for-range.yaml", + "excel-update-named-item": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/34-named-item/update-named-item.yaml", + "excel-pivottable-calculations": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/38-pivottable/pivottable-calculations.yaml", + "excel-pivottable-create-and-modify": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/38-pivottable/pivottable-create-and-modify.yaml", + "excel-pivottable-filters-and-summaries": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml", + "excel-pivottable-refresh-pivot-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/38-pivottable/refresh-pivot-table.yaml", + "excel-range-formatting": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/formatting.yaml", + "excel-range-hyperlink": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-hyperlink.yaml", + "excel-range-insert-delete-and-clear-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/insert-delete-clear-range.yaml", + "excel-range-range-relationships": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-relationships.yaml", + "excel-range-selected-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/selected-range.yaml", + "excel-range-test-for-used-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/test-for-used-range.yaml", + "excel-range-text-orientation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-text-orientation.yaml", + "excel-range-values-and-formulas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/set-get-values.yaml", + "excel-table-add-rows-and-columns-to-a-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml", + "excel-table-convert-range-to-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/convert-range-to-table.yaml", + "excel-table-create-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/create-table.yaml", + "excel-table-filter-data": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/filter-data.yaml", + "excel-table-formatting": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/formatting.yaml", + "excel-table-get-data-from-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/get-data-from-table.yaml", + "excel-table-get-visible-range-of-a-filtered-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml", + "excel-table-import-json-data": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/import-json-data.yaml", + "excel-table-sort-data": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/sort-data.yaml", + "excel-table-style": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/style.yaml", + "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/workbook-get-active-cell.yaml", + "excel-workbook-data-protection": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/data-protection.yaml", + "excel-worksheet-active-worksheet": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/active-worksheet.yaml", + "excel-worksheet-add-delete-rename-move-worksheet": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml", + "excel-worksheet-copy": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-copy.yaml", + "excel-worksheet-freeze-panes": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-freeze-panes.yaml", + "excel-worksheet-worksheet-range-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-range-cell.yaml", + "excel-worksheet-gridlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/gridlines.yaml", + "excel-worksheet-list-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/list-worksheets.yaml", + "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml", + "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/tab-color.yaml", + "excel-worksheet-visibility": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-visibility.yaml", + "excel-range-copyfrom": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-copyfrom.yaml", + "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-areas.yaml", + "excel-scenarios-report-generation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/report-generation.yaml", + "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/multiple-property-set.yaml", + "excel-scenarios-working-with-dates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/working-with-dates.yaml", + "excel-just-for-fun-patterns": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/99-just-for-fun/patterns.yaml", + "excel-just-for-fun-gradient": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/99-just-for-fun/gradient.yaml", + "excel-just-for-fun-path-finder-game": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/99-just-for-fun/path-finder-game.yaml", + "excel-just-for-fun-color-wheel": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/99-just-for-fun/color-wheel.yaml" } \ No newline at end of file diff --git a/view/word.json b/view/word.json index 18290e821..1fb1bf2f3 100644 --- a/view/word.json +++ b/view/word.json @@ -2,21 +2,21 @@ "word-basics-basic-api-call": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/01-basics/basic-api-call.yaml", "word-basics-api-call-es5": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/01-basics/basic-api-call-es5.yaml", "word-basics-basic-common-api-call": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/01-basics/basic-common-api-call.yaml", - "word-paragraphs-insert-formatted-text": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/02-paragraphs/insert-formatted-text.yaml", - "word-paragraphs-insert-in-different-locations": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/02-paragraphs/insert-in-different-locations.yaml", - "word-paragraphs-get-paragraph-on-insertion-point": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/02-paragraphs/get-paragraph-on-insertion-point.yaml", - "word-paragraphs-insert-line-and-page-breaks": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/02-paragraphs/insert-line-and-page-breaks.yaml", - "word-paragraphs-insert-header-and-footer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/02-paragraphs/insert-header-and-footer.yaml", - "word-paragraphs-paragraph-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/02-paragraphs/paragraph-properties.yaml", - "word-paragraphs-search": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/02-paragraphs/search.yaml", - "word-images-insert-and-get-pictures": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/03-images/insert-and-get-pictures.yaml", - "word-ranges-scroll-to-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/04-ranges/scroll-to-range.yaml", - "word-ranges-split-words-of-first-paragraph": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/04-ranges/split-words-of-first-paragraph.yaml", - "word-tables-table-cell-access": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/05-tables/table-cell-access.yaml", - "word-lists-insert-list": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/06-lists/insert-list.yaml", - "word-properties-get-built-in-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/10-properties/get-built-in-properties.yaml", - "word-properties-read-write-custom-document-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/10-properties/read-write-custom-document-properties.yaml", - "word-content-controls-insert-and-change-content-controls": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/20-content-controls/insert-and-change-content-controls.yaml", - "word-common-patterns-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/50-common-patterns/multiple-property-set.yaml", - "word-scenarios-basic-doc-assembly": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/80-scenarios/basic-doc-assembly.yaml" + "word-content-controls-insert-and-change-content-controls": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/10-content-controls/insert-and-change-content-controls.yaml", + "word-images-insert-and-get-pictures": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/15-images/insert-and-get-pictures.yaml", + "word-lists-insert-list": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/20-lists/insert-list.yaml", + "word-paragraph-get-paragraph-on-insertion-point": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml", + "word-paragraph-insert-line-and-page-breaks": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/25-paragraph/insert-line-and-page-breaks.yaml", + "word-paragraph-insert-in-different-locations": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/25-paragraph/insert-in-different-locations.yaml", + "word-paragraph-insert-formatted-text": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/25-paragraph/insert-formatted-text.yaml", + "word-paragraph-insert-header-and-footer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/25-paragraph/insert-header-and-footer.yaml", + "word-paragraph-paragraph-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/25-paragraph/paragraph-properties.yaml", + "word-paragraph-search": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/25-paragraph/search.yaml", + "word-properties-get-built-in-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/30-properties/get-built-in-properties.yaml", + "word-properties-read-write-custom-document-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/30-properties/read-write-custom-document-properties.yaml", + "word-ranges-scroll-to-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/35-ranges/scroll-to-range.yaml", + "word-ranges-split-words-of-first-paragraph": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/35-ranges/split-words-of-first-paragraph.yaml", + "word-tables-table-cell-access": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/40-tables/table-cell-access.yaml", + "word-scenarios-doc-assembly": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/90-scenarios/doc-assembly.yaml", + "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/90-scenarios/multiple-property-set.yaml" } \ No newline at end of file From 57f3f2c2eddd1d7045a98969c96e85acdf91a355 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 14 Nov 2018 10:32:59 -0800 Subject: [PATCH 101/660] Excel Snippet Work (#229) * Standardize try/catch pattern * Automate flow of Test for used ranges * Explain failure conditions better in Table->Style * Add rows and columns now adds to existing table rather than resetting it * Consolidate named item snippets * Clean up Chart Series sample * Rework Chart Title Substring into more general Chart Title snippet * Remove obsolete PivotTable sample * Remove failure states from custom xml sample * Merge event snippets * Incorporates feedback --- playlists/excel.yaml | 140 ++------- .../excel/10-chart/chart-axis-formatting.yaml | 4 +- samples/excel/10-chart/chart-axis.yaml | 174 ++++++++++- samples/excel/10-chart/chart-series.yaml | 162 +++++----- ...substring.yaml => chart-title-format.yaml} | 77 +++-- ...e-set-get-and-delete-custom-xml-parts.yaml | 17 +- .../30-events/events-chart-activated.yaml | 2 +- ...vents-chartcollection-added-activated.yaml | 2 +- .../excel/30-events/events-table-changed.yaml | 2 +- .../events-tablecollection-changed.yaml | 2 +- ...nts-workbook-and-worksheet-collection.yaml | 257 ++++++++++++++++ .../30-events/events-worksheet-activated.yaml | 173 ----------- .../events-worksheet-calculated.yaml | 122 -------- .../30-events/events-worksheet-changed.yaml | 187 ------------ .../events-worksheet-selectionchanged.yaml | 141 --------- samples/excel/30-events/events-worksheet.yaml | 202 +++++++++++++ ...events-worksheetcollection-calculated.yaml | 160 ---------- .../excel/30-events/selection-changed.yaml | 135 --------- samples/excel/30-events/setting-changed.yaml | 139 --------- .../create-and-remove-named-item.yaml | 278 ++++++++++------- .../create-and-use-named-item-for-range.yaml | 179 ----------- .../excel/34-named-item/list-named-items.yaml | 74 ----- .../34-named-item/update-named-item.yaml | 11 +- .../38-pivottable/refresh-pivot-table.yaml | 137 --------- samples/excel/42-range/formatting.yaml | 101 +++---- .../42-range/insert-delete-clear-range.yaml | 117 ++++---- samples/excel/42-range/selected-range.yaml | 41 ++- samples/excel/42-range/set-get-values.yaml | 281 ++++++++---------- .../excel/42-range/test-for-used-range.yaml | 97 ++++-- .../add-rows-and-columns-to-a-table.yaml | 246 +++++++-------- .../46-table/convert-range-to-table.yaml | 90 +++--- samples/excel/46-table/create-table.yaml | 53 ++-- samples/excel/46-table/filter-data.yaml | 119 ++++---- samples/excel/46-table/formatting.yaml | 87 +++--- .../excel/46-table/get-data-from-table.yaml | 123 ++++---- ...get-visible-range-of-a-filtered-table.yaml | 156 ++++------ samples/excel/46-table/import-json-data.yaml | 63 ++-- samples/excel/46-table/style.yaml | 10 +- .../excel/54-worksheet/active-worksheet.yaml | 105 +++---- .../add-delete-rename-move-worksheet.yaml | 106 +++---- .../excel/54-worksheet/list-worksheets.yaml | 37 ++- .../54-worksheet/worksheet-range-cell.yaml | 144 ++++----- .../54-worksheet/worksheet-visibility.yaml | 74 ++--- .../90-scenarios/working-with-dates.yaml | 116 ++++---- samples/excel/99-just-for-fun/patterns.yaml | 232 +++++++-------- snippet-extractor-metadata/excel.xlsx | Bin 16169 -> 16094 bytes snippet-extractor-output/snippets.yaml | 232 ++++++++------- view/excel.json | 16 +- 48 files changed, 2218 insertions(+), 3205 deletions(-) rename samples/excel/10-chart/{chart-title-substring.yaml => chart-title-format.yaml} (60%) create mode 100644 samples/excel/30-events/events-workbook-and-worksheet-collection.yaml delete mode 100644 samples/excel/30-events/events-worksheet-activated.yaml delete mode 100644 samples/excel/30-events/events-worksheet-calculated.yaml delete mode 100644 samples/excel/30-events/events-worksheet-changed.yaml delete mode 100644 samples/excel/30-events/events-worksheet-selectionchanged.yaml create mode 100644 samples/excel/30-events/events-worksheet.yaml delete mode 100644 samples/excel/30-events/events-worksheetcollection-calculated.yaml delete mode 100644 samples/excel/30-events/selection-changed.yaml delete mode 100644 samples/excel/30-events/setting-changed.yaml delete mode 100644 samples/excel/34-named-item/create-and-use-named-item-for-range.yaml delete mode 100644 samples/excel/34-named-item/list-named-items.yaml delete mode 100644 samples/excel/38-pivottable/refresh-pivot-table.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 3cadb36ac..ed1734ee1 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -95,7 +95,7 @@ - id: excel-chart-series name: Series fileName: chart-series.yaml - description: 'Adds, sets, and deletes a series in a chart.' + description: Adds and deletes series in a chart. rawUrl: >- https://raw.githubusercontent.com////samples/excel/10-chart/chart-series.yaml group: Chart @@ -119,12 +119,12 @@ group: Chart api_set: ExcelAPI: 1.7 -- id: excel-chart-title-substring - name: Title substring - fileName: chart-title-substring.yaml - description: Changes the color for a substring in the chart's title. +- 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////samples/excel/10-chart/chart-title-substring.yaml + https://raw.githubusercontent.com////samples/excel/10-chart/chart-title-format.yaml group: Chart api_set: ExcelApi: 1.7 @@ -213,17 +213,6 @@ group: Document api_set: ExcelApi: 1.4 -- id: excel-events-chart-activated - name: Chart events - fileName: events-chart-activated.yaml - description: >- - Registers event handlers that run when the chart is activated or - deactivated. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/30-events/events-chart-activated.yaml - group: Events - api_set: - ExcelApi: 1.8 - id: excel-events-chartcollection-added-activated name: Chart collection events fileName: events-chartcollection-added-activated.yaml @@ -235,6 +224,17 @@ group: Events api_set: ExcelApi: 1.8 +- id: excel-events-chart-activated + name: Chart events + fileName: events-chart-activated.yaml + description: >- + Registers event handlers that run when the chart is activated or + deactivated. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/30-events/events-chart-activated.yaml + group: Events + api_set: + ExcelApi: 1.8 - id: excel-events-data-changed name: Data change event fileName: data-changed.yaml @@ -253,17 +253,6 @@ group: Events api_set: ExcelAPI: 1.8 -- id: excel-events-selection-changed - name: Selection event - fileName: selection-changed.yaml - description: >- - Registers an event handler that runs when the selection changes in the - workbook. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/30-events/selection-changed.yaml - group: Events - api_set: - ExcelApi: 1.2 - id: excel-events-table-changed name: Table events fileName: events-table-changed.yaml @@ -282,91 +271,37 @@ group: Events api_set: ExcelApi: 1.7 -- id: excel-events-setting-changed - name: Workbook events - fileName: setting-changed.yaml - description: Registers an event handler that runs when the workbook's settings change. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/30-events/setting-changed.yaml - group: Events - api_set: - ExcelApi: 1.4 -- id: excel-events-worksheet-activated - name: Worksheet activation events - fileName: events-worksheet-activated.yaml +- 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 activated or - deactivated. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/30-events/events-worksheet-activated.yaml - group: Events - api_set: - ExcelApi: 1.7 -- id: excel-events-worksheet-calculated - name: Worksheet calculation event - fileName: events-worksheet-calculated.yaml - description: Registers an event handler that runs when the worksheet has recalculated. + 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////samples/excel/30-events/events-worksheet-calculated.yaml + https://raw.githubusercontent.com////samples/excel/30-events/events-workbook-and-worksheet-collection.yaml group: Events api_set: - ExcelApi: 1.8 -- id: excel-events-worksheet-changed - name: Worksheet change and addition events - fileName: events-worksheet-changed.yaml - description: Registers event handlers that runs when a worksheet is added or changed. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/30-events/events-worksheet-changed.yaml - group: Events - api_set: - ExcelApi: 1.7 -- id: excel-events-worksheetcollection-calculated - name: Worksheet collection calculation event - fileName: events-worksheetcollection-calculated.yaml + ExcelApi: 1.4 +- id: excel-events-worksheet + name: Worksheet events + fileName: events-worksheet.yaml description: >- - Registers an event handler that runs when the worksheet collection - recalculates. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/30-events/events-worksheetcollection-calculated.yaml - group: Events - api_set: - ExcelApi: 1.8 -- id: excel-events-worksheet-selectionchanged - name: Worksheet selection change event - fileName: events-worksheet-selectionchanged.yaml - description: Registers an event handler that runs when the selected worksheet changes. + 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////samples/excel/30-events/events-worksheet-selectionchanged.yaml + https://raw.githubusercontent.com////samples/excel/30-events/events-worksheet.yaml group: Events api_set: - ExcelApi: 1.7 + ExcelApi: 1.1 - id: excel-named-item-create-and-remove-named-item - name: Create and remove + name: 'Create, access, and remove' fileName: create-and-remove-named-item.yaml - description: Creates and removes named items for a formula. + description: 'Creates, accesses, and removes named items in a worksheet.' rawUrl: >- https://raw.githubusercontent.com////samples/excel/34-named-item/create-and-remove-named-item.yaml group: Named Item api_set: ExcelApi: 1.4 -- id: excel-named-item-list-named-items - name: List all - fileName: list-named-items.yaml - description: Lists all the named items in a workbook. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/34-named-item/list-named-items.yaml - group: Named Item - api_set: - ExcelApi: 1.3 -- id: excel-create-and-use-named-item-for-range - name: Use named range item - fileName: create-and-use-named-item-for-range.yaml - description: Creates and uses a named range item. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/34-named-item/create-and-use-named-item-for-range.yaml - group: Named Item - api_set: - ExcelApi: 1.4 - id: excel-update-named-item name: Update fileName: update-named-item.yaml @@ -403,15 +338,6 @@ group: PivotTable api_set: ExcelApi: 1.8 -- id: excel-pivottable-refresh-pivot-table - name: Refresh - fileName: refresh-pivot-table.yaml - description: Refreshes a PivotTable. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/38-pivottable/refresh-pivot-table.yaml - group: PivotTable - api_set: - ExcelApi: 1.3 - id: excel-range-formatting name: Formatting fileName: formatting.yaml diff --git a/samples/excel/10-chart/chart-axis-formatting.yaml b/samples/excel/10-chart/chart-axis-formatting.yaml index 41add9cef..bad360455 100644 --- a/samples/excel/10-chart/chart-axis-formatting.yaml +++ b/samples/excel/10-chart/chart-axis-formatting.yaml @@ -9,8 +9,8 @@ script: content: |+ $("#setup").click(() => tryCatch(setup)); - $("#format-horizontal-axis").click(formatHorizontalAxis); - $("#format-vertical-axis").click(formatVerticalAxis); + $("#format-horizontal-axis").click(() => tryCatch(formatHorizontalAxis)); + $("#format-vertical-axis").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 b6904fdf2..5b20255a9 100644 --- a/samples/excel/10-chart/chart-axis.yaml +++ b/samples/excel/10-chart/chart-axis.yaml @@ -6,7 +6,179 @@ host: EXCEL api_set: ExcelAPI: 1.7 script: - content: "$(\"#setup\").click(() => tryCatch(setup));\n$(\"#get-axis-unit\").click(() => tryCatch(getAxisUnit));\n$(\"#change-axis-unit\").click(() => tryCatch(changeAxisUnit));\n$(\"#remove-axis-label\").click(() => tryCatch(removeAxisLabel));\n$(\"#show-axis-label\").click(() => tryCatch(showAxisLabel));\n$(\"#set-axis-title\").click(() => tryCatch(setAxisTitle));\n \nasync function getAxisUnit() {\n await Excel.run(async (context) => {\n const sheet = context.workbook.worksheets.getItem(\"Sample\");\n\n let chart = sheet.charts.getItemAt(0);\n let categoryAxis = chart.axes.categoryAxis;\n let valueAxis = chart.axes.valueAxis;\n\n // Load to get display unit.\n valueAxis.load(\"displayUnit\");\n \n await context.sync();\n\n OfficeHelpers.UI.notify(\"The vertical axis display unit is: \" + valueAxis.displayUnit);\n });\n}\n\nasync function changeAxisUnit() {\n await Excel.run(async (context) => {\n const sheet = context.workbook.worksheets.getItem(\"Sample\");\n\n let chart = sheet.charts.getItemAt(0);\n let axis = chart.axes.valueAxis;\n\n // Set display unit.\n axis.displayUnit = \"Hundreds\";\n\n await context.sync();\n });\n}\n\nasync function removeAxisLabel() {\n await Excel.run(async (context) => {\n const sheet = context.workbook.worksheets.getItem(\"Sample\");\n\_\n let chart = sheet.charts.getItemAt(0);\n let axis = chart.axes.valueAxis;\n\n // Remove display unit.\n axis.showDisplayUnitLabel = false;\n\n await context.sync();\n });\n}\n\nasync function showAxisLabel() {\n await Excel.run(async (context) => {\n const sheet = context.workbook.worksheets.getItem(\"Sample\");\n\n let chart = sheet.charts.getItemAt(0);\n let axis = chart.axes.valueAxis;\n\n // Show display unit.\n axis.showDisplayUnitLabel = true;\n await context.sync();\n });\n}\n\nasync function setAxisTitle() {\n await Excel.run(async (context) => {\n const sheet = context.workbook.worksheets.getItem(\"Sample\");\n\n let chart = sheet.charts.getItemAt(0);\n let categoryAxis = chart.axes.categoryAxis;\n\n // Set horizontal axis title.\n categoryAxis.title.text = \"Bicycle parts\";\n\n let valueAxis = chart.axes.valueAxis;\n\n // Set vertical axis title.\n valueAxis.title.text = \"Number of items\";\n \n // Show small gridlines.\n valueAxis.minorGridlines.visible = true;\n\n categoryAxis.title.load(\"text\");\n valueAxis.load(\"text\");\n valueAxis.minorGridlines.load(\"visible\");\n\n await context.sync();\n\n console.log(\"The category axis title is: \" + categoryAxis.title.text);\n console.log(\"The value axis title is: \" + valueAxis.title.text);\n \n OfficeHelpers.UI.notify(\"The minor gridlines visibility is set to: \" + valueAxis.minorGridlines.visible);\n });\n}\n\nasync function setup() {\n await Excel.run(async (context) => {\n const sheet = await OfficeHelpers.ExcelUtilities\n .forceCreateSheet(context.workbook, \"Sample\");\n let expensesTable = sheet.tables.add('A1:E1', true);\n expensesTable.name = \"SalesTable\";\n\n expensesTable.getHeaderRowRange().values = [[\"Product\", \"Qtr1\", \"Qtr2\", \"Qtr3\", \"Qtr4\"]];\n\n expensesTable.rows.add(null, [\n [\"Frames\", 5000, 7000, 6544, 4377],\n [\"Saddles\", 400, 323, 276, 651],\n [\"Brake levers\", 12000, 8766, 8456, 9812],\n [\"Chains\", 1550, 1088, 692, 853],\n [\"Mirrors\", 225, 600, 923, 544],\n [\"Spokes\", 6005, 7634, 4589, 8765]\n ]);\n\n if (Office.context.requirements.isSetSupported(\"ExcelApi\", 1.7)) {\n sheet.getUsedRange().format.autofitColumns();\n sheet.getUsedRange().format.autofitRows();\n }\n\n const chart = createChart(context);\n addVerticalAxisLabel(chart);\n sheet.activate();\n\n await context.sync();\n });\n}\n\nfunction createChart(context: Excel.RequestContext) {\n const sheet = context.workbook.worksheets.getItem(\"Sample\");\n const salesTable = sheet.tables.getItem(\"SalesTable\");\n\n const dataRange = salesTable.getRange();\n\n let chart = sheet.charts.add(\"ColumnClustered\", dataRange, Excel.ChartSeriesBy.columns);\n\n chart.setPosition(\"A15\", \"F30\");\n chart.title.text = \"Quarterly sales chart\";\n chart.legend.position = \"Right\"\n chart.legend.format.fill.setSolidColor(\"white\");\n chart.dataLabels.format.font.size = 15;\n chart.dataLabels.format.font.color = \"black\";\n let points = chart.series.getItemAt(0).points;\n\n return chart;\n}\n\nfunction addVerticalAxisLabel(chart: Excel.Chart) {\n let axis = chart.axes.valueAxis;\n axis.displayUnit = \"Thousands\";\n}\n\n/** Default helper for invoking an action and handling errors. */\nasync function tryCatch(callback) {\n try {\n await callback();\n }\n catch (error) {\n OfficeHelpers.UI.notify(error);\n OfficeHelpers.Utilities.log(error);\n }\n}\n" + 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)); + + async function getAxisUnit() { + await Excel.run(async context => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + let chart = sheet.charts.getItemAt(0); + let categoryAxis = chart.axes.categoryAxis; + let valueAxis = chart.axes.valueAxis; + + // Load to get display unit. + valueAxis.load("displayUnit"); + + await context.sync(); + + OfficeHelpers.UI.notify( + "The vertical axis display unit is: " + valueAxis.displayUnit + ); + }); + } + + async function changeAxisUnit() { + await Excel.run(async context => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + let chart = sheet.charts.getItemAt(0); + let axis = chart.axes.valueAxis; + + // Set display unit. + axis.displayUnit = "Hundreds"; + + await context.sync(); + }); + } + + async function removeAxisLabel() { + await Excel.run(async context => { + const sheet = context.workbook.worksheets.getItem("Sample"); + let chart = sheet.charts.getItemAt(0); + let axis = chart.axes.valueAxis; + + // Remove display unit. + axis.showDisplayUnitLabel = false; + + await context.sync(); + }); + } + + async function showAxisLabel() { + await Excel.run(async context => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + let chart = sheet.charts.getItemAt(0); + let axis = chart.axes.valueAxis; + + // Show display unit. + axis.showDisplayUnitLabel = true; + await context.sync(); + }); + } + + async function setAxisTitle() { + await Excel.run(async context => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + let chart = sheet.charts.getItemAt(0); + let categoryAxis = chart.axes.categoryAxis; + + // Set horizontal axis title. + categoryAxis.title.text = "Bicycle parts"; + + let valueAxis = chart.axes.valueAxis; + + // Set vertical axis title. + valueAxis.title.text = "Number of items"; + + // Show small gridlines. + valueAxis.minorGridlines.visible = true; + + categoryAxis.title.load("text"); + valueAxis.load("text"); + valueAxis.minorGridlines.load("visible"); + + await context.sync(); + + console.log("The category axis title is: " + categoryAxis.title.text); + console.log("The value axis title is: " + valueAxis.title.text); + + OfficeHelpers.UI.notify( + "The minor gridlines visibility is set to: " + + valueAxis.minorGridlines.visible + ); + }); + } + + async function setup() { + await Excel.run(async context => { + const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet( + context.workbook, + "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] + ]); + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + } + + const chart = createChart(context); + addVerticalAxisLabel(chart); + sheet.activate(); + + await context.sync(); + }); + } + + function createChart(context: Excel.RequestContext) { + const sheet = context.workbook.worksheets.getItem("Sample"); + const salesTable = sheet.tables.getItem("SalesTable"); + + const dataRange = salesTable.getRange(); + + let chart = sheet.charts.add( + "ColumnClustered", + dataRange, + Excel.ChartSeriesBy.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"; + let points = chart.series.getItemAt(0).points; + + return chart; + } + + function addVerticalAxisLabel(chart: Excel.Chart) { + let axis = chart.axes.valueAxis; + axis.displayUnit = "Thousands"; + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } language: typescript template: content: |- diff --git a/samples/excel/10-chart/chart-series.yaml b/samples/excel/10-chart/chart-series.yaml index af78ceda2..49e2e97a5 100644 --- a/samples/excel/10-chart/chart-series.yaml +++ b/samples/excel/10-chart/chart-series.yaml @@ -1,7 +1,7 @@ order: 8 id: excel-chart-series name: Series -description: 'Adds, sets, and deletes a series in a chart.' +description: Adds and deletes series in a chart. host: EXCEL api_set: ExcelAPI: 1.7 @@ -10,118 +10,104 @@ script: $("#setup").click(() => tryCatch(setup)); $("#add-series").click(() => tryCatch(addSeries)); $("#delete-series").click(() => tryCatch(deleteSeries)); - $("#set-series-value").click(() => tryCatch(setSeriesValue)); async function addSeries() { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + 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"); + 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); + // Add a series. + let newSeries = seriesCollection.series.add("Qtr2"); + newSeries.setValues(rangeSelection); + newSeries.setXAxisValues(xRangeSelection); - await context.sync(); - }); + await context.sync(); + }); } async function deleteSeries() { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + 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(); - let seriesCollection = sheet.charts.getItemAt(0).series; - let series = seriesCollection.getItemAt(0); + if (seriesCollection.count > 0) { + const series = seriesCollection.getItemAt(0); - // Delete the first series. - series.delete(); + // Delete the first series. + series.delete(); + } - await context.sync(); - }); + await context.sync(); + }); } - async function setSeriesValue() { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - let seriesCollection = sheet.charts.getItemAt(0).series; - - // Add new series. - let series = seriesCollection.add("New Product"); - let values = sheet.getRange("E2:E7"); - - // Set the vertical values for the series. - series.setValues(values); - seriesCollection.load("count"); - - await context.sync(); + async function setup() { + await Excel.run(async context => { + const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet( + context.workbook, + "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] + ]); + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + } - OfficeHelpers.UI.notify("Number of series = " + seriesCollection.count); - }); - } + createLineChart(context); + sheet.activate(); - async function setup() { - await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "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] - ]); - - if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } - - createLineChart(context); - sheet.activate(); - - await context.sync(); - }); + await context.sync(); + }); } async function createLineChart(context: Excel.RequestContext) { - const sheet = context.workbook.worksheets.getItem("Sample"); - const salesTable = sheet.tables.getItem("SalesTable"); + const sheet = context.workbook.worksheets.getItem("Sample"); + const salesTable = sheet.tables.getItem("SalesTable"); - let dataRange = sheet.getRange("A1:B7"); - let chart = sheet.charts.add("Line", dataRange, "Auto"); + let dataRange = sheet.getRange("A1:B7"); + let chart = sheet.charts.add("Line", dataRange, "Auto"); - chart.setPosition("A15", "E30"); - chart.legend.position = "Right" - chart.legend.format.fill.setSolidColor("white"); - chart.dataLabels.format.font.size = 15; - chart.dataLabels.format.font.color = "black"; + chart.setPosition("A15", "E30"); + chart.legend.position = "Right"; + chart.legend.format.fill.setSolidColor("white"); + chart.dataLabels.format.font.size = 15; + chart.dataLabels.format.font.color = "black"; } /** Default helper for invoking an action and handling errors. */ async function tryCatch(callback) { - try { - await callback(); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + try { + await callback(); + } catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } } language: typescript template: - content: | + content: |-
-

This sample shows how to add, set, and delete a series in a chart.

+

This sample shows how to add and delete a series in a chart.

@@ -143,12 +129,6 @@ template: Delete series
- -
- -
language: html style: content: |- diff --git a/samples/excel/10-chart/chart-title-substring.yaml b/samples/excel/10-chart/chart-title-format.yaml similarity index 60% rename from samples/excel/10-chart/chart-title-substring.yaml rename to samples/excel/10-chart/chart-title-format.yaml index 29553b6f4..47b5c35c8 100644 --- a/samples/excel/10-chart/chart-title-substring.yaml +++ b/samples/excel/10-chart/chart-title-format.yaml @@ -1,33 +1,65 @@ order: 11 -id: excel-chart-title-substring -name: Title substring -description: Changes the color for a substring in the chart's title. +id: excel-chart-title-format +name: Title format +description: Adjust a chart title's format. host: EXCEL api_set: ExcelApi: 1.7 script: - content: |+ + 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)); + + async function changeTitleFormat() { + await Excel.run(async context => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const title = sheet.charts.getItemAt(0).title; + title.format.fill.setSolidColor("SkyBlue"); + title.format.border.lineStyle = "Dash"; + + await context.sync(); + }); + } async function changeTitleSubstring() { - await Excel.run(async (context) => { + await Excel.run(async context => { let sheet = context.workbook.worksheets.getItem("Sample"); let chart = sheet.charts.getItemAt(0); - - // Get first seven characters of the title and highlight them to green. - let font = chart.title.getSubstring(0, 7).font; - font.color = "Green"; - await context.sync(); + // Get first seven characters of the title and color them green. + chart.title.getSubstring(0, 7).font.color = "Yellow"; + await context.sync(); + }); + } + + async function changeTitleOrientation() { + await Excel.run(async context => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const title = sheet.charts.getItemAt(0).title; + title.textOrientation = -45; + + await context.sync(); + }); + } + + async function addTitleShadow() { + await Excel.run(async context => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const title = sheet.charts.getItemAt(0).title; + title.format.font.size = 16; + title.showShadow = true; + + await context.sync(); }); } async function setup() { - await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); - let expensesTable = sheet.tables.add('A1:E1', true); + await Excel.run(async context => { + const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + let expensesTable = sheet.tables.add("A1:E1", true); expensesTable.name = "SalesTable"; expensesTable.getHeaderRowRange().values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4"]]; @@ -41,11 +73,6 @@ script: ["Spokes", 6005, 7634, 4589, 8765] ]); - if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } - createChart(context); sheet.activate(); @@ -58,7 +85,7 @@ script: let dataRange = sheet.getRange("A3:E7"); let chart = sheet.charts.add("ColumnStacked", dataRange, "Auto"); - chart.title.text = "Bicycle parts sales"; + chart.title.text = "Bicycle Parts Sales"; chart.setPosition("A10", "H33"); chart.legend.position = "Right"; chart.legend.format.fill.setSolidColor("white"); @@ -70,13 +97,11 @@ script: async function tryCatch(callback) { try { await callback(); - } - catch (error) { + } catch (error) { OfficeHelpers.UI.notify(error); OfficeHelpers.Utilities.log(error); } } - language: typescript template: content: |+ @@ -93,6 +118,12 @@ template:

Try it out

+

+ 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 2a91670b4..27ee35287 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 @@ -14,7 +14,6 @@ script: async function createCustomXmlPart() { await Excel.run(async (context) => { - // You must have the xmlns attribute to populate the // CustomXml.namespaceUri property. const originalXml = "JuanHongSally"; @@ -38,33 +37,32 @@ script: async function changeCustomXmlPart() { await Excel.run(async (context) => { const settings = context.workbook.settings; - const xmlPartIDSetting = settings.getItem("ContosoReviewXmlPartId").load("value"); - + 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. customXmlPart.setXml("JohnHitomi"); const xmlBlob = customXmlPart.getXml(); - await context.sync(); const readableXml = addLineBreaksToXML(xmlBlob.value); $("#display-xml").text(readableXml); - await context.sync(); + } }); } async function deleteCustomXmlPart() { await Excel.run(async (context) => { const settings = context.workbook.settings; - const xmlPartIDSetting = settings.getItem("ContosoReviewXmlPartId").load("value"); - + const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); await context.sync(); - + + if (xmlPartIDSetting.value) { let customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); const xmlBlob = customXmlPart.getXml(); customXmlPart.delete(); @@ -84,6 +82,7 @@ script: } await context.sync(); + } }); } diff --git a/samples/excel/30-events/events-chart-activated.yaml b/samples/excel/30-events/events-chart-activated.yaml index afda43798..9235ebd25 100644 --- a/samples/excel/30-events/events-chart-activated.yaml +++ b/samples/excel/30-events/events-chart-activated.yaml @@ -1,4 +1,4 @@ -order: 1 +order: 2 id: excel-events-chart-activated name: Chart events description: Registers event handlers that run when the chart is activated or deactivated. diff --git a/samples/excel/30-events/events-chartcollection-added-activated.yaml b/samples/excel/30-events/events-chartcollection-added-activated.yaml index 9f08fb8a4..9423a6caf 100644 --- a/samples/excel/30-events/events-chartcollection-added-activated.yaml +++ b/samples/excel/30-events/events-chartcollection-added-activated.yaml @@ -1,4 +1,4 @@ -order: 2 +order: 1 id: excel-events-chartcollection-added-activated name: Chart collection events description: 'Registers event handlers that run when a chart collection is activated, deactivated, added, or deleted.' diff --git a/samples/excel/30-events/events-table-changed.yaml b/samples/excel/30-events/events-table-changed.yaml index 38cf325dd..501be0f6c 100644 --- a/samples/excel/30-events/events-table-changed.yaml +++ b/samples/excel/30-events/events-table-changed.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 5 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 5342e1daf..050618bc7 100644 --- a/samples/excel/30-events/events-tablecollection-changed.yaml +++ b/samples/excel/30-events/events-tablecollection-changed.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 6 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-and-worksheet-collection.yaml b/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml new file mode 100644 index 000000000..b0b09d778 --- /dev/null +++ b/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml @@ -0,0 +1,257 @@ +order: 7 +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.' +author: OfficeDev +host: EXCEL +api_set: + ExcelApi: 1.4 +script: + content: |- + $("#register-on-add-handler").click(() => tryCatch(registerOnAddHandler)); + $("#add-worksheet").click(() => tryCatch(addWorksheet)); + + $("#register-on-activate-handler").click(() => tryCatch(registerOnActivateHandler)); + $("#register-on-deactivate-handler").click(() => tryCatch(registerOnDeactivateHandler)); + $("#delete-worksheet").click(() => tryCatch(deleteWorksheet)); + + $("#create-setting").click(() => tryCatch(createSetting)); + $("#change-setting").click(() => tryCatch(changeSetting)); + $("#register-settings-changed-handler").click(() => tryCatch(registerSettingsChangedHandler)); + + async function registerOnAddHandler() { + await Excel.run(async context => { + let sheet = context.workbook.worksheets; + sheet.onAdded.add(onWorksheetAdd); + + await context.sync(); + + OfficeHelpers.UI.notify( + "A handler has been registered for the OnAdded event", + "Try adding a worksheet, and watch the console output." + ); + }); + } + + async function addWorksheet() { + await Excel.run(async context => { + let sheet = context.workbook.worksheets.add(); + sheet.load("name, position"); + + await context.sync(); + console.log('Added worksheet named "${sheet.name}" in position ${sheet.position}'); + }); + } + + 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 + ); + }); + } + + async function registerOnActivateHandler() { + await Excel.run(async context => { + let sheets = context.workbook.worksheets; + sheets.onActivated.add(onActivate); + + await context.sync(); + + OfficeHelpers.UI.notify( + "A handler has been registered for the OnActivate event", + "Try selecting a different worksheet, and watch the console output." + ); + }); + } + + async function onActivate(args) { + await Excel.run(async context => { + console.log("The activated worksheet Id : " + args.worksheetId); + }); + } + + async function registerOnDeactivateHandler() { + await Excel.run(async context => { + let sheets = context.workbook.worksheets; + sheets.onDeactivated.add(onDeactivate); + + await context.sync(); + + OfficeHelpers.UI.notify( + "A handler has been registered for the OnDeactivate event", + "Try selecting a different worksheet, and watch the console output." + ); + }); + } + + async function onDeactivate(args) { + await Excel.run(async context => { + console.log("The deactivated worksheet Id : " + args.worksheetId); + }); + } + + async function deleteWorksheet() { + await Excel.run(async context => { + // Deleting the current worksheet triggers the deactivate event and + // the activate event for the preceding worksheet. + let sheets = context.workbook.worksheets; + sheets.load("items/name"); + + await context.sync(); + + if (sheets.items.length > 1) { + let lastSheet = sheets.items[sheets.items.length - 1]; + lastSheet.delete(); + + console.log(`Deleted worksheet named "${lastSheet.name}"`); + } else { + console.log("Unable to delete worksheet."); + } + }); + } + + async function createSetting() { + await Excel.run(async (context) => { + const settings = context.workbook.settings; + settings.add("NeedsReview", true); + const needsReview = settings.getItem("NeedsReview"); + needsReview.load("value"); + + await context.sync(); + + console.log("Setting value is: " + needsReview.value); + + await context.sync(); + }); + } + + async function registerSettingsChangedHandler() { + await Excel.run(async (context) => { + const settings = context.workbook.settings; + settings.onSettingsChanged.add(onChangedSetting); + OfficeHelpers.UI.notify("Settings changed handler registered", "Press the next button to change the setting, then watch the console."); + + await context.sync(); + }); + } + + async function onChangedSetting(args: Excel.SettingsChangedEventArgs) { + try { + await Excel.run(async (context) => { + const changedSetting = args.settings.getItem("NeedsReview"); + changedSetting.load("value"); + + // Must sync with the context in the EventArgs object, + // not the context that Office passes to Excel.run. + await args.settings.context.sync(); + + console.log("Setting value is: " + changedSetting.value); + await context.sync(); + }); + } + catch (error) { + OfficeHelpers.UI.notify(error); + } + } + + async function changeSetting() { + + // The settings.add function is also how you change a + // setting. There is no settings.setItem or setting.set + // method. For example: + // await Excel.run(async (context) => { + // const settings = context.workbook.settings; + // settings.add("NeedsReview", false); + // await context.sync(); + // }); + // However, a bug prevents the SettingsChanged event + // from firing when a setting is changed with the + // Excel 1.4 Settings APIs. So we must use the Settings + // object from the Office shared APIs: + Office.context.document.settings.set('NeedsReview', false); + await Office.context.document.settings.saveAsync(); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |- +

+

This sample shows how to register and use a handler for the SettingsChanged event.

+
+ +
+

Try it out

+ +

Added

+
+ + +
+ +

Activated/Deactivated

+ + + + +

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 + + @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/samples/excel/30-events/events-worksheet-activated.yaml b/samples/excel/30-events/events-worksheet-activated.yaml deleted file mode 100644 index 5e3a51325..000000000 --- a/samples/excel/30-events/events-worksheet-activated.yaml +++ /dev/null @@ -1,173 +0,0 @@ -order: 9 -id: excel-events-worksheet-activated -name: Worksheet activation events -description: Registers event handlers that run when a worksheet is activated or deactivated. -host: EXCEL -api_set: - ExcelApi: 1.7 -script: - content: |+ - $("#setup").click(() => tryCatch(setup)); - $("#register-on-activate-handler").click(() => tryCatch(registerOnActivateHandler)); - $("#register-on-deactivate-handler").click(() => tryCatch(registerOnDeactivateHandler)); - $("#delete-worksheet").click(() => tryCatch(deleteWorksheet)); - - async function registerOnActivateHandler() { - await Excel.run(async (context) => { - let sheets = context.workbook.worksheets; - sheets.onActivated.add(onActivate); - - await context.sync(); - - OfficeHelpers.UI.notify("A handler has been registered for the OnActivate event", - "Try selecting a different worksheet, and watch the console output."); - }); - } - - async function onActivate(args) { - await Excel.run(async (context) => { - console.log("The activated worksheet Id : " + args.worksheetId); - }); - } - - async function registerOnDeactivateHandler() { - await Excel.run(async (context) => { - let sheets = context.workbook.worksheets; - sheets.onDeactivated.add(onDeactivate); - - await context.sync(); - - OfficeHelpers.UI.notify("A handler has been registered for the OnDeactivate event", - "Try selecting a different worksheet, and watch the console output."); - }); - } - - async function onDeactivate(args) { - await Excel.run(async (context) => { - console.log("The deactivated worksheet Id : " + args.worksheetId); - }); - } - - async function deleteWorksheet() { - await Excel.run(async (context) => { - let sheets = context.workbook.worksheets; - sheets.load("items/name"); - - await context.sync(); - - if (sheets.items.length > 1) { - let lastSheet = sheets.items[sheets.items.length - 1]; - lastSheet.delete(); - - console.log(`Deleted worksheet named "${lastSheet.name}"`); - } - else { - console.log("Unable to delete worksheet."); - } - }); - } - - async function setup() { - await Excel.run(async (context) => { - let sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); - let salesTable = sheet.tables.add('A1:E1', true); - salesTable.name = "SalesTable"; - - salesTable.getHeaderRowRange().values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4"]]; - - salesTable.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] - ]); - - if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { - 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) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - - - - language: typescript -template: - content: | -
-

This sample shows how to add event handlers for worksheet onActivated and onDeactivated events.

-
- -
-

Set up

- -
- -
-

Try it out

- -
- -
- -
- -
-

Deleting the current worksheet triggers the deactivate event and the activate event for the preceding 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 - - @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/samples/excel/30-events/events-worksheet-calculated.yaml b/samples/excel/30-events/events-worksheet-calculated.yaml deleted file mode 100644 index d6d9f4f90..000000000 --- a/samples/excel/30-events/events-worksheet-calculated.yaml +++ /dev/null @@ -1,122 +0,0 @@ -order: 10 -id: excel-events-worksheet-calculated -name: Worksheet calculation event -description: Registers an event handler that runs when the worksheet has recalculated. -host: EXCEL -api_set: - ExcelApi: 1.8 -script: - content: | - $("#setup").click(() => tryCatch(setup)); - $("#register-onCalculated-handler").click(() => tryCatch(registerOnCalculatedHandler)); - $("#recalculate").click(() => tryCatch(recalculate)); - async function registerOnCalculatedHandler() { - await Excel.run(async (context) => { - let sheet = context.workbook.worksheets.getItem("Sample"); - sheet.onCalculated.add(onCalculated); - await context.sync(); - console.log("Added worksheet selection changed event handler."); - }); - } - async function recalculate() { - await Excel.run(async (context) => { - let sheet = context.workbook.worksheets.getItem("Sample"); - - let row = sheet.tables.getItem("SalesTable").rows.getItemAt(0); - let newValue = [["Frames", 5000, 7000, 6544, 1, "=SUM(B2:E2)"]]; - row.values = newValue; - row.load('values'); - await context.sync(); - }); - } - - async function onCalculated(event) { - await Excel.run(async (context) => { - console.log("The worksheet has recalculated."); - }); - } - async function setup() { - await Excel.run(async (context) => { - let sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); - let salesTable = sheet.tables.add('A1:F1', true); - salesTable.name = "SalesTable"; - salesTable.getHeaderRowRange().values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4", "Total"]]; - salesTable.rows.add(null, [ - ["Frames", 5000, 7000, 6544, 4377, "=SUM(B2:E2)"], - ["Saddles", 400, 323, 276, 651, "=SUM(B3:E3)"], - ["Brake levers", 12000, 8766, 8456, 9812, "=SUM(B4:E4)"], - ["Chains", 1550, 1088, 692, 853, "=SUM(B5:E5)"], - ["Mirrors", 225, 600, 923, 544, "=SUM(B6:E6)"], - ["Spokes", 6005, 7634, 4589, 8765, "=SUM(B7:E7)"] - ]); - if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { - 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) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - language: typescript -template: - content: | -
-

This sample shows how to add an event handler for the worksheet onCalculated event.

-
-
-

Set up

- -
-
-

Press the Register onCalculated handler button and then manually trigger a recalculation by, for example, changing data in a data cell. Watch the console.

- -
-
-

Next press the second button to force a recalculation programmatically.

- -
- 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 - - @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/samples/excel/30-events/events-worksheet-changed.yaml b/samples/excel/30-events/events-worksheet-changed.yaml deleted file mode 100644 index 0aca0d583..000000000 --- a/samples/excel/30-events/events-worksheet-changed.yaml +++ /dev/null @@ -1,187 +0,0 @@ -order: 11 -id: excel-events-worksheet-changed -name: Worksheet change and addition events -description: Registers event handlers that runs when a worksheet is added or changed. -host: EXCEL -api_set: - ExcelApi: 1.7 -script: - content: |+ - $("#setup").click(() => tryCatch(setup)); - $("#register-on-changed-handler").click(() => tryCatch(registerOnChangedHandler)); - $("#data-changed").click(() => tryCatch(changeData)); - $("#register-on-add-handler").click(() => tryCatch(registerOnAddHandler)); - $("#add-worksheet").click(() => tryCatch(addWorksheet)); - - async function registerOnChangedHandler() { - await Excel.run(async (context) => { - let sheet = context.workbook.worksheets.getItem("Sample"); - sheet.onChanged.add(onChange); - - await context.sync(); - - OfficeHelpers.UI.notify("A handler has been registered for the onChanged event."); - }); - } - - async function changeData() { - await Excel.run(async (context) => { - let sheet = context.workbook.worksheets.getItem("Sample"); - let range = sheet.getRange("B5"); - range.values = [[800]]; - range.format.autofitColumns(); - - await context.sync(); - - console.log("B5 value has been changed."); - }); - } - - async function onChange(event) { - await Excel.run(async (context) => { - console.log("Handler for worksheet onChanged event has been triggered. Data changed address : " + event.address); - }); - } - - async function registerOnAddHandler() { - await Excel.run(async (context) => { - let sheet = context.workbook.worksheets; - sheet.onAdded.add(onWorksheetAdd); - - await context.sync(); - - OfficeHelpers.UI.notify("A handler has been registered for the OnAdded event", - "Try adding a worksheet, and watch the console output."); - }); - } - - async function addWorksheet() { - await Excel.run(async (context) => { - let sheet = context.workbook.worksheets.add(); - sheet.load("name, position"); - - await context.sync(); - - console.log(`Added worksheet named "${sheet.name}" in position ${sheet.position}`); - }); - } - - 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); - }); - } - - async function setup() { - await Excel.run(async (context) => { - let sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); - let salesTable = sheet.tables.add('A1:E1', true); - salesTable.name = "SalesTable"; - - salesTable.getHeaderRowRange().values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4"]]; - - salesTable.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] - ]); - - if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { - 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) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - - - - language: typescript -template: - content: |+ -
-

This sample shows how to add event handlers for worksheet onChanged and onAdded events.

-
- -
-

Set up

- -
- -
-

Try it out

- -
- -
-

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

- -
- -
- -
- -
-

Adding a worksheet triggers the on added event. You can add a worksheet manually or programmatically.

- -
- - - 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 - - @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 diff --git a/samples/excel/30-events/events-worksheet-selectionchanged.yaml b/samples/excel/30-events/events-worksheet-selectionchanged.yaml deleted file mode 100644 index a76cc2320..000000000 --- a/samples/excel/30-events/events-worksheet-selectionchanged.yaml +++ /dev/null @@ -1,141 +0,0 @@ -order: 13 -id: excel-events-worksheet-selectionchanged -name: Worksheet selection change event -description: Registers an event handler that runs when the selected worksheet changes. -host: EXCEL -api_set: - ExcelApi: 1.7 -script: - content: |+ - $("#setup").click(() => tryCatch(setup)); - $("#register-on-selection-changed-handler").click(() => tryCatch(registerSelectionChangedHandler)); - $("#select-range").click(() => tryCatch(selectRange)); - - async function registerSelectionChangedHandler() { - await Excel.run(async (context) => { - - let sheet = context.workbook.worksheets.getItem("Sample"); - sheet.onSelectionChanged.add(onSelectionChange); - - await context.sync(); - - console.log("Added worksheet selection changed event handler."); - }); - } - - async function selectRange() { - await Excel.run(async (context) => { - let sheet = context.workbook.worksheets.getItem("Sample"); - let range = sheet.getRange("B7:C7"); - range.select(); - - await context.sync(); - }); - } - - async function onSelectionChange(event) { - await Excel.run(async (context) => { - console.log("The selected range has changed to: " + event.address); - }); - } - - async function setup() { - await Excel.run(async (context) => { - let sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); - let salesTable = sheet.tables.add('A1:E1', true); - salesTable.name = "SalesTable"; - - salesTable.getHeaderRowRange().values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4"]]; - - salesTable.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] - ]); - - if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { - 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) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - - - - language: typescript -template: - content: |+ -
-

This sample shows how to add an event handler for the worksheet onSelectionChanged event.

-
- -
-

Set up

- -
- - -
-

Press the button and select a range manually. Watch the console. Next press the second button to select a range programmatically.

- -
- - -
- -
- - 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 - - @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/samples/excel/30-events/events-worksheet.yaml b/samples/excel/30-events/events-worksheet.yaml new file mode 100644 index 000000000..b5a66fd88 --- /dev/null +++ b/samples/excel/30-events/events-worksheet.yaml @@ -0,0 +1,202 @@ +order: 8 +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.' +author: OfficeDev +host: EXCEL +api_set: + ExcelApi: 1.1 +script: + content: |- + $("#setup").click(() => tryCatch(setup)); + + $("#register-on-selection-changed-handler").click(() => tryCatch(registerSelectionChangedHandler)); + $("#select-range").click(() => tryCatch(selectRange)); + + $("#register-on-changed-handler").click(() => tryCatch(registerOnChangedHandler)); + $("#register-onCalculated-handler").click(() => tryCatch(registerOnCalculatedHandler)); + $("#recalculate").click(() => tryCatch(recalculate)); + + async function registerSelectionChangedHandler() { + await Excel.run(async context => { + let sheet = context.workbook.worksheets.getItem("Sample"); + sheet.onSelectionChanged.add(onSelectionChange); + await context.sync(); + + OfficeHelpers.UI.notify("Press the button and select a range manually. Watch the console. Next press the second button to select a range programmatically."); + }); + } + + async function selectRange() { + await Excel.run(async context => { + let sheet = context.workbook.worksheets.getItem("Sample"); + let range = sheet.getRange("B7:C7"); + range.select(); + + await context.sync(); + }); + } + + async function onSelectionChange(event) { + await Excel.run(async context => { + console.log("The selected range has changed to: " + event.address); + }); + } + + async function registerOnCalculatedHandler() { + await Excel.run(async context => { + let sheet = context.workbook.worksheets.getItem("Sample"); + sheet.onCalculated.add(onCalculated); + await context.sync(); + console.log("Added worksheet selection changed event handler."); + }); + } + + async function recalculate() { + await Excel.run(async context => { + let sheet = context.workbook.worksheets.getItem("Sample"); + let randomResult = context.workbook.functions.randBetween(1, 3000).load("value"); + await context.sync(); + + let row = sheet.tables.getItem("SalesTable").rows.getItemAt(0); + let newValue = [["Frames", 5000, 7000, 6544, randomResult.value, "=SUM(B2:E2)"]]; + row.values = newValue; + row.load("values"); + await context.sync(); + }); + } + + async function onCalculated(event) { + await Excel.run(async context => { + console.log("The worksheet has recalculated."); + }); + } + + async function registerOnChangedHandler() { + await Excel.run(async context => { + let sheet = context.workbook.worksheets.getItem("Sample"); + sheet.onChanged.add(onChange); + + await context.sync(); + + OfficeHelpers.UI.notify("A handler has been registered for the onChanged event."); + }); + } + + async function changeData() { + await Excel.run(async context => { + let sheet = context.workbook.worksheets.getItem("Sample"); + let range = sheet.getRange("B5"); + range.values = [[800]]; + range.format.autofitColumns(); + + await context.sync(); + + console.log("B5 value has been changed."); + }); + } + + async function onChange(event) { + await Excel.run(async context => { + console.log( + "Handler for worksheet onChanged event has been triggered. Data changed address : " + + event.address + ); + }); + } + + async function setup() { + await Excel.run(async context => { + let sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + let salesTable = sheet.tables.add("A1:F1", true); + salesTable.name = "SalesTable"; + + salesTable.getHeaderRowRange().values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4", "Total"]]; + + salesTable.rows.add(null, [ + ["Frames", 5000, 7000, 6544, 4377, "=SUM(B2:E2)"], + ["Saddles", 400, 323, 276, 651, "=SUM(B3:E3)"], + ["Brake levers", 12000, 8766, 8456, 9812, "=SUM(B4:E4)"], + ["Chains", 1550, 1088, 692, 853, "=SUM(B5:E5)"], + ["Mirrors", 225, 600, 923, 544, "=SUM(B6:E6)"], + ["Spokes", 6005, 7634, 4589, 8765, "=SUM(B7:E7)"] + ]); + + sheet.activate(); + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |- +
+

This sample shows how to add an event handler for the worksheet onSelectionChanged event.

+
+ +
+

Set up

+ +
+ +
+

Try it out

+ +

Selection Changed

+ + +

Changed and Calculated

+ + + +
+ 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 + + @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/samples/excel/30-events/events-worksheetcollection-calculated.yaml b/samples/excel/30-events/events-worksheetcollection-calculated.yaml deleted file mode 100644 index b22126084..000000000 --- a/samples/excel/30-events/events-worksheetcollection-calculated.yaml +++ /dev/null @@ -1,160 +0,0 @@ -order: 12 -id: excel-events-worksheetcollection-calculated -name: Worksheet collection calculation event -description: Registers an event handler that runs when the worksheet collection recalculates. -host: EXCEL -api_set: - ExcelApi: 1.8 -script: - content: |+ - $("#setup").click(() => tryCatch(setup)); - $("#register-onCalculated-handler").click(() => tryCatch(registerOnCalculatedHandler)); - $("#recalculate").click(() => tryCatch(recalculate)); - - async function registerOnCalculatedHandler() { - await Excel.run(async (context) => { - - context.workbook.worksheets.onCalculated.add(onAllSheetsCalculated); - - await context.sync(); - - console.log("Added WorksheetCollection.onCalculated event handler."); - }); - } - - async function recalculate() { - await Excel.run(async (context) => { - let sheet = context.workbook.worksheets.getItem("Fruit Sales"); - sheet.calculate(true); - - await context.sync(); - }); - } - - async function onAllSheetsCalculated(event) { - await Excel.run(async (context) => { - console.log("All worksheets have recalculated."); - }); - } - - async function setup() { - await Excel.run(async (context) => { - let currentSheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Fruit Sales"); - let fruitTable = currentSheet.tables.add('A1:F1', true); - fruitTable.name = "FruitTable"; - - fruitTable.getHeaderRowRange().values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4", "Total"]]; - - fruitTable.rows.add(null, [ - ["Apples", 135, 700, 654, 437, "=SUM(B2:E2)"], - ["Oranges", 40, 32, 27, 51, "=SUM(B3:E3)"], - ["Mangoes", 2000, 766, 456, 812, "=SUM(B4:E4)"], - ["Limes", 550, 088, 92, 53, "=SUM(B5:E5)"], - ["Lemons", 25, 60, 23, 54, "=SUM(B6:E6)"], - ["Melons", 600, 763, 589, 765, "=SUM(B7:E7)"] - ]); - - if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { - currentSheet.getUsedRange().format.autofitColumns(); - currentSheet.getUsedRange().format.autofitRows(); - } - - let sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Bicycle Sales"); - let salesTable = sheet.tables.add('A1:F1', true); - salesTable.name = "SalesTable"; - - salesTable.getHeaderRowRange().values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4", "Total"]]; - - salesTable.rows.add(null, [ - ["Frames", 5000, 7000, 6544, 4377, "=SUM(B2:E2)"], - ["Saddles", 400, 323, 276, 651, "=SUM(B3:E3)"], - ["Brake levers", 12000, 8766, 8456, 9812, "=SUM(B4:E4)"], - ["Chains", 1550, 1088, 692, 853, "=SUM(B5:E5)"], - ["Mirrors", 225, 600, 923, 544, "=SUM(B6:E6)"], - ["Spokes", 6005, 7634, 4589, 8765, "=SUM(B7:E7)"] - ]); - - if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { - 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) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - - - - language: typescript -template: - content: |+ -
-

This sample shows how to add an event handler for the WorksheetCollection.onCalculated event.

-
- -
-

Set up

- -
- - -
-

Press the Register onCalculated handler button, and then manually trigger a recalculation by, for example, changing data in a data cell. Watch the console.

Next, manually trigger recalculation on the other sheet.

Finally, with the Bicycle Sales sheet selected, press the Recalculate Fruit Sales button to force a recalculation of the Fruit Sales sheet programmatically.

- -
- - -
- -
- - 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 - - @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/samples/excel/30-events/selection-changed.yaml b/samples/excel/30-events/selection-changed.yaml deleted file mode 100644 index 43315a9dc..000000000 --- a/samples/excel/30-events/selection-changed.yaml +++ /dev/null @@ -1,135 +0,0 @@ -order: 5 -id: excel-events-selection-changed -name: Selection event -description: Registers an event handler that runs when the selection changes in the workbook. -host: EXCEL -api_set: - ExcelApi: 1.2 -script: - content: | - $("#add-event-handler").click(addEventHandler); - $("#remove-last-event-handler").click(removeLastEventHandler); - $("#remove-all-event-handlers").click(removeAllEventHandlers); - - let eventHandlers: Array<{ - workbook: Excel.Workbook, - handler: OfficeExtension.EventHandlerResult - }> = []; - - function addEventHandler() { - tryCatch(() => Excel.run(async (context) => { - let workbook = context.workbook; - let handler = workbook.onSelectionChanged.add(onSelectionChanged); - eventHandlers.push({ workbook, handler }); - - await context.sync(); - - OfficeHelpers.UI.notify("Event handler added", - "Try changing the selection, and watch the console output."); - })); - } - - async function removeLastEventHandler() { - let lastEventHandler = eventHandlers.pop(); - if (!lastEventHandler) { - OfficeHelpers.UI.notify("No event handlers added"); - return; - } - - let workbook = lastEventHandler.workbook; - tryCatch(() => Excel.run(workbook, async (context) => { - lastEventHandler.handler.remove(); - await context.sync(); - })); - } - - async function removeAllEventHandlers() { - if (eventHandlers.length === 0) { - OfficeHelpers.UI.notify("No event handlers added"); - return; - } - - tryCatch(async () => { - while (eventHandlers.length > 0) { - const lastEventHandler = eventHandlers.pop(); - await Excel.run(lastEventHandler.workbook, async (context) => { - lastEventHandler.handler.remove(); - await context.sync(); - }); - } - - OfficeHelpers.UI.notify("All event handlers removed"); - }) - } - - async function onSelectionChanged() { - tryCatch(() => Excel.run(async (context) => { - const range = context.workbook.getSelectedRange(); - range.format.fill.color = "yellow"; - range.load("address"); - - await context.sync(); - - console.log(`New selection is ${range.address}`); - })); - } - - - /** Default helper for invoking an action and handling errors. */ - async function tryCatch(callback: () => OfficeExtension.IPromise) { - try { - await callback(); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - language: typescript -template: - content: | -
-

This sample shows how to add and remove an event handler on the selection changed event using the Excel JavaScript API.

-
- -
-

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 - - @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/samples/excel/30-events/setting-changed.yaml b/samples/excel/30-events/setting-changed.yaml deleted file mode 100644 index 145915dd9..000000000 --- a/samples/excel/30-events/setting-changed.yaml +++ /dev/null @@ -1,139 +0,0 @@ -order: 8 -id: excel-events-setting-changed -name: Workbook events -description: Registers an event handler that runs when the workbook's settings change. -author: OfficeDev -host: EXCEL -api_set: - ExcelApi: 1.4 -script: - content: | - $("#create-setting").click(() => tryCatch(createSetting)); - $("#change-setting").click(() => tryCatch(changeSetting)); - $("#register-settings-changed-handler").click(() => tryCatch(registerSettingsChangedHandler)); - - async function createSetting() { - await Excel.run(async (context) => { - const settings = context.workbook.settings; - settings.add("NeedsReview", true); - const needsReview = settings.getItem("NeedsReview"); - needsReview.load("value"); - - await context.sync(); - - OfficeHelpers.UI.notify("Setting added", `Setting value is: ${needsReview.value}`); - - await context.sync(); - }); - } - - async function registerSettingsChangedHandler() { - await Excel.run(async (context) => { - const settings = context.workbook.settings; - settings.onSettingsChanged.add(onChangedSetting); - OfficeHelpers.UI.notify("Handler registered", ""); - - await context.sync(); - }); - } - - async function onChangedSetting(args: Excel.SettingsChangedEventArgs) { - try { - await Excel.run(async (context) => { - const changedSetting = args.settings.getItem("NeedsReview"); - changedSetting.load("value"); - - // Must sync with the context in the EventArgs - // object, not the context that Office passes to - // Excel.run. - await args.settings.context.sync(); - - OfficeHelpers.UI.notify("Setting changed", `The new value is: ${changedSetting.value}`); - - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - } - } - - async function changeSetting() { - - // The settings.add function is also how you change a - // setting. There is no settings.setItem or setting.set - // method. For example: - // await Excel.run(async (context) => { - // const settings = context.workbook.settings; - // settings.add("NeedsReview", false); - // await context.sync(); - // }); - // However, a bug prevents the SettingsChanged event - // from firing when a setting is changed with the - // Excel 1.4 Settings APIs. So we must use the Settings - // object from the Office shared APIs: - Office.context.document.settings.set('NeedsReview', false); - await Office.context.document.settings.saveAsync(); - } - - /** Default helper for invoking an action and handling errors. */ - async function tryCatch(callback) { - try { - await callback(); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - language: typescript -template: - content: |- -
-

This sample shows how to register and use a handler for the SettingsChanged event.

-
- -
-

Try it out

-

Press the button to create and display a setting.

- -

Press the button to register a settings-changed handler.

- -

Press the button to change a setting and trigger the 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/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 - - @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/samples/excel/34-named-item/create-and-remove-named-item.yaml b/samples/excel/34-named-item/create-and-remove-named-item.yaml index 9b3149dc6..1b2a55662 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,141 +1,186 @@ order: 1 id: excel-named-item-create-and-remove-named-item -name: Create and remove -description: Creates and removes named items for a formula. +name: 'Create, access, and remove' +description: 'Creates, accesses, and removes named items in a worksheet.' host: EXCEL api_set: ExcelApi: 1.4 script: - content: | - $("#add-name").click(addName); - $("#remove-name").click(removeName); - $("#setup").click(setup); + content: |- + $("#setup").click(() => tryCatch(setup)); - async function addName() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - sheet.names.add("TotalAmount", "=SUM(ExpensesTable[AMOUNT])"); - sheet.getRange("D11").values = [["=TotalAmount"]]; - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + $("#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)); + + async function addNameToTotal() { + await Excel.run(async context => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + sheet.names.add("TotalAmount", "=SUM(ExpensesTable[AMOUNT])"); + sheet.getRange("D11").values = [["=TotalAmount"]]; + + await context.sync(); + }); } - async function removeName() { - try { - await Excel.run(async (context) => { + async function addNameToHeader() { + await Excel.run(async context => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const headerRange = sheet.getRange("A1:D1"); + + sheet.names.add("ExpensesHeader", headerRange); + const namedItems = sheet.names.load("name, type"); + + await context.sync(); + }); + } - const sheet = context.workbook.worksheets.getItem("Sample"); + async function formatRangeByName() { + await Excel.run(async context => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const headerRowName = sheet.names.getItemOrNullObject("ExpensesHeader"); + headerRowName.load(); + await context.sync(); + + if (headerRowName.value) { + const headerRange = headerRowName.getRange(); + headerRange.format.fill.color = "red"; + } else { + console.log("No named item created for the range."); + } + + await context.sync(); + }); + } + + async function removeName() { + await Excel.run(async context => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const totalName = sheet.names.getItemOrNullObject("TotalAmount"); + totalName.load(); + await context.sync(); - sheet.names.getItem("TotalAmount").delete(); + if (totalName.value) { + totalName.delete(); // Replace the named item (TotalAmount) with the actual formula for TotalAmount to avoid displaying #NAME in the cell. sheet.getRange("D11").values = [["=SUM(ExpensesTable[AMOUNT])"]]; + } else { + console.log("No named item created for the formula."); + } - await context.sync(); - - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + await context.sync(); + }); } - async function setup() { - try { - await Excel.run(async (context) => { + async function listNamedItems() { + await Excel.run(async context => { + const namedItems = context.workbook.worksheets.getActiveWorksheet().names.load(); + await context.sync(); - let sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + console.log("This worksheet contains " + namedItems.items.length + " named items."); - let expensesTable = sheet.tables.add("A1:D1", true); - expensesTable.name = "ExpensesTable"; + for (let i = 0; i < namedItems.items.length; i++) { + console.log(JSON.stringify(namedItems.items[i])) + "\n"; + } - expensesTable.getHeaderRowRange().values = [["Date", "Merchant", "Category", "Amount"]]; + await context.sync(); + }); + } - let newData = transactions.map(item => - [item.date, item.merchant, item.category, item.amount]); + async function setup() { + await Excel.run(async context => { + let sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + let expensesTable = sheet.tables.add("A1:D1", true); + expensesTable.name = "ExpensesTable"; + expensesTable.getHeaderRowRange().values = [["Date", "Merchant", "Category", "Amount"]]; + + let newData = transactions.map(item => [item.date, item.merchant, item.category, item.amount + ]); + + expensesTable.rows.add(null, newData); + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + sheet.activate(); + + await context.sync(); + }); + } - expensesTable.rows.add(null, newData); - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - sheet.activate(); + const transactions = [ + { + date: "1/1/2017", + merchant: "The Phone Company", + category: "Communications", + amount: "$120" + }, + { + date: "1/1/2017", + merchant: "SouthRidge Video", + category: "Entertainment", + amount: "$40" + }, + { + date: "1/1/2017", + merchant: "Coho Winery", + category: "Restaurant", + amount: "$47" + }, + { + date: "1/2/2017", + merchant: "Contoso, Ltd", + category: "Shopping", + amount: "$56" + }, + { + date: "1/2/2017", + merchant: "Contoso, Ltd", + category: "Shopping", + amount: "$110" + }, + { + date: "1/2/2017", + merchant: "Liberty Bakery & Cafe", + category: "Groceries", + amount: "$27" + }, + { + date: "1/2/2017", + merchant: "Liberty Bakery & Cafe", + category: "Groceries", + amount: "$38" + }, + { + date: "1/2/2017", + merchant: "Northwind Electric Cars", + category: "Transportation", + amount: "$42" + }, + { + date: "1/2/2017", + merchant: "Best For You Organics Company", + category: "Groceries", + amount: "$27" + } + ]; - await context.sync(); - }); - } - catch (error) { + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { OfficeHelpers.UI.notify(error); OfficeHelpers.Utilities.log(error); } } - - const transactions = [ - { - "date": "1/1/2017", - "merchant": "The Phone Company", - "category": "Communications", - "amount": "$120" - }, - { - "date": "1/1/2017", - "merchant": "SouthRidge Video", - "category": "Entertainment", - "amount": "$40" - }, - { - "date": "1/1/2017", - "merchant": "Coho Winery", - "category": "Restaurant", - "amount": "$47" - }, - { - "date": "1/2/2017", - "merchant": "Contoso, Ltd", - "category": "Shopping", - "amount": "$56" - }, - { - "date": "1/2/2017", - "merchant": "Contoso, Ltd", - "category": "Shopping", - "amount": "$110" - }, - { - "date": "1/2/2017", - "merchant": "Liberty Bakery & Cafe", - "category": "Groceries", - "amount": "$27" - }, - { - "date": "1/2/2017", - "merchant": "Liberty Bakery & Cafe", - "category": "Groceries", - "amount": "$38" - }, - { - "date": "1/2/2017", - "merchant": "Northwind Electric Cars", - "category": "Transportation", - "amount": "$42" - }, - { - "date": "1/2/2017", - "merchant": "Best For You Organics Company", - "category": "Groceries", - "amount": "$27" - } - ]; language: typescript template: - content: |+ + content: |
-

This sample shows how to create a named item using the Excel JavaScript API.

+

This sample shows how to create, access, and delete named items using the Excel JavaScript API.

@@ -144,14 +189,23 @@ template: Add sample data

Try it out

- + + +
- language: html style: content: |- diff --git a/samples/excel/34-named-item/create-and-use-named-item-for-range.yaml b/samples/excel/34-named-item/create-and-use-named-item-for-range.yaml deleted file mode 100644 index 592df3ab2..000000000 --- a/samples/excel/34-named-item/create-and-use-named-item-for-range.yaml +++ /dev/null @@ -1,179 +0,0 @@ -order: 3 -id: excel-create-and-use-named-item-for-range -name: Use named range item -description: Creates and uses a named range item. -author: OfficeDev -host: EXCEL -api_set: - ExcelApi: 1.4 -script: - content: |- - $("#add-name").click(() => tryCatch(addName)); - $("#format-named-range").click(() => tryCatch(formatRangeByName)); - $("#setup").click(() => tryCatch(setup)); - - async function addName() { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const headerRange = sheet.getRange("A1:E1"); - sheet.names.add("ExpensesHeader", headerRange); - const namedItems = sheet.names.load("name, type"); - - await context.sync(); - - let namedItemsList = `This workbook contains ${namedItems.items.length} named item(s):`; - for (let i = 0; i < namedItems.items.length; i++) { - namedItemsList += JSON.stringify(namedItems.items[i]); - } - OfficeHelpers.UI.notify(namedItemsList); - - await context.sync(); - }); - } - - async function formatRangeByName() { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const headerRowName = sheet.names.getItem("ExpensesHeader"); - const headerRange = headerRowName.getRange(); - headerRange.format.fill.color = "red"; - - await context.sync(); - }); - } - - async function setup() { - await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - const expensesTable = sheet.tables.add("A1:D1", true); - expensesTable.name = "ExpensesTable"; - expensesTable.getHeaderRowRange().values = [["Date", "Merchant", "Category", "Amount"]]; - const newData = transactions.map(item => - [item.date, item.merchant, item.category, item.amount]); - expensesTable.rows.add(null, // Row position (null = at the bottom) - newData); - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - sheet.activate(); - - await context.sync(); - }); - } - - const transactions = [ - { - "date": "1/1/2017", - "merchant": "The Phone Company", - "category": "Communications", - "amount": "$120" - }, - { - "date": "1/1/2017", - "merchant": "SouthRidge Video", - "category": "Entertainment", - "amount": "$40" - }, - { - "date": "1/1/2017", - "merchant": "Coho Winery", - "category": "Restaurant", - "amount": "$47" - }, - { - "date": "1/2/2017", - "merchant": "Contoso, Ltd", - "category": "Shopping", - "amount": "$56" - }, - { - "date": "1/2/2017", - "merchant": "Contoso, Ltd", - "category": "Shopping", - "amount": "$110" - }, - { - "date": "1/2/2017", - "merchant": "Liberty Bakery & Cafe", - "category": "Groceries", - "amount": "$27" - }, - { - "date": "1/2/2017", - "merchant": "Liberty Bakery & Cafe", - "category": "Groceries", - "amount": "$38" - }, - { - "date": "1/2/2017", - "merchant": "Northwind Electric Cars", - "category": "Transportation", - "amount": "$42" - }, - { - "date": "1/2/2017", - "merchant": "Best For You Organics Company", - "category": "Groceries", - "amount": "$27" - } - ]; - - /** Default helper for invoking an action and handling errors. */ - async function tryCatch(callback) { - try { - await callback(); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - language: typescript -template: - content: |+ -
-

This sample shows how to create a named item using the Excel JavaScript API.

-
- -
-

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 - @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 - - @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/samples/excel/34-named-item/list-named-items.yaml b/samples/excel/34-named-item/list-named-items.yaml deleted file mode 100644 index 4a08c4864..000000000 --- a/samples/excel/34-named-item/list-named-items.yaml +++ /dev/null @@ -1,74 +0,0 @@ -order: 2 -id: excel-named-item-list-named-items -name: List all -description: Lists all the named items in a workbook. -author: OfficeDev -host: EXCEL -api_set: - ExcelApi: 1.3 -script: - content: |- - $("#list-named-items").click(listNamedItems); - - async function listNamedItems() { - try { - await Excel.run(async (context) => { - - const namedItems = context.workbook.names.load(); - await context.sync(); - - console.log("This workbook contains " + namedItems.items.length + " named items."); - - for (let i = 0; i < namedItems.items.length; i++) { - console.log(JSON.stringify(namedItems.items[i])) + "\n"; - } - await context.sync(); - }) - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - language: typescript -template: - content: |- -
-

This sample shows how to list all the defined named ranges using the Excel JavaScript API. Note that this snippet lists the results in the console below.

-
- -
-

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 - - @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/samples/excel/34-named-item/update-named-item.yaml b/samples/excel/34-named-item/update-named-item.yaml index b3a9fd3a3..7566ed9af 100644 --- a/samples/excel/34-named-item/update-named-item.yaml +++ b/samples/excel/34-named-item/update-named-item.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 2 id: excel-update-named-item name: Update description: Creates and then updates a named item. @@ -19,9 +19,7 @@ script: // Add named item for the first range const firstRange = sheet.getRange("B2:E7"); sheet.names.add("MyRange", firstRange); - const namedItems = sheet.names.load("name, formula"); - firstRange.select(); await context.sync(); @@ -37,18 +35,14 @@ script: // Get the named item const myNamedItem = sheet.names.getItemOrNullObject("MyRange"); myNamedItem.load("name, formula"); - await context.sync(); if (myNamedItem.isNullObject) { OfficeHelpers.UI.notify(`There is no named item with the name "MyRange".`); - } else { - + } else { // Update named item to point to the second range myNamedItem.formula = "=Sample!$B$10:$D$14"; - sheet.getRange("B10:D14").select(); - await context.sync(); OfficeHelpers.UI.notify(`Just updated the named item "${myNamedItem.name}" -- it's now located here: ${myNamedItem.formula}`); @@ -58,7 +52,6 @@ script: async function setup() { await Excel.run(async (context) => { - // Create and activate the worksheet const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); sheet.activate(); diff --git a/samples/excel/38-pivottable/refresh-pivot-table.yaml b/samples/excel/38-pivottable/refresh-pivot-table.yaml deleted file mode 100644 index 728c8d691..000000000 --- a/samples/excel/38-pivottable/refresh-pivot-table.yaml +++ /dev/null @@ -1,137 +0,0 @@ -order: 4 -id: excel-pivottable-refresh-pivot-table -name: Refresh -description: Refreshes a PivotTable. -author: OfficeDev -host: EXCEL -api_set: - ExcelApi: 1.3 -script: - content: |+ - $("#setup").click(setup); - $("#refresh-pivot-table").click(refreshPivotTable); - - async function refreshPivotTable() { - await Excel.run(async (context) => { - try { - const sheet = context.workbook.worksheets.getItem("Sample"); - - // First, force a change in the table data by setting the value of Amount in the third row to $500 - const expensesTable = sheet.tables.getItem("ExpensesTable"); - - const range = expensesTable.columns.getItem("Amount").getDataBodyRange().getRow(2).values = [["$500"]]; - - await sheet.context.sync(); - - // Now, refresh the pivot table. This should pick up our changes made with code as well as any changes made in the UI - const expensesPivot = sheet.pivotTables.getItem("PivotTable1"); - - expensesPivot.refresh(); - - await context.sync(); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - }) - } - - /** Create a new table with some sample data */ - async function setup() { - try { - await Excel.run(async (context) => { - - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - - const sheet = context.workbook.worksheets.getItem("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"] - ]); - - if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } - - sheet.activate(); - - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - - language: typescript -template: - content: |+ -
-

This sample shows how to refresh a PivotTable using the Excel JavaScript API.

-
- -
-

Set up

- -

Next, click inside the table and insert a PivotTable using the Insert menu in Excel, specifying the following options.

-

    -
  1. Choose Existing sheet.
  2. -
  3. Specify A15 as the location.
  4. -
  5. Select the Amount and Category columns.
  6. -
  7. Make sure the name of the PivotTable in the UI matches with the name specified in code.
  8. -
-
- -
-

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 - - @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/samples/excel/42-range/formatting.yaml b/samples/excel/42-range/formatting.yaml index d4fc92b8f..514d39a4a 100644 --- a/samples/excel/42-range/formatting.yaml +++ b/samples/excel/42-range/formatting.yaml @@ -8,72 +8,65 @@ api_set: ExcelApi: 1.1 script: content: | - $("#setup").click(setup); + $("#setup").click(() => tryCatch(setup)); - $("#set-font-and-fill-color").click(setFontAndFillColor); - $("#set-number-format").click(setNumberFormat); + $("#set-font-and-fill-color").click(() => tryCatch(setFontAndFillColor)); + $("#set-number-format").click(() => tryCatch(setNumberFormat)); async function setFontAndFillColor() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); - const range = sheet.getRange("B2:E2"); - range.format.fill.color = "#4472C4";; - range.format.font.color = "white"; + const range = sheet.getRange("B2:E2"); + range.format.fill.color = "#4472C4";; + range.format.font.color = "white"; - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + await context.sync(); + }); } async function setNumberFormat() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - const formats = [ - ["0.00", "0.00"], - ["0.00", "0.00"], - ["0.00", "0.00"] - ]; - - const range = sheet.getRange("D3:E5"); - range.numberFormat = formats; - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + const formats = [ + ["0.00", "0.00"], + ["0.00", "0.00"], + ["0.00", "0.00"] + ]; + + const range = sheet.getRange("D3:E5"); + range.numberFormat = formats; + await context.sync(); + }); } async function setup() { + await Excel.run(async (context) => { + const sheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "Sample"); + + const data = [ + ["Product", "Qty", "Unit Price", "Total Price"], + ["Almonds", 2, 7.50, "=C3 * D3"], + ["Coffee", 1, 34.50, "=C4 * D4"], + ["Chocolate", 5, 9.56, "=C5 * D5"] + ]; + + const range = sheet.getRange("B2:E5"); + range.values = data; + range.format.autofitColumns(); + + sheet.activate(); + + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { - await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); - - const data = [ - ["Product", "Qty", "Unit Price", "Total Price"], - ["Almonds", 2, 7.50, "=C3 * D3"], - ["Coffee", 1, 34.50, "=C4 * D4"], - ["Chocolate", 5, 9.56, "=C5 * D5"] - ]; - - const range = sheet.getRange("B2:E5"); - range.values = data; - range.format.autofitColumns(); - - sheet.activate(); - - await context.sync(); - }); + await callback(); } catch (error) { OfficeHelpers.UI.notify(error); diff --git a/samples/excel/42-range/insert-delete-clear-range.yaml b/samples/excel/42-range/insert-delete-clear-range.yaml index 4bd85af23..38be7cb2c 100644 --- a/samples/excel/42-range/insert-delete-clear-range.yaml +++ b/samples/excel/42-range/insert-delete-clear-range.yaml @@ -8,88 +8,75 @@ api_set: ExcelApi: 1.1 script: content: | - $("#setup").click(setup); + $("#setup").click(() => tryCatch(setup)); - $("#insert-range").click(insertRange); - $("#delete-range").click(deleteRange); - $("#clear-range").click(clearRange); + $("#insert-range").click(() => tryCatch(insertRange)); + $("#delete-range").click(() => tryCatch(deleteRange)); + $("#clear-range").click(() => tryCatch(clearRange)); async function insertRange() { - try { - 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(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + 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(); + }); } async function deleteRange() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const range = sheet.getRange("B4:E4"); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B4:E4"); - range.delete(Excel.DeleteShiftDirection.up); + range.delete(Excel.DeleteShiftDirection.up); - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + await context.sync(); + }); } async function clearRange() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - let range = sheet.getRange("E2:E5"); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + let range = sheet.getRange("E2:E5"); - range.clear(); + range.clear(); - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + await context.sync(); + }); } async function setup() { + await Excel.run(async (context) => { + const sheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "Sample"); + + const data = [ + ["Product", "Qty", "Unit Price", "Total Price"], + ["Almonds", 2, 7.50, "=C3 * D3"], + ["Coffee", 1, 34.50, "=C4 * D4"], + ["Chocolate", 5, 9.56, "=C5 * D5"] + ]; + + const range = sheet.getRange("B2:E5"); + range.values = data; + range.format.autofitColumns(); + + const header = range.getRow(0); + 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 Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); - - const data = [ - ["Product", "Qty", "Unit Price", "Total Price"], - ["Almonds", 2, 7.50, "=C3 * D3"], - ["Coffee", 1, 34.50, "=C4 * D4"], - ["Chocolate", 5, 9.56, "=C5 * D5"] - ]; - - const range = sheet.getRange("B2:E5"); - range.values = data; - range.format.autofitColumns(); - - const header = range.getRow(0); - header.format.fill.color = "#4472C4"; - header.format.font.color = "white"; - - sheet.activate(); - - await context.sync(); - }); + await callback(); } catch (error) { OfficeHelpers.UI.notify(error); diff --git a/samples/excel/42-range/selected-range.yaml b/samples/excel/42-range/selected-range.yaml index 4f7ec528c..38e6f5ab7 100644 --- a/samples/excel/42-range/selected-range.yaml +++ b/samples/excel/42-range/selected-range.yaml @@ -8,36 +8,35 @@ api_set: ExcelApi: 1.1 script: content: | - $("#get-selection").click(getSelection); - $("#set-selection").click(setSelection); + $("#get-selection").click(() => tryCatch(getSelection)); + $("#set-selection").click(() => tryCatch(setSelection)); async function getSelection() { - try { - await Excel.run(async (context) => { - const range = context.workbook.getSelectedRange(); - range.load("address"); + await Excel.run(async (context) => { + const range = context.workbook.getSelectedRange(); + range.load("address"); - await context.sync(); + await context.sync(); - console.log(`The address of the selected range is "${range.address}"`) - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + console.log(`The address of the selected range is "${range.address}"`) + }); } async function setSelection() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const range = sheet.getRange("B2:E6"); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const range = sheet.getRange("B2:E6"); - range.select(); + range.select(); - await context.sync(); - }); + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); } catch (error) { OfficeHelpers.UI.notify(error); diff --git a/samples/excel/42-range/set-get-values.yaml b/samples/excel/42-range/set-get-values.yaml index d8dbe5841..106ae8b77 100644 --- a/samples/excel/42-range/set-get-values.yaml +++ b/samples/excel/42-range/set-get-values.yaml @@ -8,206 +8,163 @@ api_set: ExcelApi: 1.1 script: content: | - $("#setup").click(setup); + $("#setup").click(() => tryCatch(setup)); - $("#set-value").click(setValue); - $("#set-values").click(setValues); - $("#set-formula").click(setFormula); - $("#set-formulas").click(setFormulas); - $("#set-formulas-r1c1").click(setFormulasR1C1); - $("#get-values").click(getValues); - $("#get-texts").click(getTexts); - $("#get-formulas").click(getFormulas); + $("#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)); async function setValue() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); - const range = sheet.getRange("C3"); - range.values = [[ 5 ]]; - range.format.autofitColumns(); + const range = sheet.getRange("C3"); + range.values = [[ 5 ]]; + range.format.autofitColumns(); - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + await context.sync(); + }); } async function setValues() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - const data = [ - ["Potato Chips", 10, 1.80], - ]; - - const range = sheet.getRange("B5:D5"); - range.values = data; - range.format.autofitColumns(); - - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + const data = [ + ["Potato Chips", 10, 1.80], + ]; + + const range = sheet.getRange("B5:D5"); + range.values = data; + range.format.autofitColumns(); + + await context.sync(); + }); } async function setFormula() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); - const range = sheet.getRange("E3"); - range.formulas = [[ "=C3 * D3" ]]; - range.format.autofitColumns(); + const range = sheet.getRange("E3"); + range.formulas = [[ "=C3 * D3" ]]; + range.format.autofitColumns(); - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + await context.sync(); + }); } async function setFormulas() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - const data = [ - ["Total Price"], - ["=C3 * D3"], - ["=C4 * D4"], - ["=C5 * D5"], - ["=SUM(E3:E5)"] - ]; - - const range = sheet.getRange("E2:E6"); - range.formulas = data; - range.format.autofitColumns(); - - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + const data = [ + ["Total Price"], + ["=C3 * D3"], + ["=C4 * D4"], + ["=C5 * D5"], + ["=SUM(E3:E5)"] + ]; + + const range = sheet.getRange("E2:E6"); + range.formulas = data; + range.format.autofitColumns(); + + await context.sync(); + }); } async function setFormulasR1C1() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - const data = [ - ["Total Price"], - ["=R[0]C[-2] * R[0]C[-1]"], - ["=R[0]C[-2] * R[0]C[-1]"], - ["=R[0]C[-2] * R[0]C[-1]"], - ["=SUM(R[-3]C[0]:R[-1]C[0])"] - ]; - - const range = sheet.getRange("E2:E6"); - range.formulasR1C1 = data; - range.format.autofitColumns(); - - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + const data = [ + ["Total Price"], + ["=R[0]C[-2] * R[0]C[-1]"], + ["=R[0]C[-2] * R[0]C[-1]"], + ["=R[0]C[-2] * R[0]C[-1]"], + ["=SUM(R[-3]C[0]:R[-1]C[0])"] + ]; + + const range = sheet.getRange("E2:E6"); + range.formulasR1C1 = data; + range.format.autofitColumns(); + + await context.sync(); + }); } async function getValues() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const range = sheet.getRange("B2:E6"); - range.load("values"); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B2:E6"); + range.load("values"); - await context.sync(); + await context.sync(); - console.log(JSON.stringify(range.values, null, 4)); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + console.log(JSON.stringify(range.values, null, 4)); + }); } async function getTexts() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const range = sheet.getRange("B2:E6"); - range.load("text"); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B2:E6"); + range.load("text"); - await context.sync(); + await context.sync(); - console.log(JSON.stringify(range.text, null, 4)); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + console.log(JSON.stringify(range.text, null, 4)); + }); } async function getFormulas() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const range = sheet.getRange("B2:E6"); - range.load("formulas"); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B2:E6"); + range.load("formulas"); - await context.sync(); + await context.sync(); - console.log(JSON.stringify(range.formulas, null, 4)); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + console.log(JSON.stringify(range.formulas, null, 4)); + }); } async function setup() { + await Excel.run(async (context) => { + const sheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "Sample"); + + const data = [ + ["Product", "Qty", "Unit Price"], + ["Almonds", 2, 7.50], + ["Coffee", 1, 34.50], + ["Chocolate", 5, 9.56] + ]; + + const range = sheet.getRange("B2:D5"); + range.values = data; + range.format.autofitColumns(); + + const header = range.getRow(0); + 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 Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); - - const data = [ - ["Product", "Qty", "Unit Price"], - ["Almonds", 2, 7.50], - ["Coffee", 1, 34.50], - ["Chocolate", 5, 9.56] - ]; - - const range = sheet.getRange("B2:D5"); - range.values = data; - range.format.autofitColumns(); - - const header = range.getRow(0); - header.format.fill.color = "#4472C4"; - header.format.font.color = "white"; - - sheet.activate(); - - await context.sync(); - }); + await callback(); } catch (error) { OfficeHelpers.UI.notify(error); diff --git a/samples/excel/42-range/test-for-used-range.yaml b/samples/excel/42-range/test-for-used-range.yaml index 354c7b671..98b1f4c6a 100644 --- a/samples/excel/42-range/test-for-used-range.yaml +++ b/samples/excel/42-range/test-for-used-range.yaml @@ -9,54 +9,87 @@ api_set: script: content: | $("#setup").click(() => tryCatch(setup)); - $("#try-create-chart-from-empty-table").click(() => tryCatch(tryCreateChartFromEmptyTable)); + $("#try-create-chart-from-table").click(() => tryCatch(tryCreateChartFromEmptyTable)); + $("#fill-table").click(() => tryCatch(fillTable)); async function tryCreateChartFromEmptyTable() { - await Excel.run(async (context) => { - - const sheet = context.workbook.worksheets.getItem("Sample"); + 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 */); + // 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) { - OfficeHelpers.UI.notify("Need Data to Make Chart", "To create a meaningful chart, 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"; + OfficeHelpers.UI.notify( + "Need Data to Make Chart", + "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(); }); } + async function fillTable() { + await Excel.run(async context => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const salesTable = sheet.tables.getItem("SalesTable"); + const dataRange = salesTable.getDataBodyRange(); + dataRange.values = [ + ["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] + ]; + + dataRange.format.autofitColumns(); + await context.sync(); + }); + } + async function setup() { - await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - let salesTable = sheet.tables.add("B2:F2", true /* hasHeaders */); + await Excel.run(async context => { + const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet( + context.workbook, + "Sample" + ); + let salesTable = sheet.tables.add("B2:F2", true /* hasHeaders */); salesTable.name = "SalesTable"; salesTable.showTotals = true; - salesTable.getHeaderRowRange().values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4"]]; + salesTable.getHeaderRowRange().values = [ + ["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4"] + ]; // The table should be created wtih no data. salesTable.rows.add(null, [ - [null, null, null, null, null], - [null, null, null, null, null], - [null, null, null, null, null], - [null, null, null, null, null], - [null, null, null, null, null], - [null, null, null, null, null] - ]); + [null, null, null, null, null], + [null, null, null, null, null], + [null, null, null, null, null], + [null, null, null, null, null], + [null, null, null, null, null], + [null, null, null, null, null] + ]); sheet.activate(); await context.sync(); @@ -67,8 +100,7 @@ script: async function tryCatch(callback) { try { await callback(); - } - catch (error) { + } catch (error) { OfficeHelpers.UI.notify(error); OfficeHelpers.Utilities.log(error); } @@ -77,7 +109,7 @@ script: template: content: |
-

This sample shows how to format a range using the Excel API.

+

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

@@ -89,9 +121,12 @@ template:

Try it out

- +

+

language: html style: 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 56d874b00..8d9c31659 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,147 +7,128 @@ host: EXCEL api_set: ExcelApi: 1.1 script: - content: |+ - $("#setup").click(setup); - $("#add-column").click(addColumn); - $("#add-calculated-column").click(addCalculatedColumn); - $("#add-row").click(addRow); + content: | + $("#setup").click(() => tryCatch(setup)); - async function addColumn() { - try { - await setup(); - await Excel.run(async (context) => { - - const sheet = context.workbook.worksheets.getItem("Sample"); - - const expensesTable = sheet.tables.getItem("ExpensesTable"); - - expensesTable.columns.add(null, [ - ["Day of the Week"], - ["Saturday"], - ["Friday"], - ["Monday"], - ["Thursday"], - ["Sunday"], - ["Saturday"], - ["Monday"] - ]); - - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - - async function addCalculatedColumn() { - try { - await setup(); - await Excel.run(async (context) => { - - const sheet = context.workbook.worksheets.getItem("Sample"); - - const expensesTable = sheet.tables.getItem("ExpensesTable"); - - expensesTable.columns.add(null, [ - ["Type of the Day"], - ['=IF(OR((TEXT([DATE], "dddd") = "Saturday"), (TEXT([DATE], "dddd") = "Sunday")), "Weekend", "Weekday")'], - ['=IF(OR((TEXT([DATE], "dddd") = "Saturday"), (TEXT([DATE], "dddd") = "Sunday")), "Weekend", "Weekday")'], - ['=IF(OR((TEXT([DATE], "dddd") = "Saturday"), (TEXT([DATE], "dddd") = "Sunday")), "Weekend", "Weekday")'], - ['=IF(OR((TEXT([DATE], "dddd") = "Saturday"), (TEXT([DATE], "dddd") = "Sunday")), "Weekend", "Weekday")'], - ['=IF(OR((TEXT([DATE], "dddd") = "Saturday"), (TEXT([DATE], "dddd") = "Sunday")), "Weekend", "Weekday")'], - ['=IF(OR((TEXT([DATE], "dddd") = "Saturday"), (TEXT([DATE], "dddd") = "Sunday")), "Weekend", "Weekday")'], - ['=IF(OR((TEXT([DATE], "dddd") = "Saturday"), (TEXT([DATE], "dddd") = "Sunday")), "Weekend", "Weekday")'] - ]); - - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } + $("#add-row").click(() => tryCatch(addRow)); + $("#add-column").click(() => tryCatch(addColumn)); + $("#add-calculated-column").click(() => tryCatch(addCalculatedColumn)); async function addRow() { - try { - await setup(); - await Excel.run(async (context) => { - - const sheet = context.workbook.worksheets.getItem("Sample"); - - const expensesTable = sheet.tables.getItem("ExpensesTable"); - - expensesTable.rows.add(null, [ - ["1/16/2017", "THE PHONE COMPANY", "Communications", "$120"], - ["1/20/2017", "NORTHWIND ELECTRIC CARS", "Transportation", "$142"], - ["1/20/2017", "BEST FOR YOU ORGANICS COMPANY", "Groceries", "$27"], - ["1/21/2017", "COHO VINEYARD", "Restaurant", "$33"], - ["1/25/2017", "BELLOWS COLLEGE", "Education", "$350"], - ["1/28/2017", "TREY RESEARCH", "Other", "$135"], - ["1/31/2017", "BEST FOR YOU ORGANICS COMPANY", "Groceries", "$97"] - ]); - - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - - - /** Create a new table with sample data */ - async function setup() { - try { - await Excel.run(async (context) => { + await Excel.run(async context => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const expensesTable = sheet.tables.getItem("ExpensesTable"); - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + expensesTable.rows.add(null, [ + ["1/16/2017", "THE PHONE COMPANY", "Communications", "$120"], + ["1/20/2017", "NORTHWIND ELECTRIC CARS", "Transportation", "$142"], + ["1/20/2017", "BEST FOR YOU ORGANICS COMPANY", "Groceries", "$27"] + ]); - const sheet = context.workbook.worksheets.getItem("Sample"); + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); - const expensesTable = sheet.tables.add("A1:D1", true /*hasHeaders*/); - expensesTable.name = "ExpensesTable"; + await context.sync(); + }); + } - expensesTable.getHeaderRowRange().values = [["Date", "Merchant", "Category", "Amount"]]; + async function addColumn() { + await Excel.run(async context => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const expensesTable = sheet.tables.getItem("ExpensesTable"); + + expensesTable.columns.add(null, [ + ["Deductable?"], + ["Yes"], + ["Yes"], + ["No"], + ["No"], + ["Yes"], + ["Yes"], + ["No"], + ["Yes"], + ["Yes"], + ["No"] + ]); + + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + + await context.sync(); + }); + } - 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"] - ]); + async function addCalculatedColumn() { + await Excel.run(async context => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const expensesTable = sheet.tables.getItem("ExpensesTable"); + + const weekendFormula = '=IF(OR((TEXT([@DATE], "dddd") = "Saturday"), (TEXT([@DATE], "dddd") = "Sunday")), "Weekend", "Weekday")'; + expensesTable.columns.add(null, [ + ["Type of the Day"], + [weekendFormula], + [weekendFormula], + [weekendFormula], + [weekendFormula], + [weekendFormula], + [weekendFormula], + [weekendFormula], + [weekendFormula], + [weekendFormula], + [weekendFormula] + ]); + + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + + await context.sync(); + }); + } - if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } - sheet.activate(); + /** Create a new table with sample data */ + async function setup() { + await Excel.run(async context => { + await OfficeHelpers.ExcelUtilities.forceCreateSheet( + context.workbook, + "Sample" + ); + + const sheet = context.workbook.worksheets.getItem("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"] + ]); + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + } + + sheet.activate(); + await context.sync(); + }); + } - await context.sync(); - }); - } - catch (error) { + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { OfficeHelpers.UI.notify(error); OfficeHelpers.Utilities.log(error); } } - language: typescript template: content: | @@ -164,15 +145,16 @@ template:

Try it out

+

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

+

-

+ -

language: html style: diff --git a/samples/excel/46-table/convert-range-to-table.yaml b/samples/excel/46-table/convert-range-to-table.yaml index d516f50c4..2ac1555ec 100644 --- a/samples/excel/46-table/convert-range-to-table.yaml +++ b/samples/excel/46-table/convert-range-to-table.yaml @@ -7,71 +7,59 @@ host: EXCEL api_set: ExcelApi: 1.1 script: - content: |+ - $("#setup").click(setup); - $("#convert-range-to-table").click(convertRangeToTable); + content: | + $("#setup").click(() => tryCatch(setup)); + $("#convert-range-to-table").click(() => tryCatch(convertRangeToTable)); async function convertRangeToTable() { - try { - await Excel.run(async (context) => { - - const sheet = context.workbook.worksheets.getItem("Sample"); - - let expensesTable = sheet.tables.add('A1:E7', true); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + let expensesTable = sheet.tables.add('A1:E7', true); + expensesTable.name = "ExpensesTable"; - expensesTable.name = "ExpensesTable"; - - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + await context.sync(); + }); } /** Create a range */ async function setup() { - try { - await Excel.run(async (context) => { - - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample");; - - const sheet = context.workbook.worksheets.getItem("Sample"); - - const values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4"], - ["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]]; - - const range = sheet.getRange("A1:E7"); - range.values = values; - - sheet.getRange("A1:E1").format.font.bold = true; - - if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } - - sheet.activate(); + await Excel.run(async (context) => { + await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + const sheet = context.workbook.worksheets.getItem("Sample"); + + const values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4"], + ["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]]; + + const range = sheet.getRange("A1:E7"); + range.values = values; + + sheet.getRange("A1:E1").format.font.bold = true; + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + } + + sheet.activate(); + await context.sync(); + }); + } - await context.sync(); - }); + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); } catch (error) { OfficeHelpers.UI.notify(error); OfficeHelpers.Utilities.log(error); } } - - - - - language: typescript template: content: | diff --git a/samples/excel/46-table/create-table.yaml b/samples/excel/46-table/create-table.yaml index 102ed99c6..f151695ac 100644 --- a/samples/excel/46-table/create-table.yaml +++ b/samples/excel/46-table/create-table.yaml @@ -8,40 +8,43 @@ api_set: ExcelApi: 1.1 script: content: | - $("#create-table").click(createTable); + $("#create-table").click(() => tryCatch(createTable)); async function createTable() { - try { - await Excel.run(async (context) => { - - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + await Excel.run(async (context) => { + await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - const sheet = context.workbook.worksheets.getItem("Sample"); + const sheet = context.workbook.worksheets.getItem("Sample"); + const expensesTable = sheet.tables.add("A1:D1", true /*hasHeaders*/); + expensesTable.name = "ExpensesTable"; - const expensesTable = sheet.tables.add("A1:D1", true /*hasHeaders*/); - expensesTable.name = "ExpensesTable"; + expensesTable.getHeaderRowRange().values = [["Date", "Merchant", "Category", "Amount"]]; - 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"] + ]); - 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"] - ]); + if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + } - if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } + sheet.activate(); - sheet.activate(); + await context.sync(); + }); + } - await context.sync(); - }); + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); } catch (error) { OfficeHelpers.UI.notify(error); diff --git a/samples/excel/46-table/filter-data.yaml b/samples/excel/46-table/filter-data.yaml index c5329c44c..baf166f05 100644 --- a/samples/excel/46-table/filter-data.yaml +++ b/samples/excel/46-table/filter-data.yaml @@ -8,89 +8,82 @@ api_set: ExcelApi: 1.1 script: content: | - $("#setup").click(setup); - $("#filter-table").click(filterTable); - $("#clear-filters").click(clearFilters); + $("#setup").click(() => tryCatch(setup)); + $("#filter-table").click(() => tryCatch(filterTable)); + $("#clear-filters").click(() => tryCatch(clearFilters)); async function filterTable() { - try { - 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(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + 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(); + }); } async function clearFilters() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); - const expensesTable = sheet.tables.getItem("ExpensesTable"); + const expensesTable = sheet.tables.getItem("ExpensesTable"); - expensesTable.clearFilters(); + expensesTable.clearFilters(); - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + await context.sync(); + }); } /** Create a new table with sample data */ async function setup() { - try { - await Excel.run(async (context) => { + await Excel.run(async (context) => { - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - const sheet = context.workbook.worksheets.getItem("Sample"); + const sheet = context.workbook.worksheets.getItem("Sample"); - const expensesTable = sheet.tables.add("A1:D1", true /*hasHeaders*/); - expensesTable.name = "ExpensesTable"; + const expensesTable = sheet.tables.add("A1:D1", true /*hasHeaders*/); + expensesTable.name = "ExpensesTable"; - expensesTable.getHeaderRowRange().values = [["Date", "Merchant", "Category", "Amount"]]; + 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"] - ]); + 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"] + ]); - if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } + if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + } - sheet.activate(); + sheet.activate(); - await context.sync(); - }); + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); } catch (error) { OfficeHelpers.UI.notify(error); diff --git a/samples/excel/46-table/formatting.yaml b/samples/excel/46-table/formatting.yaml index a84febeb6..7eda28c36 100644 --- a/samples/excel/46-table/formatting.yaml +++ b/samples/excel/46-table/formatting.yaml @@ -8,66 +8,61 @@ api_set: ExcelApi: 1.1 script: content: | - $("#setup").click(setup); - $("#format-table").click(formatTable); + $("#setup").click(() => tryCatch(setup)); + $("#format-table").click(() => tryCatch(formatTable)); async function formatTable() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - const expensesTable = sheet.tables.getItem("ExpensesTable"); - - expensesTable.getHeaderRowRange().format.fill.color = "#C70039"; - - expensesTable.getDataBodyRange().format.fill.color = "#DAF7A6"; - - expensesTable.rows.getItemAt(1).getRange().format.fill.color = "#FFC300"; - - expensesTable.columns.getItemAt(0).getDataBodyRange().format.fill.color = "#FFA07A"; - - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const expensesTable = sheet.tables.getItem("ExpensesTable"); + + expensesTable.getHeaderRowRange().format.fill.color = "#C70039"; + expensesTable.getDataBodyRange().format.fill.color = "#DAF7A6"; + expensesTable.rows.getItemAt(1).getRange().format.fill.color = "#FFC300"; + expensesTable.columns.getItemAt(0).getDataBodyRange().format.fill.color = "#FFA07A"; + + await context.sync(); + }); } /** Create a new table with sample data */ async function setup() { - try { - await Excel.run(async (context) => { + await Excel.run(async (context) => { - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - const sheet = context.workbook.worksheets.getItem("Sample"); + const sheet = context.workbook.worksheets.getItem("Sample"); - const expensesTable = sheet.tables.add("A1:D1", true /*hasHeaders*/); - expensesTable.name = "ExpensesTable"; + const expensesTable = sheet.tables.add("A1:D1", true /*hasHeaders*/); + expensesTable.name = "ExpensesTable"; - expensesTable.getHeaderRowRange().values = [["Date", "Merchant", "Category", "Amount"]]; + 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"] - ]); + 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"] + ]); - if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } + if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + } - sheet.activate(); + sheet.activate(); - await context.sync(); - }); + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); } catch (error) { OfficeHelpers.UI.notify(error); diff --git a/samples/excel/46-table/get-data-from-table.yaml b/samples/excel/46-table/get-data-from-table.yaml index 6215bf9ad..b50bd3afc 100644 --- a/samples/excel/46-table/get-data-from-table.yaml +++ b/samples/excel/46-table/get-data-from-table.yaml @@ -8,81 +8,78 @@ api_set: ExcelApi: 1.1 script: content: | - $("#setup").click(setup); - $("#get-data-from-table").click(getData); + $("#setup").click(() => tryCatch(setup)); + $("#get-data-from-table").click(() => tryCatch(getData)); async function getData() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const expensesTable = sheet.tables.getItem("ExpensesTable"); - - const headerRange = expensesTable.getHeaderRowRange().load("values"); - const bodyRange = expensesTable.getDataBodyRange().load("values"); - const columnRange = expensesTable.columns.getItem("MERCHANT").getDataBodyRange().load("values"); - const rowRange= expensesTable.rows.getItemAt(1).load("values"); - - await sheet.context.sync(); - - const headerValues = headerRange.values; - const bodyValues = bodyRange.values; - const merchantColumnValues = columnRange.values; - const secondRowValues = rowRange.values; - - sheet.getRange("A18:A18").values = [["Results"]]; - sheet.getRange("A20:D20").values = headerValues; - sheet.getRange("A21:D27").values = bodyValues; - sheet.getRange("B30:B36").values = merchantColumnValues; - sheet.getRange("A17:D17").values = secondRowValues; - - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const expensesTable = sheet.tables.getItem("ExpensesTable"); + + const headerRange = expensesTable.getHeaderRowRange().load("values"); + const bodyRange = expensesTable.getDataBodyRange().load("values"); + const columnRange = expensesTable.columns.getItem("MERCHANT").getDataBodyRange().load("values"); + const rowRange= expensesTable.rows.getItemAt(1).load("values"); + + await sheet.context.sync(); + + const headerValues = headerRange.values; + const bodyValues = bodyRange.values; + const merchantColumnValues = columnRange.values; + const secondRowValues = rowRange.values; + + sheet.getRange("A18:A18").values = [["Results"]]; + sheet.getRange("A20:D20").values = headerValues; + sheet.getRange("A21:D27").values = bodyValues; + sheet.getRange("B30:B36").values = merchantColumnValues; + sheet.getRange("A17:D17").values = secondRowValues; + + await context.sync(); + }); } /** Create a new table with some sample data */ async function setup() { - try { - await Excel.run(async (context) => { - - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - - const sheet = context.workbook.worksheets.getItem("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"] - ]); - - if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } - - sheet.activate(); + await Excel.run(async (context) => { + await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + + const sheet = context.workbook.worksheets.getItem("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"] + ]); + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + } + + sheet.activate(); + await context.sync(); + }); + } - await context.sync(); - }); + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); } catch (error) { OfficeHelpers.UI.notify(error); OfficeHelpers.Utilities.log(error); } - } + } language: typescript template: content: |+ 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 3db0ef520..95f882b33 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,118 +8,88 @@ api_set: ExcelApi: 1.1 script: content: |+ - $("#create-table").click(createTable); - $("#filter-table").click(filterTable); - $("#get-range").click(getRange); - $("#get-visible-range").click(getVisibleRange); + $("#create-table").click(() => tryCatch(createTable)); + $("#filter-table").click(() => tryCatch(filterTable)); + $("#get-range").click(() => tryCatch(getRange)); + $("#get-visible-range").click(() => tryCatch(getVisibleRange)); async function getVisibleRange() { - try { await Excel.run(async (context) => { - - const sheet = context.workbook.worksheets.getItem("Sample"); - - const expensesTable = sheet.tables.getItem("ExpensesTable"); - - const visibleRange = expensesTable.getDataBodyRange().getVisibleView().load("values"); - - await sheet.context.sync(); - - const visibleValues = visibleRange.values; - - console.log(visibleValues); - - await context.sync(); + const sheet = context.workbook.worksheets.getItem("Sample"); + const expensesTable = sheet.tables.getItem("ExpensesTable"); + const visibleRange = expensesTable.getDataBodyRange().getVisibleView().load("values"); + await sheet.context.sync(); + + const visibleValues = visibleRange.values; + console.log(visibleValues); + await context.sync(); }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } } async function getRange() { - try { await Excel.run(async (context) => { - - const sheet = context.workbook.worksheets.getItem("Sample"); - - const expensesTable = sheet.tables.getItem("ExpensesTable"); - - const range = expensesTable.getDataBodyRange().load("values"); - - await sheet.context.sync(); - - const values = range.values; - - console.log(values); - - await context.sync(); - }) - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + const sheet = context.workbook.worksheets.getItem("Sample"); + const expensesTable = sheet.tables.getItem("ExpensesTable"); + const range = expensesTable.getDataBodyRange().load("values"); + await sheet.context.sync(); + + const values = range.values; + console.log(values); + await context.sync(); + }); } /** Create a new table with some sample data*/ async function createTable() { - try { - await Excel.run(async (context) => { - - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - - const sheet = context.workbook.worksheets.getItem("Sample"); - - let 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"] - ]); - - if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } - - sheet.activate(); - - await context.sync(); - }) - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + await Excel.run(async (context) => { + await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + const sheet = context.workbook.worksheets.getItem("Sample"); + + let 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"] + ]); + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + } + + sheet.activate(); + await context.sync(); + }); } /** Filter the table*/ async function filterTable() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - const expensesTable = sheet.tables.getItem("ExpensesTable"); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const expensesTable = sheet.tables.getItem("ExpensesTable"); + const filter = expensesTable.columns.getItem("Amount").filter; - const filter = expensesTable.columns.getItem("Amount").filter; + filter.apply({ + filterOn: Excel.FilterOn.dynamic, + dynamicCriteria: Excel.DynamicFilterCriteria.belowAverage + }); - filter.apply({ - filterOn: Excel.FilterOn.dynamic, - dynamicCriteria: Excel.DynamicFilterCriteria.belowAverage - }); + await context.sync(); + }); + } - await context.sync(); - }); + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); } catch (error) { OfficeHelpers.UI.notify(error); diff --git a/samples/excel/46-table/import-json-data.yaml b/samples/excel/46-table/import-json-data.yaml index ab940045f..6692edd03 100644 --- a/samples/excel/46-table/import-json-data.yaml +++ b/samples/excel/46-table/import-json-data.yaml @@ -8,40 +8,30 @@ api_set: ExcelApi: 1.1 script: content: | - $("#import-json-data").click(importJsonData); + $("#import-json-data").click(() => tryCatch(importJsonData)); async function importJsonData() { - try { - await Excel.run(async (context) => { - - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - - const sheet = context.workbook.worksheets.getItem("Sample"); - - let expensesTable = sheet.tables.add("A1:D1", true); - expensesTable.name = "ExpensesTable"; - - expensesTable.getHeaderRowRange().values = [["Date", "Merchant", "Category", "Amount"]]; - - const newData = transactions.map(item => - [item.DATE, item.MERCHANT, item.CATEGORY, item.AMOUNT]); - - expensesTable.rows.add(null, newData); - - if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } - - sheet.activate(); - - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); + await Excel.run(async (context) => { + await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + const sheet = context.workbook.worksheets.getItem("Sample"); + + let expensesTable = sheet.tables.add("A1:D1", true); + expensesTable.name = "ExpensesTable"; + expensesTable.getHeaderRowRange().values = [["Date", "Merchant", "Category", "Amount"]]; + + const newData = transactions.map(item => + [item.DATE, item.MERCHANT, item.CATEGORY, item.AMOUNT]); + + expensesTable.rows.add(null, newData); + + if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); } + + sheet.activate(); + await context.sync(); + }); } const transactions = [ @@ -112,6 +102,17 @@ script: "AMOUNT":"$178" } ]; + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } language: typescript template: content: |+ diff --git a/samples/excel/46-table/style.yaml b/samples/excel/46-table/style.yaml index 93a913873..fe6eb0ada 100644 --- a/samples/excel/46-table/style.yaml +++ b/samples/excel/46-table/style.yaml @@ -159,7 +159,7 @@ script: language: typescript template: - content: |+ + content: |

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

@@ -173,7 +173,7 @@ template:

Try it out

-

Add new style will throw an error if the style has already been added and Delete new style will error if the style doesn't exist (that is, hasn't been added).

+

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

@@ -203,13 +203,13 @@ template:
-
+
+

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.

- - language: html style: content: |- diff --git a/samples/excel/54-worksheet/active-worksheet.yaml b/samples/excel/54-worksheet/active-worksheet.yaml index 18c101834..053821bb6 100644 --- a/samples/excel/54-worksheet/active-worksheet.yaml +++ b/samples/excel/54-worksheet/active-worksheet.yaml @@ -8,80 +8,73 @@ api_set: ExcelApi: 1.1 script: content: |- - $("#setup").click(setup); + $("#setup").click(() => tryCatch(setup)); - $("#get-active-worksheet").click(getActiveWorksheet); - $("#set-active-worksheet").click(setActiveWorksheet); + $("#get-active-worksheet").click(() => tryCatch(getActiveWorksheet)); + $("#set-active-worksheet").click(() => tryCatch(setActiveWorksheet)); async function getActiveWorksheet() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - sheet.load("name"); - - await context.sync(); - - console.log(`The active worksheet is "${sheet.name}"`); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + sheet.load("name"); + + await context.sync(); + + console.log(`The active worksheet is "${sheet.name}"`); + }); } async function setActiveWorksheet() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - sheet.load("name"); - - const sheets = context.workbook.worksheets; - sheets.load("items"); - - await context.sync(); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + sheet.load("name"); + + const sheets = context.workbook.worksheets; + sheets.load("items"); - let newSheet = sheet; + await context.sync(); - if (sheets.items.length > 1) { - if (sheet.id === sheets.items[0].id) { - newSheet = sheets.items[1]; - } else { - newSheet = sheets.items[0]; - } - newSheet.load("name"); + let newSheet = sheet; - newSheet.activate(); - - await context.sync(); + if (sheets.items.length > 1) { + if (sheet.id === sheets.items[0].id) { + newSheet = sheets.items[1]; } else { - console.log("Cannot change the active worksheet since there is only one sheet in the workbook"); + newSheet = sheets.items[0]; } + newSheet.load("name"); - console.log(`The active worksheet is "${newSheet.name}"`); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + newSheet.activate(); + + await context.sync(); + } else { + console.log("Cannot change the active worksheet since there is only one sheet in the workbook"); + } + + console.log(`The active worksheet is "${newSheet.name}"`); + }); } async function setup() { - try { - await Excel.run(async (context) => { + await Excel.run(async (context) => { - const sheets = context.workbook.worksheets; - sheets.load("items"); - - await context.sync(); + const sheets = context.workbook.worksheets; + sheets.load("items"); + + await context.sync(); - if (sheets.items.length < 2) { - sheets.add(); + if (sheets.items.length < 2) { + sheets.add(); - await context.sync(); - } - }); + await context.sync(); + } + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); } catch (error) { OfficeHelpers.UI.notify(error); 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 52455e737..aa53de37c 100644 --- a/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml +++ b/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml @@ -8,71 +8,53 @@ api_set: ExcelApi: 1.1 script: content: | - $("#add-worksheet").click(addWorksheet); - $("#delete-worksheet").click(deleteWorksheet); - $("#rename-worksheet").click(renameWorksheet); - $("#move-worksheet").click(moveWorksheet); + $("#add-worksheet").click(() => tryCatch(addWorksheet)); + $("#delete-worksheet").click(() => tryCatch(deleteWorksheet)); + $("#rename-worksheet").click(() => tryCatch(renameWorksheet)); + $("#move-worksheet").click(() => tryCatch(moveWorksheet)); async function addWorksheet() { - try { - await Excel.run(async (context) => { - const sheets = context.workbook.worksheets; + await Excel.run(async (context) => { + const sheets = context.workbook.worksheets; - const sheet = sheets.add(); - sheet.load("name, position"); - - await context.sync(); + const sheet = sheets.add(); + sheet.load("name, position"); + + await context.sync(); - console.log(`Added worksheet named "${sheet.name}" in position ${sheet.position}`) - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + console.log(`Added worksheet named "${sheet.name}" in position ${sheet.position}`) + }); } async function deleteWorksheet() { - try { - await Excel.run(async (context) => { - const sheets = context.workbook.worksheets; - sheets.load("items/name"); + await Excel.run(async (context) => { + const sheets = context.workbook.worksheets; + sheets.load("items/name"); - await context.sync(); + await context.sync(); - if (sheets.items.length > 1) { - const lastSheet = sheets.items[sheets.items.length - 1]; + if (sheets.items.length > 1) { + const lastSheet = sheets.items[sheets.items.length - 1]; - console.log(`Deleting worksheet named "${lastSheet.name}"`); - lastSheet.delete(); + console.log(`Deleting worksheet named "${lastSheet.name}"`); + lastSheet.delete(); - await context.sync(); - - } else { - console.log("Unable to delete the last worksheet in the workbook"); - } - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + await context.sync(); + + } else { + console.log("Unable to delete the last worksheet in the workbook"); + } + }); } async function renameWorksheet() { - try { - await Excel.run(async (context) => { - const currentSheet = context.workbook.worksheets.getActiveWorksheet(); + await Excel.run(async (context) => { + const currentSheet = context.workbook.worksheets.getActiveWorksheet(); - currentSheet.name = await uniqueWorksheetName(context); + currentSheet.name = await uniqueWorksheetName(context); - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + await context.sync(); + }); } async function uniqueWorksheetName(context: Excel.RequestContext) { @@ -96,19 +78,21 @@ script: } async function moveWorksheet() { - try { - await Excel.run(async (context) => { - const sheets = context.workbook.worksheets; - sheets.load("items"); - - await context.sync(); - - const lastSheet = sheets.items[sheets.items.length - 1]; - - lastSheet.position = 0; + await Excel.run(async (context) => { + const sheets = context.workbook.worksheets; + sheets.load("items"); + await context.sync(); + + const lastSheet = sheets.items[sheets.items.length - 1]; + lastSheet.position = 0; + await context.sync(); + }); + } - await context.sync(); - }); + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); } catch (error) { OfficeHelpers.UI.notify(error); diff --git a/samples/excel/54-worksheet/list-worksheets.yaml b/samples/excel/54-worksheet/list-worksheets.yaml index 454be585b..cc68b7110 100644 --- a/samples/excel/54-worksheet/list-worksheets.yaml +++ b/samples/excel/54-worksheet/list-worksheets.yaml @@ -8,25 +8,30 @@ api_set: ExcelApi: 1.1 script: content: | - $("#list-worksheets").click(listWorksheets); + $("#list-worksheets").click(() => tryCatch(listWorksheets)); async function listWorksheets() { - try { - await Excel.run(async (context) => { - const sheets = context.workbook.worksheets; - sheets.load("items/name"); - - await context.sync(); + await Excel.run(async (context) => { + const sheets = context.workbook.worksheets; + sheets.load("items/name"); + + await context.sync(); + + if (sheets.items.length > 1) { + console.log(`There are ${sheets.items.length} worksheets in the workbook:`); + } else { + console.log(`There is one worksheet in the workbook:`); + } + for (let i in sheets.items) { + console.log(sheets.items[i].name); + } + }); + } - if (sheets.items.length > 1) { - console.log(`There are ${sheets.items.length} worksheets in the workbook:`); - } else { - console.log(`There is one worksheet in the workbook:`); - } - for (let i in sheets.items) { - console.log(sheets.items[i].name); - } - }); + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); } catch (error) { OfficeHelpers.UI.notify(error); diff --git a/samples/excel/54-worksheet/worksheet-range-cell.yaml b/samples/excel/54-worksheet/worksheet-range-cell.yaml index edcef9990..5890b4f8f 100644 --- a/samples/excel/54-worksheet/worksheet-range-cell.yaml +++ b/samples/excel/54-worksheet/worksheet-range-cell.yaml @@ -8,109 +8,91 @@ api_set: ExcelApi: 1.1 script: content: | - $("#setup").click(setup); + $("#setup").click(() => tryCatch(setup)); - $("#get-used-range").click(getUsedRange); - $("#get-entire-range").click(getEntireRange); - $("#get-range").click(getRange); - $("#get-cell").click(getCell); + $("#get-used-range").click(() => tryCatch(getUsedRange)); + $("#get-entire-range").click(() => tryCatch(getEntireRange)); + $("#get-range").click(() => tryCatch(getRange)); + $("#get-cell").click(() => tryCatch(getCell)); async function getUsedRange() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const range = sheet.getUsedRange(); - range.load("address"); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getUsedRange(); + range.load("address"); - await context.sync(); + await context.sync(); - console.log(`The address of the used range in the worksheet is "${range.address}"`); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + console.log(`The address of the used range in the worksheet is "${range.address}"`); + }); } async function getEntireRange() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const range = sheet.getRange(); - range.load("address"); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange(); + range.load("address"); - await context.sync(); + await context.sync(); - console.log(`The address of the entire worksheet range is "${range.address}"`); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + console.log(`The address of the entire worksheet range is "${range.address}"`); + }); } async function getRange() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const range = sheet.getRange("B2:C5"); - range.load("address"); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B2:C5"); + range.load("address"); - await context.sync(); + await context.sync(); - console.log(`The address of the range B2:C5 is "${range.address}"`); - }); - } - catch (error) { - OfficeHelpers.Utilities.log(error); - } + console.log(`The address of the range B2:C5 is "${range.address}"`); + }); } async function getCell() { - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const range = sheet.getCell(1, 4); - range.load("address"); - - await context.sync(); - - console.log(`The address of the cell in row 2 column 5 is "${range.address}"`); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getCell(1, 4); + range.load("address"); + + await context.sync(); + + console.log(`The address of the cell in row 2 column 5 is "${range.address}"`); + }); } async function setup() { + await Excel.run(async (context) => { + const sheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "Sample"); + + const data = [ + ["Product", "Qty", "Unit Price", "Total Price"], + ["Almonds", 2, 7.50, "=C3 * D3"], + ["Coffee", 1, 34.50, "=C4 * D4"], + ["Chocolate", 5, 9.56, "=C5 * D5"] + ]; + + const range = sheet.getRange("B2:E5"); + range.values = data; + range.format.autofitColumns(); + + const header = range.getRow(0); + 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 Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); - - const data = [ - ["Product", "Qty", "Unit Price", "Total Price"], - ["Almonds", 2, 7.50, "=C3 * D3"], - ["Coffee", 1, 34.50, "=C4 * D4"], - ["Chocolate", 5, 9.56, "=C5 * D5"] - ]; - - const range = sheet.getRange("B2:E5"); - range.values = data; - range.format.autofitColumns(); - - const header = range.getRow(0); - header.format.fill.color = "#4472C4"; - header.format.font.color = "white"; - - sheet.activate(); - - await context.sync(); - }); + await callback(); } catch (error) { OfficeHelpers.UI.notify(error); diff --git a/samples/excel/54-worksheet/worksheet-visibility.yaml b/samples/excel/54-worksheet/worksheet-visibility.yaml index 762c6a595..4430e041e 100644 --- a/samples/excel/54-worksheet/worksheet-visibility.yaml +++ b/samples/excel/54-worksheet/worksheet-visibility.yaml @@ -8,69 +8,54 @@ api_set: ExcelApi: 1.1 script: content: | - $("#hide-worksheet").click(hideWorksheet); - $("#unhide-worksheet").click(unhideWorksheet); + $("#hide-worksheet").click(() => tryCatch(hideWorksheet)); + $("#unhide-worksheet").click(() => tryCatch(unhideWorksheet)); async function hideWorksheet() { - try { - await Excel.run(async (context) => { + await Excel.run(async (context) => { - const visibleSheets = await filterWorksheetsByVisibility(context, Excel.SheetVisibility.visible); + const visibleSheets = await filterWorksheetsByVisibility(context, Excel.SheetVisibility.visible); - if (visibleSheets.length > 1) { - console.log(`Hiding worksheet named "${visibleSheets[0].name}"...`); + if (visibleSheets.length > 1) { + console.log(`Hiding worksheet named "${visibleSheets[0].name}"...`); - visibleSheets[0].visibility = Excel.SheetVisibility.hidden; + visibleSheets[0].visibility = Excel.SheetVisibility.hidden; - await context.sync(); + await context.sync(); - } else { - console.log("Cannot hide the only visible worksheet"); - } - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + } else { + console.log("Cannot hide the only visible worksheet"); + } + }); } async function unhideWorksheet() { - try { - await Excel.run(async (context) => { + await Excel.run(async (context) => { - const visibleSheets = await filterWorksheetsByVisibility(context, Excel.SheetVisibility.hidden); + const visibleSheets = await filterWorksheetsByVisibility(context, Excel.SheetVisibility.hidden); - if (visibleSheets.length > 0) { - console.log(`Unhiding worksheet named "${visibleSheets[0].name}"...`); + if (visibleSheets.length > 0) { + console.log(`Unhiding worksheet named "${visibleSheets[0].name}"...`); - visibleSheets[0].visibility = Excel.SheetVisibility.visible; + visibleSheets[0].visibility = Excel.SheetVisibility.visible; - await context.sync(); - - } else { - console.log("No hidden worksheets in the workbook"); - } - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + await context.sync(); + + } else { + console.log("No hidden worksheets in the workbook"); + } + }); } async function filterWorksheetsByVisibility(context: Excel.RequestContext, visibility: string): Promise { - const sheets = context.workbook.worksheets; sheets.load("items/name, items/visibility"); - await context.sync(); return sheets.items.filter((s) => (s.visibility === visibility)); } async function setup() { - try { await Excel.run(async context => { const sheets = context.workbook.worksheets; sheets.load("items"); @@ -83,10 +68,17 @@ script: await context.sync(); } }); - } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } } language: typescript template: diff --git a/samples/excel/90-scenarios/working-with-dates.yaml b/samples/excel/90-scenarios/working-with-dates.yaml index 9f92c9f42..926ddf653 100644 --- a/samples/excel/90-scenarios/working-with-dates.yaml +++ b/samples/excel/90-scenarios/working-with-dates.yaml @@ -10,94 +10,88 @@ script: content: | declare var moment: any; - $("#setup").click(setup); - $("#set-date-value-using-timestamp").click(setDateValueUsingTimestamp); - $("#get-date-value").click(getDateValue); + $("#setup").click(() => tryCatch(setup)); + $("#set-date-value-using-timestamp").click(() => tryCatch(setDateValueUsingTimestamp)); + $("#get-date-value").click(() => tryCatch(getDateValue)); async function setDateValueUsingTimestamp() { - try { - await Excel.run(async (context) => { + await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + const sheet = context.workbook.worksheets.getItem("Sample"); - const now = Date.now(); - console.log(`set (timestamp): ${now}`); + const now = Date.now(); + console.log(`set (timestamp): ${now}`); - const nowMoment = moment(now); - console.log(`set (moment): ${JSON.stringify(nowMoment)}`); + const nowMoment = moment(now); + console.log(`set (moment): ${JSON.stringify(nowMoment)}`); - const nowMS = nowMoment.toOADate(); - console.log(`set (MSDate): ${nowMS}`); + const nowMS = nowMoment.toOADate(); + console.log(`set (MSDate): ${nowMS}`); - const dateRange = sheet.getRange("B4"); - dateRange.values = [[nowMS]];`` - dateRange.numberFormat = [["[$-409]m/d/yy h:mm AM/PM;@"]]; + const dateRange = sheet.getRange("B4"); + dateRange.values = [[nowMS]];`` + dateRange.numberFormat = [["[$-409]m/d/yy h:mm AM/PM;@"]]; - dateRange.format.autofitColumns(); + dateRange.format.autofitColumns(); - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + await context.sync(); + }); } async function getDateValue() { - try { - await Excel.run(async (context) => { + await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + const sheet = context.workbook.worksheets.getItem("Sample"); - const dateRange = sheet.getRange("B3"); - dateRange.load("values"); + const dateRange = sheet.getRange("B3"); + dateRange.load("values"); - await context.sync(); + await context.sync(); - const nowMS = dateRange.values[0][0]; + const nowMS = dateRange.values[0][0]; - console.log(`get (MSDate): ${nowMS}`); + console.log(`get (MSDate): ${nowMS}`); - const nowMoment = moment.fromOADate(nowMS); - console.log(`get (moment): ${JSON.stringify(nowMoment)}`); + const nowMoment = moment.fromOADate(nowMS); + console.log(`get (moment): ${JSON.stringify(nowMoment)}`); - const now = nowMoment.unix(); - console.log(`get (timestamp): ${now}`) - - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + const now = nowMoment.unix(); + console.log(`get (timestamp): ${now}`) + + }); } async function setup() { - try { - await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); + await Excel.run(async (context) => { + const sheet = await OfficeHelpers.ExcelUtilities + .forceCreateSheet(context.workbook, "Sample"); - const data = [ - ["Now"], - ["=NOW()"] - ]; + const data = [ + ["Now"], + ["=NOW()"] + ]; - const dataRange = sheet.getRange("B2:B3"); - dataRange.formulas = data; + const dataRange = sheet.getRange("B2:B3"); + dataRange.formulas = data; - const headerRange = sheet.getRange("B2"); - headerRange.format.font.bold = true; + const headerRange = sheet.getRange("B2"); + headerRange.format.font.bold = true; - const dateRange = sheet.getRange("B3"); - dateRange.numberFormat = [["[$-409]m/d/yy h:mm AM/PM;@"]]; + const dateRange = sheet.getRange("B3"); + dateRange.numberFormat = [["[$-409]m/d/yy h:mm AM/PM;@"]]; - dateRange.format.autofitColumns(); + dateRange.format.autofitColumns(); - sheet.activate(); - await context.sync(); - }); + sheet.activate(); + await context.sync(); + }); + } + + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); } catch (error) { OfficeHelpers.UI.notify(error); @@ -158,4 +152,4 @@ libraries: | @types/jquery@3.3.1 moment@2.18.1 - moment-msdate@0.2.2 \ No newline at end of file + moment-msdate@0.2.2 \ 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 828f9b9c5..1b4190cd5 100644 --- a/samples/excel/99-just-for-fun/patterns.yaml +++ b/samples/excel/99-just-for-fun/patterns.yaml @@ -8,134 +8,116 @@ api_set: ExcelApi: 1.2 script: content: |- - $("#squares").click(drawSquares); - $("#spiral").click(drawSpiral); - $("#decoration").click(drawDecoration); + $("#squares").click(() => tryCatch(drawSquares)); + $("#spiral").click(() => tryCatch(drawSpiral)); + $("#decoration").click(() => tryCatch(drawDecoration)); async function drawSquares() { - try { - await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Patterns", true /*clearOnly*/); - sheet.activate(); - formatBackground(sheet); - - const size = parseInt($("#size").val() as string); - - for (var i = 0; i < size; i++) { - const width = size * 2 - 2 * i; - const colors = [ - rgb(30 + Math.floor(225 / size * i), 0, 0), - rgb(0, Math.floor(225 / size * i), 0) - ]; - const range = sheet.getCell(i + 1, i + 1).getResizedRange(width - 1, width - 1); - range.format.fill.color = colors[i % 2]; - await context.sync(); - await pause(20); - } - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + await Excel.run(async (context) => { + const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Patterns", true /*clearOnly*/); + sheet.activate(); + formatBackground(sheet); + + const size = parseInt($("#size").val() as string); + + for (var i = 0; i < size; i++) { + const width = size * 2 - 2 * i; + const colors = [ + rgb(30 + Math.floor(225 / size * i), 0, 0), + rgb(0, Math.floor(225 / size * i), 0) + ]; + const range = sheet.getCell(i + 1, i + 1).getResizedRange(width - 1, width - 1); + range.format.fill.color = colors[i % 2]; + await context.sync(); + await pause(20); + } + }); } async function drawSpiral() { - try { - await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Patterns", true /*clearOnly*/); - sheet.activate(); - formatBackground(sheet); - - const size = Math.floor(parseInt($("#size").val() as string) / 2); - - for (let i = 0; i < size - 1; i++) { - - // i is the number of full turns of the spiral; x, y, z, and w - are lengths of lines that go right, down, left, and up, respectively. - let x = 4 * i + 1; - let y = 4 * i + 2; - let z = 4 * i + 3; - let w = 4 * i + 4; - - let colorFactor = Math.floor(190 / size); - - formatLineRight(size, i, colorFactor, x); - await context.sync(); - await pause(30); - - formatLineDown(size, i, colorFactor, x, y); - await context.sync(); - await pause(30); - - formatLineLeft(size, i, colorFactor, x, y, z); - await context.sync(); - await pause(30); - - formatLineUp(size, i, colorFactor, x, y, z, w); - await context.sync(); - await pause(30); - } - - // Helpers - - function formatLineRight(size, i, colorFactor, x) { - const rangeLineRight = sheet.getCell((size-i)*2-1, (size-i)*2-1).getResizedRange(0, x); - rangeLineRight.format.fill.color = rgb(255 - i * colorFactor, 0, i * colorFactor); - } - - function formatLineDown(size, i, colorFactor, x, y) { - const rangeLineDown = sheet.getCell((size-i)*2-1, (size-i)*2-1 + x).getResizedRange(y, 0); - rangeLineDown.format.fill.color = rgb(250 - i * colorFactor, 0, i * colorFactor + 5); - } - - function formatLineLeft(size, i, colorFactor, x, y, z) { - const rangeLineLeft = sheet.getCell((size-i)*2-1 + y, (size-i)*2-1 + x).getResizedRange(0, -z); - rangeLineLeft.format.fill.color = rgb(245 - i * colorFactor, 0, i * colorFactor + 10); - } - - function formatLineUp(size, i, colorFactor, x, y, z, w) { - const rangeLineUp = sheet.getCell((size-i)*2-1 + y, (size-i)*2-1 + x - z).getResizedRange(-w, 0); - rangeLineUp.format.fill.color = rgb(240 - i * colorFactor, 0, i * colorFactor + 15); - } - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + await Excel.run(async (context) => { + const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Patterns", true /*clearOnly*/); + sheet.activate(); + formatBackground(sheet); + + const size = Math.floor(parseInt($("#size").val() as string) / 2); + + for (let i = 0; i < size - 1; i++) { + + // i is the number of full turns of the spiral; x, y, z, and w - are lengths of lines that go right, down, left, and up, respectively. + let x = 4 * i + 1; + let y = 4 * i + 2; + let z = 4 * i + 3; + let w = 4 * i + 4; + + let colorFactor = Math.floor(190 / size); + + formatLineRight(size, i, colorFactor, x); + await context.sync(); + await pause(30); + + formatLineDown(size, i, colorFactor, x, y); + await context.sync(); + await pause(30); + + formatLineLeft(size, i, colorFactor, x, y, z); + await context.sync(); + await pause(30); + + formatLineUp(size, i, colorFactor, x, y, z, w); + await context.sync(); + await pause(30); + } + + // Helpers + + function formatLineRight(size, i, colorFactor, x) { + const rangeLineRight = sheet.getCell((size-i)*2-1, (size-i)*2-1).getResizedRange(0, x); + rangeLineRight.format.fill.color = rgb(255 - i * colorFactor, 0, i * colorFactor); + } + + function formatLineDown(size, i, colorFactor, x, y) { + const rangeLineDown = sheet.getCell((size-i)*2-1, (size-i)*2-1 + x).getResizedRange(y, 0); + rangeLineDown.format.fill.color = rgb(250 - i * colorFactor, 0, i * colorFactor + 5); + } + + function formatLineLeft(size, i, colorFactor, x, y, z) { + const rangeLineLeft = sheet.getCell((size-i)*2-1 + y, (size-i)*2-1 + x).getResizedRange(0, -z); + rangeLineLeft.format.fill.color = rgb(245 - i * colorFactor, 0, i * colorFactor + 10); + } + + function formatLineUp(size, i, colorFactor, x, y, z, w) { + const rangeLineUp = sheet.getCell((size-i)*2-1 + y, (size-i)*2-1 + x - z).getResizedRange(-w, 0); + rangeLineUp.format.fill.color = rgb(240 - i * colorFactor, 0, i * colorFactor + 15); + } + }); } async function drawDecoration() { - try { - await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Patterns", true /*clearOnly*/); - sheet.activate(); - formatBackground(sheet); - - const size = Math.floor(parseInt($("#size").val() as string) / 2); - - for (var 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) - 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); - range4.format.fill.color = rgb(colorFactor, 255 - colorFactor, 0); - - await context.sync(); - await pause(30); - } - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + await Excel.run(async (context) => { + const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Patterns", true /*clearOnly*/); + sheet.activate(); + formatBackground(sheet); + + const size = Math.floor(parseInt($("#size").val() as string) / 2); + + for (var 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) + 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); + range4.format.fill.color = rgb(colorFactor, 255 - colorFactor, 0); + + await context.sync(); + await pause(30); + } + }); } function rgb(r, g, b) { @@ -152,6 +134,18 @@ script: range.format.rowHeight = 7; range.format.fill.color = "black"; } + + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } + catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } language: typescript template: content: |- diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 84b5d94386862d692e863f817d13c72716eadd4f..c9ff9878af3ce304a7e51ff491421187465f2eac 100644 GIT binary patch delta 8759 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 Qy8@D5#OM(zg#SVO7qP8>?EnA( delta 8818 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 7b6ab7733..93038a2cd 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -1,6 +1,6 @@ Excel.ChartAxis.displayUnit: - |- - await Excel.run(async (context) => { + await Excel.run(async context => { const sheet = context.workbook.worksheets.getItem("Sample"); let chart = sheet.charts.getItemAt(0); @@ -9,16 +9,17 @@ Excel.ChartAxis.displayUnit: // Load to get display unit. valueAxis.load("displayUnit"); - + await context.sync(); - OfficeHelpers.UI.notify("The vertical axis display unit is: " + valueAxis.displayUnit); + OfficeHelpers.UI.notify( + "The vertical axis display unit is: " + valueAxis.displayUnit + ); }); Excel.ChartAxis.showDisplayUnitLabel: - |- - await Excel.run(async (context) => { + await Excel.run(async context => { const sheet = context.workbook.worksheets.getItem("Sample"); - let chart = sheet.charts.getItemAt(0); let axis = chart.axes.valueAxis; @@ -63,35 +64,36 @@ Excel.ChartFill.setSolidColor: }); Excel.ChartSeries.delete: - |- - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + 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(); - let seriesCollection = sheet.charts.getItemAt(0).series; - let series = seriesCollection.getItemAt(0); + if (seriesCollection.count > 0) { + const series = seriesCollection.getItemAt(0); // Delete the first series. series.delete(); + } - await context.sync(); + await context.sync(); }); Excel.ChartSeries.setValues: - |- - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - let seriesCollection = sheet.charts.getItemAt(0).series; - - // Add new series. - let series = seriesCollection.add("New Product"); - let values = sheet.getRange("E2:E7"); + await Excel.run(async context => { + const sheet = context.workbook.worksheets.getItem("Sample"); - // Set the vertical values for the series. - series.setValues(values); - seriesCollection.load("count"); + let seriesCollection = sheet.charts.getItemAt(0); + let rangeSelection = sheet.getRange("C2:C7"); + let xRangeSelection = sheet.getRange("A1:A7"); - await context.sync(); + // Add a series. + let newSeries = seriesCollection.series.add("Qtr2"); + newSeries.setValues(rangeSelection); + newSeries.setXAxisValues(xRangeSelection); - OfficeHelpers.UI.notify("Number of series = " + seriesCollection.count); + await context.sync(); }); Excel.ChartSeries.markerStyle: - |- @@ -270,39 +272,18 @@ Excel.ChartTrendlineFormat.line: }); Excel.NamedItemCollection.add: - |- - await Excel.run(async (context) => { + await Excel.run(async context => { const sheet = context.workbook.worksheets.getItem("Sample"); - const headerRange = sheet.getRange("A1:E1"); + const headerRange = sheet.getRange("A1:D1"); + sheet.names.add("ExpensesHeader", headerRange); const namedItems = sheet.names.load("name, type"); await context.sync(); - - let namedItemsList = `This workbook contains ${namedItems.items.length} named item(s):`; - for (let i = 0; i < namedItems.items.length; i++) { - namedItemsList += JSON.stringify(namedItems.items[i]); - } - OfficeHelpers.UI.notify(namedItemsList); - - await context.sync(); }); - - |- - try { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - sheet.names.add("TotalAmount", "=SUM(ExpensesTable[AMOUNT])"); - sheet.getRange("D11").values = [["=TotalAmount"]]; - await context.sync(); - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } Excel.CustomXmlPart.getXml: - |- await Excel.run(async (context) => { - // You must have the xmlns attribute to populate the // CustomXml.namespaceUri property. const originalXml = "JuanHongSally"; @@ -324,7 +305,6 @@ Excel.CustomXmlPart.getXml: Excel.CustomXmlPart.id: - |- await Excel.run(async (context) => { - // You must have the xmlns attribute to populate the // CustomXml.namespaceUri property. const originalXml = "JuanHongSally"; @@ -347,32 +327,31 @@ Excel.CustomXmlPart.setXml: - |- await Excel.run(async (context) => { const settings = context.workbook.settings; - const xmlPartIDSetting = settings.getItem("ContosoReviewXmlPartId").load("value"); - + 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. customXmlPart.setXml("JohnHitomi"); const xmlBlob = customXmlPart.getXml(); - await context.sync(); const readableXml = addLineBreaksToXML(xmlBlob.value); $("#display-xml").text(readableXml); - await context.sync(); + } }); Excel.CustomXmlPart.delete: - |- await Excel.run(async (context) => { const settings = context.workbook.settings; - const xmlPartIDSetting = settings.getItem("ContosoReviewXmlPartId").load("value"); - + const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); await context.sync(); - + + if (xmlPartIDSetting.value) { let customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); const xmlBlob = customXmlPart.getXml(); customXmlPart.delete(); @@ -392,11 +371,11 @@ Excel.CustomXmlPart.delete: } await context.sync(); + } }); Excel.CustomXmlPartCollection.add: - |- await Excel.run(async (context) => { - // You must have the xmlns attribute to populate the // CustomXml.namespaceUri property. const originalXml = "JuanHongSally"; @@ -419,32 +398,31 @@ Excel.CustomXmlPartCollection.getItem: - |- await Excel.run(async (context) => { const settings = context.workbook.settings; - const xmlPartIDSetting = settings.getItem("ContosoReviewXmlPartId").load("value"); - + 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. customXmlPart.setXml("JohnHitomi"); const xmlBlob = customXmlPart.getXml(); - await context.sync(); const readableXml = addLineBreaksToXML(xmlBlob.value); $("#display-xml").text(readableXml); - await context.sync(); + } }); Excel.CustomXmlPartScopedCollection.getItemOrNullObject: - |- await Excel.run(async (context) => { const settings = context.workbook.settings; - const xmlPartIDSetting = settings.getItem("ContosoReviewXmlPartId").load("value"); - + const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); await context.sync(); - + + if (xmlPartIDSetting.value) { let customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); const xmlBlob = customXmlPart.getXml(); customXmlPart.delete(); @@ -464,6 +442,7 @@ Excel.CustomXmlPartScopedCollection.getItemOrNullObject: } await context.sync(); + } }); Excel.CustomXmlPartCollection.getByNamespace: - |- @@ -699,7 +678,7 @@ Excel.SettingCollection.onSettingsChanged: await Excel.run(async (context) => { const settings = context.workbook.settings; settings.onSettingsChanged.add(onChangedSetting); - OfficeHelpers.UI.notify("Handler registered", ""); + OfficeHelpers.UI.notify("Settings changed handler registered", "Press the next button to change the setting, then watch the console."); await context.sync(); }); @@ -708,7 +687,7 @@ Excel.SettingCollection.add: await Excel.run(async (context) => { const settings = context.workbook.settings; settings.onSettingsChanged.add(onChangedSetting); - OfficeHelpers.UI.notify("Handler registered", ""); + OfficeHelpers.UI.notify("Settings changed handler registered", "Press the next button to change the setting, then watch the console."); await context.sync(); }); @@ -784,29 +763,33 @@ Excel.TableCollection.onChanged: }); Excel.WorksheetCollection.onDeactivated: - |- - await Excel.run(async (context) => { + await Excel.run(async context => { let sheets = context.workbook.worksheets; sheets.onDeactivated.add(onDeactivate); await context.sync(); - OfficeHelpers.UI.notify("A handler has been registered for the OnDeactivate event", - "Try selecting a different worksheet, and watch the console output."); + OfficeHelpers.UI.notify( + "A handler has been registered for the OnDeactivate event", + "Try selecting a different worksheet, and watch the console output." + ); }); Excel.WorksheetCollection.onActivated: - |- - await Excel.run(async (context) => { + await Excel.run(async context => { let sheets = context.workbook.worksheets; sheets.onActivated.add(onActivate); await context.sync(); - OfficeHelpers.UI.notify("A handler has been registered for the OnActivate event", - "Try selecting a different worksheet, and watch the console output."); + OfficeHelpers.UI.notify( + "A handler has been registered for the OnActivate event", + "Try selecting a different worksheet, and watch the console output." + ); }); Excel.Worksheet.onChanged: - |- - await Excel.run(async (context) => { + await Excel.run(async context => { let sheet = context.workbook.worksheets.getItem("Sample"); sheet.onChanged.add(onChange); @@ -817,20 +800,25 @@ Excel.Worksheet.onChanged: Excel.WorksheetAddedEventArgs.worksheetId: - |- 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); + await Excel.run(async context => { + console.log( + "Handler for worksheet onAdded event has been triggered. Newly added worksheet Id : " + + event.worksheetId + ); }); } Excel.WorksheetCollection.onAdded: - |- - await Excel.run(async (context) => { + await Excel.run(async context => { let sheet = context.workbook.worksheets; sheet.onAdded.add(onWorksheetAdd); await context.sync(); - OfficeHelpers.UI.notify("A handler has been registered for the OnAdded event", - "Try adding a worksheet, and watch the console output."); + OfficeHelpers.UI.notify( + "A handler has been registered for the OnAdded event", + "Try adding a worksheet, and watch the console output." + ); }); Excel.Worksheet.showGridlines: - |- @@ -877,24 +865,23 @@ Excel.Range.set: }); Excel.NamedItem.delete: - |- - try { - await Excel.run(async (context) => { - - const sheet = context.workbook.worksheets.getItem("Sample"); + await Excel.run(async context => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const totalName = sheet.names.getItemOrNullObject("TotalAmount"); + totalName.load(); + await context.sync(); - sheet.names.getItem("TotalAmount").delete(); + if (totalName.value) { + totalName.delete(); // Replace the named item (TotalAmount) with the actual formula for TotalAmount to avoid displaying #NAME in the cell. sheet.getRange("D11").values = [["=SUM(ExpensesTable[AMOUNT])"]]; + } else { + console.log("No named item created for the formula."); + } - await context.sync(); - - }); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + await context.sync(); + }); Excel.DataPivotHierarchy.showAs: - |- await Excel.run(async (context) => { @@ -1999,28 +1986,36 @@ Excel.RangeHyperlink.documentReference: }); Excel.Range.getUsedRangeOrNullObject: - |- - await Excel.run(async (context) => { - - const sheet = context.workbook.worksheets.getItem("Sample"); + 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 */); + // 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) { - OfficeHelpers.UI.notify("Need Data to Make Chart", "To create a meaningful chart, 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"; + OfficeHelpers.UI.notify( + "Need Data to Make Chart", + "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(); @@ -2197,18 +2192,14 @@ Excel.NamedItem.formula: // Get the named item const myNamedItem = sheet.names.getItemOrNullObject("MyRange"); myNamedItem.load("name, formula"); - await context.sync(); if (myNamedItem.isNullObject) { OfficeHelpers.UI.notify(`There is no named item with the name "MyRange".`); - } else { - + } else { // Update named item to point to the second range myNamedItem.formula = "=Sample!$B$10:$D$14"; - sheet.getRange("B10:D14").select(); - await context.sync(); OfficeHelpers.UI.notify(`Just updated the named item "${myNamedItem.name}" -- it's now located here: ${myNamedItem.formula}`); @@ -2400,6 +2391,25 @@ Excel.Worksheet.tabColor: const activeSheet = context.workbook.worksheets.getActiveWorksheet(); activeSheet.tabColor = "#FF0000"; + await context.sync(); + }); +Excel.ChartTitle.getSubstring: + - |- + await Excel.run(async context => { + let sheet = context.workbook.worksheets.getItem("Sample"); + let chart = sheet.charts.getItemAt(0); + + // Get first seven characters of the title and color them green. + chart.title.getSubstring(0, 7).font.color = "Yellow"; + await context.sync(); + }); +Excel.ChartTitle.textOrientation: + - |- + await Excel.run(async context => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const title = sheet.charts.getItemAt(0).title; + title.textOrientation = -45; + await context.sync(); }); Word.InlinePicture.getBase64ImageSrc: diff --git a/view/excel.json b/view/excel.json index b065d8f14..eeca4ae82 100644 --- a/view/excel.json +++ b/view/excel.json @@ -12,7 +12,7 @@ "excel-chart-series": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-series.yaml", "excel-chart-series-markers": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-series-markers.yaml", "excel-chart-series-plotorder": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-series-plotorder.yaml", - "excel-chart-title-substring": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-title-substring.yaml", + "excel-chart-title-format": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-title-format.yaml", "excel-chart-trendlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-trendlines.yaml", "excel-range-conditional-formatting-advanced": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml", "excel-range-conditional-formatting-basic": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml", @@ -24,27 +24,19 @@ "excel-document-get-file-in-slices-async": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/26-document/get-file-in-slices-async.yaml", "excel-document-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/26-document/properties.yaml", "excel-settings-create-get-change-delete-settings": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/26-document/create-get-change-delete-settings.yaml", - "excel-events-chart-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-chart-activated.yaml", "excel-events-chartcollection-added-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-chartcollection-added-activated.yaml", + "excel-events-chart-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-chart-activated.yaml", "excel-events-data-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/data-changed.yaml", "excel-events-disable-events": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-disable-events.yaml", - "excel-events-selection-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/selection-changed.yaml", "excel-events-table-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-table-changed.yaml", "excel-events-tablecollection-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-tablecollection-changed.yaml", - "excel-events-setting-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/setting-changed.yaml", - "excel-events-worksheet-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-worksheet-activated.yaml", - "excel-events-worksheet-calculated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-worksheet-calculated.yaml", - "excel-events-worksheet-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-worksheet-changed.yaml", - "excel-events-worksheetcollection-calculated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-worksheetcollection-calculated.yaml", - "excel-events-worksheet-selectionchanged": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-worksheet-selectionchanged.yaml", + "excel-events-workbook-and-worksheet-collection": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml", + "excel-events-worksheet": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-worksheet.yaml", "excel-named-item-create-and-remove-named-item": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/34-named-item/create-and-remove-named-item.yaml", - "excel-named-item-list-named-items": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/34-named-item/list-named-items.yaml", - "excel-create-and-use-named-item-for-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/34-named-item/create-and-use-named-item-for-range.yaml", "excel-update-named-item": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/34-named-item/update-named-item.yaml", "excel-pivottable-calculations": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/38-pivottable/pivottable-calculations.yaml", "excel-pivottable-create-and-modify": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/38-pivottable/pivottable-create-and-modify.yaml", "excel-pivottable-filters-and-summaries": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml", - "excel-pivottable-refresh-pivot-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/38-pivottable/refresh-pivot-table.yaml", "excel-range-formatting": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/formatting.yaml", "excel-range-hyperlink": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-hyperlink.yaml", "excel-range-insert-delete-and-clear-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/insert-delete-clear-range.yaml", From 2cf1055524f77d22d6aa67bbe8348c2f136df15e Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 14 Nov 2018 15:51:05 -0800 Subject: [PATCH 102/660] Further snippet clean up (#230) * Fixing Chart Title HTML * Use console.log for conditional format display * Fixing typo * Fixing spacing * Clean up PivotTable sample HTML formatting * Fix indentation --- playlists/excel.yaml | 2 +- samples/excel/10-chart/chart-axis.yaml | 10 +- .../excel/10-chart/chart-title-format.yaml | 13 +- .../conditional-formatting-basic.yaml | 15 +- ...e-set-get-and-delete-custom-xml-parts.yaml | 54 ++--- ...nts-workbook-and-worksheet-collection.yaml | 2 +- .../pivottable-calculations.yaml | 2 +- .../pivottable-create-and-modify.yaml | 50 ++--- .../pivottable-filters-and-summaries.yaml | 10 +- .../excel/42-range/test-for-used-range.yaml | 67 +++---- snippet-extractor-output/snippets.yaml | 185 ++++++++---------- 11 files changed, 189 insertions(+), 221 deletions(-) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index ed1734ee1..fe35cec92 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -272,7 +272,7 @@ api_set: ExcelApi: 1.7 - id: excel-events-workbook-and-worksheet-collection - name: Workbook and Worksheet collection events + 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 diff --git a/samples/excel/10-chart/chart-axis.yaml b/samples/excel/10-chart/chart-axis.yaml index 5b20255a9..9518c0371 100644 --- a/samples/excel/10-chart/chart-axis.yaml +++ b/samples/excel/10-chart/chart-axis.yaml @@ -27,9 +27,7 @@ script: await context.sync(); - OfficeHelpers.UI.notify( - "The vertical axis display unit is: " + valueAxis.displayUnit - ); + OfficeHelpers.UI.notify("The vertical axis display unit is: " + valueAxis.displayUnit); }); } @@ -100,10 +98,8 @@ script: console.log("The category axis title is: " + categoryAxis.title.text); console.log("The value axis title is: " + valueAxis.title.text); - OfficeHelpers.UI.notify( - "The minor gridlines visibility is set to: " + - valueAxis.minorGridlines.visible - ); + OfficeHelpers.UI.notify("The minor gridlines visibility is set to: " + + valueAxis.minorGridlines.visible); }); } diff --git a/samples/excel/10-chart/chart-title-format.yaml b/samples/excel/10-chart/chart-title-format.yaml index 47b5c35c8..433fcf37d 100644 --- a/samples/excel/10-chart/chart-title-format.yaml +++ b/samples/excel/10-chart/chart-title-format.yaml @@ -118,14 +118,17 @@ template:

Try it out

-

-

+

+

diff --git a/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml index e781951d9..3ea042051 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -171,19 +171,12 @@ script: await context.sync(); - $("#conditional-formats li").remove(); if (cfRangePairs.length > 0) { cfRangePairs.forEach(item => { - let $p = $("

").text( - `${item.cf.type}`) - let $li = $(`
  • `); - $li.append($p); - $("#conditional-formats").append($li); - $(".conditional-formats").show()[0].scrollIntoView(); - }) - } - else { - OfficeHelpers.UI.notify("None to display", "No conditional formats in workbook", "warning"); + console.log(item.cf.type); + }); + } else { + console.log("No conditional formats applied."); } }); } 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 27ee35287..89759290c 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 @@ -40,19 +40,19 @@ script: const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); await context.sync(); - if (xmlPartIDSetting.value) { - const customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); + if (xmlPartIDSetting.value) { + const customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); - // The setXml method does a whole-for-whole replacement - // of the entire XML. - customXmlPart.setXml("JohnHitomi"); - const xmlBlob = customXmlPart.getXml(); - await context.sync(); + // The setXml method does a whole-for-whole replacement + // of the entire XML. + customXmlPart.setXml("JohnHitomi"); + const xmlBlob = customXmlPart.getXml(); + await context.sync(); - const readableXml = addLineBreaksToXML(xmlBlob.value); - $("#display-xml").text(readableXml); - await context.sync(); - } + const readableXml = addLineBreaksToXML(xmlBlob.value); + $("#display-xml").text(readableXml); + await context.sync(); + } }); } @@ -63,25 +63,25 @@ script: await context.sync(); if (xmlPartIDSetting.value) { - let customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); - const xmlBlob = customXmlPart.getXml(); - customXmlPart.delete(); - customXmlPart = context.workbook.customXmlParts.getItemOrNullObject(xmlPartIDSetting.value); + let customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); + const xmlBlob = customXmlPart.getXml(); + customXmlPart.delete(); + customXmlPart = context.workbook.customXmlParts.getItemOrNullObject(xmlPartIDSetting.value); - await context.sync(); + await context.sync(); - if (customXmlPart.isNullObject) { - $("#display-xml").text(`The XML part with the id ${xmlPartIDSetting.value} has been deleted.`); + if (customXmlPart.isNullObject) { + $("#display-xml").text(`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); - } + // 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); + } - await context.sync(); + await context.sync(); } }); } @@ -118,7 +118,7 @@ template: -

    Press the button to delete the XML part.

    +

    Press the button to delete the XML part.

    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 b0b09d778..6379cf44b 100644 --- a/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml +++ b/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml @@ -1,6 +1,6 @@ order: 7 id: excel-events-workbook-and-worksheet-collection -name: Workbook and Worksheet collection events +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.' author: OfficeDev host: EXCEL diff --git a/samples/excel/38-pivottable/pivottable-calculations.yaml b/samples/excel/38-pivottable/pivottable-calculations.yaml index b5f6367b6..10b052b7d 100644 --- a/samples/excel/38-pivottable/pivottable-calculations.yaml +++ b/samples/excel/38-pivottable/pivottable-calculations.yaml @@ -168,7 +168,7 @@ template:
    -

    Change calculations

    +

    Try it out

    diff --git a/samples/excel/38-pivottable/pivottable-create-and-modify.yaml b/samples/excel/38-pivottable/pivottable-create-and-modify.yaml index b6405bf18..4ba51ddc2 100644 --- a/samples/excel/38-pivottable/pivottable-create-and-modify.yaml +++ b/samples/excel/38-pivottable/pivottable-create-and-modify.yaml @@ -205,46 +205,48 @@ template: Setup sample

    -
    -

    Create the PivotTable

    +

    Try it out

    +
    +
    +

    Create the PivotTable

    + Create +
    -

    Adjust the PivotTable

    +

    Adjust the PivotTable

    -

    - -

    + Add row + +

    + +

    -

    + Toggle column + +

    + Add data hierarchies +

    -

    Adjust formatting

    +

    Adjust formatting

    -

    + Change pivot hierarchy names + +

    + Change pivot layout +

    -

    Delete the PivotTable

    +

    Delete the PivotTable

    diff --git a/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml b/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml index b4097dfbd..0fd5c1d7f 100644 --- a/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml +++ b/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml @@ -166,7 +166,11 @@ template:
    -

    Change functions

    +

    Try it out

    +
    + +
    +

    Change functions

    @@ -185,14 +189,14 @@ template:

    -

    Filtering

    +

    Filtering

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

    -

    Data Manipulation

    +

    Data Manipulation

    diff --git a/samples/excel/42-range/test-for-used-range.yaml b/samples/excel/42-range/test-for-used-range.yaml index 98b1f4c6a..44508d3f9 100644 --- a/samples/excel/42-range/test-for-used-range.yaml +++ b/samples/excel/42-range/test-for-used-range.yaml @@ -20,29 +20,29 @@ script: // Pass true so only cells with values count as used const usedDataRange = dataRange.getUsedRangeOrNullObject( - true /* valuesOnly */ + true /* valuesOnly */ ); //Must sync before reading value returned from *OrNullObject method/property. await context.sync(); if (usedDataRange.isNullObject) { - OfficeHelpers.UI.notify( - "Need Data to Make Chart", - "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." - ); + OfficeHelpers.UI.notify( + "Need Data to Make Chart", + "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"; + 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(); @@ -55,13 +55,12 @@ script: const salesTable = sheet.tables.getItem("SalesTable"); const dataRange = salesTable.getDataBodyRange(); dataRange.values = [ - ["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] - ]; + ["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]]; dataRange.format.autofitColumns(); await context.sync(); @@ -70,26 +69,20 @@ script: async function setup() { await Excel.run(async context => { - const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet( - context.workbook, - "Sample" - ); + const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); let salesTable = sheet.tables.add("B2:F2", true /* hasHeaders */); salesTable.name = "SalesTable"; salesTable.showTotals = true; - salesTable.getHeaderRowRange().values = [ - ["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4"] - ]; + salesTable.getHeaderRowRange().values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4"]]; // The table should be created wtih no data. salesTable.rows.add(null, [ - [null, null, null, null, null], - [null, null, null, null, null], - [null, null, null, null, null], - [null, null, null, null, null], - [null, null, null, null, null], - [null, null, null, null, null] - ]); + [null, null, null, null, null], + [null, null, null, null, null], + [null, null, null, null, null], + [null, null, null, null, null], + [null, null, null, null, null], + [null, null, null, null, null]]); sheet.activate(); await context.sync(); diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 93038a2cd..0eecfe279 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -12,9 +12,7 @@ Excel.ChartAxis.displayUnit: await context.sync(); - OfficeHelpers.UI.notify( - "The vertical axis display unit is: " + valueAxis.displayUnit - ); + OfficeHelpers.UI.notify("The vertical axis display unit is: " + valueAxis.displayUnit); }); Excel.ChartAxis.showDisplayUnitLabel: - |- @@ -330,19 +328,19 @@ Excel.CustomXmlPart.setXml: const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); await context.sync(); - if (xmlPartIDSetting.value) { - const customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); + if (xmlPartIDSetting.value) { + const customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); - // The setXml method does a whole-for-whole replacement - // of the entire XML. - customXmlPart.setXml("JohnHitomi"); - const xmlBlob = customXmlPart.getXml(); - await context.sync(); + // The setXml method does a whole-for-whole replacement + // of the entire XML. + customXmlPart.setXml("JohnHitomi"); + const xmlBlob = customXmlPart.getXml(); + await context.sync(); - const readableXml = addLineBreaksToXML(xmlBlob.value); - $("#display-xml").text(readableXml); - await context.sync(); - } + const readableXml = addLineBreaksToXML(xmlBlob.value); + $("#display-xml").text(readableXml); + await context.sync(); + } }); Excel.CustomXmlPart.delete: - |- @@ -352,25 +350,25 @@ Excel.CustomXmlPart.delete: await context.sync(); if (xmlPartIDSetting.value) { - let customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); - const xmlBlob = customXmlPart.getXml(); - customXmlPart.delete(); - customXmlPart = context.workbook.customXmlParts.getItemOrNullObject(xmlPartIDSetting.value); + let customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); + const xmlBlob = customXmlPart.getXml(); + customXmlPart.delete(); + customXmlPart = context.workbook.customXmlParts.getItemOrNullObject(xmlPartIDSetting.value); - await context.sync(); + await context.sync(); - if (customXmlPart.isNullObject) { - $("#display-xml").text(`The XML part with the id ${xmlPartIDSetting.value} has been deleted.`); + if (customXmlPart.isNullObject) { + $("#display-xml").text(`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); - } + // 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); + } - await context.sync(); + await context.sync(); } }); Excel.CustomXmlPartCollection.add: @@ -401,19 +399,19 @@ Excel.CustomXmlPartCollection.getItem: const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); await context.sync(); - if (xmlPartIDSetting.value) { - const customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); + if (xmlPartIDSetting.value) { + const customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); - // The setXml method does a whole-for-whole replacement - // of the entire XML. - customXmlPart.setXml("JohnHitomi"); - const xmlBlob = customXmlPart.getXml(); - await context.sync(); + // The setXml method does a whole-for-whole replacement + // of the entire XML. + customXmlPart.setXml("JohnHitomi"); + const xmlBlob = customXmlPart.getXml(); + await context.sync(); - const readableXml = addLineBreaksToXML(xmlBlob.value); - $("#display-xml").text(readableXml); - await context.sync(); - } + const readableXml = addLineBreaksToXML(xmlBlob.value); + $("#display-xml").text(readableXml); + await context.sync(); + } }); Excel.CustomXmlPartScopedCollection.getItemOrNullObject: - |- @@ -423,25 +421,25 @@ Excel.CustomXmlPartScopedCollection.getItemOrNullObject: await context.sync(); if (xmlPartIDSetting.value) { - let customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); - const xmlBlob = customXmlPart.getXml(); - customXmlPart.delete(); - customXmlPart = context.workbook.customXmlParts.getItemOrNullObject(xmlPartIDSetting.value); + let customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); + const xmlBlob = customXmlPart.getXml(); + customXmlPart.delete(); + customXmlPart = context.workbook.customXmlParts.getItemOrNullObject(xmlPartIDSetting.value); - await context.sync(); + await context.sync(); - if (customXmlPart.isNullObject) { - $("#display-xml").text(`The XML part with the id ${xmlPartIDSetting.value} has been deleted.`); + if (customXmlPart.isNullObject) { + $("#display-xml").text(`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); - } + // 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); + } - await context.sync(); + await context.sync(); } }); Excel.CustomXmlPartCollection.getByNamespace: @@ -1312,19 +1310,12 @@ Excel.ConditionalFormat.type: await context.sync(); - $("#conditional-formats li").remove(); if (cfRangePairs.length > 0) { cfRangePairs.forEach(item => { - let $p = $("

    ").text( - `${item.cf.type}`) - let $li = $(`
  • `); - $li.append($p); - $("#conditional-formats").append($li); - $(".conditional-formats").show()[0].scrollIntoView(); - }) - } - else { - OfficeHelpers.UI.notify("None to display", "No conditional formats in workbook", "warning"); + console.log(item.cf.type); + }); + } else { + console.log("No conditional formats applied."); } }); Excel.ConditionalFormat.getRange: @@ -1346,19 +1337,12 @@ Excel.ConditionalFormat.getRange: await context.sync(); - $("#conditional-formats li").remove(); if (cfRangePairs.length > 0) { cfRangePairs.forEach(item => { - let $p = $("

    ").text( - `${item.cf.type}`) - let $li = $(`
  • `); - $li.append($p); - $("#conditional-formats").append($li); - $(".conditional-formats").show()[0].scrollIntoView(); - }) - } - else { - OfficeHelpers.UI.notify("None to display", "No conditional formats in workbook", "warning"); + console.log(item.cf.type); + }); + } else { + console.log("No conditional formats applied."); } }); Excel.ConditionalFormatCollection.add: @@ -1396,19 +1380,12 @@ Excel.ConditionalFormatCollection.getItemAt: await context.sync(); - $("#conditional-formats li").remove(); if (cfRangePairs.length > 0) { cfRangePairs.forEach(item => { - let $p = $("

    ").text( - `${item.cf.type}`) - let $li = $(`
  • `); - $li.append($p); - $("#conditional-formats").append($li); - $(".conditional-formats").show()[0].scrollIntoView(); - }) - } - else { - OfficeHelpers.UI.notify("None to display", "No conditional formats in workbook", "warning"); + console.log(item.cf.type); + }); + } else { + console.log("No conditional formats applied."); } }); Excel.ConditionalFormatCollection.clearAll: @@ -1993,29 +1970,29 @@ Excel.Range.getUsedRangeOrNullObject: // Pass true so only cells with values count as used const usedDataRange = dataRange.getUsedRangeOrNullObject( - true /* valuesOnly */ + true /* valuesOnly */ ); //Must sync before reading value returned from *OrNullObject method/property. await context.sync(); if (usedDataRange.isNullObject) { - OfficeHelpers.UI.notify( - "Need Data to Make Chart", - "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." - ); + OfficeHelpers.UI.notify( + "Need Data to Make Chart", + "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"; + 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(); From 8c70f5e3bd740f9a8e824131dacfc9b1df7c1132 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 16 Nov 2018 09:53:33 -0800 Subject: [PATCH 103/660] Snippet standization cleanup (#231) * Adding parens around context * Remove unnecessary mention of JavaScript API * Name and description updates * Update basic instructions * Chart format fixes * Fix spacing * Event, worksheet, and pivot fixes * Standardizing console versus UI.notify * Rerunning npm start --- playlists/excel.yaml | 36 +- .../excel/01-basics/basic-api-call-es5.yaml | 1 + samples/excel/01-basics/basic-api-call.yaml | 1 + .../01-basics/basic-common-api-call.yaml | 30 +- .../excel/10-chart/chart-axis-formatting.yaml | 3 - samples/excel/10-chart/chart-axis.yaml | 42 +-- .../10-chart/chart-create-several-charts.yaml | 8 +- samples/excel/10-chart/chart-legend.yaml | 10 +- samples/excel/10-chart/chart-point.yaml | 4 +- samples/excel/10-chart/chart-series.yaml | 6 +- .../excel/10-chart/chart-title-format.yaml | 12 +- .../excel/10-chart/create-doughnut-chart.yaml | 2 +- .../conditional-formatting-advanced.yaml | 2 +- .../conditional-formatting-basic.yaml | 4 +- .../create-get-change-delete-settings.yaml | 12 +- .../26-document/get-file-in-slices-async.yaml | 5 +- samples/excel/26-document/properties.yaml | 4 +- samples/excel/30-events/data-changed.yaml | 5 +- .../30-events/events-chart-activated.yaml | 2 +- ...vents-chartcollection-added-activated.yaml | 4 +- .../30-events/events-disable-events.yaml | 2 + .../excel/30-events/events-table-changed.yaml | 17 +- .../events-tablecollection-changed.yaml | 8 +- ...nts-workbook-and-worksheet-collection.yaml | 44 +-- samples/excel/30-events/events-worksheet.yaml | 27 +- .../create-and-remove-named-item.yaml | 14 +- .../34-named-item/update-named-item.yaml | 28 +- .../pivottable-create-and-modify.yaml | 6 +- samples/excel/42-range/formatting.yaml | 2 +- .../42-range/insert-delete-clear-range.yaml | 2 +- samples/excel/42-range/range-hyperlink.yaml | 16 +- .../excel/42-range/range-relationships.yaml | 301 ++++++++--------- .../42-range/range-text-orientation.yaml | 2 +- samples/excel/42-range/selected-range.yaml | 2 +- samples/excel/42-range/set-get-values.yaml | 2 +- ...st-for-used-range.yaml => used-range.yaml} | 10 +- .../add-rows-and-columns-to-a-table.yaml | 10 +- .../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 +- .../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/sort-data.yaml | 20 +- samples/excel/46-table/style.yaml | 4 +- .../excel/54-worksheet/active-worksheet.yaml | 2 +- .../add-delete-rename-move-worksheet.yaml | 12 +- samples/excel/54-worksheet/gridlines.yaml | 2 +- .../excel/54-worksheet/list-worksheets.yaml | 2 +- ...rence-worksheets-by-relative-position.yaml | 6 +- samples/excel/54-worksheet/tab-color.yaml | 4 +- .../54-worksheet/worksheet-freeze-panes.yaml | 12 +- .../54-worksheet/worksheet-range-cell.yaml | 2 +- .../54-worksheet/worksheet-visibility.yaml | 4 +- .../excel/85-preview-apis/range-copyfrom.yaml | 4 +- .../90-scenarios/multiple-property-set.yaml | 2 +- .../excel/90-scenarios/report-generation.yaml | 5 +- .../90-scenarios/multiple-property-set.yaml | 2 +- snippet-extractor-metadata/excel.xlsx | Bin 16094 -> 16068 bytes snippet-extractor-output/snippets.yaml | 314 ++++++++---------- view/excel.json | 4 +- 62 files changed, 519 insertions(+), 582 deletions(-) rename samples/excel/42-range/{test-for-used-range.yaml => used-range.yaml} (95%) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index fe35cec92..02e939666 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -49,8 +49,8 @@ name: Create charts fileName: chart-create-several-charts.yaml description: >- - Creates column-clustered, doughnut, line, XY-scatter, area, radar, pie, 3D, - cylinder, and 100% charts. + Creates column-clustered, line, XY-scatter, area, radar, pie, 3D, cylinder, + and 100% charts. rawUrl: >- https://raw.githubusercontent.com////samples/excel/10-chart/chart-create-several-charts.yaml group: Chart @@ -137,15 +137,6 @@ group: Chart api_set: ExcelAPI: 1.7 -- id: excel-range-conditional-formatting-advanced - name: Advanced conditional formats - fileName: conditional-formatting-advanced.yaml - description: Applies more than one conditional format on the same range. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml - group: Conditional Formatting - api_set: - ExcelApi: 1.6 - id: excel-range-conditional-formatting-basic name: Basic conditional formatting fileName: conditional-formatting-basic.yaml @@ -155,6 +146,15 @@ group: Conditional Formatting api_set: ExcelApi: 1.6 +- id: excel-range-conditional-formatting-advanced + name: Advanced conditional formats + fileName: conditional-formatting-advanced.yaml + description: Applies more than one conditional format on the same range. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml + group: Conditional Formatting + api_set: + ExcelApi: 1.6 - 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 @@ -385,12 +385,14 @@ group: Range api_set: ExcelApi: 1.1 -- id: excel-range-test-for-used-range - name: Test for used range - fileName: test-for-used-range.yaml - description: Creates a chart from a table only if there's data in the table. +- 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////samples/excel/42-range/test-for-used-range.yaml + https://raw.githubusercontent.com////samples/excel/42-range/used-range.yaml group: Range api_set: ExcelApi: 1.4 @@ -619,7 +621,7 @@ - id: excel-range-copyfrom name: Copy and paste ranges fileName: range-copyfrom.yaml - description: Copies data and formatting with the Range.copyFrom method. + description: Copies data and formatting from one range to another. rawUrl: >- https://raw.githubusercontent.com////samples/excel/85-preview-apis/range-copyfrom.yaml group: Preview APIs diff --git a/samples/excel/01-basics/basic-api-call-es5.yaml b/samples/excel/01-basics/basic-api-call-es5.yaml index 8e6a3888b..de7f35618 100644 --- a/samples/excel/01-basics/basic-api-call-es5.yaml +++ b/samples/excel/01-basics/basic-api-call-es5.yaml @@ -40,6 +40,7 @@ template:

    Try it out

    +

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

    diff --git a/samples/excel/01-basics/basic-api-call.yaml b/samples/excel/01-basics/basic-api-call.yaml index a08649d1c..3d91c1d6c 100644 --- a/samples/excel/01-basics/basic-api-call.yaml +++ b/samples/excel/01-basics/basic-api-call.yaml @@ -41,6 +41,7 @@ template:

    Try it out

    +

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

    diff --git a/samples/excel/01-basics/basic-common-api-call.yaml b/samples/excel/01-basics/basic-common-api-call.yaml index b0768af82..656cf6653 100644 --- a/samples/excel/01-basics/basic-common-api-call.yaml +++ b/samples/excel/01-basics/basic-common-api-call.yaml @@ -11,16 +11,16 @@ script: $("#run").click(run); function run() { - Office.context.document.getSelectedDataAsync( - Office.CoercionType.Text, - asyncResult => { - if (asyncResult.status === Office.AsyncResultStatus.Failed) { - console.log(asyncResult.error.message); - } else { - console.log(`The selected data is "${asyncResult.value}".`); - } - } - ); + Office.context.document.getSelectedDataAsync( + Office.CoercionType.Text, + asyncResult => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(asyncResult.error.message); + } else { + console.log(`The selected data is "${asyncResult.value}".`); + } + } + ); } language: typescript template: @@ -31,11 +31,11 @@ template:

    Try it out

    - Select a cell in the worksheet. -

    - Be sure to exit cell-editing context before using the add-in. +

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

    +

    +

    Be sure to exit cell-editing context before pressing the button.

    language: html style: diff --git a/samples/excel/10-chart/chart-axis-formatting.yaml b/samples/excel/10-chart/chart-axis-formatting.yaml index bad360455..c8a07073f 100644 --- a/samples/excel/10-chart/chart-axis-formatting.yaml +++ b/samples/excel/10-chart/chart-axis-formatting.yaml @@ -7,7 +7,6 @@ api_set: ExcelAPI: 1.8 script: content: |+ - $("#setup").click(() => tryCatch(setup)); $("#format-horizontal-axis").click(() => tryCatch(formatHorizontalAxis)); $("#format-vertical-axis").click(() => tryCatch(formatVerticalAxis)); @@ -105,9 +104,7 @@ script: function displayUnit(context: Excel.RequestContext) { let sheet = context.workbook.worksheets.getItem("Sample"); - let chart = sheet.charts.getItem("SalesChart"); - let axis = chart.axes.valueAxis; axis.displayUnit = "Thousands"; } diff --git a/samples/excel/10-chart/chart-axis.yaml b/samples/excel/10-chart/chart-axis.yaml index 9518c0371..0d35cdbd6 100644 --- a/samples/excel/10-chart/chart-axis.yaml +++ b/samples/excel/10-chart/chart-axis.yaml @@ -15,7 +15,7 @@ script: $("#set-axis-title").click(() => tryCatch(setAxisTitle)); async function getAxisUnit() { - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); let chart = sheet.charts.getItemAt(0); @@ -27,12 +27,12 @@ script: await context.sync(); - OfficeHelpers.UI.notify("The vertical axis display unit is: " + valueAxis.displayUnit); + console.log("The vertical axis display unit is: " + valueAxis.displayUnit); }); } async function changeAxisUnit() { - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); let chart = sheet.charts.getItemAt(0); @@ -46,7 +46,7 @@ script: } async function removeAxisLabel() { - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); let chart = sheet.charts.getItemAt(0); let axis = chart.axes.valueAxis; @@ -59,7 +59,7 @@ script: } async function showAxisLabel() { - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); let chart = sheet.charts.getItemAt(0); @@ -72,7 +72,7 @@ script: } async function setAxisTitle() { - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); let chart = sheet.charts.getItemAt(0); @@ -97,37 +97,29 @@ script: console.log("The category axis title is: " + categoryAxis.title.text); console.log("The value axis title is: " + valueAxis.title.text); - - OfficeHelpers.UI.notify("The minor gridlines visibility is set to: " - + valueAxis.minorGridlines.visible); }); } async function setup() { - await Excel.run(async context => { - const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet( - context.workbook, - "Sample" - ); + await Excel.run(async (context) => { + const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); let expensesTable = sheet.tables.add("A1:E1", true); expensesTable.name = "SalesTable"; - expensesTable.getHeaderRowRange().values = [ - ["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4"] - ]; + 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] + ["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] ]); if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); } const chart = createChart(context); diff --git a/samples/excel/10-chart/chart-create-several-charts.yaml b/samples/excel/10-chart/chart-create-several-charts.yaml index bf9999edb..c741f56f0 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: 3 id: excel-chart-create-several-charts name: Create charts -description: 'Creates column-clustered, doughnut, 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: @@ -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"); @@ -213,7 +213,7 @@ script: } async function setup() { - await Excel.run(async context => { + await Excel.run(async (context) => { await OfficeHelpers.ExcelUtilities.forceCreateSheet( context.workbook, "Sample" @@ -263,7 +263,7 @@ script: template: content: |-
    -

    This sample shows how to create a column clustered chart.

    +

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

    diff --git a/samples/excel/10-chart/chart-legend.yaml b/samples/excel/10-chart/chart-legend.yaml index 9680c6110..dc145715e 100644 --- a/samples/excel/10-chart/chart-legend.yaml +++ b/samples/excel/10-chart/chart-legend.yaml @@ -10,7 +10,6 @@ script: $("#setup").click(() => tryCatch(setup)); $("#format-legend-font").click(() => tryCatch(formatLegendFont)); - async function formatLegendFont() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -82,12 +81,11 @@ script: } function addVerticalAxisLabel(context: Excel.RequestContext) { + const sheet = context.workbook.worksheets.getItem("Sample"); - const sheet = context.workbook.worksheets.getItem("Sample"); - - let chart = sheet.charts.getItemAt(0); - let axis = chart.axes.valueAxis; - axis.displayUnit = "Thousands"; + let chart = sheet.charts.getItemAt(0); + let axis = chart.axes.valueAxis; + axis.displayUnit = "Thousands"; } /** Default helper for invoking an action and handling errors. */ diff --git a/samples/excel/10-chart/chart-point.yaml b/samples/excel/10-chart/chart-point.yaml index 1bf2640ba..0b63b623e 100644 --- a/samples/excel/10-chart/chart-point.yaml +++ b/samples/excel/10-chart/chart-point.yaml @@ -20,9 +20,7 @@ script: // Set color for chart point. point.format.fill.setSolidColor('red'); - await context.sync(); - - OfficeHelpers.UI.notify("Successfully set chart point color to red (for the third item in series 1)."); + await context.sync(); }); } diff --git a/samples/excel/10-chart/chart-series.yaml b/samples/excel/10-chart/chart-series.yaml index 49e2e97a5..e6c303a17 100644 --- a/samples/excel/10-chart/chart-series.yaml +++ b/samples/excel/10-chart/chart-series.yaml @@ -12,7 +12,7 @@ script: $("#delete-series").click(() => tryCatch(deleteSeries)); async function addSeries() { - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); let seriesCollection = sheet.charts.getItemAt(0); @@ -29,7 +29,7 @@ script: } async function deleteSeries() { - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const seriesCollection = sheet.charts.getItemAt(0).series; seriesCollection.load("count"); @@ -47,7 +47,7 @@ script: } async function setup() { - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet( context.workbook, "Sample" diff --git a/samples/excel/10-chart/chart-title-format.yaml b/samples/excel/10-chart/chart-title-format.yaml index 433fcf37d..7a05e9caf 100644 --- a/samples/excel/10-chart/chart-title-format.yaml +++ b/samples/excel/10-chart/chart-title-format.yaml @@ -14,7 +14,7 @@ script: $("#add-title-shadow").click(() => tryCatch(addTitleShadow)); async function changeTitleFormat() { - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const title = sheet.charts.getItemAt(0).title; title.format.fill.setSolidColor("SkyBlue"); @@ -25,7 +25,7 @@ script: } async function changeTitleSubstring() { - await Excel.run(async context => { + await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); let chart = sheet.charts.getItemAt(0); @@ -36,7 +36,7 @@ script: } async function changeTitleOrientation() { - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const title = sheet.charts.getItemAt(0).title; title.textOrientation = -45; @@ -46,7 +46,7 @@ script: } async function addTitleShadow() { - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const title = sheet.charts.getItemAt(0).title; title.format.font.size = 16; @@ -57,7 +57,7 @@ script: } async function setup() { - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); let expensesTable = sheet.tables.add("A1:E1", true); expensesTable.name = "SalesTable"; @@ -106,7 +106,7 @@ script: template: content: |+
    -

    This sample shows how to get and set title substring for a chart.

    +

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

    diff --git a/samples/excel/10-chart/create-doughnut-chart.yaml b/samples/excel/10-chart/create-doughnut-chart.yaml index ced98846a..a7102c036 100644 --- a/samples/excel/10-chart/create-doughnut-chart.yaml +++ b/samples/excel/10-chart/create-doughnut-chart.yaml @@ -44,7 +44,7 @@ script: } async function addSeries() { - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); let seriesCollection = sheet.charts.getItemAt(0); diff --git a/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml index a62cd7635..9dc6bc4a9 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml @@ -1,4 +1,4 @@ -order: 1 +order: 2 id: excel-range-conditional-formatting-advanced name: Advanced conditional formats description: Applies more than one conditional format on the same range. diff --git a/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml index 3ea042051..6b0b20e56 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -1,4 +1,4 @@ -order: 2 +order: 1 id: excel-range-conditional-formatting-basic name: Basic conditional formatting description: Applies common types of conditional formatting to ranges. @@ -129,7 +129,7 @@ script: } async function applyTopBottomFormat() { - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B21:E23"); const conditionalFormat = range.conditionalFormats diff --git a/samples/excel/26-document/create-get-change-delete-settings.yaml b/samples/excel/26-document/create-get-change-delete-settings.yaml index d29b318cc..deec7a2f1 100644 --- a/samples/excel/26-document/create-get-change-delete-settings.yaml +++ b/samples/excel/26-document/create-get-change-delete-settings.yaml @@ -21,9 +21,7 @@ script: await context.sync(); - OfficeHelpers.UI.notify(`Workbook needs review: ${needsReview.value}`); - - await context.sync(); + console.log(`Workbook needs review: ${needsReview.value}`); }); } @@ -37,9 +35,9 @@ script: await context.sync(); if (needsReview.isNullObject) { - OfficeHelpers.UI.notify("The setting has been deleted"); + console.log("The setting has been deleted"); } else { - OfficeHelpers.UI.notify("The setting was not deleted"); + console.log("The setting was not deleted"); } await context.sync(); @@ -59,9 +57,7 @@ script: await context.sync(); - OfficeHelpers.UI.notify(`Workbook needs review: ${needsReview.value}`); - - await context.sync(); + console.log(`Workbook needs review: ${needsReview.value}`); }); } 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 ec9d430e4..0dd67a6b0 100644 --- a/samples/excel/26-document/get-file-in-slices-async.yaml +++ b/samples/excel/26-document/get-file-in-slices-async.yaml @@ -11,7 +11,6 @@ script: $("#get-file").click(() => tryCatch(getCurrentFile)); $("#new-workbook-from-file").click(() => tryCatch(newWorkbookFromFile)); - function getCurrentFile() { const sliceSize = 4096; /*Bytes*/ @@ -39,7 +38,7 @@ script: let base64string = base64js.fromByteArray(byteArray); $('#file-contents').val(base64string).show(); - OfficeHelpers.UI.notify("The base64-encoded string that represents the current document has been written to the text box below. To validate the string, load the preview API libraries and 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."); } } @@ -208,7 +207,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + @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/26-document/properties.yaml b/samples/excel/26-document/properties.yaml index 40728effa..529b0d1c6 100644 --- a/samples/excel/26-document/properties.yaml +++ b/samples/excel/26-document/properties.yaml @@ -36,7 +36,7 @@ script: await context.sync(); - OfficeHelpers.UI.notify("Set the following document properties: title, subject, keywords, comments, category, manager, company."); + console.log("Set the following document properties: title, subject, keywords, comments, category, manager, company."); }); } @@ -77,7 +77,7 @@ script: await context.sync(); - OfficeHelpers.UI.notify("Successfully set custom document properties."); + console.log("Successfully set custom document properties."); }); } diff --git a/samples/excel/30-events/data-changed.yaml b/samples/excel/30-events/data-changed.yaml index 22d73a603..4eb9cdea3 100644 --- a/samples/excel/30-events/data-changed.yaml +++ b/samples/excel/30-events/data-changed.yaml @@ -18,7 +18,7 @@ script: const salesByQuarterBinding = context.workbook.bindings.add(salesTable.getRange(), "Table", "SalesByQuarter"); salesByQuarterBinding.onDataChanged.add(onSalesDataChanged); - OfficeHelpers.UI.notify("The handler is registered.", "Change the value in one of the data cells and watch this message banner. (Be sure to complete the edit by pressing Enter or clicking in another cell.)"); + console.log("The data changed handler is registered."); await context.sync(); }); @@ -26,14 +26,13 @@ script: async function onSalesDataChanged(eventArgs: Excel.BindingDataChangedEventArgs) { await Excel.run(async (context) => { - OfficeHelpers.UI.notify("Data was changed", eventArgs.binding.id); + console.log("Data was changed with binding " + eventArgs.binding.id); // Get the name of the table that's changed. const table: Excel.Table = context.workbook.bindings.getItem(eventArgs.binding.id).getTable(); table.load("name"); await context.sync(); - console.log("Name of the changed table: " + table.name); }); } diff --git a/samples/excel/30-events/events-chart-activated.yaml b/samples/excel/30-events/events-chart-activated.yaml index 9235ebd25..9396b1c5d 100644 --- a/samples/excel/30-events/events-chart-activated.yaml +++ b/samples/excel/30-events/events-chart-activated.yaml @@ -128,7 +128,7 @@ script: template: content: |-
    -

    This sample shows how to create handlers for the Chart onActivated and onDeactivated events.

    +

    This sample shows how to register and use handlers for the Chart onActivated and onDeactivated events.

    diff --git a/samples/excel/30-events/events-chartcollection-added-activated.yaml b/samples/excel/30-events/events-chartcollection-added-activated.yaml index 9423a6caf..2714161fd 100644 --- a/samples/excel/30-events/events-chartcollection-added-activated.yaml +++ b/samples/excel/30-events/events-chartcollection-added-activated.yaml @@ -113,7 +113,7 @@ script: template: content: |-
    -

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

    +

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

    @@ -125,7 +125,7 @@ template:

    Try it out

    -

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

    +

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

    diff --git a/samples/excel/30-events/events-disable-events.yaml b/samples/excel/30-events/events-disable-events.yaml index be6ab266f..00eb19752 100644 --- a/samples/excel/30-events/events-disable-events.yaml +++ b/samples/excel/30-events/events-disable-events.yaml @@ -25,6 +25,7 @@ script: } else { console.log("Events are currently off."); } + await context.sync(); }); } @@ -155,6 +156,7 @@ template: +

    Please wait until all the numbers are written to the range before pressing Refresh data again.

    language: html style: diff --git a/samples/excel/30-events/events-table-changed.yaml b/samples/excel/30-events/events-table-changed.yaml index 501be0f6c..c1024ceb2 100644 --- a/samples/excel/30-events/events-table-changed.yaml +++ b/samples/excel/30-events/events-table-changed.yaml @@ -19,9 +19,7 @@ script: table.onChanged.add(onChange); await context.sync(); - - OfficeHelpers.UI.notify("A handler has been registered for the onChanged event", - "Try changing a cell value in the table, and watch the console output."); + console.log("A handler has been registered for the onChanged event"); }); } @@ -33,14 +31,13 @@ script: range.format.autofitColumns(); await context.sync(); - console.log("B7 value has been changed."); }); } async function onChange(event) { await Excel.run(async (context) => { - console.log("Handler for table onChanged event has been triggered. Data changed address : " + event.address); + console.log("Handler for table onChanged event has been triggered. Data changed address: " + event.address); }); } @@ -50,9 +47,7 @@ script: table.onSelectionChanged.add(onSelectionChange); await context.sync(); - - OfficeHelpers.UI.notify("A handler has been registered for table onSelectionChanged event", - "Try changing a range selection in the table, and watch the console output."); + console.log("A handler has been registered for table onSelectionChanged event"); }); } @@ -68,7 +63,7 @@ script: 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); + console.log("Handler for table onSelectionChanged event has been triggered. The new selection is: " + args.address); }); } @@ -95,7 +90,7 @@ script: sheet.getUsedRange().format.autofitRows(); } - sheet.activate(); + sheet.activate(); await context.sync(); }); @@ -118,7 +113,7 @@ script: template: content: |+
    -

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

    +

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

    diff --git a/samples/excel/30-events/events-tablecollection-changed.yaml b/samples/excel/30-events/events-tablecollection-changed.yaml index 050618bc7..72f49a5dd 100644 --- a/samples/excel/30-events/events-tablecollection-changed.yaml +++ b/samples/excel/30-events/events-tablecollection-changed.yaml @@ -17,9 +17,7 @@ script: tables.onChanged.add(onChange); await context.sync(); - - OfficeHelpers.UI.notify("A handler has been registered for the table collection onChanged event", - "Try changing cell values in the tables, and watch the console output."); + console.log("A handler has been registered for the table collection onChanged event"); }); } @@ -48,7 +46,7 @@ script: await context.sync(); - console.log("Handler for table collection onChanged event has been triggered. Data changed address : " + event.address); + console.log("Handler for table collection onChanged event has been triggered. Data changed address: " + event.address); console.log("Table Id : " + event.tableId); console.log("Worksheet Id : " + worksheet.name); }); @@ -119,7 +117,7 @@ script: template: content: |+
    -

    This sample shows how to add an event handler for table collection onChanged event.

    +

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

    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 6379cf44b..7e6a5c91a 100644 --- a/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml +++ b/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml @@ -20,21 +20,17 @@ script: $("#register-settings-changed-handler").click(() => tryCatch(registerSettingsChangedHandler)); async function registerOnAddHandler() { - await Excel.run(async context => { + await Excel.run(async (context) => { let sheet = context.workbook.worksheets; sheet.onAdded.add(onWorksheetAdd); await context.sync(); - - OfficeHelpers.UI.notify( - "A handler has been registered for the OnAdded event", - "Try adding a worksheet, and watch the console output." - ); + console.log("A handler has been registered for the OnAdded event."); }); } async function addWorksheet() { - await Excel.run(async context => { + await Excel.run(async (context) => { let sheet = context.workbook.worksheets.add(); sheet.load("name, position"); @@ -44,56 +40,48 @@ script: } async function onWorksheetAdd(event) { - await Excel.run(async context => { + await Excel.run(async (context) => { console.log( - "Handler for worksheet onAdded event has been triggered. Newly added worksheet Id : " + + "Handler for worksheet onAdded event has been triggered. Newly added worksheet Id : " + event.worksheetId ); }); } async function registerOnActivateHandler() { - await Excel.run(async context => { + await Excel.run(async (context) => { let sheets = context.workbook.worksheets; sheets.onActivated.add(onActivate); await context.sync(); - - OfficeHelpers.UI.notify( - "A handler has been registered for the OnActivate event", - "Try selecting a different worksheet, and watch the console output." - ); + console.log("A handler has been registered for the OnActivate event."); }); } async function onActivate(args) { - await Excel.run(async context => { + await Excel.run(async (context) => { console.log("The activated worksheet Id : " + args.worksheetId); }); } async function registerOnDeactivateHandler() { - await Excel.run(async context => { + await Excel.run(async (context) => { let sheets = context.workbook.worksheets; sheets.onDeactivated.add(onDeactivate); await context.sync(); - - OfficeHelpers.UI.notify( - "A handler has been registered for the OnDeactivate event", - "Try selecting a different worksheet, and watch the console output." - ); + console.log("A handler has been registered for the OnDeactivate event."); }); } async function onDeactivate(args) { - await Excel.run(async context => { + await Excel.run(async (context) => { console.log("The deactivated worksheet Id : " + args.worksheetId); }); } async function deleteWorksheet() { - await Excel.run(async context => { + await Excel.run(async (context) => { // Deleting the current worksheet triggers the deactivate event and // the activate event for the preceding worksheet. let sheets = context.workbook.worksheets; @@ -104,7 +92,6 @@ script: if (sheets.items.length > 1) { let lastSheet = sheets.items[sheets.items.length - 1]; lastSheet.delete(); - console.log(`Deleted worksheet named "${lastSheet.name}"`); } else { console.log("Unable to delete worksheet."); @@ -120,10 +107,7 @@ script: needsReview.load("value"); await context.sync(); - console.log("Setting value is: " + needsReview.value); - - await context.sync(); }); } @@ -131,9 +115,9 @@ script: await Excel.run(async (context) => { const settings = context.workbook.settings; settings.onSettingsChanged.add(onChangedSetting); - OfficeHelpers.UI.notify("Settings changed handler registered", "Press the next button to change the setting, then watch the console."); await context.sync(); + console.log("Settings changed handler registered."); }); } @@ -188,7 +172,7 @@ script: template: content: |-
    -

    This sample shows how to register and use a handler for the SettingsChanged event.

    +

    This sample shows how to register and use handlers for 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.yaml b/samples/excel/30-events/events-worksheet.yaml index b5a66fd88..5fe9d6bfb 100644 --- a/samples/excel/30-events/events-worksheet.yaml +++ b/samples/excel/30-events/events-worksheet.yaml @@ -18,17 +18,15 @@ script: $("#recalculate").click(() => tryCatch(recalculate)); async function registerSelectionChangedHandler() { - await Excel.run(async context => { + await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); sheet.onSelectionChanged.add(onSelectionChange); await context.sync(); - - OfficeHelpers.UI.notify("Press the button and select a range manually. Watch the console. Next press the second button to select a range programmatically."); }); } async function selectRange() { - await Excel.run(async context => { + await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); let range = sheet.getRange("B7:C7"); range.select(); @@ -38,13 +36,13 @@ script: } async function onSelectionChange(event) { - await Excel.run(async context => { + await Excel.run(async (context) => { console.log("The selected range has changed to: " + event.address); }); } async function registerOnCalculatedHandler() { - await Excel.run(async context => { + await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); sheet.onCalculated.add(onCalculated); await context.sync(); @@ -53,7 +51,7 @@ script: } async function recalculate() { - await Excel.run(async context => { + await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); let randomResult = context.workbook.functions.randBetween(1, 3000).load("value"); await context.sync(); @@ -67,24 +65,23 @@ script: } async function onCalculated(event) { - await Excel.run(async context => { + await Excel.run(async (context) => { console.log("The worksheet has recalculated."); }); } async function registerOnChangedHandler() { - await Excel.run(async context => { + await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); sheet.onChanged.add(onChange); await context.sync(); - - OfficeHelpers.UI.notify("A handler has been registered for the onChanged event."); + console.log("A handler has been registered for the onChanged event."); }); } async function changeData() { - await Excel.run(async context => { + await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); let range = sheet.getRange("B5"); range.values = [[800]]; @@ -97,7 +94,7 @@ script: } async function onChange(event) { - await Excel.run(async context => { + await Excel.run(async (context) => { console.log( "Handler for worksheet onChanged event has been triggered. Data changed address : " + event.address @@ -106,7 +103,7 @@ script: } async function setup() { - await Excel.run(async context => { + await Excel.run(async (context) => { let sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); let salesTable = sheet.tables.add("A1:F1", true); salesTable.name = "SalesTable"; @@ -140,7 +137,7 @@ script: template: content: |-
    -

    This sample shows how to add an event handler for the worksheet onSelectionChanged event.

    +

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

    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 1b2a55662..3d86b4fef 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 @@ -16,7 +16,7 @@ script: $("#list-named-items").click(() => tryCatch(listNamedItems)); async function addNameToTotal() { - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); sheet.names.add("TotalAmount", "=SUM(ExpensesTable[AMOUNT])"); @@ -27,7 +27,7 @@ script: } async function addNameToHeader() { - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const headerRange = sheet.getRange("A1:D1"); @@ -39,7 +39,7 @@ script: } async function formatRangeByName() { - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const headerRowName = sheet.names.getItemOrNullObject("ExpensesHeader"); headerRowName.load(); @@ -57,7 +57,7 @@ script: } async function removeName() { - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const totalName = sheet.names.getItemOrNullObject("TotalAmount"); totalName.load(); @@ -77,7 +77,7 @@ script: } async function listNamedItems() { - await Excel.run(async context => { + await Excel.run(async (context) => { const namedItems = context.workbook.worksheets.getActiveWorksheet().names.load(); await context.sync(); @@ -92,7 +92,7 @@ script: } async function setup() { - await Excel.run(async context => { + await Excel.run(async (context) => { let sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); let expensesTable = sheet.tables.add("A1:D1", true); expensesTable.name = "ExpensesTable"; @@ -180,7 +180,7 @@ script: template: content: |
    -

    This sample shows how to create, access, and delete named items using the Excel JavaScript API.

    +

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

    diff --git a/samples/excel/34-named-item/update-named-item.yaml b/samples/excel/34-named-item/update-named-item.yaml index 7566ed9af..a491f5533 100644 --- a/samples/excel/34-named-item/update-named-item.yaml +++ b/samples/excel/34-named-item/update-named-item.yaml @@ -16,15 +16,23 @@ script: await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - // Add named item for the first range - const firstRange = sheet.getRange("B2:E7"); - sheet.names.add("MyRange", firstRange); - const namedItems = sheet.names.load("name, formula"); - firstRange.select(); - + // Check if the named item already exists + const myNamedItem = sheet.names.getItemOrNullObject("MyRange"); + myNamedItem.load("no-properties-needed"); await context.sync(); - OfficeHelpers.UI.notify(`Just created the named item "${namedItems.items[0].name}" located here: ${namedItems.items[0].formula}`); + if (myNamedItem.isNullObject) { + // Add named item for the first range + const firstRange = sheet.getRange("B2:E7"); + sheet.names.add("MyRange", firstRange); + const namedItems = sheet.names.load("name, formula"); + firstRange.select(); + + await context.sync(); + console.log(`Just created the named item "${namedItems.items[0].name}" located here: ${namedItems.items[0].formula}`); + } else { + OfficeHelpers.UI.notify("The named item already exists"); + } }); } @@ -38,14 +46,14 @@ script: await context.sync(); if (myNamedItem.isNullObject) { - OfficeHelpers.UI.notify(`There is no named item with the name "MyRange".`); + OfficeHelpers.UI.notify(`There is no named item. Create it with "Add named item for a range" first.`); } else { // Update named item to point to the second range myNamedItem.formula = "=Sample!$B$10:$D$14"; sheet.getRange("B10:D14").select(); await context.sync(); - OfficeHelpers.UI.notify(`Just updated the named item "${myNamedItem.name}" -- it's now located here: ${myNamedItem.formula}`); + console.log(`Just updated the named item "${myNamedItem.name}" -- it's now located here: ${myNamedItem.formula}`); } }); } @@ -82,7 +90,7 @@ script: template: content: |-
    -

    This sample shows how to create and update a named item using the Excel JavaScript API.

    +

    This sample shows how to create and update a named item.

    diff --git a/samples/excel/38-pivottable/pivottable-create-and-modify.yaml b/samples/excel/38-pivottable/pivottable-create-and-modify.yaml index 4ba51ddc2..4dbb7bef0 100644 --- a/samples/excel/38-pivottable/pivottable-create-and-modify.yaml +++ b/samples/excel/38-pivottable/pivottable-create-and-modify.yaml @@ -196,14 +196,14 @@ script: template: content: |-
    -

    This sample shows how to create PivotTables and show their hierarchy.

    +

    This sample shows how to create PivotTables and add hierarchies to form rows, columns, and data sets.

    Set up

    + Setup sample +

    Try it out

    diff --git a/samples/excel/42-range/formatting.yaml b/samples/excel/42-range/formatting.yaml index 514d39a4a..c021883be 100644 --- a/samples/excel/42-range/formatting.yaml +++ b/samples/excel/42-range/formatting.yaml @@ -77,7 +77,7 @@ script: template: content: |
    -

    This sample shows how to format a range using the Excel API.

    +

    This sample shows how to format a range.

    diff --git a/samples/excel/42-range/insert-delete-clear-range.yaml b/samples/excel/42-range/insert-delete-clear-range.yaml index 38be7cb2c..6dcbd0bb9 100644 --- a/samples/excel/42-range/insert-delete-clear-range.yaml +++ b/samples/excel/42-range/insert-delete-clear-range.yaml @@ -87,7 +87,7 @@ script: template: content: |
    -

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

    +

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

    diff --git a/samples/excel/42-range/range-hyperlink.yaml b/samples/excel/42-range/range-hyperlink.yaml index b62895783..a12941c0f 100644 --- a/samples/excel/42-range/range-hyperlink.yaml +++ b/samples/excel/42-range/range-hyperlink.yaml @@ -39,8 +39,6 @@ script: } await context.sync(); - - OfficeHelpers.UI.notify("Created a hyperlink to a URL for each of the products in the first table."); }); } @@ -68,8 +66,6 @@ script: } await context.sync(); - - OfficeHelpers.UI.notify("Created a hyperlink to a location in this workbook for each of the products in the second table."); }); } @@ -98,7 +94,7 @@ script: await context.sync(); - OfficeHelpers.UI.notify("Updated the hyperlink for each of the products in the first table."); + console.log("Updated the hyperlink for each of the products in the first table."); }); } @@ -125,8 +121,6 @@ script: } await context.sync(); - - OfficeHelpers.UI.notify("Cleared all hyperlinks and reset text format."); }); } @@ -285,7 +279,7 @@ script: template: content: |-
    -

    This sample shows how to create, update, and clear a hyperlink for a range using the Excel API.

    +

    This sample shows how to create, update, and clear a hyperlink for a range.

    @@ -299,13 +293,13 @@ template:

    Try it out

    +

    +

    +

    diff --git a/samples/excel/42-range/range-relationships.yaml b/samples/excel/42-range/range-relationships.yaml index 4706e61f7..54e14d11d 100644 --- a/samples/excel/42-range/range-relationships.yaml +++ b/samples/excel/42-range/range-relationships.yaml @@ -16,199 +16,200 @@ script: $("#create-sales-contest-charts").click(() => tryCatch(createContestCharts)); async function boundingRect() { - await Excel.run(async context => { - const sheet = context.workbook.worksheets.getItem("Sample"); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); - const rangeA = sheet.getRange("H2:J5"); - const rangeB = sheet.getRange("J4:L8"); + const rangeA = sheet.getRange("H2:J5"); + const rangeB = sheet.getRange("J4:L8"); - const boundingRect = rangeA.getBoundingRect(rangeB); - boundingRect.format.fill.color = "Blue"; - boundingRect.getCell(0, 0).values = [["Bounding Rect"]]; + const boundingRect = rangeA.getBoundingRect(rangeB); + boundingRect.format.fill.color = "Blue"; + boundingRect.getCell(0, 0).values = [["Bounding Rect"]]; - await context.sync(); - }); + await context.sync(); + }); } async function intersection() { - await Excel.run(async context => { - const sheet = context.workbook.worksheets.getItem("Sample"); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); - const rangeA = sheet.getRange("H2:J5"); - const rangeB = sheet.getRange("J4:L8"); + const rangeA = sheet.getRange("H2:J5"); + const rangeB = sheet.getRange("J4:L8"); - const intersection = rangeA.getIntersection(rangeB); - intersection.format.fill.color = "Blue"; - intersection.getCell(0, 0).values = [["Intersection"]]; + const intersection = rangeA.getIntersection(rangeB); + intersection.format.fill.color = "Blue"; + intersection.getCell(0, 0).values = [["Intersection"]]; - await context.sync(); - }); + await context.sync(); + }); } async function offsetRange() { - await Excel.run(async context => { - const sheet = context.workbook.worksheets.getItem("Sample"); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); - const rangeA = sheet.getRange("H2:J5"); + const rangeA = sheet.getRange("H2:J5"); - const offsetRange = rangeA.getOffsetRange(6, 3); - offsetRange.format.fill.color = "Blue"; - offsetRange.getCell(0, 0).values = [["OffsetRange(6,3)"]]; + const offsetRange = rangeA.getOffsetRange(6, 3); + offsetRange.format.fill.color = "Blue"; + offsetRange.getCell(0, 0).values = [["OffsetRange(6,3)"]]; - await context.sync(); - }); + await context.sync(); + }); } async function resizedRange() { - await Excel.run(async context => { - const sheet = context.workbook.worksheets.getItem("Sample"); + await Excel.run(async context => { + const sheet = context.workbook.worksheets.getItem("Sample"); - const rangeB = sheet.getRange("J4:L8"); + const rangeB = sheet.getRange("J4:L8"); - const resizedRange = rangeB.getResizedRange(2, -1); - resizedRange.format.fill.color = "Blue"; - resizedRange.getCell(0, 0).values = [["ResizedRange(2,-1)"]]; + const resizedRange = rangeB.getResizedRange(2, -1); + resizedRange.format.fill.color = "Blue"; + resizedRange.getCell(0, 0).values = [["ResizedRange(2,-1)"]]; - await context.sync(); - }); + await context.sync(); + }); } async function createContestCharts() { - 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(); - }); + 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(); + }); } function createContinentChart( - sheet: Excel.Worksheet, - continent: string, - contestRange: Excel.Range, - startPosition: string, - endPosition: string + sheet: Excel.Worksheet, + continent: string, + contestRange: Excel.Range, + startPosition: string, + endPosition: string ) { - let chart = sheet.charts.add("ColumnClustered", contestRange, "Columns"); - chart.setPosition(startPosition, endPosition); - chart.title.text = `${continent} Current Quarter Sales Contest`; - chart.legend.position = "Right"; - chart.legend.format.fill.setSolidColor("white"); - chart.dataLabels.format.font.size = 15; - chart.dataLabels.format.font.color = "black"; + let chart = sheet.charts.add("ColumnClustered", contestRange, "Columns"); + chart.setPosition(startPosition, endPosition); + chart.title.text = `${continent} Current Quarter Sales Contest`; + chart.legend.position = "Right"; + chart.legend.format.fill.setSolidColor("white"); + chart.dataLabels.format.font.size = 15; + chart.dataLabels.format.font.color = "black"; } function reportMissingData(continent: string) { - // To test this method, - // (1) Press "Create Table" - // (2) Delete data from the rows for one continent, - // INCLUDING THE "Sales Team" COLUMN VALUES. - // (3) Press "Create sales contest charts". - OfficeHelpers.UI.notify( - `Missing ${continent} Data`, - `There is no data for the ${continent} teams.` - ); + // To test this method, + // (1) Press "Create Table" + // (2) Delete data from the rows for one continent, + // INCLUDING THE "Sales Team" COLUMN VALUES. + // (3) Press "Create sales contest charts". + OfficeHelpers.UI.notify( + `Missing ${continent} Data`, + `There is no data for the ${continent} teams.` + ); } async function setup() { - await Excel.run(async context => { - const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet( - context.workbook, - "Sample" - ); - - const rangeA = sheet.getRange("H2:J5"); - rangeA.format.fill.color = "green"; - rangeA.getCell(0, 0).values = [["Range A"]]; - - const rangeB = sheet.getRange("J4:L8"); - rangeB.format.fill.color = "yellow"; - rangeB.getCell(0, 0).values = [["Range B"]]; - - let salesTable = sheet.tables.add("A1:E1", true); - salesTable.name = "SalesTable"; - salesTable.getHeaderRowRange().values = [ - ["Sales Team", "Qtr1", "Qtr2", "Qtr3", "Qtr4"] - ]; - - salesTable.rows.add(null, [ - ["Asian Team 1", 500, 700, 654, null], - ["Asian Team 2", 400, 323, 276, null], - ["Asian Team 3", 1200, 876, 845, null], - ["European Team 1", 600, 500, 854, null], - ["European Team 2", 5001, 2232, 4763, null], - ["European Team 3", 130, 776, 104, null] - ]); - - salesTable.getRange().format.autofitColumns(); - salesTable.getRange().format.autofitRows(); - sheet.activate(); - - await context.sync(); - }); + await Excel.run(async (context) => { + const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet( + context.workbook, + "Sample" + ); + + const rangeA = sheet.getRange("H2:J5"); + rangeA.format.fill.color = "green"; + rangeA.getCell(0, 0).values = [["Range A"]]; + + const rangeB = sheet.getRange("J4:L8"); + rangeB.format.fill.color = "yellow"; + rangeB.getCell(0, 0).values = [["Range B"]]; + + let salesTable = sheet.tables.add("A1:E1", true); + salesTable.name = "SalesTable"; + salesTable.getHeaderRowRange().values = [ + ["Sales Team", "Qtr1", "Qtr2", "Qtr3", "Qtr4"] + ]; + + salesTable.rows.add(null, [ + ["Asian Team 1", 500, 700, 654, null], + ["Asian Team 2", 400, 323, 276, null], + ["Asian Team 3", 1200, 876, 845, null], + ["European Team 1", 600, 500, 854, null], + ["European Team 2", 5001, 2232, 4763, null], + ["European Team 3", 130, 776, 104, null] + ]); + + salesTable.getRange().format.autofitColumns(); + salesTable.getRange().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) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + try { + await callback(); + } catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } } language: typescript template: content: |-

    -

    This sample shows how to do various operations on ranges, for example, getting the bounding rect of two ranges, using - the Excel JavaScript API.

    +

    This sample shows how to do various operations on ranges, for example, getting the bounding rect of two ranges.

    diff --git a/samples/excel/42-range/range-text-orientation.yaml b/samples/excel/42-range/range-text-orientation.yaml index 321e1c0a4..a18bd20d1 100644 --- a/samples/excel/42-range/range-text-orientation.yaml +++ b/samples/excel/42-range/range-text-orientation.yaml @@ -37,7 +37,7 @@ script: "null (which indicates that the text orientation for cells within the specified range is not uniform)" : range.format.textOrientation; - OfficeHelpers.UI.notify(`The text orientation within the range "${range.address}" is ${textOrientation}.`); + console.log(`The text orientation within the range "${range.address}" is ${textOrientation}.`); }); } diff --git a/samples/excel/42-range/selected-range.yaml b/samples/excel/42-range/selected-range.yaml index 38e6f5ab7..661477055 100644 --- a/samples/excel/42-range/selected-range.yaml +++ b/samples/excel/42-range/selected-range.yaml @@ -47,7 +47,7 @@ script: template: content: |
    -

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

    +

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

    diff --git a/samples/excel/42-range/set-get-values.yaml b/samples/excel/42-range/set-get-values.yaml index 106ae8b77..0e0495a30 100644 --- a/samples/excel/42-range/set-get-values.yaml +++ b/samples/excel/42-range/set-get-values.yaml @@ -175,7 +175,7 @@ script: template: content: |
    -

    This sample shows how to set and get values and formulas for a range using the Excel API.

    +

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

    diff --git a/samples/excel/42-range/test-for-used-range.yaml b/samples/excel/42-range/used-range.yaml similarity index 95% rename from samples/excel/42-range/test-for-used-range.yaml rename to samples/excel/42-range/used-range.yaml index 44508d3f9..9d95d778f 100644 --- a/samples/excel/42-range/test-for-used-range.yaml +++ b/samples/excel/42-range/used-range.yaml @@ -1,7 +1,7 @@ order: 6 -id: excel-range-test-for-used-range -name: Test for used range -description: Creates a chart from a table only if there's data in the table. +id: excel-range-used-range +name: Used range +description: Tests for a used range and creates a chart from a table only if there's data in the table. author: OfficeDev host: EXCEL api_set: @@ -13,7 +13,7 @@ script: $("#fill-table").click(() => tryCatch(fillTable)); async function tryCreateChartFromEmptyTable() { - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const salesTable = sheet.tables.getItem("SalesTable"); const dataRange = salesTable.getDataBodyRange(); @@ -50,7 +50,7 @@ script: } async function fillTable() { - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const salesTable = sheet.tables.getItem("SalesTable"); const dataRange = salesTable.getDataBodyRange(); 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 8d9c31659..9302df46d 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 @@ -15,7 +15,7 @@ script: $("#add-calculated-column").click(() => tryCatch(addCalculatedColumn)); async function addRow() { - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const expensesTable = sheet.tables.getItem("ExpensesTable"); @@ -33,7 +33,7 @@ script: } async function addColumn() { - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const expensesTable = sheet.tables.getItem("ExpensesTable"); @@ -59,7 +59,7 @@ script: } async function addCalculatedColumn() { - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const expensesTable = sheet.tables.getItem("ExpensesTable"); @@ -87,7 +87,7 @@ script: /** Create a new table with sample data */ async function setup() { - await Excel.run(async context => { + await Excel.run(async (context) => { await OfficeHelpers.ExcelUtilities.forceCreateSheet( context.workbook, "Sample" @@ -133,7 +133,7 @@ script: template: content: |
    -

    This sample shows how to add columns and rows to a table using the Excel JavaScript API.

    +

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

    diff --git a/samples/excel/46-table/convert-range-to-table.yaml b/samples/excel/46-table/convert-range-to-table.yaml index 2ac1555ec..29f727cdd 100644 --- a/samples/excel/46-table/convert-range-to-table.yaml +++ b/samples/excel/46-table/convert-range-to-table.yaml @@ -64,7 +64,7 @@ script: template: content: |
    -

    This sample shows how to convert a range to a table using the Excel JavaScript API.

    +

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

    diff --git a/samples/excel/46-table/create-table.yaml b/samples/excel/46-table/create-table.yaml index f151695ac..2d4f31ba6 100644 --- a/samples/excel/46-table/create-table.yaml +++ b/samples/excel/46-table/create-table.yaml @@ -55,7 +55,7 @@ script: template: content: |
    -

    This sample shows how to create a table using the Excel JavaScript API.

    +

    This sample shows how to create a table.

    diff --git a/samples/excel/46-table/filter-data.yaml b/samples/excel/46-table/filter-data.yaml index baf166f05..ea20339f8 100644 --- a/samples/excel/46-table/filter-data.yaml +++ b/samples/excel/46-table/filter-data.yaml @@ -94,7 +94,7 @@ script: template: content: |
    -

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

    +

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

    diff --git a/samples/excel/46-table/formatting.yaml b/samples/excel/46-table/formatting.yaml index 7eda28c36..bbfcc0483 100644 --- a/samples/excel/46-table/formatting.yaml +++ b/samples/excel/46-table/formatting.yaml @@ -73,7 +73,7 @@ script: template: content: |
    -

    This sample shows how to format the different components of a table using the Excel JavaScript API.

    +

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

    diff --git a/samples/excel/46-table/get-data-from-table.yaml b/samples/excel/46-table/get-data-from-table.yaml index b50bd3afc..a68cc5340 100644 --- a/samples/excel/46-table/get-data-from-table.yaml +++ b/samples/excel/46-table/get-data-from-table.yaml @@ -84,7 +84,7 @@ script: template: content: |+
    -

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

    +

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

    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 95f882b33..b8ae3ed4d 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 @@ -101,7 +101,7 @@ script: template: content: |+
    -

    This sample shows how to filter the data in a table using different filter types using the Excel JavaScript API. This snippet prints the results in the console below.

    +

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

    diff --git a/samples/excel/46-table/import-json-data.yaml b/samples/excel/46-table/import-json-data.yaml index 6692edd03..5125f0141 100644 --- a/samples/excel/46-table/import-json-data.yaml +++ b/samples/excel/46-table/import-json-data.yaml @@ -117,7 +117,7 @@ script: template: content: |+
    -

    This sample shows how to import json data into a new table the Excel JavaScript API.

    +

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

    diff --git a/samples/excel/46-table/sort-data.yaml b/samples/excel/46-table/sort-data.yaml index 0b19630ed..79ee5dae3 100644 --- a/samples/excel/46-table/sort-data.yaml +++ b/samples/excel/46-table/sort-data.yaml @@ -12,7 +12,7 @@ script: $("#sort-table").click(() => tryCatch(sortTable)); async function sortTable() { - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const expensesTable = sheet.tables.getItem("ExpensesTable"); @@ -31,7 +31,7 @@ script: /** Create a new table with sample data */ async function setup() { - await Excel.run(async context => { + await Excel.run(async (context) => { await OfficeHelpers.ExcelUtilities.forceCreateSheet( context.workbook, "Sample" @@ -60,26 +60,26 @@ script: 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) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } + try { + await callback(); + } catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } } language: typescript template: content: |
    -

    This sample shows how to sort the data in a table using the Excel JavaScript API.

    +

    This sample shows how to sort the data in a table.

    diff --git a/samples/excel/46-table/style.yaml b/samples/excel/46-table/style.yaml index fe6eb0ada..6e76f9600 100644 --- a/samples/excel/46-table/style.yaml +++ b/samples/excel/46-table/style.yaml @@ -35,7 +35,7 @@ script: await context.sync(); - OfficeHelpers.UI.notify("Successfully added a new style with diagonal orientation to the Home tab ribbon."); + console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); } @@ -110,7 +110,7 @@ script: await context.sync(); - OfficeHelpers.UI.notify("Successfully deleted the diagonal orientation style from the Home tab ribbon."); + console.log("Successfully deleted the diagonal orientation style from the Home tab ribbon."); }); } diff --git a/samples/excel/54-worksheet/active-worksheet.yaml b/samples/excel/54-worksheet/active-worksheet.yaml index 053821bb6..2a65968a4 100644 --- a/samples/excel/54-worksheet/active-worksheet.yaml +++ b/samples/excel/54-worksheet/active-worksheet.yaml @@ -85,7 +85,7 @@ script: template: content: |
    -

    This sample shows how to get and set the active worksheet using the Excel API.

    +

    This sample shows how to get and set the active worksheet.

    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 aa53de37c..31cf7f3b3 100644 --- a/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml +++ b/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml @@ -21,7 +21,6 @@ script: sheet.load("name, position"); await context.sync(); - console.log(`Added worksheet named "${sheet.name}" in position ${sheet.position}`) }); } @@ -54,6 +53,7 @@ script: currentSheet.name = await uniqueWorksheetName(context); await context.sync(); + console.log(`Renamed worksheet to "${currentSheet.name}"`); }); } @@ -85,7 +85,9 @@ script: const lastSheet = sheets.items[sheets.items.length - 1]; lastSheet.position = 0; + await context.sync(); + console.log(`Moved worksheet "${lastSheet.name}" to tab position "${lastSheet.position}"`); }); } @@ -103,20 +105,20 @@ script: template: content: |
    -

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

    +

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

    Try it out

    +

    +

    +

    diff --git a/samples/excel/54-worksheet/gridlines.yaml b/samples/excel/54-worksheet/gridlines.yaml index ebe3c665e..2abbdff81 100644 --- a/samples/excel/54-worksheet/gridlines.yaml +++ b/samples/excel/54-worksheet/gridlines.yaml @@ -43,7 +43,7 @@ script: template: content: |+

    -

    This sample shows how to hide and show gridlines within a worksheet using the Excel API.

    +

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

    diff --git a/samples/excel/54-worksheet/list-worksheets.yaml b/samples/excel/54-worksheet/list-worksheets.yaml index cc68b7110..33add5e8b 100644 --- a/samples/excel/54-worksheet/list-worksheets.yaml +++ b/samples/excel/54-worksheet/list-worksheets.yaml @@ -42,7 +42,7 @@ script: template: content: |
    -

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

    +

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

    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 a07c0d443..571c26595 100644 --- a/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml +++ b/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml @@ -74,7 +74,7 @@ script: let currentYear = currentSheet.name.substr(5, 4); let previousYear = previousYearSheet.name.substr(5, 4); - OfficeHelpers.UI.notify("Two Year Tax Due Comparison", `Tax due for ${currentYear} was ${currentTaxDueRange.text[0][0]}\nTax due for ${previousYear} was ${previousTaxDueRange.text[0][0]}`) + 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(); }); @@ -101,7 +101,7 @@ script: let firstYear = firstSheet.name.substr(5, 4); let lastYear = lastSheet.name.substr(5, 4); - OfficeHelpers.UI.notify(`Tax Rate change from ${firstYear} to ${lastYear}`, `Tax rate for ${firstYear}: ${firstTaxRateRange.text[0][0]}\nTax rate for ${lastYear}: ${lastTaxRateRange.text[0][0]}`) + 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(); }); @@ -121,7 +121,7 @@ script: template: content: |
    -

    This sample shows how to get a reference to a sheet using its relative position with the sheet.getNext, sheet.getPrevious, sheetCollection.getFirst, and sheetCollection.getLast methods.

    +

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

    diff --git a/samples/excel/54-worksheet/tab-color.yaml b/samples/excel/54-worksheet/tab-color.yaml index e0d209676..5ab3d453b 100644 --- a/samples/excel/54-worksheet/tab-color.yaml +++ b/samples/excel/54-worksheet/tab-color.yaml @@ -48,7 +48,7 @@ script: await context.sync(); let tabColor = activeSheet.tabColor === "" ? "the default color" : activeSheet.tabColor; - OfficeHelpers.UI.notify(`Tab color for the "${activeSheet.name}" worksheet is ${tabColor}.`); + console.log(`Tab color for the "${activeSheet.name}" worksheet is ${tabColor}.`); }); } @@ -66,7 +66,7 @@ script: template: content: |-
    -

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

    +

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

    diff --git a/samples/excel/54-worksheet/worksheet-freeze-panes.yaml b/samples/excel/54-worksheet/worksheet-freeze-panes.yaml index 678f81cae..df1997037 100644 --- a/samples/excel/54-worksheet/worksheet-freeze-panes.yaml +++ b/samples/excel/54-worksheet/worksheet-freeze-panes.yaml @@ -60,7 +60,7 @@ script: if (frozenRange.isNullObject) { OfficeHelpers.UI.notify(`The worksheet does not contain a frozen pane.`); } else { - OfficeHelpers.UI.notify(`The address of the frozen range (cells that are frozen in the top-and-left-most pane) is "${frozenRange.address}"`); + console.log(`The address of the frozen range (cells that are frozen in the top-and-left-most pane) is "${frozenRange.address}"`); } }); } @@ -129,7 +129,7 @@ script: template: content: |-
    -

    This sample shows how to freeze columns, freeze rows, freeze a range, and manage frozen panes in a worksheet using the Excel API.

    +

    This sample shows how to freeze columns, freeze rows, freeze a range, and manage frozen panes in a worksheet.

    @@ -143,16 +143,16 @@ template:

    Try it out

    +

    +

    +

    +

    diff --git a/samples/excel/54-worksheet/worksheet-range-cell.yaml b/samples/excel/54-worksheet/worksheet-range-cell.yaml index 5890b4f8f..47e3d447a 100644 --- a/samples/excel/54-worksheet/worksheet-range-cell.yaml +++ b/samples/excel/54-worksheet/worksheet-range-cell.yaml @@ -103,7 +103,7 @@ script: template: content: |

    -

    This sample shows how to get a range or a cell in a worksheet using the Excel API.

    +

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

    diff --git a/samples/excel/54-worksheet/worksheet-visibility.yaml b/samples/excel/54-worksheet/worksheet-visibility.yaml index 4430e041e..a433c6a7c 100644 --- a/samples/excel/54-worksheet/worksheet-visibility.yaml +++ b/samples/excel/54-worksheet/worksheet-visibility.yaml @@ -56,7 +56,7 @@ script: } async function setup() { - await Excel.run(async context => { + await Excel.run(async (context) => { const sheets = context.workbook.worksheets; sheets.load("items"); @@ -84,7 +84,7 @@ script: template: content: |
    -

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

    +

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

    diff --git a/samples/excel/85-preview-apis/range-copyfrom.yaml b/samples/excel/85-preview-apis/range-copyfrom.yaml index 1ffb62194..14abd6cd4 100644 --- a/samples/excel/85-preview-apis/range-copyfrom.yaml +++ b/samples/excel/85-preview-apis/range-copyfrom.yaml @@ -1,7 +1,7 @@ order: 1 id: excel-range-copyfrom name: Copy and paste ranges -description: Copies data and formatting with the Range.copyFrom method. +description: Copies data and formatting from one range to another. host: EXCEL api_set: ExcelAPI: 1.8 @@ -141,7 +141,7 @@ script: template: content: |-
    -

    This sample shows the copy and paste functionality.

    +

    This sample shows how to copy data and formatting from one range to another.

    Setup

    diff --git a/samples/excel/90-scenarios/multiple-property-set.yaml b/samples/excel/90-scenarios/multiple-property-set.yaml index a4b44b5d2..9a5ae6b0c 100644 --- a/samples/excel/90-scenarios/multiple-property-set.yaml +++ b/samples/excel/90-scenarios/multiple-property-set.yaml @@ -96,7 +96,7 @@ script: template: content: |
    -

    This sample shows how to format a range using the Excel API.

    +

    This sample shows how to format a range.

    diff --git a/samples/excel/90-scenarios/report-generation.yaml b/samples/excel/90-scenarios/report-generation.yaml index cb31b61a3..3a185ba27 100644 --- a/samples/excel/90-scenarios/report-generation.yaml +++ b/samples/excel/90-scenarios/report-generation.yaml @@ -32,8 +32,7 @@ script: } }); - OfficeHelpers.UI.notify("Sucess!", - "Report generation completed."); + console.log("Success!", "Report generation completed."); } async function writeSheetData(sheet: Excel.Worksheet) { @@ -122,7 +121,7 @@ script: template: content: |-
    -

    This sample shows how to load sample data into the worksheet, and then create a chart using the Excel API.

    +

    This sample shows how to load sample data into the worksheet, and then create a chart.

    diff --git a/samples/word/90-scenarios/multiple-property-set.yaml b/samples/word/90-scenarios/multiple-property-set.yaml index 56673c107..277d2a772 100644 --- a/samples/word/90-scenarios/multiple-property-set.yaml +++ b/samples/word/90-scenarios/multiple-property-set.yaml @@ -72,7 +72,7 @@ script: template: content: |-
    -

    This sample shows how to format text using the object.set method of the Word API.

    +

    This sample shows how to format text using the object.set method.

    diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index c9ff9878af3ce304a7e51ff491421187465f2eac..8056c044f1ff3285a3584a968f99ff4e6001a1bf 100644 GIT binary patch delta 7122 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 h6hSS0@Q6&EZ^FKWHe4hXS delta 7173 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 Zmy^SK4mXjL#Rf>iGvqk&n5F+g{2zdApn(7Y diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 0eecfe279..02d1bca0c 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -1,6 +1,6 @@ Excel.ChartAxis.displayUnit: - |- - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); let chart = sheet.charts.getItemAt(0); @@ -12,11 +12,11 @@ Excel.ChartAxis.displayUnit: await context.sync(); - OfficeHelpers.UI.notify("The vertical axis display unit is: " + valueAxis.displayUnit); + console.log("The vertical axis display unit is: " + valueAxis.displayUnit); }); Excel.ChartAxis.showDisplayUnitLabel: - |- - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); let chart = sheet.charts.getItemAt(0); let axis = chart.axes.valueAxis; @@ -56,13 +56,11 @@ Excel.ChartFill.setSolidColor: // Set color for chart point. point.format.fill.setSolidColor('red'); - await context.sync(); - - OfficeHelpers.UI.notify("Successfully set chart point color to red (for the third item in series 1)."); + await context.sync(); }); Excel.ChartSeries.delete: - |- - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const seriesCollection = sheet.charts.getItemAt(0).series; seriesCollection.load("count"); @@ -79,7 +77,7 @@ Excel.ChartSeries.delete: }); Excel.ChartSeries.setValues: - |- - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); let seriesCollection = sheet.charts.getItemAt(0); @@ -270,7 +268,7 @@ Excel.ChartTrendlineFormat.line: }); Excel.NamedItemCollection.add: - |- - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const headerRange = sheet.getRange("A1:D1"); @@ -641,7 +639,7 @@ Excel.Workbook.properties: await context.sync(); - OfficeHelpers.UI.notify("Set the following document properties: title, subject, keywords, comments, category, manager, company."); + console.log("Set the following document properties: title, subject, keywords, comments, category, manager, company."); }); Excel.Binding.onDataChanged: - |- @@ -651,7 +649,7 @@ Excel.Binding.onDataChanged: const salesByQuarterBinding = context.workbook.bindings.add(salesTable.getRange(), "Table", "SalesByQuarter"); salesByQuarterBinding.onDataChanged.add(onSalesDataChanged); - OfficeHelpers.UI.notify("The handler is registered.", "Change the value in one of the data cells and watch this message banner. (Be sure to complete the edit by pressing Enter or clicking in another cell.)"); + console.log("The data changed handler is registered."); await context.sync(); }); @@ -669,6 +667,7 @@ Excel.Runtime.enableEvents: } else { console.log("Events are currently off."); } + await context.sync(); }); Excel.SettingCollection.onSettingsChanged: @@ -676,18 +675,18 @@ Excel.SettingCollection.onSettingsChanged: await Excel.run(async (context) => { const settings = context.workbook.settings; settings.onSettingsChanged.add(onChangedSetting); - OfficeHelpers.UI.notify("Settings changed handler registered", "Press the next button to change the setting, then watch the console."); await context.sync(); + console.log("Settings changed handler registered."); }); Excel.SettingCollection.add: - |- await Excel.run(async (context) => { const settings = context.workbook.settings; settings.onSettingsChanged.add(onChangedSetting); - OfficeHelpers.UI.notify("Settings changed handler registered", "Press the next button to change the setting, then watch the console."); await context.sync(); + console.log("Settings changed handler registered."); }); Excel.Table.onChanged: - |- @@ -696,9 +695,7 @@ Excel.Table.onChanged: table.onChanged.add(onChange); await context.sync(); - - OfficeHelpers.UI.notify("A handler has been registered for the onChanged event", - "Try changing a cell value in the table, and watch the console output."); + console.log("A handler has been registered for the onChanged event"); }); Excel.Table.onSelectionChanged: - |- @@ -707,15 +704,13 @@ Excel.Table.onSelectionChanged: table.onSelectionChanged.add(onSelectionChange); await context.sync(); - - OfficeHelpers.UI.notify("A handler has been registered for table onSelectionChanged event", - "Try changing a range selection in the table, and watch the console output."); + console.log("A handler has been registered for table onSelectionChanged event"); }); Excel.TableSelectionChangedEventArgs.address: - |- 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); + console.log("Handler for table onSelectionChanged event has been triggered. The new selection is: " + args.address); }); } Excel.TableChangedEventArgs.worksheetId: @@ -728,7 +723,7 @@ Excel.TableChangedEventArgs.worksheetId: await context.sync(); - console.log("Handler for table collection onChanged event has been triggered. Data changed address : " + event.address); + console.log("Handler for table collection onChanged event has been triggered. Data changed address: " + event.address); console.log("Table Id : " + event.tableId); console.log("Worksheet Id : " + worksheet.name); }); @@ -743,7 +738,7 @@ Excel.TableChangedEventArgs.tableId: await context.sync(); - console.log("Handler for table collection onChanged event has been triggered. Data changed address : " + event.address); + console.log("Handler for table collection onChanged event has been triggered. Data changed address: " + event.address); console.log("Table Id : " + event.tableId); console.log("Worksheet Id : " + worksheet.name); }); @@ -755,68 +750,53 @@ Excel.TableCollection.onChanged: tables.onChanged.add(onChange); await context.sync(); - - OfficeHelpers.UI.notify("A handler has been registered for the table collection onChanged event", - "Try changing cell values in the tables, and watch the console output."); + console.log("A handler has been registered for the table collection onChanged event"); }); Excel.WorksheetCollection.onDeactivated: - |- - await Excel.run(async context => { + await Excel.run(async (context) => { let sheets = context.workbook.worksheets; sheets.onDeactivated.add(onDeactivate); await context.sync(); - - OfficeHelpers.UI.notify( - "A handler has been registered for the OnDeactivate event", - "Try selecting a different worksheet, and watch the console output." - ); + console.log("A handler has been registered for the OnDeactivate event."); }); Excel.WorksheetCollection.onActivated: - |- - await Excel.run(async context => { + await Excel.run(async (context) => { let sheets = context.workbook.worksheets; sheets.onActivated.add(onActivate); await context.sync(); - - OfficeHelpers.UI.notify( - "A handler has been registered for the OnActivate event", - "Try selecting a different worksheet, and watch the console output." - ); + console.log("A handler has been registered for the OnActivate event."); }); Excel.Worksheet.onChanged: - |- - await Excel.run(async context => { + await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); sheet.onChanged.add(onChange); await context.sync(); - - OfficeHelpers.UI.notify("A handler has been registered for the onChanged event."); + console.log("A handler has been registered for the onChanged event."); }); Excel.WorksheetAddedEventArgs.worksheetId: - |- async function onWorksheetAdd(event) { - await Excel.run(async context => { + await Excel.run(async (context) => { console.log( - "Handler for worksheet onAdded event has been triggered. Newly added worksheet Id : " + + "Handler for worksheet onAdded event has been triggered. Newly added worksheet Id : " + event.worksheetId ); }); } Excel.WorksheetCollection.onAdded: - |- - await Excel.run(async context => { + await Excel.run(async (context) => { let sheet = context.workbook.worksheets; sheet.onAdded.add(onWorksheetAdd); await context.sync(); - - OfficeHelpers.UI.notify( - "A handler has been registered for the OnAdded event", - "Try adding a worksheet, and watch the console output." - ); + console.log("A handler has been registered for the OnAdded event."); }); Excel.Worksheet.showGridlines: - |- @@ -863,7 +843,7 @@ Excel.Range.set: }); Excel.NamedItem.delete: - |- - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const totalName = sheet.names.getItemOrNullObject("TotalAmount"); totalName.load(); @@ -1715,111 +1695,115 @@ Excel.TextConditionalFormat.rule: }); Excel.Range.getIntersectionOrNullObject: - |- - 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 - ); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const salesTable = sheet.tables.getItem("SalesTable"); + const dataRange = salesTable.getDataBodyRange(); - // Must sync before you can test the output of *OrNullObject - // method/property. - await context.sync(); + // 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(); - 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"); - } + // Asian and European teams have separate contests. + const asianSalesRange = sheet.getRange("A2:E4"); + const europeanSalesRange = sheet.getRange("A5:E7"); - 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" - ); - } + // 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); - await context.sync(); + // 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.getUsedRange: - |- - 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 - ); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const salesTable = sheet.tables.getItem("SalesTable"); + const dataRange = salesTable.getDataBodyRange(); - // Must sync before you can test the output of *OrNullObject - // method/property. - await context.sync(); + // 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(); - 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"); - } + // Asian and European teams have separate contests. + const asianSalesRange = sheet.getRange("A2:E4"); + const europeanSalesRange = sheet.getRange("A5:E7"); - 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" - ); - } + // 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); - await context.sync(); + // 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.hyperlink: - |- @@ -1846,8 +1830,6 @@ Excel.Range.hyperlink: } await context.sync(); - - OfficeHelpers.UI.notify("Created a hyperlink to a URL for each of the products in the first table."); }); Excel.RangeHyperlink.address: - |- @@ -1874,8 +1856,6 @@ Excel.RangeHyperlink.address: } await context.sync(); - - OfficeHelpers.UI.notify("Created a hyperlink to a URL for each of the products in the first table."); }); Excel.RangeHyperlink.screenTip: - |- @@ -1902,8 +1882,6 @@ Excel.RangeHyperlink.screenTip: } await context.sync(); - - OfficeHelpers.UI.notify("Created a hyperlink to a URL for each of the products in the first table."); }); Excel.RangeHyperlink.textToDisplay: - |- @@ -1930,8 +1908,6 @@ Excel.RangeHyperlink.textToDisplay: } await context.sync(); - - OfficeHelpers.UI.notify("Created a hyperlink to a URL for each of the products in the first table."); }); Excel.RangeHyperlink.documentReference: - |- @@ -1958,12 +1934,10 @@ Excel.RangeHyperlink.documentReference: } await context.sync(); - - OfficeHelpers.UI.notify("Created a hyperlink to a location in this workbook for each of the products in the second table."); }); Excel.Range.getUsedRangeOrNullObject: - |- - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const salesTable = sheet.tables.getItem("SalesTable"); const dataRange = salesTable.getDataBodyRange(); @@ -2020,9 +1994,9 @@ Excel.Setting.delete: await context.sync(); if (needsReview.isNullObject) { - OfficeHelpers.UI.notify("The setting has been deleted"); + console.log("The setting has been deleted"); } else { - OfficeHelpers.UI.notify("The setting was not deleted"); + console.log("The setting was not deleted"); } await context.sync(); @@ -2038,9 +2012,9 @@ Excel.SettingCollection.getItemOrNullObject: await context.sync(); if (needsReview.isNullObject) { - OfficeHelpers.UI.notify("The setting has been deleted"); + console.log("The setting has been deleted"); } else { - OfficeHelpers.UI.notify("The setting was not deleted"); + console.log("The setting was not deleted"); } await context.sync(); @@ -2085,7 +2059,7 @@ Excel.Style.delete: await context.sync(); - OfficeHelpers.UI.notify("Successfully deleted the diagonal orientation style from the Home tab ribbon."); + console.log("Successfully deleted the diagonal orientation style from the Home tab ribbon."); }); Excel.Style.load: - |- @@ -2137,7 +2111,7 @@ Excel.StyleCollection.getItem: await context.sync(); - OfficeHelpers.UI.notify("Successfully added a new style with diagonal orientation to the Home tab ribbon."); + console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); Excel.StyleCollection.add: - |- @@ -2159,7 +2133,7 @@ Excel.StyleCollection.add: await context.sync(); - OfficeHelpers.UI.notify("Successfully added a new style with diagonal orientation to the Home tab ribbon."); + console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); Excel.NamedItem.formula: - |- @@ -2172,14 +2146,14 @@ Excel.NamedItem.formula: await context.sync(); if (myNamedItem.isNullObject) { - OfficeHelpers.UI.notify(`There is no named item with the name "MyRange".`); + OfficeHelpers.UI.notify(`There is no named item. Create it with "Add named item for a range" first.`); } else { // Update named item to point to the second range myNamedItem.formula = "=Sample!$B$10:$D$14"; sheet.getRange("B10:D14").select(); await context.sync(); - OfficeHelpers.UI.notify(`Just updated the named item "${myNamedItem.name}" -- it's now located here: ${myNamedItem.formula}`); + console.log(`Just updated the named item "${myNamedItem.name}" -- it's now located here: ${myNamedItem.formula}`); } }); Excel.Workbook.getActiveCell: @@ -2251,7 +2225,7 @@ Excel.WorksheetFreezePanes.getLocationOrNullObject: if (frozenRange.isNullObject) { OfficeHelpers.UI.notify(`The worksheet does not contain a frozen pane.`); } else { - OfficeHelpers.UI.notify(`The address of the frozen range (cells that are frozen in the top-and-left-most pane) is "${frozenRange.address}"`); + 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: @@ -2280,7 +2254,7 @@ Excel.Worksheet.getPrevious: let currentYear = currentSheet.name.substr(5, 4); let previousYear = previousYearSheet.name.substr(5, 4); - OfficeHelpers.UI.notify("Two Year Tax Due Comparison", `Tax due for ${currentYear} was ${currentTaxDueRange.text[0][0]}\nTax due for ${previousYear} was ${previousTaxDueRange.text[0][0]}`) + 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(); }); @@ -2306,7 +2280,7 @@ Excel.Worksheet.getNext: let firstYear = firstSheet.name.substr(5, 4); let lastYear = lastSheet.name.substr(5, 4); - OfficeHelpers.UI.notify(`Tax Rate change from ${firstYear} to ${lastYear}`, `Tax rate for ${firstYear}: ${firstTaxRateRange.text[0][0]}\nTax rate for ${lastYear}: ${lastTaxRateRange.text[0][0]}`) + 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(); }); @@ -2332,7 +2306,7 @@ Excel.WorksheetCollection.getFirst: let firstYear = firstSheet.name.substr(5, 4); let lastYear = lastSheet.name.substr(5, 4); - OfficeHelpers.UI.notify(`Tax Rate change from ${firstYear} to ${lastYear}`, `Tax rate for ${firstYear}: ${firstTaxRateRange.text[0][0]}\nTax rate for ${lastYear}: ${lastTaxRateRange.text[0][0]}`) + 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(); }); @@ -2358,7 +2332,7 @@ Excel.WorksheetCollection.getLast: let firstYear = firstSheet.name.substr(5, 4); let lastYear = lastSheet.name.substr(5, 4); - OfficeHelpers.UI.notify(`Tax Rate change from ${firstYear} to ${lastYear}`, `Tax rate for ${firstYear}: ${firstTaxRateRange.text[0][0]}\nTax rate for ${lastYear}: ${lastTaxRateRange.text[0][0]}`) + 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(); }); @@ -2372,7 +2346,7 @@ Excel.Worksheet.tabColor: }); Excel.ChartTitle.getSubstring: - |- - await Excel.run(async context => { + await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); let chart = sheet.charts.getItemAt(0); @@ -2382,7 +2356,7 @@ Excel.ChartTitle.getSubstring: }); Excel.ChartTitle.textOrientation: - |- - await Excel.run(async context => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const title = sheet.charts.getItemAt(0).title; title.textOrientation = -45; diff --git a/view/excel.json b/view/excel.json index eeca4ae82..d8110b429 100644 --- a/view/excel.json +++ b/view/excel.json @@ -14,8 +14,8 @@ "excel-chart-series-plotorder": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-series-plotorder.yaml", "excel-chart-title-format": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-title-format.yaml", "excel-chart-trendlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-trendlines.yaml", - "excel-range-conditional-formatting-advanced": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml", "excel-range-conditional-formatting-basic": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml", + "excel-range-conditional-formatting-advanced": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml", "excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml", "excel-chart-chart-title-js": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/private-samples/excel/20-chart/chart-title-js.yaml", @@ -42,7 +42,7 @@ "excel-range-insert-delete-and-clear-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/insert-delete-clear-range.yaml", "excel-range-range-relationships": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-relationships.yaml", "excel-range-selected-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/selected-range.yaml", - "excel-range-test-for-used-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/test-for-used-range.yaml", + "excel-range-used-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/used-range.yaml", "excel-range-text-orientation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-text-orientation.yaml", "excel-range-values-and-formulas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/set-get-values.yaml", "excel-table-add-rows-and-columns-to-a-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml", From e3e00a2475165e5ad40e3d62b0455b38c313a4d9 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 16 Nov 2018 11:43:21 -0800 Subject: [PATCH 104/660] CreateWorkbook snippet (#232) * Add CreateWorkbook snippet * Respond to feedback * Fixing description, layout, and HTML object * Adding additional FileReader casts * Minor ordering and title changes to range and cond. formatting snippets --- playlists/excel.yaml | 31 ++++-- .../conditional-formatting-advanced.yaml | 2 +- .../42-range/range-text-orientation.yaml | 2 +- samples/excel/42-range/used-range.yaml | 2 +- .../excel/50-workbook/create-workbook.yaml | 95 +++++++++++++++++++ .../excel/50-workbook/data-protection.yaml | 2 +- view/excel.json | 3 +- 7 files changed, 122 insertions(+), 15 deletions(-) create mode 100644 samples/excel/50-workbook/create-workbook.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 02e939666..1d4014edb 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -147,7 +147,7 @@ api_set: ExcelApi: 1.6 - id: excel-range-conditional-formatting-advanced - name: Advanced conditional formats + name: Advanced conditional formatting fileName: conditional-formatting-advanced.yaml description: Applies more than one conditional format on the same range. rawUrl: >- @@ -385,6 +385,15 @@ group: Range api_set: ExcelApi: 1.1 +- 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////samples/excel/42-range/range-text-orientation.yaml + group: Range + api_set: + ExcelApi: 1.7 - id: excel-range-used-range name: Used range fileName: used-range.yaml @@ -396,15 +405,6 @@ group: Range api_set: ExcelApi: 1.4 -- 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////samples/excel/42-range/range-text-orientation.yaml - group: Range - api_set: - ExcelApi: 1.7 - id: excel-range-values-and-formulas name: Values and formulas fileName: set-get-values.yaml @@ -515,6 +515,17 @@ group: Workbook api_set: ExcelApi: 1.7 +- 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////samples/excel/50-workbook/create-workbook.yaml + group: Workbook + api_set: + ExcelApi: 1.8 - id: excel-workbook-data-protection name: Data protection fileName: data-protection.yaml diff --git a/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml index 9dc6bc4a9..c7b06ab1b 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml @@ -1,6 +1,6 @@ order: 2 id: excel-range-conditional-formatting-advanced -name: Advanced conditional formats +name: Advanced conditional formatting description: Applies more than one conditional format on the same range. host: EXCEL api_set: diff --git a/samples/excel/42-range/range-text-orientation.yaml b/samples/excel/42-range/range-text-orientation.yaml index a18bd20d1..da904d66f 100644 --- a/samples/excel/42-range/range-text-orientation.yaml +++ b/samples/excel/42-range/range-text-orientation.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 6 id: excel-range-text-orientation name: Text orientation description: Gets and sets the text orientation within a range. diff --git a/samples/excel/42-range/used-range.yaml b/samples/excel/42-range/used-range.yaml index 9d95d778f..66f632d16 100644 --- a/samples/excel/42-range/used-range.yaml +++ b/samples/excel/42-range/used-range.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 7 id: excel-range-used-range name: Used range description: Tests for a used range and creates a chart from a table only if there's data in the table. diff --git a/samples/excel/50-workbook/create-workbook.yaml b/samples/excel/50-workbook/create-workbook.yaml new file mode 100644 index 000000000..aea4eb3ce --- /dev/null +++ b/samples/excel/50-workbook/create-workbook.yaml @@ -0,0 +1,95 @@ +order: 2 +id: excel-workbook-create-workbook +name: Create workbook +description: 'Creates a new, empty workbook and creates a new workbook by copying an existing one.' +author: OfficeDev +host: EXCEL +api_set: + ExcelApi: 1.8 +script: + content: | + $("#create-new-blank-workbook").click(() => tryCatch(createBlankWorkbook)); + $("#file").change(() => tryCatch(createWorkbookFromExisting)); + + async function createBlankWorkbook() { + await Excel.run(async (context) => { + Excel.createWorkbook(); + }); + } + + async function createWorkbookFromExisting() { + 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 = (event.target).result.indexOf("base64,"); + const mybase64 = (event.target).result.substr(startIndex + 7); + + Excel.createWorkbook(mybase64); + return context.sync(); + }); + }); + + // read in the file as a data URL so 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) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |- +
    +

    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

    +

    +

    Copy existing workbook

    +

    Select an Excel workbook to copy and open in a new instance of Excel.

    +
    + +
    +
    + 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 + + @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/samples/excel/50-workbook/data-protection.yaml b/samples/excel/50-workbook/data-protection.yaml index a60683153..808a3ea83 100644 --- a/samples/excel/50-workbook/data-protection.yaml +++ b/samples/excel/50-workbook/data-protection.yaml @@ -1,4 +1,4 @@ -order: 2 +order: 3 id: excel-workbook-data-protection name: Data protection description: Protects data in a worksheet and the workbook structure. diff --git a/view/excel.json b/view/excel.json index d8110b429..3a8de56df 100644 --- a/view/excel.json +++ b/view/excel.json @@ -42,8 +42,8 @@ "excel-range-insert-delete-and-clear-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/insert-delete-clear-range.yaml", "excel-range-range-relationships": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-relationships.yaml", "excel-range-selected-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/selected-range.yaml", - "excel-range-used-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/used-range.yaml", "excel-range-text-orientation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-text-orientation.yaml", + "excel-range-used-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/used-range.yaml", "excel-range-values-and-formulas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/set-get-values.yaml", "excel-table-add-rows-and-columns-to-a-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml", "excel-table-convert-range-to-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/convert-range-to-table.yaml", @@ -56,6 +56,7 @@ "excel-table-sort-data": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/sort-data.yaml", "excel-table-style": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/style.yaml", "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/workbook-get-active-cell.yaml", + "excel-workbook-create-workbook": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/create-workbook.yaml", "excel-workbook-data-protection": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/data-protection.yaml", "excel-worksheet-active-worksheet": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/active-worksheet.yaml", "excel-worksheet-add-delete-rename-move-worksheet": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml", From 98e8b0d6cefb86935204ea0c9ae5798a54fea3df Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Tue, 20 Nov 2018 14:59:26 -0800 Subject: [PATCH 105/660] Stacking tetromino sample (#234) * Initial progress * Stacking tetrimino sample * Running npm start and changing name * Fix image shape * Control improvements * Fix typos * Address Zlatkovsky's feedback --- playlists/excel.yaml | 9 + samples/excel/85-preview-apis/tetrominos.yaml | 790 ++++++++++++++++++ view/excel.json | 1 + 3 files changed, 800 insertions(+) create mode 100644 samples/excel/85-preview-apis/tetrominos.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 1d4014edb..ef6d8dfc9 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -649,6 +649,15 @@ group: Preview APIs api_set: ExcelApi: 1.9 +- 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////samples/excel/85-preview-apis/tetrominos.yaml + group: Preview APIs + api_set: + ExcelApi: 1.8 - id: excel-scenarios-report-generation name: Report generation fileName: report-generation.yaml diff --git a/samples/excel/85-preview-apis/tetrominos.yaml b/samples/excel/85-preview-apis/tetrominos.yaml new file mode 100644 index 000000000..60c67618f --- /dev/null +++ b/samples/excel/85-preview-apis/tetrominos.yaml @@ -0,0 +1,790 @@ +order: 3 +id: excel-just-for-fun-tetrominos +name: Tetromino stacking +description: Arrange moving tetromino shapes to form lines. +author: OfficeDev +host: EXCEL +api_set: + ExcelApi: 1.8 +script: + content: |- + $("#run").click(() => { + $("#setup").hide(); + tryCatch(run) + }); + + $("#selectedFile").change(() => tryCatch(readImageFromFile)); + + let backgroundPicture = getDefaultBackgroundPicture(); + + function readImageFromFile() { + const myFile = document.getElementById("selectedFile"); + const reader = new FileReader(); + + reader.onload = (event) => { + const startIndex = ((event.target).result).indexOf("base64,"); + const mybase64 = ((event.target).result).substr(startIndex + 7); + backgroundPicture = mybase64; + }; + + // Read in the image file as a data URL. + reader.readAsDataURL(myFile.files[0]); + } + + async function run() { + await Excel.run(async (ctx) => { + const shapes = ctx.workbook.worksheets.getActiveWorksheet().shapes; + shapes.load("items/$none"); + await ctx.sync(); + + shapes.items.forEach(shape => shape.delete()); + await ctx.sync(); + + const img = shapes.addImage(backgroundPicture); + let cachedShapesByPosition = {}; + + const RENDER_USING_ADD_DELETE = 0; + const RENDER_USING_ADD_FILL = 1; + let renderPolicy = RENDER_USING_ADD_FILL; + + const NUM_ROWS = 20; + const NUM_COLS = 10; + const BLOCK_WIDTH = 30; + const BLOCK_HEIGHT = 30; + const TICK_MS = 500; + + const KEY_ENTER = 13; + const KEY_SPACE = 32; + const KEY_LEFT = 37; + const KEY_RIGHT = 39; + const KEY_DOWN = 40; + const KEY_A = 65; + const KEY_D = 68; + const KEY_R = 82; + + const pieces = [ + [[0, 0, 0, 0], [0, 1, 1, 0], [0, 1, 1, 0], [0, 0, 0, 0]], + [[0, 0, 2, 0], [0, 0, 2, 0], [0, 0, 2, 0], [0, 0, 2, 0]], + [[0, 0, 3, 0], [0, 3, 3, 0], [0, 0, 3, 0], [0, 0, 0, 0]], + [[0, 0, 0, 0], [0, 0, 4, 4], [0, 4, 4, 0], [0, 0, 0, 0]], + [[0, 0, 0, 0], [0, 5, 5, 0], [0, 0, 5, 5], [0, 0, 0, 0]], + [[0, 0, 6, 0], [0, 0, 6, 0], [0, 6, 6, 0], [0, 0, 0, 0]], + [[0, 7, 0, 0], [0, 7, 0, 0], [0, 7, 7, 0], [0, 0, 0, 0]] + ]; + + const background = [ + "#E5E8E8" /* Black */, + "#C0392B" /* Red */, + "#9b59b6" /* Purple */, + "#16a085" /* Deep Green */, + "#58d68d" /* Light Green */, + "#af601a" /* Red Yellow */, + "#F1C40F" /* Light Yellow */ + ]; + + function rotateLeft(piece) { + return [ + [piece[0][3], piece[1][3], piece[2][3], piece[3][3]], + [piece[0][2], piece[1][2], piece[2][2], piece[3][2]], + [piece[0][1], piece[1][1], piece[2][1], piece[3][1]], + [piece[0][0], piece[1][0], piece[2][0], piece[3][0]] + ]; + } + + function rotateRight(piece) { + return [ + [piece[3][0], piece[2][0], piece[1][0], piece[0][0]], + [piece[3][1], piece[2][1], piece[1][1], piece[0][1]], + [piece[3][2], piece[2][2], piece[1][2], piece[0][2]], + [piece[3][3], piece[2][3], piece[1][3], piece[0][3]] + ]; + } + + function intersects(rows, piece, y, x) { + for (let i = 0; i < 4; i++) { + for (let j = 0; j < 4; j++) { + if (piece[i][j]) { + if (y + i >= NUM_ROWS || x + j < 0 || x + j >= NUM_COLS || rows[y + i][x + j]) { + return true; + } + } + } + } + + return false; + } + + function applyPiece(rows, piece, y, x) { + const newRows = []; + for (let i = 0; i < NUM_ROWS; i++) { + newRows[i] = rows[i].slice(); + } + + for (let i = 0; i < 4; i++) { + for (let j = 0; j < 4; j++) { + if (piece[i][j]) { + newRows[y + i][x + j] = piece[i][j]; + } + } + } + + return newRows; + } + + function removeRows(rows) { + const newRows = []; + let k = NUM_ROWS; + for (let i = NUM_ROWS; i-- > 0; ) { + for (let j = 0; j < NUM_COLS; j++) { + if (!rows[i][j]) { + newRows[--k] = rows[i].slice(); + break; + } + } + } + + for (let i = 0; i < k; i++) { + newRows[i] = []; + for (let j = 0; j < NUM_COLS; j++) newRows[i][j] = 0; + } + + return { + rows: newRows, + numRowsKilled: k + }; + } + + function randomPiece() { + return pieces[Math.floor(Math.random() * pieces.length)]; + } + + function coreMovementFunction() { + this.sessionOver = false; + this.rowsCleared = 0; + this.currentPiece = randomPiece(); + this.nextPiece = randomPiece(); + this.pieceY = 0; + this.pieceX = NUM_COLS / 2 - 2; + this.rows = []; + for (var i = 0; i < NUM_ROWS; i++) { + this.rows[i] = []; + for (var j = 0; j < NUM_COLS; j++) { + this.rows[i][j] = 0; + } + } + } + + coreMovementFunction.prototype.reset = function() { + this.sessionOver = false; + this.rowsCleared = 0; + this.currentPiece = randomPiece(); + this.nextPiece = randomPiece(); + this.pieceY = 0; + this.pieceX = NUM_COLS / 2 - 2; + this.rows = []; + for (var i = 0; i < NUM_ROWS; i++) { + this.rows[i] = []; + for (var j = 0; j < NUM_COLS; j++) { + this.rows[i][j] = 0; + } + } + }; + + coreMovementFunction.prototype.tick = function() { + if (this.sessionOver) return false; + + if (sessionInitializing) { + return false; + } + + if (intersects(this.rows, this.currentPiece, this.pieceY + 1, this.pieceX)) { + this.rows = applyPiece(this.rows, this.currentPiece, this.pieceY, this.pieceX); + + const r = removeRows(this.rows); + this.rows = r.rows; + this.rowsCleared += r.numRowsKilled; + + if (intersects(this.rows, this.nextPiece, 0, NUM_COLS / 2 - 2)) { + this.sessionOver = true; + } else { + this.currentPiece = this.nextPiece; + this.pieceY = 0; + this.pieceX = NUM_COLS / 2 - 2; + this.nextPiece = randomPiece(); + } + } else { + this.pieceY += 1; + } + + return true; + }; + + coreMovementFunction.prototype.steerLeft = function() { + if (!intersects(this.rows, this.currentPiece, this.pieceY, this.pieceX - 1)) { + this.pieceX -= 1; + } + }; + + coreMovementFunction.prototype.steerRight = function() { + if (!intersects(this.rows, this.currentPiece, this.pieceY, this.pieceX + 1)) { + this.pieceX += 1; + } + }; + + coreMovementFunction.prototype.steerDown = function() { + if (!intersects(this.rows, this.currentPiece, this.pieceY + 1, this.pieceX)) { + this.pieceY += 1; + } + }; + + coreMovementFunction.prototype.rotateLeft = function() { + const newPiece = rotateLeft(this.currentPiece); + if (!intersects(this.rows, newPiece, this.pieceY, this.pieceX)) { + this.currentPiece = newPiece; + } + }; + + coreMovementFunction.prototype.rotateRight = function() { + const newPiece = rotateRight(this.currentPiece); + if (!intersects(this.rows, newPiece, this.pieceY, this.pieceX)) { + this.currentPiece = newPiece; + } + }; + + coreMovementFunction.prototype.letFall = function() { + while (!intersects(this.rows, this.currentPiece, this.pieceY + 1, this.pieceX)) { + this.pieceY += 1; + } + + this.tick(); + }; + + coreMovementFunction.prototype.getRows = function() { + return applyPiece(this.rows, this.currentPiece, this.pieceY, this.pieceX); + }; + + coreMovementFunction.prototype.getNextPiece = function() { + return this.nextPiece; + }; + + coreMovementFunction.prototype.getRowsCleared = function() { + return this.rowsCleared; + }; + + coreMovementFunction.prototype.getSessionOver = function() { + return this.sessionOver; + }; + + function drawPreview(rows, num_rows, num_cols, domContainer) { + const boardElem = document.createElement("div"); + for (let i = 0; i < num_rows; i++) { + for (let j = 0; j < num_cols; j++) { + const blockElem = document.createElement("div"); + blockElem.classList.add("block"); + if (rows[i][j]) { + blockElem.classList.add("habitated"); + } + + blockElem.style.top = i * BLOCK_HEIGHT + "px"; + blockElem.style.left = j * BLOCK_WIDTH + "px"; + blockElem.style.backgroundColor = background[rows[i][j] - 1]; + boardElem.appendChild(blockElem); + } + } + + domContainer.appendChild(boardElem); + } + + let isDrawing = false; + + async function drawBlocks(rows, num_rows, num_cols, domContainer) { + if (isDrawing) { + return; + } + + isDrawing = true; + + if (renderPolicy == RENDER_USING_ADD_DELETE) { + // #1: Create new shapes on demand + let validShapes = {}; + let shapeCreated = 0; + let shapeKept = 0; + for (let i = 0; i < num_rows; i++) { + for (let j = 0; j < num_cols; j++) { + if (rows[i][j]) { + let top = i * BLOCK_HEIGHT; + let left = j * BLOCK_WIDTH; + const key = top + "-" + left; + + if (cachedShapesByPosition[key]) { + shapeKept += 1; + validShapes[key] = cachedShapesByPosition[key]; + delete cachedShapesByPosition[key]; + } else { + shapeCreated += 1; + const newshp = shapes.addGeometricShape( + "Rectangle", + left, + top, + BLOCK_WIDTH, + BLOCK_HEIGHT + ); + validShapes[key] = newshp; + } + + let color = background[rows[i][j] - 1]; + validShapes[key].fill.setSolidColor(color); + } + } + } + + // #2: Delete shapes no need anymore + let shpDeleted = 0; + for (const key in cachedShapesByPosition) { + if (cachedShapesByPosition.hasOwnProperty(key)) { + shpDeleted += 1; + const shapPendingToDelete = cachedShapesByPosition[key]; + shapPendingToDelete.delete(); + } + } + + // #3: Update the cache + cachedShapesByPosition = validShapes; + } else if (renderPolicy == RENDER_USING_ADD_FILL) { + let countOfShapesRefilled = 0; + let countOfShapesSetToInvisible = 0; + let countOfShapesSetToVisible = 0; + + for (let i = 0; i < num_rows; i++) { + for (let j = 0; j < num_cols; j++) { + let top = i * BLOCK_HEIGHT; + let left = j * BLOCK_WIDTH; + let key = top + "-" + left; + + if (!cachedShapesByPosition[key]) { + throw new Error("Shape should be created before reaching here."); + } + + if (rows[i][j]) { + // show a shape + if (cachedShapesByPosition[key].fill.transparency == 1) { + cachedShapesByPosition[key].fill.transparency = 0; + countOfShapesSetToVisible += 1; + } + + let color = background[rows[i][j] - 1]; + if (color != cachedShapesByPosition[key].fill.foreColor) { + cachedShapesByPosition[key].fill.foreColor = color; + countOfShapesRefilled += 1; + } + } else { + // hide a shape + if (cachedShapesByPosition[key].fill.transparency == 0) { + cachedShapesByPosition[key].fill.transparency = 1; + countOfShapesSetToInvisible += 1; + } + } + } + } + } + + await ctx.sync(); + isDrawing = false; + } + + function drawCoreMovement(session, isPaused, containerElem) { + const tetrominoElement = document.createElement("div"); + tetrominoElement.classList.add("coreMovementFunction"); + + // following part will be drawn inside the addin pane + drawConsolePane(session, isPaused, tetrominoElement); + + // this will be drawn inside the worksheet rather than the addin pane + drawCoreMovementPane(session, tetrominoElement); + + containerElem.appendChild(tetrominoElement); + } + + function drawCoreMovementPane(session, containerElem) { + const sessionPaneElem = document.createElement("div"); + drawBoard(session, sessionPaneElem); + + containerElem.appendChild(sessionPaneElem); + } + + function drawBoard(session, containerElem) { + const boardPaneElem = document.createElement("div"); + boardPaneElem.classList.add("board"); + + const rows = session.getRows(); + drawBlocks(rows, NUM_ROWS, NUM_COLS, boardPaneElem); + + containerElem.appendChild(boardPaneElem); + } + + function drawConsolePane(session, isPaused, containerElem) { + const consolePaneElem = document.createElement("div"); + consolePaneElem.classList.add("consolePane"); + + const previewText = drawPreviewText(session); + const previewElem = drawSessionPreview(session); + const rowsClearedElem = drawRowsCleared(session, isPaused); + const usageElem = drawSessionUsage(); + + consolePaneElem.appendChild(previewText); + consolePaneElem.appendChild(previewElem); + consolePaneElem.appendChild(rowsClearedElem); + consolePaneElem.appendChild(usageElem); + + containerElem.appendChild(consolePaneElem); + } + + function drawRowsCleared(session, isPaused) { + const rowsCleared = session.getRowsCleared(); + const rowsClearedElem = document.createElement("div"); + rowsClearedElem.classList.add("sessionRowsCleared"); + rowsClearedElem.innerHTML = "

    Rows cleared: " + rowsCleared + "

    "; + if (isPaused) { + rowsClearedElem.innerHTML += "

    PAUSED

    "; + } + + if (session.getSessionOver()) { + rowsClearedElem.innerHTML += "

    SESSION OVER

    "; + } + + return rowsClearedElem; + } + + function drawPreviewText(session) { + const previewTextElem = document.createElement("div"); + previewTextElem.classList.add("previewText"); + previewTextElem.innerHTML = "

    Next shape

    "; + return previewTextElem; + } + + function drawSessionPreview(session) { + const piece = session.getNextPiece(); + const previewElem = document.createElement("div"); + previewElem.classList.add("preview"); + drawPreview(piece, 4, 4, previewElem); + return previewElem; + } + + function drawSessionUsage() { + const usageElem = document.createElement("div"); + usageElem.classList.add("usage"); + usageElem.innerHTML = ` +

    Keyboard controls:

    + + + + + + + + + +
    Move shape leftLeft arrow
    Move shape rightRight arrow
    Move shape downDown arrow
    Rotate counterclockwiseA
    Rotate clockwiseD
    Drop shape to bottomSpace
    Pause/UnpauseEnter
    Restart sessionR
    + `; + return usageElem; + } + + let sessionInitializing = false; + async function initializeSceneAsync() { + for (const key in cachedShapesByPosition) { + if (cachedShapesByPosition.hasOwnProperty(key)) { + const shp = cachedShapesByPosition[key]; + shp.delete(); + delete cachedShapesByPosition[key]; + } + } + await ctx.sync(); + + for (let i = 0; i < NUM_ROWS; i++) { + for (let j = 0; j < NUM_COLS; j++) { + if (renderPolicy == RENDER_USING_ADD_FILL) { + let top = i * BLOCK_HEIGHT; + let left = j * BLOCK_WIDTH; + let key = top + "-" + left; + + let newshp = shapes.addGeometricShape("Rectangle", left, top, BLOCK_WIDTH, BLOCK_HEIGHT); + + newshp.fill.transparency = 1; + newshp.fill.foreColor = "#000000"; + + cachedShapesByPosition[key] = newshp; + } + } + } + + await ctx.sync(); + sessionInitializing = false; + } + + let throttledRedraw; + function redraw(session, isPaused, containerElem) { + containerElem.innerHTML = ""; + + if (sessionInitializing) { + return; + } + + let drawingFactory = function(context) { + return function() { + drawCoreMovement.apply(context, [session, isPaused, containerElem]); + }; + }; + + if (!throttledRedraw) { + throttledRedraw = _.throttle(drawingFactory(this), TICK_MS / 5, { maxWait: TICK_MS }); + } + + throttledRedraw(); + } + + async function run(rootelem, containerElem) { + const session = new coreMovementFunction(); + await initializeSceneAsync(); + + play(); + + function play() { + const intervalHandler = setInterval(function() { + if (session.tick()) { + redraw(session, false, containerElem); + } + }, TICK_MS); + + async function keyHandler(kev) { + if (kev.shiftKey || kev.altKey || kev.metaKey) { + return; + } + + let consumed = true; + let mustpause = false; + if (kev.keyCode === KEY_ENTER) { + mustpause = true; + } else if (kev.keyCode === KEY_R) { + kev.preventDefault(); + consumed = false; + sessionInitializing = true; + session.reset(); + await initializeSceneAsync(); + } else if (kev.keyCode === KEY_LEFT) { + session.steerLeft(); + } else if (kev.keyCode === KEY_RIGHT) { + session.steerRight(); + } else if (kev.keyCode === KEY_DOWN) { + session.steerDown(); + } else if (kev.keyCode === KEY_A) { + session.rotateLeft(); + } else if (kev.keyCode === KEY_D) { + session.rotateRight(); + } else if (kev.keyCode === KEY_SPACE) { + session.letFall(); + } else { + consumed = false; + } + + if (consumed) { + kev.preventDefault(); + if (mustpause) { + rootelem.removeEventListener("keydown", keyHandler); + clearInterval(intervalHandler); + pause(); + } else { + redraw(session, false, containerElem); + } + } + } + + rootelem.addEventListener("keydown", keyHandler); + } + + function pause() { + function keyHandler(kev) { + if (kev.keyCode == KEY_ENTER) { + rootelem.removeEventListener("keydown", keyHandler); + play(); + } + } + + rootelem.addEventListener("keydown", keyHandler); + redraw(session, true, containerElem); + } + } + + await run($("#container")[0], $("#sessionPane")[0]); + + $("#container").focus(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + $("#setup").show(); + + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + + function getDefaultBackgroundPicture() { + return "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"; + } + language: typescript +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.

    +

    Note: Focus must be on the task pane to move the shapes.

    +
    + +
    +

    Select Background Image

    +

    + +

    +
    +
    +
    +
    +
    + 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; + } + + div.container { + position: absolute; + margin: 0; + padding: 0; + top: 0; + left: 0; + height: 100%; + margin-left: 20px; + margin-right: 20px; + } + + div.sessionPane { + display: block; + position: relative; + margin: 0; + padding: 0; + border: none; + width: 100%; + height: 100%; + } + + div.sessionPane div.consolePane { + position: relative; + display: block; + margin: 0; + padding: 0; + width: 100%; + } + + div.consolePane div.previewText { + position: relative; + display: block; + margin: 0; + padding: 0; + font-size: 20pt; + } + + div.consolePane div.sessionRowsCleared { + position: relative; + display: block; + margin: 0; + padding: 0; + font-size: 20pt; + } + + div.consolePane div.preview { + position: relative; + display: block; + margin: 0; + padding: 0; + width: 120px; /* 4 cols * 30px */ + height: 120px; /* 4 rows * 30px */ + background-color: gray; + } + + div.consolePane div.usage { + position: relative; + display: block; + margin: 0; + padding: 0; + } + + div.consolePane div.usage th, + div.consolePane div.usage td { + text-align: left; + } + + div.consolePane div.usage td { + padding-left: 1em; + } + + div.sessionPane { + position: relative; + display: block; + margin-top: 20px; + padding: 0; + width: 300px; /* 10 cols * 30px */ + height: 600px; /* 20 rows * 30px */ + } + + div.sessionPane div.board { + position: relative; + display: block; + margin: 0; + padding: 0; + border: none; + width: 100%; + height: 100%; + } + + div.block { + position: absolute; + width: 29px; + height: 29px; + border: 1px solid black; + } + + div.block.habitated { + border: 1px solid black; + } + 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 + + @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 + + https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js \ No newline at end of file diff --git a/view/excel.json b/view/excel.json index 3a8de56df..e0bde5adf 100644 --- a/view/excel.json +++ b/view/excel.json @@ -70,6 +70,7 @@ "excel-worksheet-visibility": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-visibility.yaml", "excel-range-copyfrom": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-copyfrom.yaml", "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-areas.yaml", + "excel-just-for-fun-tetrominos": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/tetrominos.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/multiple-property-set.yaml", "excel-scenarios-working-with-dates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/working-with-dates.yaml", From e03d5be7426ba0b769423b4c6a8081235db5e56d Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Mon, 3 Dec 2018 12:58:02 -0800 Subject: [PATCH 106/660] Fix broken HTML --- samples/excel/26-document/get-file-in-slices-async.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 0dd67a6b0..0da0064eb 100644 --- a/samples/excel/26-document/get-file-in-slices-async.yaml +++ b/samples/excel/26-document/get-file-in-slices-async.yaml @@ -184,7 +184,7 @@ template: Create workbook from string
    -
    language: html style: content: | @@ -221,4 +221,4 @@ libraries: |- jquery@3.1.1 @types/jquery@3.3.1 - 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 From a703978d864807810bf7620ab427c0a49f3b40e7 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 5 Dec 2018 10:15:08 -0800 Subject: [PATCH 107/660] [Excel] (performance) Snippet showing untrack and screen update (#238) * Adding perf snippet - tracking and screen painting * Running npm start * Fix var --- playlists/excel.yaml | 9 ++ samples/excel/10-chart/chart-formatting.yaml | 8 +- .../performance-optimization.yaml | 128 ++++++++++++++++++ .../excel/85-preview-apis/range-areas.yaml | 2 +- samples/excel/85-preview-apis/tetrominos.yaml | 4 +- view/excel.json | 1 + 6 files changed, 144 insertions(+), 8 deletions(-) create mode 100644 samples/excel/85-preview-apis/performance-optimization.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index ef6d8dfc9..a033a5fc2 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -638,6 +638,15 @@ group: Preview APIs api_set: ExcelAPI: 1.8 +- 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////samples/excel/85-preview-apis/performance-optimization.yaml + group: Preview APIs + api_set: + ExcelApi: 1.9 - id: excel-range-areas name: RangeAreas (discontiguous ranges) fileName: range-areas.yaml diff --git a/samples/excel/10-chart/chart-formatting.yaml b/samples/excel/10-chart/chart-formatting.yaml index 68cc810fe..c760d2631 100644 --- a/samples/excel/10-chart/chart-formatting.yaml +++ b/samples/excel/10-chart/chart-formatting.yaml @@ -267,15 +267,13 @@ template:

    Try it out

    -

    +

    -

    +

    +

    diff --git a/samples/excel/85-preview-apis/performance-optimization.yaml b/samples/excel/85-preview-apis/performance-optimization.yaml new file mode 100644 index 000000000..7daabddf5 --- /dev/null +++ b/samples/excel/85-preview-apis/performance-optimization.yaml @@ -0,0 +1,128 @@ +order: 2 +id: excel-performance-optimization +name: Performance optimization +description: Optimizes performance by untracking ranges and turning off screen painting. +host: EXCEL +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)); + + 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) { + 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(); + } + } + } + + await context.sync(); + + console.log(`Ending. Adding ${rowCount * columnCount} cells took ${Date.now() - startTime} milliseconds`); + }); + } + + function toggleScreenPainting() { + pauseScreenPainting = !pauseScreenPainting; + console.log(`pauseScreenPainting is ${pauseScreenPainting}`); + } + + function toggleTracking() { + untrack = !untrack; + console.log(`untrack is ${untrack}`); + } + + async function setup() { + await Excel.run(async (context) => { + const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + sheet.activate(); + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |- +

    +

    This sample shows some performance optimizations.

    +
    + +
    +

    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/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 + + @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/samples/excel/85-preview-apis/range-areas.yaml b/samples/excel/85-preview-apis/range-areas.yaml index edc71bd1e..a6b22275c 100644 --- a/samples/excel/85-preview-apis/range-areas.yaml +++ b/samples/excel/85-preview-apis/range-areas.yaml @@ -1,4 +1,4 @@ -order: 2 +order: 3 id: excel-range-areas name: RangeAreas (discontiguous ranges) description: 'Creates and uses RangeAreas, which are sets of ranges that need not be contiguous.' diff --git a/samples/excel/85-preview-apis/tetrominos.yaml b/samples/excel/85-preview-apis/tetrominos.yaml index 60c67618f..c29695d4d 100644 --- a/samples/excel/85-preview-apis/tetrominos.yaml +++ b/samples/excel/85-preview-apis/tetrominos.yaml @@ -1,4 +1,4 @@ -order: 3 +order: 4 id: excel-just-for-fun-tetrominos name: Tetromino stacking description: Arrange moving tetromino shapes to form lines. @@ -12,7 +12,7 @@ script: $("#setup").hide(); tryCatch(run) }); - + $("#selectedFile").change(() => tryCatch(readImageFromFile)); let backgroundPicture = getDefaultBackgroundPicture(); diff --git a/view/excel.json b/view/excel.json index e0bde5adf..49b1e2aa7 100644 --- a/view/excel.json +++ b/view/excel.json @@ -69,6 +69,7 @@ "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-visibility.yaml", "excel-range-copyfrom": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-copyfrom.yaml", + "excel-performance-optimization": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/performance-optimization.yaml", "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-areas.yaml", "excel-just-for-fun-tetrominos": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/tetrominos.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/report-generation.yaml", From 168fe5c2f1e09a50725980c00d3a65cc64dfc6cb Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 5 Dec 2018 15:09:08 -0800 Subject: [PATCH 108/660] [Word] (Range) Point snippet at correct method (#239) * Pointing snippet at correct method * Fix spacing --- .../get-paragraph-on-insertion-point.yaml | 17 ++++++++-------- snippet-extractor-metadata/word.xlsx | Bin 12632 -> 12587 bytes snippet-extractor-output/snippets.yaml | 19 +++++++++--------- 3 files changed, 19 insertions(+), 17 deletions(-) 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 5c0b81af7..13d0efbff 100644 --- a/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml +++ b/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -26,20 +26,21 @@ script: async function getSentences() { 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*/); + // 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("End")).getTextRanges(["."], false /* Don't trim spaces*/); + let sentencesToTheEndOfParagraph = sentences.items[0].getRange().expandTo( + context.document.getSelection().paragraphs.getFirst().getRange("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); } diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index a51cc0fd403979e2f5137a886b8f4f8e65dca46f..090374ac58789172b31c29067be09de48cf14a19 100644 GIT binary patch delta 3650 zcmZ8kbx_m`+g&=OT$FCug(a6I1?duy6jnmILzh~R@+Zw*>16>0B`#gk2!eo!^rb;W zy1S$oc<+6`Z@xS8J%2raob${xb7sz*^TWQ(zKVbhpi${HEh7YhMo2&)S`Y~I(o-w| z<>O(GLV1Y3eC}CpVuZ?s)4j^ByM2wM^B=6qW6uv~_%}YI4%H z|5&G{LCjR^gu0?@xc2#Tb z;kKy-hesd&JV$1*aG1kxvE_K)G=PxzJbQ$^ZgN=YZtR)1WYEf5-o=GZDt>RcnZe^- zb~yqkm~2{u6!XmuR8%7nUQK926jy4?8HGeD9EABZiJrX`&(AT!t8{D#6>aX$+ zBW*Zl22jx>XP%?tMVI;qR>8(y!a&81^?1`SYUbT;6xg1thV|hY&lHL4)+lzDm2sPJ z1I!jV4)>?7U=Fh2OVxK{`SC#p%^l2SU&Ga)+o=u4!l>GP<^ehhD>K)v=vP#<_eT=bJMN<}Te1=^AIt)V!s_0J4Z!i;j;Yf#~6h zXG@mh%$+dX4ZUZ0ZoLHqac*u-drQ9=Q8D%Awwe79DC4WR2r^nQYRy z^exfLNvsdxDOnsk8Y$C<82E1$@|@v&`F>;g~&C-y2z4?7+RTg;}t zjcDvH-tWa?ghezUrzaw2r!3iS=XX$xkj*Y|{4F3T;kkvw!>~j@-W~x15b4i9j^rIW zXj$%veRpi`TYWH7@e5eTcJX9*E@#&7YsriW%*~ZgZEp@bOSmjvI^ew}Eb;4e^ScNp zJ7(OIqw7AaS|>K*$^f7UI&8xXR0g%lqmK@7>klg)JdA8g$jYWw4Z$wBoVyc34SJL1 zfsZx@@IFjQ*XGkN9~&PIEfUaqr%X=M-xB`l3#CJgPzG9=DpT9+>K?x5#L;dUjXrRD z62r<{VI&>(`PPj$qtCMS&F%I4y!}P~)~fF2&bi`)^^^Uj3&sx$9QmCRJ$YHt{j(ke zW%t&UBGKDJ`4c89wuGY#FI=3;GYp#L?N+ilDF+!IB^m3NlCBLy>@j>pP1wF!0A z5^0bGAmKVy>eUb?$s#%*{%NW9qzOuB|Je1)U%}zxIx`-bH&TT*Gp8RfF6%!5fXJt3 z$L+0e5|fs;LsPvZfcb|fEZVcF@nc-T<}&t3mtwodH;)9UthI{ZjU^@cTx?qZ(n znr_{--5#Sp`^oJh-8ATgExBq>sq;yJN*!J->Gs|qh79%*xTe4xWjCw+wn!~JDkxIkbNv~q> zzOxtC2(SEBkMFmdn>e=l%6r2~w*y49Y%6Jmhn=|CE&uQJby|%zfp0%-3oN_p@De`) zEMrsiPsk65jY*A?T!T=SnwF~G^-f_b2A&y^Ib%_fDGbM3J&~~huV_Yo zBKpN?N83W8V48WI%KHio#0nRqTvSC4;K+`@URz%wwOln4NmQczqqm#u$2cpX|By!MSaJE80E0W^~3%#7Y*>_A};`=+(?UkL4 zU{8%iK#yOrj(f6sGJ!!r(S$X_YoX#b3i1Op89_c0GG7{M!A0V% zuYP;#IpkP8p3^ht;}JK6vKcnF|MMk+21>f$`M1oOUUZ~Twqo)N(qBvLWh$6nU1Vu3 zA1Oxt(Wt{JlO$7+SY~Hf0jw&;LnG0o9th(W!>p>IZ`T~z1SF~`VmML<;lpa;(~&}N z1b}m^#ziL?iZBHCoRm~+QK7t#4#x#b`yzu~h(AU&eFxG3HkTfRp2+|19&fDi{Qx!R2E{o8tuc$jG(u%=)EiTLmYYg>sF#L0n? zVoys2en?^mmXB-_xFJ@j3;kTys`|$}rUvJ%x1ljn$pULnSxY3%eRF!NMzsR=L3{qaTqgQsrZSVA(iOec07W*%R^;# z1tEG7l=WC>*Il}L@BpgdlE+t`nC7guCjSDnM;`Mi_F5Qr?GNxw{h&y@F%N?%-c^3Y!aAeGPn2>`8*o6<(}EBzgTrcYDf;3I~NWcMOy{;G9!Or#B5WW zRiBqx3n#fObSRJ|Snyc3z;0|&k~A@8Q$!U3ajej6Lr!@A>52>0S2ZQwtUqbv>ls&# zaaCQGf+f)k<+$1KTQqKvMjdhbeXsPk_+e_0wouLT+L~;}(vvF%k!k&Q_NgJ@vS%-K zlgl{7y{%SDJj;yR&0|i=OQ?f!S5o(|vA-*GdJB=*;#QRrw0t+d)x5gw$I+cLc~_3XM^i;+7&3OPHX))Mg%!m&&<+hYQfoy@Rn$Z7 zCn!1QE^CgM5qE_3v+scq7dVvoj?ol&xZi#%gmZ|RK2;*{U~6F*P6<^xW7Iw;gf=%vIVj@5f27!?k4u7YHT;8Rrgb;ROCAO%Y{ZQf`c$>-^`T7r#g2S<*^p?~|E0hClgyg(uv@P$k|0)<`qT^u(y5 z=3TqWEiYF;>e8K&eYDxoq?j8VQBx*XWZqqug`qY(m)*lKe9*C^BzTiK1g2N$hq!XB z&6-7FPpJb#&VeOiK5Zrg+}y#kQL$j>LPu@quZ*8lHa|3a6sI%0B!4D47tb_Q&gm>@wj zwp+}QaGV><$pgcx!UYNJvCrZBtpC-N00eUXy9?g^m;U!giTwyyBuK>W!4(Mfu)^X{ KQcsb80RI8HuFwns delta 3688 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 { - // 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*/); + // 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("End")).getTextRanges(["."], false /* Don't trim spaces*/); + let sentencesToTheEndOfParagraph = sentences.items[0].getRange().expandTo( + context.document.getSelection().paragraphs.getFirst().getRange("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); } From 75e0004350bf2d57aa40eb4341fa0ce3a56d6e6c Mon Sep 17 00:00:00 2001 From: Alex Jerabek Date: Wed, 12 Dec 2018 15:24:28 -0800 Subject: [PATCH 109/660] Adding RemoveDuplicate snippet --- playlists/excel.yaml | 11 +- .../excel/85-preview-apis/range-copyfrom.yaml | 2 +- .../range-remove-duplicates.yaml | 134 ++++++++++++++++++ samples/excel/85-preview-apis/tetrominos.yaml | 2 +- view/excel.json | 1 + 5 files changed, 147 insertions(+), 3 deletions(-) create mode 100644 samples/excel/85-preview-apis/range-remove-duplicates.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index a033a5fc2..3ff062c38 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -637,7 +637,7 @@ https://raw.githubusercontent.com////samples/excel/85-preview-apis/range-copyfrom.yaml group: Preview APIs api_set: - ExcelAPI: 1.8 + ExcelAPI: 1.9 - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml @@ -658,6 +658,15 @@ group: Preview APIs api_set: ExcelApi: 1.9 +- 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////samples/excel/85-preview-apis/range-remove-duplicates.yaml + group: Preview APIs + api_set: + ExcelAPI: 1.9 - id: excel-just-for-fun-tetrominos name: Tetromino stacking fileName: tetrominos.yaml diff --git a/samples/excel/85-preview-apis/range-copyfrom.yaml b/samples/excel/85-preview-apis/range-copyfrom.yaml index 14abd6cd4..f93f9a05f 100644 --- a/samples/excel/85-preview-apis/range-copyfrom.yaml +++ b/samples/excel/85-preview-apis/range-copyfrom.yaml @@ -4,7 +4,7 @@ name: Copy and paste ranges description: Copies data and formatting from one range to another. host: EXCEL api_set: - ExcelAPI: 1.8 + ExcelAPI: 1.9 script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/85-preview-apis/range-remove-duplicates.yaml b/samples/excel/85-preview-apis/range-remove-duplicates.yaml new file mode 100644 index 000000000..8b67f4e71 --- /dev/null +++ b/samples/excel/85-preview-apis/range-remove-duplicates.yaml @@ -0,0 +1,134 @@ +order: 4 +id: excel-range-remove-duplicates +name: Remove duplicates +description: Removes duplicate entries from a range. +host: EXCEL +api_set: + ExcelAPI: 1.9 +script: + content: | + $("#setup").click(() => tryCatch(setup)); + + $("#delete-name").click(() => tryCatch(deleteName)); + $("#delete-distributor").click(() => tryCatch(deleteDistributor)); + + async function deleteName() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B2:D11"); + + const deleteResult = range.removeDuplicates([0],false); + 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."); + }); + } + + async function deleteDistributor() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B2:D11"); + + const deleteResult = range.removeDuplicates([1], false); + deleteResult.load(); + await context.sync(); + + console.log(deleteResult.removed + " entries with duplicate distributors removed."); + console.log(deleteResult.uniqueRemaining + " entries with unique distributors remain in the range."); + }); + } + + async function setup() { + await Excel.run(async (context) => { + const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + + const data = [ + ["Product Name", "Distributor", "Order Amount"], + ["Onions", "Contoso Produce", 3], + ["Potatoes", "Contoso Produce", 9], + ["Red Wine", "Coho Vineyard", 7], + ["Onions", "Best For You Organics Company", 8], + ["Arugula", "Best For You Organics Company", 7], + ["Potatoes", "Contoso Produce", 12], + ["Red Wine", "Coho Vineyard", 3], + ["Onions", "Contoso Produce", 9], + ["Arugula", "Best For You Organics Company", 4] + ]; + + const range = sheet.getRange("B2:D11"); + range.values = data; + range.format.autofitColumns(); + + const header = range.getRow(0); + 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) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: | +
    +

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

    +
    + +
    +

    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 + + @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/samples/excel/85-preview-apis/tetrominos.yaml b/samples/excel/85-preview-apis/tetrominos.yaml index c29695d4d..6b7d0bedf 100644 --- a/samples/excel/85-preview-apis/tetrominos.yaml +++ b/samples/excel/85-preview-apis/tetrominos.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 5 id: excel-just-for-fun-tetrominos name: Tetromino stacking description: Arrange moving tetromino shapes to form lines. diff --git a/view/excel.json b/view/excel.json index 49b1e2aa7..893eb265f 100644 --- a/view/excel.json +++ b/view/excel.json @@ -71,6 +71,7 @@ "excel-range-copyfrom": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-copyfrom.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/performance-optimization.yaml", "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-areas.yaml", + "excel-range-remove-duplicates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-remove-duplicates.yaml", "excel-just-for-fun-tetrominos": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/tetrominos.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/multiple-property-set.yaml", From c6e04647df168696bd76f3765a9dc50d4b864ae7 Mon Sep 17 00:00:00 2001 From: Alex Jerabek Date: Wed, 12 Dec 2018 16:36:08 -0800 Subject: [PATCH 110/660] Flipping includesHeader argument --- samples/excel/85-preview-apis/range-remove-duplicates.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/excel/85-preview-apis/range-remove-duplicates.yaml b/samples/excel/85-preview-apis/range-remove-duplicates.yaml index 8b67f4e71..edfc4b366 100644 --- a/samples/excel/85-preview-apis/range-remove-duplicates.yaml +++ b/samples/excel/85-preview-apis/range-remove-duplicates.yaml @@ -17,7 +17,7 @@ script: const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B2:D11"); - const deleteResult = range.removeDuplicates([0],false); + const deleteResult = range.removeDuplicates([0],true); deleteResult.load(); await context.sync(); @@ -31,7 +31,7 @@ script: const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B2:D11"); - const deleteResult = range.removeDuplicates([1], false); + const deleteResult = range.removeDuplicates([1], true); deleteResult.load(); await context.sync(); From 2d6ffa73fb36664cb75006fef3380ea2571374e8 Mon Sep 17 00:00:00 2001 From: Alex Jerabek Date: Wed, 12 Dec 2018 16:40:43 -0800 Subject: [PATCH 111/660] Fixing in-pane description --- samples/excel/85-preview-apis/range-remove-duplicates.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/excel/85-preview-apis/range-remove-duplicates.yaml b/samples/excel/85-preview-apis/range-remove-duplicates.yaml index edfc4b366..7c1dcccfc 100644 --- a/samples/excel/85-preview-apis/range-remove-duplicates.yaml +++ b/samples/excel/85-preview-apis/range-remove-duplicates.yaml @@ -84,7 +84,7 @@ script: template: content: |
    -

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

    +

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

    From f07fa252f67f9108f766d9048a72b60d13d0cd03 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 13 Dec 2018 14:54:15 -0800 Subject: [PATCH 112/660] [excel] (Range) Remove duplicates preview snippet (#240) * Adding RemoveDuplicate snippet * Flipping includesHeader argument * Fixing in-pane description --- playlists/excel.yaml | 11 +- .../excel/85-preview-apis/range-copyfrom.yaml | 2 +- .../range-remove-duplicates.yaml | 134 ++++++++++++++++++ samples/excel/85-preview-apis/tetrominos.yaml | 2 +- view/excel.json | 1 + 5 files changed, 147 insertions(+), 3 deletions(-) create mode 100644 samples/excel/85-preview-apis/range-remove-duplicates.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index a033a5fc2..3ff062c38 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -637,7 +637,7 @@ https://raw.githubusercontent.com////samples/excel/85-preview-apis/range-copyfrom.yaml group: Preview APIs api_set: - ExcelAPI: 1.8 + ExcelAPI: 1.9 - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml @@ -658,6 +658,15 @@ group: Preview APIs api_set: ExcelApi: 1.9 +- 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////samples/excel/85-preview-apis/range-remove-duplicates.yaml + group: Preview APIs + api_set: + ExcelAPI: 1.9 - id: excel-just-for-fun-tetrominos name: Tetromino stacking fileName: tetrominos.yaml diff --git a/samples/excel/85-preview-apis/range-copyfrom.yaml b/samples/excel/85-preview-apis/range-copyfrom.yaml index 14abd6cd4..f93f9a05f 100644 --- a/samples/excel/85-preview-apis/range-copyfrom.yaml +++ b/samples/excel/85-preview-apis/range-copyfrom.yaml @@ -4,7 +4,7 @@ name: Copy and paste ranges description: Copies data and formatting from one range to another. host: EXCEL api_set: - ExcelAPI: 1.8 + ExcelAPI: 1.9 script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/85-preview-apis/range-remove-duplicates.yaml b/samples/excel/85-preview-apis/range-remove-duplicates.yaml new file mode 100644 index 000000000..7c1dcccfc --- /dev/null +++ b/samples/excel/85-preview-apis/range-remove-duplicates.yaml @@ -0,0 +1,134 @@ +order: 4 +id: excel-range-remove-duplicates +name: Remove duplicates +description: Removes duplicate entries from a range. +host: EXCEL +api_set: + ExcelAPI: 1.9 +script: + content: | + $("#setup").click(() => tryCatch(setup)); + + $("#delete-name").click(() => tryCatch(deleteName)); + $("#delete-distributor").click(() => tryCatch(deleteDistributor)); + + async function deleteName() { + 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."); + }); + } + + async function deleteDistributor() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B2:D11"); + + const deleteResult = range.removeDuplicates([1], true); + deleteResult.load(); + await context.sync(); + + console.log(deleteResult.removed + " entries with duplicate distributors removed."); + console.log(deleteResult.uniqueRemaining + " entries with unique distributors remain in the range."); + }); + } + + async function setup() { + await Excel.run(async (context) => { + const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + + const data = [ + ["Product Name", "Distributor", "Order Amount"], + ["Onions", "Contoso Produce", 3], + ["Potatoes", "Contoso Produce", 9], + ["Red Wine", "Coho Vineyard", 7], + ["Onions", "Best For You Organics Company", 8], + ["Arugula", "Best For You Organics Company", 7], + ["Potatoes", "Contoso Produce", 12], + ["Red Wine", "Coho Vineyard", 3], + ["Onions", "Contoso Produce", 9], + ["Arugula", "Best For You Organics Company", 4] + ]; + + const range = sheet.getRange("B2:D11"); + range.values = data; + range.format.autofitColumns(); + + const header = range.getRow(0); + 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) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: | +
    +

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

    +
    + +
    +

    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 + + @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/samples/excel/85-preview-apis/tetrominos.yaml b/samples/excel/85-preview-apis/tetrominos.yaml index c29695d4d..6b7d0bedf 100644 --- a/samples/excel/85-preview-apis/tetrominos.yaml +++ b/samples/excel/85-preview-apis/tetrominos.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 5 id: excel-just-for-fun-tetrominos name: Tetromino stacking description: Arrange moving tetromino shapes to form lines. diff --git a/view/excel.json b/view/excel.json index 49b1e2aa7..893eb265f 100644 --- a/view/excel.json +++ b/view/excel.json @@ -71,6 +71,7 @@ "excel-range-copyfrom": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-copyfrom.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/performance-optimization.yaml", "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-areas.yaml", + "excel-range-remove-duplicates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-remove-duplicates.yaml", "excel-just-for-fun-tetrominos": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/tetrominos.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/multiple-property-set.yaml", From 3f736b4e9a90daff1f2c0cc48308793f0ffd5845 Mon Sep 17 00:00:00 2001 From: Alex Jerabek Date: Fri, 21 Dec 2018 11:14:14 -0800 Subject: [PATCH 113/660] Cleaning up chart formatting snippet --- .../excel/10-chart/chart-axis-formatting.yaml | 8 +- samples/excel/10-chart/chart-formatting.yaml | 293 +++++++----------- 2 files changed, 106 insertions(+), 195 deletions(-) diff --git a/samples/excel/10-chart/chart-axis-formatting.yaml b/samples/excel/10-chart/chart-axis-formatting.yaml index c8a07073f..391b91fbc 100644 --- a/samples/excel/10-chart/chart-axis-formatting.yaml +++ b/samples/excel/10-chart/chart-axis-formatting.yaml @@ -68,11 +68,6 @@ script: ["Spokes", 6005, 7634, 4589, 8765] ]); - if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } - createChart(context); displayUnit(context); sheet.activate(); @@ -85,7 +80,7 @@ script: let sheet = context.workbook.worksheets.getItem("Sample"); let salesTable = sheet.tables.getItem("SalesTable"); - let dataRange = sheet.getRange("A1:B7"); + let dataRange = sheet.getRange("A1:E7"); let chart = sheet.charts.add("Line", dataRange, "Auto"); chart.setPosition("A15", "I30"); @@ -119,7 +114,6 @@ script: OfficeHelpers.Utilities.log(error); } } - language: typescript template: content: |- diff --git a/samples/excel/10-chart/chart-formatting.yaml b/samples/excel/10-chart/chart-formatting.yaml index c760d2631..8250b2ad9 100644 --- a/samples/excel/10-chart/chart-formatting.yaml +++ b/samples/excel/10-chart/chart-formatting.yaml @@ -6,34 +6,13 @@ host: EXCEL api_set: ExcelAPI: 1.8 script: - content: | - $("#addSampleData").click(() => tryCatch(addSampleData)); - $("#create-chart").click(() => tryCatch(createChart)); + content: |+ + $("#setup").click(() => tryCatch(setup)); $("#format-chart").click(() => tryCatch(formatChart)); $("#show-datalabels").click(() => tryCatch(dataLabels)); $("#change-color").click(() => tryCatch(changeColor)); $("#clear").click(() => tryCatch(clearChart)); - async function createChart() { - await Excel.run(async (context) => { - const worksheet = context.workbook.worksheets.getActiveWorksheet(); - const chart = worksheet.charts.add(Excel.ChartType.lineMarkers, worksheet.getRange("B6:G15"), Excel.ChartSeriesBy.rows); - chart.axes.categoryAxis.setCategoryNames(worksheet.getRange("C5:G5")); - chart.name = "SlopeChart"; - - // place chart below sample data - chart.top = 275; - chart.left = 50; - chart.height = 600; - chart.width = 850; - - chart.title.text = "GDP Per Capita , 1980 to 2017"; - chart.legend.position = "Bottom"; - - await context.sync(); - }); - } - async function formatChart() { await Excel.run(async (context) => { const worksheet = context.workbook.worksheets.getActiveWorksheet(); @@ -44,7 +23,7 @@ script: chart.plotArea.left = 80; chart.title.format.font.size = 14.4; - chart.title.text = "GDP PER CAPITA , 1980 TO 2017" + chart.title.text = "Contoso Bike Parts - 2018"; chart.title.format.font.name = "Times New Roman"; chart.title.format.font.color = "#D9D9D9"; @@ -65,8 +44,8 @@ script: const chart = worksheet.charts.getItem("SlopeChart"); chart.series.load("count"); await context.sync(); - var pointsLoaded = -1; - for (var i = 0; i < chart.series.count; i++){ + let pointsLoaded = -1; + for (let i = 0; i < chart.series.count; i++) { const series = chart.series.getItemAt(i); series.hasDataLabels = true; series.markerSize = 20; @@ -87,7 +66,7 @@ script: series.points.getItemAt(j).markerForegroundColor = "#404040"; } - series.points.getItemAt(4).dataLabel.showSeriesName = true; + series.points.getItemAt(3).dataLabel.showSeriesName = true; } chart.dataLabels.position = "Center"; @@ -99,51 +78,24 @@ script: async function changeColor() { await Excel.run(async (context) => { - const worksheet = context.workbook.worksheets.getActiveWorksheet(); const chart = worksheet.charts.getItem("SlopeChart"); - const increase = worksheet.getRange("I6:I15"); - const increaseRate = worksheet.getRange("J6:J15"); - increase.load("values"); - increaseRate.load("values"); chart.series.load("count"); await context.sync(); - // find the countries with the highest GDP and the fasting GDP growth - var max = increase.values[0][0]; - var maxIndex = 0; - var fast = increaseRate.values[0][0]; - var fastIndex = 0; - - for (var i = 1; i < 10; i++){ - if (increase.values[i][0] > max) { - max = increase.values[i][0]; - maxIndex = i; - } - if (increaseRate.values[i][0] > fast) { - fast = increaseRate.values[i][0]; - fastIndex = i; - } - } - - // color everything grey before highlighting results - for (var i = 0; i < chart.series.count; i++){ + // color everything grey before highlighting spokes + for (var i = 0; i < chart.series.count; i++) { chart.series.getItemAt(i).format.line.color = "#636363"; chart.series.getItemAt(i).dataLabels.format.font.color = "#636363"; } - const maxSeries = chart.series.getItemAt(maxIndex); - maxSeries.format.line.color = "#4472C4"; - maxSeries.dataLabels.format.font.color = "#D9D9D9"; - const fastSeries = chart.series.getItemAt(fastIndex); - fastSeries.format.line.color = "#75AB3B"; - fastSeries.dataLabels.format.font.color = "#D9D9D9"; + const highlight = chart.series.getItemAt(5); + highlight.format.line.color = "#4472C4"; + highlight.dataLabels.format.font.color = "#D9D9D9"; - maxSeries.load("name"); - fastSeries.load("name"); + highlight.load("name"); await context.sync(); - maxSeries.name += " (Greatest Growth)"; - fastSeries.name += " (Greatest Relative Growth)"; + highlight.name += " (Focus)"; await context.sync(); }); } @@ -153,7 +105,7 @@ script: const charts = context.workbook.worksheets.getActiveWorksheet().charts; charts.load("count"); await context.sync(); - + for (var i = 0; i < charts.count; i++) { charts.getItemAt(0).delete(); } @@ -161,149 +113,114 @@ script: }); } - async function addSampleData() { + async function setup() { await Excel.run(async (context) => { - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - const sheet = context.workbook.worksheets.getItem("Sample"); - sheet.getRange("B5:G5").values = [["Country", "1980", "1990", "2000", "2010", "2017"]]; - const range = sheet.getRange("B6:G15"); - range.values = [ - ["Luxembourg", 17739, 33204, 49183, 106185, 107708], - ["Switzerland", 18870, 38666, 38007, 74908, 80837], - ["Norway", 15748, 28189, 38067, 87309, 73615], - ["Iceland", 15033, 25581, 31571, 41623, 73092], - ["Ireland", 6250, 13642, 26154, 48674, 68604], - ["Qatar", 31999, 15446, 29914, 72953, 50812], - ["United States", 12576, 23914, 36433, 48310, 59495], - ["Denmark", 13889, 26922, 30804, 58177, 56335], - ["Australia", 11018, 18866, 20860, 56360, 56135], - ["Singapore", 5004, 12766, 23793, 46569, 53880] - ]; - range.format.autofitColumns(); - - const range3 = sheet.getRange("I5:J5"); - range3.values = [["Increase", "% Increase"]]; - - const increaseRange = sheet.getRange("I6:I15"); - let data = []; - for (let i = 6; i < 16; i++) { - let item = []; - item.push("=G" + i.toString() + "-D" + i.toString()); - data.push(item); - } - increaseRange.formulas = data; - increaseRange.format.autofitColumns(); - - const increasePerRange = sheet.getRange("J6:J15"); - let data2 = []; - for (let i = 6; i < 16; i++) { - let item = []; - item.push("=G" + i.toString() + "/D" + i.toString()); - data2.push(item); - } - increasePerRange.formulas = data2; - increasePerRange.format.autofitColumns(); - - let formatnumber = []; - const formatnumberitem = ["###,0"]; - for (let i = 6; i < 16; i++) { - formatnumber.push(formatnumberitem); - } - sheet.getRange("C6:C15").numberFormat = formatnumber; - sheet.getRange("D6:D15").numberFormat = formatnumber; - sheet.getRange("E6:E15").numberFormat = formatnumber; - sheet.getRange("F6:F15").numberFormat = formatnumber; - sheet.getRange("G6:G15").numberFormat = formatnumber; - sheet.getRange("I6:I15").numberFormat = formatnumber; - - let formatnumber2 = []; - const formatnumberitem2 = ["#%"]; - for (let i = 6; i < 16; i++) { - formatnumber2.push(formatnumberitem2); - } - sheet.getRange("J6:J15").numberFormat = formatnumber2; - - sheet.getRange("B5:J5").format.font.bold = true; - sheet.getRange("B6:B15").format.font.bold = true; - - if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } + let sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + let salesTable = sheet.tables.add("A1:E1", true); + salesTable.name = "SalesTable"; + + salesTable.getHeaderRowRange().values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4"]]; + + salesTable.rows.add(null, [ + ["Frames", 5000, 7000, 6544, 5377], + ["Saddles", 400, 323, 276, 1451], + ["Brake levers", 9000, 8766, 8456, 9812], + ["Chains", 1550, 1088, 692, 2553], + ["Mirrors", 225, 600, 923, 344], + ["Spokes", 6005, 7634, 4589, 8765] + ]); + + createChart(context); sheet.activate(); - sheet.showGridlines = false; - await context.sync(); }); } + async function createChart(context: Excel.RequestContext) { + const worksheet = context.workbook.worksheets.getActiveWorksheet(); + const chart = worksheet.charts.add( + Excel.ChartType.lineMarkers, + worksheet.getRange("A1:E7"), + Excel.ChartSeriesBy.rows + ); + chart.axes.categoryAxis.setCategoryNames(worksheet.getRange("B1:E1")); + chart.name = "SlopeChart"; + + // place chart below sample data + chart.top = 125; + chart.left = 5; + chart.height = 300; + chart.width = 450; + + chart.title.text = "Bicycle Part Production"; + chart.legend.position = "Bottom"; + + await context.sync(); + } + /** Default helper for invoking an action and handling errors. */ async function tryCatch(callback) { try { await callback(); - } - catch (error) { + } catch (error) { OfficeHelpers.UI.notify(error); OfficeHelpers.Utilities.log(error); } } - language: typescript + language: typescript template: - content: |- -
    -

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

    -
    - -
    -

    Set up

    -

    - -

    - -
    -

    Try it out

    -

    -

    -

    - -

    - language: html + content: |- +
    +

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

    +
    + +
    +

    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 + 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 + 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 + office-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 + 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 + @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 + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file From 835ec43d9ce0e74ee0b6e41f0502c9da6cbe1d10 Mon Sep 17 00:00:00 2001 From: Alex Jerabek Date: Fri, 21 Dec 2018 11:16:27 -0800 Subject: [PATCH 114/660] Running npm start --- .../excel/10-chart/chart-axis-formatting.yaml | 2 +- samples/excel/10-chart/chart-formatting.yaml | 104 +++++++++--------- 2 files changed, 53 insertions(+), 53 deletions(-) diff --git a/samples/excel/10-chart/chart-axis-formatting.yaml b/samples/excel/10-chart/chart-axis-formatting.yaml index 391b91fbc..367c53394 100644 --- a/samples/excel/10-chart/chart-axis-formatting.yaml +++ b/samples/excel/10-chart/chart-axis-formatting.yaml @@ -6,7 +6,7 @@ host: EXCEL api_set: ExcelAPI: 1.8 script: - content: |+ + content: | $("#setup").click(() => tryCatch(setup)); $("#format-horizontal-axis").click(() => tryCatch(formatHorizontalAxis)); $("#format-vertical-axis").click(() => tryCatch(formatVerticalAxis)); diff --git a/samples/excel/10-chart/chart-formatting.yaml b/samples/excel/10-chart/chart-formatting.yaml index 8250b2ad9..94f114969 100644 --- a/samples/excel/10-chart/chart-formatting.yaml +++ b/samples/excel/10-chart/chart-formatting.yaml @@ -6,7 +6,7 @@ host: EXCEL api_set: ExcelAPI: 1.8 script: - content: |+ + content: | $("#setup").click(() => tryCatch(setup)); $("#format-chart").click(() => tryCatch(formatChart)); $("#show-datalabels").click(() => tryCatch(dataLabels)); @@ -166,61 +166,61 @@ script: OfficeHelpers.Utilities.log(error); } } - language: typescript + language: typescript template: - content: |- -
    -

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

    -
    - -
    -

    Set up

    - -
    - -
    -

    Try it out

    -

    -

    -

    - -

    - language: html + content: |- +
    +

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

    +
    + +
    +

    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 + 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 + 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 + office-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 + 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 + @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 + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file From 88da8f1f5ba1f581959ff1e8e89926a533db9a36 Mon Sep 17 00:00:00 2001 From: Alex Jerabek Date: Fri, 21 Dec 2018 16:02:29 -0800 Subject: [PATCH 115/660] Adding text explaining high console numbers in remove duplicate snippet --- playlists/excel.yaml | 18 +++++++++--------- .../range-remove-duplicates.yaml | 4 ++-- view/excel.json | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 3ff062c38..3d23a80ab 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -658,15 +658,6 @@ group: Preview APIs api_set: ExcelApi: 1.9 -- 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////samples/excel/85-preview-apis/range-remove-duplicates.yaml - group: Preview APIs - api_set: - ExcelAPI: 1.9 - id: excel-just-for-fun-tetrominos name: Tetromino stacking fileName: tetrominos.yaml @@ -676,6 +667,15 @@ group: Preview APIs api_set: ExcelApi: 1.8 +- 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////samples/excel/85-preview-apis/range-remove-duplicates.yaml + group: Preview APIs + api_set: + ExcelAPI: 1.9 - id: excel-scenarios-report-generation name: Report generation fileName: report-generation.yaml diff --git a/samples/excel/85-preview-apis/range-remove-duplicates.yaml b/samples/excel/85-preview-apis/range-remove-duplicates.yaml index 7c1dcccfc..d16645d55 100644 --- a/samples/excel/85-preview-apis/range-remove-duplicates.yaml +++ b/samples/excel/85-preview-apis/range-remove-duplicates.yaml @@ -1,4 +1,3 @@ -order: 4 id: excel-range-remove-duplicates name: Remove duplicates description: Removes duplicate entries from a range. @@ -101,7 +100,8 @@ template:

    +

    +

    Note that blank cells are considered in the remove duplicate checks. Since the duplicates are removed from the entire original range, the numbers logged to the console may be higher than expected.

    language: html style: diff --git a/view/excel.json b/view/excel.json index 893eb265f..2b506cf6c 100644 --- a/view/excel.json +++ b/view/excel.json @@ -71,8 +71,8 @@ "excel-range-copyfrom": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-copyfrom.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/performance-optimization.yaml", "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-areas.yaml", - "excel-range-remove-duplicates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-remove-duplicates.yaml", "excel-just-for-fun-tetrominos": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/tetrominos.yaml", + "excel-range-remove-duplicates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-remove-duplicates.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/multiple-property-set.yaml", "excel-scenarios-working-with-dates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/working-with-dates.yaml", From e7a8c0242ad4173b716a9c6a125c1d97d23947d8 Mon Sep 17 00:00:00 2001 From: Alex Jerabek Date: Wed, 26 Dec 2018 16:57:50 -0800 Subject: [PATCH 116/660] Clarifying scope of areas snippet --- playlists/excel.yaml | 14 +++----------- samples/excel/85-preview-apis/range-areas.yaml | 6 +++--- view/excel.json | 1 - 3 files changed, 6 insertions(+), 15 deletions(-) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index fe84f685d..b3f9fd4b2 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -648,11 +648,12 @@ api_set: ExcelApi: 1.9 - id: excel-range-areas - name: RangeAreas (discontiguous ranges) + 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. + contiguous, through user selection and programmatically getting sets of + special cells. rawUrl: >- https://raw.githubusercontent.com////samples/excel/85-preview-apis/range-areas.yaml group: Preview APIs @@ -676,15 +677,6 @@ group: Preview APIs api_set: ExcelApi: 1.8 -- 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////samples/excel/85-preview-apis/range-remove-duplicates.yaml - group: Preview APIs - api_set: - ExcelAPI: 1.9 - id: excel-scenarios-report-generation name: Report generation fileName: report-generation.yaml diff --git a/samples/excel/85-preview-apis/range-areas.yaml b/samples/excel/85-preview-apis/range-areas.yaml index a6b22275c..8525d86ce 100644 --- a/samples/excel/85-preview-apis/range-areas.yaml +++ b/samples/excel/85-preview-apis/range-areas.yaml @@ -1,7 +1,7 @@ order: 3 id: excel-range-areas -name: RangeAreas (discontiguous ranges) -description: 'Creates and uses RangeAreas, which are sets of ranges that need not be contiguous.' +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 programmatically getting sets of special cells.' host: EXCEL api_set: ExcelApi: 1.9 @@ -126,7 +126,7 @@ script: template: content: |
    -

    This sample shows how to apply actions simultaneously to multiple ranges that may not be contiguous.

    +

    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.

    language: html style: diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index e0d324ddc6d0bd112a35545e1e3b57fc14a7fa58..54b101561cb7ee6e9b83df9cce5e016c6aab40bc 100644 GIT binary patch delta 10529 zcmYj%WmFtZw>9p8!QCOa1Px4Z*WenQ;O^c*f;)qR3GNUG?k>TCyIXJuLa^YM=Xvk< zy|;h#>fXKAK2>#gpQ^R0LNei>GvTY1QIYxhZ8Zo|)KMt_M`tKE=tllZv7pn_bJsiDmDzbj-Ht>U zRuXwdSTM_xpl8~Z0#F{(g znKbTGy=)~zV!L<#6rv#U*n2khi{mU0j(JZLeG67?`Ur?at<{6YPk{Qga>U#5Y)ROIK0 zS}t*5D_I1N7Oidd_zFvvVLhQy4gK~U60T42%h#@Lbg1r;G3sRKqJ|R54D@$Y`|H*N z(=TOY1=^+Dg?qhMmsq!#uNH(>RH;HzBp?%f*}tDGptlKTe;)a^G7JMb{uTq{(fS4} zPP&RbM7oaq_y?^&w({EH2m~%S@jYAeyao9FB)Vs z?Dc`-)qx0oA?#7G=^-UzhT<*rH+XJA7JQ93rUK(S;IxNYLZdI3v1ou5C&OX4K%7JX^w%k>!&i`CgGF zFZjPUW;$$>JM1c#Eh#sD){M2D7z7&5tw9HHfcuNv!|i*wi$;U44>!{vyS!@xT1>>g z8FzlTdAbk_@)d*`wL21X;lz|&js9u9S@=_V)0FW1@SZy8n;-zR2O4oU5ij+Pu6Uju zd)?nX9UZ}*j{o?cd$j}^by^PZ_+7Lw?g37nA38dm(qba!4{i_34{ru_Ct~K5ocFgL z_b8~32M6aK-8ws;uiFEbPQN;&y^nE>e})|&T{)h?Zl5T;Ct}8^H;gydzUP?K#Y|L` z%w2z{gweR>4Gn;6eS2lh*1?^teQNu3_sid0YV=wmM0DsCMxd7?i?SRJAP(= z_j<$ourzmK=L-Dp|2yH960Qr~z0p4GE~wa}#$<`Z?#wKx>k&I}2yoHKw7+;-IofKy z>6&?R5IEQv-w3qJ9B$jP47xv^DS6-LEhsp{_v9hi)kX@8J$=79@9Sf|agp$>(HAwo z5iPp$9y48RyZf6*De>H3@Z?kR6jWmr@DzAk-@d_lp{a3}k2N`Qd_^sDzVM(fb{}BW z&d&98_sH+m|hObhhw*N$%-6W?%cus4p7V(<=YKk=gxK z>q0D-T)~!)FzFSiDAz_~*Mr07duM0Tec%i-{T|Q-Gx-wKtNzIm^ZL`X>BjQ~D?Id5 z`s!n4`osQvE|n+yK?~lId79_j8B?Bi)M5_vVw``l#wzd9!0*0$9|m62-P3tXsy{+J-Ot*0U2h&Op8Mu*R#$GsJ_fVV*AFsdqH=v-}^Uz5ox0U+Du@ZM~p&tv4b6Gn$ zArlsRC!2Lu)Bzk689%6p7JIVdjM_pcFT_Q`m*0*fuqDaw)qY^V7PvNeJ8$tC=c3MH zqIGaF!s=(}Wc-(;SW0DCt9I~H?$%)Niwf`}Qx6kOs|f{@w|SxFy+_EiHWKpyQGr{s ze46k{!5NE-lmIAzw!?j4_?tggkU7dLG?=1LYENj?t4<=SkDz;YkpH~M4=18ya?tXk zHIEl}P0fNN(>26B;{u(PjXK{sGT+XYE}8Xq_9nqAiEBbkAQBl)14km#JorKx;1)z* zOa?K;!NsCUa9n|;^#tHAmZor~f3UAN=^Na22fUM`uhU!0yKI*2Bap|f;uxXqLn}lw z8*D;?k3~a}7eT`vR}oL1#cZg5BegBCGGYuzUw5+Jg9zP0tRbeGh1v=K8phHHskSgV zLguDJqq(AyMtckYQG;t%gT8$XD0UMncOFs2%Z!|&hc6ZJ zgQL^>D%?U+B!D@hv4q?(`a|s(W%DIS8ck@9Vc1Ab2{rtD&lDq;h=$6ChK^zt4s}MhCQTzIl%uH`*B`n(Sw-|0NP|-JOF?=0 zGF>kQJ?AY@<8l4D>Ao6bs|AcBmkqo{wIy3-iTW|9AK&+`x9ZiYfo;ZuIn`dK@f1^N zX(0AH5N;4hge)b8u~N%`tBEp4{L1PMLGSAXHCsfjkv@u>R=%I!4t5vt9wUzNU}GHF zFg0=-E$BulguJ7XGNUgN0M}ok$cKT+X@m_>?GL*dOx>#~7nL!KREy`N^=g@^n`|3h zoy33gx;1$gO~GHvlZYRgl1LBLF;g=YQj*gYUCWlKRHz*dkZldYJFvop;N?-ThlmTM zc&kp;j(*?L^d`zIi6y|Z3`R@apu&^jbeKx*x4ZBt9k1pR&4`Z!8mSV&>SVZ)%O#j} zy$QDl6%_-)BQ_o{gBWAJ-)|10?alvCNtrgLu1u;$G%6s6Q79l+gG%3BaFY{l2LRMO;@!G((IA8tVrR7FYhOE zf12$BUNE{-pnF+IO{|*HZExX^8Pjm8qtJ~a$YnAHN*~Ks1e4hXot+0BtjsD6zItY6a(XWRI((s%--w^%*DIHF(09! znojNnFX^NZ3fs|w!h&a=l=o;Tm#{F3R5f^Fxh>VNn}FySpa{EgI6eo==hev3hlWG6 zTXn7; z9jj(t(eD4o_IX`?o4?kFPw|~2e?l6n)=j^_D33XgMwmi`3x(1QkrSUS>!(?#&7L~J zNLk$10LMsB+UMyb`LYhVoKPQ2Tk0b0lz2L21IQ!P8sb*%5~I))GK(qDn^BNCf1pNH z7!_I>*YZ)~2$`JrCoVkz>SAb?nvyaIDMj9;PgSqG`a2Uq?2eNTQnw6fxF64tG3=tEnN>|2*r-_K|oZ%DyHpx8B2dWyHFtINS!NSFb#7L93sJ*spLx)1=T z@6#X4#CTYYfPT3Swudcku97vwdpZg|$fIq92H7x8u`TL!je8qUl#8kQbqS@S(Be2H zHOasF2oyHXrxGLdr2nr&sH(y^k`k;T$OuJm43%DDI_P#X%)fzs%KQmG;n~)p{s>YjS@Dg@h z$BUNWp(Qvm+Vr2-EYs0+&537O6{ZzJ-3SSuMg^<1a$8hczPI9;@6d1?por1>?4#NYD%ObPqK{76!=IkhZ2$12lW?W1cms}cB`@zifdePpHB({zPWS z`6m;v67j;=wL#sHdnocLFW#Q7Q*A^!><_wSSDM2>mc@dnI$)rvLo+1ajW;eW!jh=t zZ?;6Mmbs>pUi6zEo~OxLtmjht$n{CdkC!q45T5bocGCS5+ z$@W-!r4gRHL>7xDRho0~((@~<#pU&ZUEBMLoyUQqtO;m5PM<(b0y_m~@y;9jP+ zAyJ=s-wSjNY{KSD$;u+*QryNY&sq+7rfU_?`i7Ek-Za_5>EUJ6wDUSECV+~X@;RA3 z2FY$vKQ5KZW9EXiLbw4tovaR@e=zv+RE{EVY!-FB-X1wxre8jU!jQazor#;F~IDBHA5VE+E0>Ux@3yh3>#LiRHCbiK< zl;V}&b8Cm_g$0DL)_5h}tV^@bd5nK=3TyDTG58l|tAQi})NYaNdCfTQl|VB_k|X9q z96id)O7z~S%8?v-d*ie1k{K~Fa~^{H)-vt{B}tFiU2nW&3_lOy+1)9R<)_nEEyZ_2 z)%#n|gBg(VT#o6`U6~=vxQ-?%xi)sTMO9iL%-(82cObwjyeIK{20#`Grhrj0879W#%GORIB`K z<3Fzgs_@Xw5d|k?L16w04VD6YlGUt;+RC~<*DSQ=#%$Ma8ZSg_Tx)NY93*pG7nN8# zQxMPwA7O*fdc*fF+&%~&J~YFSq~EwZk4_Zb4(4Kqu>ECt$vLK>wL$Vb@BN%Q0eFAA zOlw{Uu#uvq3NF}dB%Ry%IZuX~F;yNn0C?PnF;uc1x(1Obx}GMcJN1S3*T+zw;tk+Y9x%Z$qmx(Y$yo-MMxZ`sWo>J(m%^ zWlJ`T&7j`9E)=E6^gN8j1L9nmsD-QDg835N6j!!MD5La}9uT>Y>7X+};$FU(zXFJA zj*#kBmT5hst0}59zk7_KbVQs4Gp>M=)MN9f(k z)3|1=FTP36JTzjU%^ozDX$R3yKsn@|rcfgGryO&}U1L|lw48HM2yCu`Gk{cCLBO0N zz{NiLk<<2s1k(ycm8OPU6y}*+YNF-<=$Y zCU_xWCU@LuNR~l8o=Eywl~%ciM(PuO?zNgs#v42L4Ek|FOEh#?J{9d5O>xPO#ttm4 zSvZ#TzvRa%_VZt=5e~*vfOxTlNf`cKzkk^DE0YIXwNKEiv`KVf0(-p25bMp@0keQ_ z@QnYWpnY#$zmbo5$0ABR_dV_LLSLOvd}4iH_@HA8T4wXWZ%B;QZ@)RebmHWU?H>!= z%q&`^GY8GI4u*5>w$8nI%n z4L72has-fzY8>SCX;rz^uZ?b|T;02|JMk49dP$vC1eqoRI(K!}n--Y5sxrKr;5G=5 z%45NO^ZOeK2lIa9#1b@uRhzMtiIGlLpvcHnV1bwLo_ZOLtkYu03}F6r^L2APIcP`vwH|;**sZ9RsQ4g2 z`?ZG`uLO;#Rpol{&6(OM9Xf0z&wy|O|6ADHByK?3=+ws(WfN-#e(+13TE!~*hJ?3h zh{=F0XyME8w4{{yFRERQgx4;}R6M%pmTd~-c)F7R2mkttupS9-)8Rfeyom)098Z1r zx^#N=Ze9j&`$PkCR4W~Hk)8TyEJ4KVUGsDYLx37Af}vMo&UxRo)A-0Pt4pzIx$(8A zk&Oa}Fom$qp%c6765ivbXpE1BrcpgvX!@f}RTsx~bLl1r+Fim+b+?40ilR_wJ8AheEN zT3DQ|YA9NY1z8_-KWm6$)*c^8R7f&SXP5svnCR2lU6&yq@mof4V7gajU`JRpu8=Ij zYB|#zy}y<>JULm#_^1Gp1@K2p@Ecd;!kYEtjRL4s9Kw)He&6O2E#TW6iy07^9WXE)FR<*SZ3PKl7EXNJgyaX z6R>H`r2|P@@y=5&((R>%?rT!xMPb;((&zn+&>eUnxD6Lti z6FcAL)qn8FqX)idfKD$n%OD3|VVmVg;E(e6)P$iioRA90oqO1Lp`xII%{g%&j-nei z8+E_9%v;V$wPg*A$*fb^qW-lZ+nCGogT;;%SAjf5AFyMaZgmH9!vT0tj$0VVthk)@Q22L9?@dkg8yKV8b6o+*}Mh=*R zlfn_Qh7vw_Bq6=dxy|7{3rntKNu7cx1Il47RY~Hs-1_w?)av7)mw7(xJ^yJw|Gu;;J;3&cm7yT(jHn{to7<$ z*O>tfAGH~r&UAmeSq?}t@z5GJ?y0tV-@goceG%^aeEi|C1Ms*u#5*{C&EM9FMTq1; z*pp21*5i1F4}O0JmE+5MHfjXs!5xHGA32Ixw-ub!6dN5D9o;9(f0X_fZ5Ygw>zj#a zQ7MZeIgoXguv86n^5TSH)qgjkYGCzXwKwzFr*7jbiZzGJ8Ujd8FbTlvB~z~R(?85{ zG#zCK4%dxLB=waH$EHMczzH)%!WlN$RhL*=hq#D@1~2JH&@30segPrL86jW0nWYR# zS!a+2H>2MVlcCNhLXFtA>b+AC*x^ zb~lv7W)tbPR$wj5@?i3-enRF(MECVfO|a|VE2$sjV0o3Y-#(&q4a;5+t~jo(5~=>) zFBQoHrz{|nwl)oi4^jhRg)j|^vqXIio6s+$Ex-rfyzMfXgYYB=I}wn^aBQSAk=akh z;L0(s#T`jtX>}kLjGpl4DQ19SDGs@KIQLY)rnDQ3S*4a28*x{JcG~xrAR6hxK?E!@ z9QWz>Ne%rWExOZ>rBwa$scA8MkS<6Fv}C_PQKXsvaK2Q1-5TqC%gy|pn(uh=T%$$5 z4kM6e&^{sZH(7)wM_R2Y4U^x4Y-axc9Y5n|jm}Y?@9+6gD|aAT>n%)0{#+60gx3xR zj$!G}(GJnC>wOfdARcn%mQmp3hCdx&>KfB(q5E8-mDj`ZTHY$FNda+%?J@CMryZ1< zWdo$2m`;UY(1aqCq}J0s2oX<`*BY{&=0& z2mHLXdgj5Ox4POremYyZvcI=gv`{ri% zdgXY)ug;*;fp}%^ZnyQOb=^TQW==qC>+xkXpy~FC_Nw;I>-^UCcE!9du&vny@E;~g z;AGj@nkn$otp6T=bW1HZ4;3?zrhcaWcf;nEF%kp4zrRrk5fu(DHzk^z0x(!}UJ(ER z)YZ>Dzh|zyg^$Be5f!5QRp1bn3>i4XMW*pA+>_+f3zL0-$5Z)Xo&Ew#@S2ig%+1)& zx%XgpC%_pqRlu!d=PB@XI5zCVpjGT%mS(-fbzy(K;$umvE5ucgXT1|wy>qj_0eIV0 zlEZ(mwcbf}KNfq953Q62hGFC#L>M}!4J<98IaWe7_VhkZx{}Sc8SNrMzJe?*T082+ zY`fz>x}G17eY99^8}Md+@4|-L&Tq?7_e)L#3|#ErGo3zogi!Ymf*BX=x2$fJTT=ht zZ|_am>qm0V#ksI$0l$he%5D{Bm5o^0KHQ{~Y29e%`BJ(58I-pMbZnGJG&sXZ^B8O5 zf^4tNE~O5~8t5yd#}bTM4abxg)4*F44}{2;q~JU@U7N>l5Ac5+^9}2jnQ#KG)2>V69Lr0MniDZ39aLrG=8s7X_S81+!dyZ7L&u*GVRZ+k5 zH>(^A5joVG5|hsXW4+Pz#IV9N@-1B!S(gJ<0y=lP=Wa?S&n~oa$$cm&JTq>$d!eC( zK23g=zJ42JQM6KglIX<`y*R5fC|AL^^*8`kulUCvx)?kh1Xogk@vs>8;+i5-xr)&; z>59mGKWyZ4br5xJY^oVRN>ovWb0eG1(xsg9!E#k``~c`jIIHT43K((g@KRg#b)9PV zhmgk+G{%r^P>#ZM>4L>x9SJH`{p#wau-5AvyKdMA)KJqYU?I3BY_`%*t($@x*f>wH z#Gn|t&E_H0`E|{mW8$K2TRP3Xslg7_s+kUffLYb`(byf9QZ^qC=ks@G982Ylh|zM{ z7Q>q|@IX;WYxO6%)1jhZziChWG%Hq9dVn=zUW{I#&ZQC*ru*Z-=D52$CZDDQUCBs7 z_8Vq4dUAnrjQ*s3GU9_24a)6!9pU<7hwEo^jT8wj!)Mi51(50hX7`UzqOo_Ftdc*K z>T0M=+}PG1lihf~;n}v=4ZIFHDp;VVU9I34&;r<+%Ma8Vd(+BuU_*3&?4FCAu->wn zm%R!;`{bYbLHT0cRkOPcwEXr^DZ43 z!jN=^R;JS_G$T@MsW*~iG=SL~Ygp6n*NHBR!*1fljA-z<&DJ}|7cm<@A83(Nv`ME7 zS^cnqfr*%@6)v=TBHR(?3;AM7`b(nD5H6cyv_7hqg19q-IbeGj&jd=Tz?$OAoyP;n z6xtpS&Ecze)6Pe-SUnECsU(qOz`L_*Wn{k%g=>i1=-Ds^rD_H9kn|&;GID)(J;I~H z!rgx0=&fQm#@mp0LvG62@Oby|^IqcDDsgV+?vt|PG@<$AtMAJ5ZZ;oXZWa(jsz~h; zUWeFiiM`^7+B%?o*-|%IAh0b##(r}O{L*mMC3P+OoBxTZ&e=Vu-q*DA+B*BoQaE_z z4)Rb%naOX!Gldvoa9oYm`bcC`Tx z_JEVMFA^P_k4eIe+m9vnSpEKoujhYk?vHu zBBeH#{>{k7k`j^~N=F&2yVWyJ0W{JNxvU2Hj9>ra_m$t{3A$Gl=&@0m$?GCHc|E`u z;LL6s`*njdI~ly^7@ic0o8VAM%}AAI2(O5uDjisMiaRdw!xm#X>WhhqK=(zGDYlP3 zQO5A2G^>^i;`{a+o^00BlDuy%3WT4CaLQ27IESrcT5U>L;s3x=y+32uZ2(fSc0Td7 z4x{bqzQF6B_;v$k?@~+V@4YZkXY1WIgHK_;c~VRG3mRI05cgXlQ(d>NY#3 z-p#gRkLFhiNe&6s#wsrQU3xiC)}!S-#~N;s4}>$MY)hZ6!7ttFlB>Y5hC8hT=atOr zSX0t(6K?k}WsDLa=gWtv{cC6TswHBet0i;yT=*~K48%BoL+`qfC(yU0Y=T&2v zc^oI?tg2@Fi|%W+{Q%4Pj-$aL<;=SA%dac0k=$Vld_1&$_`T*1&&ZaRclS;Rm1Im- z1EC~gA`~^frVhkVxw3lQ2CN(5#pAy?e~r7~sbwls)eZf3yXhL%qSLyjBIOHjQ+^lt zhDSf+vwf-g$~o1d4_5A2ydBK3)tQbZBG4kx5dXsi@2gLfI0v8?>8sX~6m|8A*G}S0uHUo;n{#4Gx zdK+<7HSF^I@fecVB&oy4+|I3W^&-zYt3htG?I(DTl}f}X)<1X#WK`YJ)YkdpYpTSv z#SzRUHNWa;MrV?A9!xjwS+^wJh=@7Q$RzyE$Rk$Ctb=-Ab2nQUdS)+nbUDQj7_LXH zWwee?JL=QdyDnWOflr~|1I?WkgP1Cb@Vx~~+g?4Glt{T>eNLQn{`b@l5|3E4U9C71 zJfN=B$4&5g1Nm8M*dJQFwuk13%Ifb%^Hx0|W_V4;9$~rUNGF++BD7v%9KP zJ0PLcgF|9C&nm|dtqvExkgv5u(NUGYMS(p3hEY$OZD49q8mU{6_k0W!SAiF;R^)h~$pd)UAdi?IDRF zN^`ZYMJeurMJTT}ZjOihu9XMiPe(V@9}xasS_ez&qx|oQ!3}v0Bme^rE+rF#Eakldi2T1tq~PF4 z;QsGbo8qS+gP{F7rAI*wel`VOk%r>`FVAV=;0XRN7jBI^C4rkLB~<~GQX&Y#`tLWq zw<&<4B7&Gu%BZ3$e02($k{ZGYIK>gnmXfZ-iZJyq#p4}I%83%_e+wMEG9iMAND7Ja tYl?r&pb8HMXNLd>hx=c}mnVDi6a!@u_}?iRFZZgHdF9tAWAgtn{s&^*6zBi| delta 10423 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�cvutsq(WBg)@m0(j`DKUG@xX#cRU0gv-O6dTc;(}#Ln1A81c*6p- z+PV#X=Lq8^FpyQPAGu@6qB)JYoP>~XzfV|z1#s*vBftFp$7{Sl{p6=z3de(M-SRA{SK+G?~;rA_2JO`0DqeJE)mwKJGkAkXc9KXCeF2#Z;P05?A;%?tCp z+=sCCLXWAuIKbFFQK-7uVWe|G#C=M6%}Hvpr-b3ebd7HH5XgMd5IkZ`K^*u4ubT3} z@z=b}i%1BsoZ!!*a*=THeT7)ZYoCMPMj?42{ z-6$IvL^xe}-PT=g>uPXPC?{JJ=fmvpDH!!a>Ch#ViI-p%YP}r`LPeGt6Zu9Xh~hB@ z4c)%I@ZzXMCeF0r`nP`=rk0SxQ)Es%8dTI((YfWFYhA*^pq1zciTJxvSj(YnDauI$?MCl4J0$68J^w0gp1QV;C^t zJvf9g(%!_t49<4McDAYM$06)k>k${JRKnaU;ZU>SUf-O;jr15XL?Yawmu3WrSwwDq z(byi53#>c(G_pN^;%N?XBy$l1v+x%`e8qlaOPsSws#3hA7n*TwWs6xp)z&dYH7`J< z<9WGPv{%KntNW|dMu(*AJ{>n)z;#= zWP~QSkZzET{WyYg!mf(6{Y0`5ITE5FP@FP0=#Me^+Pby(Z=Kr4Z)#=N~p%l zc`e{?Y@M*Oi!m!HIg?8J79beJ-1)Gaa;g|GeFUd^pJ>~8x3dKz1p|zhjjTk;Xey); zFi^eLxt#w{_apvbm2d9^o~rOrW4*)p_z@PkYZP;!XzlxHO@b44c3#VaG%Dz&Z9tpa}?s_&+2bWm|C ztg?5*zwd_^0f{dUs+FpR(fz||X;yfh=u%5kD4?W=B`tV`!gFq8Hud3_z9CVaj)`@O zd*q=Zg((!niIWCR96v9`QVwMyM7}~_gS=2HFGec zb?s9N$NOE}pNGHmLhW>Li;r7HIGf_Ru2m|Jm0LX>6oTvF;Z0hO!caZ43%X(k>h=V9 zIIR8chxF3VvRX9|U@97G7W$Uip@x}$F{yo=2-JJ5%qQoto8e#Za2_QaM5CS?3q?|a zi*9(wO-MX;>4I;z&&j}!H%EJL9YzRgFmlW*nKxcy-#j&~`@6I2_m1F?RiiEKbRG*C zy$E2?|B$C3PdwZSbD91IdJ<_!!k;|G$USWtT8z#GzGYfdP1}lzNs&QQvS22pLqq80 z0#&mPD5KS0h+vXpXEuAV7KUr!LzFY@Ov6=JCbC@8&4O{b;)o-)(vT0EUfg!7zA;;* zyIvOUuBTSM1O7hQwRc(xR1vW0)`pzkHjQ=CV(JgzacYHuN7BJSJDCSfRMwtAX*B!kii(OIZd3>-RTQSBNBQM5aidhmATD$7_i_4H{)*U?d#^yt~=DC!SFAaYNM z7)bXBUrAJcoB-`ld!xV65B5oW1dfc~zpMZx)g04h2-~rn50xCjNke<@*hdY0EH%$s z*)<1lm^>g?k3TRlX!@L_G_=Cuia62ZSt7Bjv1%EDeE&)UpT9_fj;UM3OjtsEbkG) zz&<}A!BiC>p|HSUz~H_XfMj5eo3P#~Lrt~Vwgy4hL~;ZZT2X*y`lyCI0Z;~fjs(A(#_3nB z*EwO*jsZ3??b0IIv_ninH6gW$njlMhiX#Ya|^ zwsWlXJJ$G_(QZmBSf8yk0X2f!Mfl%kxB;Qq;Va!f@3cYX;B4DU<%|GVmtl4pAWo^0-Kequ=g~r*0Ng$~ zP@a_V|G#kmKeR`3hrAd>CQmXmFKIH70zJep-edzl%4El{TOR)8DSoQt9tC=Ewd8*a z+Tgm$B8vP(|5M^1z`&}Y|92Pgf6fjClT#I`q5jK>2 N4JB$ARoVZ{|35bP1k?Zk diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 74bb085d4..74db54cd4 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -5617,6 +5617,36 @@ "logo.png", { isInline: false }, 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 + + // 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}".`); + // Important: setSignatureAsync is currently in preview. + Office.context.mailbox.item.body.setSignatureAsync( + signature, + { coercionType: "html" }, + function(asyncResult) { + console.log(`setSignatureAsync: ${asyncResult.status}`); + } + ); + } else { + console.error(`addFileAttachmentFromBase64Async: ${result.error}`); + } + } + ); 'Office.MessageCompose#addFileAttachmentFromBase64Async:member(1)': - >- // Link to full sample: @@ -5630,6 +5660,36 @@ "logo.png", { isInline: false }, 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 + + // 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}".`); + // Important: setSignatureAsync is currently in preview. + 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(2)': - >- // Link to full sample: @@ -7558,6 +7618,37 @@ console.error(asyncResult.error); } }); +'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 + + // 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}".`); + // Important: setSignatureAsync is currently in preview. + Office.context.mailbox.item.body.setSignatureAsync( + signature, + { coercionType: "html" }, + function(asyncResult) { + console.log(`setSignatureAsync: ${asyncResult.status}`); + } + ); + } else { + console.error(`addFileAttachmentFromBase64Async: ${result.error}`); + } + } + ); 'Office.Body#setSignatureAsync:member(2)': - >- // Link to full sample: From a1e680d640eaca87eb924b0e3239d7bae1ad9ea7 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 29 May 2020 09:04:30 -0700 Subject: [PATCH 289/660] Updating linter settings (#459) --- tslint.json | 1 - 1 file changed, 1 deletion(-) diff --git a/tslint.json b/tslint.json index 14a66dce9..1bec78163 100644 --- a/tslint.json +++ b/tslint.json @@ -33,7 +33,6 @@ "no-eval": true, "no-trailing-whitespace": true, "no-unused-expression": true, - "no-use-before-declare": true, "one-line": [ true, "check-open-brace", From 099e65367f51077c7866b2382cbcc5383b0b7527 Mon Sep 17 00:00:00 2001 From: timwan10 Date: Mon, 13 Jul 2020 13:11:15 -0700 Subject: [PATCH 290/660] Outlook Display Samples (#461) * Outlook Display Samples * Fixup suggestions from CR * Move files from display to preview * Revert change to allow beta folder to use preview --- playlists/outlook.yaml | 112 +++++++------- .../display-new-appointment.yaml | 66 -------- .../55-display-items/display-new-message.yaml | 67 -------- .../55-display-items/display-reply-forms.yaml | 65 -------- .../display-reply-with-attachments.yaml | 68 --------- .../display-existing-appointment.yaml | 32 ++-- .../display-existing-message.yaml | 31 ++-- .../display-new-appointment.yaml | 93 ++++++++++++ .../99-preview-apis/display-new-message.yaml | 92 +++++++++++ .../99-preview-apis/display-reply-forms.yaml | 86 +++++++++++ .../display-reply-with-attachments.yaml | 84 ++++++++++ snippet-extractor-output/snippets.yaml | 143 ++++++++---------- view/outlook.json | 12 +- 13 files changed, 524 insertions(+), 427 deletions(-) delete mode 100644 samples/outlook/55-display-items/display-new-appointment.yaml delete mode 100644 samples/outlook/55-display-items/display-new-message.yaml delete mode 100644 samples/outlook/55-display-items/display-reply-forms.yaml delete mode 100644 samples/outlook/55-display-items/display-reply-with-attachments.yaml rename samples/outlook/{55-display-items => 99-preview-apis}/display-existing-appointment.yaml (61%) rename samples/outlook/{55-display-items => 99-preview-apis}/display-existing-message.yaml (60%) create mode 100644 samples/outlook/99-preview-apis/display-new-appointment.yaml create mode 100644 samples/outlook/99-preview-apis/display-new-message.yaml create mode 100644 samples/outlook/99-preview-apis/display-reply-forms.yaml create mode 100644 samples/outlook/99-preview-apis/display-reply-with-attachments.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index a45c39a44..07830e4fe 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -268,62 +268,6 @@ 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////samples/outlook/55-display-items/display-existing-appointment.yaml - group: Display Items - api_set: - Mailbox: '1.1' -- 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////samples/outlook/55-display-items/display-existing-message.yaml - group: Display Items - api_set: - Mailbox: '1.1' -- 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////samples/outlook/55-display-items/display-new-appointment.yaml - group: Display Items - api_set: - Mailbox: '1.1' -- 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////samples/outlook/55-display-items/display-new-message.yaml - group: Display Items - api_set: - Mailbox: '1.6' -- 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////samples/outlook/55-display-items/display-reply-forms.yaml - group: Display Items - api_set: - Mailbox: '1.1' -- 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////samples/outlook/55-display-items/display-reply-with-attachments.yaml - group: Display Items - api_set: - Mailbox: '1.2' - id: outlook-delegates-and-shared-folders-get-shared-properties name: Perform an operation as delegate fileName: get-shared-properties.yaml @@ -586,6 +530,62 @@ group: Preview APIs api_set: Mailbox: preview +- 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////samples/outlook/99-preview-apis/display-existing-appointment.yaml + group: Preview APIs + api_set: + Mailbox: preview +- 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////samples/outlook/99-preview-apis/display-existing-message.yaml + group: Preview APIs + api_set: + Mailbox: preview +- 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////samples/outlook/99-preview-apis/display-new-appointment.yaml + group: Preview APIs + api_set: + Mailbox: preview +- 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////samples/outlook/99-preview-apis/display-new-message.yaml + group: Preview APIs + api_set: + Mailbox: preview +- 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////samples/outlook/99-preview-apis/display-reply-forms.yaml + group: Preview APIs + api_set: + Mailbox: preview +- 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////samples/outlook/99-preview-apis/display-reply-with-attachments.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 diff --git a/samples/outlook/55-display-items/display-new-appointment.yaml b/samples/outlook/55-display-items/display-new-appointment.yaml deleted file mode 100644 index 6ecdec49d..000000000 --- a/samples/outlook/55-display-items/display-new-appointment.yaml +++ /dev/null @@ -1,66 +0,0 @@ -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. -host: OUTLOOK -api_set: - Mailbox: '1.1' -script: - content: | - $("#run").click(run); - - function run() { - var start = new Date(); - var 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!' - }); - } - language: typescript -template: - content: | -
    -

    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: | - 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/55-display-items/display-new-message.yaml b/samples/outlook/55-display-items/display-new-message.yaml deleted file mode 100644 index e2455c12b..000000000 --- a/samples/outlook/55-display-items/display-new-message.yaml +++ /dev/null @@ -1,67 +0,0 @@ -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' -host: OUTLOOK -api_set: - Mailbox: '1.6' -script: - content: | - $("#run").click(run); - - function run() { - 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 - } - ] - }); - } - language: typescript -template: - 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: | - 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/55-display-items/display-reply-forms.yaml b/samples/outlook/55-display-items/display-reply-forms.yaml deleted file mode 100644 index edbf493d0..000000000 --- a/samples/outlook/55-display-items/display-reply-forms.yaml +++ /dev/null @@ -1,65 +0,0 @@ -id: outlook-display-items-display-reply-forms -name: Create replies -description: Opens reply and reply-all message forms with sample reply content. -host: OUTLOOK -api_set: - Mailbox: '1.1' -script: - content: | - $("#displayReplyForm").click(displayReplyForm); - $("#displayReplyAllForm").click(displayReplyAllForm); - - function displayReplyForm() { - Office.context.mailbox.item.displayReplyForm( - "This is a reply with some text in italics." - ); - } - - function displayReplyAllForm() { - Office.context.mailbox.item.displayReplyAllForm( - "This is a reply ALL with some bold text." - ); - } - language: typescript -template: - content: | -
    -

    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: | - 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/55-display-items/display-reply-with-attachments.yaml b/samples/outlook/55-display-items/display-reply-with-attachments.yaml deleted file mode 100644 index fe0928fc2..000000000 --- a/samples/outlook/55-display-items/display-reply-with-attachments.yaml +++ /dev/null @@ -1,68 +0,0 @@ -id: outlook-display-items-display-reply-with-attachments -name: 'Create a reply, with attachments' -description: Opens a reply message forms and adds sample attachments. -host: OUTLOOK -api_set: - Mailbox: '1.2' -script: - content: | - $("#run").click(run); - - function run() { - 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}`); - } - } - }); - } - language: typescript -template: - content: | -
    -

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

    -
    - -
    -

    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/55-display-items/display-existing-appointment.yaml b/samples/outlook/99-preview-apis/display-existing-appointment.yaml similarity index 61% rename from samples/outlook/55-display-items/display-existing-appointment.yaml rename to samples/outlook/99-preview-apis/display-existing-appointment.yaml index bb701ba6f..b1880d63b 100644 --- a/samples/outlook/55-display-items/display-existing-appointment.yaml +++ b/samples/outlook/99-preview-apis/display-existing-appointment.yaml @@ -3,7 +3,7 @@ name: Open an appointment description: Displays existing appointment in a separate window host: OUTLOOK api_set: - Mailbox: '1.1' + Mailbox: preview script: content: | // Pre-populate with current item ID. @@ -11,10 +11,21 @@ script: $("#run").click(run); + $("#run-async").click(runAsync); + function run() { var itemId = $("#itemId").val(); Office.context.mailbox.displayAppointmentForm(itemId); } + + // The async version will return error 9049 if the item is not found. + // The async version is only available in preview. + function runAsync() { + var itemId = $("#itemId").val(); + Office.context.mailbox.displayAppointmentFormAsync(itemId, function(asyncResult) { + console.log("Result: " + JSON.stringify(asyncResult)); + }); + } language: typescript template: content: | @@ -31,6 +42,9 @@ template: +
    diff --git a/view/excel.json b/view/excel.json index 745cc08d0..893eb265f 100644 --- a/view/excel.json +++ b/view/excel.json @@ -73,7 +73,6 @@ "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-areas.yaml", "excel-range-remove-duplicates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-remove-duplicates.yaml", "excel-just-for-fun-tetrominos": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/tetrominos.yaml", - "excel-range-remove-duplicates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-remove-duplicates.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/multiple-property-set.yaml", "excel-scenarios-working-with-dates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/working-with-dates.yaml", From 2d3e7d74888176e059357a09aa019a147d2ebdcc Mon Sep 17 00:00:00 2001 From: Alex Jerabek Date: Wed, 26 Dec 2018 17:00:49 -0800 Subject: [PATCH 117/660] Grammar fix --- samples/excel/85-preview-apis/range-areas.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/excel/85-preview-apis/range-areas.yaml b/samples/excel/85-preview-apis/range-areas.yaml index 8525d86ce..a93c6b8df 100644 --- a/samples/excel/85-preview-apis/range-areas.yaml +++ b/samples/excel/85-preview-apis/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 programmatically getting sets 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 From c618ffe775253271a2b2804fd506c30d6674aa50 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 28 Dec 2018 12:05:07 -0800 Subject: [PATCH 118/660] [excel] (Range) Adding find snippet (#244) * Adding find snippet * Adding error note --- playlists/excel.yaml | 31 ++-- .../performance-optimization.yaml | 2 +- .../excel/85-preview-apis/range-areas.yaml | 2 +- samples/excel/85-preview-apis/range-find.yaml | 175 ++++++++++++++++++ .../range-remove-duplicates.yaml | 2 +- samples/excel/85-preview-apis/tetrominos.yaml | 2 +- view/excel.json | 3 +- 7 files changed, 201 insertions(+), 16 deletions(-) create mode 100644 samples/excel/85-preview-apis/range-find.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index b3f9fd4b2..1fc165a41 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -638,27 +638,36 @@ group: Preview APIs api_set: ExcelAPI: 1.9 -- 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////samples/excel/85-preview-apis/performance-optimization.yaml - group: Preview APIs - api_set: - ExcelApi: 1.9 - 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 programmatically getting sets of - special cells. + contiguous, through user selection and programmatic selection of special + cells. rawUrl: >- https://raw.githubusercontent.com////samples/excel/85-preview-apis/range-areas.yaml group: Preview APIs api_set: ExcelApi: 1.9 +- id: excel-range-find + name: Find + fileName: range-find.yaml + description: Finds data within a range. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/85-preview-apis/range-find.yaml + group: Preview APIs + api_set: + ExcelAPI: 1.9 +- 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////samples/excel/85-preview-apis/performance-optimization.yaml + group: Preview APIs + api_set: + ExcelApi: 1.9 - id: excel-range-remove-duplicates name: Remove duplicates fileName: range-remove-duplicates.yaml diff --git a/samples/excel/85-preview-apis/performance-optimization.yaml b/samples/excel/85-preview-apis/performance-optimization.yaml index 7daabddf5..eb7aa5088 100644 --- a/samples/excel/85-preview-apis/performance-optimization.yaml +++ b/samples/excel/85-preview-apis/performance-optimization.yaml @@ -1,4 +1,4 @@ -order: 2 +order: 4 id: excel-performance-optimization name: Performance optimization description: Optimizes performance by untracking ranges and turning off screen painting. diff --git a/samples/excel/85-preview-apis/range-areas.yaml b/samples/excel/85-preview-apis/range-areas.yaml index a93c6b8df..91994e0cd 100644 --- a/samples/excel/85-preview-apis/range-areas.yaml +++ b/samples/excel/85-preview-apis/range-areas.yaml @@ -1,4 +1,4 @@ -order: 3 +order: 2 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.' diff --git a/samples/excel/85-preview-apis/range-find.yaml b/samples/excel/85-preview-apis/range-find.yaml new file mode 100644 index 000000000..a4a243fd0 --- /dev/null +++ b/samples/excel/85-preview-apis/range-find.yaml @@ -0,0 +1,175 @@ +order: 3 +id: excel-range-find +name: Find +description: Finds data within a range. +host: EXCEL +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)); + + let completeMatch = false; + let matchCase = false; + let searchDirection = Excel.SearchDirection.forward; + + async function findText() { + 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: completeMatch, + matchCase: matchCase, + searchDirection: searchDirection + }); + + foundRange.load("address"); + await context.sync(); + + + console.log(foundRange.address); + }); + } + + async function findTextWithNullCheck() { + 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: completeMatch, + matchCase: matchCase, + searchDirection: searchDirection + }); + + foundRange.load("address"); + await context.sync(); + + if (foundRange.isNullObject) { + console.log("Text not found"); + } else { + console.log(foundRange.address); + } + }); + } + + function toggleComplete() { + completeMatch = !completeMatch; + console.log("Finding complete match = " + completeMatch); + } + + function toggleCase() { + matchCase = !matchCase; + console.log("Finding matched case = " + matchCase); + } + + function toggleDirection() { + searchDirection = searchDirection === Excel.SearchDirection.forward ? Excel.SearchDirection.backwards : Excel.SearchDirection.forward; + console.log("Search direction = " + searchDirection); + } + + async function setup() { + await Excel.run(async (context) => { + await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + + const sheet = context.workbook.worksheets.getItem("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", "The Phone Company", "communications", "$5"], + ["1/15/2017", "Coho Vineyard (Wine)", "Groceries", "$60"], + ["1/15/2017", "Best For You Organics Company", "Groceries", "$97"] + ]); + + sheet.getUsedRange().format.autofitColumns(); + sheet.activate(); + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |- +
    +

    This sample shows how to find data within a range.

    +
    +
    +

    Setup

    + +
    +
    +

    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.

    +

    +

    +

    +

    Toggle the following search options to test different search behaviors.

    +

    +

    + +

    + 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 + + @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/samples/excel/85-preview-apis/range-remove-duplicates.yaml b/samples/excel/85-preview-apis/range-remove-duplicates.yaml index f0f223d30..28fb308d9 100644 --- a/samples/excel/85-preview-apis/range-remove-duplicates.yaml +++ b/samples/excel/85-preview-apis/range-remove-duplicates.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 5 id: excel-range-remove-duplicates name: Remove duplicates description: Removes duplicate entries from a range. diff --git a/samples/excel/85-preview-apis/tetrominos.yaml b/samples/excel/85-preview-apis/tetrominos.yaml index 6b7d0bedf..fc821cd78 100644 --- a/samples/excel/85-preview-apis/tetrominos.yaml +++ b/samples/excel/85-preview-apis/tetrominos.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 6 id: excel-just-for-fun-tetrominos name: Tetromino stacking description: Arrange moving tetromino shapes to form lines. diff --git a/view/excel.json b/view/excel.json index 893eb265f..18fb07c8c 100644 --- a/view/excel.json +++ b/view/excel.json @@ -69,8 +69,9 @@ "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-visibility.yaml", "excel-range-copyfrom": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-copyfrom.yaml", - "excel-performance-optimization": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/performance-optimization.yaml", "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-areas.yaml", + "excel-range-find": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-find.yaml", + "excel-performance-optimization": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/performance-optimization.yaml", "excel-range-remove-duplicates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-remove-duplicates.yaml", "excel-just-for-fun-tetrominos": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/tetrominos.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/report-generation.yaml", From d5834eb1bbba60e726e6de0cc483c2c0df1584f7 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 28 Dec 2018 15:39:41 -0800 Subject: [PATCH 119/660] [excel] (Worksheet) Find all (#245) * Adding findAll snippet * Fixing order and running npm start * Updating descriptions --- playlists/excel.yaml | 13 +- .../performance-optimization.yaml | 2 +- samples/excel/85-preview-apis/range-find.yaml | 8 +- .../range-remove-duplicates.yaml | 2 +- samples/excel/85-preview-apis/tetrominos.yaml | 2 +- .../85-preview-apis/worksheet-find-all.yaml | 156 ++++++++++++++++++ view/excel.json | 1 + 7 files changed, 175 insertions(+), 9 deletions(-) create mode 100644 samples/excel/85-preview-apis/worksheet-find-all.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 1fc165a41..70cee16be 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -651,14 +651,23 @@ api_set: ExcelApi: 1.9 - id: excel-range-find - name: Find + name: Find text matches within a range fileName: range-find.yaml - description: Finds data within a range. + description: Finds a cell within a range based on string matching. rawUrl: >- https://raw.githubusercontent.com////samples/excel/85-preview-apis/range-find.yaml group: Preview APIs api_set: ExcelAPI: 1.9 +- 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////samples/excel/85-preview-apis/worksheet-find-all.yaml + group: Preview APIs + api_set: + ExcelAPI: 1.9 - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/samples/excel/85-preview-apis/performance-optimization.yaml b/samples/excel/85-preview-apis/performance-optimization.yaml index eb7aa5088..c55de61b8 100644 --- a/samples/excel/85-preview-apis/performance-optimization.yaml +++ b/samples/excel/85-preview-apis/performance-optimization.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 5 id: excel-performance-optimization name: Performance optimization description: Optimizes performance by untracking ranges and turning off screen painting. diff --git a/samples/excel/85-preview-apis/range-find.yaml b/samples/excel/85-preview-apis/range-find.yaml index a4a243fd0..ca87f2521 100644 --- a/samples/excel/85-preview-apis/range-find.yaml +++ b/samples/excel/85-preview-apis/range-find.yaml @@ -1,7 +1,7 @@ order: 3 id: excel-range-find -name: Find -description: Finds data within a range. +name: Find text matches within a range +description: Finds a cell within a range based on string matching. host: EXCEL api_set: ExcelAPI: 1.9 @@ -25,7 +25,7 @@ script: const searchRange = table.getRange(); // NOTE: If no match is found, an ItemNotFound error - // is thrown when Range.find is evaluated. + // is thrown when Range.find is evaluated. const foundRange = searchRange.find($("#searchText").text(), { completeMatch: completeMatch, matchCase: matchCase, @@ -115,7 +115,7 @@ script: template: content: |-
    -

    This sample shows how to find data within a range.

    +

    This sample shows how to find a cell with a matching string value within a range.

    Setup

    diff --git a/samples/excel/85-preview-apis/range-remove-duplicates.yaml b/samples/excel/85-preview-apis/range-remove-duplicates.yaml index 28fb308d9..b9d483040 100644 --- a/samples/excel/85-preview-apis/range-remove-duplicates.yaml +++ b/samples/excel/85-preview-apis/range-remove-duplicates.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 6 id: excel-range-remove-duplicates name: Remove duplicates description: Removes duplicate entries from a range. diff --git a/samples/excel/85-preview-apis/tetrominos.yaml b/samples/excel/85-preview-apis/tetrominos.yaml index fc821cd78..f57085312 100644 --- a/samples/excel/85-preview-apis/tetrominos.yaml +++ b/samples/excel/85-preview-apis/tetrominos.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 7 id: excel-just-for-fun-tetrominos name: Tetromino stacking description: Arrange moving tetromino shapes to form lines. diff --git a/samples/excel/85-preview-apis/worksheet-find-all.yaml b/samples/excel/85-preview-apis/worksheet-find-all.yaml new file mode 100644 index 000000000..18b3758ca --- /dev/null +++ b/samples/excel/85-preview-apis/worksheet-find-all.yaml @@ -0,0 +1,156 @@ +order: 4 +id: excel-worksheet-find-all +name: Find text matches within a worksheet +description: Finds cells within a worksheet based on string matching. +host: EXCEL +api_set: + ExcelAPI: 1.9 +script: + content: | + $("#setup").click(() => tryCatch(setup)); + $("#findCompleted").click(() => tryCatch(findCompleted)); + $("#findDelayed").click(() => tryCatch(findDelayed)); + $("#findCanceled").click(() => tryCatch(findCanceled)); + + async function findCompleted() { + 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" + } + }); + } + + async function findDelayed() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const foundRanges = sheet.findAllOrNullObject("Delay", { + completeMatch: false, + matchCase: false + }); + + await context.sync(); + + if (foundRanges.isNullObject) { + console.log("No delayed projects"); + } else { + foundRanges.format.fill.color = "yellow" + } + }); + } + + async function findCanceled() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + // NOTE: In this sample, there are no canceled projects. + // Calling sheet.findAll(...) instead of sheet.findAllOrNullObject(...) + // would throw an ItemNotFound error. + const foundRanges = sheet.findAllOrNullObject("canceled", { + completeMatch: false, + matchCase: false + }); + + await context.sync(); + + if (foundRanges.isNullObject) { + console.log("No canceled projects"); + } else { + foundRanges.format.fill.color = "red" + } + }); + } + + async function setup() { + await Excel.run(async (context) => { + await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + const sheet = context.workbook.worksheets.getItem("Sample"); + + const projectTable = sheet.tables.add("A1:D1", true); + projectTable.name = "ProjectTable"; + projectTable.getHeaderRowRange().values = [["Project", "Alpha", "Beta", "Ship"]]; + projectTable.rows.add(null, [ + ["Project 1", "Complete", "Ongoing", "On Schedule"], + ["Project 2", "Complete", "Complete", "On Schedule"], + ["Project 3", "Ongoing", "Not Started", "Delayed"], + ["Project 4", "Complete", "Complete", "On Schedule"], + ["Project 5", "Incomplete", "Delayed", "Delays Likely"] + ]); + + sheet.getUsedRange().format.autofitColumns(); + sheet.activate(); + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |- +
    +

    This sample shows how to find cells with matching string values across an entire worksheet.

    +
    +
    +

    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/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 + + @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/view/excel.json b/view/excel.json index 18fb07c8c..cb7990878 100644 --- a/view/excel.json +++ b/view/excel.json @@ -71,6 +71,7 @@ "excel-range-copyfrom": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-copyfrom.yaml", "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-areas.yaml", "excel-range-find": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-find.yaml", + "excel-worksheet-find-all": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/worksheet-find-all.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/performance-optimization.yaml", "excel-range-remove-duplicates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-remove-duplicates.yaml", "excel-just-for-fun-tetrominos": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/tetrominos.yaml", From ca274697148097a28e1b56d201525f4d8f5f116b Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 4 Jan 2019 14:40:51 -0800 Subject: [PATCH 120/660] [excel] (Worksheet) Page layout snippet (#247) * Page layout snippet * Correcting descriptions * Moving centering button --- playlists/excel.yaml | 9 + .../performance-optimization.yaml | 2 +- .../range-remove-duplicates.yaml | 2 +- samples/excel/85-preview-apis/tetrominos.yaml | 2 +- .../worksheet-page-layout.yaml | 198 ++++++++++++++++++ view/excel.json | 1 + 6 files changed, 211 insertions(+), 3 deletions(-) create mode 100644 samples/excel/85-preview-apis/worksheet-page-layout.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 70cee16be..b2414ed47 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -668,6 +668,15 @@ group: Preview APIs api_set: ExcelAPI: 1.9 +- 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////samples/excel/85-preview-apis/worksheet-page-layout.yaml + group: Preview APIs + api_set: + ExcelAPI: 1.9 - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/samples/excel/85-preview-apis/performance-optimization.yaml b/samples/excel/85-preview-apis/performance-optimization.yaml index c55de61b8..6f65386df 100644 --- a/samples/excel/85-preview-apis/performance-optimization.yaml +++ b/samples/excel/85-preview-apis/performance-optimization.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 6 id: excel-performance-optimization name: Performance optimization description: Optimizes performance by untracking ranges and turning off screen painting. diff --git a/samples/excel/85-preview-apis/range-remove-duplicates.yaml b/samples/excel/85-preview-apis/range-remove-duplicates.yaml index b9d483040..952c977a6 100644 --- a/samples/excel/85-preview-apis/range-remove-duplicates.yaml +++ b/samples/excel/85-preview-apis/range-remove-duplicates.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 7 id: excel-range-remove-duplicates name: Remove duplicates description: Removes duplicate entries from a range. diff --git a/samples/excel/85-preview-apis/tetrominos.yaml b/samples/excel/85-preview-apis/tetrominos.yaml index f57085312..665f1489e 100644 --- a/samples/excel/85-preview-apis/tetrominos.yaml +++ b/samples/excel/85-preview-apis/tetrominos.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 8 id: excel-just-for-fun-tetrominos name: Tetromino stacking description: Arrange moving tetromino shapes to form lines. diff --git a/samples/excel/85-preview-apis/worksheet-page-layout.yaml b/samples/excel/85-preview-apis/worksheet-page-layout.yaml new file mode 100644 index 000000000..6f6fc5538 --- /dev/null +++ b/samples/excel/85-preview-apis/worksheet-page-layout.yaml @@ -0,0 +1,198 @@ +order: 5 +id: excel-worksheet-page-layout +name: Page layout and print settings +description: Changes the page layout and other settings for printing a worksheet. +host: EXCEL +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)); + + async function setPageBreaks() { + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.horizontalPageBreaks.add("A21:E21"); + await context.sync(); + }); + } + + async function center() { + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.pageLayout.centerHorizontally = true; + farmSheet.pageLayout.centerVertically = true; + await context.sync(); + }); + } + + async function setBlackAndWhite() { + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.pageLayout.blackAndWhite = true; + await context.sync(); + }); + } + + async function setPrintTitleRow() { + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.pageLayout.setPrintTitleRows("$1:$1"); + await context.sync(); + }); + } + + async function setPrintArea() { + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.pageLayout.setPrintArea("A1:D41"); + await context.sync(); + }); + } + + async function changeOrientation() { + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.pageLayout.orientation = Excel.PageOrientation.landscape; + await context.sync(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + const printSheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Print"); + + let farmTable = printSheet.tables.add("A1:E1", true); + farmTable.name = "FarmTable"; + farmTable.getHeaderRowRange().values = [ + ["Farm", "Type", "Classification", "Crates Sold at Farm", "Crates Sold Wholesale"] + ]; + + farmTable.rows.add(null, [ + ["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], + ["G Farms", "Lime", "Organic", 300, 2000], + ["G Farms", "Lemon", "Organic", 250, 1800], + ["G Farms", "Orange", "Organic", 200, 2200], + ["H Farms", "Lime", "Conventional", 80, 1000], + ["H Farms", "Lemon", "Conventional", 75, 1230], + ["H Farms", "Orange", "Conventional", 25, 800], + ["H Farms", "Orange", "Organic", 20, 500], + ["H Farms", "Lemon", "Organic", 10, 770], + ["H Farms", "Kiwi", "Conventional", 30, 300], + ["I Farms", "Lime", "Organic", 50, 400], + ["I Farms", "Apple", "Organic", 275, 220], + ["I Farms", "Kiwi", "Organic", 200, 120], + ["I Farms", "Apple", "Conventional", 100, 3000], + ["J Farms", "Apple", "Organic", 80, 2800], + ["J Farms", "Lime", "Conventional", 160, 2700], + ["K Farms", "Orange", "Conventional", 180, 2000], + ["K Farms", "Apple", "Conventional", 245, 2200], + ["L Farms", "Kiwi", "Conventional", 200, 1500], + ["L Farms", "Kiwi", "Organic", 100, 150], + ["L Farms", "Lemon", "Conventional", 150, 270] + ]); + + farmTable.getRange().format.autofitColumns(); + printSheet.activate(); + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |- +
    +

    This sample shows how to change page layout and other settings for printing a worksheet.

    +
    +
    +

    Setup

    + +
    +
    +

    Try it out

    +

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

    +

    +

    +

    In Excel, choose File > Print to see differences in printing before and after you press the following buttons.

    +

    +

    +

    + +

    + 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 + + @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/view/excel.json b/view/excel.json index cb7990878..140cf283f 100644 --- a/view/excel.json +++ b/view/excel.json @@ -72,6 +72,7 @@ "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-areas.yaml", "excel-range-find": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-find.yaml", "excel-worksheet-find-all": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/worksheet-find-all.yaml", + "excel-worksheet-page-layout": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/worksheet-page-layout.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/performance-optimization.yaml", "excel-range-remove-duplicates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-remove-duplicates.yaml", "excel-just-for-fun-tetrominos": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/tetrominos.yaml", From 0a8d65658bd89c994307ff5952c2169480bd9980 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Mon, 7 Jan 2019 10:14:17 -0800 Subject: [PATCH 121/660] Snippets for preview workbook features (#248) --- playlists/excel.yaml | 18 ++++ .../performance-optimization.yaml | 2 +- .../range-remove-duplicates.yaml | 2 +- samples/excel/85-preview-apis/tetrominos.yaml | 2 +- .../workbook-insert-external-worksheets.yaml | 87 ++++++++++++++++ .../workbook-save-and-close.yaml | 98 +++++++++++++++++++ .../worksheet-page-layout.yaml | 2 +- view/excel.json | 2 + 8 files changed, 209 insertions(+), 4 deletions(-) create mode 100644 samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml create mode 100644 samples/excel/85-preview-apis/workbook-save-and-close.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index b2414ed47..7fbfb9473 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -668,6 +668,15 @@ group: Preview APIs api_set: ExcelAPI: 1.9 +- id: excel-worksheet-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////samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml + group: Preview APIs + api_set: + ExcelAPI: 1.9 - id: excel-worksheet-page-layout name: Page layout and print settings fileName: worksheet-page-layout.yaml @@ -695,6 +704,15 @@ group: Preview APIs api_set: ExcelAPI: 1.9 +- id: excel-worksheet-save-and-close + name: Save and close + fileName: workbook-save-and-close.yaml + description: Saves and closes a workbook. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/85-preview-apis/workbook-save-and-close.yaml + group: Preview APIs + api_set: + ExcelAPI: 1.9 - id: excel-just-for-fun-tetrominos name: Tetromino stacking fileName: tetrominos.yaml diff --git a/samples/excel/85-preview-apis/performance-optimization.yaml b/samples/excel/85-preview-apis/performance-optimization.yaml index 6f65386df..c82ebad65 100644 --- a/samples/excel/85-preview-apis/performance-optimization.yaml +++ b/samples/excel/85-preview-apis/performance-optimization.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 7 id: excel-performance-optimization name: Performance optimization description: Optimizes performance by untracking ranges and turning off screen painting. diff --git a/samples/excel/85-preview-apis/range-remove-duplicates.yaml b/samples/excel/85-preview-apis/range-remove-duplicates.yaml index 952c977a6..4954b68e8 100644 --- a/samples/excel/85-preview-apis/range-remove-duplicates.yaml +++ b/samples/excel/85-preview-apis/range-remove-duplicates.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 8 id: excel-range-remove-duplicates name: Remove duplicates description: Removes duplicate entries from a range. diff --git a/samples/excel/85-preview-apis/tetrominos.yaml b/samples/excel/85-preview-apis/tetrominos.yaml index 665f1489e..662390641 100644 --- a/samples/excel/85-preview-apis/tetrominos.yaml +++ b/samples/excel/85-preview-apis/tetrominos.yaml @@ -1,4 +1,4 @@ -order: 8 +order: 10 id: excel-just-for-fun-tetrominos name: Tetromino stacking description: Arrange moving tetromino shapes to form lines. diff --git a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml new file mode 100644 index 000000000..9b2fd09c1 --- /dev/null +++ b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml @@ -0,0 +1,87 @@ +order: 5 +id: excel-worksheet-insert-external-worksheets +name: Insert external worksheets +description: Inserts worksheets from another workbook into the current workbook. +host: EXCEL +api_set: + ExcelAPI: 1.9 +script: + content: | + $("#file").change(() => tryCatch(insertSheets)); + + async function insertSheets() { + 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 = ((event.target).result).indexOf("base64,"); + const workbookContents = ((event.target).result).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]); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |- +
    +

    This sample shows how to copy the worksheets from an existing workbook into the current workbook.

    +
    + +
    +

    Try it out

    +

    Select an Excel workbook to copy its worksheets into the current workbook.

    +
    + +
    +
    + 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 + + @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/samples/excel/85-preview-apis/workbook-save-and-close.yaml b/samples/excel/85-preview-apis/workbook-save-and-close.yaml new file mode 100644 index 000000000..54c6078ec --- /dev/null +++ b/samples/excel/85-preview-apis/workbook-save-and-close.yaml @@ -0,0 +1,98 @@ +order: 9 +id: excel-worksheet-save-and-close +name: Save and close +description: Saves and closes a workbook. +host: EXCEL +api_set: + ExcelAPI: 1.9 +script: + content: | + $("#saveWithPrompt").click(() => tryCatch(saveWithPrompt)); + $("#saveWithoutPrompt").click(() => tryCatch(saveWithoutPrompt)); + $("#closeWithSave").click(() => tryCatch(closeWithSave)); + $("#closeWithoutSave").click(() => tryCatch(closeWithoutSave)); + + async function saveWithPrompt() { + await Excel.run(async (context) => { + context.workbook.save(Excel.SaveBehavior.prompt); + }); + } + + async function saveWithoutPrompt() { + await Excel.run(async (context) => { + context.workbook.save(Excel.SaveBehavior.save); + }); + } + + async function closeWithSave() { + await Excel.run(async (context) => { + context.workbook.close(Excel.CloseBehavior.save); + }); + } + + async function closeWithoutSave() { + await Excel.run(async (context) => { + context.workbook.close(Excel.CloseBehavior.skipSave); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |- +
    +

    This sample shows how to save a workbook, both with and without a prompt to the user, and how to close the workbook.

    +
    + +
    +

    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 + + @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/samples/excel/85-preview-apis/worksheet-page-layout.yaml b/samples/excel/85-preview-apis/worksheet-page-layout.yaml index 6f6fc5538..ec155d0d8 100644 --- a/samples/excel/85-preview-apis/worksheet-page-layout.yaml +++ b/samples/excel/85-preview-apis/worksheet-page-layout.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 6 id: excel-worksheet-page-layout name: Page layout and print settings description: Changes the page layout and other settings for printing a worksheet. diff --git a/view/excel.json b/view/excel.json index 140cf283f..5c1c72d62 100644 --- a/view/excel.json +++ b/view/excel.json @@ -72,9 +72,11 @@ "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-areas.yaml", "excel-range-find": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-find.yaml", "excel-worksheet-find-all": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/worksheet-find-all.yaml", + "excel-worksheet-insert-external-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", "excel-worksheet-page-layout": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/worksheet-page-layout.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/performance-optimization.yaml", "excel-range-remove-duplicates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-remove-duplicates.yaml", + "excel-worksheet-save-and-close": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-save-and-close.yaml", "excel-just-for-fun-tetrominos": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/tetrominos.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/multiple-property-set.yaml", From fdd50c316ab320eb96dd1b1a5bcd5a946f26af67 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Tue, 8 Jan 2019 09:53:58 -0800 Subject: [PATCH 122/660] Updating default snippets (#249) * Updating default snippets * Remove package lock * Feedback --- samples/excel/default.yaml | 3 ++- samples/onenote/default.yaml | 16 ++++++++++++---- samples/outlook/default.yaml | 16 +++++++++++++--- samples/powerpoint/default.yaml | 13 +++++++++++-- samples/project/default.yaml | 13 +++++++++++-- samples/web/default.yaml | 15 ++++++++++++--- samples/word/default.yaml | 3 ++- 7 files changed, 63 insertions(+), 16 deletions(-) diff --git a/samples/excel/default.yaml b/samples/excel/default.yaml index 017fcb265..9877c96ef 100644 --- a/samples/excel/default.yaml +++ b/samples/excel/default.yaml @@ -11,8 +11,9 @@ script: async function run() { await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); - OfficeHelpers.UI.notify("Your code goes here"); + console.log("Your code goes here"); await context.sync(); }); diff --git a/samples/onenote/default.yaml b/samples/onenote/default.yaml index b1cd55397..5fa72bd11 100644 --- a/samples/onenote/default.yaml +++ b/samples/onenote/default.yaml @@ -11,8 +11,7 @@ script: async function run() { await OneNote.run(async (context) => { - - OfficeHelpers.UI.notify("Your code goes here"); + console.log("Your code goes here"); await context.sync(); }); @@ -36,8 +35,17 @@ template: language: html style: - content: | - /* Your style goes here */ + 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 diff --git a/samples/outlook/default.yaml b/samples/outlook/default.yaml index 88856c9ee..0d644a1a6 100644 --- a/samples/outlook/default.yaml +++ b/samples/outlook/default.yaml @@ -9,7 +9,8 @@ script: $("#run").click(run); function run() { - OfficeHelpers.UI.notify(`Hello ${Office.context.mailbox.userProfile.displayName}`); + const userProfile = Office.context.mailbox.userProfile; + console.log(`Hello ${userProfile.displayName}`); } language: typescript template: @@ -19,8 +20,17 @@ template: language: html style: - content: | - /* Your style goes here */ + 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 diff --git a/samples/powerpoint/default.yaml b/samples/powerpoint/default.yaml index e6696ccc7..0e8cf8991 100644 --- a/samples/powerpoint/default.yaml +++ b/samples/powerpoint/default.yaml @@ -25,8 +25,17 @@ template: language: html style: - content: | - /* Your style goes here */ + 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 diff --git a/samples/project/default.yaml b/samples/project/default.yaml index e3d70cd8c..680ee992f 100644 --- a/samples/project/default.yaml +++ b/samples/project/default.yaml @@ -25,8 +25,17 @@ template: language: html style: - content: | - /* Your style goes here */ + 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 diff --git a/samples/web/default.yaml b/samples/web/default.yaml index 5bb1cb16a..5767e0615 100644 --- a/samples/web/default.yaml +++ b/samples/web/default.yaml @@ -9,7 +9,7 @@ script: $("#run").click(run); function run() { - OfficeHelpers.UI.notify("Your code goes here"); + console.log("Your code goes here"); } language: typescript template: @@ -19,8 +19,17 @@ template: language: html style: - content: | - /* Your style goes here */ + 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: | office-ui-fabric-js@1.4.0/dist/css/fabric.min.css diff --git a/samples/word/default.yaml b/samples/word/default.yaml index c32b46f56..3d6036369 100644 --- a/samples/word/default.yaml +++ b/samples/word/default.yaml @@ -11,8 +11,9 @@ script: async function run() { await Word.run(async (context) => { + const body = context.document.body; - OfficeHelpers.UI.notify("Your code goes here"); + console.log("Your code goes here"); await context.sync(); }); From 845b50e9738de3f3f7d6e4dc81be5c3996420b4b Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 10 Jan 2019 11:28:25 -0800 Subject: [PATCH 123/660] Adding basic geometric shape sample (#251) --- playlists/excel.yaml | 11 ++ .../performance-optimization.yaml | 2 +- .../excel/85-preview-apis/range-areas.yaml | 2 +- .../excel/85-preview-apis/range-copyfrom.yaml | 2 +- samples/excel/85-preview-apis/range-find.yaml | 2 +- .../range-remove-duplicates.yaml | 2 +- .../shapes-create-and-delete.yaml | 130 ++++++++++++++++++ samples/excel/85-preview-apis/tetrominos.yaml | 2 +- .../workbook-insert-external-worksheets.yaml | 2 +- .../workbook-save-and-close.yaml | 2 +- .../85-preview-apis/worksheet-find-all.yaml | 2 +- .../worksheet-page-layout.yaml | 2 +- view/excel.json | 1 + 13 files changed, 152 insertions(+), 10 deletions(-) create mode 100644 samples/excel/85-preview-apis/shapes-create-and-delete.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 7fbfb9473..2c8608983 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -629,6 +629,17 @@ group: Worksheet api_set: ExcelApi: 1.1 +- id: excel-shapes-create-and-delete + name: Create and delete geometric shapes + fileName: shapes-create-and-delete.yaml + description: >- + Creates a few different geometric shapes and deletes them from the + worksheet. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/85-preview-apis/shapes-create-and-delete.yaml + group: Preview APIs + api_set: + ExcelApi: 1.9 - id: excel-range-copyfrom name: Copy and paste ranges fileName: range-copyfrom.yaml diff --git a/samples/excel/85-preview-apis/performance-optimization.yaml b/samples/excel/85-preview-apis/performance-optimization.yaml index c82ebad65..8e1a5bc69 100644 --- a/samples/excel/85-preview-apis/performance-optimization.yaml +++ b/samples/excel/85-preview-apis/performance-optimization.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 8 id: excel-performance-optimization name: Performance optimization description: Optimizes performance by untracking ranges and turning off screen painting. diff --git a/samples/excel/85-preview-apis/range-areas.yaml b/samples/excel/85-preview-apis/range-areas.yaml index 91994e0cd..a93c6b8df 100644 --- a/samples/excel/85-preview-apis/range-areas.yaml +++ b/samples/excel/85-preview-apis/range-areas.yaml @@ -1,4 +1,4 @@ -order: 2 +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.' diff --git a/samples/excel/85-preview-apis/range-copyfrom.yaml b/samples/excel/85-preview-apis/range-copyfrom.yaml index f93f9a05f..ccfa333e6 100644 --- a/samples/excel/85-preview-apis/range-copyfrom.yaml +++ b/samples/excel/85-preview-apis/range-copyfrom.yaml @@ -1,4 +1,4 @@ -order: 1 +order: 2 id: excel-range-copyfrom name: Copy and paste ranges description: Copies data and formatting from one range to another. diff --git a/samples/excel/85-preview-apis/range-find.yaml b/samples/excel/85-preview-apis/range-find.yaml index ca87f2521..c48f7046b 100644 --- a/samples/excel/85-preview-apis/range-find.yaml +++ b/samples/excel/85-preview-apis/range-find.yaml @@ -1,4 +1,4 @@ -order: 3 +order: 4 id: excel-range-find name: Find text matches within a range description: Finds a cell within a range based on string matching. diff --git a/samples/excel/85-preview-apis/range-remove-duplicates.yaml b/samples/excel/85-preview-apis/range-remove-duplicates.yaml index 4954b68e8..efd98e168 100644 --- a/samples/excel/85-preview-apis/range-remove-duplicates.yaml +++ b/samples/excel/85-preview-apis/range-remove-duplicates.yaml @@ -1,4 +1,4 @@ -order: 8 +order: 9 id: excel-range-remove-duplicates name: Remove duplicates description: Removes duplicate entries from a range. diff --git a/samples/excel/85-preview-apis/shapes-create-and-delete.yaml b/samples/excel/85-preview-apis/shapes-create-and-delete.yaml new file mode 100644 index 000000000..4ae0cc305 --- /dev/null +++ b/samples/excel/85-preview-apis/shapes-create-and-delete.yaml @@ -0,0 +1,130 @@ +order: 1 +id: excel-shapes-create-and-delete +name: Create and delete geometric shapes +description: Creates a few different geometric shapes and deletes them from the worksheet. +host: EXCEL +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)); + + async function createHexagon() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Shapes"); + const shape = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.hexagon, 5, 5, 225, 200); + await context.sync(); + }); + } + + async function createTriangle() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Shapes"); + const shape = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.triangle, 100, 300, 150, 200); + shape.rotation = 45 + shape.fill.clear(); + await context.sync(); + }); + } + + async function createSmileyFace() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Shapes"); + const shape = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.smileyFace, 300, 100, 100, 100); + shape.fill.foreColor = "yellow"; + await context.sync(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Shapes"); + const sheet = context.workbook.worksheets.getItem("Shapes"); + sheet.activate(); + await context.sync(); + }); + } + + async function removeAll() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Shapes"); + const shapes = sheet.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) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |- +
    +

    This sample shows how to create different shapes, then delele them.

    +
    +
    +

    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/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 + + @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/samples/excel/85-preview-apis/tetrominos.yaml b/samples/excel/85-preview-apis/tetrominos.yaml index 662390641..6fed502e8 100644 --- a/samples/excel/85-preview-apis/tetrominos.yaml +++ b/samples/excel/85-preview-apis/tetrominos.yaml @@ -1,4 +1,4 @@ -order: 10 +order: 11 id: excel-just-for-fun-tetrominos name: Tetromino stacking description: Arrange moving tetromino shapes to form lines. 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 9b2fd09c1..eabfc3ea9 100644 --- a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml +++ b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 6 id: excel-worksheet-insert-external-worksheets name: Insert external worksheets description: Inserts worksheets from another workbook into the current workbook. diff --git a/samples/excel/85-preview-apis/workbook-save-and-close.yaml b/samples/excel/85-preview-apis/workbook-save-and-close.yaml index 54c6078ec..29f0bf092 100644 --- a/samples/excel/85-preview-apis/workbook-save-and-close.yaml +++ b/samples/excel/85-preview-apis/workbook-save-and-close.yaml @@ -1,4 +1,4 @@ -order: 9 +order: 10 id: excel-worksheet-save-and-close name: Save and close description: Saves and closes a workbook. diff --git a/samples/excel/85-preview-apis/worksheet-find-all.yaml b/samples/excel/85-preview-apis/worksheet-find-all.yaml index 18b3758ca..c59f4d016 100644 --- a/samples/excel/85-preview-apis/worksheet-find-all.yaml +++ b/samples/excel/85-preview-apis/worksheet-find-all.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 5 id: excel-worksheet-find-all name: Find text matches within a worksheet description: Finds cells within a worksheet based on string matching. diff --git a/samples/excel/85-preview-apis/worksheet-page-layout.yaml b/samples/excel/85-preview-apis/worksheet-page-layout.yaml index ec155d0d8..81cb61845 100644 --- a/samples/excel/85-preview-apis/worksheet-page-layout.yaml +++ b/samples/excel/85-preview-apis/worksheet-page-layout.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 7 id: excel-worksheet-page-layout name: Page layout and print settings description: Changes the page layout and other settings for printing a worksheet. diff --git a/view/excel.json b/view/excel.json index 5c1c72d62..7f35b25fb 100644 --- a/view/excel.json +++ b/view/excel.json @@ -68,6 +68,7 @@ "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-visibility.yaml", + "excel-shapes-create-and-delete": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/shapes-create-and-delete.yaml", "excel-range-copyfrom": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-copyfrom.yaml", "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-areas.yaml", "excel-range-find": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-find.yaml", From 55f53a9a17383d0052a3b136e8814e4ee0196b17 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 17 Jan 2019 14:23:18 -0800 Subject: [PATCH 124/660] [excel] (Shapes) Adding shape moving and ordering snippet (#252) * Adding shape moving and ordering snippet * Fixing typos --- playlists/excel.yaml | 15 +- .../performance-optimization.yaml | 2 +- .../range-remove-duplicates.yaml | 2 +- ...lete.yaml => shape-create-and-delete.yaml} | 2 +- .../85-preview-apis/shape-move-and-order.yaml | 159 ++++++++++++++++++ samples/excel/85-preview-apis/tetrominos.yaml | 2 +- .../workbook-save-and-close.yaml | 2 +- .../worksheet-page-layout.yaml | 2 +- view/excel.json | 3 +- 9 files changed, 179 insertions(+), 10 deletions(-) rename samples/excel/85-preview-apis/{shapes-create-and-delete.yaml => shape-create-and-delete.yaml} (99%) create mode 100644 samples/excel/85-preview-apis/shape-move-and-order.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 2c8608983..e07384dc8 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -629,14 +629,14 @@ group: Worksheet api_set: ExcelApi: 1.1 -- id: excel-shapes-create-and-delete +- id: excel-shape-create-and-delete name: Create and delete geometric shapes - fileName: shapes-create-and-delete.yaml + fileName: shape-create-and-delete.yaml description: >- Creates a few different geometric shapes and deletes them from the worksheet. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/85-preview-apis/shapes-create-and-delete.yaml + https://raw.githubusercontent.com////samples/excel/85-preview-apis/shape-create-and-delete.yaml group: Preview APIs api_set: ExcelApi: 1.9 @@ -688,6 +688,15 @@ group: Preview APIs 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////samples/excel/85-preview-apis/shape-move-and-order.yaml + group: Preview APIs + api_set: + ExcelApi: 1.9 - id: excel-worksheet-page-layout name: Page layout and print settings fileName: worksheet-page-layout.yaml diff --git a/samples/excel/85-preview-apis/performance-optimization.yaml b/samples/excel/85-preview-apis/performance-optimization.yaml index 8e1a5bc69..c47ec2558 100644 --- a/samples/excel/85-preview-apis/performance-optimization.yaml +++ b/samples/excel/85-preview-apis/performance-optimization.yaml @@ -1,4 +1,4 @@ -order: 8 +order: 9 id: excel-performance-optimization name: Performance optimization description: Optimizes performance by untracking ranges and turning off screen painting. diff --git a/samples/excel/85-preview-apis/range-remove-duplicates.yaml b/samples/excel/85-preview-apis/range-remove-duplicates.yaml index efd98e168..e1175a018 100644 --- a/samples/excel/85-preview-apis/range-remove-duplicates.yaml +++ b/samples/excel/85-preview-apis/range-remove-duplicates.yaml @@ -1,4 +1,4 @@ -order: 9 +order: 10 id: excel-range-remove-duplicates name: Remove duplicates description: Removes duplicate entries from a range. diff --git a/samples/excel/85-preview-apis/shapes-create-and-delete.yaml b/samples/excel/85-preview-apis/shape-create-and-delete.yaml similarity index 99% rename from samples/excel/85-preview-apis/shapes-create-and-delete.yaml rename to samples/excel/85-preview-apis/shape-create-and-delete.yaml index 4ae0cc305..cc4b2e3e5 100644 --- a/samples/excel/85-preview-apis/shapes-create-and-delete.yaml +++ b/samples/excel/85-preview-apis/shape-create-and-delete.yaml @@ -1,5 +1,5 @@ order: 1 -id: excel-shapes-create-and-delete +id: excel-shape-create-and-delete name: Create and delete geometric shapes description: Creates a few different geometric shapes and deletes them from the worksheet. host: EXCEL diff --git a/samples/excel/85-preview-apis/shape-move-and-order.yaml b/samples/excel/85-preview-apis/shape-move-and-order.yaml new file mode 100644 index 000000000..df2947394 --- /dev/null +++ b/samples/excel/85-preview-apis/shape-move-and-order.yaml @@ -0,0 +1,159 @@ +order: 7 +id: excel-shape-move-and-order +name: Move and order shapes +description: Moves created shapes around the worksheet and adjusts their z-order. +host: EXCEL +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)); + + async function moveLeft() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Shapes"); + const shape = sheet.shapes.getItem("Square") + shape.incrementLeft(-25); + await context.sync(); + }); + } + + async function moveDown() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Shapes"); + const shape = sheet.shapes.getItem("Pentagon") + shape.incrementTop(25); + await context.sync(); + }); + } + + async function rotate() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Shapes"); + const shape = sheet.shapes.getItem("Pentagon") + shape.incrementRotation(30); + await context.sync(); + }); + } + + async function scaleUp() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Shapes"); + const shape = sheet.shapes.getItem("Octagon") + shape.scaleHeight(1.25, Excel.ShapeScaleType.currentSize); + shape.scaleWidth(1.25, Excel.ShapeScaleType.currentSize); + await context.sync(); + }); + } + + async function moveZOrderDown() { + 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(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Shapes"); + const sheet = context.workbook.worksheets.getItem("Shapes"); + sheet.activate(); + await context.sync(); + }); + } + + async function createShapes() { + await Excel.run(async (context) => { + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const rectangle = shapes.addGeometricShape(Excel.GeometricShapeType.rectangle, 100, 100, 150, 150); + rectangle.name = "Square"; + rectangle.fill.setSolidColor("green"); + const pentagon = shapes.addGeometricShape(Excel.GeometricShapeType.pentagon, 125, 125, 100, 100); + pentagon.name = "Pentagon"; + pentagon.fill.setSolidColor("purple"); + const octagon = shapes.addGeometricShape(Excel.GeometricShapeType.octagon, 150, 150, 50, 50); + octagon.name = "Octagon"; + octagon.fill.setSolidColor("red"); + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |- +
    +

    This sample shows how to change the position of shapes, both on the worksheet and their relative positioning when stacked.

    +
    +
    +

    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/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 + + @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/samples/excel/85-preview-apis/tetrominos.yaml b/samples/excel/85-preview-apis/tetrominos.yaml index 6fed502e8..719a31978 100644 --- a/samples/excel/85-preview-apis/tetrominos.yaml +++ b/samples/excel/85-preview-apis/tetrominos.yaml @@ -1,4 +1,4 @@ -order: 11 +order: 12 id: excel-just-for-fun-tetrominos name: Tetromino stacking description: Arrange moving tetromino shapes to form lines. diff --git a/samples/excel/85-preview-apis/workbook-save-and-close.yaml b/samples/excel/85-preview-apis/workbook-save-and-close.yaml index 29f0bf092..ccc661dd2 100644 --- a/samples/excel/85-preview-apis/workbook-save-and-close.yaml +++ b/samples/excel/85-preview-apis/workbook-save-and-close.yaml @@ -1,4 +1,4 @@ -order: 10 +order: 11 id: excel-worksheet-save-and-close name: Save and close description: Saves and closes a workbook. diff --git a/samples/excel/85-preview-apis/worksheet-page-layout.yaml b/samples/excel/85-preview-apis/worksheet-page-layout.yaml index 81cb61845..5c7caf518 100644 --- a/samples/excel/85-preview-apis/worksheet-page-layout.yaml +++ b/samples/excel/85-preview-apis/worksheet-page-layout.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 8 id: excel-worksheet-page-layout name: Page layout and print settings description: Changes the page layout and other settings for printing a worksheet. diff --git a/view/excel.json b/view/excel.json index 7f35b25fb..38d869475 100644 --- a/view/excel.json +++ b/view/excel.json @@ -68,12 +68,13 @@ "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-visibility.yaml", - "excel-shapes-create-and-delete": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/shapes-create-and-delete.yaml", + "excel-shape-create-and-delete": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/shape-create-and-delete.yaml", "excel-range-copyfrom": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-copyfrom.yaml", "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-areas.yaml", "excel-range-find": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-find.yaml", "excel-worksheet-find-all": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/worksheet-find-all.yaml", "excel-worksheet-insert-external-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", + "excel-shape-move-and-order": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/shape-move-and-order.yaml", "excel-worksheet-page-layout": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/worksheet-page-layout.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/performance-optimization.yaml", "excel-range-remove-duplicates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-remove-duplicates.yaml", From 99c5f42e9171086eea8742179cff13136cde258b Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Tue, 22 Jan 2019 10:07:52 -0800 Subject: [PATCH 125/660] Adding a createPresentation sample for PowerPoint (#253) * Initial setup * Merging * Adding createPresentation sample * Fix typo --- playlists/powerpoint.yaml | 33 ++++--- .../basics/basic-common-api-call.yaml | 15 +++- .../basics/create-presentation.yaml | 90 +++++++++++++++++++ .../powerpoint/basics/get-slide-metadata.yaml | 50 +++-------- samples/powerpoint/basics/insert-image.yaml | 41 +++------ view/powerpoint.json | 5 +- 6 files changed, 152 insertions(+), 82 deletions(-) create mode 100644 samples/powerpoint/basics/create-presentation.yaml diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index ca8001efd..a9b4eed07 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -1,3 +1,25 @@ +- 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////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////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 @@ -14,14 +36,3 @@ https://raw.githubusercontent.com////samples/powerpoint/basics/insert-image.yaml group: Basics api_set: {} -- 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////samples/powerpoint/basics/basic-common-api-call.yaml - group: Basics - api_set: - Selection: 1.1 diff --git a/samples/powerpoint/basics/basic-common-api-call.yaml b/samples/powerpoint/basics/basic-common-api-call.yaml index 4cb7c4da7..fce08b980 100644 --- a/samples/powerpoint/basics/basic-common-api-call.yaml +++ b/samples/powerpoint/basics/basic-common-api-call.yaml @@ -1,4 +1,4 @@ -order: 1000 +order: 1 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). @@ -27,8 +27,17 @@ template: language: html style: - content: | - /* Your style goes here */ + 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 diff --git a/samples/powerpoint/basics/create-presentation.yaml b/samples/powerpoint/basics/create-presentation.yaml new file mode 100644 index 000000000..68211cbc7 --- /dev/null +++ b/samples/powerpoint/basics/create-presentation.yaml @@ -0,0 +1,90 @@ +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.' +author: OfficeDev +host: POWERPOINT +api_set: + PowerPoint: 1.1 +script: + content: | + $("#create-new-blank-presentation").click(() => tryCatch(createBlankPresentation)); + $("#file").change(() => tryCatch(createPresentationFromExisting)); + + function createBlankPresentation() { + PowerPoint.createPresentation(); + } + + function createPresentationFromExisting() { + const myFile = document.getElementById("file"); + const reader = new FileReader(); + + reader.onload = (event) => { + // strip off the metadata before the base64-encoded string + const startIndex = ((event.target).result).indexOf("base64,"); + const copyBase64 = ((event.target).result).substr(startIndex + 7); + + PowerPoint.createPresentation(copyBase64); + }; + + // read in the file as a data URL so 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) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } + } + language: typescript +template: + content: |- +
    +

    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

    +

    +

    Copy existing presentation

    +

    Select a PowerPoint presentation to copy and open in a new instance of PowerPoint.

    +
    + +
    +
    + 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 + + @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/samples/powerpoint/basics/get-slide-metadata.yaml b/samples/powerpoint/basics/get-slide-metadata.yaml index 67d7e4860..78fab1714 100644 --- a/samples/powerpoint/basics/get-slide-metadata.yaml +++ b/samples/powerpoint/basics/get-slide-metadata.yaml @@ -1,3 +1,4 @@ +order: 3 id: powerpoint-basics-get-slide-metadata name: Get slide metadata description: 'Gets the title, index, and ID of the selected slide(s).' @@ -21,51 +22,28 @@ 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).

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

    +
    - language: html style: content: |- - body { - margin: 0; - padding: 10px; - } - - - /* Button customization, including overwriting some Fabric defaults */ - - .ms-Button, .ms-Button:focus { - background: #b7472a; - border: #b7472a; + section.samples { + margin-top: 20px; } - .ms-Button > .ms-Button-label, - .ms-Button:focus > .ms-Button-label, - .ms-Button:hover > .ms-Button-label { - color: white; - } - - .ms-Button:hover, .ms-Button:active { - background: #8e3720; - } - - .ms-Button.is-disabled, .ms-Button:disabled { - background-color: #f4f4f4; - border-color: #f4f4f4; - } - - .ms-Button.is-disabled .ms-Button-label, - .ms-Button:disabled .ms-Button-label { - color: #a6a6a6; - } - - + 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 diff --git a/samples/powerpoint/basics/insert-image.yaml b/samples/powerpoint/basics/insert-image.yaml index dca742971..fdd99e5b5 100644 --- a/samples/powerpoint/basics/insert-image.yaml +++ b/samples/powerpoint/basics/insert-image.yaml @@ -1,3 +1,4 @@ +order: 4 id: powerpoint-basics-insert-image name: Insert Image description: Inserts an image to the current slide. @@ -31,7 +32,9 @@ script: language: typescript template: content: |- -

    Insert an image into the current slide.

    +
    +

    Insert an image into the current slide.

    +
    +
    +
    +

    Try it out

    +

    Select an image file (JPEG or PNG).

    +

    +

    Use the following buttons to work with the image 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/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 + + @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/samples/excel/85-preview-apis/tetrominos.yaml b/samples/excel/85-preview-apis/tetrominos.yaml index 719a31978..38407b5f1 100644 --- a/samples/excel/85-preview-apis/tetrominos.yaml +++ b/samples/excel/85-preview-apis/tetrominos.yaml @@ -1,4 +1,4 @@ -order: 12 +order: 13 id: excel-just-for-fun-tetrominos name: Tetromino stacking description: Arrange moving tetromino shapes to form lines. 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 eabfc3ea9..776068a0f 100644 --- a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml +++ b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 7 id: excel-worksheet-insert-external-worksheets name: Insert external worksheets description: Inserts worksheets from another workbook into the current workbook. diff --git a/samples/excel/85-preview-apis/workbook-save-and-close.yaml b/samples/excel/85-preview-apis/workbook-save-and-close.yaml index ccc661dd2..30e10bb3d 100644 --- a/samples/excel/85-preview-apis/workbook-save-and-close.yaml +++ b/samples/excel/85-preview-apis/workbook-save-and-close.yaml @@ -1,4 +1,4 @@ -order: 11 +order: 12 id: excel-worksheet-save-and-close name: Save and close description: Saves and closes a workbook. diff --git a/samples/excel/85-preview-apis/worksheet-page-layout.yaml b/samples/excel/85-preview-apis/worksheet-page-layout.yaml index 5c7caf518..fc224e9bf 100644 --- a/samples/excel/85-preview-apis/worksheet-page-layout.yaml +++ b/samples/excel/85-preview-apis/worksheet-page-layout.yaml @@ -1,4 +1,4 @@ -order: 8 +order: 9 id: excel-worksheet-page-layout name: Page layout and print settings description: Changes the page layout and other settings for printing a worksheet. diff --git a/view/excel.json b/view/excel.json index 38d869475..dacd39380 100644 --- a/view/excel.json +++ b/view/excel.json @@ -73,6 +73,7 @@ "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-areas.yaml", "excel-range-find": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-find.yaml", "excel-worksheet-find-all": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/worksheet-find-all.yaml", + "excel-shape-images": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/shapes-images.yaml", "excel-worksheet-insert-external-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", "excel-shape-move-and-order": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/shape-move-and-order.yaml", "excel-worksheet-page-layout": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/worksheet-page-layout.yaml", From 5e0ab795814b9da8f2179c613b1d374bcb6e0054 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Tue, 29 Jan 2019 14:06:34 -0800 Subject: [PATCH 127/660] Increasing accuracy of ChartCollection event snippet description (#256) * Increasing accuracy of ChartCollection event snippet * Updating descriptions to distingush between chart and chart collection snippets --- playlists/excel.yaml | 9 +++++---- samples/excel/30-events/events-chart-activated.yaml | 2 +- .../events-chartcollection-added-activated.yaml | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index c5348cda3..b791a0d99 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -217,8 +217,9 @@ name: Chart collection events fileName: events-chartcollection-added-activated.yaml description: >- - Registers event handlers that run when a chart collection is activated, - deactivated, added, or deleted. + 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////samples/excel/30-events/events-chartcollection-added-activated.yaml group: Events @@ -228,8 +229,8 @@ name: Chart events fileName: events-chart-activated.yaml description: >- - Registers event handlers that run when the chart is activated or - deactivated. + Registers event handlers on an individual chart that run when the chart is + activated or deactivated. rawUrl: >- https://raw.githubusercontent.com////samples/excel/30-events/events-chart-activated.yaml group: Events diff --git a/samples/excel/30-events/events-chart-activated.yaml b/samples/excel/30-events/events-chart-activated.yaml index 9396b1c5d..be46e42b5 100644 --- a/samples/excel/30-events/events-chart-activated.yaml +++ b/samples/excel/30-events/events-chart-activated.yaml @@ -1,7 +1,7 @@ order: 2 id: excel-events-chart-activated name: Chart events -description: Registers event handlers that run when the chart is activated or deactivated. +description: Registers event handlers on an individual chart that run when the chart is activated or deactivated. host: EXCEL api_set: ExcelApi: 1.8 diff --git a/samples/excel/30-events/events-chartcollection-added-activated.yaml b/samples/excel/30-events/events-chartcollection-added-activated.yaml index 2714161fd..4f366fd0e 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 that run when a chart collection is activated, deactivated, added, or deleted.' +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 From 466c48c2f4d4cc26434bc30384bf0345b950c401 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 30 Jan 2019 12:59:06 -0800 Subject: [PATCH 128/660] PPT sample for adding an SVG file (#258) --- playlists/powerpoint.yaml | 8 +++ samples/powerpoint/basics/insert-svg.yaml | 74 +++++++++++++++++++++++ view/powerpoint.json | 3 +- 3 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 samples/powerpoint/basics/insert-svg.yaml diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index a9b4eed07..e3a97d4f5 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -36,3 +36,11 @@ https://raw.githubusercontent.com////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////samples/powerpoint/basics/insert-svg.yaml + group: Basics + api_set: {} diff --git a/samples/powerpoint/basics/insert-svg.yaml b/samples/powerpoint/basics/insert-svg.yaml new file mode 100644 index 000000000..4f76d7a05 --- /dev/null +++ b/samples/powerpoint/basics/insert-svg.yaml @@ -0,0 +1,74 @@ +order: 5 +id: powerpoint-basics-insert-svg +name: Insert SVG +description: Inserts an SVG image using an XML string. +author: OfficeDev +host: POWERPOINT +api_set: {} +script: + content: | + $('#insert').click(newImage); + + function newImage() { + Office.context.document.setSelectedDataAsync(getImageAsBase64String(), { + coercionType: Office.CoercionType.XmlSvg, + imageLeft: 50, + imageTop: 50, + imageWidth: 400 + }, + function (asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(asyncResult.error.message); + } + }); + } + + 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 base 64. + var svg = " SVG Logo SVG "; + return svg; + } + language: typescript +template: + content: |- +
    +

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

    +
    + +
    +

    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 + + @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/view/powerpoint.json b/view/powerpoint.json index ebb76bd84..6933adf99 100644 --- a/view/powerpoint.json +++ b/view/powerpoint.json @@ -2,5 +2,6 @@ "powerpoint-basics-basic-common-api-call": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/powerpoint/basics/basic-common-api-call.yaml", "powerpoint-create-presentation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/powerpoint/basics/create-presentation.yaml", "powerpoint-basics-get-slide-metadata": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/powerpoint/basics/get-slide-metadata.yaml", - "powerpoint-basics-insert-image": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/powerpoint/basics/insert-image.yaml" + "powerpoint-basics-insert-image": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/powerpoint/basics/insert-image.yaml", + "powerpoint-basics-insert-svg": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/powerpoint/basics/insert-svg.yaml" } \ No newline at end of file From f7c9193429297f8826924d48fce07937c11acd8d Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Tue, 5 Feb 2019 09:37:11 -0800 Subject: [PATCH 129/660] Adding focus button to tetromino snippet (#255) * Adding focus button to tetromino snippet * Update instruction --- samples/excel/85-preview-apis/tetrominos.yaml | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/samples/excel/85-preview-apis/tetrominos.yaml b/samples/excel/85-preview-apis/tetrominos.yaml index 38407b5f1..bc9f958d9 100644 --- a/samples/excel/85-preview-apis/tetrominos.yaml +++ b/samples/excel/85-preview-apis/tetrominos.yaml @@ -10,10 +10,12 @@ script: content: |- $("#run").click(() => { $("#setup").hide(); - tryCatch(run) + tryCatch(run); }); $("#selectedFile").change(() => tryCatch(readImageFromFile)); + $("#focusButton").click(() => tryCatch(focus)); + let backgroundPicture = getDefaultBackgroundPicture(); @@ -31,13 +33,17 @@ script: reader.readAsDataURL(myFile.files[0]); } + function focus() { + $("#container").focus(); + } + async function run() { await Excel.run(async (ctx) => { const shapes = ctx.workbook.worksheets.getActiveWorksheet().shapes; shapes.load("items/$none"); await ctx.sync(); - shapes.items.forEach(shape => shape.delete()); + shapes.items.forEach((shape) => shape.delete()); await ctx.sync(); const img = shapes.addImage(backgroundPicture); @@ -617,6 +623,7 @@ script: await run($("#container")[0], $("#sessionPane")[0]); $("#container").focus(); + $("#focus").show(); }); } @@ -641,7 +648,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.

    -

    Note: Focus must be on the task pane to move the shapes.

    @@ -655,6 +661,13 @@ template:
    +

    +

    language: html style: From ffff7a615de2fcc638d6c8b6fb504978801cd363 Mon Sep 17 00:00:00 2001 From: Alex Jerabek Date: Thu, 7 Feb 2019 16:50:37 -0800 Subject: [PATCH 130/660] [admin] Updating lodash version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 052d25bc7..715c2b248 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "escape-string-regexp": "^1.0.5", "excel": "^0.1.7", "js-yaml": "3.7.0", - "lodash": "4.17.5", + "lodash": "4.17.11", "node-status": "1.0.0", "rimraf": "2.5.4", "rxjs": "5.2.0", From 1d41799439cd1a1ff3ef8c247c965e39b1d690fb Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Mon, 11 Feb 2019 11:23:12 -0800 Subject: [PATCH 131/660] Moving and renaming settings snippet (#261) --- playlists/excel.yaml | 20 ++++++++++--------- .../create-get-change-delete-settings.yaml | 8 ++++---- .../excel/50-workbook/create-workbook.yaml | 2 +- .../excel/50-workbook/data-protection.yaml | 2 +- view/excel.json | 2 +- 5 files changed, 18 insertions(+), 16 deletions(-) rename samples/excel/{26-document => 50-workbook}/create-get-change-delete-settings.yaml (95%) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index b791a0d99..da613ab74 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -204,15 +204,6 @@ group: Document api_set: ExcelApi: 1.7 -- id: excel-settings-create-get-change-delete-settings - name: Settings - fileName: create-get-change-delete-settings.yaml - description: 'Creates, gets, changes, and deletes settings in the document.' - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/26-document/create-get-change-delete-settings.yaml - group: Document - api_set: - ExcelApi: 1.4 - id: excel-events-chartcollection-added-activated name: Chart collection events fileName: events-chartcollection-added-activated.yaml @@ -516,6 +507,17 @@ 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////samples/excel/50-workbook/create-get-change-delete-settings.yaml + group: Workbook + api_set: + ExcelApi: 1.4 - id: excel-workbook-create-workbook name: Create workbook fileName: create-workbook.yaml diff --git a/samples/excel/26-document/create-get-change-delete-settings.yaml b/samples/excel/50-workbook/create-get-change-delete-settings.yaml similarity index 95% rename from samples/excel/26-document/create-get-change-delete-settings.yaml rename to samples/excel/50-workbook/create-get-change-delete-settings.yaml index deec7a2f1..1a076b5d2 100644 --- a/samples/excel/26-document/create-get-change-delete-settings.yaml +++ b/samples/excel/50-workbook/create-get-change-delete-settings.yaml @@ -1,7 +1,7 @@ -order: 3 +order: 2 id: excel-settings-create-get-change-delete-settings -name: Settings -description: 'Creates, gets, changes, and deletes settings in the document.' +name: Add-in settings +description: 'Creates, gets, changes, and deletes settings that are unique to the specific workbook and add-in combination.' author: OfficeDev host: EXCEL api_set: @@ -75,7 +75,7 @@ script: template: content: |-
    -

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

    +

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

    diff --git a/samples/excel/50-workbook/create-workbook.yaml b/samples/excel/50-workbook/create-workbook.yaml index aea4eb3ce..b37620ab1 100644 --- a/samples/excel/50-workbook/create-workbook.yaml +++ b/samples/excel/50-workbook/create-workbook.yaml @@ -1,4 +1,4 @@ -order: 2 +order: 3 id: excel-workbook-create-workbook name: Create workbook description: 'Creates a new, empty workbook and creates a new workbook by copying an existing one.' diff --git a/samples/excel/50-workbook/data-protection.yaml b/samples/excel/50-workbook/data-protection.yaml index 808a3ea83..0b485a2ef 100644 --- a/samples/excel/50-workbook/data-protection.yaml +++ b/samples/excel/50-workbook/data-protection.yaml @@ -1,4 +1,4 @@ -order: 3 +order: 4 id: excel-workbook-data-protection name: Data protection description: Protects data in a worksheet and the workbook structure. diff --git a/view/excel.json b/view/excel.json index dacd39380..7415e6238 100644 --- a/view/excel.json +++ b/view/excel.json @@ -23,7 +23,6 @@ "excel-data-validation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/22-data-validation/data-validation.yaml", "excel-document-get-file-in-slices-async": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/26-document/get-file-in-slices-async.yaml", "excel-document-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/26-document/properties.yaml", - "excel-settings-create-get-change-delete-settings": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/26-document/create-get-change-delete-settings.yaml", "excel-events-chartcollection-added-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-chartcollection-added-activated.yaml", "excel-events-chart-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-chart-activated.yaml", "excel-events-data-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/data-changed.yaml", @@ -56,6 +55,7 @@ "excel-table-sort-data": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/sort-data.yaml", "excel-table-style": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/style.yaml", "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/workbook-get-active-cell.yaml", + "excel-settings-create-get-change-delete-settings": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/create-get-change-delete-settings.yaml", "excel-workbook-create-workbook": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/create-workbook.yaml", "excel-workbook-data-protection": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/data-protection.yaml", "excel-worksheet-active-worksheet": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/active-worksheet.yaml", From 991f2a38081fa51873affa0a646920c15f94a928 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 15 Feb 2019 16:29:11 -0800 Subject: [PATCH 132/660] [all] (ScriptLab UI) Switching out OfficeHelpers.UI.notify/log in favor of console.log/error (#262) * Switching out OfficeHelpers.UI.notify/log in favor of console * Remove package lock * Minor cleanup * Update samples/excel/30-events/events-workbook-and-worksheet-collection.yaml Co-Authored-By: AlexJerabek <38896772+AlexJerabek@users.noreply.github.com> --- .../excel/01-basics/basic-api-call-es5.yaml | 4 ++-- samples/excel/01-basics/basic-api-call.yaml | 4 ++-- .../01-basics/basic-common-api-call.yaml | 2 +- .../excel/10-chart/chart-axis-formatting.yaml | 4 ++-- samples/excel/10-chart/chart-axis.yaml | 4 ++-- .../10-chart/chart-create-several-charts.yaml | 4 ++-- samples/excel/10-chart/chart-formatting.yaml | 4 ++-- 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 | 4 ++-- .../excel/10-chart/chart-title-format.yaml | 4 ++-- samples/excel/10-chart/chart-trendlines.yaml | 4 ++-- .../excel/10-chart/create-doughnut-chart.yaml | 4 ++-- .../conditional-formatting-advanced.yaml | 4 ++-- .../conditional-formatting-basic.yaml | 4 ++-- ...e-set-get-and-delete-custom-xml-parts.yaml | 4 ++-- .../test-xml-for-unique-namespace.yaml | 7 +++---- .../22-data-validation/data-validation.yaml | 5 +++-- .../26-document/get-file-in-slices-async.yaml | 10 ++++------ samples/excel/26-document/properties.yaml | 4 ++-- samples/excel/30-events/data-changed.yaml | 4 ++-- .../30-events/events-chart-activated.yaml | 4 ++-- ...vents-chartcollection-added-activated.yaml | 4 ++-- .../30-events/events-disable-events.yaml | 4 ++-- .../excel/30-events/events-table-changed.yaml | 4 ++-- .../events-tablecollection-changed.yaml | 4 ++-- ...nts-workbook-and-worksheet-collection.yaml | 8 ++++---- samples/excel/30-events/events-worksheet.yaml | 6 +++--- .../create-and-remove-named-item.yaml | 4 ++-- .../34-named-item/update-named-item.yaml | 8 ++++---- .../pivottable-calculations.yaml | 4 ++-- .../pivottable-create-and-modify.yaml | 4 ++-- .../pivottable-filters-and-summaries.yaml | 4 ++-- samples/excel/42-range/formatting.yaml | 4 ++-- .../42-range/insert-delete-clear-range.yaml | 4 ++-- samples/excel/42-range/range-hyperlink.yaml | 4 ++-- .../excel/42-range/range-relationships.yaml | 9 ++++----- .../42-range/range-text-orientation.yaml | 4 ++-- samples/excel/42-range/selected-range.yaml | 4 ++-- samples/excel/42-range/set-get-values.yaml | 4 ++-- samples/excel/42-range/used-range.yaml | 10 ++++------ .../add-rows-and-columns-to-a-table.yaml | 4 ++-- .../46-table/convert-range-to-table.yaml | 4 ++-- samples/excel/46-table/create-table.yaml | 4 ++-- samples/excel/46-table/filter-data.yaml | 4 ++-- samples/excel/46-table/formatting.yaml | 4 ++-- .../excel/46-table/get-data-from-table.yaml | 4 ++-- ...get-visible-range-of-a-filtered-table.yaml | 4 ++-- samples/excel/46-table/import-json-data.yaml | 4 ++-- samples/excel/46-table/sort-data.yaml | 4 ++-- samples/excel/46-table/style.yaml | 4 ++-- .../create-get-change-delete-settings.yaml | 4 ++-- .../excel/50-workbook/create-workbook.yaml | 4 ++-- .../excel/50-workbook/data-protection.yaml | 7 +++---- .../50-workbook/workbook-get-active-cell.yaml | 4 ++-- .../excel/54-worksheet/active-worksheet.yaml | 4 ++-- .../add-delete-rename-move-worksheet.yaml | 4 ++-- samples/excel/54-worksheet/gridlines.yaml | 4 ++-- .../excel/54-worksheet/list-worksheets.yaml | 4 ++-- ...rence-worksheets-by-relative-position.yaml | 4 ++-- samples/excel/54-worksheet/tab-color.yaml | 4 ++-- .../excel/54-worksheet/worksheet-copy.yaml | 4 ++-- .../54-worksheet/worksheet-freeze-panes.yaml | 6 +++--- .../54-worksheet/worksheet-range-cell.yaml | 4 ++-- .../54-worksheet/worksheet-visibility.yaml | 4 ++-- .../performance-optimization.yaml | 4 ++-- .../excel/85-preview-apis/range-areas.yaml | 4 ++-- .../excel/85-preview-apis/range-copyfrom.yaml | 4 ++-- samples/excel/85-preview-apis/range-find.yaml | 4 ++-- .../range-remove-duplicates.yaml | 4 ++-- .../shape-create-and-delete.yaml | 4 ++-- .../85-preview-apis/shape-move-and-order.yaml | 4 ++-- .../excel/85-preview-apis/shapes-images.yaml | 4 ++-- samples/excel/85-preview-apis/tetrominos.yaml | 5 ++--- .../workbook-insert-external-worksheets.yaml | 4 ++-- .../workbook-save-and-close.yaml | 4 ++-- .../85-preview-apis/worksheet-find-all.yaml | 4 ++-- .../worksheet-page-layout.yaml | 4 ++-- .../90-scenarios/multiple-property-set.yaml | 4 ++-- .../excel/90-scenarios/report-generation.yaml | 4 ++-- .../90-scenarios/working-with-dates.yaml | 4 ++-- .../excel/99-just-for-fun/color-wheel.yaml | 5 +++-- .../99-just-for-fun/path-finder-game.yaml | 4 ++-- samples/excel/99-just-for-fun/patterns.yaml | 4 ++-- samples/excel/default.yaml | 4 ++-- samples/onenote/default.yaml | 4 ++-- .../01-compose-basics/get-item-subject.yaml | 4 ++-- .../01-compose-basics/get-selected-text.yaml | 4 ++-- .../01-compose-basics/set-selected-text.yaml | 2 +- .../basics/basic-common-api-call.yaml | 2 +- .../basics/create-presentation.yaml | 4 ++-- .../powerpoint/basics/get-slide-metadata.yaml | 2 +- samples/powerpoint/basics/insert-svg.yaml | 2 +- samples/powerpoint/default.yaml | 2 +- .../project/basics/basic-common-api-call.yaml | 2 +- samples/project/default.yaml | 2 +- .../word/01-basics/basic-api-call-es5.yaml | 4 ++-- samples/word/01-basics/basic-api-call.yaml | 4 ++-- .../word/01-basics/basic-common-api-call.yaml | 2 +- .../insert-and-change-content-controls.yaml | 4 ++-- .../15-images/insert-and-get-pictures.yaml | 4 ++-- samples/word/20-lists/insert-list.yaml | 4 ++-- .../get-paragraph-on-insertion-point.yaml | 4 ++-- .../25-paragraph/insert-formatted-text.yaml | 12 ++++++------ .../insert-header-and-footer.yaml | 4 ++-- .../insert-in-different-locations.yaml | 4 ++-- .../insert-line-and-page-breaks.yaml | 4 ++-- .../25-paragraph/paragraph-properties.yaml | 4 ++-- samples/word/25-paragraph/search.yaml | 4 ++-- .../get-built-in-properties.yaml | 4 ++-- ...read-write-custom-document-properties.yaml | 4 ++-- samples/word/35-ranges/scroll-to-range.yaml | 4 ++-- .../split-words-of-first-paragraph.yaml | 4 ++-- samples/word/40-tables/table-cell-access.yaml | 4 ++-- samples/word/90-scenarios/doc-assembly.yaml | 4 ++-- .../90-scenarios/multiple-property-set.yaml | 4 ++-- samples/word/default.yaml | 4 ++-- snippet-extractor-output/snippets.yaml | 19 +++++++------------ 120 files changed, 256 insertions(+), 267 deletions(-) diff --git a/samples/excel/01-basics/basic-api-call-es5.yaml b/samples/excel/01-basics/basic-api-call-es5.yaml index de7f35618..94f0d2a33 100644 --- a/samples/excel/01-basics/basic-api-call-es5.yaml +++ b/samples/excel/01-basics/basic-api-call-es5.yaml @@ -27,8 +27,8 @@ script: Promise.resolve() .then(callback) .catch(function (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/01-basics/basic-api-call.yaml b/samples/excel/01-basics/basic-api-call.yaml index 3d91c1d6c..ee1ca630f 100644 --- a/samples/excel/01-basics/basic-api-call.yaml +++ b/samples/excel/01-basics/basic-api-call.yaml @@ -28,8 +28,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/01-basics/basic-common-api-call.yaml b/samples/excel/01-basics/basic-common-api-call.yaml index 656cf6653..a5284b800 100644 --- a/samples/excel/01-basics/basic-common-api-call.yaml +++ b/samples/excel/01-basics/basic-common-api-call.yaml @@ -15,7 +15,7 @@ script: Office.CoercionType.Text, asyncResult => { if (asyncResult.status === Office.AsyncResultStatus.Failed) { - console.log(asyncResult.error.message); + console.error(asyncResult.error.message); } else { console.log(`The selected data is "${asyncResult.value}".`); } diff --git a/samples/excel/10-chart/chart-axis-formatting.yaml b/samples/excel/10-chart/chart-axis-formatting.yaml index 367c53394..7b7b6c0d0 100644 --- a/samples/excel/10-chart/chart-axis-formatting.yaml +++ b/samples/excel/10-chart/chart-axis-formatting.yaml @@ -110,8 +110,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/10-chart/chart-axis.yaml b/samples/excel/10-chart/chart-axis.yaml index 0d35cdbd6..23ffd6a41 100644 --- a/samples/excel/10-chart/chart-axis.yaml +++ b/samples/excel/10-chart/chart-axis.yaml @@ -163,8 +163,8 @@ script: try { await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/10-chart/chart-create-several-charts.yaml b/samples/excel/10-chart/chart-create-several-charts.yaml index c741f56f0..b70ef4de8 100644 --- a/samples/excel/10-chart/chart-create-several-charts.yaml +++ b/samples/excel/10-chart/chart-create-several-charts.yaml @@ -255,8 +255,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/10-chart/chart-formatting.yaml b/samples/excel/10-chart/chart-formatting.yaml index 94f114969..72d312e7e 100644 --- a/samples/excel/10-chart/chart-formatting.yaml +++ b/samples/excel/10-chart/chart-formatting.yaml @@ -162,8 +162,8 @@ script: try { await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/10-chart/chart-legend.yaml b/samples/excel/10-chart/chart-legend.yaml index dc145715e..7f1b67b9f 100644 --- a/samples/excel/10-chart/chart-legend.yaml +++ b/samples/excel/10-chart/chart-legend.yaml @@ -94,8 +94,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/10-chart/chart-point.yaml b/samples/excel/10-chart/chart-point.yaml index 0b63b623e..c76d12ca5 100644 --- a/samples/excel/10-chart/chart-point.yaml +++ b/samples/excel/10-chart/chart-point.yaml @@ -76,8 +76,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); } } diff --git a/samples/excel/10-chart/chart-series-markers.yaml b/samples/excel/10-chart/chart-series-markers.yaml index e29482f0b..853e41a05 100644 --- a/samples/excel/10-chart/chart-series-markers.yaml +++ b/samples/excel/10-chart/chart-series-markers.yaml @@ -75,8 +75,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/10-chart/chart-series-plotorder.yaml b/samples/excel/10-chart/chart-series-plotorder.yaml index b5dda452b..4c3878eac 100644 --- a/samples/excel/10-chart/chart-series-plotorder.yaml +++ b/samples/excel/10-chart/chart-series-plotorder.yaml @@ -86,8 +86,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/10-chart/chart-series.yaml b/samples/excel/10-chart/chart-series.yaml index e6c303a17..807debc29 100644 --- a/samples/excel/10-chart/chart-series.yaml +++ b/samples/excel/10-chart/chart-series.yaml @@ -99,8 +99,8 @@ script: try { await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/10-chart/chart-title-format.yaml b/samples/excel/10-chart/chart-title-format.yaml index 7a05e9caf..b89f0e6e2 100644 --- a/samples/excel/10-chart/chart-title-format.yaml +++ b/samples/excel/10-chart/chart-title-format.yaml @@ -98,8 +98,8 @@ script: try { await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/10-chart/chart-trendlines.yaml b/samples/excel/10-chart/chart-trendlines.yaml index 4d66d23f7..3b052e984 100644 --- a/samples/excel/10-chart/chart-trendlines.yaml +++ b/samples/excel/10-chart/chart-trendlines.yaml @@ -132,8 +132,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); } } diff --git a/samples/excel/10-chart/create-doughnut-chart.yaml b/samples/excel/10-chart/create-doughnut-chart.yaml index a7102c036..168c9f04b 100644 --- a/samples/excel/10-chart/create-doughnut-chart.yaml +++ b/samples/excel/10-chart/create-doughnut-chart.yaml @@ -95,8 +95,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml index c7b06ab1b..5b4d28cfe 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml @@ -171,8 +171,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml index 6b0b20e56..f00248b2d 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -266,8 +266,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 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 89759290c..8013d57e2 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 @@ -97,8 +97,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 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 06f890c79..3d0ea3607 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 @@ -55,8 +55,7 @@ script: ${readableXml}`); } else { - OfficeHelpers.UI.notify(`There are ${numberOfPartsInNamespace.value} XML parts with namespace ${contosoNamespace}. - There should be exactly 1.`); + console.log(`There are ${numberOfPartsInNamespace.value} XML parts with namespace ${contosoNamespace}. There should be exactly 1.`); } await context.sync(); @@ -85,8 +84,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/22-data-validation/data-validation.yaml b/samples/excel/22-data-validation/data-validation.yaml index c26f7add9..39a72f522 100644 --- a/samples/excel/22-data-validation/data-validation.yaml +++ b/samples/excel/22-data-validation/data-validation.yaml @@ -124,14 +124,15 @@ script: await context.sync(); }); } + /** Default helper for invoking an action and handling errors. */ async function tryCatch(callback) { try { await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 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 0da0064eb..d2bbc8851 100644 --- a/samples/excel/26-document/get-file-in-slices-async.yaml +++ b/samples/excel/26-document/get-file-in-slices-async.yaml @@ -26,8 +26,7 @@ script: }); function onError(error: Office.Error): void { - OfficeHelpers.UI.notify('Error', error.message); - OfficeHelpers.Utilities.log(error); + console.error(error); } function onSuccess(byteArray: number[]) { @@ -84,8 +83,7 @@ script: async function newWorkbookFromFile() { await Excel.createWorkbook($('#file-contents').text()).catch(function (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); + console.error(error); }); } @@ -144,8 +142,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); } } diff --git a/samples/excel/26-document/properties.yaml b/samples/excel/26-document/properties.yaml index 529b0d1c6..4669f3f21 100644 --- a/samples/excel/26-document/properties.yaml +++ b/samples/excel/26-document/properties.yaml @@ -117,8 +117,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/30-events/data-changed.yaml b/samples/excel/30-events/data-changed.yaml index 4eb9cdea3..8bb5221f1 100644 --- a/samples/excel/30-events/data-changed.yaml +++ b/samples/excel/30-events/data-changed.yaml @@ -66,8 +66,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/30-events/events-chart-activated.yaml b/samples/excel/30-events/events-chart-activated.yaml index be46e42b5..250696518 100644 --- a/samples/excel/30-events/events-chart-activated.yaml +++ b/samples/excel/30-events/events-chart-activated.yaml @@ -120,8 +120,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/30-events/events-chartcollection-added-activated.yaml b/samples/excel/30-events/events-chartcollection-added-activated.yaml index 4f366fd0e..fb5416b56 100644 --- a/samples/excel/30-events/events-chartcollection-added-activated.yaml +++ b/samples/excel/30-events/events-chartcollection-added-activated.yaml @@ -105,8 +105,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/30-events/events-disable-events.yaml b/samples/excel/30-events/events-disable-events.yaml index 00eb19752..d568a3637 100644 --- a/samples/excel/30-events/events-disable-events.yaml +++ b/samples/excel/30-events/events-disable-events.yaml @@ -128,8 +128,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/30-events/events-table-changed.yaml b/samples/excel/30-events/events-table-changed.yaml index c1024ceb2..26aaaf4ea 100644 --- a/samples/excel/30-events/events-table-changed.yaml +++ b/samples/excel/30-events/events-table-changed.yaml @@ -102,8 +102,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); } } diff --git a/samples/excel/30-events/events-tablecollection-changed.yaml b/samples/excel/30-events/events-tablecollection-changed.yaml index 72f49a5dd..9beee1aa8 100644 --- a/samples/excel/30-events/events-tablecollection-changed.yaml +++ b/samples/excel/30-events/events-tablecollection-changed.yaml @@ -106,8 +106,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); } } 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 7e6a5c91a..e8111443a 100644 --- a/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml +++ b/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml @@ -136,7 +136,7 @@ script: }); } catch (error) { - OfficeHelpers.UI.notify(error); + console.error(error); } } @@ -164,8 +164,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 @@ -238,4 +238,4 @@ libraries: | @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 + @types/jquery@3.3.1 diff --git a/samples/excel/30-events/events-worksheet.yaml b/samples/excel/30-events/events-worksheet.yaml index 5fe9d6bfb..b192471c8 100644 --- a/samples/excel/30-events/events-worksheet.yaml +++ b/samples/excel/30-events/events-worksheet.yaml @@ -127,10 +127,10 @@ script: /** Default helper for invoking an action and handling errors. */ async function tryCatch(callback) { try { - await callback(); + await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 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 3d86b4fef..aaa6e2fd2 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 @@ -172,8 +172,8 @@ script: try { await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/34-named-item/update-named-item.yaml b/samples/excel/34-named-item/update-named-item.yaml index a491f5533..7d018350a 100644 --- a/samples/excel/34-named-item/update-named-item.yaml +++ b/samples/excel/34-named-item/update-named-item.yaml @@ -31,7 +31,7 @@ script: await context.sync(); console.log(`Just created the named item "${namedItems.items[0].name}" located here: ${namedItems.items[0].formula}`); } else { - OfficeHelpers.UI.notify("The named item already exists"); + console.log("The named item already exists"); } }); } @@ -46,7 +46,7 @@ script: await context.sync(); if (myNamedItem.isNullObject) { - OfficeHelpers.UI.notify(`There is no named item. Create it with "Add named item for a range" first.`); + console.log(`There is no named item. Create it with "Add named item for a range" first.`); } else { // Update named item to point to the second range myNamedItem.formula = "=Sample!$B$10:$D$14"; @@ -82,8 +82,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/38-pivottable/pivottable-calculations.yaml b/samples/excel/38-pivottable/pivottable-calculations.yaml index 10b052b7d..403562c73 100644 --- a/samples/excel/38-pivottable/pivottable-calculations.yaml +++ b/samples/excel/38-pivottable/pivottable-calculations.yaml @@ -149,8 +149,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/38-pivottable/pivottable-create-and-modify.yaml b/samples/excel/38-pivottable/pivottable-create-and-modify.yaml index 4dbb7bef0..55844af49 100644 --- a/samples/excel/38-pivottable/pivottable-create-and-modify.yaml +++ b/samples/excel/38-pivottable/pivottable-create-and-modify.yaml @@ -188,8 +188,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml b/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml index 0fd5c1d7f..c2c48d015 100644 --- a/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml +++ b/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml @@ -147,8 +147,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/42-range/formatting.yaml b/samples/excel/42-range/formatting.yaml index c021883be..71f6c15fd 100644 --- a/samples/excel/42-range/formatting.yaml +++ b/samples/excel/42-range/formatting.yaml @@ -69,8 +69,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/42-range/insert-delete-clear-range.yaml b/samples/excel/42-range/insert-delete-clear-range.yaml index 6dcbd0bb9..831092b40 100644 --- a/samples/excel/42-range/insert-delete-clear-range.yaml +++ b/samples/excel/42-range/insert-delete-clear-range.yaml @@ -79,8 +79,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/42-range/range-hyperlink.yaml b/samples/excel/42-range/range-hyperlink.yaml index a12941c0f..fe58c17ca 100644 --- a/samples/excel/42-range/range-hyperlink.yaml +++ b/samples/excel/42-range/range-hyperlink.yaml @@ -271,8 +271,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/42-range/range-relationships.yaml b/samples/excel/42-range/range-relationships.yaml index 54e14d11d..5f7898b37 100644 --- a/samples/excel/42-range/range-relationships.yaml +++ b/samples/excel/42-range/range-relationships.yaml @@ -152,9 +152,8 @@ script: // (2) Delete data from the rows for one continent, // INCLUDING THE "Sales Team" COLUMN VALUES. // (3) Press "Create sales contest charts". - OfficeHelpers.UI.notify( - `Missing ${continent} Data`, - `There is no data for the ${continent} teams.` + console.log(`Missing ${continent} Data`); + console.log(`There is no data for the ${continent} teams.`); ); } @@ -201,8 +200,8 @@ script: try { await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/42-range/range-text-orientation.yaml b/samples/excel/42-range/range-text-orientation.yaml index da904d66f..1e48afced 100644 --- a/samples/excel/42-range/range-text-orientation.yaml +++ b/samples/excel/42-range/range-text-orientation.yaml @@ -69,8 +69,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/42-range/selected-range.yaml b/samples/excel/42-range/selected-range.yaml index 661477055..9178946f1 100644 --- a/samples/excel/42-range/selected-range.yaml +++ b/samples/excel/42-range/selected-range.yaml @@ -39,8 +39,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/42-range/set-get-values.yaml b/samples/excel/42-range/set-get-values.yaml index 0e0495a30..a073eb569 100644 --- a/samples/excel/42-range/set-get-values.yaml +++ b/samples/excel/42-range/set-get-values.yaml @@ -167,8 +167,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/42-range/used-range.yaml b/samples/excel/42-range/used-range.yaml index 66f632d16..b3d8aae7f 100644 --- a/samples/excel/42-range/used-range.yaml +++ b/samples/excel/42-range/used-range.yaml @@ -27,10 +27,8 @@ script: await context.sync(); if (usedDataRange.isNullObject) { - OfficeHelpers.UI.notify( - "Need Data to Make Chart", - "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." - ); + 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, @@ -94,8 +92,8 @@ script: try { await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 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 9302df46d..3262a6f87 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 @@ -125,8 +125,8 @@ script: try { await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/46-table/convert-range-to-table.yaml b/samples/excel/46-table/convert-range-to-table.yaml index 29f727cdd..9f9ab9e7e 100644 --- a/samples/excel/46-table/convert-range-to-table.yaml +++ b/samples/excel/46-table/convert-range-to-table.yaml @@ -56,8 +56,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/46-table/create-table.yaml b/samples/excel/46-table/create-table.yaml index 2d4f31ba6..8c1a107d2 100644 --- a/samples/excel/46-table/create-table.yaml +++ b/samples/excel/46-table/create-table.yaml @@ -47,8 +47,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/46-table/filter-data.yaml b/samples/excel/46-table/filter-data.yaml index ea20339f8..6d8999dd7 100644 --- a/samples/excel/46-table/filter-data.yaml +++ b/samples/excel/46-table/filter-data.yaml @@ -86,8 +86,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/46-table/formatting.yaml b/samples/excel/46-table/formatting.yaml index bbfcc0483..914dd2f85 100644 --- a/samples/excel/46-table/formatting.yaml +++ b/samples/excel/46-table/formatting.yaml @@ -65,8 +65,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/46-table/get-data-from-table.yaml b/samples/excel/46-table/get-data-from-table.yaml index a68cc5340..a1bf61f7d 100644 --- a/samples/excel/46-table/get-data-from-table.yaml +++ b/samples/excel/46-table/get-data-from-table.yaml @@ -76,8 +76,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 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 b8ae3ed4d..267565bfd 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 @@ -92,8 +92,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); } } diff --git a/samples/excel/46-table/import-json-data.yaml b/samples/excel/46-table/import-json-data.yaml index 5125f0141..3c169030b 100644 --- a/samples/excel/46-table/import-json-data.yaml +++ b/samples/excel/46-table/import-json-data.yaml @@ -109,8 +109,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/46-table/sort-data.yaml b/samples/excel/46-table/sort-data.yaml index 79ee5dae3..6dc35da73 100644 --- a/samples/excel/46-table/sort-data.yaml +++ b/samples/excel/46-table/sort-data.yaml @@ -71,8 +71,8 @@ script: try { await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/46-table/style.yaml b/samples/excel/46-table/style.yaml index 6e76f9600..b851d7d77 100644 --- a/samples/excel/46-table/style.yaml +++ b/samples/excel/46-table/style.yaml @@ -150,8 +150,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); } } 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 1a076b5d2..1712af221 100644 --- a/samples/excel/50-workbook/create-get-change-delete-settings.yaml +++ b/samples/excel/50-workbook/create-get-change-delete-settings.yaml @@ -67,8 +67,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/50-workbook/create-workbook.yaml b/samples/excel/50-workbook/create-workbook.yaml index b37620ab1..bd6d180a3 100644 --- a/samples/excel/50-workbook/create-workbook.yaml +++ b/samples/excel/50-workbook/create-workbook.yaml @@ -41,8 +41,8 @@ script: try { await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/50-workbook/data-protection.yaml b/samples/excel/50-workbook/data-protection.yaml index 0b485a2ef..b83ae1cc5 100644 --- a/samples/excel/50-workbook/data-protection.yaml +++ b/samples/excel/50-workbook/data-protection.yaml @@ -109,8 +109,7 @@ script: if (null == password || password.trim() == "") { let errorMessage = "Password is expected but not provided"; - OfficeHelpers.UI.notify(errorMessage); - OfficeHelpers.Utilities.log(errorMessage); + console.log(errorMessage); } } @@ -171,8 +170,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/50-workbook/workbook-get-active-cell.yaml b/samples/excel/50-workbook/workbook-get-active-cell.yaml index c32110f93..f3baac87e 100644 --- a/samples/excel/50-workbook/workbook-get-active-cell.yaml +++ b/samples/excel/50-workbook/workbook-get-active-cell.yaml @@ -28,8 +28,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/54-worksheet/active-worksheet.yaml b/samples/excel/54-worksheet/active-worksheet.yaml index 2a65968a4..5a08fdbb9 100644 --- a/samples/excel/54-worksheet/active-worksheet.yaml +++ b/samples/excel/54-worksheet/active-worksheet.yaml @@ -77,8 +77,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 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 31cf7f3b3..19bb795dc 100644 --- a/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml +++ b/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml @@ -97,8 +97,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/54-worksheet/gridlines.yaml b/samples/excel/54-worksheet/gridlines.yaml index 2abbdff81..29c3cd8ef 100644 --- a/samples/excel/54-worksheet/gridlines.yaml +++ b/samples/excel/54-worksheet/gridlines.yaml @@ -35,8 +35,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/54-worksheet/list-worksheets.yaml b/samples/excel/54-worksheet/list-worksheets.yaml index 33add5e8b..ba3d51446 100644 --- a/samples/excel/54-worksheet/list-worksheets.yaml +++ b/samples/excel/54-worksheet/list-worksheets.yaml @@ -34,8 +34,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 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 571c26595..6736536a2 100644 --- a/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml +++ b/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml @@ -113,8 +113,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/54-worksheet/tab-color.yaml b/samples/excel/54-worksheet/tab-color.yaml index 5ab3d453b..597994841 100644 --- a/samples/excel/54-worksheet/tab-color.yaml +++ b/samples/excel/54-worksheet/tab-color.yaml @@ -58,8 +58,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/54-worksheet/worksheet-copy.yaml b/samples/excel/54-worksheet/worksheet-copy.yaml index 0d46787eb..696318074 100644 --- a/samples/excel/54-worksheet/worksheet-copy.yaml +++ b/samples/excel/54-worksheet/worksheet-copy.yaml @@ -61,8 +61,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/54-worksheet/worksheet-freeze-panes.yaml b/samples/excel/54-worksheet/worksheet-freeze-panes.yaml index df1997037..0db1699c0 100644 --- a/samples/excel/54-worksheet/worksheet-freeze-panes.yaml +++ b/samples/excel/54-worksheet/worksheet-freeze-panes.yaml @@ -58,7 +58,7 @@ script: await context.sync(); if (frozenRange.isNullObject) { - OfficeHelpers.UI.notify(`The worksheet does not contain a frozen pane.`); + console.log(`The worksheet does not contain a frozen pane.`); } else { console.log(`The address of the frozen range (cells that are frozen in the top-and-left-most pane) is "${frozenRange.address}"`); } @@ -121,8 +121,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/54-worksheet/worksheet-range-cell.yaml b/samples/excel/54-worksheet/worksheet-range-cell.yaml index 47e3d447a..1239a70c8 100644 --- a/samples/excel/54-worksheet/worksheet-range-cell.yaml +++ b/samples/excel/54-worksheet/worksheet-range-cell.yaml @@ -95,8 +95,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/54-worksheet/worksheet-visibility.yaml b/samples/excel/54-worksheet/worksheet-visibility.yaml index a433c6a7c..54f870631 100644 --- a/samples/excel/54-worksheet/worksheet-visibility.yaml +++ b/samples/excel/54-worksheet/worksheet-visibility.yaml @@ -76,8 +76,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/85-preview-apis/performance-optimization.yaml b/samples/excel/85-preview-apis/performance-optimization.yaml index 6bdb5daed..bdef07db4 100644 --- a/samples/excel/85-preview-apis/performance-optimization.yaml +++ b/samples/excel/85-preview-apis/performance-optimization.yaml @@ -67,8 +67,8 @@ script: try { await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/85-preview-apis/range-areas.yaml b/samples/excel/85-preview-apis/range-areas.yaml index a93c6b8df..e791fb04e 100644 --- a/samples/excel/85-preview-apis/range-areas.yaml +++ b/samples/excel/85-preview-apis/range-areas.yaml @@ -118,8 +118,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/85-preview-apis/range-copyfrom.yaml b/samples/excel/85-preview-apis/range-copyfrom.yaml index ccfa333e6..154a2b5ad 100644 --- a/samples/excel/85-preview-apis/range-copyfrom.yaml +++ b/samples/excel/85-preview-apis/range-copyfrom.yaml @@ -133,8 +133,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/85-preview-apis/range-find.yaml b/samples/excel/85-preview-apis/range-find.yaml index c48f7046b..093cc2467 100644 --- a/samples/excel/85-preview-apis/range-find.yaml +++ b/samples/excel/85-preview-apis/range-find.yaml @@ -107,8 +107,8 @@ script: try { await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/85-preview-apis/range-remove-duplicates.yaml b/samples/excel/85-preview-apis/range-remove-duplicates.yaml index aeb81bc52..f0ac0fae7 100644 --- a/samples/excel/85-preview-apis/range-remove-duplicates.yaml +++ b/samples/excel/85-preview-apis/range-remove-duplicates.yaml @@ -76,8 +76,8 @@ script: try { await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/85-preview-apis/shape-create-and-delete.yaml b/samples/excel/85-preview-apis/shape-create-and-delete.yaml index cc4b2e3e5..092f7b2ed 100644 --- a/samples/excel/85-preview-apis/shape-create-and-delete.yaml +++ b/samples/excel/85-preview-apis/shape-create-and-delete.yaml @@ -68,8 +68,8 @@ script: try { await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/85-preview-apis/shape-move-and-order.yaml b/samples/excel/85-preview-apis/shape-move-and-order.yaml index 88c1d3060..5dcb02528 100644 --- a/samples/excel/85-preview-apis/shape-move-and-order.yaml +++ b/samples/excel/85-preview-apis/shape-move-and-order.yaml @@ -91,8 +91,8 @@ script: try { await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/85-preview-apis/shapes-images.yaml b/samples/excel/85-preview-apis/shapes-images.yaml index 89541d149..91bed6353 100644 --- a/samples/excel/85-preview-apis/shapes-images.yaml +++ b/samples/excel/85-preview-apis/shapes-images.yaml @@ -81,8 +81,8 @@ script: try { await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/85-preview-apis/tetrominos.yaml b/samples/excel/85-preview-apis/tetrominos.yaml index bc9f958d9..46b66a13b 100644 --- a/samples/excel/85-preview-apis/tetrominos.yaml +++ b/samples/excel/85-preview-apis/tetrominos.yaml @@ -633,9 +633,8 @@ script: await callback(); } catch (error) { $("#setup").show(); - - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); } } 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 776068a0f..d4c22ffae 100644 --- a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml +++ b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml @@ -38,8 +38,8 @@ script: try { await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/85-preview-apis/workbook-save-and-close.yaml b/samples/excel/85-preview-apis/workbook-save-and-close.yaml index 30e10bb3d..d84f3531f 100644 --- a/samples/excel/85-preview-apis/workbook-save-and-close.yaml +++ b/samples/excel/85-preview-apis/workbook-save-and-close.yaml @@ -41,8 +41,8 @@ script: try { await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/85-preview-apis/worksheet-find-all.yaml b/samples/excel/85-preview-apis/worksheet-find-all.yaml index c59f4d016..151bc2cf4 100644 --- a/samples/excel/85-preview-apis/worksheet-find-all.yaml +++ b/samples/excel/85-preview-apis/worksheet-find-all.yaml @@ -97,8 +97,8 @@ script: try { await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/85-preview-apis/worksheet-page-layout.yaml b/samples/excel/85-preview-apis/worksheet-page-layout.yaml index fc224e9bf..fc98b2fc7 100644 --- a/samples/excel/85-preview-apis/worksheet-page-layout.yaml +++ b/samples/excel/85-preview-apis/worksheet-page-layout.yaml @@ -128,8 +128,8 @@ script: try { await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/90-scenarios/multiple-property-set.yaml b/samples/excel/90-scenarios/multiple-property-set.yaml index 9a5ae6b0c..6773e2267 100644 --- a/samples/excel/90-scenarios/multiple-property-set.yaml +++ b/samples/excel/90-scenarios/multiple-property-set.yaml @@ -88,8 +88,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/90-scenarios/report-generation.yaml b/samples/excel/90-scenarios/report-generation.yaml index 3a185ba27..4eb53fa31 100644 --- a/samples/excel/90-scenarios/report-generation.yaml +++ b/samples/excel/90-scenarios/report-generation.yaml @@ -113,8 +113,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/90-scenarios/working-with-dates.yaml b/samples/excel/90-scenarios/working-with-dates.yaml index 926ddf653..415335ae7 100644 --- a/samples/excel/90-scenarios/working-with-dates.yaml +++ b/samples/excel/90-scenarios/working-with-dates.yaml @@ -94,8 +94,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/99-just-for-fun/color-wheel.yaml b/samples/excel/99-just-for-fun/color-wheel.yaml index b4bc016e9..bc29e3c59 100644 --- a/samples/excel/99-just-for-fun/color-wheel.yaml +++ b/samples/excel/99-just-for-fun/color-wheel.yaml @@ -78,10 +78,11 @@ script: }); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); } } + } async function loopThroughColors(points: Excel.ChartPointsCollection, max, colorGenerator: (i: number) => string) { for (var i = 0; i < max; i++) { 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 bc881b0e0..623c00b27 100644 --- a/samples/excel/99-just-for-fun/path-finder-game.yaml +++ b/samples/excel/99-just-for-fun/path-finder-game.yaml @@ -167,8 +167,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/99-just-for-fun/patterns.yaml b/samples/excel/99-just-for-fun/patterns.yaml index 1b4190cd5..6f5f4cd31 100644 --- a/samples/excel/99-just-for-fun/patterns.yaml +++ b/samples/excel/99-just-for-fun/patterns.yaml @@ -142,8 +142,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/excel/default.yaml b/samples/excel/default.yaml index 9877c96ef..97d0ffb4a 100644 --- a/samples/excel/default.yaml +++ b/samples/excel/default.yaml @@ -25,8 +25,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/onenote/default.yaml b/samples/onenote/default.yaml index 5fa72bd11..e365363cd 100644 --- a/samples/onenote/default.yaml +++ b/samples/onenote/default.yaml @@ -23,8 +23,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/outlook/01-compose-basics/get-item-subject.yaml b/samples/outlook/01-compose-basics/get-item-subject.yaml index eecffba23..b94e84429 100644 --- a/samples/outlook/01-compose-basics/get-item-subject.yaml +++ b/samples/outlook/01-compose-basics/get-item-subject.yaml @@ -11,10 +11,10 @@ script: let item = Office.context.mailbox.item as Office.ItemCompose; item.subject.getAsync((result: Office.AsyncResult) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { - OfficeHelpers.UI.notify(`Action failed with message ${result.error.message}`); + console.error(`Action failed with message ${result.error.message}`); return; } - OfficeHelpers.UI.notify(`Subject is ${result.value}`); + console.log(`Subject is ${result.value}`); }) } language: typescript diff --git a/samples/outlook/01-compose-basics/get-selected-text.yaml b/samples/outlook/01-compose-basics/get-selected-text.yaml index 104313881..a054f7d1f 100644 --- a/samples/outlook/01-compose-basics/get-selected-text.yaml +++ b/samples/outlook/01-compose-basics/get-selected-text.yaml @@ -11,10 +11,10 @@ script: let item = Office.context.mailbox.item as Office.ItemCompose; item.getSelectedDataAsync(Office.CoercionType.Text, (result: Office.AsyncResult) => { if (result.status === Office.AsyncResultStatus.Failed) { - OfficeHelpers.UI.notify(`Action failed with error: ${result.error.message}`); + console.error(`Action failed with error: ${result.error.message}`); return; } - OfficeHelpers.UI.notify(`Selected Text: ${result.value.data}`); + console.log(`Selected Text: ${result.value.data}`); }) } language: typescript diff --git a/samples/outlook/01-compose-basics/set-selected-text.yaml b/samples/outlook/01-compose-basics/set-selected-text.yaml index 089fd0c7a..c1ba85930 100644 --- a/samples/outlook/01-compose-basics/set-selected-text.yaml +++ b/samples/outlook/01-compose-basics/set-selected-text.yaml @@ -11,7 +11,7 @@ script: let item = Office.context.mailbox.item as Office.ItemCompose; item.setSelectedDataAsync("Hello World!", (result: Office.AsyncResult) => { if (result.status === Office.AsyncResultStatus.Failed) { - OfficeHelpers.UI.notify(`Action failed with error: ${result.error.message}`) + console.error(`Action failed with error: ${result.error.message}`) } }) } diff --git a/samples/powerpoint/basics/basic-common-api-call.yaml b/samples/powerpoint/basics/basic-common-api-call.yaml index fce08b980..59203f132 100644 --- a/samples/powerpoint/basics/basic-common-api-call.yaml +++ b/samples/powerpoint/basics/basic-common-api-call.yaml @@ -13,7 +13,7 @@ script: function run() { Office.context.document.getSelectedDataAsync(Office.CoercionType.Text, (asyncResult) => { if (asyncResult.status === Office.AsyncResultStatus.Failed) { - console.log(asyncResult.error.message); + console.error(asyncResult.error.message); } else { console.log(`The selected data is "${asyncResult.value}".`); } diff --git a/samples/powerpoint/basics/create-presentation.yaml b/samples/powerpoint/basics/create-presentation.yaml index 68211cbc7..de57053a8 100644 --- a/samples/powerpoint/basics/create-presentation.yaml +++ b/samples/powerpoint/basics/create-presentation.yaml @@ -36,8 +36,8 @@ script: try { await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/powerpoint/basics/get-slide-metadata.yaml b/samples/powerpoint/basics/get-slide-metadata.yaml index 78fab1714..5e0779f18 100644 --- a/samples/powerpoint/basics/get-slide-metadata.yaml +++ b/samples/powerpoint/basics/get-slide-metadata.yaml @@ -13,7 +13,7 @@ script: Office.context.document.getSelectedDataAsync(Office.CoercionType.SlideRange, function (asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Failed) { - console.log(asyncResult.error.message); + console.error(asyncResult.error.message); } else { console.log(JSON.stringify(asyncResult.value, null, 4)); } diff --git a/samples/powerpoint/basics/insert-svg.yaml b/samples/powerpoint/basics/insert-svg.yaml index 4f76d7a05..a635f3dfa 100644 --- a/samples/powerpoint/basics/insert-svg.yaml +++ b/samples/powerpoint/basics/insert-svg.yaml @@ -18,7 +18,7 @@ script: }, function (asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Failed) { - console.log(asyncResult.error.message); + console.error(asyncResult.error.message); } }); } diff --git a/samples/powerpoint/default.yaml b/samples/powerpoint/default.yaml index 0e8cf8991..de631077e 100644 --- a/samples/powerpoint/default.yaml +++ b/samples/powerpoint/default.yaml @@ -11,7 +11,7 @@ script: function run() { Office.context.document.getSelectedDataAsync(Office.CoercionType.Text, (asyncResult) => { if (asyncResult.status === Office.AsyncResultStatus.Failed) { - console.log(asyncResult.error.message); + console.error(asyncResult.error.message); } else { console.log(`The selected data is "${asyncResult.value}".`); } diff --git a/samples/project/basics/basic-common-api-call.yaml b/samples/project/basics/basic-common-api-call.yaml index 99a30b69e..432bb70ae 100644 --- a/samples/project/basics/basic-common-api-call.yaml +++ b/samples/project/basics/basic-common-api-call.yaml @@ -13,7 +13,7 @@ script: function run() { Office.context.document.getSelectedDataAsync(Office.CoercionType.Text, (asyncResult) => { if (asyncResult.status === Office.AsyncResultStatus.Failed) { - console.log(asyncResult.error.message); + console.error(asyncResult.error.message); } else { console.log(`The selected data is "${asyncResult.value}".`); } diff --git a/samples/project/default.yaml b/samples/project/default.yaml index 680ee992f..b069c2d3d 100644 --- a/samples/project/default.yaml +++ b/samples/project/default.yaml @@ -11,7 +11,7 @@ script: function run() { Office.context.document.getSelectedDataAsync(Office.CoercionType.Text, (asyncResult) => { if (asyncResult.status === Office.AsyncResultStatus.Failed) { - console.log(asyncResult.error.message); + console.error(asyncResult.error.message); } else { console.log(`The selected data is "${asyncResult.value}".`); } diff --git a/samples/word/01-basics/basic-api-call-es5.yaml b/samples/word/01-basics/basic-api-call-es5.yaml index 799cb47cd..0fe623f0c 100644 --- a/samples/word/01-basics/basic-api-call-es5.yaml +++ b/samples/word/01-basics/basic-api-call-es5.yaml @@ -28,8 +28,8 @@ script: Promise.resolve() .then(callback) .catch(function (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/word/01-basics/basic-api-call.yaml b/samples/word/01-basics/basic-api-call.yaml index 0b7e127c8..790f03965 100644 --- a/samples/word/01-basics/basic-api-call.yaml +++ b/samples/word/01-basics/basic-api-call.yaml @@ -29,8 +29,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/word/01-basics/basic-common-api-call.yaml b/samples/word/01-basics/basic-common-api-call.yaml index 076d0e07b..d6f5f6c38 100644 --- a/samples/word/01-basics/basic-common-api-call.yaml +++ b/samples/word/01-basics/basic-common-api-call.yaml @@ -13,7 +13,7 @@ script: function run() { Office.context.document.getSelectedDataAsync(Office.CoercionType.Text, (asyncResult) => { if (asyncResult.status === Office.AsyncResultStatus.Failed) { - console.log(asyncResult.error.message); + console.error(asyncResult.error.message); } else { console.log(`The selected data is "${asyncResult.value}".`); } 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 72c5a8795..d84c0adef 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 @@ -92,8 +92,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/word/15-images/insert-and-get-pictures.yaml b/samples/word/15-images/insert-and-get-pictures.yaml index c97de3184..5cb8c84cf 100644 --- a/samples/word/15-images/insert-and-get-pictures.yaml +++ b/samples/word/15-images/insert-and-get-pictures.yaml @@ -59,8 +59,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); } } diff --git a/samples/word/20-lists/insert-list.yaml b/samples/word/20-lists/insert-list.yaml index d2c16d96c..5726894b5 100644 --- a/samples/word/20-lists/insert-list.yaml +++ b/samples/word/20-lists/insert-list.yaml @@ -54,8 +54,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 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 13d0efbff..be68279e7 100644 --- a/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml +++ b/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -69,8 +69,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/word/25-paragraph/insert-formatted-text.yaml b/samples/word/25-paragraph/insert-formatted-text.yaml index f79f1bd76..9fc17ff1d 100644 --- a/samples/word/25-paragraph/insert-formatted-text.yaml +++ b/samples/word/25-paragraph/insert-formatted-text.yaml @@ -66,12 +66,12 @@ script: /** Default helper for invoking an action and handling errors. */ async function tryCatch(callback) { - try { - await callback(); - } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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/samples/word/25-paragraph/insert-header-and-footer.yaml b/samples/word/25-paragraph/insert-header-and-footer.yaml index bba3740c9..c6b00d61b 100644 --- a/samples/word/25-paragraph/insert-header-and-footer.yaml +++ b/samples/word/25-paragraph/insert-header-and-footer.yaml @@ -34,8 +34,8 @@ script: try { await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/word/25-paragraph/insert-in-different-locations.yaml b/samples/word/25-paragraph/insert-in-different-locations.yaml index 46c12ba77..c17d6ef42 100644 --- a/samples/word/25-paragraph/insert-in-different-locations.yaml +++ b/samples/word/25-paragraph/insert-in-different-locations.yaml @@ -91,8 +91,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 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 694a97718..a2c418d7b 100644 --- a/samples/word/25-paragraph/insert-line-and-page-breaks.yaml +++ b/samples/word/25-paragraph/insert-line-and-page-breaks.yaml @@ -47,8 +47,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/word/25-paragraph/paragraph-properties.yaml b/samples/word/25-paragraph/paragraph-properties.yaml index 1b77ac78c..de7a69f98 100644 --- a/samples/word/25-paragraph/paragraph-properties.yaml +++ b/samples/word/25-paragraph/paragraph-properties.yaml @@ -73,8 +73,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/word/25-paragraph/search.yaml b/samples/word/25-paragraph/search.yaml index dac7628d1..51b208c68 100644 --- a/samples/word/25-paragraph/search.yaml +++ b/samples/word/25-paragraph/search.yaml @@ -61,8 +61,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/word/30-properties/get-built-in-properties.yaml b/samples/word/30-properties/get-built-in-properties.yaml index 29f39a113..21d6d4dfb 100644 --- a/samples/word/30-properties/get-built-in-properties.yaml +++ b/samples/word/30-properties/get-built-in-properties.yaml @@ -26,8 +26,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 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 059cb552e..70881fa19 100644 --- a/samples/word/30-properties/read-write-custom-document-properties.yaml +++ b/samples/word/30-properties/read-write-custom-document-properties.yaml @@ -47,8 +47,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/word/35-ranges/scroll-to-range.yaml b/samples/word/35-ranges/scroll-to-range.yaml index 040241eca..ec9843835 100644 --- a/samples/word/35-ranges/scroll-to-range.yaml +++ b/samples/word/35-ranges/scroll-to-range.yaml @@ -49,8 +49,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 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 c2ec9836f..ffabbd7fa 100644 --- a/samples/word/35-ranges/split-words-of-first-paragraph.yaml +++ b/samples/word/35-ranges/split-words-of-first-paragraph.yaml @@ -51,8 +51,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/word/40-tables/table-cell-access.yaml b/samples/word/40-tables/table-cell-access.yaml index f2018d7a9..fa525db08 100644 --- a/samples/word/40-tables/table-cell-access.yaml +++ b/samples/word/40-tables/table-cell-access.yaml @@ -41,8 +41,8 @@ script: try { await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/word/90-scenarios/doc-assembly.yaml b/samples/word/90-scenarios/doc-assembly.yaml index 52e1ba186..647e6f21a 100644 --- a/samples/word/90-scenarios/doc-assembly.yaml +++ b/samples/word/90-scenarios/doc-assembly.yaml @@ -112,8 +112,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/word/90-scenarios/multiple-property-set.yaml b/samples/word/90-scenarios/multiple-property-set.yaml index 277d2a772..626f28736 100644 --- a/samples/word/90-scenarios/multiple-property-set.yaml +++ b/samples/word/90-scenarios/multiple-property-set.yaml @@ -64,8 +64,8 @@ script: try { await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/samples/word/default.yaml b/samples/word/default.yaml index 3d6036369..d33e34950 100644 --- a/samples/word/default.yaml +++ b/samples/word/default.yaml @@ -25,8 +25,8 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 858ec8c3e..e711d2c39 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -464,8 +464,7 @@ Excel.CustomXmlPartCollection.getByNamespace: ${readableXml}`); } else { - OfficeHelpers.UI.notify(`There are ${numberOfPartsInNamespace.value} XML parts with namespace ${contosoNamespace}. - There should be exactly 1.`); + console.log(`There are ${numberOfPartsInNamespace.value} XML parts with namespace ${contosoNamespace}. There should be exactly 1.`); } await context.sync(); @@ -494,8 +493,7 @@ Excel.CustomXmlPartScopedCollection.getCount: ${readableXml}`); } else { - OfficeHelpers.UI.notify(`There are ${numberOfPartsInNamespace.value} XML parts with namespace ${contosoNamespace}. - There should be exactly 1.`); + console.log(`There are ${numberOfPartsInNamespace.value} XML parts with namespace ${contosoNamespace}. There should be exactly 1.`); } await context.sync(); @@ -524,8 +522,7 @@ Excel.CustomXmlPartScopedCollection.getOnlyItem: ${readableXml}`); } else { - OfficeHelpers.UI.notify(`There are ${numberOfPartsInNamespace.value} XML parts with namespace ${contosoNamespace}. - There should be exactly 1.`); + console.log(`There are ${numberOfPartsInNamespace.value} XML parts with namespace ${contosoNamespace}. There should be exactly 1.`); } await context.sync(); @@ -1951,10 +1948,8 @@ Excel.Range.getUsedRangeOrNullObject: await context.sync(); if (usedDataRange.isNullObject) { - OfficeHelpers.UI.notify( - "Need Data to Make Chart", - "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." - ); + 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, @@ -2146,7 +2141,7 @@ Excel.NamedItem.formula: await context.sync(); if (myNamedItem.isNullObject) { - OfficeHelpers.UI.notify(`There is no named item. Create it with "Add named item for a range" first.`); + console.log(`There is no named item. Create it with "Add named item for a range" first.`); } else { // Update named item to point to the second range myNamedItem.formula = "=Sample!$B$10:$D$14"; @@ -2223,7 +2218,7 @@ Excel.WorksheetFreezePanes.getLocationOrNullObject: await context.sync(); if (frozenRange.isNullObject) { - OfficeHelpers.UI.notify(`The worksheet does not contain a frozen pane.`); + console.log(`The worksheet does not contain a frozen pane.`); } else { console.log(`The address of the frozen range (cells that are frozen in the top-and-left-most pane) is "${frozenRange.address}"`); } From c69141f6ab4033615e6fa0df949fad54e195ea1f Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 22 Feb 2019 16:46:20 -0800 Subject: [PATCH 133/660] Match geometric shape add method to new signature (#264) --- .../shape-create-and-delete.yaml | 22 ++++++++++++++----- .../85-preview-apis/shape-move-and-order.yaml | 21 +++++++++++++++--- samples/excel/85-preview-apis/tetrominos.yaml | 21 +++++++++--------- 3 files changed, 46 insertions(+), 18 deletions(-) diff --git a/samples/excel/85-preview-apis/shape-create-and-delete.yaml b/samples/excel/85-preview-apis/shape-create-and-delete.yaml index 092f7b2ed..05cb7a05c 100644 --- a/samples/excel/85-preview-apis/shape-create-and-delete.yaml +++ b/samples/excel/85-preview-apis/shape-create-and-delete.yaml @@ -16,7 +16,11 @@ script: async function createHexagon() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.hexagon, 5, 5, 225, 200); + const shape = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.hexagon); + shape.left = 5; + shape.top = 5; + shape.height = 175; + shape.width = 200; await context.sync(); }); } @@ -24,8 +28,12 @@ script: async function createTriangle() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.triangle, 100, 300, 150, 200); - shape.rotation = 45 + 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(); }); @@ -34,8 +42,12 @@ script: async function createSmileyFace() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.smileyFace, 300, 100, 100, 100); - shape.fill.foreColor = "yellow"; + const shape = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.smileyFace); + shape.left = 300; + shape.top = 100; + shape.height = 100; + shape.width = 100; + shape.fill.foreColor = "yellow" await context.sync(); }); } diff --git a/samples/excel/85-preview-apis/shape-move-and-order.yaml b/samples/excel/85-preview-apis/shape-move-and-order.yaml index 5dcb02528..a8c8d3d85 100644 --- a/samples/excel/85-preview-apis/shape-move-and-order.yaml +++ b/samples/excel/85-preview-apis/shape-move-and-order.yaml @@ -73,15 +73,30 @@ script: async function createShapes() { await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; - const rectangle = shapes.addGeometricShape(Excel.GeometricShapeType.rectangle, 100, 100, 150, 150); + const rectangle = shapes.addGeometricShape(Excel.GeometricShapeType.rectangle); + rectangle.left = 100; + rectangle.top = 100; + rectangle.height = 150; + rectangle.width = 150; rectangle.name = "Square"; rectangle.fill.setSolidColor("green"); - const pentagon = shapes.addGeometricShape(Excel.GeometricShapeType.pentagon, 125, 125, 100, 100); + + const pentagon = shapes.addGeometricShape(Excel.GeometricShapeType.pentagon); + pentagon.left = 125; + pentagon.top = 125; + pentagon.height = 100; + pentagon.width = 100; pentagon.name = "Pentagon"; pentagon.fill.setSolidColor("purple"); - const octagon = shapes.addGeometricShape(Excel.GeometricShapeType.octagon, 150, 150, 50, 50); + + const octagon = shapes.addGeometricShape(Excel.GeometricShapeType.octagon); + octagon.left = 150; + octagon.top = 150; + octagon.height = 50; + octagon.width = 50; octagon.name = "Octagon"; octagon.fill.setSolidColor("red"); + await context.sync(); }); } diff --git a/samples/excel/85-preview-apis/tetrominos.yaml b/samples/excel/85-preview-apis/tetrominos.yaml index 46b66a13b..ab176f32d 100644 --- a/samples/excel/85-preview-apis/tetrominos.yaml +++ b/samples/excel/85-preview-apis/tetrominos.yaml @@ -16,7 +16,6 @@ script: $("#selectedFile").change(() => tryCatch(readImageFromFile)); $("#focusButton").click(() => tryCatch(focus)); - let backgroundPicture = getDefaultBackgroundPicture(); function readImageFromFile() { @@ -328,13 +327,11 @@ script: delete cachedShapesByPosition[key]; } else { shapeCreated += 1; - const newshp = shapes.addGeometricShape( - "Rectangle", - left, - top, - BLOCK_WIDTH, - BLOCK_HEIGHT - ); + const newshp = shapes.addGeometricShape("Rectangle"); + newshp.left = left; + newshp.top = top; + newshp.width = BLOCK_WIDTH; + newshp.height = BLOCK_HEIGHT; validShapes[key] = newshp; } @@ -513,8 +510,12 @@ script: let left = j * BLOCK_WIDTH; let key = top + "-" + left; - let newshp = shapes.addGeometricShape("Rectangle", left, top, BLOCK_WIDTH, BLOCK_HEIGHT); - + let newshp = shapes.addGeometricShape("Rectangle"); + newshp.left = left; + newshp.top = top; + newshp.width = BLOCK_WIDTH; + newshp.height = BLOCK_HEIGHT; + newshp.fill.transparency = 1; newshp.fill.foreColor = "#000000"; From f215f99e800c2994f7dbb5b2fb062a95fbbaeb5d Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Tue, 26 Feb 2019 11:51:32 -0800 Subject: [PATCH 134/660] Adding preview snippets to the mapping file (#265) --- playlists/excel.yaml | 8 +- .../{shapes-images.yaml => shape-images.yaml} | 0 .../workbook-insert-external-worksheets.yaml | 2 +- .../workbook-save-and-close.yaml | 2 +- snippet-extractor-metadata/excel.xlsx | Bin 16068 -> 18728 bytes snippet-extractor-output/snippets.yaml | 887 +++++++++++++----- view/excel.json | 6 +- 7 files changed, 640 insertions(+), 265 deletions(-) rename samples/excel/85-preview-apis/{shapes-images.yaml => shape-images.yaml} (100%) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index da613ab74..ecd34ea8e 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -684,14 +684,14 @@ ExcelAPI: 1.9 - id: excel-shape-images name: Image Shapes - fileName: shapes-images.yaml + fileName: shape-images.yaml description: Creates and adjusts image-based shapes. rawUrl: >- - https://raw.githubusercontent.com////samples/excel/85-preview-apis/shapes-images.yaml + https://raw.githubusercontent.com////samples/excel/85-preview-apis/shape-images.yaml group: Preview APIs api_set: ExcelApi: 1.9 -- id: excel-worksheet-insert-external-worksheets +- 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. @@ -736,7 +736,7 @@ group: Preview APIs api_set: ExcelAPI: 1.9 -- id: excel-worksheet-save-and-close +- id: excel-workbook-save-and-close name: Save and close fileName: workbook-save-and-close.yaml description: Saves and closes a workbook. diff --git a/samples/excel/85-preview-apis/shapes-images.yaml b/samples/excel/85-preview-apis/shape-images.yaml similarity index 100% rename from samples/excel/85-preview-apis/shapes-images.yaml rename to samples/excel/85-preview-apis/shape-images.yaml 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 d4c22ffae..2d42c4ea2 100644 --- a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml +++ b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml @@ -1,5 +1,5 @@ order: 7 -id: excel-worksheet-insert-external-worksheets +id: excel-workbook-insert-external-worksheets name: Insert external worksheets description: Inserts worksheets from another workbook into the current workbook. host: EXCEL diff --git a/samples/excel/85-preview-apis/workbook-save-and-close.yaml b/samples/excel/85-preview-apis/workbook-save-and-close.yaml index d84f3531f..9e3500970 100644 --- a/samples/excel/85-preview-apis/workbook-save-and-close.yaml +++ b/samples/excel/85-preview-apis/workbook-save-and-close.yaml @@ -1,5 +1,5 @@ order: 12 -id: excel-worksheet-save-and-close +id: excel-workbook-save-and-close name: Save and close description: Saves and closes a workbook. host: EXCEL diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 8056c044f1ff3285a3584a968f99ff4e6001a1bf..85ee2fc739b17b1b7e7d7526dad506f6859f46c7 100644 GIT binary patch delta 11311 zcmZvCWmH_#7uvV+c+ z^uv*9l0|E0O*~B()%s3g%dkk%$sku6@dxI8u08!3)l zJIJ3cQ-G<0;Z2PsQ3m`31cbaOW7(=0k(s@5EO(r)h}kV*#A1_QtYEx^;w7^i2oDjd z!%h1&i}|cG7@Po#&#4pxndP)NFP>UK)6L z)%6-AONkl{H@$rlUK=xMs?ByEL?d)8WUSLgbk305Jyz~wB$0MgmVhC4Kb&Q}>Dd^3+xQd=iy8F-^0ZpZzLb_Cz5kv zgVZy+Dytv?fJGPp0QJ2B+^t#M>>RC(?Ch+V-EFKZRQ2pKS+RU_8{Yh$<$DdFM9Hx& zl$qwZ)vT6;)R}pE5e-b_#8hv)&oh#o_3jm2#0_@6_ME0)vU2X#EKXZ2gDWtDrgcp& zKP9%7@E|;SI9W)KSaOv+sgGsQ9`@*foQ1&87Hz4PV6weMNWZo(iuo>>{PLOD9Y&|= z*6t`7jjGr`?NtejZLrKdbnL6j=Pq@5?CEJNoh8B+yjXvGGO>5XX=z+)lZs-oq{BYh zkY~6`l-J$&sL9#14^5dY00sg-1`8qQjg-~7H=Mo6osFWzwUgE`mmR8k;?Y-3{F-TMidX=AVU8fzn zqdfN42~7lK?)oZjh3n!XT>bFNGSP2Y#_Cz=&p{V^MQMf>{5nCGJtJw3$$n`aU?_75 z($v z_gY*$TKiXXfrHN1)nmhE*-zAdWHhz}ZJ0*wz}!_T$N=<9L2v+L2Q^A+Wp>w`<>tn+-pf7WOUKrxUF_DX z6u2{VazTNV1mp(31%n^f_4~~`k9;w5QgeGBw* zLodB+JT}lTR%_mTCT|=3RapYppn8MUIUUVW`=dRr}{kc2(D8`uzC&NYer>Vsc zT+Q6W8$b0k+jr|)yA^U32SdNw#jH(FPS0Mnz4^KcoRK6*^25hmR-fIqZ)FUpNP-Q+ z^)0cZK?>1X89ul}iHEPbcXX@51JZa|x#Vx>=hN3!#GJzCUd@vmPd{HS&)Zo*7EPo= zG;_Pl$#gi?w%wH({WKo}9?YxDn~b^J!OIfQZ=3zx(ffDFDPcEG` zL(Mn6wuoZRbHIkzM`)xsTeLsoa?aL2|4C?y2R)p#Oh*scT?bFi*15#I`MQ#HKPO60 zPhD2$Eg?`aW7!twy_H;>EWdSlxtsL8FT@Si{F5a9+_w{iU1c=B*A+FLYi;-4 z;m@XcRMxazs2yzXZfc{)5Dp&>n$Esv@G|}IF$Z_p%@mQbes`8Jr;rme<+pJ2dyms= zCJ;I?x{AcGY1L)958slxw?D&om17l&bcXNs>`MkPee!i z@F1S6g)Sgor7us_KN+esnUzzBZSj+Z=n0;4o;3D}l;t0RL+1&9Cnn;kn!zP%S8{E) zdJ)OvHb5FK`eC_q{?Td#Txu1JDy`NPg`7e?mEDp44YxCI%RG~oSz-;ElqNhSV-Wfo z7Myeza7V04qHzE!4+G85^<@cE^;u)tk%yhN-d;vG*(xm#CJ8f^`iWgjf~k(#qnxaE zCkKX8M^o@Xbeq8hg3B?o!EO8Vs^jf!4vdWvwS2B~%%k?mzIoI4epdTY?PMesCj4(P zjw9d8?Sn%qKibo2Cr8FO!X%}}9Wt2oE=545W)#|_UGwl!c<2GNWsY+|U`s5K@epoR zW;)=a-m(nV@53-!?F(X=>40i%SZ4Ba$IADuk}!cc*mc`h@h;(-$tO_>FsiV4d15$< zkrlw6GTorE2=xu50Mj$b^BxOSPdIT0tJE;+6I;sAW?>w7xHJ8Lbk^QQl62sR<+7k^ zA3!5ZGOziDwO8u%JTr(5xVS-KJ*5KGXS}imbzXbJ+9#Ex4sIfM+W3_$W_kR~$(fe| zP`;~$oQcp&%~*&NyX4-5G~6`P#h4h^2|$T2(Thl_Xz#^2q{Ib;;!k%#1K-2~xa&Qa z3oTu$1d}mBsH`YzkuK!me>B&AE72QEsi-GO>4lY9jKgE<G)7-dD(`OL2Y1|e8=~&Nm0L`*gQ2S_Ar?iYS?^hU zhw=zpv6!{o0z?BX{Xb5l`>AV%<dg_K)8o}EoOMKEihy2N|w=vB7Q_X4h6FA_R}Sv_?UgMgbuaa|Uu zP!nryz$=`-LmNi-A!Z-oq86%?BSZ}}^b?|95K1^%UP@MZ^gJH;}5 zSU7M$;Wijvs%2jW&yZa1-BM6_tJL$KI zLUw5tkZYy(4HEuN9ohfL!k4;TZsMe$SOMIiX$4&ROQopaG?P)n*tXP zSktbjSiXB}ASs?|nXinn(=w|87jZ|#Y?WVT^Tl-zI zIEs|WMa+Wl>N(hTeq*kmz7y4l5omL}SZLLCiEv9xj`nDH;>=k8Kq;y!1r8_N!qoB6 z*8$!Yy`$xfjxlOYeEh9JF;_*e7~aW@4+NQUDyad~CrBouTkg?FU9#NwjS_~($~Es| zj3sEK@_y9`F#5)PLN0Wg|FXZ=M)N?wvd*J(unlmcTjpHC&u$Y5rb2d99Sx}F>d{5y zo^<&(;l<;JxU{a;3TbH(0PHCuGw9=zKJeaz`qwdHvO%rTj9PBw<0cR&;$H~?jMk$o zhimD;z66)%1oXDJic4oe*BFjAcTwQq#oKg7{ZV}Y{ZEKI**j_sZYP<)N5L`qyhA3P z%-CQpSqbd>);eQ8-6xY4)H_IptkX2oMrECX6rB)^^~DoMne!{9*!aqdKuO;Owc+R! z5iH0Xx(T2<1)k9u5gQ*0aNSR+G1=JLNy21C+e^n$jDGjMrt73G#yiB6M!MlZ>}Ape zMgDH}MUNRJb5FK^_zRK*A1<8g=(~E#(t4rcXj^9611!?_j!yv9k?+-PgcEv*DHSYn zle2&DZjv?wsuO}!-mx7f^WanB%OU9UrrbcH(5yGr4C;pKTVN}&_r3aDWbgp=CM@)L z4FWu{%j<;(|1xR>^SvV)z9a;q!CFqw>3?FyVoUjt#eTk&Ac#En+3(j`eI~&*E`>&C zf1`Y+`#4GT-4O(GXXZ&FYB{hSw*v#h^W zob5k|3;m>APQ&k;p*E|0Om}$3Ox^iBY09gB`e(WTpGT|Rndw_-kE|Bul$qC`>WbMd zlT(Zq)(N$;`K7RW+nVk=DNte~@W?3ZRbC&8*^OygU+YKrt<_pS@M`Cxl@kMD@d0qo zRtfr~@!PiIJb@58yC zxQXc(-Rs`B0Eg_W8GS8E+d5Y|L%e-Q>^CY*u5E24z{}$>BwNAkR+fOSCte6HOuT{o z8GOzKY8oEP*42lp9ZE$qi4#P?L?KklDJaw>P}A2bxJ65wObyu~$<_~&5@xJ51N-BF z{rfS_)Om})laY+scZx$30i!PD)c`F!-mwNiCFK=VRO1=Ct|;`HF!<_Ic=aKV-4zAl zS`smOq#Z+KdYX2Bi1H|tU~PGRK+yGLZ^VVQPP!)81dTpgRhP*O9sU3bH3(M|bRec_ zhT9(2sDO}P@LBE9Y68aN2X7w8pX({}#|&+-qDH~Mr&M;m)qF31&Vo#JpPFq(Iml!g zS%`q}Y*&|3ClQUV2{pc=#i^n;Bjzgu}u5qKU~;kArnlEu6*0y51ks*w)q z7DgZf4|ugWLNTO(HP9d(LoWrRs=~>zBGBRTQvoDpPS-23>3}D-GD6-<3v=+yAm@|L z0?w*YImu#NA2tPa(icSL22!_pt|uM7@6|0beu&hC@cvY>xK6;EY9t>N(5tIHI0;=g z`7nXNK#wn|lB_Xe%)^k+R)vCl9@hvQ7wb}Ovp7JERw1#+i0*2M{ z-EWQ-Q?P@UWBGf^wtOc9d2=ahU)v&SGndlH5O8$VWX$&43RliV^wwP@1)i*!^wHoDDljAeizzP8U z%!!^j(X9%wGy{vUp9m60A+35s7t1~^Fkec*Q$>oeSobM^4DNz`gS0{${KK=Zdbya& zXw-;h8V#e+P(7=!r21$e6a5OaSkswdnmE7I^`cS%dS5m35AF)F zuJ0kZH>*4iQe6TKpf71sOZxu8gHIhK`BjG?){@-&fLIFsF@z#n6|G8(CpBt(lZ8{? z%t{gwZHt?J5lH9EMdj6K9pDGjyFN|wbHDS_H#$v}Dk;T4tRP=Ww5*4C2EIF2*3dgx zt#5CP9zL`+3&r3vskK53p6ADEag-vgDHTSbn(}_#1~kZha_LsX|9KK&fHq2#L2{`i zXncj~*E8i&8rDH7@x&>OerGa(OKAt4j20?rT$4&yGxL=fM}-_~*aXEzMYci|&!s*5 zIk|C9p~9yRe(--*tYV*&-!m@KO8+q#K&>oW@#`Yqs-Jn~F9vZD_;6`L&MVE*K}Xi8 zf*d`qrjtpbj)T9e!#=t_L*;P+IIWofMX z8jBrb)!uQ3PL4idCtYNlLe8IShh0njOG?Ix^KjQ+;8VcOKa(x3{`F8Z2QR7%Cb+0@ z{2&>ofS2zl8_q?9dQ6RWrLmYITz3ajGY{wAdQ@YKMjNOmx(whr8s^%PP&Mf@{{dBsB34 zEX_IYPIJU$k|B4WN8-2Ou)uf*rpPsgL8Va<#=aqC48gopg^VOxvzZTb4C0{r@?Xj8 zQ!;nTa}7f-LKT>IqB zthTqKCLb;{@7W_CZ_%Sy_d_BZ*W5X! z7L!hQKDv_#$?NRBJZe3-`%00{4Nre!v~hAhum-tSuO+fr7CNPAnLT|CJ=t$V0>0#q z9%M57WG@K{zteZSE+paE1GO;ANz082ubnBwaOsuV=4W~{(2QdII z|M&QVMAR0mZGQj9CwhmDRgn=$Ix;u{jF(Cs>)aA)=*F*cHJ^8cr4@Frv%+zBz3{C&0`4o zvd_39aZ-{aqE11S*LNOdVX5;0r%_$|WQ}<+-jh58`@$m4fK*%i3qPJn4pvPbQ-pww zNG|-Ab2UAC*{J#gmH62UW;I0eS-x;y_=mB!P&|tWTA#)<9Z-}So_mf%T^SSxQkHCFra&ReMnghoA4^jl~9Ws(tS zZt1Coa{FwSr(~_4VY_3zq-@?zLhC044}QBOQsz^nY_`D;5VfP;q{TB)M z@GE&o+q5dRe}gdb(d!03U1h3uLRBfhim?@Xs&39d3N759db-KCk=OS!5kDe6pq6KR z8qhGCSE4^bzW@Yo8g-DiOiSU=xR1KWH)wSQVJa#WIp(j&&P~>1$%gug{5}rTE!rm# z6Z01Ey!zpoIy6d`Aj3P*Fa3P=%c~e;{iBdCKj~uDiy>%(gD}6OAi&f+tsfBkl}&=I z&U!akAPy_(f~ZsWlXal$$!%Mh|3XO?>WNLgja5+v6DXL9g%Y(}z85 zNo=G@zPU_TPt;gd`q-DbuIDqkAfw;ik_m}u^Tx;zkM~*Ce&Y20$W(Atv(dc!cZt5( zwVj2c>VKRm+7Osk4V}zJ6Pl1mW&EKdtOk0-FHGyqK7VV$o^8B`?tjEs6Jgi*N!%I6 z<7f%GvTRuyYLbdi!>fNN`c0!q#H!yuZA+a6_YDJoZc$a1@XSF5ReD+iY&-ws+gH9@ zW%$OH=b(fqv?c9MKfd2+bSYZ{jSLX|a$|aAed#tRYIeHb;6F!|za*53fNh@AkrWZ` z<}2o4n@8p?x834$b~1Cn%*};+BgJk!xyUY1$Oz;>A##d zZsTrC+Da{FEEj0Ps9|e}F*BtYfjc;rc81|WKw6IVlVLMoSJFasm+<0*1 zn&VwYykWad-jJ_vG_Z08)<^2aV;hz~kNtGGR!%AoGA7w^s{s?+WJ@f8r5uA(!D$9m zAK|_{7Pjea*2PyzrhFJI4%X$KgLck8wuAHAbgn=j$`e}?(YE|5&C1+dUyo@?7=NAc z!X$j6>Gj-1sM9P-j-%aPGH=AexI{8nA#J6VBKMkQQd!#cQQB)Yoe@vs4CAt@{~9IAw8r)q_uCXTsqIvZq|Sy%%BF}lh!dZHfGxZHm*@ettNH0VI2Oe z^guh`AACOtn9_F9!1rKzHPRKGm~r%5bLYWpbl!6#{VOdHzIyEH#)&Xo!?ywu+QHmh zK`4&Ui4*~4=f|ZlB&U87M#+}-utEwhF1=Gb+oxLO9_Ya8)IuBSHoOz1e2z7jsqcP6 zjO6;{K0(C{L{4ToOw@1l@r=ndqm*~h_}Ry=>o&pZe=yq(>5EHq3ENlrWZK2AlanF` zZoTQ22Pu@p$5`~mIeV5AV81YcG+2UFbJKhb@XN^Hpb8$%du&~c=tO*ZCyA(whIOo) z*~!beoP+hKa@;7Z1j*s%&w7|J{6?(tDR*T4Sgd~2BbfOz3p?)=dBZXc4DQQzoj2D& z`l`!TC^P@aYjV|(=%62mslm0dXr83x6mUS5XVBL*wWCp5AMD$j5<*@I`t3nrhR10z ze(o8200;qUxtZ|J_Oh~Xeprd79dX!awrYynue_CQUR8T!JCkl^9~z@1&Ys5viWAhh zSv>VIB`icv?sg27EaKGu`G@a7?wBu)Y|6u|{|BnP`}0K+ zl4#~|ez>)@Q^3a^*$-rWAfiL-UeJh|Ahwx3>b#l~3W)nsN~UBvjG}<;k8MlSxO4jS z7HGJ3gG`)S3l*#o@+Qf3E*zaN?Z9gaT?rr zwKl4a$>3#+u~Bt+1DvI&d~ zUW|#A^!Co4VDI2)fb^1a!XW1AE7-&=aKUPv*G+;(fseio{xPD>^t_r1J6j6n9|ZkY zCxXDYiD+dQJ_u3?vS&32MaqSa?C9UZRHAN*7jGy~zrdNs(%HX{Z{t7YGs-Dbw|30r zJ-U7dEAk@RZk3w}Ub;y!(tQbil}ejc5q3pCgp>h89`%CtK_>UDx0478FpY~JP~q=L z1b!1X>$c1)Ou#lpI*r3h8y7^;qmwo&35W=e^}|)lE+2sleGDz?ic{fG|A;`ooih=W z+0KzO)wPH$3t7}_)}0Inc4g2oUVm{z1H&NyTB~(5#szp;m$H7uoHH#z)(KiqrsR<9 z>NwSJ>W~XZ1A%6s7}tZVF>U#riYija14sP7g`_cmHZCFZt96!Og$TWBgnA!22Qti) zgEtMlDOQl_=9~iM0jYzxH&I6<)fQi9mq~FxpL4IBH%dng+rm={8X1`k*UFaYoZz!o zDx3Im=Xv?N`7vV2wo}lra$`;@VXI_a-yFe_0T)+kaUQkMch$*osPz znBl|u1w>L>Y#L~)jOuOe6zEYnw+}U+-li??4|q#4zkNtT=2SyLOr#{8GuYmJxiv(J z7^JbIl{McE03n0VUaRyJ_p>#Hrnt$=F%sRIg$VEpD;mD>7&Yh)ZnLx9D)U8TJPGm6 zBavJ%rY(M56y|%XwYA*foOxkZ%vrDHEkJX`lY($TB>G^8=*Xrx54>O}SQZlYA8Wu{ z_BLBrH~mvR|2!?jQRFD4z^DBy;>v!oD-Il$RO*qA?rL|z3*6Ms3z*5As<#)E~ zxHQ@PoZSkBOx)(d0>LP>b+WzthT@&iK=FV1$L&A7#rD@nSxO34eXLmBsCUG&XEqob zjS*@eSJ&{Y5!;9E7GPHkes_K`{nO6kLd@Hw=jx5>`-WStvIbqft*Dd8j*o!jM`v9+ zNp9M1LqfwSq6{ihjpmB0;~>*vva`dHP9rr$rG@-y3^i>$)2*zI>Ebk1TavGa*Vtx{ zV^LsfaeE&MYLr7N*LQMeFQg3BgDn*G;%PTe)917XzrOtT@DpfYlM zDRco}w%zVv--V0b15mj0l9C)U7|;df$GPa>hVi zaeCaVHg1+ZNNcp=Mojx9*Lf5fZ8w%@K2aKM{i0EMd#A>{y+Hx~#T83D;Xz2W5JXE< zX9++MZ9~g0f6q6G#9u7LpmEzZRLt*$14hlLY)P7g869~M|5ft*Mg6tT?=*bfP z1(Z=D6F^tFlN@tF-6X5ZYt@pW(BXWtJb<2Y&pyo3FQL$$e$+;#m(@3H0licts& z7DxSAdXSd3Js)q!*K0y!yzXxDaPzpnWj%IP>1=ZNP)iFfv*?t1g1-GJ_q@3+;k9xe zZ$0AACBu3Y#DwCdn0R^uiFg+Io=Rzs`tRIShUdM2jj`(iF- zD2g6zm?6zN$$^~64*Je1(@)iNNxF?v(L8Ab%NDb4zRe{TOYHUNs-*7S4#3aB=KbEo zF;^qMHG1%cA-8gP@z7pORq~zpCT!+)lK;3n@^SWQ zhQ{dfMkbJ+;3mf}UD5DU5sG#v!H@SRZGc)#U77?dojNr#o1;QWKtWWbxul}% z{(^-4_!kDkH&A=R5703Gbh_`5w9t+dKkH?oD7GqZJ*+mZ;pck9B64}d_+$&5ys&M7 z_hN6;LM_@8u3sa}jB%2BMmK&)VT+YXnZpvzQcpHzL`swT7$o}HI6*n09H8fX_@s?` z&m=tfTp{hudN-+fYcW80J-1@4q4)4M*0hvFyCZ2xaI3x*l8g^3W2Ox!CPORQ47u$5mmlH zF)G#5rly6>KB%v?qZ9@=WLv*&LK4=QTvp!a{H#9MyGzzX+@tcB))I=jPQWFR4E|UqvQ4GU$Dt5AQFct; zP{*CN#RM%4&@qZF-rG0A9wod@BZL%$Z}?|^z8n~{=yVTZ)~;>G5CO&|A^~-7rsawlox2UP^pR+w>enJm`73 z+NW8zxfL!O?9HnDSF}<4G+Uz8Czg|SUfZA@K=x0;QaRf%L{QK{2MM!=F^N|=!U8zJ zBx!OPZ?R`{bqTg;3{Q@?!@8`E^Mns59^Mb2oorGmUuT^-zG%!(K$-zegAt!s{ww`@ za;_T~gnu(g6G`}a3ICxc0su(wSozQME75_Ugy_HdcmMn@1eaLO&ku=@n0Uy~Nc6us zP5(#%0CLFh3?~UlNRmWX0bxjg>cnONQlfvRXaE4#e@X+|KPKu^<0QfhqH+KC|A~L( z_BsBC3HTrV^51x#*du@=@ZYWWA5~1Q|3meEHQq#ML1xGx?!-^b)QMVxXhQ$pPX4i# z!}EXG`mg4as3^z*S;(6hEXYUnZ!mr*GydEVGSHP=2K z%&-&a6?M5OGueV=1`~RC0EIBa0yb()KJI(G!7x})F1e(DnzY_`l|rG*`_5*3?BV5d zRUw>jBAF2~OT=gkD-PDF={Gq67ddi4MV0!+4e=3_c_eYiCt(fQD5@e$R!r!0&vcAC zNV@1cyRfsVzEEY{p0MHzHglkiab!5~S!rhq&+v~{6|H=~u;EuPrP2Eosgvx97{bwm zryjCowCw-~4>@ODm&zxU{kFlr-+5-;)rMkn)Y1+dps#E?)R_4F1YbmW3C=k9r6Z2= z!Yj37qlapFsHjCQF+zNIJ@ms{xm^@^$Py#aFUr`a%v@A%fAu*Yudo4KTtAux>c9@g z(GqvveQ{ES(c^j6^j?8ltuU0oqzI(BEhb<1UP%|3p)GhV7TV*tX~JD3-CS^q3!fTv zl>K&`B8=DNHfxcHeEaJ>IR|k!p;R7nWhV0WyIA|K5h^^Xh}jR%@JI0P1W(W9{2T|e z4<;YG)U)271EidySznRK6tHwLWC;ig4zVK5aj^9VT6gjk@ zEZdn5{XUh))>af;sE2&ap<>@>I_L6(ic9_&w(b0dOUcN}t%49P#%BnLmxBIakVKoQ zgNR|W2Z`~8GIlw@XqvoD8MaQQIVmtWrHCr-iBKSU(|Ow|B&=5BFz)L*T1?L#Ujm+r zH@b;meDmjAus}b*m;qKBIJW;~?4HgVfr{DqF?a98>ASYJJY#4ELiWz>p$JlAXOWyI zKCqH5@4w5_$%kEP=)yf(aLrpMVLfFqEsQs{R)6=hN}r*+GI)R{u1y6z2=pBZ1j2qH zesbpacJ*+wa&>j$`t;tpQdi40lLsd-xA7VBpk9X-2FcK+9c@%z)vYqSH*DKLWQQcY z$15m*4zSZsYzioA&$qBPe^|X<%|3Z3s8F^WPbR9*q45Yy=s!^1DR`^#?PS^Ym_&4` zR?M!r@)q%^4Ui|EsWG4O)_zY_ydnb9JV0ZMcEFpSF@mv|OxyH3)m9djr+qFq_G{P5 z+HT)i(JkJ!rtl@i7Zjsm_(M81oj*)pVxS2tVHuE7hI^|BAJm>10FrW zDn6(!xgBN8EW;CJoUu*E=s!n`v|#mqmN8_4YR-;g@yg(*va?Zh zxcKL+ETG2FB*TQ|2u6DtZh5HV*Q_&&^W;=Wano&T3KvS=jP!;^94Py#a;hkg?Nx$z zcA6CHPc~gR%lMtoBiM(c!vRvJGCaQ6XC6i{yvaYH8mh!(d@8jRjr_yPe;gkz2QBvemtveWzZ@;3|?<#}`bnT&5upuBBcCPNz&AW~S9E z5EXD3;Bw?duuMBCw1i0zVD3C;t3II7{O=xhs%2_%?}5>0dw5O75GGmkCJu~}i7Kl_ zF}2?CLTp!srSK$h9E z%dZjK0PJ`G=fXurEg{K%;jQ5hEIvhe4!*Y6<9zQi=p$mm(~L4t601p^SE7S-rWl8n z+@<9o7C5f<9TT??%mWXbgI%{bTg$G5WxYkIu*M$SeHRXMUBaGk?n|Q<-P|e-?!)Jr zmr{lMbGO}Z#*e6<-5$Hd{3Rq)fp-$8xL3oOo1SJprZMuvm!54Vl-w1m9w!OIe`-zU zo`(Bp_HH~_46tKnT*Q@!e)%_=yua$#390B;u+oi-%k*lioUiHdFwYI57&|JzdWf6O zO#S88xOzvw`LUw^=g-tAuO`30w8z5BYL5+QVibq-2D!OcbCzB`m&1?!#X!a7#xU$T z^#*`m$2kOYOFFa|QI}g^8k*mY6yn?Y+zfstshZzaJiC!17%DE5y?u|bZb8m=8<1rB zF*dmo#?-@a7>Gp_cHnl|?$b*8m*LG}fgi6Z3Aj?laa^VRH=L0tGBsqJps@BaFE#6bmrSw~p^Bo50CdSf5+;y zb*$j8}>hKb>41tzn;%sL$-YMy$HXpfhPE2c%g4W^U$_>0s)LIjct_d zu6Mr78*YKN})q5M^ zBX&M@hlSs6%;Q(8fM)*=O7pnxThGS8{vF;O9FqaVpas4mCOhZf``My*v`-=muKqiF z+O`q)_db(VokZN9(kO+CkSrTM4ez&@t9dLF&g$<(`K(Hi*2_sQE# z6RqQ6Q@sT*kN*08+Y*ZYSr5#$R!UbGm1Yjvw`4Sg47M^{@b7+|G~wfXbbDo;IrxBd zr)VahOp*8@AT+c>_;?e2FR2s-%xaYKrC9;qG~4`?tPy5%UHb}V{7K%k7k-oVoY9cp z8J}O1BcTavBRyUK!e|*H*vItFlSVp`rc zqc8CfH6u|G=m64zkOF?j{Vu3sAit&vBcJ(b6vjRU6nR*VlAF0($%OGxP6l-j-W0SH z;7u`j!P?_^`hxz`kNm&TJO22c{6@5ZDfQ@4&L$Owqbm=z_3>- zHCpE6_3$J7)tiwtIS9`%I>f@gNxa8C^2R3A*-E?FB0$|lhUlAp#F@Spgc~|IGR7vs z3zQkx9@Apf4`hUO2RR>-SH;xoHq1HJ?WuyRhzhgn(OS`~A&y2Ccnu6h6r+TiZ=>^T zXfV2siPDldBDR@|@$9hd=^{54yy;%1ksIz4ip;l)E0&LSjxOOq--J%>=b+a^933ov z)H0-yiq=CsB3|amyGtGrqaOv}*|>P5k&L7T>zUwG@*v8J{JV%zZ5W-D#5j9L zNpmt*cy$)5E)l2leH50=L&Tjgc5hl`g2t;^@hT%)hTwC3#~}(q)7Pdu)Frzbmaax8 z`hrtwreSLpj%lfmcBapk6QT4i$V;5^dpADhgA6CANZA1`FR>%=d7ZDmZUrUft`w)L)ATGqnZ+gw6w1imB3=@*~c?``)*1Du5tNmugr!T`g2SbJAi zR@$(IwY#cpE69}@E!aD0wHDyXO)KIwR0wIyKwMBWio(tL4)3W{o7i8bv=ropZ3$V8 zHb_9^w+wn&Yz``$IcdKb#d^;Q=nZj(x>U9cRMdVDRZi1ST)XW++F5@RfX0<#I+MH3 zXN%lm?cvAxX+G8cuZ)I6}q*>y4@SUYch}fQPj@oS&tJREhZ#Iw%6)oZw z-;#0DHUocT+N7NE+6ch0j0l=*ROWfELn>Y$=IdcaZmcX>78o60DqZ*37lRr+?CAJM zO=?}ZfwxjLW6rqSRe(MC#q$p1(n|wjtbLt!4K#);knoKqAsgGoW{XuWD(%0WpuWx= z23MIELtfh0{&=C{rO-#$e(Hm>=$>pU+8CQlNgv=eYzZ06mWKF9^w8Mx_L7+3ww(GW zZ^Gf>2#*q55=EUFegBT$hw4OXiPwVZD56ASv1V-+-$DaKuPxz=F?o$k=P_79e29Hz z)`EC^*$)~f7+hguVr88cD25D(cj)b??2cLK7cZXDLF7G~PUuS-CV!3S86Z=eh|{LD z734Kd@cA@^*)qhZ!cS>!j4?IShU-P8Hpg6qL-exZllLCn_>maJNTk+0>8Xs}xy*!C9*&u3g3xy?S^#op<(r%C! zI4uejBJM%*vJqCwb!|6Siah@b6|_r@Eze^#7<>`y{V96fz!mMVsk^p{A1OakVi#|+v_nrhI@12|XH8(?-%kaPkj?fS1 z3!jm+UOiK2<`8mTs_*zOjj^RGKTPJ3Vz7rudfSqz0BF8%Xfve5D#G6eFjQ7^CHG2cY_Ij|A1! zhh$~Uav0{$NGHa8FB@4TNw$F*q}!D;F=EV1*jRrUJLkAjuHUGr^eSZ{{0}MVM1!-} zAQ8#@-J*yftKmOE41Fj{{xsRf+FXsmmI(=CUd%`uqk9_pD@|1Q*xg54?b`p=4Poy^ zx1sLP#0Gw75P)<*RiEdYh5SMbs*#^BvS={0<6GlH(she5V>FN^R7*=oa(R0c#xLL^AP(Iu>CC%+-J*#hB3dJuzl^d1Bny_=<*Ud!1ML<43-Us_6&<8UUaXl zbQ42I&=>m{EMdmfM$&^L@N6RmHT5Das(3G(-R4&QmO}F{4c6V+A9AgCGA3yZFZykB z&V_h_eM*pYV_(F{zlcLhQtr&hW|8{P1o}tb*sNZfzzd`3c#}whX%qt6i+hT7SpZcs zqDqtc4_z<8ZVv80y4WH>g9tU*(CYKFtZe)UUw*?z4P76Cj#dweOgPfxiLRVPelhQn z#8R0`Jd*B9S2g1$JIdJVm}f#_&zsm9PRH3kBhpN7z%fd1Us+(VjPVhl;WG;vRHuWz zZYMB(=lp|Lc!*iJH2}2_@CV{L`2(p#-53K_7m93SZhhjn?|W&DF+7o>-YDX0lj&qrt?A+YgQwAt_CvqQ8M@BCZ($tl4B^~WrMo0g-dspTKV0a zHReSHAjW6?;j{4gKohFl6tIAgi-T44&Y?jN`c@w_s;_$j_ z)C-hN;h#HL%i*UbXnhfyvY6Gy@_WQqdnrLjayQk*2!@>nDz!G4+7*1w5wrq030A0X zvr@k=s5)g`*LVO^y5oY(n1y#VjgPg_9+hES_~Q(RbaZ$6qPiXG|h$mX8Bx23y*=iY- zUN^@6<(l8CS&8$?PyNDJB~vwU?1z8+IwHz$8|Rqr)n*~!8-_Q)6!uMiz$-p1BX$s{ zvqNNfO?}r{M|Mw;Zf)5U^}L%2R$wFJs@C(qOPQjPz$s>&fE zc#6JEQx;-ITTawB_$Ssaxls)#A1T5d>?Wro;z}mcxBoRYx&qA#3f`0ZF-XP`V}5Qf za+X>t2xI}T-(chQN2746v>O&OpnK5*qsHgV^FnGN#|&nbGBe=e&=Sh`9VBt>`kjKd zeK+67k`0&H!1g*Xas*2k!I)er8*u|%~1i0&L6giA3brdn}JeCj)r+h&b(eHy$ zC6vTSh9ieGwC}W#4f&7_*&Cc+X;3r@;GTf+Ie;tiZzgarH@;(Piyb=o;WVQW&h_(TFpVLt4V4b;7ESB7%__m4;k1ai-!Dxk!kSIEM@l zI83mUzVS&c^&DBmXfvfy?r~o|vUamHs&`FkthSo#YiyevgqKb}i7ebz|H=1m%k{)6 z-ErQTyzZv;J2$BzEj>Osk&?LYq0qd$TKT0ieO*`n=bGAo_Z;V1#i*wnv%G)k8tnQ+ z(mQ!tEH)cHS8|o>MkqE-Eh#0iIvG%SQ+0A0_%$xr>ypg)tN8li{loISm_tTW%T71` z&20_U$`kcJg{B4^sy1{W# zzgquxNk7YOcxPWX@8wG{h>A=Vlhb4(HqSUwJ4Dni7K16382>)qO~ofliO4#wW7sr*~^NV$s+uPKk4OfR2Lwg`xt>#LX(?(po5z{03#`!h-aR{2jf%YKgOEhMB8y` z*hjT}v9Cre1_dO(j2k-fyn#>Q1!E6l{G#J`(Oi+gTf2~({lqJMiad&g!e@WSe81rE z*!V=fAT?;7M_)n>cQQE2mX$4g^-&l*1^JZ`V5j!zw|cj#T zzSXewdNaHQAT{Ko!64$~>AFU+_$qDQEB%L(7D)~5YD|0{&id^Kj382vNh6of#NV7E zzbZa~x=CAEV2c>)SgCmyM%$dID=UXQy=LrVs(?0KhFmUsWZ0qh03KcY+f4rbw+1EE*HnrSc~t^oI`Fg!hYM!tccJh$SAa?#4+}$WGz}f7$r&EskTufN^*v>>$x;<9J9j?NJvvy5x5oGs?Gd`1SImixs!-*-wRWMUN)R#DAH2+*kp7Qj>mJhlU@deI}7fjyW5-G`%9d1hmJe?Jq;8qJ$Cr{l{ z>h-KQG04}lp}Bsc(#L@m(%peV5~?U>Pzr+SvbD6f-XTy_Uy7P3)bQ6oN2C z8S8j0&JzT)Vm+j&X*{E4r*HW!B?xBSuU}cb4&Jm+>Ok$SE6Lwx#&pZZolhp!q6TzT znkCSvdmt4?RT-|}ePeX-nWCN4$7}bnX3-yYhJ)Y?q{yR*s5w8Zhyk7+=^VOT%Dge# z;w9Z88Xi}a4;{&Edew7Qsar=X=ae{4T)A@eqs7Ur9b{}PRxF+1+ zI98Tf0sT0y@VwB`{x|5u5DD2MK>!tO#`K< zOLVty%F-x_@CEz6WbEg1fwi;hJ{y$cYpBbJ2N+T#6LLS^(z3E!d_E*)I|V5GbB-7V z_yr<059#|gyFvtUYUWr9t@n}DCM5}8E!WPE@ZmcW$wfNAhan_7#m#Z1-AkvBAcvDF zILPsH-C5?Q0OyK&oV~vv3;*%`qM}vYAUc3+`Jlh(%C7S!*vGfMJU?u_n#)Z%v5(+aH?g4v|q5S zFVfcnH?e;v)^T>XDPlN_9!?+r84fchDLgA!366e)Wl8edId4cZ3Fei?i!UdEIDBq?x`3 z#SGf!1MqlUQ@LDR5#@N%oU)HtvHVF>mADx1-N5d%OC0Pq+Oji-*$DBc)#MfhcUA3LxxD?$uw*Zu(>SjSAl` z%sDv_pG{-w^P5IA{I#DCBJLiI^pp1`ZceXKLx}-X+BKki+>wW-;hKbCDqY^JR)q;K8qir% zl)C4VH!rfP0O2Y#(1oaw^NW$pNhUWmsJSol9H=``tG2OzJH_ErYtb$iMtEZddN0Xg zfiiJ}9{)DhH8$%lM#<7P)!t4m zauPejk-0K4N~oQK`*$v(53O|S_-&q>38P+uvjIcu!0cQIm!($NINA~vgu;L3McVC= z$+?iKa?HyR`?}_l99goqxSnfc7Zho1Bt#-Y3&Rmor(R5!9eJ9}zIM);aJcZ$rYw2T zyp}cIciJA2XFeX-qJQ<(yJ9JtfcMYhwtKtv!f$;N+;5*dAe%Al8>14P5Uj%QSnD}D zlLOhohG&Q3C-o-cuIbcLS|Qp8n)HX*e@p>LMW30HdI!D z9y%zr3vCcdMB~+e94mXlkz}CiqLhHy3ur_T@DFJ8$-8dSJE@3{q)72dKybC6%FHcN zur}eSv8?3rdQnL}vk_ZoeWOoecf~JOqGt`e>v|w*N1Ma{15!X-gnYBI5RjoD+>NaHiJ!IRy z%Nmr!RK&E#*?tFqRxeFckqC%Pov~nO-3?zOQXaaI!-f+`kNh})T5Fhhn-{QC_bBk^?czc49`Js6xaf)ry*=ROF;myclm#yrnwlK>qO_eRIgKnA^n&!+z2ZI z$X3kPStf;=ZN99+Ua=Cy3UVY-F^F8$)*aigjI*KM1_uEWgU_#CD;bS>#WqhlMAmJa z#81et<#)EaMB7ZI0=B_|zt)`*L?V8faKLzB6#bMuv-G%>2|;m+UHo3yI25w4@RAzR zz=+R2lq3$^Z}*ZTbo7t&9#w~1b(%MVMcS{M$zt9w%O6$7ZJy&lbo=`5E4*T#JBmbL zz!KV}+8c9ovgN@6~6mo+M(u^6|d`wmRt(8&y%&bTXLmx6pWgOFmN$ zLUGZF8cHSCkO|Ifw#{XmuxYAw$M zWmF)8r{aRjC { + let sheet = context.workbook.worksheets.getItem("Sample"); + let chart = sheet.charts.getItemAt(0); + + // Get first seven characters of the title and color them green. + chart.title.getSubstring(0, 7).font.color = "Yellow"; + await context.sync(); + }); +Excel.ChartTitle.textOrientation: + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const title = sheet.charts.getItemAt(0).title; + title.textOrientation = -45; + await context.sync(); }); Excel.ChartTrendline.type: @@ -266,17 +285,6 @@ Excel.ChartTrendlineFormat.line: console.log("The trendline color has been set to:" + line.color); }); -Excel.NamedItemCollection.add: - - |- - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const headerRange = sheet.getRange("A1:D1"); - - sheet.names.add("ExpensesHeader", headerRange); - const namedItems = sheet.names.load("name, type"); - - await context.sync(); - }); Excel.CustomXmlPart.getXml: - |- await Excel.run(async (context) => { @@ -667,24 +675,6 @@ Excel.Runtime.enableEvents: await context.sync(); }); -Excel.SettingCollection.onSettingsChanged: - - |- - 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.add: - - |- - await Excel.run(async (context) => { - const settings = context.workbook.settings; - settings.onSettingsChanged.add(onChangedSetting); - - await context.sync(); - console.log("Settings changed handler registered."); - }); Excel.Table.onChanged: - |- await Excel.run(async (context) => { @@ -749,6 +739,24 @@ Excel.TableCollection.onChanged: await context.sync(); console.log("A handler has been registered for the table collection onChanged event"); }); +Excel.SettingCollection.onSettingsChanged: + - |- + 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.add: + - |- + await Excel.run(async (context) => { + const settings = context.workbook.settings; + settings.onSettingsChanged.add(onChangedSetting); + + await context.sync(); + console.log("Settings changed handler registered."); + }); Excel.WorksheetCollection.onDeactivated: - |- await Excel.run(async (context) => { @@ -767,15 +775,6 @@ Excel.WorksheetCollection.onActivated: await context.sync(); console.log("A handler has been registered for the OnActivate event."); }); -Excel.Worksheet.onChanged: - - |- - await Excel.run(async (context) => { - let sheet = context.workbook.worksheets.getItem("Sample"); - sheet.onChanged.add(onChange); - - await context.sync(); - console.log("A handler has been registered for the onChanged event."); - }); Excel.WorksheetAddedEventArgs.worksheetId: - |- async function onWorksheetAdd(event) { @@ -795,47 +794,24 @@ Excel.WorksheetCollection.onAdded: await context.sync(); console.log("A handler has been registered for the OnAdded event."); }); -Excel.Worksheet.showGridlines: - - |- - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - sheet.showGridlines = true; - - await context.sync(); - }); -Excel.Range.set: +Excel.Worksheet.onChanged: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + let sheet = context.workbook.worksheets.getItem("Sample"); + sheet.onChanged.add(onChange); - const range = sheet.getRange("B2:E2"); - range.set({ - format: { - fill: { - color: "#4472C4" - }, - font: { - name: "Verdana", - color: "white" - } - } - }) - range.format.autofitColumns(); await context.sync(); + console.log("A handler has been registered for the onChanged event."); }); +Excel.NamedItemCollection.add: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); + const headerRange = sheet.getRange("A1:D1"); - const sourceRange = sheet.getRange("B2:E2"); - sourceRange.load("format/fill/color, format/font/name, format/font/color"); - await context.sync(); + sheet.names.add("ExpensesHeader", headerRange); + const namedItems = sheet.names.load("name, type"); - // 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.NamedItem.delete: @@ -857,6 +833,34 @@ Excel.NamedItem.delete: await context.sync(); }); +Excel.Application.suspendScreenUpdatingUntilNextSync: + - |- + 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) { + 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(); + } + } + } + + await context.sync(); + + console.log(`Ending. Adding ${rowCount * columnCount} cells took ${Date.now() - startTime} milliseconds`); + }); Excel.DataPivotHierarchy.showAs: - |- await Excel.run(async (context) => { @@ -1014,81 +1018,38 @@ Excel.PivotTable.filterHierarchies: } }); } -Excel.WorkbookProtection.protect: +Excel.Workbook.getSelectedRanges: - |- await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.load("protection/protected"); - - await context.sync(); - if (!workbook.protection.protected) { - workbook.protection.protect(); - } - }); - - |- - let password = await passwordHandler(); - passwordHelper(password); - await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.load("protection/protected"); + const selectedRanges = context.workbook.getSelectedRanges(); + selectedRanges.format.fill.color = "lightblue"; await context.sync(); - - if (!workbook.protection.protected) { - workbook.protection.protect(password); - } - }); -Excel.WorkbookProtection.unprotect: - - |- - await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.protection.unprotect(); - }); - - |- - let password = await passwordHandler(); - passwordHelper(password); - await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.protection.unprotect(password); - }); -Excel.WorksheetProtection.protect: + }) +Excel.Worksheet.getRanges: - |- await Excel.run(async (context) => { - let activeSheet = context.workbook.worksheets.getActiveWorksheet(); - activeSheet.load("protection/protected"); - await context.sync(); + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const specifiedRanges = sheet.getRanges("D3:D5, G3:G5"); + specifiedRanges.format.fill.color = "pink"; - if (!activeSheet.protection.protected) { - activeSheet.protection.protect(); - } - }); + await context.sync(); + }) +Excel.Range.getSpecialCells: - |- - let password = await passwordHandler(); - passwordHelper(password); await Excel.run(async (context) => { - let activeSheet = context.workbook.worksheets.getActiveWorksheet(); - activeSheet.load("protection/protected"); - await context.sync(); + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const usedRange = sheet.getUsedRange(); - if (!activeSheet.protection.protected) { - activeSheet.protection.protect(null, password); - } - }); -Excel.WorksheetProtection.unprotect: - - |- - await Excel.run(async (context) => { - let activeSheet = context.workbook.worksheets.getActiveWorksheet(); - activeSheet.protection.unprotect(); - }); - - |- - let password = await passwordHandler(); - passwordHelper(password); - await Excel.run(async (context) => { - let activeSheet = context.workbook.worksheets.getActiveWorksheet(); - activeSheet.protection.unprotect(password); + // 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.CellValueConditionalFormat.format: - |- @@ -1690,119 +1651,61 @@ Excel.TextConditionalFormat.rule: await context.sync(); }); -Excel.Range.getIntersectionOrNullObject: +Excel.Range.copyFrom: - |- 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(); + sheet.getRange("F2").values = [["Copied Formula"]]; + sheet.getRange("F2").format.autofitColumns(); - // Asian and European teams have separate contests. - const asianSalesRange = sheet.getRange("A2:E4"); - const europeanSalesRange = sheet.getRange("A5:E7"); + // 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: + - |- + 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: completeMatch, + matchCase: matchCase, + searchDirection: searchDirection + }); + + foundRange.load("address"); + await context.sync(); - // 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. + console.log(foundRange.address); + }); +Excel.Range.findOrNullObject: + - |- + 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: completeMatch, + matchCase: matchCase, + searchDirection: searchDirection + }); + + foundRange.load("address"); 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"); + if (foundRange.isNullObject) { + console.log("Text not found"); } else { - createContinentChart( - sheet, - "European", - europeanContestRange, - "A25", - "F40" - ); + console.log(foundRange.address); } - - await context.sync(); }); -Excel.Range.getUsedRange: - - |- - 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.hyperlink: +Excel.Range.hyperlink: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Orders"); @@ -1930,6 +1833,156 @@ Excel.RangeHyperlink.documentReference: cellRange.hyperlink = hyperlink; } + await context.sync(); + }); +Excel.Range.getIntersectionOrNullObject: + - |- + 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.getUsedRange: + - |- + 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.removeDuplicates: + - |- + 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.RemoveDuplicateResult.uniqueRemaining: + - |- + 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.RangeFormat.textOrientation: + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B2:E2"); + + // Set textOrientation to either an integer between -90 and 90 + // or to 180 for vertically-oriented text. + range.format.textOrientation = 90; + await context.sync(); }); Excel.Range.getUsedRangeOrNullObject: @@ -1966,16 +2019,39 @@ Excel.Range.getUsedRangeOrNullObject: await context.sync(); }); -Excel.RangeFormat.textOrientation: +Excel.Range.set: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B2:E2"); + range.set({ + format: { + fill: { + color: "#4472C4" + }, + font: { + name: "Verdana", + color: "white" + } + } + }) + range.format.autofitColumns(); + await context.sync(); + }); + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); - // Set textOrientation to either an integer between -90 and 90 - // or to 180 for vertically-oriented text. - range.format.textOrientation = 90; + 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.Setting.delete: @@ -2012,6 +2088,146 @@ Excel.SettingCollection.getItemOrNullObject: console.log("The setting was not deleted"); } + await context.sync(); + }); +Excel.Shape.rotation: + - |- + 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.ShapeCollection.addGeometricShape: + - |- + 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.Shape.fill: + - |- + 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.foreColor = "yellow" + await context.sync(); + }); +Excel.Shape.delete: + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Shapes"); + const shapes = sheet.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(); + }); +Excel.ShapeCollection.addImage: + - |- + const myFile = document.getElementById("selectedFile"); + const reader = new FileReader(); + + reader.onload = (event) => { + Excel.run((context) => { + const startIndex = ((event.target).result).indexOf("base64,"); + const mybase64 = ((event.target).result).substr(startIndex + 7); + const sheet = context.workbook.worksheets.getItem("Shapes"); + const image = sheet.shapes.addImage(mybase64); + image.name = "Image"; + return context.sync(); + }); + }; + + // Read in the image file as a data URL. + reader.readAsDataURL(myFile.files[0]); +Excel.Shape.incrementRotation: + - |- + 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.Image.format: + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Shapes"); + const image = sheet.shapes.getItem("Image").image; + image.load("format"); + await context.sync(); + + console.log("The image's format is: " + image.format); + await context.sync(); + }); +Excel.Image.saveAsPicture: + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Shapes"); + const shape = sheet.shapes.getItem("Image"); + const result = shape.saveAsPicture(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.incrementLeft: + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Shapes"); + const shape = sheet.shapes.getItem("Square") + shape.incrementLeft(-25); + await context.sync(); + }); +Excel.Shape.incrementTop: + - |- + 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.scaleHeight: + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Shapes"); + const shape = sheet.shapes.getItem("Octagon") + shape.scaleHeight(1.25, Excel.ShapeScaleType.currentSize); + shape.scaleWidth(1.25, Excel.ShapeScaleType.currentSize); + await context.sync(); + }); +Excel.Shape.setZOrder: + - |- + 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.scaleWidth: + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Shapes"); + const shape = sheet.shapes.getItem("Octagon") + shape.scaleHeight(1.25, Excel.ShapeScaleType.currentSize); + shape.scaleWidth(1.25, Excel.ShapeScaleType.currentSize); await context.sync(); }); Excel.Range.style: @@ -2151,6 +2367,82 @@ Excel.NamedItem.formula: console.log(`Just updated the named item "${myNamedItem.name}" -- it's now located here: ${myNamedItem.formula}`); } }); +Excel.WorkbookProtection.protect: + - |- + await Excel.run(async (context) => { + let workbook = context.workbook; + workbook.load("protection/protected"); + + await context.sync(); + + if (!workbook.protection.protected) { + workbook.protection.protect(); + } + }); + - |- + let password = await passwordHandler(); + passwordHelper(password); + await Excel.run(async (context) => { + let workbook = context.workbook; + workbook.load("protection/protected"); + + await context.sync(); + + if (!workbook.protection.protected) { + workbook.protection.protect(password); + } + }); +Excel.WorkbookProtection.unprotect: + - |- + await Excel.run(async (context) => { + let workbook = context.workbook; + workbook.protection.unprotect(); + }); + - |- + let password = await passwordHandler(); + passwordHelper(password); + await Excel.run(async (context) => { + let workbook = context.workbook; + workbook.protection.unprotect(password); + }); +Excel.WorksheetProtection.protect: + - |- + 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(); + } + }); + - |- + let password = await passwordHandler(); + passwordHelper(password); + 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(null, password); + } + }); +Excel.WorksheetProtection.unprotect: + - |- + await Excel.run(async (context) => { + let activeSheet = context.workbook.worksheets.getActiveWorksheet(); + activeSheet.protection.unprotect(); + }); + - |- + let password = await passwordHandler(); + passwordHelper(password); + await Excel.run(async (context) => { + let activeSheet = context.workbook.worksheets.getActiveWorksheet(); + activeSheet.protection.unprotect(password); + }); Excel.Workbook.getActiveCell: - |- await Excel.run(async (context) => { @@ -2163,6 +2455,39 @@ Excel.Workbook.getActiveCell: console.log("The active cell is " + activeCell.address); }); +Excel.WorksheetCollection.addFromBase64: + - |- + 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 = ((event.target).result).indexOf("base64,"); + const workbookContents = ((event.target).result).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.Workbook.save: + - |- + await Excel.run(async (context) => { + context.workbook.save(Excel.SaveBehavior.save); + }); +Excel.Workbook.close: + - |- + await Excel.run(async (context) => { + context.workbook.close(Excel.CloseBehavior.save); + }); Excel.Worksheet.copy: - |- await Excel.run(async (context) => { @@ -2178,6 +2503,23 @@ Excel.Worksheet.copy: console.log("'" + sampleSheet.name + "' was copied to '" + copiedSheet.name + "'") }); +Excel.Worksheet.findAllOrNullObject: + - |- + 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.WorksheetFreezePanes.freezeAt: - |- await Excel.run(async (context) => { @@ -2229,6 +2571,58 @@ Excel.WorksheetFreezePanes.unfreeze: const sheet = context.workbook.worksheets.getItem("Sample"); sheet.freezePanes.unfreeze(); + await context.sync(); + }); +Excel.Worksheet.showGridlines: + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + sheet.showGridlines = true; + + await context.sync(); + }); +Excel.PageBreakCollection.add: + - |- + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.horizontalPageBreaks.add("A21:E21"); + await context.sync(); + }); +Excel.PageLayout.centerHorizontally: + - |- + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.pageLayout.centerHorizontally = true; + farmSheet.pageLayout.centerVertically = true; + await context.sync(); + }); +Excel.PageLayout.centerVertically: + - |- + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.pageLayout.centerHorizontally = true; + farmSheet.pageLayout.centerVertically = true; + await context.sync(); + }); +Excel.PageLayout.setPrintTitleRows: + - |- + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.pageLayout.setPrintTitleRows("$1:$1"); + await context.sync(); + }); +Excel.PageLayout.setPrintArea: + - |- + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.pageLayout.setPrintArea("A1:D41"); + await context.sync(); + }); +Excel.PageLayout.orientation: + - |- + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.pageLayout.orientation = Excel.PageOrientation.landscape; await context.sync(); }); Excel.Worksheet.getPrevious: @@ -2337,25 +2731,6 @@ Excel.Worksheet.tabColor: const activeSheet = context.workbook.worksheets.getActiveWorksheet(); activeSheet.tabColor = "#FF0000"; - await context.sync(); - }); -Excel.ChartTitle.getSubstring: - - |- - await Excel.run(async (context) => { - let sheet = context.workbook.worksheets.getItem("Sample"); - let chart = sheet.charts.getItemAt(0); - - // Get first seven characters of the title and color them green. - chart.title.getSubstring(0, 7).font.color = "Yellow"; - await context.sync(); - }); -Excel.ChartTitle.textOrientation: - - |- - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const title = sheet.charts.getItemAt(0).title; - title.textOrientation = -45; - await context.sync(); }); Word.InlinePicture.getBase64ImageSrc: diff --git a/view/excel.json b/view/excel.json index 7415e6238..094fdf101 100644 --- a/view/excel.json +++ b/view/excel.json @@ -73,13 +73,13 @@ "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-areas.yaml", "excel-range-find": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-find.yaml", "excel-worksheet-find-all": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/worksheet-find-all.yaml", - "excel-shape-images": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/shapes-images.yaml", - "excel-worksheet-insert-external-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", + "excel-shape-images": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/shape-images.yaml", + "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", "excel-shape-move-and-order": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/shape-move-and-order.yaml", "excel-worksheet-page-layout": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/worksheet-page-layout.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/performance-optimization.yaml", "excel-range-remove-duplicates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-remove-duplicates.yaml", - "excel-worksheet-save-and-close": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-save-and-close.yaml", + "excel-workbook-save-and-close": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-save-and-close.yaml", "excel-just-for-fun-tetrominos": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/tetrominos.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/multiple-property-set.yaml", From 1ed1febd9678f42c7d7aa1248154d86252bfbe41 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Tue, 26 Feb 2019 16:48:29 -0800 Subject: [PATCH 135/660] [excel] (Shapes) Textbox and shape text snippet (#266) * Fixing mislabeled snippet mappings * Snippet for textboxes and shapes --- playlists/excel.yaml | 9 ++ .../85-preview-apis/shape-textboxes.yaml | 151 ++++++++++++++++++ snippet-extractor-metadata/excel.xlsx | Bin 18728 -> 18824 bytes snippet-extractor-output/snippets.yaml | 24 ++- view/excel.json | 1 + 5 files changed, 183 insertions(+), 2 deletions(-) create mode 100644 samples/excel/85-preview-apis/shape-textboxes.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index ecd34ea8e..bfa55b796 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -754,6 +754,15 @@ group: Preview APIs api_set: ExcelApi: 1.8 +- 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////samples/excel/85-preview-apis/shape-textboxes.yaml + group: Preview APIs + api_set: + ExcelAPI: 1.9 - id: excel-scenarios-report-generation name: Report generation fileName: report-generation.yaml diff --git a/samples/excel/85-preview-apis/shape-textboxes.yaml b/samples/excel/85-preview-apis/shape-textboxes.yaml new file mode 100644 index 000000000..2f28b74cf --- /dev/null +++ b/samples/excel/85-preview-apis/shape-textboxes.yaml @@ -0,0 +1,151 @@ +order: 14 +id: excel-shape-textboxes +name: Textboxes +description: Creates a textbox shape and works with the text in it and other shapes. +host: EXCEL +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)); + + + async function createTextbox() { + await Excel.run(async (context) => { + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const textbox = shapes.addTextBox("A box with text"); + textbox.left = 100; + textbox.top = 100; + textbox.height = 20; + textbox.width = 175; + textbox.name = "Textbox"; + await context.sync(); + }); + } + + async function createGeometricShape() { + await Excel.run(async (context) => { + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const wave = shapes.addGeometricShape(Excel.GeometricShapeType.wave); + wave.left = 100; + wave.top = 400; + wave.height = 50; + wave.width = 150; + wave.name = "Wave"; + wave.fill.setSolidColor("lightblue"); + wave.textFrame.textRange.text = "A geometric shape"; + await context.sync(); + }); + } + + async function centerTextbox() { + await Excel.run(async (context) => { + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const textbox = shapes.getItem("Textbox"); + textbox.textFrame.horizontalAlignment = Excel.ShapeTextHorizontalAlignType.center; + await context.sync(); + }); + } + + async function autoSizeText() { + await Excel.run(async (context) => { + // NOTE: This API not currently supported. + + // const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + // const textbox = shapes.getItem("Textbox"); + // textbox.textFrame.autoSize = Excel.ShapeAutoSize.autoSizeTextToFitShape; + // await context.sync(); + }); + } + + async function deleteText() { + await Excel.run(async (context) => { + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const textbox = shapes.getItem("Textbox"); + textbox.textFrame.deleteText(); + await context.sync(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Shapes"); + const sheet = context.workbook.worksheets.getItem("Shapes"); + 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 modify textboxes and other shapes with text.

    +
    +
    +

    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/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 + + @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 diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 85ee2fc739b17b1b7e7d7526dad506f6859f46c7..f4b14be13d051db7710f3e83b52c786238ff4534 100644 GIT binary patch delta 8963 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 delta 8849 zcmZ8{Ra6{nu=U^sg1bY25L|*LxWf?KCAhmg1A_*K!68Tj1cC+~Y|voIV8Lw&79_Yc z$j>=vt^eM2zlVOPuG+i1s;m0zs*Z!8RHUQSt6`z*=fP?qnpkuoGxvNx($J!&$M8G# zUJEoCCNf8D?kQnC=Q&Az9?@PL3mY|A-HYy{ybK?+D@|WHi;dtd@A3PB!Ye(;1E^DU zHA&RCsm;k7NLz)-v)e##N2OsWp(=0v(LA=D9upr)+U79bhr1pU(9<^0dC#E7E950=GN1z@R01}DZ0 zGNin@n76J>d4BR$4OcySYOWoFV>UB@fyh_UlFy5WzcvIkSC&~3utHa?oi1=z0g`|F z)|0ZNF9vm41z1hmX6*q7v?|>v3?2A`b+QxPNxjI_xX;%h^&Hwl!^*YDYA}iZF>1^T zNU>kjSgvM(u#@1^B#8(Cyxdvqbjfu2ztZUySI!Wbhkg_7wxDC^WAl?$u^Km6tNk%EX^v^P~nrvHoCIxw0Ec?Wiu-{cjfU->g6jAZyx5iD?+Qwt*tLBQm{)7Ctw zPq!_z4PP?vMVQ1w0QnnXnurgk6wgjShZoqGL+43BJq!JXM6wTft>_Z(f3km^P;ej- zIB@}6s+?f7NKoGpMm)p&<+HYVr|6W!DD5_16EuA5%bgeF?C>b#go=mv)yi6-=9KCC zSOCAZEoPwbQfeAu$9o6yKV1)tdzP(lSi>1#x>2{2Sakr47FkfiL?;qRFjprlUUtG( zK^|=`Cl%#miV9#R%26EOpufRF74a&|)sp3LZC}i}q#_v~1+g$qW%PEVW`P#~`7KP^ z$cFP86`!?>^KCd00C4LM08j!TD2mh&@N+T{=WZfxDj?RBzR32VntS=siFu?B_Y@(Q zJWH)lX3`oe&ExOqt0SZf`Tnx9P(&&u6nYfub{Ttcc+$@Bo&edk?b+C|A{hofd^}?~ zdJn(t>i4`4=zt+4gy-(v;U$m#OHz-!@a&a`x&EPYu}dr5l-T`;p^cMWCq7XZNnsGd ze*gZ8&KYG|$I63cXd-ACL`hqC3BPUe4T3W0_W!myu3weB)ZjKfFrOMcJap@D)bD_Q ziQPU4aI!%x*QKOA{@%FUJ??6bg#+_~4Ua(g=jTq1!2$8_IuWbxDTqZyWLGSFMuUOg zA9;a9UN4*XJ9O=at_(fuofO?7K|@U--lFsRmB0S6D=R0yE`c8F)hSX8Ke6`VZLFaW z6hb75k)daS`LLea%DogVoDFXiy*a~sESmfR8sJKE_ia;G*WshTaKZTgZ?B8J@~`D} zioa$~XW(%7&Wsg5E+n79K#FJZ?C}BtYg-v~7nRU+M=YCNx%bU*s14qOdY438(eIs? zLd0wySKihl9;cQ?@~ugvSkHsmr4dJd-7ou#*3I#(^ELK|%C8Qxzg!Eo3J`-PLXDF^oJzKqSU(o4O+sv6lp@iB~bSPe$dCLa|d zEzfod8O{-GpHmADmzDpfx1?Pk@s1}AxSvIjO*Z%@KZg0yci%xkO5He zMH|`8frI2?MhSBpJLwm1<<4K^eEP zxn=smP^#u0wKK~-L8 zA2(JE@5!*wbHW16LP?Zc?{d-W;@@_j#rimlk`YE!J5O)2qVfnNJM$Th)wgoS2%U+1A^VQb{__L5r`=V%H@)9EYL zjmSjn%7mm6vVqzGITS=YRX!!Vi}6_5wHUf=MyD^-G#Xjlcg@d*eMF(t+(!10dO}4* zY-X+~qC-+Fr2^o(Y^{9r09r9IVYuJ@T&=RfyqAaoU!#YLX{K{dDn+-MzXU*nSNH=%l*o=?qRK~$|WSBfmRbDkuR2d||bFzjt=QQ6BhMD_`=@`10 zl*O{-AkBnoV9!_6sIT$*E4X0WL)4=lM}iT zaM)>HLbnfKP@quUdd}CYs65TX51d_j;WDO!)@Qvihj#SsoUc!@P#@XCkEIV%|RrW-91J!cX-jw(!=!XdyFRj8XKC8N;mwbnr0uW0z-iZ!; zlm!bn2F;f_`PNEg634JOzxalGtcLx$^_yLV*=SaEBYjpcrpjz8C3o-JS5HAVY>Wi1 zIL)&?7g%N-$!o9(_s^N+a8RfhdJ843RZJr8tIrnQD8mn+c!H1#*wlvFe2hk~V@3hZ z$|&(&@%0WC)3lND82N)`BAp^$jT43I8^skiSopNG&#}5QFSD2SlSv0&04yT7aK3mt zY^AplRZxuMhsUu0Aq7zE^f4_>&z~^ds4sX$TVt4%wlqjv3SmNfD7umsTsDcH$dZKK zKcLdu2+O(Sy(ffLmJBmz_dK~*48)8Qfx~)&yH^p?8@wolpO43!4P)KsVasYmL02Uw zTr>SS}&WLZo<#b;q!(d9wwjBUp(f8^KPwP{a6A1X8e0*%twL$Zr1k`r54CxUSpxRL0UC64ww}#QF+hF1@rAoJ6Tjz( zX+w)aM!3F?IzOR4tk_FmRnW82v|-F9_w=3om(JeE`qSu^Mi5Z9-l_;H{{+Kn@%|e# zhmW^;n+z(o^{tRZ~V@69LL#yDzYVP8k12AH(4lEO%jK@jU$ z)2@Hg;;JBo6p=B2*yjc3s6Mt!N3%Tl(j5WU3H6xb2*Z8teg=z#s&#rC4VZ2WzC#v^5 z%X5>K;dU06EZn5@Xwr8<upxH)-y552>c7o)%e z>5e?vXU#2_S&p>lw_ju8e(HP!&>j9%$4~Rq3@59aHx)klm-0Mg6&E;qAn0GjezB}5lwyI&PiF;vHqrIIWmbp(g!0hz22T6Q3j=*EXt=wJ z&3yy>glRo;i)t=?(`oZ;3hB9J#TLGx%4dovvs;57 zyQKu>winqW3yIL0u@>O|W(bwPbP`b@ZW=@xLxGWIp?-*6cubH($%{C}A6sYEWR%~> z0sJgO%Q}eljWi5{_){vQXh3=>1wr-{9dXSX&q_*_^>&?l{Env1-5*#5|ny(*Pzs9A8nyI3S0{-yP&o_Ba4(5TF+Aa5R#(i1(m9elFTh$Od zm9|a{na~G@HYhIRr0UWS^io%SI8LFbK=D}kEe)NRneJ@fQD#*XFO{jsDFqSzS-B0r zP#2WO7V(o>%KJh;TO3EtXjs59+^GcR0zMN#E`EvEj49=dw8$kk%Ob9=_O`5!^gMY} zippFFd!Vx&2x8TKR(ucTiJtf_cxy64zGziNKbzV|_5wZQ9S%{91WO8qH}Jd;Hx%!|&m4rzAX3fTNvF0j6DtuxFd1R=$oV~z&M{Vod|;DgjHWqL z1cf`jGBzeV`PxIhSY)`rr|UG(Pwl6GTaA*f3&71MRgUa1;v6@)VUhMtFE0HSG@|L} zT;YTB7?-@*8upn|8&0HTAon4i*m?eP^EK2K>1pIuRXvG-exeBx(gYcwx#1e~*f8;Q zZ%9K4XAI?8-wO48+o_5qF1Avs))`w83U>~Wep4ZnRI^kN`W4$22;SVp{?R~fxgel0 zKjmruE+bq)%cm^XR->Wp&O0XI!P+P^wYzx=Sf(!CPw3T#x=%|G!bcg)bWLGsjT{`& zKh{%ngm?6sTi~@>m4ND)sJQAe#ev}tw6}sp&ZVS=k>zB!)afIr&ONcSU*F8|oXBId zB*-ne^l86}hG9OUIum~XE3&M6GMmk1)l6!egrU(?H)(F9gUsr@<|s$!3f8v3`&1s9 z^nfv2-<4+znVy5)>r{iDr1lZfuo#!d9_lOmnu93axdEa%kRhu=*l$Yg?Ci5MdGOM_D-$53wNAvyh8Fe1 zkj2z6|3Q>ohlzB^2G3VVwOWSKx8uWIX7iRtb!Z><_x~i$DR-GqPh5ht`AsH(Ra>?C z_i>tYKhMHH^+1R^RLBr@T5FOWJ)vILt1|^;YX}Y5#mP_U$R50b)e!>2jX9b#78Fbc zyid#9#Jw<$;KKOq6`>8-Te^FyFP;0Ezj&tTJrx0VHIDT4TL)FT<-`Dk1*fOR_>f>rJe1$j-%93!^4??sAd#r?~2D4dG4VQWjA3$#r zH+o!2gaeKH0^>-LP2Osv@%S$!&P9B(>|`G=0rWup$of(~Y!i~^I&~n_v;xC&3?mzz zbHkLVF(Gz(2&P8#wZ>sAx_%iUZ%FmW$>H_oL7}WlChErBa2f)O6iI1e`@Fs^sxmR& zIxOZZXSC>885h0LWd8LOr(9#zZ&2p)7;^!L&?89e&n{lN#y$ZYF^eQv8j?Gbgpmq% z1-w>2ME=SbTY609C3Sri4%^w?DnUG+^TTdhKGbEP;g?AN9Jll`{Qm)sE~cguJ_H7>NA6M2EUJS<&748E`$OFiTgylfaM#C2kM`#!k8=yT zb=g5>cN#5obozzWCY9mcAUDtL;4gX`*~YPY!I!Q6N2^6O8N2ElPH%mF_wORFME!Su z7DX18^MW3?7``x!cijZgORAe}-QO5p2ZSjyObv~{;d1r%`{M%gt6PHbI+c0n7}?*x zkKNyH#|7ROjr_^y{3TEk_2JUo|E!E&WDClprld9^wREVBA!PQ|4OEgJqSZayUUS}f z2(F{<(QAIbbKZAdyh2~Au@+cmmYhE9QXBdHo$J!x8)+A@I44S`B{MOX&n9$~O2jL4 zbb3?;dNYLP6J*L?3*Il-n;npQXFQW8#&R5(;K&8a5n$5wxu1c~ByP&#k2Y)h&l-=c4p5Dmx<@&v6PPSY@yAECW(5epREIk zVF5*{#(MJCC8CnVe;#W}=XkI&;r*M(yIvt~0H zq6;67dHP{=VWqK|Dvyu6x0y!2;xsYHh( zVkJZ<0_EHGF?_ny=S|R;&FW3*s*e(p{atk({|Y2=Z5NXKL)_ zrn|wpCaB7LGhkppt;MlVbPR}Gwd!Pmjw_PC3>XPWYchgGk!Wg_dzCDwOu-vTRb#`Y zH}~R9%eSdzWkbY+PCt8P500>>tB4NtE8U&`4*o*C{7N$HEyHZVz2(Ylnv#lAux&_A zKOp5jKS-Xj!DS;_Je4%#n6^vxjZ37`RDsQNwHu$MhZ1Ae#S}^^tx*^2Mw6Cm_@36@ z7n)(>-@{@cyV9ZXAk$Fh95oBmH>zf+smji2r>{{w+lr+w z!Vk($LaSzPV6F}@)b*oVb>BR?#rYsZroI(-RNf8ypV_=h^`~WV=_dB!I1zbEdy+@k zO$|@401ttAwE4pIXz1wXt~^*So?}_Oh6#pOmHdsBdv%FI#mwD>?kJ#wCH&N_$154% z4Al4j7JrLOfebf6Y$_i!h#*CmBjtVyc6X>2WwqI@kPac7wtjwnb5&3mF2@n^oCS+z zGD&p%5)wxCt*cB%|F6%B_Gdi0mfrRw=`GJkR3gyhod=D< z_8_H%7x4iO3l2!v8y4>OdLqt%51|Zo}Wo9&{6> z%bV@N_4~Bjy4#7Z#>j`%7o8??$OUE8UMpGr5=*CpbLcxDr_klrvQ_MB`2=y}N~vQ2 zg-pg_bJ(P#|mHdsU{jMmR*uIc6zVG$J5%_ zNa943c9wq6EwyhLeAhx_(yG8jZro8ZZS|UKj()0I$=N7N?V-S?rn2RgQt)ElZ6Fa; zwzY_D)`5fm2Svq6PJd4tMoIVEuyUN6AbZMac>X>dOtZ%)S}y8l@hh@~6I9S?ChB!b zez>zMG5Ch>4)c9tZO~tJ=JWoT9)>7}Z;yOJCU;8yE`ULjsHU*}woyiY9yc(*(1@2& zi$4Dl`Puq1i&H6Z<#+CVUg!vMk>f_$SvTJniUy=?>jxUu(G#v|K zDjjlXnHdQK7a{EP-(P5d809sW6YQDOz{eb~cI96szq#k{Wa*KyI#jC$hTB<8et!a45{ zFuL!f-?W1P?t4@IGL`8YQJd3#98dF95(A-`S%(ZQZ}1#CZ-|@DOJAEbrzR@{U|EigfxHz_5`gqoWvTf+uPPw4*ufJk{)b_-37{>zb z`#%$?2izT(OzUZZ@Ib;RiYgWJaW6{w z|GGh2e)!~$BS1snRv6`2jR+`P4NmOwqlahnrWvhcBm=}hI@*1kypcX)>N&%rlm~7= z7uu`N=yI?=>9w=0z_Tk@lE~IXuk5KQXmq7er}h`cbBXib(HQTck2zF1v46-)QQ|!s z5sHY0XpNK~fh{ZV3^%;(3Ef80X5>YyxceHTg`PMPN(%G6n z`dD+E>=4STR{1*wXhz#6oZ87agEoCdLjObjHIFzZzYJOQq3Z$MO=&VJ;D)J_*DI!^>l|$4} zV;!MUg)b4l_%jN50U`WK9QsT#UG=d3S-EzZmjIDnoKE8Tm)Y|d1n;nHQ`kM8I;3g% zC0uIStZkhW#W#M+NKH{3H$;`a#EHKm7yG-|2gRI89VtJe9aI%0>TWO6+~%t70{%<` zqj?se0Q-_2PkfW6)f76Z@e{Kp!5bp_ni+J&O~>dq#l+nJm7bS$Y&2}x{~ig;d&zb7 z&Yuv8@%;DFH!o`nK(I?C-z$wc$BRxXv4qx$n&AZo;IUBwQVCgr6KY7_;wWpFu-!$8*C5l_b}_-}0T5 z$&l%aHewpHSt>W;lryPYre!*k7ssuMx2r9*8xfRmNi{Cf}!2uhDMadhm^xU?GCvUB1lul1KY@XDf_KDs=vqS7?joYY(u z{;K=4DrolCcI!S|*tSMM9!wZm9KfyGJTl?@?flR1>n!%(uf{Sl_!bi{x?!q;a)C9! zjppziOu#3!DpaHS&s}R=Uk%2%%LtH&#(J%{&!!t0?1AvyC?D-;dbB84t)68)v!gl; z4|`2KNyL5~=i=AChXS^)kOntkLc-Ui>M*$B-*LMHJV&SKsYQPAA7*f0GbSH)u`5|G zwaCz1@tcN$5e6E(_Z4B4?Pi|RfgGYj9pk)f!Wt({9`>~n3&sR}hR`JapYxd}5AEol zAdlPVLdCUvS~T>iKk1W}$&gcWDRFXOh7yxXi0qw%zC3>tanS3>orZ#yqjY?{z>sUu z`bP%EFdvgtu_Tf=z?TCg7Q>+rZ%@tt8-Qa;8DakS`-Y9e)2QM9Pr@Nb3i_z1^biYr zGKi@n2TBAaR*{kBe?Auh08+sJULBA=MH$rX*AOiw5(uS|2nq>AQ%M6Q3R0}3iCQS~ zub5Ai5<;iUfm$XCQBfA7`8Nqs0RVZ7{|hDp`KZiB^KZaW005^aou}#i|5~IFgt8<` VE`(l10>uDgs`3)kPyV0N{|~W<0V@Ci diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 6a0194983..eb9401283 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -1960,7 +1960,7 @@ Excel.Range.removeDuplicates: console.log(deleteResult.removed + " entries with duplicate names removed."); console.log(deleteResult.uniqueRemaining + " entries with unique names remain in the range."); }); -Excel.RemoveDuplicateResult.uniqueRemaining: +Excel.RemoveDuplicatesResult.uniqueRemaining: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -2176,7 +2176,7 @@ Excel.Image.format: console.log("The image's format is: " + image.format); await context.sync(); }); -Excel.Image.saveAsPicture: +Excel.Shape.saveAsPicture: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); @@ -2731,6 +2731,26 @@ Excel.Worksheet.tabColor: const activeSheet = context.workbook.worksheets.getActiveWorksheet(); activeSheet.tabColor = "#FF0000"; + await context.sync(); + }); +Excel.ShapeCollection.addTextBox: + - |- + await Excel.run(async (context) => { + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const textbox = shapes.addTextBox("A box with text"); + textbox.left = 100; + textbox.top = 100; + textbox.height = 20; + textbox.width = 175; + textbox.name = "Textbox"; + await context.sync(); + }); +Excel.TextFrame.deleteText: + - |- + await Excel.run(async (context) => { + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const textbox = shapes.getItem("Textbox"); + textbox.textFrame.deleteText(); await context.sync(); }); Word.InlinePicture.getBase64ImageSrc: diff --git a/view/excel.json b/view/excel.json index 094fdf101..29fd2392b 100644 --- a/view/excel.json +++ b/view/excel.json @@ -81,6 +81,7 @@ "excel-range-remove-duplicates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-remove-duplicates.yaml", "excel-workbook-save-and-close": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-save-and-close.yaml", "excel-just-for-fun-tetrominos": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/tetrominos.yaml", + "excel-shape-textboxes": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/shape-textboxes.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/multiple-property-set.yaml", "excel-scenarios-working-with-dates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/working-with-dates.yaml", From 2630a09107133bc92351e1537e4d9bbcfa1c9eba Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 27 Feb 2019 15:42:42 -0800 Subject: [PATCH 136/660] [excel] (Shapes) Snippet for line-type shapes (#267) * Snippet for line-type shapes --- playlists/excel.yaml | 9 + .../performance-optimization.yaml | 2 +- .../range-remove-duplicates.yaml | 2 +- .../excel/85-preview-apis/shape-lines.yaml | 245 ++++++++++++++++++ .../85-preview-apis/shape-move-and-order.yaml | 2 +- .../85-preview-apis/shape-textboxes.yaml | 2 +- samples/excel/85-preview-apis/tetrominos.yaml | 2 +- .../workbook-save-and-close.yaml | 2 +- .../worksheet-page-layout.yaml | 2 +- snippet-extractor-metadata/excel.xlsx | Bin 18824 -> 18887 bytes snippet-extractor-output/snippets.yaml | 23 ++ view/excel.json | 1 + 12 files changed, 285 insertions(+), 7 deletions(-) create mode 100644 samples/excel/85-preview-apis/shape-lines.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index bfa55b796..f0648c4fc 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -700,6 +700,15 @@ group: Preview APIs 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////samples/excel/85-preview-apis/shape-lines.yaml + group: Preview APIs + api_set: + ExcelAPI: 1.9 - id: excel-shape-move-and-order name: Move and order shapes fileName: shape-move-and-order.yaml diff --git a/samples/excel/85-preview-apis/performance-optimization.yaml b/samples/excel/85-preview-apis/performance-optimization.yaml index bdef07db4..1a520d688 100644 --- a/samples/excel/85-preview-apis/performance-optimization.yaml +++ b/samples/excel/85-preview-apis/performance-optimization.yaml @@ -1,4 +1,4 @@ -order: 10 +order: 11 id: excel-performance-optimization name: Performance optimization description: Optimizes performance by untracking ranges and turning off screen painting. diff --git a/samples/excel/85-preview-apis/range-remove-duplicates.yaml b/samples/excel/85-preview-apis/range-remove-duplicates.yaml index f0ac0fae7..57f5c3eaa 100644 --- a/samples/excel/85-preview-apis/range-remove-duplicates.yaml +++ b/samples/excel/85-preview-apis/range-remove-duplicates.yaml @@ -1,4 +1,4 @@ -order: 11 +order: 12 id: excel-range-remove-duplicates name: Remove duplicates description: Removes duplicate entries from a range. diff --git a/samples/excel/85-preview-apis/shape-lines.yaml b/samples/excel/85-preview-apis/shape-lines.yaml new file mode 100644 index 000000000..1a174f350 --- /dev/null +++ b/samples/excel/85-preview-apis/shape-lines.yaml @@ -0,0 +1,245 @@ +order: 8 +id: excel-shape-lines +name: Lines +description: Creates and modifies line shapes. +host: EXCEL +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)); + + async function addStraightLine() { + 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(); + }); + } + + async function addCurvedLine() { + await Excel.run(async (context) => { + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const line = shapes.addLine(200, 300, 300, 400, Excel.ConnectorType.curve); + line.name = "CurvedLine"; + await context.sync(); + }); + } + + async function arrowLine() { + 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(); + }); + } + + async function diamondLine() { + await Excel.run(async (context) => { + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const line = shapes.getItem("CurvedLine").line; + line.beginArrowHeadLength = Excel.ArrowHeadLength.short; + line.beginArrowHeadWidth = Excel.ArrowHeadWidth.narrow; + line.beginArrowHeadStyle = Excel.ArrowHeadStyle.diamond; + + line.endArrowHeadLength = Excel.ArrowHeadLength.short; + line.endArrowHeadWidth = Excel.ArrowHeadWidth.narrow; + line.endArrowHeadStyle = Excel.ArrowHeadStyle.diamond; + + await context.sync(); + }); + } + + async function connectStraightLine() { + await Excel.run(async (context) => { + // NOTE: This API not currently supported. + + // const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + // const line = shapes.getItem("StraightLine").line; + // line.beginConnect(shapes.getItem("Left"), 2); + // line.endConnect(shapes.getItem("Right"), 0); + + // await context.sync(); + }); + } + + async function disconnectStraightLine() { + await Excel.run(async (context) => { + // NOTE: This API not currently supported. + + // const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + // const line = shapes.getItem("StraightLine").line; + // line.beginDisconnect(); + // line.endDisconnect(); + + // await context.sync(); + }); + } + + async function connectCurvedLine() { + await Excel.run(async (context) => { + // NOTE: This API not currently supported. + + // const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + // const line = shapes.getItem("CurvedLine").line; + // line.beginConnect(shapes.getItem("Left"), 2); + // line.endConnect(shapes.getItem("Right"), 0); + + // await context.sync(); + }); + } + + async function disconnectCurvedLine() { + await Excel.run(async (context) => { + // NOTE: This API not currently supported. + + // const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + // const line = shapes.getItem("CurvedLine").line; + // line.beginDisconnect(); + // line.endDisconnect(); + + // await context.sync(); + }); + } + + async function deleteLines() { + await Excel.run(async (context) => { + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + shapes.getItem("StraightLine").delete(); + shapes.getItem("CurvedLine").delete(); + + await context.sync(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Shapes"); + const sheet = context.workbook.worksheets.getItem("Shapes"); + sheet.activate(); + await context.sync(); + }); + } + + async function createShapes() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Shapes"); + + const shape1 = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.diamond); + shape1.left = 5; + shape1.top = 5; + shape1.height = 100; + shape1.width = 100; + shape1.name = "Left"; + + const shape2 = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.cloud); + shape2.left = 400; + shape2.top = 300; + shape2.height = 100; + shape2.width = 100; + shape2.name = "Right"; + }); + } + + /** 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 modify line shapes.

    +
    +
    +

    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/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 + + @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 diff --git a/samples/excel/85-preview-apis/shape-move-and-order.yaml b/samples/excel/85-preview-apis/shape-move-and-order.yaml index a8c8d3d85..dac253e27 100644 --- a/samples/excel/85-preview-apis/shape-move-and-order.yaml +++ b/samples/excel/85-preview-apis/shape-move-and-order.yaml @@ -1,4 +1,4 @@ -order: 8 +order: 9 id: excel-shape-move-and-order name: Move and order shapes description: Moves created shapes around the worksheet and adjusts their z-order. diff --git a/samples/excel/85-preview-apis/shape-textboxes.yaml b/samples/excel/85-preview-apis/shape-textboxes.yaml index 2f28b74cf..1740f8d5b 100644 --- a/samples/excel/85-preview-apis/shape-textboxes.yaml +++ b/samples/excel/85-preview-apis/shape-textboxes.yaml @@ -1,4 +1,4 @@ -order: 14 +order: 15 id: excel-shape-textboxes name: Textboxes description: Creates a textbox shape and works with the text in it and other shapes. diff --git a/samples/excel/85-preview-apis/tetrominos.yaml b/samples/excel/85-preview-apis/tetrominos.yaml index ab176f32d..b1fc26f5c 100644 --- a/samples/excel/85-preview-apis/tetrominos.yaml +++ b/samples/excel/85-preview-apis/tetrominos.yaml @@ -1,4 +1,4 @@ -order: 13 +order: 14 id: excel-just-for-fun-tetrominos name: Tetromino stacking description: Arrange moving tetromino shapes to form lines. diff --git a/samples/excel/85-preview-apis/workbook-save-and-close.yaml b/samples/excel/85-preview-apis/workbook-save-and-close.yaml index 9e3500970..a25ecb40a 100644 --- a/samples/excel/85-preview-apis/workbook-save-and-close.yaml +++ b/samples/excel/85-preview-apis/workbook-save-and-close.yaml @@ -1,4 +1,4 @@ -order: 12 +order: 13 id: excel-workbook-save-and-close name: Save and close description: Saves and closes a workbook. diff --git a/samples/excel/85-preview-apis/worksheet-page-layout.yaml b/samples/excel/85-preview-apis/worksheet-page-layout.yaml index fc98b2fc7..7f3d1c8f2 100644 --- a/samples/excel/85-preview-apis/worksheet-page-layout.yaml +++ b/samples/excel/85-preview-apis/worksheet-page-layout.yaml @@ -1,4 +1,4 @@ -order: 9 +order: 10 id: excel-worksheet-page-layout name: Page layout and print settings description: Changes the page layout and other settings for printing a worksheet. diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index f4b14be13d051db7710f3e83b52c786238ff4534..bfb56da6c84cb09a830e872140e91d5e191e1795 100644 GIT binary patch delta 9591 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 SD2f8FpNDf_rdxcXzjsbM80ZxbLlh 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�|LED>{Umse1`nn=ZeIo%7Xa8Na&w}t>Ku|QX!M=vJ z+_c)kQHcSSb8S!i;dRvdc9*vZ+Y;?33a17t5}1m7!gy`-`Pu|IqKDS;gZ!7ZK$ORm zmvRH;oeXW^5pK#7EU;I-FcCq1X^kb1X^no*8VCEeDqlqEgD~$DGT9kZ@{Hk(2;W1M zgUvGM*fWd1a^_MMZytsVfi#pm5(%0Kk_)@?l)@PY(VVbIz~35zIbW+KO^c(7si#r7 zkH1}{mH2emBQBhJT4Nt0lk?UNqDFXibf(Rc8{LirS%34a`kySg%nsK-Wi&oQ|5Gbe zcXLt0z}lJuSJw(){d%H`(~vT$btgt>t23uR)D}uG&r4>Gq*B3ypwI1DtU)6RE|(3HO~ZV?GF76Zf0?ZJBUEWf%A+gr!Tt2 zx0#Ny)xaNR6p5s#{o_RC=hcDTPmEb*eKYGbx*ZA3xR1vR7h%SHRsvLvq+UP(A26$$5@iya6&tQ5UV!OQOqoSudc>$w zkNPoEdm#Elk_1(x`(A&-rp`%2DH0H0B^b(;v|LVJqcyl}9Q}!0+_$vN2P<7s%sUQ7 zC%_~j9wn5H#TZK(A=Dy%jjdB7;LKcph5eYMYT~m5YI?W=^oC*>0W?F6>& zejq~`R*n#VJR-YrsO0-vVwxuRizkiDYqV$P$LGix-|k%x;|+x%hC(Mx)SAzov6i@s z66u}q87G-UF+057QXuZtWQv1;Wjzl!>2Bm5Rqq+I85x)-(y)C#`;j)XVexcWAqFB1%$ntb~zi|7iil( z?)D5PzSi8@uIIx%{?;T)&agnV!U?ZKKn_{>UieQ_(Sr6<`9e{?A99jsS+fB} zM?J_H94?w60$)TX*-w(0rC8BUTA1O?COK6;?wj5{!L(Im8aAnPiPtt``9ma;EIqS~ zDD)H8oYzM?L7uhyAvtHn%#H4hZBOn{7cXnq$U^i@d_D;M?H|mZNj~sx+h3d|v#Lm& zaUdfi?tl9HA#!By_$hbT#iQ-h0#ET~*DLmEXL6`ps#+(4MQ~*J2hps@Cr|UXf6MJ^ zX%QW`|34U%C#4ES2)>nKCjQ@}7oh)IieM3GDJV&Bh_onF7r0lNg5-b7bY>6;=f993 z&@&xam>v&IAcH~jPf9v}+jN2gfyn+BNRAWCE{hFr;6w$_NMnHAWQd?Wxc(Jwb76vO zWEh}#xxs5PN>ET>Hd#$51aO!vKk>hxJTwR-3HyIJQ^8BJABg|G9dA@NZ { + 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.Shape.line: + - |- + 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(); }); Word.InlinePicture.getBase64ImageSrc: diff --git a/view/excel.json b/view/excel.json index 29fd2392b..60318fbe0 100644 --- a/view/excel.json +++ b/view/excel.json @@ -75,6 +75,7 @@ "excel-worksheet-find-all": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/worksheet-find-all.yaml", "excel-shape-images": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/shape-images.yaml", "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", + "excel-shape-lines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/shape-lines.yaml", "excel-shape-move-and-order": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/shape-move-and-order.yaml", "excel-worksheet-page-layout": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/worksheet-page-layout.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/performance-optimization.yaml", From 8af23b3851ce5c3b232a57082a8b163cec12f6b4 Mon Sep 17 00:00:00 2001 From: Andrew Nichols Date: Tue, 5 Mar 2019 14:58:59 -0800 Subject: [PATCH 137/660] Fix #65 and update snippets accordingly (#269) --- config/build.ts | 1 - samples/outlook/01-compose-basics/get-item-subject.yaml | 2 +- samples/outlook/01-compose-basics/get-selected-text.yaml | 2 +- samples/outlook/01-compose-basics/set-selected-text.yaml | 2 +- yarn.lock | 8 ++++---- 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/config/build.ts b/config/build.ts index f81f68a3a..2c9ed419f 100644 --- a/config/build.ts +++ b/config/build.ts @@ -270,7 +270,6 @@ async function processSnippets(processedSnippets: Dictionary= 0 && officeJsReferences[0] === betaOfficeJsReference); if (!snippetOfficeReferenceIsOk) { diff --git a/samples/outlook/01-compose-basics/get-item-subject.yaml b/samples/outlook/01-compose-basics/get-item-subject.yaml index b94e84429..47a1bf92a 100644 --- a/samples/outlook/01-compose-basics/get-item-subject.yaml +++ b/samples/outlook/01-compose-basics/get-item-subject.yaml @@ -30,7 +30,7 @@ style: /* Your style goes here */ language: css libraries: | - https://unpkg.com/@microsoft/office-js@1.1.1-private.1/dist/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-js@1.4.0/dist/css/fabric.min.css diff --git a/samples/outlook/01-compose-basics/get-selected-text.yaml b/samples/outlook/01-compose-basics/get-selected-text.yaml index a054f7d1f..ff0722cf8 100644 --- a/samples/outlook/01-compose-basics/get-selected-text.yaml +++ b/samples/outlook/01-compose-basics/get-selected-text.yaml @@ -30,7 +30,7 @@ style: /* Your style goes here */ language: css libraries: | - https://unpkg.com/@microsoft/office-js@1.1.1-private.1/dist/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-js@1.4.0/dist/css/fabric.min.css diff --git a/samples/outlook/01-compose-basics/set-selected-text.yaml b/samples/outlook/01-compose-basics/set-selected-text.yaml index c1ba85930..cbea49176 100644 --- a/samples/outlook/01-compose-basics/set-selected-text.yaml +++ b/samples/outlook/01-compose-basics/set-selected-text.yaml @@ -28,7 +28,7 @@ style: /* Your style goes here */ language: css libraries: | - https://unpkg.com/@microsoft/office-js@1.1.1-private.1/dist/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-js@1.4.0/dist/css/fabric.min.css diff --git a/yarn.lock b/yarn.lock index 3e4ff00dd..3533d47b2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -808,10 +808,10 @@ libxmljs@~0.18.0: nan "~2.5.0" node-pre-gyp "~0.6.32" -lodash@4.17.5: - version "4.17.5" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" - integrity sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw== +lodash@4.17.11: + version "4.17.11" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== lodash@^4.17.4: version "4.17.4" From 461ce0f4e0aa985480f5eb2b5cca5f89042c4235 Mon Sep 17 00:00:00 2001 From: Zlatkovsky Date: Thu, 7 Mar 2019 12:47:27 -0800 Subject: [PATCH 138/660] Upgrade dependencies --- .yarnrc | 1 + config/build.documentation.ts | 2 +- config/build.ts | 3 - config/deploy.ts | 2 +- config/status.ts | 8 +- package.json | 23 +- yarn.lock | 1317 +++++++++------------------------ 7 files changed, 370 insertions(+), 986 deletions(-) create mode 100644 .yarnrc diff --git a/.yarnrc b/.yarnrc new file mode 100644 index 000000000..efdac8b82 --- /dev/null +++ b/.yarnrc @@ -0,0 +1 @@ +--install.frozen-lockfile true \ No newline at end of file diff --git a/config/build.documentation.ts b/config/build.documentation.ts index 4a14e2ac4..9e5f53be5 100644 --- a/config/build.documentation.ts +++ b/config/build.documentation.ts @@ -162,7 +162,7 @@ function getExtractedDataFromSnippet( } catch (exception) { accumulatedErrors.push(`${row.snippetId}: ${exception.message || exception}`); - }; + } } else { accumulatedErrors.push(`Could not find snippet id "${row.snippetId}" in mapping table`); } diff --git a/config/build.ts b/config/build.ts index 2c9ed419f..8f915d1ac 100644 --- a/config/build.ts +++ b/config/build.ts @@ -15,9 +15,6 @@ import { processLibraries } from './libraries.processor'; import { startCase, groupBy, map } from 'lodash'; import { Dictionary } from '@microsoft/office-js-helpers'; import * as jsyaml from 'js-yaml'; -import 'rxjs/add/operator/merge'; -import 'rxjs/add/operator/map'; -import 'rxjs/add/operator/filter'; import escapeStringRegexp = require('escape-string-regexp'); diff --git a/config/deploy.ts b/config/deploy.ts index be6fc2b60..fd97e7a45 100644 --- a/config/deploy.ts +++ b/config/deploy.ts @@ -16,7 +16,7 @@ interface IEnvironmentVariables { GH_TOKEN: string } -const environmentVariables: IEnvironmentVariables = process.env; +const environmentVariables: IEnvironmentVariables = process.env as any; (() => { try { diff --git a/config/status.ts b/config/status.ts index 99d95f234..44003309c 100644 --- a/config/status.ts +++ b/config/status.ts @@ -6,7 +6,7 @@ interface IStage { steps: any[]; count: number; doneStep: (completed: boolean, message?: string) => void; -}; +} export class Status { stages: IStage; @@ -79,7 +79,7 @@ export class Status { }) .filter(item => !isNil(item)); } - }; + } /** * Add a new stage and complete the previous stage. @@ -88,8 +88,8 @@ export class Status { add(stage: string) { this.stages.steps.push(stage); this.steps[stage] = true; - }; -}; + } +} export const status = new Status(); export const console = status.console; diff --git a/package.json b/package.json index 715c2b248..57db23281 100644 --- a/package.json +++ b/package.json @@ -28,20 +28,19 @@ "chalk": "1.1.3", "escape-string-regexp": "^1.0.5", "excel": "^0.1.7", - "js-yaml": "3.7.0", - "lodash": "4.17.11", - "node-status": "1.0.0", - "rimraf": "2.5.4", - "rxjs": "5.2.0", - "shelljs": "0.7.7" + "js-yaml": "^3.12.2", + "lodash": "^4.17.11", + "node-status": "^1.0.0", + "rimraf": "^2.6.3", + "shelljs": "^0.8.3" }, "devDependencies": { "@types/chalk": "0.4.31", - "@types/js-yaml": "3.5.29", - "@types/lodash": "4.14.54", - "@types/node": "7.0.7", - "@types/shelljs": "0.7.0", - "tslint": "4.5.1", - "typescript": "2.2.1" + "@types/js-yaml": "^3.12.0", + "@types/lodash": "^4.14.122", + "@types/node": "^11.10.5", + "@types/shelljs": "^0.8.3", + "tslint": "^5.13.1", + "typescript": "^3.3.3333" } } diff --git a/yarn.lock b/yarn.lock index 3533d47b2..d4cedc0fa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18,36 +18,56 @@ resolved "https://registry.yarnpkg.com/@types/chalk/-/chalk-0.4.31.tgz#a31d74241a6b1edbb973cf36d97a2896834a51f9" integrity sha1-ox10JBprHtu5c8822XooloNKUfk= +"@types/events@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" + integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== + +"@types/glob@*": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" + integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== + dependencies: + "@types/events" "*" + "@types/minimatch" "*" + "@types/node" "*" + "@types/jquery@^2.0.39": - version "2.0.41" - resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-2.0.41.tgz#b87ba051011f99edbe586d8f97282e7786e01a6d" - integrity sha1-uHugUQEfme2+WG2Plygud4bgGm0= + version "2.0.53" + resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-2.0.53.tgz#89c53bc83d820e50c3b667ae2fdf4276df8b3aba" + integrity sha512-MZKPWUhp5TKkoJ/58NSq6io+CSUCOHm2b3Z6U4+r9v70kktB0JM+eRjdp6YmDHtw0kK2XB7L2K7/FMIoziHjUA== + +"@types/js-yaml@^3.12.0": + version "3.12.0" + resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.0.tgz#3494ce97358e2675e24e97a747ec23478eeaf8b6" + integrity sha512-UGEe/6RsNAxgWdknhzFZbCxuYc5I7b/YEKlfKbo+76SM8CJzGs7XKCj7zyugXViRbKYpXhSXhCYVQZL5tmDbpQ== -"@types/js-yaml@3.5.29": - version "3.5.29" - resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.5.29.tgz#29f4dd9314fbccb080d8bd84b9c23811ec5090c2" - integrity sha1-KfTdkxT7zLCA2L2EucI4EexQkMI= +"@types/lodash@^4.14.122", "@types/lodash@^4.14.50": + version "4.14.122" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.122.tgz#3e31394c38cf1e5949fb54c1192cbc406f152c6c" + integrity sha512-9IdED8wU93ty8gP06ninox+42SBSJHp2IAamsSYMUY76mshRTeUsid/gtbl8ovnOwy8im41ib4cxTiIYMXGKew== -"@types/lodash@4.14.54", "@types/lodash@^4.14.50": - version "4.14.54" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.54.tgz#287dbbcd97d5da69c25ca99fb5afa81c4839b7fa" - integrity sha1-KH27zZfV2mnCXKmfta+oHEg5t/o= +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== -"@types/node@*", "@types/node@7.0.7": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.7.tgz#92637c6c4844bfc9a0a686323e38f3e9319118c2" - integrity sha1-kmN8bEhEv8mgpoYyPjjz6TGRGMI= +"@types/node@*", "@types/node@^11.10.5": + version "11.10.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.10.5.tgz#fbaca34086bdc118011e1f05c47688d432f2d571" + integrity sha512-DuIRlQbX4K+d5I+GMnv+UfnGh+ist0RdlvOp+JZ7ePJ6KQONCFQv/gKYSU1ZzbVdFSUCKZOltjmpFAGGv5MdYA== "@types/office-js@^0.0.37": version "0.0.37" resolved "https://registry.yarnpkg.com/@types/office-js/-/office-js-0.0.37.tgz#fba3ba06ffd9f4b83de0bbe66770245cd223b0da" integrity sha1-+6O6Bv/Z9Lg94LvmZ3AkXNIjsNo= -"@types/shelljs@0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.7.0.tgz#229c157c6bc1e67d6b990e6c5e18dbd2ff58cff0" - integrity sha1-IpwVfGvB5n1rmQ5sXhjb0v9Yz/A= +"@types/shelljs@^0.8.3": + version "0.8.3" + resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.8.3.tgz#f713f312dbae49ab5025290007e71ea32998e9a9" + integrity sha512-miY41hqc5SkRlsZDod3heDa4OS9xv8G77EMBQuSpqq86HBn66l7F+f8y9YKm+1PIuwC8QEZVwN8YxOOG7Y67fA== dependencies: + "@types/glob" "*" "@types/node" "*" abbrev@1: @@ -55,107 +75,62 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -ajv@^4.9.1: - version "4.11.8" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" - integrity sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY= - dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" - -ansi-align@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-1.1.0.tgz#2f0c1658829739add5ebb15e6b0c6e3423f016ba" - integrity sha1-LwwWWIKXOa3V67FeawxuNCPwFro= - dependencies: - string-width "^1.0.1" - 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-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" + aproba@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== are-we-there-yet@~1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" - integrity sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0= + 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.9" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" - integrity sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY= + 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" -asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" - integrity sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y= - -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= - -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" - integrity sha1-104bh+ev/A24qttwIfP+SBAasjQ= - -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.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" - integrity sha1-FDQt0428yU0OW4fXY81jYSwOeU8= - -aws4@^1.2.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" - integrity sha1-g+9cqGCysy5KDe7e6MdxudtXRx4= - -babel-code-frame@^6.20.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" - integrity sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ= +babel-code-frame@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= dependencies: - chalk "^1.1.0" + chalk "^1.1.3" esutils "^2.0.2" - js-tokens "^3.0.0" - -balanced-match@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" - integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg= + js-tokens "^3.0.2" 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.1" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" - integrity sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40= - dependencies: - tweetnacl "^0.14.3" - binary@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" @@ -164,50 +139,17 @@ binary@~0.3.0: buffers "~0.1.1" chainsaw "~0.1.0" -bindings@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.2.1.tgz#14ad6113812d2d37d72e67b4cacb4bb726505f11" - integrity sha1-FK1hE4EtLTfXLme0ystLtyZQXxE= - -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= - dependencies: - inherits "~2.0.0" - -boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - integrity sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8= +bindings@^1.3.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== dependencies: - hoek "2.x.x" - -boxen@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.0.0.tgz#b2694baf1f605f708ff0177c12193b22f29aaaab" - integrity sha1-smlLrx9gX3CP8Bd8Ehk7IvKaqqs= - dependencies: - ansi-align "^1.1.0" - camelcase "^4.0.0" - chalk "^1.1.1" - cli-boxes "^1.0.0" - string-width "^2.0.0" - term-size "^0.1.0" - widest-line "^1.0.0" - -brace-expansion@^1.0.0: - version "1.1.6" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" - integrity sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk= - dependencies: - balanced-match "^0.4.1" - concat-map "0.0.1" + file-uri-to-path "1.0.0" brace-expansion@^1.1.7: - version "1.1.8" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" - integrity sha1-wHshHHyVLsH479Uad+8NHTmQopI= + 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" @@ -217,20 +159,10 @@ buffers@~0.1.1: resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" integrity sha1-skV5w77U1tOWru5tmorn9Ugqt7s= -camelcase@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.0.0.tgz#8b0f90d44be5e281b903b9887349b92595ef07f2" - integrity sha1-iw+Q1Evl4oG5A7mIc0m5JZXvB/I= - -capture-stack-trace@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" - integrity sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0= - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= +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" @@ -239,7 +171,7 @@ chainsaw@~0.1.0: dependencies: traverse ">=0.3.0 <0.4" -chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1: +chalk@1.1.3, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= @@ -250,6 +182,15 @@ chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1: strip-ansi "^3.0.0" supports-color "^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" @@ -257,10 +198,10 @@ charm@1.0.1: dependencies: inherits "^2.0.1" -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= +chownr@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" + integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== cli-cursor@^1.0.2: version "1.0.2" @@ -274,110 +215,64 @@ cli-spinners@0.2.0: resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.2.0.tgz#85078737913b880f6ec9ffe7b65e83ec7776284f" integrity sha1-hQeHN5E7iA9uyf/ntl6D7Hd2KE8= -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - 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= -colors@1.1.2, colors@^1.1.2: +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= -combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" - integrity sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk= - dependencies: - delayed-stream "~1.0.0" +commander@^2.12.1: + version "2.19.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" + integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== 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= -configstore@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.0.0.tgz#e1b8669c1803ccc50b545e92f8e6e79aa80e0196" - integrity sha1-4bhmnBgDzMULVF6S+ObnmqgOAZY= - dependencies: - dot-prop "^4.1.0" - graceful-fs "^4.1.2" - mkdirp "^0.5.0" - unique-string "^1.0.0" - write-file-atomic "^1.1.2" - xdg-basedir "^3.0.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= core-js@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" - integrity sha1-TekR5mew6ukSTjQlS1OupvxhjT4= + version "2.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895" + integrity sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A== -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= -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-async@^2.1.1: - version "2.2.5" - resolved "https://registry.yarnpkg.com/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz#845ff0c0834a3ded9d160daca6d390906bb288cc" - integrity sha1-hF/wwINKPe2dFg2sptOQkGuyiMw= - dependencies: - lru-cache "^4.0.0" - which "^1.2.8" - -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - integrity sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g= - dependencies: - boom "2.x.x" - -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= - -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@^2.2.0: +debug@^2.1.2: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -deep-extend@~0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" - integrity sha1-7+QRPQgIX05vlod1mBD4B0aeIlM= - -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= +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== delegates@^1.0.0: version "1.0.0" @@ -389,39 +284,20 @@ detect-libc@^1.0.2: resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= -diff@^3.0.1: - version "3.2.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" - integrity sha1-yc45Okt8vQsFinJck98pkCeGj/k= - -dot-prop@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.1.1.tgz#a8493f0b7b5eeec82525b5c7587fa7de7ca859c1" - integrity sha1-qEk/C3te7sglJbXHWH+n3nyoWcE= - dependencies: - is-obj "^1.0.0" - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - -ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" - integrity sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU= - dependencies: - jsbn "~0.1.0" +diff@^3.2.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== 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= -esprima@^2.6.0: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= +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== esutils@^2.0.2: version "2.0.2" @@ -438,78 +314,28 @@ excel@^0.1.7: underscore "~1.3.3" unzip2 "0.2.5" -execa@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.4.0.tgz#4eb6467a36a095fabb2970ff9d5e3fb7bce6ebc3" - integrity sha1-TrZGejaglfq7KXD/nV4/t7zm68M= - dependencies: - cross-spawn-async "^2.1.1" - is-stream "^1.1.0" - npm-run-path "^1.0.0" - object-assign "^4.0.1" - path-key "^1.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" integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g= -extend@~3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" - integrity sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ= - -extsprintf@1.3.0, extsprintf@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -findup-sync@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16" - integrity sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY= - dependencies: - glob "~5.0.0" - -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= +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== -form-data@~2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" - integrity sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE= +fs-minipass@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" + integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ== dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" + minipass "^2.2.1" 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-ignore@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" - integrity sha1-nDHa40dnAY/h0kmyTa2mfQktoQU= - dependencies: - fstream "^1.0.0" - inherits "2" - minimatch "^3.0.0" - -fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: - version "1.0.11" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" - integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE= - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - fstream@~0.1.21: version "0.1.31" resolved "https://registry.yarnpkg.com/fstream/-/fstream-0.1.31.tgz#7337f058fbbbbefa8c9f561a28cab0849202c988" @@ -534,63 +360,18 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -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= - -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.0.5, glob@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" - integrity sha1-gFIR3wT6rxxjo2ADBs31reULLsg= +glob@^7.0.0, glob@^7.1.1, glob@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.2" + minimatch "^3.0.4" once "^1.3.0" path-is-absolute "^1.0.0" -glob@~5.0.0: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -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.2: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg= - graceful-fs@~3.0.2: version "3.0.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" @@ -598,19 +379,6 @@ graceful-fs@~3.0.2: dependencies: natives "^1.1.0" -har-schema@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" - integrity sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4= - -har-validator@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" - integrity sha1-M0gdDxu/9gDdID11gSpqX7oALio= - dependencies: - ajv "^4.9.1" - har-schema "^1.0.5" - has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -618,39 +386,29 @@ has-ansi@^2.0.0: 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-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= -hawk@3.1.3, hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - integrity sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ= +iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" - -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - integrity sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0= + safer-buffer ">= 2.1.2 < 3" -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" - integrity sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8= +ignore-walk@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + minimatch "^3.0.4" inflight@^1.0.4: version "1.0.6" @@ -666,14 +424,14 @@ inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= ini@~1.3.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" - integrity sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4= + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== interpret@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c" - integrity sha1-1Xn7f2k7hYAElHrzn6DbSfeVYCw= + version "1.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" + integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== is-fullwidth-code-point@^1.0.0: version "1.0.0" @@ -687,36 +445,6 @@ 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-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: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - -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-retry-allowed@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" - integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ= - -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-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" @@ -727,110 +455,33 @@ isarray@~1.0.0: resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= -isexe@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" - integrity sha1-NvPiLmB1CSD15yQaR2qMakInWtA= - -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@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" - integrity sha1-COnxMkhKLEWjCQfp3E1VZ7fxFNc= +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" - integrity sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A= +js-yaml@^3.12.2, js-yaml@^3.7.0: + version "3.12.2" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.2.tgz#ef1d067c5a9d9cb65bd72f285b5d8105c77f14fc" + integrity sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q== dependencies: argparse "^1.0.7" - esprima "^2.6.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-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-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= - dependencies: - jsonify "~0.0.0" - -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= - -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= - -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" - -latest-version@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.0.0.tgz#3104f008c0c391084107f85a344bc61e38970649" - integrity sha1-MQTwCMDDkQhBB/haNEvGHjiXBkk= - dependencies: - package-json "^3.0.0" - -lazy-req@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-2.0.0.tgz#c9450a363ecdda2e6f0c70132ad4f37f8f06f2b4" - integrity sha1-yUUKNj7N2i5vDHATKtTzf48G8rQ= + esprima "^4.0.0" libxmljs@~0.18.0: - version "0.18.7" - resolved "https://registry.yarnpkg.com/libxmljs/-/libxmljs-0.18.7.tgz#3673eb17c74cbaffdef9f33cb83ddd82a25055b7" - integrity sha1-NnPrF8dMuv/e+fM8uD3dgqJQVbc= + version "0.18.8" + resolved "https://registry.yarnpkg.com/libxmljs/-/libxmljs-0.18.8.tgz#b0a07512a01290b6240600d6c2bc33a3c70976d6" + integrity sha1-sKB1EqASkLYkBgDWwrwzo8cJdtY= dependencies: - bindings "1.2.1" - nan "~2.5.0" - node-pre-gyp "~0.6.32" + bindings "^1.3.0" + nan "~2.10.0" + node-pre-gyp "^0.9.1" -lodash@4.17.11: +lodash@^4.17.11, lodash@^4.17.4: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== -lodash@^4.17.4: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" - integrity sha1-eCA6TRwyiuHYbcpkYONptX9AVa4= - -lowercase-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" - integrity sha1-TjNms55/VFfjXxMkvfb4jQv8cwY= - -lru-cache@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" - integrity sha1-HRdnnAac2l0ECZGgnbwsDbN35V4= - dependencies: - pseudomap "^1.0.1" - yallist "^2.0.0" - match-stream@~0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/match-stream/-/match-stream-0.0.2.tgz#99eb050093b34dffade421b9ac0b410a9cfa17cf" @@ -839,26 +490,7 @@ match-stream@~0.0.2: buffers "~0.1.1" readable-stream "~1.0.0" -mime-db@~1.30.0: - version "1.30.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" - integrity sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE= - -mime-types@^2.1.12, mime-types@~2.1.7: - version "2.1.17" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" - integrity sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo= - dependencies: - mime-db "~1.30.0" - -"minimatch@2 || 3", minimatch@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" - integrity sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q= - dependencies: - brace-expansion "^1.0.0" - -minimatch@^3.0.0: +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== @@ -875,12 +507,22 @@ minimist@^1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= +minipass@^2.2.1, minipass@^2.3.4: + version "2.3.5" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" + integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" + integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== + dependencies: + minipass "^2.2.1" -mkdirp@0.5, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: +mkdirp@0.5, mkdirp@^0.5.0, mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -892,39 +534,47 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -nan@~2.5.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2" - integrity sha1-1bAWkSUzJql6K77p5hxV2NYDUeI= +nan@~2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" + integrity sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA== natives@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.0.tgz#e9ff841418a6b2ec7a495e939984f78f163e6e31" - integrity sha1-6f+EFBimsux6SV6TmYT3jxY+bjE= + version "1.1.6" + resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.6.tgz#a603b4a498ab77173612b9ea1acdec4d980f00bb" + integrity sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA== + +needle@^2.2.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" + integrity sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA== + dependencies: + debug "^2.1.2" + iconv-lite "^0.4.4" + sax "^1.2.4" -node-pre-gyp@~0.6.32: - version "0.6.39" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" - integrity sha512-OsJV74qxnvz/AMGgcfZoDaeDXKD3oY3QVIbBmwszTFkRisTSXbMQyn4UWzUMOtA5SVhrBZOTp0wcoSBgfMfMmQ== +node-pre-gyp@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.9.1.tgz#f11c07516dd92f87199dbc7e1838eab7cd56c9e0" + integrity sha1-8RwHUW3ZL4cZnbx+GDjqt81WyeA= dependencies: detect-libc "^1.0.2" - hawk "3.1.3" mkdirp "^0.5.1" + needle "^2.2.0" nopt "^4.0.1" + npm-packlist "^1.1.6" npmlog "^4.0.2" rc "^1.1.7" - request "2.81.0" rimraf "^2.6.1" semver "^5.3.0" - tar "^2.2.1" - tar-pack "^3.4.0" + tar "^4" node-promise@~0.5.3: - version "0.5.12" - resolved "https://registry.yarnpkg.com/node-promise/-/node-promise-0.5.12.tgz#b0acf9bc2229a76407c077b926592f99b3b4e1f1" - integrity sha1-sKz5vCIpp2QHwHe5JlkvmbO04fE= + version "0.5.14" + resolved "https://registry.yarnpkg.com/node-promise/-/node-promise-0.5.14.tgz#6dccbae26d2c5383d1f49ead782c7cecbbbd07dc" + integrity sha512-kbd+ABY2XRdByRVHPcBDemymfNL8+msGyKNxG/ziZnh9RjneuuGQl3/CE5UkNWxCInkJS+ztc5B31/t2kIO4Yw== -node-status@1.0.0: +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= @@ -942,12 +592,18 @@ nopt@^4.0.1: abbrev "1" osenv "^0.1.4" -npm-run-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-1.0.0.tgz#f5c32bf595fe81ae927daec52e82f8b000ac3c8f" - integrity sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8= +npm-bundled@^1.0.1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" + integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== + +npm-packlist@^1.1.6: + version "1.4.1" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" + integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw== dependencies: - path-key "^1.0.0" + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" npmlog@^4.0.2: version "4.1.2" @@ -964,17 +620,12 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -oauth-sign@~0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" - integrity sha1-Rqarfwrq2N6unsBWV4C31O/rnUM= - -object-assign@^4.0.1, object-assign@^4.1.0: +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, once@^1.3.3: +once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -986,14 +637,6 @@ onetime@^1.0.0: resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= -optimist@~0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" @@ -1005,9 +648,9 @@ os-tmpdir@^1.0.0: integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= osenv@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" - integrity sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ= + 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" @@ -1017,50 +660,20 @@ osenv@^0.1.4: resolved "https://registry.yarnpkg.com/over/-/over-0.0.5.tgz#f29852e70fd7e25f360e013a8ec44c82aedb5708" integrity sha1-8phS5w/X4l82DgE6jsRMgq7bVwg= -package-json@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-3.1.0.tgz#ce281900fe8052150cc6709c6c006c18fdb2f379" - integrity sha1-zigZAP6AUhUMxnCcbABsGP2y83k= - dependencies: - got "^6.7.1" - registry-auth-token "^3.0.1" - registry-url "^3.0.3" - semver "^5.1.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-key@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-1.0.0.tgz#5d53d578019646c0d68800db4e146e6bdc2ac7af" - integrity sha1-XVPVeAGWRsDWiADbThRua9wqx68= - -path-parse@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" - integrity sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME= - -performance-now@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" - integrity sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU= - -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" - integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M= +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== -pseudomap@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= +process-nextick-args@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== pullstream@~0.4.0: version "0.4.1" @@ -1072,47 +685,27 @@ pullstream@~0.4.0: setimmediate ">= 1.0.2 < 2" slice-stream ">= 1.0.0 < 2" -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - -qs@~6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" - integrity sha1-E+JtKK1rD/qpExLNO/cI7TUecjM= - -rc@^1.0.1, rc@^1.1.6: - version "1.1.7" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.7.tgz#c5ea564bb07aff9fd3a5b32e906c1d3a65940fea" - integrity sha1-xepWS7B6/5/TpbMukGwdOmWUD+o= - dependencies: - deep-extend "~0.4.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - rc@^1.1.7: - version "1.2.2" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077" - integrity sha1-2M6ctX6NZNnHut2YdsfDTL48cHc= + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: - deep-extend "~0.4.0" + deep-extend "^0.6.0" ini "~1.3.0" minimist "^1.2.0" strip-json-comments "~2.0.1" -readable-stream@^2.0.6, readable-stream@^2.1.4: - version "2.3.3" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" - integrity sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ== +readable-stream@^2.0.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" isarray "~1.0.0" - process-nextick-args "~1.0.6" + process-nextick-args "~2.0.0" safe-buffer "~5.1.1" - string_decoder "~1.0.3" + string_decoder "~1.1.1" util-deprecate "~1.0.1" readable-stream@~1.0.0, readable-stream@~1.0.31: @@ -1132,54 +725,12 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" -registry-auth-token@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.1.0.tgz#997c08256e0c7999837b90e944db39d8a790276b" - integrity sha1-mXwIJW4MeZmDe5DpRNs52KeQJ2s= - dependencies: - rc "^1.1.6" - -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.81.0: - version "2.81.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" - integrity sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA= - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~4.2.1" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - performance-now "^0.2.0" - qs "~6.4.0" - safe-buffer "^5.0.1" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "^0.6.0" - uuid "^3.0.0" - -resolve@^1.1.6, resolve@^1.1.7: - version "1.3.2" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.2.tgz#1f0442c9e0cbb8136e87b9305f932f46c7f28235" - integrity sha1-HwRCyeDLuBNuh7kwX5MvRsfygjU= - dependencies: - path-parse "^1.0.5" +resolve@^1.1.6, resolve@^1.3.2: + version "1.10.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" + integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== + dependencies: + path-parse "^1.0.6" restore-cursor@^1.0.1: version "1.0.1" @@ -1189,53 +740,32 @@ restore-cursor@^1.0.1: exit-hook "^1.0.0" onetime "^1.0.0" -rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" - integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== +rimraf@2, rimraf@^2.6.1, rimraf@^2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== dependencies: - glob "^7.0.5" + glob "^7.1.3" -rimraf@2.5.4: - version "2.5.4" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" - integrity sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ= - dependencies: - glob "^7.0.5" +safe-buffer@^5.1.2, 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== -rxjs@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.2.0.tgz#db537de8767c05fa73721587a29e0085307d318b" - integrity sha1-21N96HZ8BfpzchWHop4AhTB9MYs= - dependencies: - symbol-observable "^1.0.1" - -safe-buffer@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" - integrity sha1-0mPKVGls2KMGtcplUekt5XkY++c= +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" - integrity sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg== - -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@^5.0.3, semver@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== semver@^5.3.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" - integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg== + version "5.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" + integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== set-blocking@~2.0.0: version "2.0.0" @@ -1247,10 +777,10 @@ set-blocking@~2.0.0: resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= -shelljs@0.7.7: - version "0.7.7" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1" - integrity sha1-svXHfvlxSPS09uImguELuoZnz/E= +shelljs@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097" + integrity sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A== dependencies: glob "^7.0.0" interpret "^1.0.0" @@ -1268,39 +798,12 @@ signal-exit@^3.0.0: dependencies: readable-stream "~1.0.31" -slide@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" - integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= - -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - integrity sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg= - dependencies: - hoek "2.x.x" - 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.13.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" - integrity sha1-US322mKHFEMW3EwY/hzx2UBzm+M= - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - optionalDependencies: - bcrypt-pbkdf "^1.0.0" - ecc-jsbn "~0.1.1" - jsbn "~0.1.0" - tweetnacl "~0.14.0" - -string-width@^1.0.1, string-width@^1.0.2: +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= @@ -1309,31 +812,26 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" - integrity sha1-Y1xUNsxypuDDh87KJ41OLuxSaH4= +"string-width@^1.0.2 || 2": + 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 "^3.0.0" + strip-ansi "^4.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" integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= -string_decoder@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" - integrity sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ== +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== dependencies: safe-buffer "~5.1.0" -stringstream@~0.0.4: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" - integrity sha1-TkhM1N5aC7vuGORjB3EKioFiGHg= - strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -1341,10 +839,12 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" -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-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-json-comments@~2.0.1: version "2.0.1" @@ -1356,117 +856,72 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -symbol-observable@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" - integrity sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0= - -tar-pack@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" - integrity sha512-PPRybI9+jM5tjtCbN2cxmmRU7YmqT3Zv/UDy48tAh2XRkLa9bAORtSWLkVc13+GJF+cdTh1yEnHEk3cpTaL5Kg== - dependencies: - debug "^2.2.0" - fstream "^1.0.10" - fstream-ignore "^1.0.5" - once "^1.3.3" - readable-stream "^2.1.4" - rimraf "^2.5.1" - tar "^2.2.1" - uid-number "^0.0.6" - -tar@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" - integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE= +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== dependencies: - block-stream "*" - fstream "^1.0.2" - inherits "2" + has-flag "^3.0.0" -term-size@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-0.1.1.tgz#87360b96396cab5760963714cda0d0cbeecad9ca" - integrity sha1-hzYLljlsq1dgljcUzaDQy+7K2co= - dependencies: - execa "^0.4.0" - -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= - -tough-cookie@~2.3.0: - version "2.3.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" - integrity sha1-C2GKVWW23qkL80JdBNVe3EdadWE= +tar@^4: + version "4.4.8" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" + integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ== dependencies: - punycode "^1.4.1" + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.3.4" + minizlib "^1.1.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.2" "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= -tslint@4.5.1: - version "4.5.1" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-4.5.1.tgz#05356871bef23a434906734006fc188336ba824b" - integrity sha1-BTVocb7yOkNJBnNABvwYgza6gks= - dependencies: - babel-code-frame "^6.20.0" - colors "^1.1.2" - diff "^3.0.1" - findup-sync "~0.3.0" +tslib@^1.8.0, tslib@^1.8.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== + +tslint@^5.13.1: + version "5.13.1" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.13.1.tgz#fbc0541c425647a33cd9108ce4fd4cd18d7904ed" + integrity sha512-fplQqb2miLbcPhyHoMV4FU9PtNRbgmm/zI5d3SZwwmJQM6V0eodju+hplpyfhLWpmwrDNfNYU57uYRb8s0zZoQ== + dependencies: + babel-code-frame "^6.22.0" + builtin-modules "^1.1.1" + chalk "^2.3.0" + commander "^2.12.1" + diff "^3.2.0" glob "^7.1.1" - optimist "~0.6.0" - resolve "^1.1.7" - tsutils "^1.1.0" - update-notifier "^2.0.0" - -tsutils@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-1.3.0.tgz#dd86cb304f7a2e86c012deade2f8d0f886f57808" - integrity sha1-3YbLME96LobAEt6t4vjQ+Ib1eAg= + js-yaml "^3.7.0" + minimatch "^3.0.4" + mkdirp "^0.5.1" + resolve "^1.3.2" + semver "^5.3.0" + tslib "^1.8.0" + tsutils "^2.27.2" -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= +tsutils@^2.27.2: + version "2.29.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" + integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== dependencies: - safe-buffer "^5.0.1" + tslib "^1.8.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= - -typescript@2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.2.1.tgz#4862b662b988a4c8ff691cc7969622d24db76ae9" - integrity sha1-SGK2YrmIpMj/aRzHlpYi0k23auk= - -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= +typescript@^3.3.3333: + version "3.3.3333" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.3.3333.tgz#171b2c5af66c59e9431199117a3bcadc66fdcfd6" + integrity sha512-JjSKsAfuHBE/fB2oZ8NxtRTk5iGcg6hkYXMnZ3Wc+b2RSqejEqTaem11mHASMnFilHrax3sLK0GDzcJrekZYLw== underscore@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.3.3.tgz#47ac53683daf832bfa952e1774417da47817ae42" integrity sha1-R6xTaD2vgyv6lS4XdEF9pHgXrkI= -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" - -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= - unzip2@0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/unzip2/-/unzip2-0.2.5.tgz#4ef7a579a78c15c51f550f6a053db194149c8992" @@ -1479,92 +934,24 @@ unzip2@0.2.5: readable-stream "~1.0.0" setimmediate "~1.0.1" -update-notifier@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.1.0.tgz#ec0c1e53536b76647a24b77cb83966d9315123d9" - integrity sha1-7AweU1NrdmR6JLd8uDlm2TFRI9k= - dependencies: - boxen "^1.0.0" - chalk "^1.0.0" - configstore "^3.0.0" - is-npm "^1.0.0" - latest-version "^3.0.0" - lazy-req "^2.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.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: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -uuid@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" - integrity sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g== - -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" - -which@^1.2.8: - version "1.2.12" - resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" - integrity sha1-3me15FAmnxlJCe8j7OTr5Bb6EZI= - dependencies: - isexe "^1.1.1" - wide-align@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" - integrity sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w== - dependencies: - string-width "^1.0.2" - -widest-line@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c" - integrity sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw= + 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.1" - -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= + 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@^1.1.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.1.tgz#7d45ba32316328dd1ec7d90f60ebc0d845bb759a" - integrity sha1-fUW6MjFjKN0ex9kPYOvA2EW7dZo= - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - slide "^1.1.5" - -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= - -yallist@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.1.tgz#08309c7044b1761d5e1591dc12c67629271b6ac3" - integrity sha1-CDCccESxdh1eFZHcEsZ2KScbasM= +yallist@^3.0.0, yallist@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" + integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== From f2b5c8bc79e54f4f9f8aba33d52167fb0967a5bd Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Mon, 11 Mar 2019 15:41:59 -0700 Subject: [PATCH 139/660] Updating shape snippets with latest API updates (#271) --- .../shape-create-and-delete.yaml | 2 +- .../excel/85-preview-apis/shape-images.yaml | 2 +- .../excel/85-preview-apis/shape-lines.yaml | 76 ++++++++---------- .../85-preview-apis/shape-textboxes.yaml | 12 ++- samples/excel/85-preview-apis/tetrominos.yaml | 6 +- snippet-extractor-metadata/excel.xlsx | Bin 18887 -> 19048 bytes snippet-extractor-output/snippets.yaml | 52 ++++++++++-- 7 files changed, 86 insertions(+), 64 deletions(-) diff --git a/samples/excel/85-preview-apis/shape-create-and-delete.yaml b/samples/excel/85-preview-apis/shape-create-and-delete.yaml index 05cb7a05c..551a79629 100644 --- a/samples/excel/85-preview-apis/shape-create-and-delete.yaml +++ b/samples/excel/85-preview-apis/shape-create-and-delete.yaml @@ -47,7 +47,7 @@ script: shape.top = 100; shape.height = 100; shape.width = 100; - shape.fill.foreColor = "yellow" + shape.fill.foregroundColor = "yellow" await context.sync(); }); } diff --git a/samples/excel/85-preview-apis/shape-images.yaml b/samples/excel/85-preview-apis/shape-images.yaml index 91bed6353..73c2abba6 100644 --- a/samples/excel/85-preview-apis/shape-images.yaml +++ b/samples/excel/85-preview-apis/shape-images.yaml @@ -57,7 +57,7 @@ script: await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.getItem("Image"); - const result = shape.saveAsPicture(Excel.PictureFormat.png); + const result = shape.getAsImage(Excel.PictureFormat.png); await context.sync(); const imageString = result.value; diff --git a/samples/excel/85-preview-apis/shape-lines.yaml b/samples/excel/85-preview-apis/shape-lines.yaml index 1a174f350..53d27d293 100644 --- a/samples/excel/85-preview-apis/shape-lines.yaml +++ b/samples/excel/85-preview-apis/shape-lines.yaml @@ -41,13 +41,13 @@ script: 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.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; + line.endArrowheadLength = Excel.ArrowheadLength.long; + line.endArrowheadWidth = Excel.ArrowheadWidth.wide; + line.endArrowheadStyle = Excel.ArrowheadStyle.triangle; await context.sync(); }); @@ -57,13 +57,13 @@ script: await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; const line = shapes.getItem("CurvedLine").line; - line.beginArrowHeadLength = Excel.ArrowHeadLength.short; - line.beginArrowHeadWidth = Excel.ArrowHeadWidth.narrow; - line.beginArrowHeadStyle = Excel.ArrowHeadStyle.diamond; + line.beginArrowheadLength = Excel.ArrowheadLength.short; + line.beginArrowheadWidth = Excel.ArrowheadWidth.narrow; + line.beginArrowheadStyle = Excel.ArrowheadStyle.diamond; - line.endArrowHeadLength = Excel.ArrowHeadLength.short; - line.endArrowHeadWidth = Excel.ArrowHeadWidth.narrow; - line.endArrowHeadStyle = Excel.ArrowHeadStyle.diamond; + line.endArrowheadLength = Excel.ArrowheadLength.short; + line.endArrowheadWidth = Excel.ArrowheadWidth.narrow; + line.endArrowheadStyle = Excel.ArrowheadStyle.diamond; await context.sync(); }); @@ -71,53 +71,41 @@ script: async function connectStraightLine() { await Excel.run(async (context) => { - // NOTE: This API not currently supported. - - // const shapes = context.workbook.worksheets.getItem("Shapes").shapes; - // const line = shapes.getItem("StraightLine").line; - // line.beginConnect(shapes.getItem("Left"), 2); - // line.endConnect(shapes.getItem("Right"), 0); - - // await context.sync(); + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const line = shapes.getItem("StraightLine").line; + line.connectBeginShape(shapes.getItem("Left"), 2); + line.connectEndShape(shapes.getItem("Right"), 0); + await context.sync(); }); } async function disconnectStraightLine() { await Excel.run(async (context) => { - // NOTE: This API not currently supported. - - // const shapes = context.workbook.worksheets.getItem("Shapes").shapes; - // const line = shapes.getItem("StraightLine").line; - // line.beginDisconnect(); - // line.endDisconnect(); - - // await context.sync(); + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const line = shapes.getItem("StraightLine").line; + line.disconnectBeginShape(); + line.disconnectEndShape(); + await context.sync(); }); } async function connectCurvedLine() { await Excel.run(async (context) => { - // NOTE: This API not currently supported. - - // const shapes = context.workbook.worksheets.getItem("Shapes").shapes; - // const line = shapes.getItem("CurvedLine").line; - // line.beginConnect(shapes.getItem("Left"), 2); - // line.endConnect(shapes.getItem("Right"), 0); - - // await context.sync(); + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const line = shapes.getItem("CurvedLine").line; + line.connectBeginShape(shapes.getItem("Left"), 2); + line.connectEndShape(shapes.getItem("Right"), 0); + await context.sync(); }); } async function disconnectCurvedLine() { await Excel.run(async (context) => { - // NOTE: This API not currently supported. - - // const shapes = context.workbook.worksheets.getItem("Shapes").shapes; - // const line = shapes.getItem("CurvedLine").line; - // line.beginDisconnect(); - // line.endDisconnect(); - - // await context.sync(); + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const line = shapes.getItem("CurvedLine").line; + line.disconnectBeginShape(); + line.disconnectEndShape(); + await context.sync(); }); } diff --git a/samples/excel/85-preview-apis/shape-textboxes.yaml b/samples/excel/85-preview-apis/shape-textboxes.yaml index 1740f8d5b..567ce34b3 100644 --- a/samples/excel/85-preview-apis/shape-textboxes.yaml +++ b/samples/excel/85-preview-apis/shape-textboxes.yaml @@ -47,19 +47,17 @@ script: await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; const textbox = shapes.getItem("Textbox"); - textbox.textFrame.horizontalAlignment = Excel.ShapeTextHorizontalAlignType.center; + textbox.textFrame.horizontalAlignment = Excel.ShapeTextHorizontalAlignment.center; await context.sync(); }); } async function autoSizeText() { await Excel.run(async (context) => { - // NOTE: This API not currently supported. - - // const shapes = context.workbook.worksheets.getItem("Shapes").shapes; - // const textbox = shapes.getItem("Textbox"); - // textbox.textFrame.autoSize = Excel.ShapeAutoSize.autoSizeTextToFitShape; - // await context.sync(); + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const textbox = shapes.getItem("Textbox"); + textbox.textFrame.autoSizeSetting = Excel.ShapeAutoSize.autoSizeShapeToFitText; + await context.sync(); }); } diff --git a/samples/excel/85-preview-apis/tetrominos.yaml b/samples/excel/85-preview-apis/tetrominos.yaml index b1fc26f5c..f7c929e5b 100644 --- a/samples/excel/85-preview-apis/tetrominos.yaml +++ b/samples/excel/85-preview-apis/tetrominos.yaml @@ -376,8 +376,8 @@ script: } let color = background[rows[i][j] - 1]; - if (color != cachedShapesByPosition[key].fill.foreColor) { - cachedShapesByPosition[key].fill.foreColor = color; + if (color != cachedShapesByPosition[key].fill.foregroundColor) { + cachedShapesByPosition[key].fill.foregroundColor = color; countOfShapesRefilled += 1; } } else { @@ -517,7 +517,7 @@ script: newshp.height = BLOCK_HEIGHT; newshp.fill.transparency = 1; - newshp.fill.foreColor = "#000000"; + newshp.fill.foregroundColor = "#000000"; cachedShapesByPosition[key] = newshp; } diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index bfb56da6c84cb09a830e872140e91d5e191e1795..eab5e9697ee786fb9082ec46682de25701c1a156 100644 GIT binary patch delta 10512 zcmZ9yWmFwe(KNr#{ zv#1KFTh0n=u<~{w8<->q6dVAne`1~VZ9n+@qdI$D(ZsnPj~(NnrPG&?Eh+YHkC9LDA;l$HC6N>{abMqg ztDi}tnW^7k)&Cx}UYz?=KSD2m_kCNFq}V7Kb=+65Dc-)6S!ap;4DJ&{t99Ivh)NuB<6$BE69b#M@=wI zf7Uj-jay_GZ$-XrG-fTYb=XW@JjL}wA1^9KUiv=XrG=AT7M}7h7R?qXW=}6)@)JA~ z&S!(qMQ7Gc+IQ+tmv04UCBh`3?IQE796&3BZ&k36aliwK4TpygD-u}dW39Kyl@)o{ z$38hLPm_;2!}ij>m+t=t?!&)|i23TZ={iHMlaqMRCeNNci)1(jm5Kh)JH#1h4-v6` zuO7}A{eH;wvA1-V2j=i9ccO~nNP~$Fv%6J*yeZSRX+LD{1rAB^Df$Q7bGO_8uL9cy zJO|guPwWrmP*5WnYDQQZWGa^18ppZVDgDwhgHo9BH{z!+T|cpwKv&5;8>k8kSqc_i zI-R0S9vcL@@CJbhK~PaiVjxA|GLobL>xqowRcy>vcOxtfr3`~Lj8;nud3*GqDdmZWRX;LV3~7w3^r>fa~LR)8pL|q|>Zr-+R9ARsFo}VX?3Jl{NjUeEG;VczOBU*~;B+ zqc~E8d>HX?q=DA^g@6l3(%<{iJlV%jUu~K^8@G42wy?C~0fU>Hk0-v-61cYa^jv;D zwc<^m?b<$=R!~=fgy$7)7bPbrj~DeA;eX%}DfQ6{+kHI*+Poc`!rRubzP5Nfx-PeY zHH+9w9{uZV7myxiYwx}KUseQ4SDzP_c#@5AL};%(8AMl)UD{~7(l2x)1H{WIKsq%E0+x0N=wy*6}_%(OF z^)*U5(pWQ3tGV&H(E>f07ilBArL_0g#CKQnGIN%`rQ889x03N?%i(H<=u9= zpodEYAS^Hooz1ooOl|RfU7I4X<|&)$yI$mZT;BagYE+?yeolZ-S8Ru;%X({i)NSI4 z6K;Gj4t4j0f){$Uku3{znmp&nA=P%LchFMT@9adSPyC%O5lkKHIf#3g-J zcoiEM$KsH1(%VTgdhB^73TLyEaFX@@P46h-q_IN`tg`JAhyT+nGMqJ9bPOd$%jUC( zcam>|;$`U{iK2GfUpSPG^B&HEB^Wb|BVfKXK(M%s3^vx2!jzz=bD-Lfab*fO!uPWk$!Fu#q{8-@&SjN^z>Qj3+egm~rjH zB6hl+tP{Vz5xmpj+J|#ktJ--$2Ux94%7=QBUkr2Vk;lAR$WBuBRy-`Y*wGpjix>LlxPXCTsZB`e%-GELUiW&>i_Xvmn ztRlO>pb~mJ2A#Oj2nYDsgs43xlaATnun9@I)`^$44qq-BLDex+LbucOzCb*hb%CC0 zd~s7bl)ir)OR0KIASMkS!i1{#Sz}u#TL^`oF8;sksSdF#s*l|$Q9*Gq2nA8_Q*S^y zBSB_imip~agFj8}0(J}jD;>&93$#W9jf?&3$C2=zevb(TALPqxq;{|?iCr+_*xT`b zVC}I8$(Lhc*T@aWI0JP^$(K{UXIeMc?Vij+Vdc^J)2-J1daiD{QAzwFXlMnrzOmlL zplYMp-0xgD%FQG7qKUUe32>Je@dn~F771Cjhc@N#5B>1%hP|KIIwsnpGDeEYT>k2$ zS}NrRP!1$XAHfRZbnaOf6Imow(jFEEo0f~kaM4K0ouR+A1wc1*w5D1|d;|7J<&mz; zVSVVF~-nWBS{w4&{q6qCYC)H`lv4%V7sd|@j zu9p;9Vuu(5IM z#LX0TYU0sStbTGc%MOyTuz0c?1XC*aKX0ooNx4ZRS-s_E^gq%#zC(&-rf6?4YWN02 zS`6RaPis5yFs!Ng%Tbx1AU3iLEZQ{P-Ont^YAQDaEZfCsfnoy*y#rb9h;?_36AIr1 z%~7~xhhJyDQ55h%`sdC_ZF`8il51fsJ#3kejs zyIe>xpbQHqv0SZ?TZ(a((()uUY}f;_r}q>W*c)HGZ<=D!b`99BM>ZH0ir->>A7)L0 zQso4!4%$b;O)1<{4dduM6d#!fvUh5Hsh_e&h0P6s**RXLbw@G0s{H^?Xbz|JR_g>^ z)}F*P2eNyRprlpEt;RUt$Zc=I8i0|m@EVawuz6f$^eRX5kW|oox5toM+*jQs%CRtU z5{79HQPki%xs*DQPz*1)gO<8!9S0h9zw`q(oC9%H67%^O1(h9=o}`@&68C^aD26n?@Atam zwB5xe%>h`8fR3r$9|I3dRiE*d=M|-5jqz2)hw@li`s*(G7%_d;t?PnEnk@te_6~}x>{9C}8;Xg$DtMJ+SwIUNo zh#YPnEBt@s?WJJQ{daK%X?i0rvo?exIom-W$1Be2B)P=V&bI;AD(NsxQ9t7|HUeMa zo8u50u)-(r@PFEAArTF>JgCee<6v(@NhU z$}%(%e(jdk)$uT`;oAlcAn8lbxbcG^rYI~VlO6v7ALQf9w%9;%`ygf7M{IC%!$tX9 z4b1&f-C_}p+Gg{=brJ$b95Tn#0-@|+|4zPqsUZSA#UcYRa;B##yRPBidH z0^UD-t|2yZGV*U@|_AXI-X{ zeGe>m&NVv0t}yXF(Yqfd&2oT;Tl45&ZK1Q>{5iLjYy8$;5YhW)zyv%B-@0c_$~U6_ z_7`9~8yRQcQggCH7Z;wSo=YU^9HaeFa{tHv>6e^+&d$e_e8ig{6Jg24`i=Ni;s&|J zSi4n1H<~khwv{emJ;EJE^#jXpcNb&8H2md*Wx_-c@3SK09jhzL97H?2?b>=VQ|@Bp ztbr37JaY#+EE(=l{5&sV-|NrTSC+`Q0rypX#qnwl~>Ht?NRtmVq*78 zXKQa;uf2)(sNsLldY3#0_yLag0a_5)r~A^csOa4aGpw|zU3#S(N*`6;mEysVrMEF- zzUAa|ufJkPWkaUwNLj)XTxVnF_}04pKBY%0Lo{Rt4+JF2Au=yw93oVB?IPP(Rf`r9 zZqP4-;3bh`9l4m4N7oBQiIz(26eYw2W7j=`k$B??*Ha5Yc0KoG9r0N?mE>f-8ERfc z)CO2s-xjfo!!CQP%6yE30>0vRcM*P-cX{_tgJ=M`CdCDWw0r4~w?1F{vEpWc;w$mr zdYw@!%u#@V42i9LG_bt(?Ob6nSB_mE5{xPIC(3c3zDf9tM#LVI4R*$7 z83y1p#lU8d9%;BQ!2_|qBj-abmTcT!46%VeUnb8gr8a!KxXUZ9rs7|(Uv$D0fh3ob zfNns;;t+JAFhmo6X6&U~M>AiQnrx<=Nyh-KJ_lB7E=QDjX++1pb&w9G5DG^dJ}nni zsVknVb|>dF)q4HDC(0s%w~<&jHdd>vmJUeoU|EbDiqU;**j~KlwIaWXBv(Twf=bMU zQ+o=%5DVt4nD_SUT36FzVC4!LT&7%x?yiuxnc|%j+@gD%<8wg6VJutJNC>bxJ44-XQzFH#rlVDT?1j0 zDF-`)@b_0$vHI`JdLLOm+s3?7OYj&(y%r0!*mB3FqmK3~!B2-equ-EtN+9eLngYcEs%i@dYR>LgPKYj*?Vxy%|HDvw_ zx!|mEL1rU!>a$`2VnY%i-bI!1mliu7BFs#Y)gLfXsK4PnsbIA1W(ky$P!+^M(hFcHm(=@USumjLn0hid z`{s)``&3i<4A)$wr{jNaU z?_8{(ZZ7&e?yo^lfm|EfSOiALIFj_aS(9Y##sh|!@wfj2A%Ew72XlT4$Xv%;ee@?vlcrpE2okHW**+{< z!_GjJW7+N{NZ z$4#FWp`+ZL2 zl0B>PD;{(a6=-Ei;gc+(tfbPDNm>`OK6ih)QCLV4%I9&7C5FSS963wn80mCgyof-a zNc#%}$=<0lv4r^Lt~6R_GyK&dp{XZv`*wufNkfK-pXG%fLh;};%bSah#$naP`{|Jk zg<6G`wNBN%a$U6MQd~7_G}76Z-+L~nPIz9bT(wAJdI!}`UwyVXM`{0q%|^^c09-$t z_yzSW3fcC`J^@u=X&%P#VDM$N#zb|&R{?WCRGz{@uDm|sposa1&XTnGqWU?A3<)tb za#@fCPm`D^3Y~FQmj=t}Obct2J4w4P390wipRYXV+wr&(dqE3VV|*WPHD))jNM({X ztU%VsoQ?gN9$y{4xK7l0}G~ej{Lj@K9 zs@$;=2bOL--7#8;mj4u+Nfn{?8Mf`xpd~vfHIP$WhEL$7lt8Hv)zTbvNa*9fFA4|{ zPq)8@e?)j-Q(}^=mBqFR-c+8*6Ms)}@;SkSm;VeVk>b;#6yB+YBLOhI?+ z>fBHoM>ql(#~rR3s%Vm*r(?Z0;G_kd!z6Re?^d|`=b&W<9}V9 z>Wq|xP(0#1PV~AZ$?&>WI78M*g#BL1DlRU2(Fu(TTup#;8amZ;VO$HHX5mj3VPzSv zBg5(acQ3Q_$?tIo=1`h!_l&nQJ(+Z%?|JI_B8h}YL?(V8!*P!8UH=lIpA-j7?l{{j z^M@j>Db0VB>eR;?d=VJ=`1EXa&#Dc<_4{-i??{(2-Y=82z3{7Z+M$INo9#?PFEVhK93LJ0*n^J`Rqr*fyzb3i`;`=1X7 z*;mdHtcwByMX*Bo8Quf7oAp=#+t@2*e-o?gtkF1rlc!zGkhSm8hmh2!THCPhxue0X zh@2R=*N2y&SkvH7)wd(~!CmWKz}Yif+2PHWwt%hG?fO+dxsRaGxV|;XB#TIjFmq`k zkdk(n(I{C{J4vp{vylFBab5Ju6TKo z3xBH~e7ya!zWMm+AxhY1#?UmmO5n$1mFIGrmx^U-*Ra6kEx#VmtiIO%>#*>u-k*3e zTKVeNM&078dVrzN*@oXp_GR8Bfw3So?jXK#fZ*D)WKmY+koB$*Mo)dn_s!QZ7LL~+ z;L_?Aw&{Nj@9^(k2U_duBZjabs-RJuEW~wjH%|N6(~K{VtHgC^tD~L6>-*&l?$>zF zOxtis{Q=R~M@gcV#58bT8H`ajgEQQq4d^fz3{^cY0CfnPv?WsjYB5C!mTYU7QuiIp zW;}mbRvC6*5laAb6s$uA<@jnNoA~02@C(MpzuQ$P)ed>ZX~*G*()SCbOFLAu#H0@E zgY(yAhr(9)2hqA{;}c@0-m0DAX3!fwE#F5>l~0x{`Rw^GMrR$RuPrvGqF=RJ*UVaR z(uFas0e0`A0VOknup1z;JjPvf(WlBk`!ICLOFWYKl|M$W14Tn9B<%_Wr=EjiBArdO zmBH5;?fxi;*)3<$;UWofjM5o{ZQUV3yCl!h^_An{b!$)V;Ug?gu7ndCxer2Jx-Deo zrR~+8_}g#hmcSSowU_dR6wb?ZSv-uh2l`SDoLGjb!)6=1VYjZj97|$%1{|){oTm72 zyBK_rCOsdDC*xhEJH||R=JLLr-b7f{#Y0_kux*Jp`fNR`{KcDt*9yY~c9ELkK)rsH z;CZmvyxZP1C6Z8Bm;A&T&8yuWV|N5~mdXU1s}O!N8kKZQtlJYeQ1meTB1|L2WVu-b zV7d4ehBR;V{(huz1xAwr$V^lfVzfQ*N5A$fIjXT z$<0^HmSY8D=?66mPP0j~^a3-a6I?*A#;1AWxxb^0oGUI$;o$s*Rm~BNl2VvV=w78k zZgUHFfQEEqo!aOAtVIoMgG=6)ia|08yp-?%30MBA+VN4C*}zw-jF1XbyY~DunKZJj zTf{fo_q9FL=87K?^1K?Y0ZkU#W2vw(dehp9Wft8TmuvcK0^NS>^?p9UD5uZYL(iK! zQQkn0UsfMBO4>5|;uCDnaLC4BSOvzos=U%hpOP}yY|;snu}4u{at-s&?B?wz09PVg zpjIv$QH>Nk@dt5M5x0^g+s7~6C|#)bz{c?5N%p+6l2rN_|7PN@RXy2j6*sBO_b$0r zE%kdacP-gWh~4dC`_LWH<@OL(u@^(u)(la`=Zu}&#(x5^C00cEtSP8BpxS&l%F>VS z{LyPsS;#y}mLaxXjmB0op|>{@fa)xXZl3@dBRHd3w>%|VJfS?HRoq=drKi)#?<&u4 zrHeXl(73IVt&I;Slkna)dW#0`n(&>^i_k99T9hosy8##(C+dj6=NyQHm92Rco8Tt@1ad1E_UWjW=lqybvQ2=^cy4Y=U!1Kyl<78qea~ z3_UiEG5%`o65Q{1JC?WeB>|W1@>JprNwVf$Lah7idwknex9OXW}QME31-k z=oBTe2a{6uTqM`K&>AGlHK2Uqtt-hq2oJSQ7i!^3p&xXT(L6O%`GSSPLSiivcY5Jn z=hMje?k7V1zP>jb!u4fGHLzzH!Yr!ykOk?c?HBQ(bBR}yzIFijA+x@c+!VRYB$-O7 zNR@ZE4Z|r5hdOLkh$JrP^RXhdUzsdoG>xcm1;!^He^=;g$`BCLVzo*goVSz=I?fXf ze|{oP(8)x52z$6}M{^N1U5GUP6HWn7YPsENLC4tN8b|}tpfyX|0WyBzotMX9wcPi5 zIqHbzjL8MxG+5<;_w=SA7@(GYE$T3_z&ueMi*HiwtaVjYI2I()mod*QB8OU@Pqiev zbrO{LI!y&rMxU5x$tH@WEVbk1Us6m;{?^h}rpO z&ukO$$wR*P_(2#r0xTYm_>&y4^XBo|7)<(SGNlNzkn(x{6!7qftUyO?^CQSEB5RsN zdM>9u6IhozT2&Ycc-@O&X?Ob>HKUYPgo?en!A+dyt67Ij5^>SFDZ(OuKROijiR0JZORzL2i~(fR^6i7f-qk*p-nyY1)Ww9$rQSS_T6X(M`s1YX`;gg+PMK4YejNFxj}wz|vEanGj8Fw<4veQ}9@`R?cFUaL zs3+=>Dhf4>M*#|)t#@FwXNs?lTsGQBn&W6rnm>3W#Z_4FVJ)B!!?qE#+MP71zqghm zgsOB4LrJcKBixGW<4vFaz_E=D_#ICFnYimD$g)X3;r{8_m2?t;h;hK9 zy}sqQh$H=%+L;^#qEA;HoBQ&gBEv@!JuqO>MA|8Ii2Fu(^ixmU1u;t|@b+z5ztEZ& zgZdgoChO-i9>}7;&F&1uj#({^snXdg>Z;4hRC@t}9`0|$cbDp_(#*W?R}nw+RlFR2 z=BR}2GSINHe?7$Pb*LTI6jhICSI%Co*0(J1d@uHgvCrq!E8O){?UH*EgWy}G@q@*q1 zsBP?lX?1fyLJFZFV(M6z3W&rf+eK>bL|ZA6Jwm6VpZ?c0FVEEnWA6%%n^j38y{V06w8>V*)?csOo>wWX+F2(~&UUYRcJHWy|9;UxU*Q@mBkd&TtYRM*WrC~wH((7P zb4DC`N(nF?x;PEvY#aUO{uv@cBI8J!Ky$`&fntB6SgB1DF`hH>vNrrNCB|6o%B zKKY1R^(YX!C5Ih(ZMFo&=yxNi9Qskc%6uT>{SX5L^leK-Nn2w?%>wb8mX5nGl|-sJ zy9lWu*3iR!qDi4|lS!opfK+j?JSRTL*;44TrCL^z{HLTbtkRQKEYwBfYqfR6v4dW> zv>eO5)2D40#0h@AIA(LB{+645oy$+AYr^!ysk%2t=BqL0UJqsvzS+KR3YOh^s7Wq8 zF+`bHY>Q%7k}&po^0PnZ07_>WisLb_1+b-&kZES7jFF7+83kX@-7;_%-%q!dKM|?D8 zQV0Hpd8ULax8dXQCNMzS%=lq+7Kv2V`a&L+_7~EGHC0Le2MZ$$XJ^}Y+tXV} zR|H*^PaOp)Yi>b)^*fywIQupwYtg`^iO(FhSW<8=5KfPb3t-!DmMO2(RcwHV4zR;h zYkIy`rFuT4=D^FyD1vCCeCe5tqVV`&%>g2unC~jYSzD2(XvK9S)(9LCOJ=K<0b~L< z7spw}cP{I@W|AsK4Pl(cldc!;lY>7FE1c_VH0(^}oZ9qtU-}`V^P~N;PC-nkPfs+J z!=Z`Fgg<|)qGm-IL_rzh3NmO}jOE9WU(fxw_2f*sgNS@ScWTJU=V7@NcBGRUVFUCk zb!eYZbq6Byqr|DhocH?GGql(1i+>x$R0syuL@k$+S8EO}8$>9OfA%VF^T1A%_k&mH zN}*CVx7W&%N?p2E;+852X(esSxSR4$$~H6qK1lXou>E(=0)Jo)H>FrLAou|WfXH>R zr6wyZb|8D{2NT|ZRhu%uCko?bURiOXtQHF|0O2AA&10_F@ z{_lww5(tF$e{nz{l@HK9Nph0^bHoRMaQ_D(2?`@621~~U<&egK)^nmkXCyJ9PEy3M zU%CGaZF6BktECuWdZ4RP$}p=?c4-Zm9cZvLKk0wWs}L3h`U3y|#&qL{E=zwP{coed mfIt>+B&`3D^s5k*Tt*0H9;z=R1e@>~nj%AsP%H5t%KrxnJ0J@H delta 10381 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 Ol8_t-0Z;Njfd2ve3&vFd diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index e5f251c16..f38096b6c 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -2123,7 +2123,7 @@ Excel.Shape.fill: shape.top = 100; shape.height = 100; shape.width = 100; - shape.fill.foreColor = "yellow" + shape.fill.foregroundColor = "yellow" await context.sync(); }); Excel.Shape.delete: @@ -2181,7 +2181,7 @@ Excel.Shape.saveAsPicture: await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.getItem("Image"); - const result = shape.saveAsPicture(Excel.PictureFormat.png); + const result = shape.getAsImage(Excel.PictureFormat.png); await context.sync(); const imageString = result.value; @@ -2766,14 +2766,50 @@ Excel.Shape.line: 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.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; + line.endArrowheadLength = Excel.ArrowheadLength.long; + line.endArrowheadWidth = Excel.ArrowheadWidth.wide; + line.endArrowheadStyle = Excel.ArrowheadStyle.triangle; + await context.sync(); + }); +Excel.Line.connectBeginShape: + - |- + await Excel.run(async (context) => { + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const line = shapes.getItem("StraightLine").line; + line.connectBeginShape(shapes.getItem("Left"), 2); + line.connectEndShape(shapes.getItem("Right"), 0); + await context.sync(); + }); +Excel.Line.connectEndShape: + - |- + await Excel.run(async (context) => { + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const line = shapes.getItem("StraightLine").line; + line.connectBeginShape(shapes.getItem("Left"), 2); + line.connectEndShape(shapes.getItem("Right"), 0); + await context.sync(); + }); +Excel.Line.disconnectBeginShape: + - |- + await Excel.run(async (context) => { + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const line = shapes.getItem("StraightLine").line; + line.disconnectBeginShape(); + line.disconnectEndShape(); + await context.sync(); + }); +Excel.Line.disconnectEndShape: + - |- + await Excel.run(async (context) => { + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const line = shapes.getItem("StraightLine").line; + line.disconnectBeginShape(); + line.disconnectEndShape(); await context.sync(); }); Word.InlinePicture.getBase64ImageSrc: From 92c1ab0943b01a6703859ba4086f36bdc6eb8f6c Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Tue, 12 Mar 2019 09:34:51 -0700 Subject: [PATCH 140/660] Shape group snippet (#273) --- playlists/excel.yaml | 11 +- .../excel/85-preview-apis/shape-groups.yaml | 161 ++++++++++++++++++ .../excel/85-preview-apis/shape-images.yaml | 2 +- samples/excel/85-preview-apis/tetrominos.yaml | 2 +- snippet-extractor-metadata/excel.xlsx | Bin 19048 -> 19161 bytes snippet-extractor-output/snippets.yaml | 36 ++++ view/excel.json | 1 + 7 files changed, 210 insertions(+), 3 deletions(-) create mode 100644 samples/excel/85-preview-apis/shape-groups.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index f0648c4fc..1036e4486 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -683,7 +683,7 @@ api_set: ExcelAPI: 1.9 - id: excel-shape-images - name: Image Shapes + name: Image shapes fileName: shape-images.yaml description: Creates and adjusts image-based shapes. rawUrl: >- @@ -754,6 +754,15 @@ group: Preview APIs 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////samples/excel/85-preview-apis/shape-groups.yaml + group: Preview APIs + api_set: + ExcelApi: 1.9 - id: excel-just-for-fun-tetrominos name: Tetromino stacking fileName: tetrominos.yaml diff --git a/samples/excel/85-preview-apis/shape-groups.yaml b/samples/excel/85-preview-apis/shape-groups.yaml new file mode 100644 index 000000000..0233775fc --- /dev/null +++ b/samples/excel/85-preview-apis/shape-groups.yaml @@ -0,0 +1,161 @@ +order: 14 +id: excel-shape-groups +name: Shape groups +description: Groups and ungroups shapes. +host: EXCEL +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)); + + async function groupShapes() { + 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]); + shapeGroup.name = "Group"; + console.log("Shapes grouped"); + + await context.sync(); + }); + } + + async function moveGroup() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Shapes"); + + const shapeGroup = sheet.shapes.getItem("Group"); + shapeGroup.incrementLeft(50); + shapeGroup.incrementTop(50); + + console.log("Shapes ungrouped"); + + await context.sync(); + }); + } + + async function ungroupShapes() { + 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(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Shapes"); + const sheet = context.workbook.worksheets.getItem("Shapes"); + sheet.activate(); + await context.sync(); + }); + } + + async function createShapes() { + await Excel.run(async (context) => { + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const rectangle = shapes.addGeometricShape(Excel.GeometricShapeType.rectangle); + rectangle.left = 100; + rectangle.top = 100; + rectangle.height = 150; + rectangle.width = 150; + rectangle.name = "Square"; + rectangle.fill.setSolidColor("green"); + + const pentagon = shapes.addGeometricShape(Excel.GeometricShapeType.pentagon); + pentagon.left = 125; + pentagon.top = 125; + pentagon.height = 100; + pentagon.width = 100; + pentagon.name = "Pentagon"; + pentagon.fill.setSolidColor("purple"); + + const octagon = shapes.addGeometricShape(Excel.GeometricShapeType.octagon); + octagon.left = 150; + octagon.top = 150; + octagon.height = 50; + octagon.width = 50; + octagon.name = "Octagon"; + octagon.fill.setSolidColor("red"); + + 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 group and upgroup shapes in a worksheet.

    +
    +
    +

    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/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 + + @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/samples/excel/85-preview-apis/shape-images.yaml b/samples/excel/85-preview-apis/shape-images.yaml index 73c2abba6..1ccc56445 100644 --- a/samples/excel/85-preview-apis/shape-images.yaml +++ b/samples/excel/85-preview-apis/shape-images.yaml @@ -1,6 +1,6 @@ order: 6 id: excel-shape-images -name: Image Shapes +name: Image shapes description: Creates and adjusts image-based shapes. host: EXCEL api_set: diff --git a/samples/excel/85-preview-apis/tetrominos.yaml b/samples/excel/85-preview-apis/tetrominos.yaml index f7c929e5b..bcddbe7a8 100644 --- a/samples/excel/85-preview-apis/tetrominos.yaml +++ b/samples/excel/85-preview-apis/tetrominos.yaml @@ -1,4 +1,4 @@ -order: 14 +order: 15 id: excel-just-for-fun-tetrominos name: Tetromino stacking description: Arrange moving tetromino shapes to form lines. diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index eab5e9697ee786fb9082ec46682de25701c1a156..26f8d94eddc5dbf58e8d4d0ad31235c397be580d 100644 GIT binary patch delta 9670 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 RFa5FY_PB{{ykvQ`P_g diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index f38096b6c..2d0b9a9dc 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -2810,6 +2810,42 @@ Excel.Line.disconnectEndShape: const line = shapes.getItem("StraightLine").line; line.disconnectBeginShape(); line.disconnectEndShape(); + await context.sync(); + }); +Excel.ShapeGroup.ungroup: + - |- + 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.group: + - |- + 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.ShapeCollection.addGroup: + - |- + 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]); + shapeGroup.name = "Group"; + console.log("Shapes grouped"); + await context.sync(); }); Word.InlinePicture.getBase64ImageSrc: diff --git a/view/excel.json b/view/excel.json index 60318fbe0..3ff45a8ce 100644 --- a/view/excel.json +++ b/view/excel.json @@ -81,6 +81,7 @@ "excel-performance-optimization": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/performance-optimization.yaml", "excel-range-remove-duplicates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-remove-duplicates.yaml", "excel-workbook-save-and-close": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-save-and-close.yaml", + "excel-shape-groups": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/shape-groups.yaml", "excel-just-for-fun-tetrominos": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/tetrominos.yaml", "excel-shape-textboxes": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/shape-textboxes.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/report-generation.yaml", From fb2762145f00231643358810ff80ea78d01cab35 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 14 Mar 2019 10:07:09 -0700 Subject: [PATCH 141/660] [excel] (Comments) Adding snippets for comment APIs (#274) * Comment snippets * Removing unnecessary load statement --- playlists/excel.yaml | 9 + samples/excel/85-preview-apis/comment.yaml | 173 + .../performance-optimization.yaml | 2 +- .../excel/85-preview-apis/range-areas.yaml | 2 +- .../excel/85-preview-apis/range-copyfrom.yaml | 2 +- samples/excel/85-preview-apis/range-find.yaml | 2 +- .../range-remove-duplicates.yaml | 2 +- .../shape-create-and-delete.yaml | 2 +- .../excel/85-preview-apis/shape-groups.yaml | 2 +- .../excel/85-preview-apis/shape-images.yaml | 2 +- .../excel/85-preview-apis/shape-lines.yaml | 2 +- .../85-preview-apis/shape-move-and-order.yaml | 2 +- .../85-preview-apis/shape-textboxes.yaml | 2 +- samples/excel/85-preview-apis/tetrominos.yaml | 2 +- .../workbook-insert-external-worksheets.yaml | 2 +- .../workbook-save-and-close.yaml | 2 +- .../85-preview-apis/worksheet-find-all.yaml | 2 +- .../worksheet-page-layout.yaml | 2 +- snippet-extractor-metadata/excel.xlsx | Bin 19161 -> 19427 bytes snippet-extractor-output/snippets.yaml | 3264 +++++++++-------- view/excel.json | 1 + 21 files changed, 1858 insertions(+), 1621 deletions(-) create mode 100644 samples/excel/85-preview-apis/comment.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 1036e4486..0da5acd08 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -632,6 +632,15 @@ group: Worksheet api_set: ExcelApi: 1.1 +- id: excel-comment + name: Comments + fileName: comment.yaml + description: 'Adds, edits, and removes comments and comment replies.' + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/85-preview-apis/comment.yaml + group: Preview APIs + api_set: + ExcelApi: 1.9 - id: excel-shape-create-and-delete name: Create and delete geometric shapes fileName: shape-create-and-delete.yaml diff --git a/samples/excel/85-preview-apis/comment.yaml b/samples/excel/85-preview-apis/comment.yaml new file mode 100644 index 000000000..ddb0b69d6 --- /dev/null +++ b/samples/excel/85-preview-apis/comment.yaml @@ -0,0 +1,173 @@ +order: 1 +id: excel-comment +name: Comments +description: 'Adds, edits, and removes comments and comment replies.' +host: EXCEL +api_set: + ExcelApi: 1.9 +script: + content: | + $("#setup").click(() => tryCatch(setup)); + $("#addCommentToSelectedCell").click(() => tryCatch(addCommentToSelectedCell)); + $("#addCommentToCell").click(() => tryCatch(addCommentToCell)); + $("#addCommentReply").click(() => tryCatch(addCommentReply)); + $("#getCommentMetadata").click(() => tryCatch(getCommentMetadata)); + $("#editComment").click(() => tryCatch(editComment)); + $("#editCommentReply").click(() => tryCatch(editCommentReply)); + $("#deleteComment").click(() => tryCatch(deleteComment)); + $("#deleteCommentReply").click(() => tryCatch(deleteCommentReply)); + + async function addCommentToSelectedCell() { + await Excel.run(async (context) => { + const selectedRange = context.workbook.getSelectedRange(); + selectedRange.load(["rowIndex", "columnIndex"]) + await context.sync(); + + // Note that an InvalidArgument error will be thrown if multiple cells are selected + const singleCell = selectedRange.getCell(selectedRange.rowIndex, selectedRange.columnIndex); + context.workbook.comments.add("TODO: add headers here.", singleCell); + await context.sync(); + }); + } + async function addCommentToCell() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Comments"); + sheet.comments.add("TODO: add data.", "A2"); + await context.sync(); + }); + } + async function addCommentReply() { + await Excel.run(async (context) => { + const comment = context.workbook.comments.getItemByCell("Comments!A1"); + comment.replies.add("Do I have to?"); + await context.sync(); + }); + } + async function getCommentMetadata() { + await Excel.run(async (context) => { + const comment = context.workbook.comments.getItemByCell("Comments!A1"); + comment.load(["authorEmail", "authorName", "creationDate"]); + await context.sync(); + + console.log(`${comment.creationDate.toDateString()}: ${comment.authorName} (${comment.authorEmail})`); + await context.sync(); + }); + } + async function editComment() { + await Excel.run(async (context) => { + const comment = context.workbook.comments.getItemAt(0); + comment.content = "PLEASE add headers here."; + await context.sync(); + }); + } + async function editCommentReply() { + await Excel.run(async (context) => { + const comment = context.workbook.comments.getItemAt(0); + comment.load("replies"); + await context.sync(); + + const reply = comment.replies.getItemAt(0); + reply.content = "new content for the reply"; + await context.sync(); + }); + } + async function deleteComment() { + await Excel.run(async (context) => { + context.workbook.comments.getItemByCell("Comments!A2").delete(); + await context.sync(); + }); + } + async function deleteCommentReply() { + await Excel.run(async (context) => { + var comment = context.workbook.comments.getItemAt(0); + comment.load("replies"); + await context.sync(); + + comment.replies.getItemAt(0).delete(); + await context.sync(); + }); + } + async function setup() { + await Excel.run(async (context) => { + await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Comments"); + const sheet = context.workbook.worksheets.getItem("Comments"); + 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 and edit comments.

    +
    +
    +

    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/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 + + @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/samples/excel/85-preview-apis/performance-optimization.yaml b/samples/excel/85-preview-apis/performance-optimization.yaml index 1a520d688..779d0c478 100644 --- a/samples/excel/85-preview-apis/performance-optimization.yaml +++ b/samples/excel/85-preview-apis/performance-optimization.yaml @@ -1,4 +1,4 @@ -order: 11 +order: 12 id: excel-performance-optimization name: Performance optimization description: Optimizes performance by untracking ranges and turning off screen painting. diff --git a/samples/excel/85-preview-apis/range-areas.yaml b/samples/excel/85-preview-apis/range-areas.yaml index e791fb04e..1b089351f 100644 --- a/samples/excel/85-preview-apis/range-areas.yaml +++ b/samples/excel/85-preview-apis/range-areas.yaml @@ -1,4 +1,4 @@ -order: 3 +order: 4 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.' diff --git a/samples/excel/85-preview-apis/range-copyfrom.yaml b/samples/excel/85-preview-apis/range-copyfrom.yaml index 154a2b5ad..35e23e95d 100644 --- a/samples/excel/85-preview-apis/range-copyfrom.yaml +++ b/samples/excel/85-preview-apis/range-copyfrom.yaml @@ -1,4 +1,4 @@ -order: 2 +order: 3 id: excel-range-copyfrom name: Copy and paste ranges description: Copies data and formatting from one range to another. diff --git a/samples/excel/85-preview-apis/range-find.yaml b/samples/excel/85-preview-apis/range-find.yaml index 093cc2467..236ba6523 100644 --- a/samples/excel/85-preview-apis/range-find.yaml +++ b/samples/excel/85-preview-apis/range-find.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 5 id: excel-range-find name: Find text matches within a range description: Finds a cell within a range based on string matching. diff --git a/samples/excel/85-preview-apis/range-remove-duplicates.yaml b/samples/excel/85-preview-apis/range-remove-duplicates.yaml index 57f5c3eaa..ec3f25045 100644 --- a/samples/excel/85-preview-apis/range-remove-duplicates.yaml +++ b/samples/excel/85-preview-apis/range-remove-duplicates.yaml @@ -1,4 +1,4 @@ -order: 12 +order: 13 id: excel-range-remove-duplicates name: Remove duplicates description: Removes duplicate entries from a range. diff --git a/samples/excel/85-preview-apis/shape-create-and-delete.yaml b/samples/excel/85-preview-apis/shape-create-and-delete.yaml index 551a79629..2112eacb1 100644 --- a/samples/excel/85-preview-apis/shape-create-and-delete.yaml +++ b/samples/excel/85-preview-apis/shape-create-and-delete.yaml @@ -1,4 +1,4 @@ -order: 1 +order: 2 id: excel-shape-create-and-delete name: Create and delete geometric shapes description: Creates a few different geometric shapes and deletes them from the worksheet. diff --git a/samples/excel/85-preview-apis/shape-groups.yaml b/samples/excel/85-preview-apis/shape-groups.yaml index 0233775fc..51a665903 100644 --- a/samples/excel/85-preview-apis/shape-groups.yaml +++ b/samples/excel/85-preview-apis/shape-groups.yaml @@ -1,4 +1,4 @@ -order: 14 +order: 15 id: excel-shape-groups name: Shape groups description: Groups and ungroups shapes. diff --git a/samples/excel/85-preview-apis/shape-images.yaml b/samples/excel/85-preview-apis/shape-images.yaml index 1ccc56445..f24d5827d 100644 --- a/samples/excel/85-preview-apis/shape-images.yaml +++ b/samples/excel/85-preview-apis/shape-images.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 7 id: excel-shape-images name: Image shapes description: Creates and adjusts image-based shapes. diff --git a/samples/excel/85-preview-apis/shape-lines.yaml b/samples/excel/85-preview-apis/shape-lines.yaml index 53d27d293..154d069fd 100644 --- a/samples/excel/85-preview-apis/shape-lines.yaml +++ b/samples/excel/85-preview-apis/shape-lines.yaml @@ -1,4 +1,4 @@ -order: 8 +order: 9 id: excel-shape-lines name: Lines description: Creates and modifies line shapes. diff --git a/samples/excel/85-preview-apis/shape-move-and-order.yaml b/samples/excel/85-preview-apis/shape-move-and-order.yaml index dac253e27..87c7448e7 100644 --- a/samples/excel/85-preview-apis/shape-move-and-order.yaml +++ b/samples/excel/85-preview-apis/shape-move-and-order.yaml @@ -1,4 +1,4 @@ -order: 9 +order: 10 id: excel-shape-move-and-order name: Move and order shapes description: Moves created shapes around the worksheet and adjusts their z-order. diff --git a/samples/excel/85-preview-apis/shape-textboxes.yaml b/samples/excel/85-preview-apis/shape-textboxes.yaml index 567ce34b3..f6035c51c 100644 --- a/samples/excel/85-preview-apis/shape-textboxes.yaml +++ b/samples/excel/85-preview-apis/shape-textboxes.yaml @@ -1,4 +1,4 @@ -order: 15 +order: 17 id: excel-shape-textboxes name: Textboxes description: Creates a textbox shape and works with the text in it and other shapes. diff --git a/samples/excel/85-preview-apis/tetrominos.yaml b/samples/excel/85-preview-apis/tetrominos.yaml index bcddbe7a8..031dbe011 100644 --- a/samples/excel/85-preview-apis/tetrominos.yaml +++ b/samples/excel/85-preview-apis/tetrominos.yaml @@ -1,4 +1,4 @@ -order: 15 +order: 16 id: excel-just-for-fun-tetrominos name: Tetromino stacking description: Arrange moving tetromino shapes to form lines. 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 2d42c4ea2..5ee54781a 100644 --- a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml +++ b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 8 id: excel-workbook-insert-external-worksheets name: Insert external worksheets description: Inserts worksheets from another workbook into the current workbook. diff --git a/samples/excel/85-preview-apis/workbook-save-and-close.yaml b/samples/excel/85-preview-apis/workbook-save-and-close.yaml index a25ecb40a..8b13117f2 100644 --- a/samples/excel/85-preview-apis/workbook-save-and-close.yaml +++ b/samples/excel/85-preview-apis/workbook-save-and-close.yaml @@ -1,4 +1,4 @@ -order: 13 +order: 14 id: excel-workbook-save-and-close name: Save and close description: Saves and closes a workbook. diff --git a/samples/excel/85-preview-apis/worksheet-find-all.yaml b/samples/excel/85-preview-apis/worksheet-find-all.yaml index 151bc2cf4..a45720a3e 100644 --- a/samples/excel/85-preview-apis/worksheet-find-all.yaml +++ b/samples/excel/85-preview-apis/worksheet-find-all.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 6 id: excel-worksheet-find-all name: Find text matches within a worksheet description: Finds cells within a worksheet based on string matching. diff --git a/samples/excel/85-preview-apis/worksheet-page-layout.yaml b/samples/excel/85-preview-apis/worksheet-page-layout.yaml index 7f3d1c8f2..98d95c32b 100644 --- a/samples/excel/85-preview-apis/worksheet-page-layout.yaml +++ b/samples/excel/85-preview-apis/worksheet-page-layout.yaml @@ -1,4 +1,4 @@ -order: 10 +order: 11 id: excel-worksheet-page-layout name: Page layout and print settings description: Changes the page layout and other settings for printing a worksheet. diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 26f8d94eddc5dbf58e8d4d0ad31235c397be580d..0b063177a7f5e4a5bdea774399e4c5c53906eca7 100644 GIT binary patch delta 10360 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 L9*Il-Kb!v#GfD0B delta 10095 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 { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const rowCount = 500; + const columnCount = 20; + + const startTime = Date.now(); + console.log("Starting..."); + + 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(); + } + } + } + + await context.sync(); + + console.log(`Ending. Adding ${rowCount * columnCount} cells took ${Date.now() - startTime} milliseconds`); + }); +Excel.Binding.onDataChanged: + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const salesTable = sheet.tables.getItem("SalesTable"); + const salesByQuarterBinding = context.workbook.bindings.add(salesTable.getRange(), "Table", "SalesByQuarter"); + salesByQuarterBinding.onDataChanged.add(onSalesDataChanged); + + console.log("The data changed handler is registered."); + + await context.sync(); + }); +Excel.CellValueConditionalFormat.format: + - |- + 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.CellValueConditionalFormat.rule: + - |- + 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.ChartAxis.displayUnit: - |- await Excel.run(async (context) => { @@ -26,6 +90,19 @@ Excel.ChartAxis.showDisplayUnitLabel: await context.sync(); }); +Excel.ChartFill.setSolidColor: + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + let pointsCollection = sheet.charts.getItemAt(0).series.getItemAt(0).points; + let point = pointsCollection.getItemAt(2); + + // Set color for chart point. + point.format.fill.setSolidColor('red'); + + await context.sync(); + }); Excel.ChartLegendFormat.font: - |- await Excel.run(async (context) => { @@ -45,19 +122,6 @@ Excel.ChartLegendFormat.font: await context.sync(); }); -Excel.ChartFill.setSolidColor: - - |- - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - let pointsCollection = sheet.charts.getItemAt(0).series.getItemAt(0).points; - let point = pointsCollection.getItemAt(2); - - // Set color for chart point. - point.format.fill.setSolidColor('red'); - - await context.sync(); - }); Excel.ChartSeries.delete: - |- await Excel.run(async (context) => { @@ -75,23 +139,7 @@ Excel.ChartSeries.delete: await context.sync(); }); -Excel.ChartSeries.setValues: - - |- - 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.markerStyle: +Excel.ChartSeries.markerBackgroundColor: - |- await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); @@ -120,7 +168,7 @@ Excel.ChartSeries.markerStyle: await context.sync(); }); -Excel.ChartSeries.markerSize: +Excel.ChartSeries.markerForegroundColor: - |- await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); @@ -149,7 +197,7 @@ Excel.ChartSeries.markerSize: await context.sync(); }); -Excel.ChartSeries.markerForegroundColor: +Excel.ChartSeries.markerSize: - |- await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); @@ -178,7 +226,7 @@ Excel.ChartSeries.markerForegroundColor: await context.sync(); }); -Excel.ChartSeries.markerBackgroundColor: +Excel.ChartSeries.markerStyle: - |- await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); @@ -207,6 +255,22 @@ Excel.ChartSeries.markerBackgroundColor: await context.sync(); }); +Excel.ChartSeries.setValues: + - |- + 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: - |- await Excel.run(async (context) => { @@ -285,1070 +349,880 @@ Excel.ChartTrendlineFormat.line: console.log("The trendline color has been set to:" + line.color); }); -Excel.CustomXmlPart.getXml: +Excel.ColorScaleConditionalFormat.criteria: - |- 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(); + 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(); - - 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); - + }); +Excel.Comment.content: + - |- + await Excel.run(async (context) => { + const comment = context.workbook.comments.getItemAt(0); + comment.content = "PLEASE add headers here."; await context.sync(); }); -Excel.CustomXmlPart.id: +Excel.Comment.delete: - |- 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(); - + context.workbook.comments.getItemByCell("Comments!A2").delete(); + await context.sync(); + }); +Excel.Comment.load_2: + - |- + await Excel.run(async (context) => { + const comment = context.workbook.comments.getItemByCell("Comments!A1"); + comment.load(["authorEmail", "authorName", "creationDate"]); 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); - + console.log(`${comment.creationDate.toDateString()}: ${comment.authorName} (${comment.authorEmail})`); await context.sync(); }); -Excel.CustomXmlPart.setXml: +Excel.CommentCollection.add: - |- await Excel.run(async (context) => { - const settings = context.workbook.settings; - const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); + const sheet = context.workbook.worksheets.getItem("Comments"); + sheet.comments.add("TODO: add data.", "A2"); 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. - customXmlPart.setXml("JohnHitomi"); - const xmlBlob = customXmlPart.getXml(); - await context.sync(); - - const readableXml = addLineBreaksToXML(xmlBlob.value); - $("#display-xml").text(readableXml); - await context.sync(); - } }); -Excel.CustomXmlPart.delete: +Excel.CommentReply.content: - |- await Excel.run(async (context) => { - const settings = context.workbook.settings; - const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); + const comment = context.workbook.comments.getItemAt(0); + comment.content = "PLEASE add headers here."; await context.sync(); - - if (xmlPartIDSetting.value) { - let customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); - const xmlBlob = customXmlPart.getXml(); - customXmlPart.delete(); - customXmlPart = context.workbook.customXmlParts.getItemOrNullObject(xmlPartIDSetting.value); - - await context.sync(); - - if (customXmlPart.isNullObject) { - $("#display-xml").text(`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); - } - - await context.sync(); - } }); -Excel.CustomXmlPartCollection.add: +Excel.CommentReply.delete: - |- 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(); - + var comment = context.workbook.comments.getItemAt(0); + comment.load("replies"); 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); - + comment.replies.getItemAt(0).delete(); await context.sync(); }); -Excel.CustomXmlPartCollection.getItem: +Excel.CommentReplyCollection.add: - |- await Excel.run(async (context) => { - const settings = context.workbook.settings; - const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); + const comment = context.workbook.comments.getItemByCell("Comments!A1"); + comment.replies.add("Do I have to?"); 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. - customXmlPart.setXml("JohnHitomi"); - const xmlBlob = customXmlPart.getXml(); - await context.sync(); - - const readableXml = addLineBreaksToXML(xmlBlob.value); - $("#display-xml").text(readableXml); - await context.sync(); - } }); -Excel.CustomXmlPartScopedCollection.getItemOrNullObject: +Excel.ConditionalCellValueRule.formula1: - |- await Excel.run(async (context) => { - const settings = context.workbook.settings; - const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); - await context.sync(); - - if (xmlPartIDSetting.value) { - let customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); - const xmlBlob = customXmlPart.getXml(); - customXmlPart.delete(); - customXmlPart = context.workbook.customXmlParts.getItemOrNullObject(xmlPartIDSetting.value); - - await context.sync(); - - if (customXmlPart.isNullObject) { - $("#display-xml").text(`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); - } - - await context.sync(); - } - }); -Excel.CustomXmlPartCollection.getByNamespace: - - |- - 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.`); - } + 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.CustomXmlPartScopedCollection.getCount: +Excel.ConditionalCellValueRule.operator: - |- 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.`); - } + 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.CustomXmlPartScopedCollection.getOnlyItem: +Excel.ConditionalFormat.cellValue: - |- 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.`); - } + 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.DataValidation.errorAlert: +Excel.ConditionalFormat.colorScale: - |- 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" + 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.DataValidationRule.wholeNumber: +Excel.ConditionalFormat.custom: - |- 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" - }; + 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.DataValidationRule.list: +Excel.ConditionalFormat.dataBar: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Decision"); - const nameRange = - sheet.tables.getItem("NameOptionsTable").columns.getItem("Baby Name").getDataBodyRange(); - - // When you are developing, it is a good practice to - // clear the dataValidation object with each run of your code. - nameRange.dataValidation.clear(); - - const nameSourceRange = context.workbook.worksheets.getItem("Names").getRange("A1:A3"); - - let approvedListRule = { - list: { - inCellDropDown: true, - source: '=Names!$A$1:$A$3' - } - }; - nameRange.dataValidation.rule = approvedListRule; + 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; await context.sync(); }); -Excel.Workbook.properties: +Excel.ConditionalFormat.getRange: - |- 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; + const sheet = context.workbook.worksheets.getItem("Sample"); + const worksheetRange = sheet.getRange(); + worksheetRange.conditionalFormats.load("type"); await context.sync(); - console.log("Set the following document properties: title, subject, keywords, comments, category, manager, company."); - }); -Excel.Binding.onDataChanged: - - |- - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const salesTable = sheet.tables.getItem("SalesTable"); - const salesByQuarterBinding = context.workbook.bindings.add(salesTable.getRange(), "Table", "SalesByQuarter"); - salesByQuarterBinding.onDataChanged.add(onSalesDataChanged); - - console.log("The data changed handler is registered."); + 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(); - }); -Excel.Runtime.enableEvents: - - |- - await Excel.run(async (context) => { - context.runtime.load("enableEvents"); - await context.sync(); - // check if events are enabled and toggle accordingly - const eventBoolean = !context.runtime.enableEvents - context.runtime.enableEvents = eventBoolean; - if (eventBoolean) { - console.log("Events are currently on."); + if (cfRangePairs.length > 0) { + cfRangePairs.forEach(item => { + console.log(item.cf.type); + }); } else { - console.log("Events are currently off."); + console.log("No conditional formats applied."); } - - await context.sync(); - }); -Excel.Table.onChanged: - - |- - await Excel.run(async (context) => { - let table = context.workbook.tables.getItemAt(0); - table.onChanged.add(onChange); - - await context.sync(); - console.log("A handler has been registered for the onChanged event"); }); -Excel.Table.onSelectionChanged: +Excel.ConditionalFormat.iconSet: - |- await Excel.run(async (context) => { - let table = context.workbook.tables.getItemAt(0); - table.onSelectionChanged.add(onSelectionChange); - - await context.sync(); - console.log("A handler has been registered for table onSelectionChanged event"); - }); -Excel.TableSelectionChangedEventArgs.address: - - |- - 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); - }); - } -Excel.TableChangedEventArgs.worksheetId: - - |- - async function onChange(event) { - await Excel.run(async (context) => { - let table = context.workbook.tables.getItem(event.tableId); - let worksheet = context.workbook.worksheets.getItem(event.worksheetId); - worksheet.load("name"); - - await context.sync(); - - console.log("Handler for table collection onChanged event has been triggered. Data changed address: " + event.address); - console.log("Table Id : " + event.tableId); - console.log("Worksheet Id : " + worksheet.name); - }); - } -Excel.TableChangedEventArgs.tableId: - - |- - async function onChange(event) { - await Excel.run(async (context) => { - let table = context.workbook.tables.getItem(event.tableId); - let worksheet = context.workbook.worksheets.getItem(event.worksheetId); - worksheet.load("name"); + 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; - await context.sync(); + /* + 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. - console.log("Handler for table collection onChanged event has been triggered. Data changed address: " + event.address); - console.log("Table Id : " + event.tableId); - console.log("Worksheet Id : " + worksheet.name); - }); - } -Excel.TableCollection.onChanged: - - |- - await Excel.run(async (context) => { - let tables = context.workbook.tables; - tables.onChanged.add(onChange); + 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 + 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(); - console.log("A handler has been registered for the table collection onChanged event"); }); -Excel.SettingCollection.onSettingsChanged: +Excel.ConditionalFormat.preset: - |- await Excel.run(async (context) => { - const settings = context.workbook.settings; - settings.onSettingsChanged.add(onChangedSetting); + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B2:M5"); + const conditionalFormat = range.conditionalFormats + .add(Excel.ConditionalFormatType.presetCriteria); + conditionalFormat.preset.format.font.color = "white"; + conditionalFormat.preset.rule = { criterion: Excel.ConditionalFormatPresetCriterion.oneStdDevAboveAverage }; await context.sync(); - console.log("Settings changed handler registered."); }); -Excel.SettingCollection.add: +Excel.ConditionalFormat.textComparison: - |- await Excel.run(async (context) => { - const settings = context.workbook.settings; - settings.onSettingsChanged.add(onChangedSetting); + 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(); - console.log("Settings changed handler registered."); }); -Excel.WorksheetCollection.onDeactivated: +Excel.ConditionalFormat.type: - |- await Excel.run(async (context) => { - let sheets = context.workbook.worksheets; - sheets.onDeactivated.add(onDeactivate); + const sheet = context.workbook.worksheets.getItem("Sample"); + const worksheetRange = sheet.getRange(); + worksheetRange.conditionalFormats.load("type"); await context.sync(); - console.log("A handler has been registered for the OnDeactivate event."); - }); -Excel.WorksheetCollection.onActivated: - - |- - 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.WorksheetAddedEventArgs.worksheetId: - - |- - 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 - ); + let cfRangePairs: { cf: Excel.ConditionalFormat, range: Excel.Range }[] = []; + worksheetRange.conditionalFormats.items.forEach(item => { + cfRangePairs.push({ + cf: item, + range: item.getRange().load("address") + }); }); - } -Excel.WorksheetCollection.onAdded: - - |- - 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."); + + if (cfRangePairs.length > 0) { + cfRangePairs.forEach(item => { + console.log(item.cf.type); + }); + } else { + console.log("No conditional formats applied."); + } }); -Excel.Worksheet.onChanged: +Excel.ConditionalFormatCollection.add: - |- await Excel.run(async (context) => { - let sheet = context.workbook.worksheets.getItem("Sample"); - sheet.onChanged.add(onChange); + 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(); - console.log("A handler has been registered for the onChanged event."); }); -Excel.NamedItemCollection.add: +Excel.ConditionalFormatCollection.clearAll: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - const headerRange = sheet.getRange("A1:D1"); - - sheet.names.add("ExpensesHeader", headerRange); - const namedItems = sheet.names.load("name, type"); + const range = sheet.getRange(); + range.conditionalFormats.clearAll(); await context.sync(); + + $(".conditional-formats").hide(); }); -Excel.NamedItem.delete: +Excel.ConditionalFormatCollection.getItemAt: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - const totalName = sheet.names.getItemOrNullObject("TotalAmount"); - totalName.load(); + const worksheetRange = sheet.getRange(); + worksheetRange.conditionalFormats.load("type"); + await context.sync(); - if (totalName.value) { - totalName.delete(); + let cfRangePairs: { cf: Excel.ConditionalFormat, range: Excel.Range }[] = []; + worksheetRange.conditionalFormats.items.forEach(item => { + cfRangePairs.push({ + cf: item, + range: item.getRange().load("address") + }); + }); - // Replace the named item (TotalAmount) with the actual formula for TotalAmount to avoid displaying #NAME in the cell. - sheet.getRange("D11").values = [["=SUM(ExpensesTable[AMOUNT])"]]; + await context.sync(); + + if (cfRangePairs.length > 0) { + cfRangePairs.forEach(item => { + console.log(item.cf.type); + }); } else { - console.log("No named item created for the formula."); + console.log("No conditional formats applied."); } - - await context.sync(); }); -Excel.Application.suspendScreenUpdatingUntilNextSync: +Excel.ConditionalFormatRule.formula: - |- 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) { - 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(); - } - } - } + 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(); - - console.log(`Ending. Adding ${rowCount * columnCount} cells took ${Date.now() - startTime} milliseconds`); }); -Excel.DataPivotHierarchy.showAs: +Excel.ConditionalIconCriterion.formula: - |- 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"); + 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; - farmDataHierarchy.load("showAs"); - wholesaleDataHierarchy.load("showAs"); - await context.sync(); + /* + 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. - // 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; + 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 + 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", + } + ]; - 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: +Excel.ConditionalIconCriterion.operator: - |- 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"); + 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; - farmDataHierarchy.load("showAs"); - wholesaleDataHierarchy.load("showAs"); - await context.sync(); + /* + 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. - // 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"); - farmShowAs.baseItem = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm").items.getItem("A Farms"); - farmDataHierarchy.showAs = farmShowAs; + 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 + 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", + } + ]; - let wholesaleShowAs = wholesaleDataHierarchy.showAs; - wholesaleShowAs.calculation = Excel.ShowAsCalculation.differenceFrom; - wholesaleShowAs.baseField = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm"); - wholesaleShowAs.baseItem = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm").items.getItem("A Farms"); - wholesaleDataHierarchy.showAs = wholesaleShowAs; await context.sync(); }); -Excel.DataPivotHierarchy.name: - |- 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("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" }; - dataHierarchies.items[0].name = "Farm Sales"; - dataHierarchies.items[1].name = "Wholesale"; await context.sync(); }); -Excel.PivotTable.delete: +Excel.ConditionalIconCriterion.type: - |- await Excel.run(async (context) => { - context.workbook.worksheets.getItem("Pivot").pivotTables.getItem("Farm Sales").delete(); + 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 this method does below, 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.PivotTable.columnHierarchies: +Excel.ConditionalPresetCriteriaRule.criterion: - |- 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) { - // ading 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); - } + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B2:M5"); + const conditionalFormat = range.conditionalFormats + .add(Excel.ConditionalFormatType.presetCriteria); + conditionalFormat.preset.format.font.color = "white"; + conditionalFormat.preset.rule = { criterion: Excel.ConditionalFormatPresetCriterion.oneStdDevAboveAverage }; await context.sync(); }); -Excel.PivotTable.dataHierarchies: +Excel.ConditionalTextComparisonRule.text: - |- 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 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.PivotTable.layout: +Excel.CustomConditionalFormat.format: - |- await Excel.run(async (context) => { - const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); - pivotTable.layout.load("layoutType"); - await context.sync(); + 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"; - // 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.PivotTableCollection.add: +Excel.CustomXmlPart.delete: - |- await Excel.run(async (context) => { - const rangeToAnalyze = context.workbook.worksheets.getItem("Data").getRange("A1:E21"); - const rangeToPlacePivot = context.workbook.worksheets.getItem("Pivot").getRange("A2"); - context.workbook.worksheets.getItem("Pivot").pivotTables.add("Farm Sales", rangeToAnalyze, rangeToPlacePivot); - + const settings = context.workbook.settings; + const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); await context.sync(); - }); -Excel.PivotLayout.getDataBodyRange: - - |- - 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(); + if (xmlPartIDSetting.value) { + let customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); + const xmlBlob = customXmlPart.getXml(); + customXmlPart.delete(); + customXmlPart = context.workbook.customXmlParts.getItemOrNullObject(xmlPartIDSetting.value); - // 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.PivotTable.filterHierarchies: - - |- - 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(); + if (customXmlPart.isNullObject) { + $("#display-xml").text(`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); } - }); - } -Excel.Workbook.getSelectedRanges: + + await context.sync(); + } + }); +Excel.CustomXmlPart.getXml: - |- await Excel.run(async (context) => { - - const selectedRanges = context.workbook.getSelectedRanges(); - selectedRanges.format.fill.color = "lightblue"; + // 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(); - }) -Excel.Worksheet.getRanges: - - |- - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const specifiedRanges = sheet.getRanges("D3:D5, G3:G5"); - specifiedRanges.format.fill.color = "pink"; + 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.Range.getSpecialCells: + }); +Excel.CustomXmlPart.id: - |- 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(); - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const usedRange = sheet.getUsedRange(); + await context.sync(); - // Find the ranges with either text or logical (boolean) - // values - const formulaRanges = usedRange.getSpecialCells("Constants", "LogicalText"); - formulaRanges.format.fill.color = "orange"; + const readableXml = addLineBreaksToXML(xmlBlob.value); + $("#display-xml").text(readableXml); - return context.sync(); - }); -Excel.CellValueConditionalFormat.format: - - |- - 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" }; + // Store the XML part's ID in a setting. + const settings = context.workbook.settings; + settings.add("ContosoReviewXmlPartId", customXmlPart.id); await context.sync(); }); -Excel.CellValueConditionalFormat.rule: +Excel.CustomXmlPart.setXml: - |- 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" }; - + 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. + customXmlPart.setXml("JohnHitomi"); + const xmlBlob = customXmlPart.getXml(); + await context.sync(); + + const readableXml = addLineBreaksToXML(xmlBlob.value); + $("#display-xml").text(readableXml); + await context.sync(); + } }); -Excel.ColorScaleConditionalFormat.criteria: +Excel.CustomXmlPartCollection.add: - |- 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; + // 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(); - }); -Excel.ConditionalCellValueRule.formula1: - - |- - 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" }; + + 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.ConditionalCellValueRule.operator: +Excel.CustomXmlPartCollection.getByNamespace: - |- 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" }; + $("#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.ConditionalFormat.colorScale: +Excel.CustomXmlPartCollection.getItem: - |- 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; + 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. + customXmlPart.setXml("JohnHitomi"); + const xmlBlob = customXmlPart.getXml(); + await context.sync(); - await context.sync(); + const readableXml = addLineBreaksToXML(xmlBlob.value); + $("#display-xml").text(readableXml); + await context.sync(); + } }); -Excel.ConditionalFormat.preset: +Excel.CustomXmlPartScopedCollection.getCount: - |- 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.presetCriteria); - conditionalFormat.preset.format.font.color = "white"; - conditionalFormat.preset.rule = { criterion: Excel.ConditionalFormatPresetCriterion.oneStdDevAboveAverage }; + $("#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(); - }); -Excel.ConditionalFormat.dataBar: - - |- - 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; + + 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.ConditionalFormat.iconSet: +Excel.CustomXmlPartScopedCollection.getItemOrNullObject: - |- 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; + const settings = context.workbook.settings; + const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); + await context.sync(); - /* - 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. + if (xmlPartIDSetting.value) { + let customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); + const xmlBlob = customXmlPart.getXml(); + customXmlPart.delete(); + customXmlPart = context.workbook.customXmlParts.getItemOrNullObject(xmlPartIDSetting.value); - 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 - 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(); + + if (customXmlPart.isNullObject) { + $("#display-xml").text(`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); } - ]; - await context.sync(); + await context.sync(); + } }); -Excel.ConditionalFormat.textComparison: +Excel.CustomXmlPartScopedCollection.getOnlyItem: - |- 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" }; + $("#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(); - }); -Excel.ConditionalFormat.cellValue: - - |- - 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" }; + + 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.ConditionalFormat.custom: +Excel.DataBarConditionalFormat.barDirection: - |- 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"; + const conditionalFormat = range.conditionalFormats + .add(Excel.ConditionalFormatType.dataBar); + conditionalFormat.dataBar.barDirection = Excel.ConditionalDataBarDirection.leftToRight; await context.sync(); }); -Excel.ConditionalFormat.type: +Excel.DataPivotHierarchy.name: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const worksheetRange = sheet.getRange(); - worksheetRange.conditionalFormats.load("type"); - + const dataHierarchies = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales").dataHierarchies + dataHierarchies.load("no-properties-needed"); 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") - }); - }); - + dataHierarchies.items[0].name = "Farm Sales"; + dataHierarchies.items[1].name = "Wholesale"; await context.sync(); - - if (cfRangePairs.length > 0) { - cfRangePairs.forEach(item => { - console.log(item.cf.type); - }); - } else { - console.log("No conditional formats applied."); - } }); -Excel.ConditionalFormat.getRange: +Excel.DataPivotHierarchy.showAs: - |- 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") - }); - }); + 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(); - if (cfRangePairs.length > 0) { - cfRangePairs.forEach(item => { - console.log(item.cf.type); - }); - } else { - console.log("No conditional formats applied."); - } - }); -Excel.ConditionalFormatCollection.add: - - |- - 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; + // 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.ConditionalFormatCollection.getItemAt: +Excel.DataValidation.errorAlert: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const worksheetRange = sheet.getRange(); - worksheetRange.conditionalFormats.load("type"); + const sheet = context.workbook.worksheets.getItem("Decision"); + const commentsRange = + sheet.tables.getItem("NameOptionsTable").columns.getItem("Comments").getDataBodyRange(); - await context.sync(); + // When you are developing, it is a good practice to + // clear the dataValidation object with each run of your code. + commentsRange.dataValidation.clear(); - let cfRangePairs: { cf: Excel.ConditionalFormat, range: Excel.Range }[] = []; - worksheetRange.conditionalFormats.items.forEach(item => { - cfRangePairs.push({ - cf: item, - range: item.getRange().load("address") - }); - }); + // 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(); - - if (cfRangePairs.length > 0) { - cfRangePairs.forEach(item => { - console.log(item.cf.type); - }); - } else { - console.log("No conditional formats applied."); - } }); -Excel.ConditionalFormatCollection.clearAll: +Excel.DataValidationRule.list: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const range = sheet.getRange(); - range.conditionalFormats.clearAll(); + const sheet = context.workbook.worksheets.getItem("Decision"); + const nameRange = + sheet.tables.getItem("NameOptionsTable").columns.getItem("Baby Name").getDataBodyRange(); - await context.sync(); + // When you are developing, it is a good practice to + // clear the dataValidation object with each run of your code. + nameRange.dataValidation.clear(); - $(".conditional-formats").hide(); + const nameSourceRange = context.workbook.worksheets.getItem("Names").getRange("A1:A3"); + + let approvedListRule = { + list: { + inCellDropDown: true, + source: '=Names!$A$1:$A$3' + } + }; + nameRange.dataValidation.rule = approvedListRule; + + await context.sync(); }); -Excel.ConditionalFormatRule.formula: +Excel.DataValidationRule.wholeNumber: - |- 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"; + 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.ConditionalIconCriterion.type: +Excel.IconSetConditionalFormat.criteria: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1388,7 +1262,7 @@ Excel.ConditionalIconCriterion.type: await context.sync(); }); -Excel.ConditionalIconCriterion.operator: +Excel.IconSetConditionalFormat.style: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1428,180 +1302,242 @@ Excel.ConditionalIconCriterion.operator: await context.sync(); }); +Excel.Image.format: - |- 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" }; + const sheet = context.workbook.worksheets.getItem("Shapes"); + const image = sheet.shapes.getItem("Image").image; + image.load("format"); + await context.sync(); + console.log("The image's format is: " + image.format); await context.sync(); }); -Excel.ConditionalIconCriterion.formula: +Excel.Line.connectBeginShape: + - |- + await Excel.run(async (context) => { + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const line = shapes.getItem("StraightLine").line; + line.connectBeginShape(shapes.getItem("Left"), 2); + line.connectEndShape(shapes.getItem("Right"), 0); + await context.sync(); + }); +Excel.Line.connectEndShape: + - |- + await Excel.run(async (context) => { + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const line = shapes.getItem("StraightLine").line; + line.connectBeginShape(shapes.getItem("Left"), 2); + line.connectEndShape(shapes.getItem("Right"), 0); + await context.sync(); + }); +Excel.Line.disconnectBeginShape: + - |- + await Excel.run(async (context) => { + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const line = shapes.getItem("StraightLine").line; + line.disconnectBeginShape(); + line.disconnectEndShape(); + await context.sync(); + }); +Excel.Line.disconnectEndShape: + - |- + await Excel.run(async (context) => { + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const line = shapes.getItem("StraightLine").line; + line.disconnectBeginShape(); + line.disconnectEndShape(); + await context.sync(); + }); +Excel.NamedItem.delete: - |- 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; + const totalName = sheet.names.getItemOrNullObject("TotalAmount"); + totalName.load(); + await context.sync(); - /* - 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. + if (totalName.value) { + totalName.delete(); - 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 - 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", - } - ]; + // Replace the named item (TotalAmount) with the actual formula for TotalAmount to avoid displaying #NAME in the cell. + sheet.getRange("D11").values = [["=SUM(ExpensesTable[AMOUNT])"]]; + } else { + console.log("No named item created for the formula."); + } await context.sync(); }); -Excel.ConditionalPresetCriteriaRule.criterion: +Excel.NamedItem.formula: - |- 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.presetCriteria); - conditionalFormat.preset.format.font.color = "white"; - conditionalFormat.preset.rule = { criterion: Excel.ConditionalFormatPresetCriterion.oneStdDevAboveAverage }; + // Get the named item + const myNamedItem = sheet.names.getItemOrNullObject("MyRange"); + myNamedItem.load("name, formula"); await context.sync(); + + if (myNamedItem.isNullObject) { + console.log(`There is no named item. Create it with "Add named item for a range" first.`); + } else { + // Update named item to point to the second range + myNamedItem.formula = "=Sample!$B$10:$D$14"; + sheet.getRange("B10:D14").select(); + await context.sync(); + + console.log(`Just updated the named item "${myNamedItem.name}" -- it's now located here: ${myNamedItem.formula}`); + } }); -Excel.ConditionalTextComparisonRule.text: +Excel.NamedItemCollection.add: - |- 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" }; + const headerRange = sheet.getRange("A1:D1"); + sheet.names.add("ExpensesHeader", headerRange); + const namedItems = sheet.names.load("name, type"); + + await context.sync(); + }); +Excel.PageBreakCollection.add: + - |- + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.horizontalPageBreaks.add("A21:E21"); + await context.sync(); + }); +Excel.PageLayout.centerHorizontally: + - |- + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.pageLayout.centerHorizontally = true; + farmSheet.pageLayout.centerVertically = true; + await context.sync(); + }); +Excel.PageLayout.centerVertically: + - |- + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.pageLayout.centerHorizontally = true; + farmSheet.pageLayout.centerVertically = true; + await context.sync(); + }); +Excel.PageLayout.orientation: + - |- + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.pageLayout.orientation = Excel.PageOrientation.landscape; + await context.sync(); + }); +Excel.PageLayout.setPrintArea: + - |- + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.pageLayout.setPrintArea("A1:D41"); + await context.sync(); + }); +Excel.PageLayout.setPrintTitleRows: + - |- + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.pageLayout.setPrintTitleRows("$1:$1"); + await context.sync(); + }); +Excel.PivotLayout.getDataBodyRange: + - |- + 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.CustomConditionalFormat.format: +Excel.PivotTable.columnHierarchies: - |- 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"; + 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) { + // ading 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.DataBarConditionalFormat.barDirection: +Excel.PivotTable.dataHierarchies: - |- 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; + 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.IconSetConditionalFormat.style: +Excel.PivotTable.delete: - |- 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; + context.workbook.worksheets.getItem("Pivot").pivotTables.getItem("Farm Sales").delete(); - /* - 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. + await context.sync(); + }); +Excel.PivotTable.filterHierarchies: + - |- + 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(); - 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 - 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", + // 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: + - |- + await Excel.run(async (context) => { + 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.IconSetConditionalFormat.criteria: +Excel.PivotTableCollection.add: - |- 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 this method does below, 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", - } - ]; + const rangeToAnalyze = context.workbook.worksheets.getItem("Data").getRange("A1:E21"); + const rangeToPlacePivot = context.workbook.worksheets.getItem("Pivot").getRange("A2"); + context.workbook.worksheets.getItem("Pivot").pivotTables.add("Farm Sales", rangeToAnalyze, rangeToPlacePivot); await context.sync(); }); @@ -1627,83 +1563,219 @@ Excel.PresetCriteriaConditionalFormat.rule: await context.sync(); }); -Excel.TextConditionalFormat.format: +Excel.Range.copyFrom: - |- 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" }; + sheet.getRange("F2").values = [["Copied Formula"]]; + sheet.getRange("F2").format.autofitColumns(); + // 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.TextConditionalFormat.rule: +Excel.Range.find: - |- 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" }; + 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: completeMatch, + matchCase: matchCase, + searchDirection: searchDirection + }); + + foundRange.load("address"); await context.sync(); + + + console.log(foundRange.address); }); -Excel.Range.copyFrom: +Excel.Range.findOrNullObject: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - sheet.getRange("F2").values = [["Copied Formula"]]; - sheet.getRange("F2").format.autofitColumns(); + const table = sheet.tables.getItem("ExpensesTable"); + const searchRange = table.getRange(); + const foundRange = searchRange.findOrNullObject($("#searchText").text(), { + completeMatch: completeMatch, + matchCase: matchCase, + searchDirection: searchDirection + }); + + foundRange.load("address"); + await context.sync(); + + if (foundRange.isNullObject) { + console.log("Text not found"); + } else { + console.log(foundRange.address); + } + }); +Excel.Range.getIntersectionOrNullObject: + - |- + 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" + ); + } - // 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: +Excel.Range.getSpecialCells: + - |- + 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.getUsedRange: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - const table = sheet.tables.getItem("ExpensesTable"); - const searchRange = table.getRange(); + const salesTable = sheet.tables.getItem("SalesTable"); + const dataRange = salesTable.getDataBodyRange(); - // NOTE: If no match is found, an ItemNotFound error - // is thrown when Range.find is evaluated. - const foundRange = searchRange.find($("#searchText").text(), { - completeMatch: completeMatch, - matchCase: matchCase, - searchDirection: searchDirection - }); - - foundRange.load("address"); + // 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" + ); + } - console.log(foundRange.address); + await context.sync(); }); -Excel.Range.findOrNullObject: +Excel.Range.getUsedRangeOrNullObject: - |- 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: completeMatch, - matchCase: matchCase, - searchDirection: searchDirection - }); - - foundRange.load("address"); + 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 (foundRange.isNullObject) { - console.log("Text not found"); + 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 { - console.log(foundRange.address); + 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.hyperlink: - |- @@ -1731,59 +1803,80 @@ Excel.Range.hyperlink: await context.sync(); }); -Excel.RangeHyperlink.address: +Excel.Range.removeDuplicates: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Orders"); - - let productsRange = sheet.getRange("A3:A5"); - productsRange.load("values"); + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B2:D11"); + const deleteResult = range.removeDuplicates([0],true); + deleteResult.load(); 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]; + console.log(deleteResult.removed + " entries with duplicate names removed."); + console.log(deleteResult.uniqueRemaining + " entries with unique names remain in the range."); + }); +Excel.Range.set: + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); - let hyperlink = { - textToDisplay: cellText, - screenTip: "Search Bing for '" + cellText + "'", - address: "https://www.bing.com/?q=" + cellText + const range = sheet.getRange("B2:E2"); + range.set({ + format: { + fill: { + color: "#4472C4" + }, + font: { + name: "Verdana", + color: "white" + } } - cellRange.hyperlink = hyperlink; - } - + }) + range.format.autofitColumns(); await context.sync(); }); -Excel.RangeHyperlink.screenTip: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Orders"); + const sheet = context.workbook.worksheets.getItem("Sample"); - let productsRange = sheet.getRange("A3:A5"); - productsRange.load("values"); + 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.style: + - |- + await Excel.run(async (context) => { + let worksheet = context.workbook.worksheets.getItem("Sample"); + let range = worksheet.getRange("A1:E1"); - // 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]; + // Apply built-in style. + // Styles are in the Home tab ribbon. + range.style = Excel.BuiltInStyle.neutral; + range.format.horizontalAlignment = "Right"; - let hyperlink = { - textToDisplay: cellText, - screenTip: "Search Bing for '" + cellText + "'", - address: "https://www.bing.com/?q=" + cellText - } - cellRange.hyperlink = hyperlink; - } + await context.sync(); + }); +Excel.RangeFormat.textOrientation: + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B2:E2"); + + // Set textOrientation to either an integer between -90 and 90 + // or to 180 for vertically-oriented text. + range.format.textOrientation = 90; await context.sync(); }); -Excel.RangeHyperlink.textToDisplay: +Excel.RangeHyperlink.address: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Orders"); @@ -1824,141 +1917,68 @@ Excel.RangeHyperlink.documentReference: 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: "Navigate to the '" + cellText + "' worksheet", - documentReference: cellText + "!A1" - } - cellRange.hyperlink = hyperlink; - } - - await context.sync(); - }); -Excel.Range.getIntersectionOrNullObject: - - |- - 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" - ); + + let hyperlink = { + textToDisplay: cellText, + screenTip: "Navigate to the '" + cellText + "' worksheet", + documentReference: cellText + "!A1" + } + cellRange.hyperlink = hyperlink; } await context.sync(); }); -Excel.Range.getUsedRange: +Excel.RangeHyperlink.screenTip: - |- 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"); + const sheet = context.workbook.worksheets.getItem("Orders"); - // 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); + let productsRange = sheet.getRange("A3:A5"); + productsRange.load("values"); - // 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" - ); - } + // 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 (europeanContestRange.isNullObject) { - // See the declaration of this method for how to - // test this code path. - reportMissingData("European"); - } else { - createContinentChart( - sheet, - "European", - europeanContestRange, - "A25", - "F40" - ); + let hyperlink = { + textToDisplay: cellText, + screenTip: "Search Bing for '" + cellText + "'", + address: "https://www.bing.com/?q=" + cellText + } + cellRange.hyperlink = hyperlink; } await context.sync(); }); -Excel.Range.removeDuplicates: +Excel.RangeHyperlink.textToDisplay: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const range = sheet.getRange("B2:D11"); + const sheet = context.workbook.worksheets.getItem("Orders"); + + let productsRange = sheet.getRange("A3:A5"); + productsRange.load("values"); - 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."); + // 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.RemoveDuplicatesResult.uniqueRemaining: - |- @@ -1973,88 +1993,51 @@ Excel.RemoveDuplicatesResult.uniqueRemaining: console.log(deleteResult.removed + " entries with duplicate names removed."); console.log(deleteResult.uniqueRemaining + " entries with unique names remain in the range."); }); -Excel.RangeFormat.textOrientation: +Excel.Runtime.enableEvents: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const range = sheet.getRange("B2:E2"); + context.runtime.load("enableEvents"); + await context.sync(); - // Set textOrientation to either an integer between -90 and 90 - // or to 180 for vertically-oriented text. - range.format.textOrientation = 90; + // check if events are enabled and toggle accordingly + const eventBoolean = !context.runtime.enableEvents + context.runtime.enableEvents = eventBoolean; + if (eventBoolean) { + console.log("Events are currently on."); + } else { + console.log("Events are currently off."); + } await context.sync(); }); -Excel.Range.getUsedRangeOrNullObject: +Excel.Setting.delete: - |- 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 */ - ); + const settings = context.workbook.settings; + let needsReview = settings.getItem("NeedsReview"); + needsReview.delete(); + needsReview = settings.getItemOrNullObject("NeedsReview"); - //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."); + if (needsReview.isNullObject) { + console.log("The setting has been deleted"); } 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"; + console.log("The setting was not deleted"); } await context.sync(); }); -Excel.Range.set: - - |- - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - const range = sheet.getRange("B2:E2"); - range.set({ - format: { - fill: { - color: "#4472C4" - }, - font: { - name: "Verdana", - color: "white" - } - } - }) - range.format.autofitColumns(); - await context.sync(); - }); +Excel.SettingCollection.add: - |- 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(); + const settings = context.workbook.settings; + settings.onSettingsChanged.add(onChangedSetting); - // 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(); + console.log("Settings changed handler registered."); }); -Excel.Setting.delete: +Excel.SettingCollection.getItemOrNullObject: - |- await Excel.run(async (context) => { const settings = context.workbook.settings; @@ -2072,21 +2055,99 @@ Excel.Setting.delete: await context.sync(); }); -Excel.SettingCollection.getItemOrNullObject: +Excel.SettingCollection.onSettingsChanged: + - |- + 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: + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Shapes"); + const shapes = sheet.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(); + }); +Excel.Shape.fill: + - |- + 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: + - |- + 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); + 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: + - |- + 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.incrementLeft: + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Shapes"); + const shape = sheet.shapes.getItem("Square") + shape.incrementLeft(-25); + await context.sync(); + }); +Excel.Shape.incrementRotation: + - |- + 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: + - |- + 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: - |- await Excel.run(async (context) => { - const settings = context.workbook.settings; - let needsReview = settings.getItem("NeedsReview"); - needsReview.delete(); - needsReview = settings.getItemOrNullObject("NeedsReview"); - - await context.sync(); + 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; - if (needsReview.isNullObject) { - console.log("The setting has been deleted"); - } else { - console.log("The setting was not deleted"); - } + line.endArrowheadLength = Excel.ArrowheadLength.long; + line.endArrowheadWidth = Excel.ArrowheadWidth.wide; + line.endArrowheadStyle = Excel.ArrowheadStyle.triangle; await context.sync(); }); @@ -2103,6 +2164,32 @@ Excel.Shape.rotation: shape.fill.clear(); await context.sync(); }); +Excel.Shape.scaleHeight: + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Shapes"); + const shape = sheet.shapes.getItem("Octagon") + shape.scaleHeight(1.25, Excel.ShapeScaleType.currentSize); + shape.scaleWidth(1.25, Excel.ShapeScaleType.currentSize); + await context.sync(); + }); +Excel.Shape.scaleWidth: + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Shapes"); + const shape = sheet.shapes.getItem("Octagon") + shape.scaleHeight(1.25, Excel.ShapeScaleType.currentSize); + shape.scaleWidth(1.25, Excel.ShapeScaleType.currentSize); + await context.sync(); + }); +Excel.Shape.setZOrder: + - |- + 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.ShapeCollection.addGeometricShape: - |- await Excel.run(async (context) => { @@ -2114,29 +2201,18 @@ Excel.ShapeCollection.addGeometricShape: shape.width = 200; await context.sync(); }); -Excel.Shape.fill: - - |- - 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.delete: +Excel.ShapeCollection.addGroup: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); - const shapes = sheet.shapes; + const square = sheet.shapes.getItem("Square"); + const pentagon = sheet.shapes.getItem("Pentagon"); + const octagon = sheet.shapes.getItem("Octagon"); - // load all the shapes in the collection without loading their properties - shapes.load("items/$none"); - await context.sync(); + const shapeGroup = sheet.shapes.addGroup([square, pentagon, octagon]); + shapeGroup.name = "Group"; + console.log("Shapes grouped"); - shapes.items.forEach((shape) => shape.delete()); await context.sync(); }); Excel.ShapeCollection.addImage: @@ -2157,91 +2233,75 @@ Excel.ShapeCollection.addImage: // Read in the image file as a data URL. reader.readAsDataURL(myFile.files[0]); -Excel.Shape.incrementRotation: +Excel.ShapeCollection.addLine: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.getItem("Image"); - shape.incrementRotation(180); + 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.Image.format: +Excel.ShapeCollection.addTextBox: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Shapes"); - const image = sheet.shapes.getItem("Image").image; - image.load("format"); - await context.sync(); - - console.log("The image's format is: " + image.format); + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const textbox = shapes.addTextBox("A box with text"); + textbox.left = 100; + textbox.top = 100; + textbox.height = 20; + textbox.width = 175; + textbox.name = "Textbox"; await context.sync(); }); -Excel.Shape.saveAsPicture: +Excel.ShapeGroup.ungroup: - |- 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); - 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.incrementLeft: - - |- - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.getItem("Square") - shape.incrementLeft(-25); - await context.sync(); - }); -Excel.Shape.incrementTop: - - |- - 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.scaleHeight: - - |- - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.getItem("Octagon") - shape.scaleHeight(1.25, Excel.ShapeScaleType.currentSize); - shape.scaleWidth(1.25, Excel.ShapeScaleType.currentSize); + const shapeGroup = sheet.shapes.getItem("Group").group; + shapeGroup.ungroup(); + console.log("Shapes ungrouped"); + await context.sync(); }); -Excel.Shape.setZOrder: +Excel.ShowAsRule.baseItem: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.getItem("Octagon") - shape.setZOrder(Excel.ShapeZOrder.sendBackward); + 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(); - }); -Excel.Shape.scaleWidth: - - |- - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.getItem("Octagon") - shape.scaleHeight(1.25, Excel.ShapeScaleType.currentSize); - shape.scaleWidth(1.25, Excel.ShapeScaleType.currentSize); + + // 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"); + farmShowAs.baseItem = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm").items.getItem("A Farms"); + farmDataHierarchy.showAs = farmShowAs; + + let wholesaleShowAs = wholesaleDataHierarchy.showAs; + wholesaleShowAs.calculation = Excel.ShowAsCalculation.differenceFrom; + wholesaleShowAs.baseField = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm"); + wholesaleShowAs.baseItem = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm").items.getItem("A Farms"); + wholesaleDataHierarchy.showAs = wholesaleShowAs; await context.sync(); }); -Excel.Range.style: +Excel.Style.delete: - |- await Excel.run(async (context) => { - let worksheet = context.workbook.worksheets.getItem("Sample"); - let range = worksheet.getRange("A1:E1"); + let style = context.workbook.styles.getItem("Diagonal Orientation Style"); - // Apply built-in style. + // Delete the diagonal orientation style from the style collection. // Styles are in the Home tab ribbon. - range.style = Excel.BuiltInStyle.neutral; - range.format.horizontalAlignment = "Right"; + style.delete(); await context.sync(); + + console.log("Successfully deleted the diagonal orientation style from the Home tab ribbon."); }); Excel.Style.font: - |- @@ -2259,18 +2319,18 @@ Excel.Style.font: console.log("Size: " + style.font.size); console.log("Fill color: " + style.fill.color); }); -Excel.Style.delete: +Excel.Style.horizontalAlignment: - |- await Excel.run(async (context) => { - let style = context.workbook.styles.getItem("Diagonal Orientation Style"); + let worksheet = context.workbook.worksheets.getItem("Sample"); + let range = worksheet.getRange("A1:E1"); - // Delete the diagonal orientation style from the style collection. + // Apply built-in style. // Styles are in the Home tab ribbon. - style.delete(); + range.style = Excel.BuiltInStyle.neutral; + range.format.horizontalAlignment = "Right"; await context.sync(); - - console.log("Successfully deleted the diagonal orientation style from the Home tab ribbon."); }); Excel.Style.load: - |- @@ -2289,20 +2349,7 @@ Excel.Style.load: console.log("Shrink to fit: " + style.shrinkToFit); console.log("Style locked: " + style.locked); }); -Excel.Style.horizontalAlignment: - - |- - 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.StyleCollection.getItem: +Excel.StyleCollection.add: - |- await Excel.run(async (context) => { let styles = context.workbook.styles; @@ -2324,7 +2371,7 @@ Excel.StyleCollection.getItem: console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); -Excel.StyleCollection.add: +Excel.StyleCollection.getItem: - |- await Excel.run(async (context) => { let styles = context.workbook.styles; @@ -2346,102 +2393,106 @@ Excel.StyleCollection.add: console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); -Excel.NamedItem.formula: +Excel.Table.onChanged: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + let table = context.workbook.tables.getItemAt(0); + table.onChanged.add(onChange); - // Get the named item - const myNamedItem = sheet.names.getItemOrNullObject("MyRange"); - myNamedItem.load("name, formula"); await context.sync(); + console.log("A handler has been registered for the onChanged event"); + }); +Excel.Table.onSelectionChanged: + - |- + await Excel.run(async (context) => { + let table = context.workbook.tables.getItemAt(0); + table.onSelectionChanged.add(onSelectionChange); + + await context.sync(); + console.log("A handler has been registered for table onSelectionChanged event"); + }); +Excel.TableChangedEventArgs.tableId: + - |- + async function onChange(event) { + await Excel.run(async (context) => { + let table = context.workbook.tables.getItem(event.tableId); + let worksheet = context.workbook.worksheets.getItem(event.worksheetId); + worksheet.load("name"); - if (myNamedItem.isNullObject) { - console.log(`There is no named item. Create it with "Add named item for a range" first.`); - } else { - // Update named item to point to the second range - myNamedItem.formula = "=Sample!$B$10:$D$14"; - sheet.getRange("B10:D14").select(); await context.sync(); - console.log(`Just updated the named item "${myNamedItem.name}" -- it's now located here: ${myNamedItem.formula}`); - } - }); -Excel.WorkbookProtection.protect: + console.log("Handler for table collection onChanged event has been triggered. Data changed address: " + event.address); + console.log("Table Id : " + event.tableId); + console.log("Worksheet Id : " + worksheet.name); + }); + } +Excel.TableChangedEventArgs.worksheetId: - |- - await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.load("protection/protected"); + async function onChange(event) { + await Excel.run(async (context) => { + let table = context.workbook.tables.getItem(event.tableId); + let worksheet = context.workbook.worksheets.getItem(event.worksheetId); + worksheet.load("name"); - await context.sync(); + await context.sync(); - if (!workbook.protection.protected) { - workbook.protection.protect(); - } - }); + console.log("Handler for table collection onChanged event has been triggered. Data changed address: " + event.address); + console.log("Table Id : " + event.tableId); + console.log("Worksheet Id : " + worksheet.name); + }); + } +Excel.TableCollection.onChanged: - |- - let password = await passwordHandler(); - passwordHelper(password); await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.load("protection/protected"); + let tables = context.workbook.tables; + tables.onChanged.add(onChange); await context.sync(); - - if (!workbook.protection.protected) { - workbook.protection.protect(password); - } - }); -Excel.WorkbookProtection.unprotect: - - |- - await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.protection.unprotect(); + console.log("A handler has been registered for the table collection onChanged event"); }); +Excel.TableSelectionChangedEventArgs.address: - |- - let password = await passwordHandler(); - passwordHelper(password); - await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.protection.unprotect(password); - }); -Excel.WorksheetProtection.protect: + 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); + }); + } +Excel.TextConditionalFormat.format: - |- await Excel.run(async (context) => { - let activeSheet = context.workbook.worksheets.getActiveWorksheet(); - activeSheet.load("protection/protected"); + 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(); - - if (!activeSheet.protection.protected) { - activeSheet.protection.protect(); - } }); +Excel.TextConditionalFormat.rule: - |- - let password = await passwordHandler(); - passwordHelper(password); await Excel.run(async (context) => { - let activeSheet = context.workbook.worksheets.getActiveWorksheet(); - activeSheet.load("protection/protected"); + 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(); - - if (!activeSheet.protection.protected) { - activeSheet.protection.protect(null, password); - } }); -Excel.WorksheetProtection.unprotect: +Excel.TextFrame.deleteText: - |- await Excel.run(async (context) => { - let activeSheet = context.workbook.worksheets.getActiveWorksheet(); - activeSheet.protection.unprotect(); + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const textbox = shapes.getItem("Textbox"); + textbox.textFrame.deleteText(); + await context.sync(); }); +Excel.Workbook.close: - |- - let password = await passwordHandler(); - passwordHelper(password); await Excel.run(async (context) => { - let activeSheet = context.workbook.worksheets.getActiveWorksheet(); - activeSheet.protection.unprotect(password); + context.workbook.close(Excel.CloseBehavior.save); }); Excel.Workbook.getActiveCell: - |- @@ -2455,174 +2506,140 @@ Excel.Workbook.getActiveCell: console.log("The active cell is " + activeCell.address); }); -Excel.WorksheetCollection.addFromBase64: - - |- - 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 = ((event.target).result).indexOf("base64,"); - const workbookContents = ((event.target).result).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.Workbook.save: - - |- - await Excel.run(async (context) => { - context.workbook.save(Excel.SaveBehavior.save); - }); -Excel.Workbook.close: - - |- - await Excel.run(async (context) => { - context.workbook.close(Excel.CloseBehavior.save); - }); -Excel.Worksheet.copy: +Excel.Workbook.getSelectedRanges: - |- 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 selectedRanges = context.workbook.getSelectedRanges(); + selectedRanges.format.fill.color = "lightblue"; await context.sync(); - - console.log("'" + sampleSheet.name + "' was copied to '" + copiedSheet.name + "'") - }); -Excel.Worksheet.findAllOrNullObject: + }) +Excel.Workbook.properties: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const foundRanges = sheet.findAllOrNullObject("Complete", { - completeMatch: true, - matchCase: false - }); - - await context.sync(); + 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"; - if (foundRanges.isNullObject) { - console.log("No complete projects"); - } else { - foundRanges.format.fill.color = "green" - } - }); -Excel.WorksheetFreezePanes.freezeAt: - - |- - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + let docProperties = context.workbook.properties; - // Freeze the specified range in top-and-left-most pane of the worksheet. - sheet.freezePanes.freezeAt(sheet.getRange("H2:K5")); + // 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.WorksheetFreezePanes.freezeColumns: - - |- - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - // Freeze the first two columns in the worksheet. - sheet.freezePanes.freezeColumns(2); - await context.sync(); + console.log("Set the following document properties: title, subject, keywords, comments, category, manager, company."); }); -Excel.WorksheetFreezePanes.freezeRows: +Excel.Workbook.save: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - // Freeze the top two rows in the worksheet. - sheet.freezePanes.freezeRows(2); - - await context.sync(); + context.workbook.save(Excel.SaveBehavior.save); }); -Excel.WorksheetFreezePanes.getLocationOrNullObject: +Excel.WorkbookProtection.protect: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const frozenRange = sheet.freezePanes.getLocationOrNullObject(); - frozenRange.load("address"); + let workbook = context.workbook; + workbook.load("protection/protected"); await context.sync(); - if (frozenRange.isNullObject) { - console.log(`The worksheet does not contain a frozen pane.`); - } else { - console.log(`The address of the frozen range (cells that are frozen in the top-and-left-most pane) is "${frozenRange.address}"`); + if (!workbook.protection.protected) { + workbook.protection.protect(); } }); -Excel.WorksheetFreezePanes.unfreeze: - |- + let password = await passwordHandler(); + passwordHelper(password); await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - sheet.freezePanes.unfreeze(); + let workbook = context.workbook; + workbook.load("protection/protected"); await context.sync(); - }); -Excel.Worksheet.showGridlines: - - |- - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - sheet.showGridlines = true; - await context.sync(); - }); -Excel.PageBreakCollection.add: - - |- - await Excel.run(async (context) => { - const farmSheet = context.workbook.worksheets.getItem("Print"); - farmSheet.horizontalPageBreaks.add("A21:E21"); - await context.sync(); + if (!workbook.protection.protected) { + workbook.protection.protect(password); + } }); -Excel.PageLayout.centerHorizontally: +Excel.WorkbookProtection.unprotect: - |- await Excel.run(async (context) => { - const farmSheet = context.workbook.worksheets.getItem("Print"); - farmSheet.pageLayout.centerHorizontally = true; - farmSheet.pageLayout.centerVertically = true; - await context.sync(); + let workbook = context.workbook; + workbook.protection.unprotect(); }); -Excel.PageLayout.centerVertically: - |- + let password = await passwordHandler(); + passwordHelper(password); await Excel.run(async (context) => { - const farmSheet = context.workbook.worksheets.getItem("Print"); - farmSheet.pageLayout.centerHorizontally = true; - farmSheet.pageLayout.centerVertically = true; - await context.sync(); + let workbook = context.workbook; + workbook.protection.unprotect(password); }); -Excel.PageLayout.setPrintTitleRows: +Excel.Worksheet.copy: - |- await Excel.run(async (context) => { - const farmSheet = context.workbook.worksheets.getItem("Print"); - farmSheet.pageLayout.setPrintTitleRows("$1:$1"); + + 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.PageLayout.setPrintArea: +Excel.Worksheet.findAllOrNullObject: - |- await Excel.run(async (context) => { - const farmSheet = context.workbook.worksheets.getItem("Print"); - farmSheet.pageLayout.setPrintArea("A1:D41"); + 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.PageLayout.orientation: +Excel.Worksheet.getNext: - |- await Excel.run(async (context) => { - const farmSheet = context.workbook.worksheets.getItem("Print"); - farmSheet.pageLayout.orientation = Excel.PageOrientation.landscape; + 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: @@ -2647,32 +2664,74 @@ Excel.Worksheet.getPrevious: await context.sync(); }); -Excel.Worksheet.getNext: +Excel.Worksheet.getRanges: - |- 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"); + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const specifiedRanges = sheet.getRanges("D3:D5, G3:G5"); + specifiedRanges.format.fill.color = "pink"; - firstSheet.load("name"); - lastSheet.load("name"); - firstTaxRateRange.load("text"); - lastTaxRateRange.load("text"); + await context.sync(); + }) +Excel.Worksheet.onChanged: + - |- + await Excel.run(async (context) => { + let sheet = context.workbook.worksheets.getItem("Sample"); + sheet.onChanged.add(onChange); await context.sync(); + console.log("A handler has been registered for the onChanged event."); + }); +Excel.Worksheet.showGridlines: + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + sheet.showGridlines = true; - 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.tabColor: + - |- + await Excel.run(async (context) => { + const activeSheet = context.workbook.worksheets.getActiveWorksheet(); + activeSheet.tabColor = "#FF0000"; await context.sync(); }); +Excel.WorksheetAddedEventArgs.worksheetId: + - |- + 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.addFromBase64: + - |- + 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 = ((event.target).result).indexOf("base64,"); + const workbookContents = ((event.target).result).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: - |- await Excel.run(async (context) => { @@ -2725,128 +2784,123 @@ Excel.WorksheetCollection.getLast: await context.sync(); }); -Excel.Worksheet.tabColor: +Excel.WorksheetCollection.onActivated: - |- await Excel.run(async (context) => { - const activeSheet = context.workbook.worksheets.getActiveWorksheet(); - activeSheet.tabColor = "#FF0000"; + let sheets = context.workbook.worksheets; + sheets.onActivated.add(onActivate); await context.sync(); + console.log("A handler has been registered for the OnActivate event."); }); -Excel.ShapeCollection.addTextBox: +Excel.WorksheetCollection.onAdded: - |- await Excel.run(async (context) => { - const shapes = context.workbook.worksheets.getItem("Shapes").shapes; - const textbox = shapes.addTextBox("A box with text"); - textbox.left = 100; - textbox.top = 100; - textbox.height = 20; - textbox.width = 175; - textbox.name = "Textbox"; + let sheet = context.workbook.worksheets; + sheet.onAdded.add(onWorksheetAdd); + await context.sync(); + console.log("A handler has been registered for the OnAdded event."); }); -Excel.TextFrame.deleteText: +Excel.WorksheetCollection.onDeactivated: - |- await Excel.run(async (context) => { - const shapes = context.workbook.worksheets.getItem("Shapes").shapes; - const textbox = shapes.getItem("Textbox"); - textbox.textFrame.deleteText(); + let sheets = context.workbook.worksheets; + sheets.onDeactivated.add(onDeactivate); + await context.sync(); + console.log("A handler has been registered for the OnDeactivate event."); }); -Excel.ShapeCollection.addLine: +Excel.WorksheetFreezePanes.freezeAt: - |- 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"; + const sheet = context.workbook.worksheets.getItem("Sample"); + + // Freeze the specified range in top-and-left-most pane of the worksheet. + sheet.freezePanes.freezeAt(sheet.getRange("H2:K5")); + await context.sync(); }); -Excel.Shape.line: +Excel.WorksheetFreezePanes.freezeColumns: - |- 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; + const sheet = context.workbook.worksheets.getItem("Sample"); - line.endArrowheadLength = Excel.ArrowheadLength.long; - line.endArrowheadWidth = Excel.ArrowheadWidth.wide; - line.endArrowheadStyle = Excel.ArrowheadStyle.triangle; + // Freeze the first two columns in the worksheet. + sheet.freezePanes.freezeColumns(2); await context.sync(); }); -Excel.Line.connectBeginShape: +Excel.WorksheetFreezePanes.freezeRows: - |- await Excel.run(async (context) => { - const shapes = context.workbook.worksheets.getItem("Shapes").shapes; - const line = shapes.getItem("StraightLine").line; - line.connectBeginShape(shapes.getItem("Left"), 2); - line.connectEndShape(shapes.getItem("Right"), 0); + const sheet = context.workbook.worksheets.getItem("Sample"); + + // Freeze the top two rows in the worksheet. + sheet.freezePanes.freezeRows(2); + await context.sync(); }); -Excel.Line.connectEndShape: +Excel.WorksheetFreezePanes.getLocationOrNullObject: - |- await Excel.run(async (context) => { - const shapes = context.workbook.worksheets.getItem("Shapes").shapes; - const line = shapes.getItem("StraightLine").line; - line.connectBeginShape(shapes.getItem("Left"), 2); - line.connectEndShape(shapes.getItem("Right"), 0); + const sheet = context.workbook.worksheets.getItem("Sample"); + const frozenRange = sheet.freezePanes.getLocationOrNullObject(); + frozenRange.load("address"); + await context.sync(); + + if (frozenRange.isNullObject) { + console.log(`The worksheet does not contain a frozen pane.`); + } else { + console.log(`The address of the frozen range (cells that are frozen in the top-and-left-most pane) is "${frozenRange.address}"`); + } }); -Excel.Line.disconnectBeginShape: +Excel.WorksheetFreezePanes.unfreeze: - |- await Excel.run(async (context) => { - const shapes = context.workbook.worksheets.getItem("Shapes").shapes; - const line = shapes.getItem("StraightLine").line; - line.disconnectBeginShape(); - line.disconnectEndShape(); + const sheet = context.workbook.worksheets.getItem("Sample"); + sheet.freezePanes.unfreeze(); + await context.sync(); }); -Excel.Line.disconnectEndShape: +Excel.WorksheetProtection.protect: - |- await Excel.run(async (context) => { - const shapes = context.workbook.worksheets.getItem("Shapes").shapes; - const line = shapes.getItem("StraightLine").line; - line.disconnectBeginShape(); - line.disconnectEndShape(); + let activeSheet = context.workbook.worksheets.getActiveWorksheet(); + activeSheet.load("protection/protected"); + await context.sync(); + + if (!activeSheet.protection.protected) { + activeSheet.protection.protect(); + } }); -Excel.ShapeGroup.ungroup: - |- + let password = await passwordHandler(); + passwordHelper(password); 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"); + let activeSheet = context.workbook.worksheets.getActiveWorksheet(); + activeSheet.load("protection/protected"); await context.sync(); + + if (!activeSheet.protection.protected) { + activeSheet.protection.protect(null, password); + } }); -Excel.Shape.group: +Excel.WorksheetProtection.unprotect: - |- 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(); + let activeSheet = context.workbook.worksheets.getActiveWorksheet(); + activeSheet.protection.unprotect(); }); -Excel.ShapeCollection.addGroup: - |- + let password = await passwordHandler(); + passwordHelper(password); 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]); - shapeGroup.name = "Group"; - console.log("Shapes grouped"); - - await context.sync(); + let activeSheet = context.workbook.worksheets.getActiveWorksheet(); + activeSheet.protection.unprotect(password); }); Word.InlinePicture.getBase64ImageSrc: - |- diff --git a/view/excel.json b/view/excel.json index 3ff45a8ce..1e78fb191 100644 --- a/view/excel.json +++ b/view/excel.json @@ -68,6 +68,7 @@ "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-visibility.yaml", + "excel-comment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/comment.yaml", "excel-shape-create-and-delete": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/shape-create-and-delete.yaml", "excel-range-copyfrom": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-copyfrom.yaml", "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-areas.yaml", From 390d44818b87bf2c4f115abe047235c366f4a8e4 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Tue, 19 Mar 2019 11:19:04 -0700 Subject: [PATCH 142/660] Switching beta types from the CDN to DT (#275) --- config/build.ts | 7 ++++--- samples/excel/85-preview-apis/comment.yaml | 2 +- .../excel/85-preview-apis/performance-optimization.yaml | 2 +- samples/excel/85-preview-apis/range-areas.yaml | 2 +- samples/excel/85-preview-apis/range-copyfrom.yaml | 2 +- samples/excel/85-preview-apis/range-find.yaml | 2 +- samples/excel/85-preview-apis/range-remove-duplicates.yaml | 2 +- samples/excel/85-preview-apis/shape-create-and-delete.yaml | 2 +- samples/excel/85-preview-apis/shape-groups.yaml | 2 +- samples/excel/85-preview-apis/shape-images.yaml | 2 +- samples/excel/85-preview-apis/shape-lines.yaml | 2 +- samples/excel/85-preview-apis/shape-move-and-order.yaml | 2 +- samples/excel/85-preview-apis/shape-textboxes.yaml | 2 +- samples/excel/85-preview-apis/tetrominos.yaml | 2 +- .../workbook-insert-external-worksheets.yaml | 2 +- samples/excel/85-preview-apis/workbook-save-and-close.yaml | 2 +- samples/excel/85-preview-apis/worksheet-find-all.yaml | 2 +- samples/excel/85-preview-apis/worksheet-page-layout.yaml | 2 +- 18 files changed, 21 insertions(+), 20 deletions(-) diff --git a/config/build.ts b/config/build.ts index 8f915d1ac..80ae86711 100644 --- a/config/build.ts +++ b/config/build.ts @@ -37,7 +37,7 @@ const defaultApiSets = { 'WordApi': 1.1 } - /* any other hosts is allowed to have no API sets specified*/ + // any other host is allowed to have no API sets specified }; @@ -224,7 +224,7 @@ async function processSnippets(processedSnippets: Dictionary reference.trim()) - .filter(reference => reference.match(/.*((@types\/office-js)|(office\.d\.ts))$/gi)); + .filter(reference => reference.match(/.*((@types\/office-js(-preview)?)|(office\.d\.ts))$/gi)); /* Note: regex matches: - @types/office-js + - @types/office-js-preview - https://unpkg.com/etc/office.d.ts But not: - @types/office-jsfake diff --git a/samples/excel/85-preview-apis/comment.yaml b/samples/excel/85-preview-apis/comment.yaml index ddb0b69d6..fe4be9873 100644 --- a/samples/excel/85-preview-apis/comment.yaml +++ b/samples/excel/85-preview-apis/comment.yaml @@ -158,7 +158,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/performance-optimization.yaml b/samples/excel/85-preview-apis/performance-optimization.yaml index 779d0c478..2e89e6afe 100644 --- a/samples/excel/85-preview-apis/performance-optimization.yaml +++ b/samples/excel/85-preview-apis/performance-optimization.yaml @@ -113,7 +113,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-areas.yaml b/samples/excel/85-preview-apis/range-areas.yaml index 1b089351f..7caf19b9e 100644 --- a/samples/excel/85-preview-apis/range-areas.yaml +++ b/samples/excel/85-preview-apis/range-areas.yaml @@ -173,7 +173,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-copyfrom.yaml b/samples/excel/85-preview-apis/range-copyfrom.yaml index 35e23e95d..90133a8c9 100644 --- a/samples/excel/85-preview-apis/range-copyfrom.yaml +++ b/samples/excel/85-preview-apis/range-copyfrom.yaml @@ -195,7 +195,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-find.yaml b/samples/excel/85-preview-apis/range-find.yaml index 236ba6523..a39d6619c 100644 --- a/samples/excel/85-preview-apis/range-find.yaml +++ b/samples/excel/85-preview-apis/range-find.yaml @@ -160,7 +160,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-remove-duplicates.yaml b/samples/excel/85-preview-apis/range-remove-duplicates.yaml index ec3f25045..dcafff51d 100644 --- a/samples/excel/85-preview-apis/range-remove-duplicates.yaml +++ b/samples/excel/85-preview-apis/range-remove-duplicates.yaml @@ -120,7 +120,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/shape-create-and-delete.yaml b/samples/excel/85-preview-apis/shape-create-and-delete.yaml index 2112eacb1..f143e9f68 100644 --- a/samples/excel/85-preview-apis/shape-create-and-delete.yaml +++ b/samples/excel/85-preview-apis/shape-create-and-delete.yaml @@ -127,7 +127,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/shape-groups.yaml b/samples/excel/85-preview-apis/shape-groups.yaml index 51a665903..da8c9d0d1 100644 --- a/samples/excel/85-preview-apis/shape-groups.yaml +++ b/samples/excel/85-preview-apis/shape-groups.yaml @@ -146,7 +146,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/shape-images.yaml b/samples/excel/85-preview-apis/shape-images.yaml index f24d5827d..f5247832e 100644 --- a/samples/excel/85-preview-apis/shape-images.yaml +++ b/samples/excel/85-preview-apis/shape-images.yaml @@ -128,7 +128,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/shape-lines.yaml b/samples/excel/85-preview-apis/shape-lines.yaml index 154d069fd..6720aacb3 100644 --- a/samples/excel/85-preview-apis/shape-lines.yaml +++ b/samples/excel/85-preview-apis/shape-lines.yaml @@ -218,7 +218,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/shape-move-and-order.yaml b/samples/excel/85-preview-apis/shape-move-and-order.yaml index 87c7448e7..4cea3af51 100644 --- a/samples/excel/85-preview-apis/shape-move-and-order.yaml +++ b/samples/excel/85-preview-apis/shape-move-and-order.yaml @@ -159,7 +159,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/shape-textboxes.yaml b/samples/excel/85-preview-apis/shape-textboxes.yaml index f6035c51c..795f82731 100644 --- a/samples/excel/85-preview-apis/shape-textboxes.yaml +++ b/samples/excel/85-preview-apis/shape-textboxes.yaml @@ -134,7 +134,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/tetrominos.yaml b/samples/excel/85-preview-apis/tetrominos.yaml index 031dbe011..d0e8bd47e 100644 --- a/samples/excel/85-preview-apis/tetrominos.yaml +++ b/samples/excel/85-preview-apis/tetrominos.yaml @@ -786,7 +786,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/workbook-insert-external-worksheets.yaml b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml index 5ee54781a..8def4bd45 100644 --- a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml +++ b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml @@ -72,7 +72,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/workbook-save-and-close.yaml b/samples/excel/85-preview-apis/workbook-save-and-close.yaml index 8b13117f2..563f5b271 100644 --- a/samples/excel/85-preview-apis/workbook-save-and-close.yaml +++ b/samples/excel/85-preview-apis/workbook-save-and-close.yaml @@ -83,7 +83,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/worksheet-find-all.yaml b/samples/excel/85-preview-apis/worksheet-find-all.yaml index a45720a3e..f83810a23 100644 --- a/samples/excel/85-preview-apis/worksheet-find-all.yaml +++ b/samples/excel/85-preview-apis/worksheet-find-all.yaml @@ -141,7 +141,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/worksheet-page-layout.yaml b/samples/excel/85-preview-apis/worksheet-page-layout.yaml index 98d95c32b..a12368b5f 100644 --- a/samples/excel/85-preview-apis/worksheet-page-layout.yaml +++ b/samples/excel/85-preview-apis/worksheet-page-layout.yaml @@ -183,7 +183,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 From 4b090e2e92cdb756c6a7039356d43435ea536e3f Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 21 Mar 2019 11:20:47 -0700 Subject: [PATCH 143/660] Showcasing a better scenario for scaling shapes (#276) --- .../85-preview-apis/shape-move-and-order.yaml | 2 +- snippet-extractor-metadata/excel.xlsx | Bin 19427 -> 19373 bytes snippet-extractor-output/snippets.yaml | 6 +++--- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/samples/excel/85-preview-apis/shape-move-and-order.yaml b/samples/excel/85-preview-apis/shape-move-and-order.yaml index 4cea3af51..b8797a087 100644 --- a/samples/excel/85-preview-apis/shape-move-and-order.yaml +++ b/samples/excel/85-preview-apis/shape-move-and-order.yaml @@ -46,8 +46,8 @@ script: 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.scaleWidth(1.25, Excel.ShapeScaleType.currentSize); await context.sync(); }); } diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 0b063177a7f5e4a5bdea774399e4c5c53906eca7..1c7aeb09474e0c620a05dc65ac994091836356ff 100644 GIT binary patch delta 9672 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 QuSkHK6=>j}r2molFXOv^1^@s6 delta 9701 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
    y#l~w7vwTOLqD#QM2?GFy0AER!>BrqH=KlF z;0#{p&1R7fZpD5r(%e|E9~wln8V5o3NF{`nKJp!lc52KX^9Hbc|x5H{zm7m+c? z&E7bH18xi#g!dYyGDD?V3?UU21A%4;+!Kd8k)X_|@H13LiBeuS8?)VGyu2@R zT?^!jcIQ`qp2v4n*HCgkXT&LJIG+!Y)cnIXpD4w=E$m%TZ5~dhUX2On7b!k}EAk3D zbmZdOcRem22H0f$L`JEYOT&$0j57#k(b{0#L}Trw^E8Rbj>7KI7D@we7JVJh*V>t%lDo8XC=i!pgBU1M<{-prjLIf77;`}gZjDI^i!gLdXNja z2zNC1?O1!LE6>QZvQ@fpxQ(uXCG-BZ0W=RN;M;#8Y6M}?REpg%LHa6 z1jUZ`BvE_<@q^19sDxJqZQGE~WxlEE7q{;br4$z+QEfk}ZOR4jE6Es{0+~us`37fs za88e?vo45v^6YeX%XE?Xm)3Y@RAy$cI99IW=`d!JB46%cLQ9WkwJaIf^7xWUFSJyh0vKhlns>aS`*DUkCybZ*e~cV5N4gBBq6WrQ0Uq(v3IXS z?A^{&jPIl6(KW@)5sHBUSc!$8x00C|Vt_{gl- zoOoC9g(moR^~li|6K}4kE54v>E@rs3`;y4%7W2TAwN#0y{Ri{>o2rAY*eDY6%4yuS`V007# zH&)ZE^cq}sqk@@V!Z+(LY-R^7#+-$aOl;;i!6o7n>7ZB(s~o=(i6DyVa2dHc^SLJL zo^Psw)SnfP5o>P@=%C)HI^UeRvuTkzO7$Fv(bM??vWAubH{JT;MEVbH@>ZGJsMoTI z2S4kTRPIyNh^Nr+VXadAk1g37aY-piwmwYjD2c(@5KGb~4eZeoCLWCWFGJZS4_J~R z_6~>|suW(Z(ks2vd&F|gKlVP5rJ+`Ji3dh)O^@^#U~|})M10@F0BK)(qSUUY!L^)E zau0@#uzBTB$7iwaP#yxElGyX_$?FYHbz@OnFTjc#El+lkk9XwXq_QB@+ZT#guen*^ zeA@P>OG788a{q~?`G7OpzXY*~!fp>+X#*3Pex`W##mxs-)ysZ~esY-!)_}yF#yUeLvm+8>VDs^eXy% z1*gfcpoFI=yPkPZaT_oHZ5ZK{HAMTLhNmbcZA1#_vJw~Ne;P;-5XhcW*Z&N4D6_Hx z;w%)R{EG7bC%FGX=|HQL=_vp21D+QFf#g4%&#N5hj { const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.getItem("Octagon") + shape.lockAspectRatio = true; shape.scaleHeight(1.25, Excel.ShapeScaleType.currentSize); - shape.scaleWidth(1.25, Excel.ShapeScaleType.currentSize); await context.sync(); }); -Excel.Shape.scaleWidth: +Excel.Shape.lockAspectRatio: - |- 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.scaleWidth(1.25, Excel.ShapeScaleType.currentSize); await context.sync(); }); Excel.Shape.setZOrder: From e34d16edc239db2f51473697cdd9843391716ed8 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 21 Mar 2019 13:54:02 -0700 Subject: [PATCH 144/660] Removing inaccurate log statement (#277) --- samples/excel/85-preview-apis/shape-groups.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/samples/excel/85-preview-apis/shape-groups.yaml b/samples/excel/85-preview-apis/shape-groups.yaml index da8c9d0d1..a8089c962 100644 --- a/samples/excel/85-preview-apis/shape-groups.yaml +++ b/samples/excel/85-preview-apis/shape-groups.yaml @@ -36,8 +36,6 @@ script: shapeGroup.incrementLeft(50); shapeGroup.incrementTop(50); - console.log("Shapes ungrouped"); - await context.sync(); }); } From 560b8a221e2ecd7c510df88397d95edbe487f9e8 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 1 Apr 2019 09:22:44 -0700 Subject: [PATCH 145/660] [Word] (typos) Clean up repo readme and some snippets (#281) * [Word] (typos) Clean up repo readme and some snippets * Updates based on feedback * run npm start --- README.md | 70 +++++++++++-------- .../insert-and-change-content-controls.yaml | 8 +-- .../15-images/insert-and-get-pictures.yaml | 2 +- samples/word/20-lists/insert-list.yaml | 16 ++--- .../get-paragraph-on-insertion-point.yaml | 4 +- .../25-paragraph/insert-formatted-text.yaml | 4 +- .../insert-in-different-locations.yaml | 12 ++-- .../insert-line-and-page-breaks.yaml | 4 +- .../25-paragraph/paragraph-properties.yaml | 10 +-- samples/word/25-paragraph/search.yaml | 5 +- samples/word/35-ranges/scroll-to-range.yaml | 6 +- samples/word/40-tables/table-cell-access.yaml | 2 +- samples/word/90-scenarios/doc-assembly.yaml | 4 +- .../90-scenarios/multiple-property-set.yaml | 2 +- snippet-extractor-output/snippets.yaml | 45 ++++++------ 15 files changed, 104 insertions(+), 90 deletions(-) diff --git a/README.md b/README.md index 434339eab..a3e8564a8 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,17 @@ [![Build Status](https://travis-ci.com/OfficeDev/office-js-snippets.svg?token=paK2s5RGiCpVHK6bYoFs&branch=master)](https://travis-ci.org/OfficeDev/office-js-snippets) # Office JS Snippets + A collection of code snippets built with [Script Lab](//github.com/OfficeDev/script-lab) ![Script Lab import gallery screenshot](.github/images/addin-samples-gallery-screenshot.jpg) - ## To contribute: -> Note: For all command line interface (CLI) commands mentioned in these instructions, you can use either Git Bash or a Node Command Prompt. +> **Note**: For all command line interface (CLI) commands mentioned in these instructions, you can use either Git Bash or a Node Command Prompt. ### 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`.) @@ -23,63 +24,74 @@ 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 are 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** section below. -2. Choose the Share icon, and then choose **Copy to Clipboard**. +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: -``` -api_set: - ExcelApi: 1.5 -``` + + ```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 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/). 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 project folder to which your snippet should be added. All snippets must be inside the `samples` folder. The structure of the subfolders is: - - The base folders such as `Excel`, `Word` etc. are all the various broad-level categories. + + - The base folders such as `Excel`, `Word`, etc. are all the various broad-level categories. - Inside of each base folder, there are group folders for the group in which a snippet belongs. - - Inside of each group folder, there are `.yaml` which represent a snippet. + - Inside of each group folder, there are `.yaml` files that each represents a snippet. - > Note: If your snippet doesn't fit well with any existing group folder, you may want to 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. The numbers determine the sequence of the groups in Script Lab, so use a number that is between the numbers of the groups between which you want the new folder to appear. + > **Note**: If your snippet doesn't fit well with any existing group folder, you may want to 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. The numbers determine the sequence of the groups in Script Lab, so use a number that is 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 `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** below. +12. 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) below. - > Note: The `npm 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. 13. Re-run `npm 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"`. -``` -git add -A -git commit -m "{commit message}" -``` + + ``` + git add -A + git commit -m "{commit message}" + ``` + 16. Push the snippet to your fork by running: -``` -git push --set-upstream origin {name_of_your_new_branch} -``` + + ``` + 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 +19. On the **Open a pull request** page, verify that: + - the base fork is `OfficeDev/office-js-snippets` - the base branch is `master` - 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. -> Note: Since your pull request passed locally, it should pass the online test too. Once it 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 reviewer(s) 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 reviewer(s) are satisfied, your pull request will be merged to the `master` 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**: 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. + + > **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. #### 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`. +- 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: @@ -113,7 +125,7 @@ A few style rules to observe: * Use standard TypeScript indentation. * For each button, define a corresponding `async` function that is to be executed 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. +* 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, I wouldn't do the popup notification except for one or two samples. It's a lot of HTML & JS code, and it's also not strictly Fabric-y (there is a more "correct" way of doing this with components). * Strings should be in double-quotes. @@ -124,7 +136,7 @@ A few style rules to observe: * The scripts for building/validating the snippets are under the `config` folder -- in particular, under `build.ts`. There is also a `deploy.ts` for copying the built files to their final location.) -> **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! - +> **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! +
    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. 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 d84c0adef..923933d4d 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 @@ -14,16 +14,16 @@ script: async function insertContentControls() { - // Traverses each paragraph of the document and wraps a content control on each with either a even or odd tags + // 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, we'll just wrap each paragraph with a content control + 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 we tag "even" + // For even, tag "even". if (i % 2 === 0) { contentControl.tag = "even"; } @@ -42,7 +42,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. + // 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("color,title,appearance"); diff --git a/samples/word/15-images/insert-and-get-pictures.yaml b/samples/word/15-images/insert-and-get-pictures.yaml index 5cb8c84cf..5330bad2a 100644 --- a/samples/word/15-images/insert-and-get-pictures.yaml +++ b/samples/word/15-images/insert-and-get-pictures.yaml @@ -24,7 +24,7 @@ script: } /** - * Get the first image in the document + * Get the first image in the document. */ async function getImage() { await Word.run(async (context) => { diff --git a/samples/word/20-lists/insert-list.yaml b/samples/word/20-lists/insert-list.yaml index 5726894b5..b793ee761 100644 --- a/samples/word/20-lists/insert-list.yaml +++ b/samples/word/20-lists/insert-list.yaml @@ -12,23 +12,23 @@ 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 stating with the second paragraph. await Word.run(async (context) => { let paragraphs = context.document.body.paragraphs; - paragraphs.load("$none"); //We need no properties. + paragraphs.load("$none"); // No properties needed. await context.sync(); - var list = paragraphs.items[1].startNewList(); //Indicates new list to be started in the second paragraph. - list.load("$none"); //We need no properties. + var list = paragraphs.items[1].startNewList(); // Indicates new list to be started in the second paragraph. + 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/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. - //To add paragraphs outside the list use before/after: + paragraph.listItem.level = 4; // Sets up list level for the lsit item. + // To add paragraphs outside the list use before/after: list.insertParagraph('New paragraph goes after (not part of the list)', 'After'); await context.sync(); @@ -37,7 +37,7 @@ script: async function setup() { await Word.run(async (context) => { - // Let's insert a couple of paragraphs to illustrate the point.. + // Let's insert a couple of paragraphs to illustrate the point. context.document.body.clear(); context.document.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("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"); 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 be68279e7..443642ef2 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 contanied on it. + // 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"); @@ -49,7 +49,7 @@ script: async function setup() { await Word.run(async (context) => { - // Let's insert a couple of paragraphs to illustrate the point.. + // Let's insert a couple of paragraphs to illustrate the point. 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 cover page, header, and sidebar. Click Insert and then choose the elements you want from the different galleries.", "Replace"); diff --git a/samples/word/25-paragraph/insert-formatted-text.yaml b/samples/word/25-paragraph/insert-formatted-text.yaml index 9fc17ff1d..020f2e067 100644 --- a/samples/word/25-paragraph/insert-formatted-text.yaml +++ b/samples/word/25-paragraph/insert-formatted-text.yaml @@ -57,7 +57,7 @@ script: "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"; + // 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(); @@ -86,7 +86,7 @@ template: Insert formatted text

    +

    + +
    +

    Try it out

    + Get the word/term count. +

    + +

    +
    + 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 + + @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/word.xlsx b/snippet-extractor-metadata/word.xlsx index 090374ac58789172b31c29067be09de48cf14a19..b36bb5348149109a2ee10d03c79e357715748587 100644 GIT binary patch delta 4283 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 delta 4218 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 Zh4~240LEj0GU`A>jHZk*2qF1b@IO1S?%MzW diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 3cd9b510b..83884ff25 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -2989,6 +2989,51 @@ Word.Body.search: await context.sync(); }); + - |- + await Word.run(async (context) => { + let 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.insertParagraph: - |- await Word.run(async (context) => { @@ -3345,3 +3390,49 @@ Word.Paragraph.set: await context.sync(); }); +Word.Body.paragraphs: + - |- + await Word.run(async (context) => { + let 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); + }); + }); diff --git a/view/word.json b/view/word.json index 1fb1bf2f3..a4501639c 100644 --- a/view/word.json +++ b/view/word.json @@ -12,6 +12,7 @@ "word-paragraph-insert-header-and-footer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/25-paragraph/insert-header-and-footer.yaml", "word-paragraph-paragraph-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/25-paragraph/paragraph-properties.yaml", "word-paragraph-search": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/25-paragraph/search.yaml", + "word-paragraph-get-word-count": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/25-paragraph/get-word-count.yaml", "word-properties-get-built-in-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/30-properties/get-built-in-properties.yaml", "word-properties-read-write-custom-document-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/30-properties/read-write-custom-document-properties.yaml", "word-ranges-scroll-to-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/35-ranges/scroll-to-range.yaml", From bb4c8c76f37b7ae521bd9a96e8a5f605596fd251 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 2 Apr 2019 08:54:46 -0700 Subject: [PATCH 147/660] [Word] Remove unnecessary context.sync (#282) * Remove unnecessary context.sync * Re-add author --- .../insert-and-change-content-controls.yaml | 145 ++++----- .../15-images/insert-and-get-pictures.yaml | 73 +++-- samples/word/20-lists/insert-list.yaml | 80 ++--- .../get-paragraph-on-insertion-point.yaml | 103 +++--- .../insert-in-different-locations.yaml | 132 ++++---- .../insert-line-and-page-breaks.yaml | 57 ++-- .../25-paragraph/paragraph-properties.yaml | 84 ++--- samples/word/25-paragraph/search.yaml | 89 +++--- samples/word/35-ranges/scroll-to-range.yaml | 61 ++-- .../split-words-of-first-paragraph.yaml | 64 ++-- .../90-scenarios/multiple-property-set.yaml | 10 +- snippet-extractor-output/snippets.yaml | 297 +++++++++--------- 12 files changed, 619 insertions(+), 576 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 923933d4d..0c0bd30ab 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,94 +7,95 @@ host: WORD api_set: WordApi: 1.1 script: - content: |- + content: | $("#insert-controls").click(() => tryCatch(insertContentControls)); $("#change-controls").click(() => tryCatch(modifyContentControls)); $("#setup").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(); - }); + // 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) => { - // 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("color,title,appearance"); - oddContentControls.load("color,title,appearance"); - - 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(); - }); + // 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("color,title,appearance"); + oddContentControls.load("color,title,appearance"); + + 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(); + }); } 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"); - - await context.sync(); - }); + 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); - } + 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/samples/word/15-images/insert-and-get-pictures.yaml b/samples/word/15-images/insert-and-get-pictures.yaml index 5330bad2a..4cf665d02 100644 --- a/samples/word/15-images/insert-and-get-pictures.yaml +++ b/samples/word/15-images/insert-and-get-pictures.yaml @@ -16,56 +16,65 @@ script: * Inserts an image anchored to the last paragraph. */ async function insertImage() { - await Word.run(async (context) => { - context.document.body.paragraphs.getLast().insertParagraph("", "After").insertInlinePictureFromBase64(base64Image, "End"); - - await context.sync(); - }); + await Word.run(async (context) => { + context.document.body.paragraphs + .getLast() + .insertParagraph("", "After") + .insertInlinePictureFromBase64(base64Image, "End"); + + await context.sync(); + }); } /** * Get the first image in the document. */ async function getImage() { - 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}`); - //To get the image encoded as base64: - const base64 = firstPicture.getBase64ImageSrc(); - - await context.sync(); - console.log(base64.value); - }); + 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); + }); } /** * Setup by adding a dummy paragraph. */ async function setup() { - await Word.run(async (context) => { - 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. ", "End"); - 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 elements you want from the different Online galleries.", "End"); - - await context.sync(); - }); + 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. ", + "End" + ); + 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 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); - } + 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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"; + "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"; language: typescript template: content: |- @@ -117,4 +126,4 @@ libraries: | @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.3.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/word/20-lists/insert-list.yaml b/samples/word/20-lists/insert-list.yaml index b793ee761..cb8888e9d 100644 --- a/samples/word/20-lists/insert-list.yaml +++ b/samples/word/20-lists/insert-list.yaml @@ -7,56 +7,66 @@ host: WORD api_set: WordApi: 1.3 script: - content: |- + content: | $("#insert-controls").click(() => tryCatch(insertList)); $("#setup").click(() => tryCatch(setup)); 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; - paragraphs.load("$none"); // No properties needed. + // This example starts a new list stating with the second paragraph. + await Word.run(async (context) => { + let paragraphs = context.document.body.paragraphs; + paragraphs.load("$none"); // No properties needed. - await context.sync(); + await context.sync(); - var list = paragraphs.items[1].startNewList(); // Indicates new list to be started in the second paragraph. - list.load("$none"); // No properties needed. + var list = paragraphs.items[1].startNewList(); // Indicates new list to be started in the second paragraph. + list.load("$none"); // No properties needed. - await context.sync(); + await context.sync(); - // 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. - // To add paragraphs outside the list use before/after: - list.insertParagraph('New paragraph goes after (not part of the list)', 'After'); + // 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. + // To add paragraphs outside the list use before/after: + list.insertParagraph("New paragraph goes after (not part of the list)", "After"); - await context.sync(); - }); + await context.sync(); + }); } async function setup() { - await Word.run(async (context) => { - // Let's insert a couple of paragraphs to illustrate the point. - context.document.body.clear(); - context.document.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("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("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"); - - await context.sync(); - }); + await Word.run(async (context) => { + context.document.body.clear(); + context.document.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( + "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( + "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); - } + 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: @@ -106,4 +116,4 @@ libraries: |- @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.3.1 + @types/jquery@3.3.1 \ No newline at end of file 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 443642ef2..4acd8c5a9 100644 --- a/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml +++ b/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -7,71 +7,74 @@ host: WORD api_set: WordApi: 1.1 script: - content: |- + content: | $("#get-paragraph").click(() => tryCatch(getParagraph)); $("#get-sentences").click(() => tryCatch(getSentences)); $("#setup").click(() => tryCatch(setup)); - 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(); - paragraph.load("text"); - - await context.sync(); - console.log(paragraph.text); - }); + 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); + }); } async function getSentences() { - 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("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); - } - }); + 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("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); + } + }); } async function setup() { - await Word.run(async (context) => { - // Let's insert a couple of paragraphs to illustrate the point. - 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 cover page, header, and sidebar. Click Insert and then choose the elements you want from the different galleries.", "Replace"); - - await context.sync(); - - context.document.body.paragraphs.getFirst().alignment = "Left"; - context.document.body.paragraphs.getLast().alignment = "Left"; - - await context.sync(); - }) + 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 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); - } + 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/samples/word/25-paragraph/insert-in-different-locations.yaml b/samples/word/25-paragraph/insert-in-different-locations.yaml index b5bef18e2..2caa98e0b 100644 --- a/samples/word/25-paragraph/insert-in-different-locations.yaml +++ b/samples/word/25-paragraph/insert-in-different-locations.yaml @@ -7,7 +7,7 @@ host: WORD api_set: WordApi: 1.2 script: - content: |- + content: | $("#setup").click(() => tryCatch(setup)); $("#before").click(() => tryCatch(before)); $("#start").click(() => tryCatch(start)); @@ -16,84 +16,92 @@ script: $("#replace").click(() => tryCatch(replace)); 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"); - range.font.highlightColor = "yellow"; - - await context.sync(); - }); + await Word.run(async (context) => { + // Let's insert before the first paragraph. + let range = context.document.body.paragraphs.getFirst().insertParagraph("This is Before", "Before"); + range.font.highlightColor = "yellow"; + + await context.sync(); + }); } async function start() { - 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 - .getFirst().getNext().insertText("This is Start", "Start"); - range.font.highlightColor = "blue"; - range.font.color = "white"; - - await context.sync(); - }); + 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 + .getFirst() + .getNext() + .insertText("This is Start", "Start"); + range.font.highlightColor = "blue"; + range.font.color = "white"; + + await context.sync(); + }); } async function end() { - await Word.run(async (context) => { - // Insert text at the end of a paragraph. - let range = context.document.body.paragraphs - .getFirst().getNext().insertText(" This is End", "End"); - range.font.highlightColor = "green"; - range.font.color = "white"; - - await context.sync(); - }); + await Word.run(async (context) => { + // Insert text at the end of a paragraph. + let range = context.document.body.paragraphs + .getFirst() + .getNext() + .insertText(" This is End", "End"); + range.font.highlightColor = "green"; + range.font.color = "white"; + + await context.sync(); + }); } async function after() { - await Word.run(async (context) => { - // Insert a paragraph after an existing one. - let range = context.document.body.paragraphs - .getFirst().getNext().insertParagraph("This is After", "After"); - range.font.highlightColor = "red"; - range.font.color = "white"; - - await context.sync(); - }); + await Word.run(async (context) => { + // Insert a paragraph after an existing one. + let range = context.document.body.paragraphs + .getFirst() + .getNext() + .insertParagraph("This is After", "After"); + range.font.highlightColor = "red"; + range.font.color = "white"; + + await context.sync(); + }); } 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"); - range.font.highlightColor = "black"; - range.font.color = "white"; - - await context.sync(); - }); + await Word.run(async (context) => { + // Replace the last paragraph. + let range = context.document.body.paragraphs.getLast().insertText("Just replaced the last paragraph!", "Replace"); + range.font.highlightColor = "black"; + range.font.color = "white"; + + await context.sync(); + }); } async function setup() { - await Word.run(async (context) => { - // Insert a couple of paragraphs. - 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 cover page, header, and sidebar. Click Insert and then choose the elements you want from the different galleries.", "Replace"); - - await context.sync(); - }); + 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 cover page, header, and sidebar. Click Insert and then choose the elements you want from the different 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); - } + 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: @@ -155,4 +163,4 @@ libraries: |- @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.3.1 + @types/jquery@3.3.1 \ No newline at end of file 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 d270ae0f4..2e15bd6c0 100644 --- a/samples/word/25-paragraph/insert-line-and-page-breaks.yaml +++ b/samples/word/25-paragraph/insert-line-and-page-breaks.yaml @@ -7,49 +7,54 @@ host: WORD api_set: WordApi: 1.2 script: - content: |- + content: | $("#setup").click(() => tryCatch(setup)); $("#line").click(() => tryCatch(insertLineBreak)); $("#page").click(() => tryCatch(insertPageBreak)); async function insertLineBreak() { - Word.run(async (context) => { - context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.line, "After"); + Word.run(async (context) => { + context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.line, "After"); - await context.sync(); - console.log("success"); - }); + await context.sync(); + console.log("success"); + }); } async function insertPageBreak() { - await Word.run(async (context) => { - context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.page, "After"); + await Word.run(async (context) => { + context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.page, "After"); - await context.sync(); - console.log("success"); - }); + await context.sync(); + console.log("success"); + }); } async function setup() { - await Word.run(async (context) => { - // Let's insert a couple of paragraphs to illustrate the point. - 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 elements you want from the different Online galleries.", "Replace"); + 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 elements you want from the different Online galleries.", + "Replace" + ); - await context.sync(); - console.log("success"); - }); + console.log("success"); + }); } 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/samples/word/25-paragraph/paragraph-properties.yaml b/samples/word/25-paragraph/paragraph-properties.yaml index 118b2ad6e..c8e2e56b3 100644 --- a/samples/word/25-paragraph/paragraph-properties.yaml +++ b/samples/word/25-paragraph/paragraph-properties.yaml @@ -7,7 +7,7 @@ host: WORD api_set: WordApi: 1.2 script: - content: |- + content: | $("#indent").click(() => tryCatch(indent)); $("#spacing").click(() => tryCatch(spacing)); $("#space-after").click(() => tryCatch(spaceAfter)); @@ -15,67 +15,67 @@ script: $("#setup").click(() => tryCatch(setup)); async function indent() { - await Word.run(async (context) => { - // Indents the first paragraph. - context.document.body.paragraphs. - getFirst().leftIndent = 75; //units = points + await Word.run(async (context) => { + // Indents the first paragraph. + context.document.body.paragraphs.getFirst().leftIndent = 75; //units = points - return context.sync(); - }); + return context.sync(); + }); } async function spacing() { - await Word.run(async (context) => { - // Adjusts line spacing. - context.document.body.paragraphs - .getFirst().lineSpacing = 20; + await Word.run(async (context) => { + // Adjusts line spacing. + context.document.body.paragraphs.getFirst().lineSpacing = 20; - await context.sync(); - }); + await context.sync(); + }); } async function spaceAfter() { - await Word.run(async (context) => { - // Adjust space between paragraphs. - context.document.body.paragraphs - .getFirst().spaceAfter = 20; + await Word.run(async (context) => { + // Adjust space between paragraphs. + context.document.body.paragraphs.getFirst().spaceAfter = 20; - await context.sync(); - }); + await context.sync(); + }); } async function align() { - await Word.run(async (context) => { - // Centers last paragraph alignment. - context.document.body.paragraphs - .getLast().alignment = "Centered"; + await Word.run(async (context) => { + // Centers last paragraph alignment. + context.document.body.paragraphs.getLast().alignment = "Centered"; - await context.sync(); - }); + await context.sync(); + }); } async function setup() { - await Word.run(async (context) => { - // Insert a couple of paragraphs. - 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 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"; - - await context.sync(); - }) + 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 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"; + }); } /** 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/samples/word/25-paragraph/search.yaml b/samples/word/25-paragraph/search.yaml index e47f2c4a9..9b6e66579 100644 --- a/samples/word/25-paragraph/search.yaml +++ b/samples/word/25-paragraph/search.yaml @@ -7,64 +7,69 @@ host: WORD api_set: WordApi: 1.1 script: - content: |- + content: | $("#setup").click(() => tryCatch(setup)); $("#basic-search").click(() => tryCatch(basicSearch)); $("#wildcard-search").click(() => tryCatch(wildcardSearch)); async function basicSearch() { - await Word.run(async (context) => { - let results = context.document.body.search("Online"); - results.load("font/highlightColor"); + await Word.run(async (context) => { + let results = context.document.body.search("Online"); + results.load("font/highlightColor"); - await context.sync(); + await context.sync(); - // Let's traverse the search results... and highlight... - for (let i = 0; i < results.items.length; i++) { - results.items[i].font.highlightColor = "yellow"; - } + // Let's traverse the search results... and highlight... + for (let i = 0; i < results.items.length; i++) { + results.items[i].font.highlightColor = "yellow"; + } - await context.sync(); - }); + await context.sync(); + }); } async function wildcardSearch() { - 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 }); - results.load("font/highlightColor, font/color"); - - await context.sync(); - - // Let's traverse the search results... and highlight... - for (let i = 0; i < results.items.length; i++) { - results.items[i].font.highlightColor = "red"; - results.items[i].font.color = "white"; - } - - await context.sync(); - }); + 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 }); + results.load("font/highlightColor, font/color"); + + await context.sync(); + + // Let's traverse the search results... and highlight... + for (let i = 0; i < results.items.length; i++) { + results.items[i].font.highlightColor = "red"; + results.items[i].font.color = "white"; + } + + await context.sync(); + }); } async function setup() { - await Word.run(async (context) => { - // Let's insert a couple of paragraphs to illustrate the point. - context.document.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.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"); - - await context.sync(); - }); + 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 ($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 + .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); - } + 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: @@ -117,4 +122,4 @@ libraries: |- @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.3.1 + @types/jquery@3.3.1 \ 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 5c6ff3f25..d8f5d277d 100644 --- a/samples/word/35-ranges/scroll-to-range.yaml +++ b/samples/word/35-ranges/scroll-to-range.yaml @@ -7,51 +7,54 @@ host: WORD api_set: WordApi: 1.2 script: - content: |- + content: | $("#setup").click(() => tryCatch(setup)); $("#scroll").click(() => tryCatch(scroll)); $("#scroll-end").click(() => tryCatch(scrollEnd)); - async function scroll() { - await Word.run(async (context) => { - // If select is called with no parameters, it selects the object. - context.document.body.paragraphs.getLast().select(); + await Word.run(async (context) => { + // If select is called with no parameters, it selects the object. + context.document.body.paragraphs.getLast().select(); - await context.sync(); - }); + await context.sync(); + }); } 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"); + 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"); - await context.sync(); - }); + await context.sync(); + }); } async function setup() { - await Word.run(async (context) => { - // Let's insert a couple of paragraphs to illustrate the point. - context.document.body.clear(); - let firstSentence = 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"); - firstSentence.insertBreak(Word.BreakType.page, "After"); - 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"); - - await context.sync(); - }) + await Word.run(async (context) => { + context.document.body.clear(); + let firstSentence = 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" + ); + firstSentence.insertBreak(Word.BreakType.page, "After"); + 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); - } + 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: @@ -104,4 +107,4 @@ libraries: |- @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts jquery@3.1.1 - @types/jquery@3.3.1 + @types/jquery@3.3.1 \ No newline at end of file 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 ffabbd7fa..3fc55f0a1 100644 --- a/samples/word/35-ranges/split-words-of-first-paragraph.yaml +++ b/samples/word/35-ranges/split-words-of-first-paragraph.yaml @@ -12,48 +12,52 @@ script: $("#highlight").click(() => tryCatch(highlightWords)); async function highlightWords() { - await Word.run(async (context) => { - let paragraph = context.document.body.paragraphs.getFirst(); - let words = paragraph.split( - [" "], true /* trimDelimiters*/, true /* trimSpaces */); - words.load("text"); + await Word.run(async (context) => { + let paragraph = context.document.body.paragraphs.getFirst(); + let words = paragraph.split([" "], true /* trimDelimiters*/, true /* trimSpaces */); + words.load("text"); - await 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"; + 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); - } - }); + await context.sync(); + await pause(200); + } + }); } function pause(milliseconds) { - return new Promise(resolve => setTimeout(resolve, milliseconds)); + return new Promise((resolve) => setTimeout(resolve, milliseconds)); } 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"); - - await context.sync(); - }) + 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" + ); + }); } 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/samples/word/90-scenarios/multiple-property-set.yaml b/samples/word/90-scenarios/multiple-property-set.yaml index 4848784d4..671180ddd 100644 --- a/samples/word/90-scenarios/multiple-property-set.yaml +++ b/samples/word/90-scenarios/multiple-property-set.yaml @@ -2,11 +2,12 @@ order: 2 id: word-scenarios-multiple-property-set name: Set multiple properties at once description: Sets multiple properties at once with the API object set() method. +author: OfficeDev host: WORD api_set: WordApi: 1.3 script: - content: |- + content: | $("#set-multiple-properties-with-object").click(() => tryCatch(setMultiplePropertiesWithObject)); $("#copy-properties-from-paragraph").click(() => tryCatch(copyPropertiesFromParagraph)); $("#setup").click(() => tryCatch(setup)); @@ -42,7 +43,6 @@ script: async function setup() { await Word.run(async (context) => { - // Insert a couple of paragraphs. 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.", @@ -54,8 +54,6 @@ script: "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" ); - - await context.sync(); }); } @@ -64,8 +62,8 @@ script: 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 83884ff25..264d74ff0 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -2905,16 +2905,16 @@ Excel.WorksheetProtection.unprotect: Word.InlinePicture.getBase64ImageSrc: - |- await Word.run(async (context) => { - const firstPicture = context.document.body.inlinePictures.getFirst(); - firstPicture.load("width, height"); + const firstPicture = context.document.body.inlinePictures.getFirst(); + firstPicture.load("width, height"); - await context.sync(); - console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`); - //To get the image encoded as base64: - const base64 = firstPicture.getBase64ImageSrc(); + 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); + await context.sync(); + console.log(base64.value); }); Word.Section.getHeader: - |- @@ -2927,17 +2927,17 @@ Word.Section.getHeader: Word.Paragraph.insertBreak: - |- Word.run(async (context) => { - context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.line, "After"); + context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.line, "After"); - await context.sync(); - console.log("success"); + await context.sync(); + console.log("success"); }); - |- await Word.run(async (context) => { - context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.page, "After"); + context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.page, "After"); - await context.sync(); - console.log("success"); + await context.sync(); + console.log("success"); }); Word.Paragraph.insertParagraph: - |- @@ -2960,34 +2960,34 @@ Word.Paragraph.insertParagraph: Word.Body.search: - |- await Word.run(async (context) => { - let results = context.document.body.search("Online"); - results.load("font/highlightColor"); + let results = context.document.body.search("Online"); + results.load("font/highlightColor"); - await context.sync(); + await context.sync(); - // Let's traverse the search results... and highlight... - for (let i = 0; i < results.items.length; i++) { - results.items[i].font.highlightColor = "yellow"; - } + // Let's traverse the search results... and highlight... + for (let i = 0; i < results.items.length; i++) { + results.items[i].font.highlightColor = "yellow"; + } - await context.sync(); + await context.sync(); }); - |- 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 }); - results.load("font/highlightColor, font/color"); + // 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 }); + results.load("font/highlightColor, font/color"); - await context.sync(); + await context.sync(); - // Let's traverse the search results... and highlight... - for (let i = 0; i < results.items.length; i++) { - results.items[i].font.highlightColor = "red"; - results.items[i].font.color = "white"; - } + // Let's traverse the search results... and highlight... + for (let i = 0; i < results.items.length; i++) { + results.items[i].font.highlightColor = "red"; + results.items[i].font.color = "white"; + } - await context.sync(); + await context.sync(); }); - |- await Word.run(async (context) => { @@ -3111,107 +3111,105 @@ Word.Section.getFooter: Word.Paragraph.text: - |- 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"); + // 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); + await context.sync(); + console.log(paragraph.text); }); Word.Range.getTextRanges: - |- 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(); + // 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("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); - } + // 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("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.Paragraph.leftIndent: - |- await Word.run(async (context) => { - // Indents the first paragraph. - context.document.body.paragraphs. - getFirst().leftIndent = 75; //units = points + // Indents the first paragraph. + context.document.body.paragraphs.getFirst().leftIndent = 75; //units = points - return context.sync(); + return context.sync(); }); Word.Paragraph.lineSpacing: - |- await Word.run(async (context) => { - // Adjusts line spacing. - context.document.body.paragraphs - .getFirst().lineSpacing = 20; + // Adjusts line spacing. + context.document.body.paragraphs.getFirst().lineSpacing = 20; - await context.sync(); + await context.sync(); }); Word.Paragraph.spaceAfter: - |- await Word.run(async (context) => { - // Adjust space between paragraphs. - context.document.body.paragraphs - .getFirst().spaceAfter = 20; + // Adjust space between paragraphs. + context.document.body.paragraphs.getFirst().spaceAfter = 20; - await context.sync(); + await context.sync(); }); Word.Paragraph.alignment: - |- await Word.run(async (context) => { - // Centers last paragraph alignment. - context.document.body.paragraphs - .getLast().alignment = "Centered"; + // Centers last paragraph alignment. + context.document.body.paragraphs.getLast().alignment = "Centered"; - await context.sync(); + await context.sync(); }); Word.Paragraph.insertText: - |- await Word.run(async (context) => { - // Replace the last paragraph. - let range = context.document.body.paragraphs - .getLast().insertText("Just replaced the last paragraph!", "Replace"); - range.font.highlightColor = "black"; - range.font.color = "white"; + // Replace the last paragraph. + let range = context.document.body.paragraphs.getLast().insertText("Just replaced the last paragraph!", "Replace"); + range.font.highlightColor = "black"; + range.font.color = "white"; - await context.sync(); + await context.sync(); }); Word.ContentControl.tag: - - > + - >- // 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(); + let paragraphs = context.document.body.paragraphs; + paragraphs.load("$none"); // Don't need any properties; just wrap each paragraph with a content control. - 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"; - } + await context.sync(); - else { - contentControl.tag = "odd"; - } + 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) + } + console.log("Content controls inserted: " + paragraphs.items.length); - await context.sync(); + await context.sync(); }); Word.ContentControl.set: - >- @@ -3219,70 +3217,69 @@ Word.ContentControl.set: 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("color,title,appearance"); - oddContentControls.load("color,title,appearance"); + // 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("color,title,appearance"); + oddContentControls.load("color,title,appearance"); - await context.sync(); + 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 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"); - } + 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(); + await context.sync(); }); Word.Paragraph.select: - |- await Word.run(async (context) => { - // If select is called with no parameters, it selects the object. - context.document.body.paragraphs.getLast().select(); + // If select is called with no parameters, it selects the object. + context.document.body.paragraphs.getLast().select(); - await context.sync(); + await context.sync(); }); - |- 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"); + // 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"); - await context.sync(); + await context.sync(); }); Word.Paragraph.split: - |- await Word.run(async (context) => { - let paragraph = context.document.body.paragraphs.getFirst(); - let words = paragraph.split( - [" "], true /* trimDelimiters*/, true /* trimSpaces */); - words.load("text"); + let paragraph = context.document.body.paragraphs.getFirst(); + let words = paragraph.split([" "], true /* trimDelimiters*/, true /* trimSpaces */); + words.load("text"); - 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 context.sync(); - await pause(200); + 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.Table.getCell: - |- @@ -3311,24 +3308,24 @@ Word.Paragraph.startNewList: - |- // This example starts a new list stating with the second paragraph. await Word.run(async (context) => { - let paragraphs = context.document.body.paragraphs; - paragraphs.load("$none"); // No properties needed. + let paragraphs = context.document.body.paragraphs; + paragraphs.load("$none"); // No properties needed. - await context.sync(); + await context.sync(); - var list = paragraphs.items[1].startNewList(); // Indicates new list to be started in the second paragraph. - list.load("$none"); // No properties needed. + var list = paragraphs.items[1].startNewList(); // Indicates new list to be started in the second paragraph. + list.load("$none"); // No properties needed. - await context.sync(); + await context.sync(); - // 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. - // To add paragraphs outside the list use before/after: - list.insertParagraph('New paragraph goes after (not part of the list)', 'After'); + // 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. + // To add paragraphs outside the list use before/after: + list.insertParagraph("New paragraph goes after (not part of the list)", "After"); - await context.sync(); + await context.sync(); }); Word.CustomPropertyCollection.add: - |- From aa3205cd062e3fd23f293f5743d3347db48cb078 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 2 Apr 2019 15:22:37 -0700 Subject: [PATCH 148/660] Update readme based on feedback --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index a3e8564a8..078c656c6 100644 --- a/README.md +++ b/README.md @@ -38,17 +38,17 @@ A collection of code snippets built with [Script Lab](//github.com/OfficeDev/scr 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/). 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 project folder to which your snippet should be added. All snippets must be inside the `samples` folder. The structure of the subfolders is: +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: - - The base folders such as `Excel`, `Word`, etc. are all the various broad-level categories. - - Inside of each base folder, there are group folders for the group in which a snippet belongs. - - Inside of each group folder, there are `.yaml` files that each represents a snippet. + - The base folders such as `excel`, `word`, etc. represent the various high-level 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 well with any existing group folder, you may want to 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. The numbers determine the sequence of the groups in Script Lab, so use a number that is 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 `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) below. +12. 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 `npm start` command adds an `id` property to the top of the file. @@ -67,7 +67,7 @@ A collection of code snippets built with [Script Lab](//github.com/OfficeDev/scr 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*. +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: From 6013f00e67e94fe4cadd6cb12ded2c927f8e4b48 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 2 Apr 2019 15:27:53 -0700 Subject: [PATCH 149/660] Update based on feedback --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 078c656c6..5cce0e455 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ A collection of code snippets built with [Script Lab](//github.com/OfficeDev/scr 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: - - The base folders such as `excel`, `word`, etc. represent the various high-level host applications. + - 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. From 9c47d3b7d7696dd5eb2ff953b1febb7a5afed0b6 Mon Sep 17 00:00:00 2001 From: David Chesnut Date: Tue, 2 Apr 2019 16:17:59 -0700 Subject: [PATCH 150/660] Added volatile CF --- config/build.ts | 19 +++++++++---- playlists/excel.yaml | 9 +++++++ .../volatile-function.yaml | 27 +++++++++++++++++++ view/excel.json | 1 + 4 files changed, 51 insertions(+), 5 deletions(-) create mode 100644 samples/excel/16-custom-functions/volatile-function.yaml diff --git a/config/build.ts b/config/build.ts index 8f915d1ac..0d4e80d72 100644 --- a/config/build.ts +++ b/config/build.ts @@ -416,13 +416,22 @@ async function processSnippets(processedSnippets: Dictionary code.indexOf('\t') >= 0) >= 0) { - snippet.template.content = snippet.template.content.replace(/\t/g, ' '); - snippet.script.content = snippet.script.content.replace(/\t/g, ' '); - snippet.style.content = snippet.style.content.replace(/\t/g, ' '); + let replacedTabs = false; + ['template', 'script', 'style'].forEach(fieldName => { + if (snippet[fieldName]) { + if (snippet[fieldName].content.indexOf('\t') >= 0) { + replacedTabs = true; + snippet[fieldName].content = snippet[fieldName].content.replace(/\t/g, ' '); + } + } + }); + + if (snippet.libraries.indexOf('\t') >= 0) { + replacedTabs = true; snippet.libraries = snippet.libraries.replace(/\t/g, ' '); + } + if (replacedTabs) { messages.push('Snippet had one or more fields (template/script/style/libraries) ' + 'that contained tabs instead of spaces. Replacing everything with 4 spaces.'); } diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 0da5acd08..56f611a15 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -155,6 +155,15 @@ group: Conditional Formatting api_set: ExcelApi: 1.6 +- 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////samples/excel/16-custom-functions/volatile-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 diff --git a/samples/excel/16-custom-functions/volatile-function.yaml b/samples/excel/16-custom-functions/volatile-function.yaml new file mode 100644 index 000000000..437299455 --- /dev/null +++ b/samples/excel/16-custom-functions/volatile-function.yaml @@ -0,0 +1,27 @@ +order: 1 +id: excel-custom-functions-volatile +name: Volatile function +description: Rolls a 6 sided die that returns a possible new value every calculation. +host: EXCEL +api_set: + CustomFunctionsRuntime: 1.1 +script: + content: | + /** @CustomFunction */ + function ROLL6SIDEDICE(x: number): number { + let i:number; + let result:number; + result = 0; + for (i = 0;i Date: Wed, 3 Apr 2019 14:17:14 -0700 Subject: [PATCH 151/660] simplified custom function code (#288) * simplified custom function code * simplified CF to one line * Update samples/excel/16-custom-functions/volatile-function.yaml --- .../volatile-function.yaml | 21 +++++++------------ 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/samples/excel/16-custom-functions/volatile-function.yaml b/samples/excel/16-custom-functions/volatile-function.yaml index 437299455..51a440869 100644 --- a/samples/excel/16-custom-functions/volatile-function.yaml +++ b/samples/excel/16-custom-functions/volatile-function.yaml @@ -7,21 +7,16 @@ api_set: CustomFunctionsRuntime: 1.1 script: content: | - /** @CustomFunction */ - function ROLL6SIDEDICE(x: number): number { - let i:number; - let result:number; - result = 0; - for (i = 0;i Date: Wed, 3 Apr 2019 15:36:22 -0700 Subject: [PATCH 152/660] [excel] (Events) Data change event details snippet (#287) * Data change event details snippet * Fixing console log statement spacing --- playlists/excel.yaml | 9 ++ .../data-change-event-details.yaml | 119 ++++++++++++++++++ .../performance-optimization.yaml | 2 +- .../excel/85-preview-apis/range-areas.yaml | 2 +- samples/excel/85-preview-apis/range-find.yaml | 2 +- .../range-remove-duplicates.yaml | 2 +- .../excel/85-preview-apis/shape-groups.yaml | 2 +- .../excel/85-preview-apis/shape-images.yaml | 2 +- .../excel/85-preview-apis/shape-lines.yaml | 2 +- .../85-preview-apis/shape-move-and-order.yaml | 2 +- .../85-preview-apis/shape-textboxes.yaml | 2 +- samples/excel/85-preview-apis/tetrominos.yaml | 2 +- .../workbook-insert-external-worksheets.yaml | 2 +- .../workbook-save-and-close.yaml | 2 +- .../85-preview-apis/worksheet-find-all.yaml | 2 +- .../worksheet-page-layout.yaml | 2 +- snippet-extractor-metadata/excel.xlsx | Bin 19373 -> 19426 bytes snippet-extractor-output/snippets.yaml | 11 ++ view/excel.json | 1 + 19 files changed, 154 insertions(+), 14 deletions(-) create mode 100644 samples/excel/85-preview-apis/data-change-event-details.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 56f611a15..c95553b93 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -670,6 +670,15 @@ group: Preview APIs api_set: ExcelAPI: 1.9 +- id: excel-data-change-event-details + name: Data change 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////samples/excel/85-preview-apis/data-change-event-details.yaml + group: Preview APIs + api_set: + ExcelApi: 1.9 - id: excel-range-areas name: Discontiguous ranges (RangeAreas) and special cells fileName: range-areas.yaml diff --git a/samples/excel/85-preview-apis/data-change-event-details.yaml b/samples/excel/85-preview-apis/data-change-event-details.yaml new file mode 100644 index 000000000..b298b7ed4 --- /dev/null +++ b/samples/excel/85-preview-apis/data-change-event-details.yaml @@ -0,0 +1,119 @@ +order: 4 +id: excel-data-change-event-details +name: Data change details +description: Uses the onChanged event of a table to determine the specifics of changes. +host: EXCEL +api_set: + ExcelApi: 1.9 +script: + content: | + $("#setup").click(() => tryCatch(setup)); + $("#register-handler").click(() => tryCatch(registerChangeEventHandler)); + + async function registerChangeEventHandler() { + await Excel.run(async (context) => { + const expensesTable = context.workbook.worksheets.getActiveWorksheet().tables.getItem("ExpensesTable"); + + // This event fires when a user edits a cell in the table. + expensesTable.onChanged.add(onTableChanged); + await context.sync(); + + console.log("Added onChanged handler"); + }); + } + + async function onTableChanged(eventArgs: Excel.TableChangedEventArgs) { + await Excel.run(async (context) => { + const details = eventArgs.details; + const address = eventArgs.address; + + console.log(`Change at ${address}: was ${details.valueBefore}(${details.valueTypeBefore}),` + + ` now is ${details.valueAfter}(${details.valueTypeAfter})`); + }); + } + + async function setup() { + await Excel.run(async (context) => { + await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + + const sheet = context.workbook.worksheets.getItem("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*/, [ + ["4/1/2017", "The Phone Company", "Communications", "$120"], + ["4/2/2017", "Northwind Electric Cars", "Transportation", "$142"], + ["4/5/2017", "Best For You Organics Company", "Groceries", "$27"], + ["4/10/2017", "Coho Vineyard", "Restaurant", "$33"], + ["4/11/2017", "Bellows College", "Education", "$350"], + ["4/15/2017", "Trey Research", "Other", "$135"], + ["4/15/2017", "Best For You Organics Company", "Groceries", "$97"] + ]); + + sheet.getUsedRange().format.autofitColumns(); + 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 table changed events.

    +
    + +
    +

    Setup

    + +
    +
    +

    Try it out

    + +

    +

    Edit individual cells in the table to trigger the event and see the console output.

    +
    + 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 + + @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/samples/excel/85-preview-apis/performance-optimization.yaml b/samples/excel/85-preview-apis/performance-optimization.yaml index 2e89e6afe..5537ab90f 100644 --- a/samples/excel/85-preview-apis/performance-optimization.yaml +++ b/samples/excel/85-preview-apis/performance-optimization.yaml @@ -1,4 +1,4 @@ -order: 12 +order: 13 id: excel-performance-optimization name: Performance optimization description: Optimizes performance by untracking ranges and turning off screen painting. diff --git a/samples/excel/85-preview-apis/range-areas.yaml b/samples/excel/85-preview-apis/range-areas.yaml index 7caf19b9e..8615973f6 100644 --- a/samples/excel/85-preview-apis/range-areas.yaml +++ b/samples/excel/85-preview-apis/range-areas.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 5 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.' diff --git a/samples/excel/85-preview-apis/range-find.yaml b/samples/excel/85-preview-apis/range-find.yaml index a39d6619c..5c54ac7f3 100644 --- a/samples/excel/85-preview-apis/range-find.yaml +++ b/samples/excel/85-preview-apis/range-find.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 6 id: excel-range-find name: Find text matches within a range description: Finds a cell within a range based on string matching. diff --git a/samples/excel/85-preview-apis/range-remove-duplicates.yaml b/samples/excel/85-preview-apis/range-remove-duplicates.yaml index dcafff51d..fb98dc74b 100644 --- a/samples/excel/85-preview-apis/range-remove-duplicates.yaml +++ b/samples/excel/85-preview-apis/range-remove-duplicates.yaml @@ -1,4 +1,4 @@ -order: 13 +order: 14 id: excel-range-remove-duplicates name: Remove duplicates description: Removes duplicate entries from a range. diff --git a/samples/excel/85-preview-apis/shape-groups.yaml b/samples/excel/85-preview-apis/shape-groups.yaml index a8089c962..6e1fa8a55 100644 --- a/samples/excel/85-preview-apis/shape-groups.yaml +++ b/samples/excel/85-preview-apis/shape-groups.yaml @@ -1,4 +1,4 @@ -order: 15 +order: 16 id: excel-shape-groups name: Shape groups description: Groups and ungroups shapes. diff --git a/samples/excel/85-preview-apis/shape-images.yaml b/samples/excel/85-preview-apis/shape-images.yaml index f5247832e..188d05cff 100644 --- a/samples/excel/85-preview-apis/shape-images.yaml +++ b/samples/excel/85-preview-apis/shape-images.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 8 id: excel-shape-images name: Image shapes description: Creates and adjusts image-based shapes. diff --git a/samples/excel/85-preview-apis/shape-lines.yaml b/samples/excel/85-preview-apis/shape-lines.yaml index 6720aacb3..c7990dbf2 100644 --- a/samples/excel/85-preview-apis/shape-lines.yaml +++ b/samples/excel/85-preview-apis/shape-lines.yaml @@ -1,4 +1,4 @@ -order: 9 +order: 10 id: excel-shape-lines name: Lines description: Creates and modifies line shapes. diff --git a/samples/excel/85-preview-apis/shape-move-and-order.yaml b/samples/excel/85-preview-apis/shape-move-and-order.yaml index b8797a087..25dfc5154 100644 --- a/samples/excel/85-preview-apis/shape-move-and-order.yaml +++ b/samples/excel/85-preview-apis/shape-move-and-order.yaml @@ -1,4 +1,4 @@ -order: 10 +order: 11 id: excel-shape-move-and-order name: Move and order shapes description: Moves created shapes around the worksheet and adjusts their z-order. diff --git a/samples/excel/85-preview-apis/shape-textboxes.yaml b/samples/excel/85-preview-apis/shape-textboxes.yaml index 795f82731..b8d9d8c88 100644 --- a/samples/excel/85-preview-apis/shape-textboxes.yaml +++ b/samples/excel/85-preview-apis/shape-textboxes.yaml @@ -1,4 +1,4 @@ -order: 17 +order: 18 id: excel-shape-textboxes name: Textboxes description: Creates a textbox shape and works with the text in it and other shapes. diff --git a/samples/excel/85-preview-apis/tetrominos.yaml b/samples/excel/85-preview-apis/tetrominos.yaml index d0e8bd47e..663587e21 100644 --- a/samples/excel/85-preview-apis/tetrominos.yaml +++ b/samples/excel/85-preview-apis/tetrominos.yaml @@ -1,4 +1,4 @@ -order: 16 +order: 17 id: excel-just-for-fun-tetrominos name: Tetromino stacking description: Arrange moving tetromino shapes to form lines. 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 8def4bd45..76191d8da 100644 --- a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml +++ b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml @@ -1,4 +1,4 @@ -order: 8 +order: 9 id: excel-workbook-insert-external-worksheets name: Insert external worksheets description: Inserts worksheets from another workbook into the current workbook. diff --git a/samples/excel/85-preview-apis/workbook-save-and-close.yaml b/samples/excel/85-preview-apis/workbook-save-and-close.yaml index 563f5b271..e4dfa35f2 100644 --- a/samples/excel/85-preview-apis/workbook-save-and-close.yaml +++ b/samples/excel/85-preview-apis/workbook-save-and-close.yaml @@ -1,4 +1,4 @@ -order: 14 +order: 15 id: excel-workbook-save-and-close name: Save and close description: Saves and closes a workbook. diff --git a/samples/excel/85-preview-apis/worksheet-find-all.yaml b/samples/excel/85-preview-apis/worksheet-find-all.yaml index f83810a23..63e31ca37 100644 --- a/samples/excel/85-preview-apis/worksheet-find-all.yaml +++ b/samples/excel/85-preview-apis/worksheet-find-all.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 7 id: excel-worksheet-find-all name: Find text matches within a worksheet description: Finds cells within a worksheet based on string matching. diff --git a/samples/excel/85-preview-apis/worksheet-page-layout.yaml b/samples/excel/85-preview-apis/worksheet-page-layout.yaml index a12368b5f..151319d56 100644 --- a/samples/excel/85-preview-apis/worksheet-page-layout.yaml +++ b/samples/excel/85-preview-apis/worksheet-page-layout.yaml @@ -1,4 +1,4 @@ -order: 11 +order: 12 id: excel-worksheet-page-layout name: Page layout and print settings description: Changes the page layout and other settings for printing a worksheet. diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 1c7aeb09474e0c620a05dc65ac994091836356ff..1c46ba7814701f7addf33508444764fc68b9d974 100644 GIT binary patch delta 10064 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 Pf`e7)kvJ9pGxC1`QTS*V delta 10088 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 ZMNueHu(zTJ^lwRUiy{sDv&=s;{|D0qO6&jt diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 264d74ff0..bc0b08376 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -2902,6 +2902,17 @@ Excel.WorksheetProtection.unprotect: let activeSheet = context.workbook.worksheets.getActiveWorksheet(); activeSheet.protection.unprotect(password); }); +Excel.TableChangedEventArgs.details: + - |- + async function onTableChanged(eventArgs: Excel.TableChangedEventArgs) { + await Excel.run(async (context) => { + const details = eventArgs.details; + const address = eventArgs.address; + + console.log(`Change at ${address}: was ${details.valueBefore}(${details.valueTypeBefore}),` + + ` now is ${details.valueAfter}(${details.valueTypeAfter})`); + }); + } Word.InlinePicture.getBase64ImageSrc: - |- await Word.run(async (context) => { diff --git a/view/excel.json b/view/excel.json index 32c36425b..0a5378c5d 100644 --- a/view/excel.json +++ b/view/excel.json @@ -72,6 +72,7 @@ "excel-comment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/comment.yaml", "excel-shape-create-and-delete": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/shape-create-and-delete.yaml", "excel-range-copyfrom": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-copyfrom.yaml", + "excel-data-change-event-details": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/data-change-event-details.yaml", "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-areas.yaml", "excel-range-find": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-find.yaml", "excel-worksheet-find-all": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/worksheet-find-all.yaml", From 02d5e95d3f24c6322d481d1c6fafa7d21364890c Mon Sep 17 00:00:00 2001 From: tdslinden <31021147+tdslinden@users.noreply.github.com> Date: Thu, 4 Apr 2019 15:40:28 -0700 Subject: [PATCH 153/660] Fixed Errors in README.md (#278) - Hedging - Remove pronouns for clarity - Removed excess use of that - Removed contractions to make more formal --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 5cce0e455..d98600430 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ A collection of code snippets built with [Script Lab](//github.com/OfficeDev/scr ### Adding a new sample -> For the git tasks in this procedure, the instructions assume that you are 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. +> 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**. @@ -44,7 +44,7 @@ A collection of code snippets built with [Script Lab](//github.com/OfficeDev/scr - 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 well with any existing group folder, you may want to 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. The numbers determine the sequence of the groups in Script Lab, so use a number that is 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. @@ -124,10 +124,10 @@ async function tryCatch(callback) { A few style rules to observe: * Use standard TypeScript indentation. -* For each button, define a corresponding `async` function that is to be executed 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. +* 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, I wouldn't do the popup notification except for one or two samples. It's a lot of HTML & JS code, and it's also not strictly Fabric-y (there is a more "correct" way of doing this with components). +* 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`. From 9a8c7a0ee078cecbefdceca125a9eab0f5be2258 Mon Sep 17 00:00:00 2001 From: Michael Zlatkovsky Date: Fri, 5 Apr 2019 15:42:13 -0700 Subject: [PATCH 154/660] Update volatile-function.yaml To make it a fair dice, you should just choose a random number 0 to 1, multiply by 6, take the FLOOR of it, and add 1. I.e.: `Math.floor(Math.random() * 6) + 1;` The previous formula, `Math.round(Math.random() * 5 + 1)`, does not produce the same distribution --- samples/excel/16-custom-functions/volatile-function.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/excel/16-custom-functions/volatile-function.yaml b/samples/excel/16-custom-functions/volatile-function.yaml index 51a440869..a95766da1 100644 --- a/samples/excel/16-custom-functions/volatile-function.yaml +++ b/samples/excel/16-custom-functions/volatile-function.yaml @@ -8,12 +8,12 @@ api_set: script: content: | /** @CustomFunction - * @description Simulates rolling a 6-sided die. + * @description Simulates rolling a 6-sided die. * @returns A whole number from 1 to 6. * @volatile */ function roll6sided(): number { - return Math.round(Math.random() * 5 + 1); + return Math.floor(Math.random() * 6) + 1; } language: typescript libraries: | From 5a3a17278ef0495098a70f4e725fff6c3df4f4f0 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Mon, 8 Apr 2019 16:58:35 -0700 Subject: [PATCH 155/660] [excel] (Worksheet) Adding a sample for a worksheet autofilter (#290) * Adding a sample for a worksheet autofilter * Simplifying setup code --- playlists/excel.yaml | 9 + samples/excel/85-preview-apis/comment.yaml | 2 +- .../data-change-event-details.yaml | 2 +- .../performance-optimization.yaml | 2 +- .../excel/85-preview-apis/range-areas.yaml | 2 +- .../excel/85-preview-apis/range-copyfrom.yaml | 2 +- samples/excel/85-preview-apis/range-find.yaml | 2 +- .../range-remove-duplicates.yaml | 2 +- .../shape-create-and-delete.yaml | 2 +- .../excel/85-preview-apis/shape-groups.yaml | 2 +- .../excel/85-preview-apis/shape-images.yaml | 2 +- .../excel/85-preview-apis/shape-lines.yaml | 2 +- .../85-preview-apis/shape-move-and-order.yaml | 2 +- .../85-preview-apis/shape-textboxes.yaml | 2 +- samples/excel/85-preview-apis/tetrominos.yaml | 2 +- .../workbook-insert-external-worksheets.yaml | 2 +- .../workbook-save-and-close.yaml | 2 +- .../worksheet-auto-filter.yaml | 163 ++++++++++++++++++ .../85-preview-apis/worksheet-find-all.yaml | 2 +- .../worksheet-page-layout.yaml | 2 +- snippet-extractor-metadata/excel.xlsx | Bin 19426 -> 19510 bytes snippet-extractor-output/snippets.yaml | 20 +++ view/excel.json | 1 + 23 files changed, 211 insertions(+), 18 deletions(-) create mode 100644 samples/excel/85-preview-apis/worksheet-auto-filter.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index c95553b93..a95da534e 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -641,6 +641,15 @@ 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////samples/excel/85-preview-apis/worksheet-auto-filter.yaml + group: Preview APIs + api_set: + ExcelApi: 1.9 - id: excel-comment name: Comments fileName: comment.yaml diff --git a/samples/excel/85-preview-apis/comment.yaml b/samples/excel/85-preview-apis/comment.yaml index fe4be9873..1551a61cc 100644 --- a/samples/excel/85-preview-apis/comment.yaml +++ b/samples/excel/85-preview-apis/comment.yaml @@ -1,4 +1,4 @@ -order: 1 +order: 2 id: excel-comment name: Comments description: 'Adds, edits, and removes comments and comment replies.' diff --git a/samples/excel/85-preview-apis/data-change-event-details.yaml b/samples/excel/85-preview-apis/data-change-event-details.yaml index b298b7ed4..2878857a7 100644 --- a/samples/excel/85-preview-apis/data-change-event-details.yaml +++ b/samples/excel/85-preview-apis/data-change-event-details.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 5 id: excel-data-change-event-details name: Data change details description: Uses the onChanged event of a table to determine the specifics of changes. diff --git a/samples/excel/85-preview-apis/performance-optimization.yaml b/samples/excel/85-preview-apis/performance-optimization.yaml index 5537ab90f..a90ae2e01 100644 --- a/samples/excel/85-preview-apis/performance-optimization.yaml +++ b/samples/excel/85-preview-apis/performance-optimization.yaml @@ -1,4 +1,4 @@ -order: 13 +order: 14 id: excel-performance-optimization name: Performance optimization description: Optimizes performance by untracking ranges and turning off screen painting. diff --git a/samples/excel/85-preview-apis/range-areas.yaml b/samples/excel/85-preview-apis/range-areas.yaml index 8615973f6..1c079bbce 100644 --- a/samples/excel/85-preview-apis/range-areas.yaml +++ b/samples/excel/85-preview-apis/range-areas.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 6 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.' diff --git a/samples/excel/85-preview-apis/range-copyfrom.yaml b/samples/excel/85-preview-apis/range-copyfrom.yaml index 90133a8c9..aeca983b0 100644 --- a/samples/excel/85-preview-apis/range-copyfrom.yaml +++ b/samples/excel/85-preview-apis/range-copyfrom.yaml @@ -1,4 +1,4 @@ -order: 3 +order: 4 id: excel-range-copyfrom name: Copy and paste ranges description: Copies data and formatting from one range to another. diff --git a/samples/excel/85-preview-apis/range-find.yaml b/samples/excel/85-preview-apis/range-find.yaml index 5c54ac7f3..bb3689993 100644 --- a/samples/excel/85-preview-apis/range-find.yaml +++ b/samples/excel/85-preview-apis/range-find.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 7 id: excel-range-find name: Find text matches within a range description: Finds a cell within a range based on string matching. diff --git a/samples/excel/85-preview-apis/range-remove-duplicates.yaml b/samples/excel/85-preview-apis/range-remove-duplicates.yaml index fb98dc74b..4d1332426 100644 --- a/samples/excel/85-preview-apis/range-remove-duplicates.yaml +++ b/samples/excel/85-preview-apis/range-remove-duplicates.yaml @@ -1,4 +1,4 @@ -order: 14 +order: 15 id: excel-range-remove-duplicates name: Remove duplicates description: Removes duplicate entries from a range. diff --git a/samples/excel/85-preview-apis/shape-create-and-delete.yaml b/samples/excel/85-preview-apis/shape-create-and-delete.yaml index f143e9f68..4d9b656d2 100644 --- a/samples/excel/85-preview-apis/shape-create-and-delete.yaml +++ b/samples/excel/85-preview-apis/shape-create-and-delete.yaml @@ -1,4 +1,4 @@ -order: 2 +order: 3 id: excel-shape-create-and-delete name: Create and delete geometric shapes description: Creates a few different geometric shapes and deletes them from the worksheet. diff --git a/samples/excel/85-preview-apis/shape-groups.yaml b/samples/excel/85-preview-apis/shape-groups.yaml index 6e1fa8a55..29637c8f5 100644 --- a/samples/excel/85-preview-apis/shape-groups.yaml +++ b/samples/excel/85-preview-apis/shape-groups.yaml @@ -1,4 +1,4 @@ -order: 16 +order: 17 id: excel-shape-groups name: Shape groups description: Groups and ungroups shapes. diff --git a/samples/excel/85-preview-apis/shape-images.yaml b/samples/excel/85-preview-apis/shape-images.yaml index 188d05cff..0aba1a364 100644 --- a/samples/excel/85-preview-apis/shape-images.yaml +++ b/samples/excel/85-preview-apis/shape-images.yaml @@ -1,4 +1,4 @@ -order: 8 +order: 9 id: excel-shape-images name: Image shapes description: Creates and adjusts image-based shapes. diff --git a/samples/excel/85-preview-apis/shape-lines.yaml b/samples/excel/85-preview-apis/shape-lines.yaml index c7990dbf2..d3acd5e9f 100644 --- a/samples/excel/85-preview-apis/shape-lines.yaml +++ b/samples/excel/85-preview-apis/shape-lines.yaml @@ -1,4 +1,4 @@ -order: 10 +order: 11 id: excel-shape-lines name: Lines description: Creates and modifies line shapes. diff --git a/samples/excel/85-preview-apis/shape-move-and-order.yaml b/samples/excel/85-preview-apis/shape-move-and-order.yaml index 25dfc5154..bbcb5425e 100644 --- a/samples/excel/85-preview-apis/shape-move-and-order.yaml +++ b/samples/excel/85-preview-apis/shape-move-and-order.yaml @@ -1,4 +1,4 @@ -order: 11 +order: 12 id: excel-shape-move-and-order name: Move and order shapes description: Moves created shapes around the worksheet and adjusts their z-order. diff --git a/samples/excel/85-preview-apis/shape-textboxes.yaml b/samples/excel/85-preview-apis/shape-textboxes.yaml index b8d9d8c88..e8149a11a 100644 --- a/samples/excel/85-preview-apis/shape-textboxes.yaml +++ b/samples/excel/85-preview-apis/shape-textboxes.yaml @@ -1,4 +1,4 @@ -order: 18 +order: 19 id: excel-shape-textboxes name: Textboxes description: Creates a textbox shape and works with the text in it and other shapes. diff --git a/samples/excel/85-preview-apis/tetrominos.yaml b/samples/excel/85-preview-apis/tetrominos.yaml index 663587e21..7a8aa1a6c 100644 --- a/samples/excel/85-preview-apis/tetrominos.yaml +++ b/samples/excel/85-preview-apis/tetrominos.yaml @@ -1,4 +1,4 @@ -order: 17 +order: 18 id: excel-just-for-fun-tetrominos name: Tetromino stacking description: Arrange moving tetromino shapes to form lines. 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 76191d8da..b52b65c8f 100644 --- a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml +++ b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml @@ -1,4 +1,4 @@ -order: 9 +order: 10 id: excel-workbook-insert-external-worksheets name: Insert external worksheets description: Inserts worksheets from another workbook into the current workbook. diff --git a/samples/excel/85-preview-apis/workbook-save-and-close.yaml b/samples/excel/85-preview-apis/workbook-save-and-close.yaml index e4dfa35f2..b005b513f 100644 --- a/samples/excel/85-preview-apis/workbook-save-and-close.yaml +++ b/samples/excel/85-preview-apis/workbook-save-and-close.yaml @@ -1,4 +1,4 @@ -order: 15 +order: 16 id: excel-workbook-save-and-close name: Save and close description: Saves and closes a workbook. diff --git a/samples/excel/85-preview-apis/worksheet-auto-filter.yaml b/samples/excel/85-preview-apis/worksheet-auto-filter.yaml new file mode 100644 index 000000000..029dd10d0 --- /dev/null +++ b/samples/excel/85-preview-apis/worksheet-auto-filter.yaml @@ -0,0 +1,163 @@ +order: 1 +id: excel-worksheet-auto-filter +name: AutoFilter +description: Adds an AutoFilter to a worksheet. +host: EXCEL +api_set: + ExcelApi: 1.9 +script: + content: | + $("#setup").click(() => tryCatch(setup)); + $("#add-auto-filter").click(() => tryCatch(addAutoFilter)); + $("#randomize-data").click(() => tryCatch(randomizeData)); + $("#refresh-auto-filter").click(() => tryCatch(refreshAutoFilter)); + $("#remove-auto-filter").click(() => tryCatch(removeAutoFilter)); + + async function addAutoFilter() { + 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(); + }); + } + + async function randomizeData() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const farmData = sheet.getUsedRange(); + farmData.load("rowCount"); + await context.sync(); + + for (let i = 1; i < farmData.rowCount; i++) { + farmData.getCell(i, 3).values = [[Math.round(Math.random() * 5000)]]; + } + + await context.sync(); + }); + } + + async function refreshAutoFilter() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + sheet.autoFilter.reapply(); + await context.sync(); + }); + } + + async function removeAutoFilter() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + sheet.autoFilter.remove(); + await context.sync(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + const dataSheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + + const data = [ + ["Farm", "Type", "Classification", "Crates Sold Wholesale"], + ["A Farms", "Lime", "Organic", 2000], + ["A Farms", "Lemon", "Organic", 1800], + ["A Farms", "Orange", "Organic", 2200], + ["B Farms", "Lime", "Conventional", 1000], + ["B Farms", "Lemon", "Conventional", 1230], + ["B Farms", "Orange", "Conventional", 800], + ["B Farms", "Orange", "Organic", 500], + ["B Farms", "Lemon", "Organic", 770], + ["B Farms", "Kiwi", "Conventional", 300], + ["B Farms", "Lime", "Organic", 400], + ["C Farms", "Apple", "Organic", 220], + ["C Farms", "Kiwi", "Organic", 120], + ["D Farms", "Apple", "Conventional", 3000], + ["D Farms", "Apple", "Organic", 2800], + ["E Farms", "Lime", "Conventional", 2700], + ["E Farms", "Orange", "Conventional", 2000], + ["E Farms", "Apple", "Conventional", 2200], + ["E Farms", "Kiwi", "Conventional", 1500], + ["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(); + }); + } + + /** 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 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.

    + +

    + +

    + 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 + + @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/samples/excel/85-preview-apis/worksheet-find-all.yaml b/samples/excel/85-preview-apis/worksheet-find-all.yaml index 63e31ca37..4a217138e 100644 --- a/samples/excel/85-preview-apis/worksheet-find-all.yaml +++ b/samples/excel/85-preview-apis/worksheet-find-all.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 8 id: excel-worksheet-find-all name: Find text matches within a worksheet description: Finds cells within a worksheet based on string matching. diff --git a/samples/excel/85-preview-apis/worksheet-page-layout.yaml b/samples/excel/85-preview-apis/worksheet-page-layout.yaml index 151319d56..5415f6619 100644 --- a/samples/excel/85-preview-apis/worksheet-page-layout.yaml +++ b/samples/excel/85-preview-apis/worksheet-page-layout.yaml @@ -1,4 +1,4 @@ -order: 12 +order: 13 id: excel-worksheet-page-layout name: Page layout and print settings description: Changes the page layout and other settings for printing a worksheet. diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 1c46ba7814701f7addf33508444764fc68b9d974..0c8b0caa435ad3a86e2257707abc3999d3f9073a 100644 GIT binary patch delta 10083 zcmY*<1yCNrvM%l(+@0X=?(XjHuE7^~g8WE=hv4om!GpWI1PJafkDPPs-g;Y8TeH32 zbkFp3_f+-tPC9tgH}Dz-SZEAlH?}H}Dl8$e>72=e7MR=c4*r-O@<^nimK0{2)K;q3 zepl<(14SQ{?27)KItv3e~|(h za7gs1IWR24%OU8hmSwECIq=uu_v(2_L=E_{cRe5i4H)u+uiQ4A}byeul&@@m3 zs0QNwP3L1-+(aS*H5sLSa4~Vz35%I&h*v71C*aS6q+9S?368i~v=}WLVRkx9EqjH0 zkT%CMPw{~c`ncV4Jr`WC=i*lkqF(@o#fyG9C=v^-teOxU7Ke9s{D=j7KdOkm0JL#o zSNExx4hzms!KNzFwljWPk3u_(If=3glNfAx1k>UBn^e)8^?YkiZz94arn>!NuPzLj zUvzX;P^(EVVAc?L(2TOi}C0|WJ`}ryO ztF`Wyt|Zed6aF*ZOR?SQz_;(dZ|2|pmG!;~%{RxL{gKzYnZZ5N(Z2`?QQ*EJO7!Hx zt1&v0z9*vBNG0V)=m4G4TV?_XJp4=3QYGE{X?a6`dhe~@=r}|x%zbeqFqv!rJ|wlv zT#lj6dhA)eO4)UY2CeZBoa)>jr+E@-y1Yo2D{&C2pdWuWGc>6j&EVQEnD{Z_i%*YX zwhDiXI(Rh(wW;6Kmy#+om zvxY=Dz1&I{{f86OaI*{5d)}WA8Jn`7q+5t})C&s@_HT&wm}LtuCLyz|bSX zz;MAp`ZD-Hmf@-s!7zFNY9c`T-~v~mO>X}U0blof|4KoXBDSVq_4lP?=!;)l zBu4Q>X;rjcu!F;+M&kr#`SXoq%z5C$-2=;m8jZy1@Nmb-#`RqmHJ@C@kUVVEx`?m`y%Mf+gc4;Ht;2xiyxA9n6*G^cS zU41I$lh~^g5^~CX*uC66yz!`LYOb8!?JL1eu>Lu8`o<#A?BeOKNN~Hp9;oejw0kpo~y)MDR^cyyS97x@b`K))A02HGqYt`_$2e(@n>Jp?%B~nLgZ6R zr%x0x`O2u!)ZWu<{$h;&PH!Bj_=LKui;$eDuWk7uK0RPYcNzk`Mi3(4Pfv7sUxiBb{4`Mcp10o z((Qh{*zVgKw`+u}M-_GoG*C=`C+Y&ev?l<$F1}?wwQcRhfpFTHHQ$h>&o>+KZYBe6 zZzcwNU4)N_U*$`$XlYGTYu#kbtl69A6!U98u@Do~xBF&7B-Gp8ihG8`f75 z6VEt*Q;ZBfty%_31EV7r`!d^XkA^I!y+WwpX4h-qD)|~1R*cgg3bm#m)_%7xcSis| zN8;~Jx%sbTLcNDqNLS~~lh^92wt>7TPUY>V2a)^Ew~NA>&k6U@9tBJLYxAe~ik>S2 zN@ygfj;x9)Ubo^7RhBiI*{BEb z_$o=TKi;(bp{j~*6f>MyQQiSm1{9rbx~8lIOC+^?T_xPGZA2l5S1;NyiWl{Ft&bD`-bFG+%{>0I zyQD|b2Z*@PWYXkeX?GOE$wn~IzND)n*{u|qaz{=w>A9JbU{sB))B{tX3K1tn58mVFS7 z)|R0hcEOf~7|KP6hiCkT`x65f)R#%fpOP-ax^-tyc_=Ku5V1^yI8A{t#$F~zM73}> zbQtfRdgz;lupU1rbgyWGjI%pQ+$~gjy0~G|# ztdWMvI0bB2>N�_wEj8+J3|8|%B|rs-$Uw90tBc}BshsGXdqHvU#)lcDl2$)4$b z;c6K0$3n0ZRFexer!#<_a?4G1)ItdJl&l9QSCa2$m?!NwO*3>w%_tOX+R377Ji~2*)(F3(UUv(9tqXejA}w z^-r8O30V0hQh=rqslym4LV6dKJ-YEmFsTj|i}&$^*{&8u`%PschUOKe1GI|@Jkmr4 zbCV-fi^pI6I&AR$OB|C4*c(lcQd|4cu|nsdwdz{o*Rnw#tV?s#yb5nMCCm1TCoew22h*GZ-H5LDw@>R>N(P6%y%m z)>LKxK&}jiYH1aIzvVn8#9+EUKzbI2Y+7
    Ga1KfwSr!Z4k7vIR=-jtxjDN1>#|d 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index bc0b08376..8697f5f48 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -2913,6 +2913,26 @@ Excel.TableChangedEventArgs.details: + ` now is ${details.valueAfter}(${details.valueTypeAfter})`); }); } +Excel.Worksheet.autofilter: + - |- + 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.AutoFilter.apply: + - |- + 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(); + }); Word.InlinePicture.getBase64ImageSrc: - |- await Word.run(async (context) => { diff --git a/view/excel.json b/view/excel.json index 0a5378c5d..adaa097a1 100644 --- a/view/excel.json +++ b/view/excel.json @@ -69,6 +69,7 @@ "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-visibility.yaml", + "excel-worksheet-auto-filter": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/worksheet-auto-filter.yaml", "excel-comment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/comment.yaml", "excel-shape-create-and-delete": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/shape-create-and-delete.yaml", "excel-range-copyfrom": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-copyfrom.yaml", From 4fd1574c1605c61bae6d927585336f980e029a6a Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 11 Apr 2019 17:15:08 -0700 Subject: [PATCH 156/660] Merging to prod (#291) * Fixed Errors in README.md (#278) - Hedging - Remove pronouns for clarity - Removed excess use of that - Removed contractions to make more formal * [excel] (Worksheet) Adding a sample for a worksheet autofilter (#290) * Adding a sample for a worksheet autofilter * Simplifying setup code --- README.md | 8 +- playlists/excel.yaml | 9 + samples/excel/85-preview-apis/comment.yaml | 2 +- .../data-change-event-details.yaml | 2 +- .../performance-optimization.yaml | 2 +- .../excel/85-preview-apis/range-areas.yaml | 2 +- .../excel/85-preview-apis/range-copyfrom.yaml | 2 +- samples/excel/85-preview-apis/range-find.yaml | 2 +- .../range-remove-duplicates.yaml | 2 +- .../shape-create-and-delete.yaml | 2 +- .../excel/85-preview-apis/shape-groups.yaml | 2 +- .../excel/85-preview-apis/shape-images.yaml | 2 +- .../excel/85-preview-apis/shape-lines.yaml | 2 +- .../85-preview-apis/shape-move-and-order.yaml | 2 +- .../85-preview-apis/shape-textboxes.yaml | 2 +- samples/excel/85-preview-apis/tetrominos.yaml | 2 +- .../workbook-insert-external-worksheets.yaml | 2 +- .../workbook-save-and-close.yaml | 2 +- .../worksheet-auto-filter.yaml | 163 ++++++++++++++++++ .../85-preview-apis/worksheet-find-all.yaml | 2 +- .../worksheet-page-layout.yaml | 2 +- snippet-extractor-metadata/excel.xlsx | Bin 19426 -> 19510 bytes snippet-extractor-output/snippets.yaml | 20 +++ view/excel.json | 1 + 24 files changed, 215 insertions(+), 22 deletions(-) create mode 100644 samples/excel/85-preview-apis/worksheet-auto-filter.yaml diff --git a/README.md b/README.md index 5cce0e455..d98600430 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ A collection of code snippets built with [Script Lab](//github.com/OfficeDev/scr ### Adding a new sample -> For the git tasks in this procedure, the instructions assume that you are 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. +> 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**. @@ -44,7 +44,7 @@ A collection of code snippets built with [Script Lab](//github.com/OfficeDev/scr - 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 well with any existing group folder, you may want to 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. The numbers determine the sequence of the groups in Script Lab, so use a number that is 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. @@ -124,10 +124,10 @@ async function tryCatch(callback) { A few style rules to observe: * Use standard TypeScript indentation. -* For each button, define a corresponding `async` function that is to be executed 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. +* 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, I wouldn't do the popup notification except for one or two samples. It's a lot of HTML & JS code, and it's also not strictly Fabric-y (there is a more "correct" way of doing this with components). +* 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`. diff --git a/playlists/excel.yaml b/playlists/excel.yaml index c95553b93..a95da534e 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -641,6 +641,15 @@ 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////samples/excel/85-preview-apis/worksheet-auto-filter.yaml + group: Preview APIs + api_set: + ExcelApi: 1.9 - id: excel-comment name: Comments fileName: comment.yaml diff --git a/samples/excel/85-preview-apis/comment.yaml b/samples/excel/85-preview-apis/comment.yaml index fe4be9873..1551a61cc 100644 --- a/samples/excel/85-preview-apis/comment.yaml +++ b/samples/excel/85-preview-apis/comment.yaml @@ -1,4 +1,4 @@ -order: 1 +order: 2 id: excel-comment name: Comments description: 'Adds, edits, and removes comments and comment replies.' diff --git a/samples/excel/85-preview-apis/data-change-event-details.yaml b/samples/excel/85-preview-apis/data-change-event-details.yaml index b298b7ed4..2878857a7 100644 --- a/samples/excel/85-preview-apis/data-change-event-details.yaml +++ b/samples/excel/85-preview-apis/data-change-event-details.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 5 id: excel-data-change-event-details name: Data change details description: Uses the onChanged event of a table to determine the specifics of changes. diff --git a/samples/excel/85-preview-apis/performance-optimization.yaml b/samples/excel/85-preview-apis/performance-optimization.yaml index 5537ab90f..a90ae2e01 100644 --- a/samples/excel/85-preview-apis/performance-optimization.yaml +++ b/samples/excel/85-preview-apis/performance-optimization.yaml @@ -1,4 +1,4 @@ -order: 13 +order: 14 id: excel-performance-optimization name: Performance optimization description: Optimizes performance by untracking ranges and turning off screen painting. diff --git a/samples/excel/85-preview-apis/range-areas.yaml b/samples/excel/85-preview-apis/range-areas.yaml index 8615973f6..1c079bbce 100644 --- a/samples/excel/85-preview-apis/range-areas.yaml +++ b/samples/excel/85-preview-apis/range-areas.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 6 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.' diff --git a/samples/excel/85-preview-apis/range-copyfrom.yaml b/samples/excel/85-preview-apis/range-copyfrom.yaml index 90133a8c9..aeca983b0 100644 --- a/samples/excel/85-preview-apis/range-copyfrom.yaml +++ b/samples/excel/85-preview-apis/range-copyfrom.yaml @@ -1,4 +1,4 @@ -order: 3 +order: 4 id: excel-range-copyfrom name: Copy and paste ranges description: Copies data and formatting from one range to another. diff --git a/samples/excel/85-preview-apis/range-find.yaml b/samples/excel/85-preview-apis/range-find.yaml index 5c54ac7f3..bb3689993 100644 --- a/samples/excel/85-preview-apis/range-find.yaml +++ b/samples/excel/85-preview-apis/range-find.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 7 id: excel-range-find name: Find text matches within a range description: Finds a cell within a range based on string matching. diff --git a/samples/excel/85-preview-apis/range-remove-duplicates.yaml b/samples/excel/85-preview-apis/range-remove-duplicates.yaml index fb98dc74b..4d1332426 100644 --- a/samples/excel/85-preview-apis/range-remove-duplicates.yaml +++ b/samples/excel/85-preview-apis/range-remove-duplicates.yaml @@ -1,4 +1,4 @@ -order: 14 +order: 15 id: excel-range-remove-duplicates name: Remove duplicates description: Removes duplicate entries from a range. diff --git a/samples/excel/85-preview-apis/shape-create-and-delete.yaml b/samples/excel/85-preview-apis/shape-create-and-delete.yaml index f143e9f68..4d9b656d2 100644 --- a/samples/excel/85-preview-apis/shape-create-and-delete.yaml +++ b/samples/excel/85-preview-apis/shape-create-and-delete.yaml @@ -1,4 +1,4 @@ -order: 2 +order: 3 id: excel-shape-create-and-delete name: Create and delete geometric shapes description: Creates a few different geometric shapes and deletes them from the worksheet. diff --git a/samples/excel/85-preview-apis/shape-groups.yaml b/samples/excel/85-preview-apis/shape-groups.yaml index 6e1fa8a55..29637c8f5 100644 --- a/samples/excel/85-preview-apis/shape-groups.yaml +++ b/samples/excel/85-preview-apis/shape-groups.yaml @@ -1,4 +1,4 @@ -order: 16 +order: 17 id: excel-shape-groups name: Shape groups description: Groups and ungroups shapes. diff --git a/samples/excel/85-preview-apis/shape-images.yaml b/samples/excel/85-preview-apis/shape-images.yaml index 188d05cff..0aba1a364 100644 --- a/samples/excel/85-preview-apis/shape-images.yaml +++ b/samples/excel/85-preview-apis/shape-images.yaml @@ -1,4 +1,4 @@ -order: 8 +order: 9 id: excel-shape-images name: Image shapes description: Creates and adjusts image-based shapes. diff --git a/samples/excel/85-preview-apis/shape-lines.yaml b/samples/excel/85-preview-apis/shape-lines.yaml index c7990dbf2..d3acd5e9f 100644 --- a/samples/excel/85-preview-apis/shape-lines.yaml +++ b/samples/excel/85-preview-apis/shape-lines.yaml @@ -1,4 +1,4 @@ -order: 10 +order: 11 id: excel-shape-lines name: Lines description: Creates and modifies line shapes. diff --git a/samples/excel/85-preview-apis/shape-move-and-order.yaml b/samples/excel/85-preview-apis/shape-move-and-order.yaml index 25dfc5154..bbcb5425e 100644 --- a/samples/excel/85-preview-apis/shape-move-and-order.yaml +++ b/samples/excel/85-preview-apis/shape-move-and-order.yaml @@ -1,4 +1,4 @@ -order: 11 +order: 12 id: excel-shape-move-and-order name: Move and order shapes description: Moves created shapes around the worksheet and adjusts their z-order. diff --git a/samples/excel/85-preview-apis/shape-textboxes.yaml b/samples/excel/85-preview-apis/shape-textboxes.yaml index b8d9d8c88..e8149a11a 100644 --- a/samples/excel/85-preview-apis/shape-textboxes.yaml +++ b/samples/excel/85-preview-apis/shape-textboxes.yaml @@ -1,4 +1,4 @@ -order: 18 +order: 19 id: excel-shape-textboxes name: Textboxes description: Creates a textbox shape and works with the text in it and other shapes. diff --git a/samples/excel/85-preview-apis/tetrominos.yaml b/samples/excel/85-preview-apis/tetrominos.yaml index 663587e21..7a8aa1a6c 100644 --- a/samples/excel/85-preview-apis/tetrominos.yaml +++ b/samples/excel/85-preview-apis/tetrominos.yaml @@ -1,4 +1,4 @@ -order: 17 +order: 18 id: excel-just-for-fun-tetrominos name: Tetromino stacking description: Arrange moving tetromino shapes to form lines. 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 76191d8da..b52b65c8f 100644 --- a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml +++ b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml @@ -1,4 +1,4 @@ -order: 9 +order: 10 id: excel-workbook-insert-external-worksheets name: Insert external worksheets description: Inserts worksheets from another workbook into the current workbook. diff --git a/samples/excel/85-preview-apis/workbook-save-and-close.yaml b/samples/excel/85-preview-apis/workbook-save-and-close.yaml index e4dfa35f2..b005b513f 100644 --- a/samples/excel/85-preview-apis/workbook-save-and-close.yaml +++ b/samples/excel/85-preview-apis/workbook-save-and-close.yaml @@ -1,4 +1,4 @@ -order: 15 +order: 16 id: excel-workbook-save-and-close name: Save and close description: Saves and closes a workbook. diff --git a/samples/excel/85-preview-apis/worksheet-auto-filter.yaml b/samples/excel/85-preview-apis/worksheet-auto-filter.yaml new file mode 100644 index 000000000..029dd10d0 --- /dev/null +++ b/samples/excel/85-preview-apis/worksheet-auto-filter.yaml @@ -0,0 +1,163 @@ +order: 1 +id: excel-worksheet-auto-filter +name: AutoFilter +description: Adds an AutoFilter to a worksheet. +host: EXCEL +api_set: + ExcelApi: 1.9 +script: + content: | + $("#setup").click(() => tryCatch(setup)); + $("#add-auto-filter").click(() => tryCatch(addAutoFilter)); + $("#randomize-data").click(() => tryCatch(randomizeData)); + $("#refresh-auto-filter").click(() => tryCatch(refreshAutoFilter)); + $("#remove-auto-filter").click(() => tryCatch(removeAutoFilter)); + + async function addAutoFilter() { + 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(); + }); + } + + async function randomizeData() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const farmData = sheet.getUsedRange(); + farmData.load("rowCount"); + await context.sync(); + + for (let i = 1; i < farmData.rowCount; i++) { + farmData.getCell(i, 3).values = [[Math.round(Math.random() * 5000)]]; + } + + await context.sync(); + }); + } + + async function refreshAutoFilter() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + sheet.autoFilter.reapply(); + await context.sync(); + }); + } + + async function removeAutoFilter() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + sheet.autoFilter.remove(); + await context.sync(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + const dataSheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + + const data = [ + ["Farm", "Type", "Classification", "Crates Sold Wholesale"], + ["A Farms", "Lime", "Organic", 2000], + ["A Farms", "Lemon", "Organic", 1800], + ["A Farms", "Orange", "Organic", 2200], + ["B Farms", "Lime", "Conventional", 1000], + ["B Farms", "Lemon", "Conventional", 1230], + ["B Farms", "Orange", "Conventional", 800], + ["B Farms", "Orange", "Organic", 500], + ["B Farms", "Lemon", "Organic", 770], + ["B Farms", "Kiwi", "Conventional", 300], + ["B Farms", "Lime", "Organic", 400], + ["C Farms", "Apple", "Organic", 220], + ["C Farms", "Kiwi", "Organic", 120], + ["D Farms", "Apple", "Conventional", 3000], + ["D Farms", "Apple", "Organic", 2800], + ["E Farms", "Lime", "Conventional", 2700], + ["E Farms", "Orange", "Conventional", 2000], + ["E Farms", "Apple", "Conventional", 2200], + ["E Farms", "Kiwi", "Conventional", 1500], + ["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(); + }); + } + + /** 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 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.

    + +

    + +

    + 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 + + @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/samples/excel/85-preview-apis/worksheet-find-all.yaml b/samples/excel/85-preview-apis/worksheet-find-all.yaml index 63e31ca37..4a217138e 100644 --- a/samples/excel/85-preview-apis/worksheet-find-all.yaml +++ b/samples/excel/85-preview-apis/worksheet-find-all.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 8 id: excel-worksheet-find-all name: Find text matches within a worksheet description: Finds cells within a worksheet based on string matching. diff --git a/samples/excel/85-preview-apis/worksheet-page-layout.yaml b/samples/excel/85-preview-apis/worksheet-page-layout.yaml index 151319d56..5415f6619 100644 --- a/samples/excel/85-preview-apis/worksheet-page-layout.yaml +++ b/samples/excel/85-preview-apis/worksheet-page-layout.yaml @@ -1,4 +1,4 @@ -order: 12 +order: 13 id: excel-worksheet-page-layout name: Page layout and print settings description: Changes the page layout and other settings for printing a worksheet. diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 1c46ba7814701f7addf33508444764fc68b9d974..0c8b0caa435ad3a86e2257707abc3999d3f9073a 100644 GIT binary patch delta 10083 zcmY*<1yCNrvM%l(+@0X=?(XjHuE7^~g8WE=hv4om!GpWI1PJafkDPPs-g;Y8TeH32 zbkFp3_f+-tPC9tgH}Dz-SZEAlH?}H}Dl8$e>72=e7MR=c4*r-O@<^nimK0{2)K;q3 zepl<(14SQ{?27)KItv3e~|(h za7gs1IWR24%OU8hmSwECIq=uu_v(2_L=E_{cRe5i4H)u+uiQ4A}byeul&@@m3 zs0QNwP3L1-+(aS*H5sLSa4~Vz35%I&h*v71C*aS6q+9S?368i~v=}WLVRkx9EqjH0 zkT%CMPw{~c`ncV4Jr`WC=i*lkqF(@o#fyG9C=v^-teOxU7Ke9s{D=j7KdOkm0JL#o zSNExx4hzms!KNzFwljWPk3u_(If=3glNfAx1k>UBn^e)8^?YkiZz94arn>!NuPzLj zUvzX;P^(EVVAc?L(2TOi}C0|WJ`}ryO ztF`Wyt|Zed6aF*ZOR?SQz_;(dZ|2|pmG!;~%{RxL{gKzYnZZ5N(Z2`?QQ*EJO7!Hx zt1&v0z9*vBNG0V)=m4G4TV?_XJp4=3QYGE{X?a6`dhe~@=r}|x%zbeqFqv!rJ|wlv zT#lj6dhA)eO4)UY2CeZBoa)>jr+E@-y1Yo2D{&C2pdWuWGc>6j&EVQEnD{Z_i%*YX zwhDiXI(Rh(wW;6Kmy#+om zvxY=Dz1&I{{f86OaI*{5d)}WA8Jn`7q+5t})C&s@_HT&wm}LtuCLyz|bSX zz;MAp`ZD-Hmf@-s!7zFNY9c`T-~v~mO>X}U0blof|4KoXBDSVq_4lP?=!;)l zBu4Q>X;rjcu!F;+M&kr#`SXoq%z5C$-2=;m8jZy1@Nmb-#`RqmHJ@C@kUVVEx`?m`y%Mf+gc4;Ht;2xiyxA9n6*G^cS zU41I$lh~^g5^~CX*uC66yz!`LYOb8!?JL1eu>Lu8`o<#A?BeOKNN~Hp9;oejw0kpo~y)MDR^cyyS97x@b`K))A02HGqYt`_$2e(@n>Jp?%B~nLgZ6R zr%x0x`O2u!)ZWu<{$h;&PH!Bj_=LKui;$eDuWk7uK0RPYcNzk`Mi3(4Pfv7sUxiBb{4`Mcp10o z((Qh{*zVgKw`+u}M-_GoG*C=`C+Y&ev?l<$F1}?wwQcRhfpFTHHQ$h>&o>+KZYBe6 zZzcwNU4)N_U*$`$XlYGTYu#kbtl69A6!U98u@Do~xBF&7B-Gp8ihG8`f75 z6VEt*Q;ZBfty%_31EV7r`!d^XkA^I!y+WwpX4h-qD)|~1R*cgg3bm#m)_%7xcSis| zN8;~Jx%sbTLcNDqNLS~~lh^92wt>7TPUY>V2a)^Ew~NA>&k6U@9tBJLYxAe~ik>S2 zN@ygfj;x9)Ubo^7RhBiI*{BEb z_$o=TKi;(bp{j~*6f>MyQQiSm1{9rbx~8lIOC+^?T_xPGZA2l5S1;NyiWl{Ft&bD`-bFG+%{>0I zyQD|b2Z*@PWYXkeX?GOE$wn~IzND)n*{u|qaz{=w>A9JbU{sB))B{tX3K1tn58mVFS7 z)|R0hcEOf~7|KP6hiCkT`x65f)R#%fpOP-ax^-tyc_=Ku5V1^yI8A{t#$F~zM73}> zbQtfRdgz;lupU1rbgyWGjI%pQ+$~gjy0~G|# ztdWMvI0bB2>N�_wEj8+J3|8|%B|rs-$Uw90tBc}BshsGXdqHvU#)lcDl2$)4$b z;c6K0$3n0ZRFexer!#<_a?4G1)ItdJl&l9QSCa2$m?!NwO*3>w%_tOX+R377Ji~2*)(F3(UUv(9tqXejA}w z^-r8O30V0hQh=rqslym4LV6dKJ-YEmFsTj|i}&$^*{&8u`%PschUOKe1GI|@Jkmr4 zbCV-fi^pI6I&AR$OB|C4*c(lcQd|4cu|nsdwdz{o*Rnw#tV?s#yb5nMCCm1TCoew22h*GZ-H5LDw@>R>N(P6%y%m z)>LKxK&}jiYH1aIzvVn8#9+EUKzbI2Y+7
    Ga1KfwSr!Z4k7vIR=-jtxjDN1>#|d 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index bc0b08376..8697f5f48 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -2913,6 +2913,26 @@ Excel.TableChangedEventArgs.details: + ` now is ${details.valueAfter}(${details.valueTypeAfter})`); }); } +Excel.Worksheet.autofilter: + - |- + 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.AutoFilter.apply: + - |- + 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(); + }); Word.InlinePicture.getBase64ImageSrc: - |- await Word.run(async (context) => { diff --git a/view/excel.json b/view/excel.json index 0a5378c5d..adaa097a1 100644 --- a/view/excel.json +++ b/view/excel.json @@ -69,6 +69,7 @@ "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-visibility.yaml", + "excel-worksheet-auto-filter": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/worksheet-auto-filter.yaml", "excel-comment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/comment.yaml", "excel-shape-create-and-delete": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/shape-create-and-delete.yaml", "excel-range-copyfrom": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-copyfrom.yaml", From f1dea0fabff0019b7440da6e43c62735fd21923e Mon Sep 17 00:00:00 2001 From: Rick-Kirkham Date: Thu, 11 Apr 2019 17:46:30 -0700 Subject: [PATCH 157/660] [Word] (search) fix search snippet to load the correct properties --- samples/word/25-paragraph/search.yaml | 6 ++++-- snippet-extractor-output/snippets.yaml | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/samples/word/25-paragraph/search.yaml b/samples/word/25-paragraph/search.yaml index 9b6e66579..5abdfbfed 100644 --- a/samples/word/25-paragraph/search.yaml +++ b/samples/word/25-paragraph/search.yaml @@ -15,7 +15,7 @@ script: async function basicSearch() { await Word.run(async (context) => { let results = context.document.body.search("Online"); - results.load("font/highlightColor"); + results.load("length"); await context.sync(); @@ -33,7 +33,7 @@ script: // 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 }); - results.load("font/highlightColor, font/color"); + results.load("length"); await context.sync(); @@ -60,6 +60,8 @@ script: "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" ); + + await context.sync(); }); } diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 8697f5f48..c4c683eda 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -2992,7 +2992,7 @@ Word.Body.search: - |- await Word.run(async (context) => { let results = context.document.body.search("Online"); - results.load("font/highlightColor"); + results.load("length"); await context.sync(); @@ -3008,7 +3008,7 @@ Word.Body.search: // 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 }); - results.load("font/highlightColor, font/color"); + results.load("length"); await context.sync(); From e589a7779aa26250b3ff1a463377f3128c63ca6c Mon Sep 17 00:00:00 2001 From: Rick-Kirkham Date: Thu, 11 Apr 2019 22:08:10 -0700 Subject: [PATCH 158/660] found another sample with the same problem --- .../insert-and-change-content-controls.yaml | 4 ++-- snippet-extractor-output/snippets.yaml | 4 ++-- 2 files changed, 4 insertions(+), 4 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 0c0bd30ab..653a520ca 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 @@ -41,8 +41,8 @@ script: // 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("color,title,appearance"); - oddContentControls.load("color,title,appearance"); + evenContentControls.load("length"); + oddContentControls.load("length"); await context.sync(); diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index c4c683eda..65c97869e 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -3251,8 +3251,8 @@ Word.ContentControl.set: // 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("color,title,appearance"); - oddContentControls.load("color,title,appearance"); + evenContentControls.load("length"); + oddContentControls.load("length"); await context.sync(); From 0e99db2001e9eb9f457a5fe1872d83b5bd19abc3 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 12 Apr 2019 17:07:33 -0700 Subject: [PATCH 159/660] Fix snippet mapping (#293) --- snippet-extractor-metadata/excel.xlsx | Bin 19510 -> 19511 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 0c8b0caa435ad3a86e2257707abc3999d3f9073a..35d8ea5988a0147a911d11c1390f2738e2b96d77 100644 GIT binary patch delta 6327 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 delta 6306 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 65c97869e..2deeaaada 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -2913,7 +2913,7 @@ Excel.TableChangedEventArgs.details: + ` now is ${details.valueAfter}(${details.valueTypeAfter})`); }); } -Excel.Worksheet.autofilter: +Excel.Worksheet.autoFilter: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); From c1ff4e5f3b6d7fdec6aa4d40122d6dc8968c8bd6 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Mon, 22 Apr 2019 10:26:51 -0700 Subject: [PATCH 160/660] [excel] (Comments) Make comment snippet more robust (#294) * Improve sample * Run npm install * Adding an additional comment * Fixing comment grammar * Fixing the coment reply actions and clarifying experience * Rerun npm start * Fix indentation * Rerun npm start --- samples/excel/85-preview-apis/comment.yaml | 80 +++++++++++++--------- snippet-extractor-output/snippets.yaml | 6 +- 2 files changed, 53 insertions(+), 33 deletions(-) diff --git a/samples/excel/85-preview-apis/comment.yaml b/samples/excel/85-preview-apis/comment.yaml index 1551a61cc..20531ae80 100644 --- a/samples/excel/85-preview-apis/comment.yaml +++ b/samples/excel/85-preview-apis/comment.yaml @@ -20,32 +20,34 @@ script: async function addCommentToSelectedCell() { await Excel.run(async (context) => { const selectedRange = context.workbook.getSelectedRange(); - selectedRange.load(["rowIndex", "columnIndex"]) - await context.sync(); - // Note that an InvalidArgument error will be thrown if multiple cells are selected - const singleCell = selectedRange.getCell(selectedRange.rowIndex, selectedRange.columnIndex); - context.workbook.comments.add("TODO: add headers here.", singleCell); + // Note that an InvalidArgument error will be thrown if multiple cells are selected. + context.workbook.comments.add("TODO: add headers here.", selectedRange); await context.sync(); }); } + async function addCommentToCell() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Comments"); + + // Note that an InvalidArgument error will be thrown if multiple cells passed to `comment.add`. sheet.comments.add("TODO: add data.", "A2"); await context.sync(); }); } + async function addCommentReply() { await Excel.run(async (context) => { - const comment = context.workbook.comments.getItemByCell("Comments!A1"); + const comment = context.workbook.comments.getItemAt(0); comment.replies.add("Do I have to?"); await context.sync(); }); } + async function getCommentMetadata() { await Excel.run(async (context) => { - const comment = context.workbook.comments.getItemByCell("Comments!A1"); + const comment = context.workbook.comments.getItemByCell("Comments!A2"); comment.load(["authorEmail", "authorName", "creationDate"]); await context.sync(); @@ -53,6 +55,7 @@ script: await context.sync(); }); } + async function editComment() { await Excel.run(async (context) => { const comment = context.workbook.comments.getItemAt(0); @@ -60,6 +63,7 @@ script: await context.sync(); }); } + async function editCommentReply() { await Excel.run(async (context) => { const comment = context.workbook.comments.getItemAt(0); @@ -71,12 +75,7 @@ script: await context.sync(); }); } - async function deleteComment() { - await Excel.run(async (context) => { - context.workbook.comments.getItemByCell("Comments!A2").delete(); - await context.sync(); - }); - } + async function deleteCommentReply() { await Excel.run(async (context) => { var comment = context.workbook.comments.getItemAt(0); @@ -87,6 +86,14 @@ script: await context.sync(); }); } + + async function deleteComment() { + await Excel.run(async (context) => { + context.workbook.comments.getItemByCell("Comments!A2").delete(); + await context.sync(); + }); + } + async function setup() { await Excel.run(async (context) => { await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Comments"); @@ -95,7 +102,9 @@ script: await context.sync(); }); } - /** Default helper for invoking an action and handling errors. */ async function tryCatch(callback) { + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); } catch (error) { @@ -107,40 +116,49 @@ script: template: content: |-
    -

    This sample shows how to add and edit comments.

    +

    This sample shows how to add and edit comments.

    -

    Setup

    -

    Try it out

    +

    Press the buttons in order to add, edit, and remove comments and replies. Check the worksheet after each button to see the effects.

    + +

    + +

    + Add comment reply to first comment + +

    + +

    + Edit first comment + +

    -

    + Edit first comment reply + +

    + Delete first comment reply + +

    + +

    language: html style: diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 2deeaaada..a827e153f 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -381,7 +381,7 @@ Excel.Comment.delete: Excel.Comment.load_2: - |- await Excel.run(async (context) => { - const comment = context.workbook.comments.getItemByCell("Comments!A1"); + const comment = context.workbook.comments.getItemByCell("Comments!A2"); comment.load(["authorEmail", "authorName", "creationDate"]); await context.sync(); @@ -392,6 +392,8 @@ Excel.CommentCollection.add: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Comments"); + + // Note that an InvalidArgument error will be thrown if multiple cells passed to `comment.add`. sheet.comments.add("TODO: add data.", "A2"); await context.sync(); }); @@ -415,7 +417,7 @@ Excel.CommentReply.delete: Excel.CommentReplyCollection.add: - |- await Excel.run(async (context) => { - const comment = context.workbook.comments.getItemByCell("Comments!A1"); + const comment = context.workbook.comments.getItemAt(0); comment.replies.add("Do I have to?"); await context.sync(); }); From f1d271feba700e215c58e66a95470a7c37854af4 Mon Sep 17 00:00:00 2001 From: David Chesnut Date: Tue, 23 Apr 2019 17:35:37 -0700 Subject: [PATCH 161/660] added streaming custom function --- playlists/excel.yaml | 9 ++++++ .../streaming-function.yaml | 31 +++++++++++++++++++ view/excel.json | 1 + 3 files changed, 41 insertions(+) create mode 100644 samples/excel/16-custom-functions/streaming-function.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index a95da534e..88a1899be 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -164,6 +164,15 @@ 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////samples/excel/16-custom-functions/streaming-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 diff --git a/samples/excel/16-custom-functions/streaming-function.yaml b/samples/excel/16-custom-functions/streaming-function.yaml new file mode 100644 index 000000000..69250b60f --- /dev/null +++ b/samples/excel/16-custom-functions/streaming-function.yaml @@ -0,0 +1,31 @@ +order: 2 +id: excel-custom-functions-streaming +name: Streaming function +description: A streaming function that continuously increments the cell value. +host: EXCEL +api_set: + CustomFunctionsRuntime: 1.1 +script: + content: | + /** @CustomFunction + * @description Increments the cell with a given amount at a specified interval in milliseconds. + * @param amount - The amount to add to the cell value on each increment. + * @param interval - The time in milliseconds to wait before the next increment on the cell. + * @returns An incrementing value. + * @streaming + */ + function increment(amount: number, interval: number, handler: CustomFunctions.StreamingInvocation): void { + let result = 0; + const timer = setInterval( () => { + result += amount; + handler.setResult(result); + }, interval); + + handler.onCanceled = () => { + clearInterval(timer); + } + } +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/view/excel.json b/view/excel.json index adaa097a1..8cb1f2fae 100644 --- a/view/excel.json +++ b/view/excel.json @@ -17,6 +17,7 @@ "excel-range-conditional-formatting-basic": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml", "excel-range-conditional-formatting-advanced": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml", "excel-custom-functions-volatile": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/16-custom-functions/volatile-function.yaml", + "excel-custom-functions-streaming": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/16-custom-functions/streaming-function.yaml", "excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml", "excel-chart-chart-title-js": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/private-samples/excel/20-chart/chart-title-js.yaml", From 81f1fe4928453fe4850327720f230bd258b4ef5f Mon Sep 17 00:00:00 2001 From: Michael Zlatkovsky Date: Wed, 24 Apr 2019 13:22:43 -0700 Subject: [PATCH 162/660] Update streaming-function.yaml --- samples/excel/16-custom-functions/streaming-function.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/samples/excel/16-custom-functions/streaming-function.yaml b/samples/excel/16-custom-functions/streaming-function.yaml index 69250b60f..b3d8e093d 100644 --- a/samples/excel/16-custom-functions/streaming-function.yaml +++ b/samples/excel/16-custom-functions/streaming-function.yaml @@ -25,7 +25,8 @@ script: clearInterval(timer); } } + 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 + core-js@2.4.1/client/core.min.js From 2f134ace3e1d4584b4bbaa15a2c538127563e6d8 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 25 Apr 2019 13:56:02 -0700 Subject: [PATCH 163/660] [excel] (PivotTable, Slicer) Adding a slicer snippet (#296) * Adding slicer snippet * Update with feedback --- playlists/excel.yaml | 9 + .../85-preview-apis/pivottable-slicer.yaml | 215 ++++++++++++++++++ .../85-preview-apis/shape-textboxes.yaml | 2 +- samples/excel/85-preview-apis/tetrominos.yaml | 2 +- snippet-extractor-metadata/excel.xlsx | Bin 19511 -> 19768 bytes snippet-extractor-output/snippets.yaml | 123 +++++++--- view/excel.json | 1 + 7 files changed, 319 insertions(+), 33 deletions(-) create mode 100644 samples/excel/85-preview-apis/pivottable-slicer.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index a95da534e..aad859c74 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -799,6 +799,15 @@ group: Preview APIs api_set: ExcelApi: 1.9 +- id: excel-pivottable-slicer + name: Slicer + fileName: pivottable-slicer.yaml + description: Adds a slicer to a PivotTable. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/85-preview-apis/pivottable-slicer.yaml + group: Preview APIs + api_set: + ExcelApi: 1.9 - id: excel-just-for-fun-tetrominos name: Tetromino stacking fileName: tetrominos.yaml diff --git a/samples/excel/85-preview-apis/pivottable-slicer.yaml b/samples/excel/85-preview-apis/pivottable-slicer.yaml new file mode 100644 index 000000000..c6024b6c0 --- /dev/null +++ b/samples/excel/85-preview-apis/pivottable-slicer.yaml @@ -0,0 +1,215 @@ +order: 18 +id: excel-pivottable-slicer +name: Slicer +description: Adds a slicer to a PivotTable. +host: EXCEL +api_set: + ExcelApi: 1.9 +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)); + + async function addSlicer() { + 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 data source to filter by. For PivotTables, this can be a PivotField object reference or ID. */ + ); + slicer.name = "Fruit Slicer"; + await context.sync(); + }); + } + + async function formatSlicer() { + await Excel.run(async (context) => { + const slicer = context.workbook.slicers.getItem("Fruit Slicer"); + slicer.caption = "Fruit Types"; + slicer.left = 395; + slicer.top = 15; + slicer.height = 135; + slicer.width = 150; + await context.sync(); + }); + } + + async function applyStyle() { + await Excel.run(async (context) => { + const slicer = context.workbook.slicers.getItem("Fruit Slicer"); + slicer.style = "SlicerStyleLight6"; + await context.sync(); + }); + } + + async function addFilters() { + await Excel.run(async (context) => { + const slicer = context.workbook.slicers.getItem("Fruit Slicer"); + slicer.selectItems(["Lemon", "Lime", "Orange"]); + await context.sync(); + }); + } + + async function removeFilters() { + await Excel.run(async (context) => { + const slicer = context.workbook.slicers.getItem("Fruit Slicer"); + slicer.clearFilters(); + await context.sync(); + }); + } + + async function removeSlicer() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + sheet.slicers.getItemAt(0).delete(); + await context.sync(); + }); + } + + async function addPivotTable() { + await Excel.run(async (context) => { + 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.dataHierarchies.add(pivotTable.hierarchies.getItem("Crates Sold at Farm")); + pivotTable.dataHierarchies.add(pivotTable.hierarchies.getItem("Crates Sold Wholesale")); + await context.sync(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + const sheetData = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Data"); + const sheetPivot = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "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", 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 = sheetData.getRange("A1:E21"); + range.values = data; + range.format.autofitColumns(); + + sheetPivot.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 a slicer on a PivotTable.

    +
    + +
    +

    Setup

    + +

    + +

    +
    +

    Try it out

    +

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

    + +

    +

    Formatting

    + +

    + +

    +

    Data

    + +

    + +

    +

    Clean up

    + +
    + 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 + + @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/samples/excel/85-preview-apis/shape-textboxes.yaml b/samples/excel/85-preview-apis/shape-textboxes.yaml index e8149a11a..42585811a 100644 --- a/samples/excel/85-preview-apis/shape-textboxes.yaml +++ b/samples/excel/85-preview-apis/shape-textboxes.yaml @@ -1,4 +1,4 @@ -order: 19 +order: 20 id: excel-shape-textboxes name: Textboxes description: Creates a textbox shape and works with the text in it and other shapes. diff --git a/samples/excel/85-preview-apis/tetrominos.yaml b/samples/excel/85-preview-apis/tetrominos.yaml index 7a8aa1a6c..aaafc593b 100644 --- a/samples/excel/85-preview-apis/tetrominos.yaml +++ b/samples/excel/85-preview-apis/tetrominos.yaml @@ -1,4 +1,4 @@ -order: 18 +order: 19 id: excel-just-for-fun-tetrominos name: Tetromino stacking description: Arrange moving tetromino shapes to form lines. diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 35d8ea5988a0147a911d11c1390f2738e2b96d77..ab43a7fcb6836602cc06953d2e098c303b70b29c 100644 GIT binary patch delta 10251 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 b9H%G@Q}hWup(q4nDG5eZqCp6e`3Lhq3*u$w diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index a827e153f..2ef663825 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -26,6 +26,16 @@ Excel.Application.suspendScreenUpdatingUntilNextSync: console.log(`Ending. Adding ${rowCount * columnCount} cells took ${Date.now() - startTime} milliseconds`); }); +Excel.AutoFilter.apply: + - |- + 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.Binding.onDataChanged: - |- await Excel.run(async (context) => { @@ -2292,6 +2302,56 @@ Excel.ShowAsRule.baseItem: wholesaleDataHierarchy.showAs = wholesaleShowAs; await context.sync(); }); +Excel.Slicer.style: + - |- + await Excel.run(async (context) => { + const slicer = context.workbook.slicers.getItem("Fruit Slicer"); + slicer.style = "SlicerStyleLight6"; + await context.sync(); + }); +Excel.Slicer.selectItems: + - |- + await Excel.run(async (context) => { + const slicer = context.workbook.slicers.getItem("Fruit Slicer"); + slicer.selectItems(["Lemon", "Lime", "Orange"]); + await context.sync(); + }); +Excel.Slicer.clearFilters: + - |- + await Excel.run(async (context) => { + const slicer = context.workbook.slicers.getItem("Fruit Slicer"); + slicer.clearFilters(); + await context.sync(); + }); +Excel.Slicer.delete: + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + sheet.slicers.getItemAt(0).delete(); + await context.sync(); + }); +Excel.SlicerCollection.add: + - |- + 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 data source to filter by. For PivotTables, this can be a PivotField object reference or ID. */ + ); + slicer.name = "Fruit Slicer"; + await context.sync(); + }); +Excel.SlicerCollection.getItem: + - |- + await Excel.run(async (context) => { + const slicer = context.workbook.slicers.getItem("Fruit Slicer"); + slicer.caption = "Fruit Types"; + slicer.left = 395; + slicer.top = 15; + slicer.height = 135; + slicer.width = 150; + await context.sync(); + }); Excel.Style.delete: - |- await Excel.run(async (context) => { @@ -2443,6 +2503,17 @@ Excel.TableChangedEventArgs.worksheetId: console.log("Worksheet Id : " + worksheet.name); }); } +Excel.TableChangedEventArgs.details: + - |- + async function onTableChanged(eventArgs: Excel.TableChangedEventArgs) { + await Excel.run(async (context) => { + const details = eventArgs.details; + const address = eventArgs.address; + + console.log(`Change at ${address}: was ${details.valueBefore}(${details.valueTypeBefore}),` + + ` now is ${details.valueAfter}(${details.valueTypeAfter})`); + }); + } Excel.TableCollection.onChanged: - |- await Excel.run(async (context) => { @@ -2699,6 +2770,27 @@ Excel.Worksheet.tabColor: const activeSheet = context.workbook.worksheets.getActiveWorksheet(); activeSheet.tabColor = "#FF0000"; + await context.sync(); + }); +Excel.Worksheet.autoFilter: + - |- + 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.slicers: + - |- + 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 data source to filter by. For PivotTables, this can be a PivotField object reference or ID. */ + ); + slicer.name = "Fruit Slicer"; await context.sync(); }); Excel.WorksheetAddedEventArgs.worksheetId: @@ -2904,37 +2996,6 @@ Excel.WorksheetProtection.unprotect: let activeSheet = context.workbook.worksheets.getActiveWorksheet(); activeSheet.protection.unprotect(password); }); -Excel.TableChangedEventArgs.details: - - |- - async function onTableChanged(eventArgs: Excel.TableChangedEventArgs) { - await Excel.run(async (context) => { - const details = eventArgs.details; - const address = eventArgs.address; - - console.log(`Change at ${address}: was ${details.valueBefore}(${details.valueTypeBefore}),` - + ` now is ${details.valueAfter}(${details.valueTypeAfter})`); - }); - } -Excel.Worksheet.autoFilter: - - |- - 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.AutoFilter.apply: - - |- - 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(); - }); Word.InlinePicture.getBase64ImageSrc: - |- await Word.run(async (context) => { diff --git a/view/excel.json b/view/excel.json index adaa097a1..be66d202a 100644 --- a/view/excel.json +++ b/view/excel.json @@ -86,6 +86,7 @@ "excel-range-remove-duplicates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-remove-duplicates.yaml", "excel-workbook-save-and-close": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-save-and-close.yaml", "excel-shape-groups": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/shape-groups.yaml", + "excel-pivottable-slicer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/pivottable-slicer.yaml", "excel-just-for-fun-tetrominos": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/tetrominos.yaml", "excel-shape-textboxes": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/shape-textboxes.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/report-generation.yaml", From a2b6c8e06d74e6204374a22876f9e80ba99852fa Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Mon, 29 Apr 2019 17:33:56 -0700 Subject: [PATCH 164/660] [excel] (PivotTable) Minor slicer text fixes (#299) * Slicer clarification --- samples/excel/85-preview-apis/pivottable-slicer.yaml | 2 +- snippet-extractor-output/snippets.yaml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/samples/excel/85-preview-apis/pivottable-slicer.yaml b/samples/excel/85-preview-apis/pivottable-slicer.yaml index c6024b6c0..c466feca1 100644 --- a/samples/excel/85-preview-apis/pivottable-slicer.yaml +++ b/samples/excel/85-preview-apis/pivottable-slicer.yaml @@ -21,7 +21,7 @@ script: 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 data source to filter by. For PivotTables, this can be a PivotField object reference or ID. */ + "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(); diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 2ef663825..924996a04 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -2336,7 +2336,7 @@ Excel.SlicerCollection.add: 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 data source to filter by. For PivotTables, this can be a PivotField object reference or ID. */ + "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(); @@ -2788,7 +2788,7 @@ Excel.Worksheet.slicers: 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 data source to filter by. For PivotTables, this can be a PivotField object reference or ID. */ + "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(); From bd751b2d8e55985bfa7212544b9c057c7d36be86 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 1 May 2019 17:00:45 -0700 Subject: [PATCH 165/660] [excel] (ExcelApi 1.9) Moving 1.9 snipets out of preview (#300) * Merging to prod (#291) * Fixed Errors in README.md (#278) - Hedging - Remove pronouns for clarity - Removed excess use of that - Removed contractions to make more formal * [excel] (Worksheet) Adding a sample for a worksheet autofilter (#290) * Adding a sample for a worksheet autofilter * Simplifying setup code * Pulling Excel 1.9 snippets into release --- playlists/excel.yaml | 318 +++++++++--------- .../data-change-event-details.yaml | 8 +- .../30-events/events-disable-events.yaml | 2 +- .../excel/30-events/events-table-changed.yaml | 2 +- .../events-tablecollection-changed.yaml | 2 +- ...nts-workbook-and-worksheet-collection.yaml | 2 +- samples/excel/30-events/events-worksheet.yaml | 2 +- samples/excel/42-range/formatting.yaml | 2 +- .../42-range/insert-delete-clear-range.yaml | 2 +- .../range-areas.yaml | 6 +- .../range-copyfrom.yaml | 6 +- .../range-find.yaml | 6 +- samples/excel/42-range/range-hyperlink.yaml | 2 +- .../excel/42-range/range-relationships.yaml | 2 +- .../range-remove-duplicates.yaml | 6 +- .../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/used-range.yaml | 2 +- .../shape-create-and-delete.yaml | 6 +- .../shape-groups.yaml | 6 +- .../shape-images.yaml | 6 +- .../shape-lines.yaml | 6 +- .../shape-move-and-order.yaml | 6 +- .../shape-textboxes.yaml | 6 +- .../comment.yaml | 6 +- .../excel/50-workbook/create-workbook.yaml | 2 +- .../excel/50-workbook/data-protection.yaml | 2 +- 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 +- .../worksheet-auto-filter.yaml | 6 +- .../excel/54-worksheet/worksheet-copy.yaml | 2 +- .../worksheet-find-all.yaml | 6 +- .../54-worksheet/worksheet-freeze-panes.yaml | 2 +- .../worksheet-page-layout.yaml | 6 +- .../54-worksheet/worksheet-range-cell.yaml | 2 +- .../54-worksheet/worksheet-visibility.yaml | 2 +- .../85-preview-apis/pivottable-slicer.yaml | 4 +- .../workbook-insert-external-worksheets.yaml | 4 +- .../workbook-save-and-close.yaml | 4 +- .../90-scenarios/multiple-property-set.yaml | 2 +- .../performance-optimization.yaml | 6 +- .../excel/90-scenarios/report-generation.yaml | 2 +- .../90-scenarios/working-with-dates.yaml | 2 +- .../excel/99-just-for-fun/color-wheel.yaml | 2 +- .../tetrominos.yaml | 8 +- snippet-extractor-metadata/excel.xlsx | Bin 19768 -> 19817 bytes snippet-extractor-output/snippets.yaml | 13 + view/excel.json | 34 +- 51 files changed, 275 insertions(+), 262 deletions(-) rename samples/excel/{85-preview-apis => 30-events}/data-change-event-details.yaml (97%) rename samples/excel/{85-preview-apis => 42-range}/range-areas.yaml (98%) rename samples/excel/{85-preview-apis => 42-range}/range-copyfrom.yaml (98%) rename samples/excel/{85-preview-apis => 42-range}/range-find.yaml (98%) rename samples/excel/{85-preview-apis => 42-range}/range-remove-duplicates.yaml (97%) rename samples/excel/{85-preview-apis => 44-shape}/shape-create-and-delete.yaml (98%) rename samples/excel/{85-preview-apis => 44-shape}/shape-groups.yaml (98%) rename samples/excel/{85-preview-apis => 44-shape}/shape-images.yaml (98%) rename samples/excel/{85-preview-apis => 44-shape}/shape-lines.yaml (98%) rename samples/excel/{85-preview-apis => 44-shape}/shape-move-and-order.yaml (98%) rename samples/excel/{85-preview-apis => 44-shape}/shape-textboxes.yaml (98%) rename samples/excel/{85-preview-apis => 50-workbook}/comment.yaml (98%) rename samples/excel/{85-preview-apis => 54-worksheet}/worksheet-auto-filter.yaml (98%) rename samples/excel/{85-preview-apis => 54-worksheet}/worksheet-find-all.yaml (98%) rename samples/excel/{85-preview-apis => 54-worksheet}/worksheet-page-layout.yaml (98%) rename samples/excel/{85-preview-apis => 90-scenarios}/performance-optimization.yaml (97%) rename samples/excel/{85-preview-apis => 99-just-for-fun}/tetrominos.yaml (99%) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index aad859c74..e4451f1d0 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -245,6 +245,15 @@ group: Events api_set: ExcelApi: 1.3 +- 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////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 @@ -339,6 +348,36 @@ group: PivotTable api_set: ExcelApi: 1.8 +- id: excel-range-copyfrom + name: Copy and paste ranges + fileName: range-copyfrom.yaml + description: Copies data and formatting from one range to another. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/42-range/range-copyfrom.yaml + group: Range + api_set: + ExcelAPI: 1.9 +- 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////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////samples/excel/42-range/range-find.yaml + group: Range + api_set: + ExcelAPI: 1.9 - id: excel-range-formatting name: Formatting fileName: formatting.yaml @@ -377,6 +416,15 @@ group: Range api_set: ExcelApi: 1.1 +- 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////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 @@ -415,6 +463,62 @@ group: Range api_set: ExcelApi: 1.1 +- 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////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////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////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////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////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////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 @@ -527,6 +631,15 @@ group: Workbook api_set: ExcelApi: 1.4 +- id: excel-comment + name: Comments + fileName: comment.yaml + description: 'Adds, edits, and removes comments and comment replies.' + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/50-workbook/comment.yaml + group: Workbook + api_set: + ExcelApi: 1.9 - id: excel-workbook-create-workbook name: Create workbook fileName: create-workbook.yaml @@ -565,6 +678,15 @@ 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////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 @@ -574,6 +696,15 @@ 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////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 @@ -614,6 +745,15 @@ 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////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 @@ -641,92 +781,6 @@ 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////samples/excel/85-preview-apis/worksheet-auto-filter.yaml - group: Preview APIs - api_set: - ExcelApi: 1.9 -- id: excel-comment - name: Comments - fileName: comment.yaml - description: 'Adds, edits, and removes comments and comment replies.' - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/85-preview-apis/comment.yaml - group: Preview APIs - api_set: - ExcelApi: 1.9 -- 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////samples/excel/85-preview-apis/shape-create-and-delete.yaml - group: Preview APIs - api_set: - ExcelApi: 1.9 -- id: excel-range-copyfrom - name: Copy and paste ranges - fileName: range-copyfrom.yaml - description: Copies data and formatting from one range to another. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/85-preview-apis/range-copyfrom.yaml - group: Preview APIs - api_set: - ExcelAPI: 1.9 -- id: excel-data-change-event-details - name: Data change 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////samples/excel/85-preview-apis/data-change-event-details.yaml - group: Preview APIs - api_set: - ExcelApi: 1.9 -- 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////samples/excel/85-preview-apis/range-areas.yaml - group: Preview APIs - 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////samples/excel/85-preview-apis/range-find.yaml - group: Preview APIs - api_set: - ExcelAPI: 1.9 -- 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////samples/excel/85-preview-apis/worksheet-find-all.yaml - group: Preview APIs - 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////samples/excel/85-preview-apis/shape-images.yaml - group: Preview APIs - api_set: - ExcelApi: 1.9 - id: excel-workbook-insert-external-worksheets name: Insert external worksheets fileName: workbook-insert-external-worksheets.yaml @@ -735,52 +789,7 @@ https://raw.githubusercontent.com////samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml group: Preview APIs 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////samples/excel/85-preview-apis/shape-lines.yaml - group: Preview APIs - 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////samples/excel/85-preview-apis/shape-move-and-order.yaml - group: Preview APIs - api_set: - ExcelApi: 1.9 -- 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////samples/excel/85-preview-apis/worksheet-page-layout.yaml - group: Preview APIs - api_set: - ExcelAPI: 1.9 -- 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////samples/excel/85-preview-apis/performance-optimization.yaml - group: Preview APIs - api_set: - ExcelApi: 1.9 -- 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////samples/excel/85-preview-apis/range-remove-duplicates.yaml - group: Preview APIs - api_set: - ExcelAPI: 1.9 + ExcelAPI: 2 - id: excel-workbook-save-and-close name: Save and close fileName: workbook-save-and-close.yaml @@ -789,16 +798,7 @@ https://raw.githubusercontent.com////samples/excel/85-preview-apis/workbook-save-and-close.yaml group: Preview APIs 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////samples/excel/85-preview-apis/shape-groups.yaml - group: Preview APIs - api_set: - ExcelApi: 1.9 + ExcelAPI: 2 - id: excel-pivottable-slicer name: Slicer fileName: pivottable-slicer.yaml @@ -807,25 +807,16 @@ https://raw.githubusercontent.com////samples/excel/85-preview-apis/pivottable-slicer.yaml group: Preview APIs api_set: - ExcelApi: 1.9 -- 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////samples/excel/85-preview-apis/tetrominos.yaml - group: Preview APIs - api_set: - ExcelApi: 1.8 -- 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. + ExcelApi: 2 +- 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////samples/excel/85-preview-apis/shape-textboxes.yaml - group: Preview APIs + https://raw.githubusercontent.com////samples/excel/90-scenarios/performance-optimization.yaml + group: Scenarios api_set: - ExcelAPI: 1.9 + ExcelApi: 1.9 - id: excel-scenarios-report-generation name: Report generation fileName: report-generation.yaml @@ -890,6 +881,15 @@ group: Just For Fun api_set: ExcelApi: 1.2 +- 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////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 diff --git a/samples/excel/85-preview-apis/data-change-event-details.yaml b/samples/excel/30-events/data-change-event-details.yaml similarity index 97% rename from samples/excel/85-preview-apis/data-change-event-details.yaml rename to samples/excel/30-events/data-change-event-details.yaml index 2878857a7..b16220ab0 100644 --- a/samples/excel/85-preview-apis/data-change-event-details.yaml +++ b/samples/excel/30-events/data-change-event-details.yaml @@ -1,6 +1,6 @@ -order: 5 +order: 4 id: excel-data-change-event-details -name: Data change details +name: Data change event details description: Uses the onChanged event of a table to determine the specifics of changes. host: EXCEL api_set: @@ -103,8 +103,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/events-disable-events.yaml b/samples/excel/30-events/events-disable-events.yaml index d568a3637..77e73e4bb 100644 --- a/samples/excel/30-events/events-disable-events.yaml +++ b/samples/excel/30-events/events-disable-events.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 5 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-table-changed.yaml b/samples/excel/30-events/events-table-changed.yaml index 26aaaf4ea..7556f7997 100644 --- a/samples/excel/30-events/events-table-changed.yaml +++ b/samples/excel/30-events/events-table-changed.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 6 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 9beee1aa8..8702e0948 100644 --- a/samples/excel/30-events/events-tablecollection-changed.yaml +++ b/samples/excel/30-events/events-tablecollection-changed.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 7 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-and-worksheet-collection.yaml b/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml index e8111443a..fa5334892 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: 7 +order: 8 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.yaml b/samples/excel/30-events/events-worksheet.yaml index b192471c8..3b66422f5 100644 --- a/samples/excel/30-events/events-worksheet.yaml +++ b/samples/excel/30-events/events-worksheet.yaml @@ -1,4 +1,4 @@ -order: 8 +order: 9 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/42-range/formatting.yaml b/samples/excel/42-range/formatting.yaml index 71f6c15fd..17cd4bf0e 100644 --- a/samples/excel/42-range/formatting.yaml +++ b/samples/excel/42-range/formatting.yaml @@ -1,4 +1,4 @@ -order: 1 +order: 4 id: excel-range-formatting name: Formatting description: Formats a range. diff --git a/samples/excel/42-range/insert-delete-clear-range.yaml b/samples/excel/42-range/insert-delete-clear-range.yaml index 831092b40..9bf7ec205 100644 --- a/samples/excel/42-range/insert-delete-clear-range.yaml +++ b/samples/excel/42-range/insert-delete-clear-range.yaml @@ -1,4 +1,4 @@ -order: 3 +order: 6 id: excel-range-insert-delete-and-clear-range name: 'Insert, delete, and clear' description: 'Inserts, deletes, and clears a range.' diff --git a/samples/excel/85-preview-apis/range-areas.yaml b/samples/excel/42-range/range-areas.yaml similarity index 98% rename from samples/excel/85-preview-apis/range-areas.yaml rename to samples/excel/42-range/range-areas.yaml index 1c079bbce..d3b690bd3 100644 --- a/samples/excel/85-preview-apis/range-areas.yaml +++ b/samples/excel/42-range/range-areas.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 2 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.' @@ -172,8 +172,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-copyfrom.yaml b/samples/excel/42-range/range-copyfrom.yaml similarity index 98% rename from samples/excel/85-preview-apis/range-copyfrom.yaml rename to samples/excel/42-range/range-copyfrom.yaml index aeca983b0..dd6f2db12 100644 --- a/samples/excel/85-preview-apis/range-copyfrom.yaml +++ b/samples/excel/42-range/range-copyfrom.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 1 id: excel-range-copyfrom name: Copy and paste ranges description: Copies data and formatting from one range to another. @@ -194,8 +194,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-find.yaml b/samples/excel/42-range/range-find.yaml similarity index 98% rename from samples/excel/85-preview-apis/range-find.yaml rename to samples/excel/42-range/range-find.yaml index bb3689993..b64c6ebc6 100644 --- a/samples/excel/85-preview-apis/range-find.yaml +++ b/samples/excel/42-range/range-find.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 3 id: excel-range-find name: Find text matches within a range description: Finds a cell within a range based on string matching. @@ -159,8 +159,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/42-range/range-hyperlink.yaml b/samples/excel/42-range/range-hyperlink.yaml index fe58c17ca..ffdc4d42e 100644 --- a/samples/excel/42-range/range-hyperlink.yaml +++ b/samples/excel/42-range/range-hyperlink.yaml @@ -1,4 +1,4 @@ -order: 2 +order: 5 id: excel-range-hyperlink name: Hyperlinks description: 'Creates, updates, and clears hyperlinks in a range.' diff --git a/samples/excel/42-range/range-relationships.yaml b/samples/excel/42-range/range-relationships.yaml index 5f7898b37..94af9d20c 100644 --- a/samples/excel/42-range/range-relationships.yaml +++ b/samples/excel/42-range/range-relationships.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 7 id: excel-range-range-relationships name: Range relationships description: 'Shows relationships between ranges, such as bounding rectangles and intersections.' diff --git a/samples/excel/85-preview-apis/range-remove-duplicates.yaml b/samples/excel/42-range/range-remove-duplicates.yaml similarity index 97% rename from samples/excel/85-preview-apis/range-remove-duplicates.yaml rename to samples/excel/42-range/range-remove-duplicates.yaml index 4d1332426..bd1c1680f 100644 --- a/samples/excel/85-preview-apis/range-remove-duplicates.yaml +++ b/samples/excel/42-range/range-remove-duplicates.yaml @@ -1,4 +1,4 @@ -order: 15 +order: 8 id: excel-range-remove-duplicates name: Remove duplicates description: Removes duplicate entries from a range. @@ -119,8 +119,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/42-range/range-text-orientation.yaml b/samples/excel/42-range/range-text-orientation.yaml index 1e48afced..13984683e 100644 --- a/samples/excel/42-range/range-text-orientation.yaml +++ b/samples/excel/42-range/range-text-orientation.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 10 id: excel-range-text-orientation name: Text orientation description: Gets and sets the text orientation within a range. diff --git a/samples/excel/42-range/selected-range.yaml b/samples/excel/42-range/selected-range.yaml index 9178946f1..19a43de5e 100644 --- a/samples/excel/42-range/selected-range.yaml +++ b/samples/excel/42-range/selected-range.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 9 id: excel-range-selected-range name: Selected range description: Gets and sets the currently selected range. diff --git a/samples/excel/42-range/set-get-values.yaml b/samples/excel/42-range/set-get-values.yaml index a073eb569..dffbad027 100644 --- a/samples/excel/42-range/set-get-values.yaml +++ b/samples/excel/42-range/set-get-values.yaml @@ -1,4 +1,4 @@ -order: 8 +order: 12 id: excel-range-values-and-formulas name: Values and formulas description: Gets and sets values and formulas for a range. diff --git a/samples/excel/42-range/used-range.yaml b/samples/excel/42-range/used-range.yaml index b3d8aae7f..d671a608d 100644 --- a/samples/excel/42-range/used-range.yaml +++ b/samples/excel/42-range/used-range.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 11 id: excel-range-used-range name: Used range description: Tests for a used range and creates a chart from a table only if there's data in the table. diff --git a/samples/excel/85-preview-apis/shape-create-and-delete.yaml b/samples/excel/44-shape/shape-create-and-delete.yaml similarity index 98% rename from samples/excel/85-preview-apis/shape-create-and-delete.yaml rename to samples/excel/44-shape/shape-create-and-delete.yaml index 4d9b656d2..32cfed48e 100644 --- a/samples/excel/85-preview-apis/shape-create-and-delete.yaml +++ b/samples/excel/44-shape/shape-create-and-delete.yaml @@ -1,4 +1,4 @@ -order: 3 +order: 1 id: excel-shape-create-and-delete name: Create and delete geometric shapes description: Creates a few different geometric shapes and deletes them from the worksheet. @@ -126,8 +126,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/shape-groups.yaml b/samples/excel/44-shape/shape-groups.yaml similarity index 98% rename from samples/excel/85-preview-apis/shape-groups.yaml rename to samples/excel/44-shape/shape-groups.yaml index 29637c8f5..74026d545 100644 --- a/samples/excel/85-preview-apis/shape-groups.yaml +++ b/samples/excel/44-shape/shape-groups.yaml @@ -1,4 +1,4 @@ -order: 17 +order: 5 id: excel-shape-groups name: Shape groups description: Groups and ungroups shapes. @@ -143,8 +143,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/shape-images.yaml b/samples/excel/44-shape/shape-images.yaml similarity index 98% rename from samples/excel/85-preview-apis/shape-images.yaml rename to samples/excel/44-shape/shape-images.yaml index 0aba1a364..288639820 100644 --- a/samples/excel/85-preview-apis/shape-images.yaml +++ b/samples/excel/44-shape/shape-images.yaml @@ -1,4 +1,4 @@ -order: 9 +order: 2 id: excel-shape-images name: Image shapes description: Creates and adjusts image-based shapes. @@ -127,8 +127,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/shape-lines.yaml b/samples/excel/44-shape/shape-lines.yaml similarity index 98% rename from samples/excel/85-preview-apis/shape-lines.yaml rename to samples/excel/44-shape/shape-lines.yaml index d3acd5e9f..596e6befd 100644 --- a/samples/excel/85-preview-apis/shape-lines.yaml +++ b/samples/excel/44-shape/shape-lines.yaml @@ -1,4 +1,4 @@ -order: 11 +order: 3 id: excel-shape-lines name: Lines description: Creates and modifies line shapes. @@ -217,8 +217,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/shape-move-and-order.yaml b/samples/excel/44-shape/shape-move-and-order.yaml similarity index 98% rename from samples/excel/85-preview-apis/shape-move-and-order.yaml rename to samples/excel/44-shape/shape-move-and-order.yaml index bbcb5425e..7e30c1ca6 100644 --- a/samples/excel/85-preview-apis/shape-move-and-order.yaml +++ b/samples/excel/44-shape/shape-move-and-order.yaml @@ -1,4 +1,4 @@ -order: 12 +order: 4 id: excel-shape-move-and-order name: Move and order shapes description: Moves created shapes around the worksheet and adjusts their z-order. @@ -158,8 +158,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/shape-textboxes.yaml b/samples/excel/44-shape/shape-textboxes.yaml similarity index 98% rename from samples/excel/85-preview-apis/shape-textboxes.yaml rename to samples/excel/44-shape/shape-textboxes.yaml index 42585811a..2cf326762 100644 --- a/samples/excel/85-preview-apis/shape-textboxes.yaml +++ b/samples/excel/44-shape/shape-textboxes.yaml @@ -1,4 +1,4 @@ -order: 20 +order: 6 id: excel-shape-textboxes name: Textboxes description: Creates a textbox shape and works with the text in it and other shapes. @@ -133,8 +133,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/comment.yaml b/samples/excel/50-workbook/comment.yaml similarity index 98% rename from samples/excel/85-preview-apis/comment.yaml rename to samples/excel/50-workbook/comment.yaml index 20531ae80..9d6517a42 100644 --- a/samples/excel/85-preview-apis/comment.yaml +++ b/samples/excel/50-workbook/comment.yaml @@ -1,4 +1,4 @@ -order: 2 +order: 3 id: excel-comment name: Comments description: 'Adds, edits, and removes comments and comment replies.' @@ -175,8 +175,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/50-workbook/create-workbook.yaml b/samples/excel/50-workbook/create-workbook.yaml index bd6d180a3..11bf6b184 100644 --- a/samples/excel/50-workbook/create-workbook.yaml +++ b/samples/excel/50-workbook/create-workbook.yaml @@ -1,4 +1,4 @@ -order: 3 +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.' diff --git a/samples/excel/50-workbook/data-protection.yaml b/samples/excel/50-workbook/data-protection.yaml index b83ae1cc5..5f8e3a72e 100644 --- a/samples/excel/50-workbook/data-protection.yaml +++ b/samples/excel/50-workbook/data-protection.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 5 id: excel-workbook-data-protection name: Data protection description: Protects data in a worksheet and the workbook structure. diff --git a/samples/excel/54-worksheet/gridlines.yaml b/samples/excel/54-worksheet/gridlines.yaml index 29c3cd8ef..e72c21f9f 100644 --- a/samples/excel/54-worksheet/gridlines.yaml +++ b/samples/excel/54-worksheet/gridlines.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 8 id: excel-worksheet-gridlines name: Gridlines description: Hides and shows a worksheet's gridlines. diff --git a/samples/excel/54-worksheet/list-worksheets.yaml b/samples/excel/54-worksheet/list-worksheets.yaml index ba3d51446..1a2be30bd 100644 --- a/samples/excel/54-worksheet/list-worksheets.yaml +++ b/samples/excel/54-worksheet/list-worksheets.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 9 id: excel-worksheet-list-worksheets name: List worksheets description: Lists the worksheets in the workbook. 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 6736536a2..be2384898 100644 --- a/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml +++ b/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml @@ -1,4 +1,4 @@ -order: 8 +order: 11 id: excel-worksheet-reference-worksheets-by-relative-position name: Reference worksheets by relative position description: Gets a worksheet by using its relative position within the workbook. diff --git a/samples/excel/54-worksheet/tab-color.yaml b/samples/excel/54-worksheet/tab-color.yaml index 597994841..9d4122d2b 100644 --- a/samples/excel/54-worksheet/tab-color.yaml +++ b/samples/excel/54-worksheet/tab-color.yaml @@ -1,4 +1,4 @@ -order: 9 +order: 12 id: excel-worksheet-tab-color name: Tab color description: Gets and sets the tab color of a worksheet. diff --git a/samples/excel/85-preview-apis/worksheet-auto-filter.yaml b/samples/excel/54-worksheet/worksheet-auto-filter.yaml similarity index 98% rename from samples/excel/85-preview-apis/worksheet-auto-filter.yaml rename to samples/excel/54-worksheet/worksheet-auto-filter.yaml index 029dd10d0..81d8d9122 100644 --- a/samples/excel/85-preview-apis/worksheet-auto-filter.yaml +++ b/samples/excel/54-worksheet/worksheet-auto-filter.yaml @@ -1,4 +1,4 @@ -order: 1 +order: 3 id: excel-worksheet-auto-filter name: AutoFilter description: Adds an AutoFilter to a worksheet. @@ -147,8 +147,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/54-worksheet/worksheet-copy.yaml b/samples/excel/54-worksheet/worksheet-copy.yaml index 696318074..603cdb62f 100644 --- a/samples/excel/54-worksheet/worksheet-copy.yaml +++ b/samples/excel/54-worksheet/worksheet-copy.yaml @@ -1,4 +1,4 @@ -order: 3 +order: 4 id: excel-worksheet-copy name: Copy worksheet description: Copies the active worksheet to the specified location. diff --git a/samples/excel/85-preview-apis/worksheet-find-all.yaml b/samples/excel/54-worksheet/worksheet-find-all.yaml similarity index 98% rename from samples/excel/85-preview-apis/worksheet-find-all.yaml rename to samples/excel/54-worksheet/worksheet-find-all.yaml index 4a217138e..3c9486427 100644 --- a/samples/excel/85-preview-apis/worksheet-find-all.yaml +++ b/samples/excel/54-worksheet/worksheet-find-all.yaml @@ -1,4 +1,4 @@ -order: 8 +order: 5 id: excel-worksheet-find-all name: Find text matches within a worksheet description: Finds cells within a worksheet based on string matching. @@ -140,8 +140,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/54-worksheet/worksheet-freeze-panes.yaml b/samples/excel/54-worksheet/worksheet-freeze-panes.yaml index 0db1699c0..ee0769e86 100644 --- a/samples/excel/54-worksheet/worksheet-freeze-panes.yaml +++ b/samples/excel/54-worksheet/worksheet-freeze-panes.yaml @@ -1,4 +1,4 @@ -order: 4 +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.' diff --git a/samples/excel/85-preview-apis/worksheet-page-layout.yaml b/samples/excel/54-worksheet/worksheet-page-layout.yaml similarity index 98% rename from samples/excel/85-preview-apis/worksheet-page-layout.yaml rename to samples/excel/54-worksheet/worksheet-page-layout.yaml index 5415f6619..b66d84a49 100644 --- a/samples/excel/85-preview-apis/worksheet-page-layout.yaml +++ b/samples/excel/54-worksheet/worksheet-page-layout.yaml @@ -1,4 +1,4 @@ -order: 13 +order: 10 id: excel-worksheet-page-layout name: Page layout and print settings description: Changes the page layout and other settings for printing a worksheet. @@ -182,8 +182,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/54-worksheet/worksheet-range-cell.yaml b/samples/excel/54-worksheet/worksheet-range-cell.yaml index 1239a70c8..5d142bb55 100644 --- a/samples/excel/54-worksheet/worksheet-range-cell.yaml +++ b/samples/excel/54-worksheet/worksheet-range-cell.yaml @@ -1,4 +1,4 @@ -order: 5 +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.' diff --git a/samples/excel/54-worksheet/worksheet-visibility.yaml b/samples/excel/54-worksheet/worksheet-visibility.yaml index 54f870631..d89ca56e0 100644 --- a/samples/excel/54-worksheet/worksheet-visibility.yaml +++ b/samples/excel/54-worksheet/worksheet-visibility.yaml @@ -1,4 +1,4 @@ -order: 10 +order: 13 id: excel-worksheet-visibility name: Visibility description: Hides and unhides a worksheet. diff --git a/samples/excel/85-preview-apis/pivottable-slicer.yaml b/samples/excel/85-preview-apis/pivottable-slicer.yaml index c466feca1..110ac30d8 100644 --- a/samples/excel/85-preview-apis/pivottable-slicer.yaml +++ b/samples/excel/85-preview-apis/pivottable-slicer.yaml @@ -1,10 +1,10 @@ -order: 18 +order: 3 id: excel-pivottable-slicer name: Slicer description: Adds a slicer to a PivotTable. host: EXCEL api_set: - ExcelApi: 1.9 + ExcelApi: 2 script: content: | $("#setup").click(() => tryCatch(setup)); 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 b52b65c8f..675576a0e 100644 --- a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml +++ b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml @@ -1,10 +1,10 @@ -order: 10 +order: 1 id: excel-workbook-insert-external-worksheets name: Insert external worksheets description: Inserts worksheets from another workbook into the current workbook. host: EXCEL api_set: - ExcelAPI: 1.9 + ExcelAPI: 2 script: content: | $("#file").change(() => tryCatch(insertSheets)); diff --git a/samples/excel/85-preview-apis/workbook-save-and-close.yaml b/samples/excel/85-preview-apis/workbook-save-and-close.yaml index b005b513f..9d946fbb6 100644 --- a/samples/excel/85-preview-apis/workbook-save-and-close.yaml +++ b/samples/excel/85-preview-apis/workbook-save-and-close.yaml @@ -1,10 +1,10 @@ -order: 16 +order: 2 id: excel-workbook-save-and-close name: Save and close description: Saves and closes a workbook. host: EXCEL api_set: - ExcelAPI: 1.9 + ExcelAPI: 2 script: content: | $("#saveWithPrompt").click(() => tryCatch(saveWithPrompt)); diff --git a/samples/excel/90-scenarios/multiple-property-set.yaml b/samples/excel/90-scenarios/multiple-property-set.yaml index 6773e2267..d01b0e1a3 100644 --- a/samples/excel/90-scenarios/multiple-property-set.yaml +++ b/samples/excel/90-scenarios/multiple-property-set.yaml @@ -1,4 +1,4 @@ -order: 2 +order: 3 id: excel-scenarios-multiple-property-set name: Set multiple properties description: Sets multiple properties at once with the API object set() method. diff --git a/samples/excel/85-preview-apis/performance-optimization.yaml b/samples/excel/90-scenarios/performance-optimization.yaml similarity index 97% rename from samples/excel/85-preview-apis/performance-optimization.yaml rename to samples/excel/90-scenarios/performance-optimization.yaml index a90ae2e01..346120026 100644 --- a/samples/excel/85-preview-apis/performance-optimization.yaml +++ b/samples/excel/90-scenarios/performance-optimization.yaml @@ -1,4 +1,4 @@ -order: 14 +order: 1 id: excel-performance-optimization name: Performance optimization description: Optimizes performance by untracking ranges and turning off screen painting. @@ -112,8 +112,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/90-scenarios/report-generation.yaml b/samples/excel/90-scenarios/report-generation.yaml index 4eb53fa31..ecc23fb95 100644 --- a/samples/excel/90-scenarios/report-generation.yaml +++ b/samples/excel/90-scenarios/report-generation.yaml @@ -1,4 +1,4 @@ -order: 1 +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.' diff --git a/samples/excel/90-scenarios/working-with-dates.yaml b/samples/excel/90-scenarios/working-with-dates.yaml index 415335ae7..9ce4f97ef 100644 --- a/samples/excel/90-scenarios/working-with-dates.yaml +++ b/samples/excel/90-scenarios/working-with-dates.yaml @@ -1,4 +1,4 @@ -order: 3 +order: 4 id: excel-scenarios-working-with-dates name: Working with dates description: Shows how to work with dates by using the Moment JavaScript library with the Moment-MSDate plug-in. diff --git a/samples/excel/99-just-for-fun/color-wheel.yaml b/samples/excel/99-just-for-fun/color-wheel.yaml index bc29e3c59..988f2b05e 100644 --- a/samples/excel/99-just-for-fun/color-wheel.yaml +++ b/samples/excel/99-just-for-fun/color-wheel.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 5 id: excel-just-for-fun-color-wheel name: Wheel of colors description: Uses chart formatting to draw a wheel with changing colors. Contributed by Alexander Zlatkovski. diff --git a/samples/excel/85-preview-apis/tetrominos.yaml b/samples/excel/99-just-for-fun/tetrominos.yaml similarity index 99% rename from samples/excel/85-preview-apis/tetrominos.yaml rename to samples/excel/99-just-for-fun/tetrominos.yaml index aaafc593b..381e0f439 100644 --- a/samples/excel/85-preview-apis/tetrominos.yaml +++ b/samples/excel/99-just-for-fun/tetrominos.yaml @@ -1,11 +1,11 @@ -order: 19 +order: 4 id: excel-just-for-fun-tetrominos name: Tetromino stacking description: Arrange moving tetromino shapes to form lines. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.8 + ExcelApi: 1.9 script: content: |- $("#run").click(() => { @@ -785,8 +785,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/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index ab43a7fcb6836602cc06953d2e098c303b70b29c..c541e7794ecdcae24eec559914b0db75ca3d9066 100644 GIT binary patch delta 10368 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 { + + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const usedRange = sheet.getUsedRange(); + + // Find the ranges with formulas + const formulaRanges = usedRange.getSpecialCells("Formulas"); + formulaRanges.format.fill.color = "lightgreen"; + await context.sync(); }); Excel.RangeFormat.textOrientation: diff --git a/view/excel.json b/view/excel.json index be66d202a..7a46fb2bf 100644 --- a/view/excel.json +++ b/view/excel.json @@ -27,6 +27,7 @@ "excel-events-chartcollection-added-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-chartcollection-added-activated.yaml", "excel-events-chart-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-chart-activated.yaml", "excel-events-data-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/data-changed.yaml", + "excel-data-change-event-details": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/data-change-event-details.yaml", "excel-events-disable-events": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-disable-events.yaml", "excel-events-table-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-table-changed.yaml", "excel-events-tablecollection-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-tablecollection-changed.yaml", @@ -37,14 +38,24 @@ "excel-pivottable-calculations": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/38-pivottable/pivottable-calculations.yaml", "excel-pivottable-create-and-modify": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/38-pivottable/pivottable-create-and-modify.yaml", "excel-pivottable-filters-and-summaries": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml", + "excel-range-copyfrom": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-copyfrom.yaml", + "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-areas.yaml", + "excel-range-find": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-find.yaml", "excel-range-formatting": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/formatting.yaml", "excel-range-hyperlink": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-hyperlink.yaml", "excel-range-insert-delete-and-clear-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/insert-delete-clear-range.yaml", "excel-range-range-relationships": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-relationships.yaml", + "excel-range-remove-duplicates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-remove-duplicates.yaml", "excel-range-selected-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/selected-range.yaml", "excel-range-text-orientation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-text-orientation.yaml", "excel-range-used-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/used-range.yaml", "excel-range-values-and-formulas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/set-get-values.yaml", + "excel-shape-create-and-delete": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/44-shape/shape-create-and-delete.yaml", + "excel-shape-images": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/44-shape/shape-images.yaml", + "excel-shape-lines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/44-shape/shape-lines.yaml", + "excel-shape-move-and-order": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/44-shape/shape-move-and-order.yaml", + "excel-shape-groups": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/44-shape/shape-groups.yaml", + "excel-shape-textboxes": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/44-shape/shape-textboxes.yaml", "excel-table-add-rows-and-columns-to-a-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml", "excel-table-convert-range-to-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/convert-range-to-table.yaml", "excel-table-create-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/create-table.yaml", @@ -57,43 +68,32 @@ "excel-table-style": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/style.yaml", "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/workbook-get-active-cell.yaml", "excel-settings-create-get-change-delete-settings": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/create-get-change-delete-settings.yaml", + "excel-comment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/comment.yaml", "excel-workbook-create-workbook": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/create-workbook.yaml", "excel-workbook-data-protection": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/data-protection.yaml", "excel-worksheet-active-worksheet": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/active-worksheet.yaml", "excel-worksheet-add-delete-rename-move-worksheet": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml", + "excel-worksheet-auto-filter": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-auto-filter.yaml", "excel-worksheet-copy": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-copy.yaml", + "excel-worksheet-find-all": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-find-all.yaml", "excel-worksheet-freeze-panes": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-freeze-panes.yaml", "excel-worksheet-worksheet-range-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-range-cell.yaml", "excel-worksheet-gridlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/gridlines.yaml", "excel-worksheet-list-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/list-worksheets.yaml", + "excel-worksheet-page-layout": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-page-layout.yaml", "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-visibility.yaml", - "excel-worksheet-auto-filter": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/worksheet-auto-filter.yaml", - "excel-comment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/comment.yaml", - "excel-shape-create-and-delete": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/shape-create-and-delete.yaml", - "excel-range-copyfrom": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-copyfrom.yaml", - "excel-data-change-event-details": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/data-change-event-details.yaml", - "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-areas.yaml", - "excel-range-find": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-find.yaml", - "excel-worksheet-find-all": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/worksheet-find-all.yaml", - "excel-shape-images": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/shape-images.yaml", "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", - "excel-shape-lines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/shape-lines.yaml", - "excel-shape-move-and-order": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/shape-move-and-order.yaml", - "excel-worksheet-page-layout": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/worksheet-page-layout.yaml", - "excel-performance-optimization": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/performance-optimization.yaml", - "excel-range-remove-duplicates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-remove-duplicates.yaml", "excel-workbook-save-and-close": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-save-and-close.yaml", - "excel-shape-groups": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/shape-groups.yaml", "excel-pivottable-slicer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/pivottable-slicer.yaml", - "excel-just-for-fun-tetrominos": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/tetrominos.yaml", - "excel-shape-textboxes": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/shape-textboxes.yaml", + "excel-performance-optimization": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/multiple-property-set.yaml", "excel-scenarios-working-with-dates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/working-with-dates.yaml", "excel-just-for-fun-patterns": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/99-just-for-fun/patterns.yaml", "excel-just-for-fun-gradient": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/99-just-for-fun/gradient.yaml", "excel-just-for-fun-path-finder-game": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/99-just-for-fun/path-finder-game.yaml", + "excel-just-for-fun-tetrominos": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/99-just-for-fun/tetrominos.yaml", "excel-just-for-fun-color-wheel": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/99-just-for-fun/color-wheel.yaml" } \ No newline at end of file From a7952da1bd912b58a338064c82bd35dc8e14baf5 Mon Sep 17 00:00:00 2001 From: David Chesnut Date: Fri, 3 May 2019 15:55:57 -0700 Subject: [PATCH 166/660] incorporated review feedback --- .../streaming-function.yaml | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/samples/excel/16-custom-functions/streaming-function.yaml b/samples/excel/16-custom-functions/streaming-function.yaml index b3d8e093d..f5475156c 100644 --- a/samples/excel/16-custom-functions/streaming-function.yaml +++ b/samples/excel/16-custom-functions/streaming-function.yaml @@ -8,21 +8,22 @@ api_set: script: content: | /** @CustomFunction - * @description Increments the cell with a given amount at a specified interval in milliseconds. - * @param amount - The amount to add to the cell value on each increment. - * @param interval - The time in milliseconds to wait before the next increment on the cell. - * @returns An incrementing value. - * @streaming - */ - function increment(amount: number, interval: number, handler: CustomFunctions.StreamingInvocation): void { + * @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( () => { + const timer = setInterval(() => { result += amount; - handler.setResult(result); + invocation.setResult(result); }, interval); - handler.onCanceled = () => { - clearInterval(timer); + invocation.onCanceled = () => { + clearInterval(timer); } } language: typescript From 96b9d39fad4e802c140fc896062d56168584f550 Mon Sep 17 00:00:00 2001 From: Alex Jerabek Date: Fri, 3 May 2019 17:08:19 -0700 Subject: [PATCH 167/660] Moving comments back to preview --- samples/excel/50-workbook/create-workbook.yaml | 2 +- samples/excel/50-workbook/data-protection.yaml | 2 +- samples/excel/{50-workbook => 85-preview-apis}/comment.yaml | 6 +++--- samples/excel/85-preview-apis/pivottable-slicer.yaml | 2 +- .../workbook-insert-external-worksheets.yaml | 2 +- samples/excel/85-preview-apis/workbook-save-and-close.yaml | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) rename samples/excel/{50-workbook => 85-preview-apis}/comment.yaml (98%) diff --git a/samples/excel/50-workbook/create-workbook.yaml b/samples/excel/50-workbook/create-workbook.yaml index 11bf6b184..bd6d180a3 100644 --- a/samples/excel/50-workbook/create-workbook.yaml +++ b/samples/excel/50-workbook/create-workbook.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 3 id: excel-workbook-create-workbook name: Create workbook description: 'Creates a new, empty workbook and creates a new workbook by copying an existing one.' diff --git a/samples/excel/50-workbook/data-protection.yaml b/samples/excel/50-workbook/data-protection.yaml index 5f8e3a72e..b83ae1cc5 100644 --- a/samples/excel/50-workbook/data-protection.yaml +++ b/samples/excel/50-workbook/data-protection.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 4 id: excel-workbook-data-protection name: Data protection description: Protects data in a worksheet and the workbook structure. diff --git a/samples/excel/50-workbook/comment.yaml b/samples/excel/85-preview-apis/comment.yaml similarity index 98% rename from samples/excel/50-workbook/comment.yaml rename to samples/excel/85-preview-apis/comment.yaml index 9d6517a42..2e040113f 100644 --- a/samples/excel/50-workbook/comment.yaml +++ b/samples/excel/85-preview-apis/comment.yaml @@ -1,4 +1,4 @@ -order: 3 +order: 1 id: excel-comment name: Comments description: 'Adds, edits, and removes comments and comment replies.' @@ -175,8 +175,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js + 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 diff --git a/samples/excel/85-preview-apis/pivottable-slicer.yaml b/samples/excel/85-preview-apis/pivottable-slicer.yaml index 110ac30d8..7a1a7900e 100644 --- a/samples/excel/85-preview-apis/pivottable-slicer.yaml +++ b/samples/excel/85-preview-apis/pivottable-slicer.yaml @@ -1,4 +1,4 @@ -order: 3 +order: 4 id: excel-pivottable-slicer name: Slicer description: Adds a slicer to a PivotTable. 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 675576a0e..990b152df 100644 --- a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml +++ b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml @@ -1,4 +1,4 @@ -order: 1 +order: 2 id: excel-workbook-insert-external-worksheets name: Insert external worksheets description: Inserts worksheets from another workbook into the current workbook. diff --git a/samples/excel/85-preview-apis/workbook-save-and-close.yaml b/samples/excel/85-preview-apis/workbook-save-and-close.yaml index 9d946fbb6..a076c287f 100644 --- a/samples/excel/85-preview-apis/workbook-save-and-close.yaml +++ b/samples/excel/85-preview-apis/workbook-save-and-close.yaml @@ -1,4 +1,4 @@ -order: 2 +order: 3 id: excel-workbook-save-and-close name: Save and close description: Saves and closes a workbook. From 2a353a8c9956f89a27c5c0fd629d3ee2b8101005 Mon Sep 17 00:00:00 2001 From: Alex Jerabek Date: Fri, 3 May 2019 17:10:08 -0700 Subject: [PATCH 168/660] Running npm start --- playlists/excel.yaml | 18 +++++++++--------- snippet-extractor-output/snippets.yaml | 13 ------------- view/excel.json | 2 +- 3 files changed, 10 insertions(+), 23 deletions(-) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index e4451f1d0..cfefb72af 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -631,15 +631,6 @@ group: Workbook api_set: ExcelApi: 1.4 -- id: excel-comment - name: Comments - fileName: comment.yaml - description: 'Adds, edits, and removes comments and comment replies.' - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/50-workbook/comment.yaml - group: Workbook - api_set: - ExcelApi: 1.9 - id: excel-workbook-create-workbook name: Create workbook fileName: create-workbook.yaml @@ -781,6 +772,15 @@ group: Worksheet api_set: ExcelApi: 1.1 +- id: excel-comment + name: Comments + fileName: comment.yaml + description: 'Adds, edits, and removes comments and comment replies.' + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/85-preview-apis/comment.yaml + group: Preview APIs + api_set: + ExcelApi: 1.9 - id: excel-workbook-insert-external-worksheets name: Insert external worksheets fileName: workbook-insert-external-worksheets.yaml diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index b79f63898..924996a04 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -1874,19 +1874,6 @@ Excel.Range.style: range.style = Excel.BuiltInStyle.neutral; range.format.horizontalAlignment = "Right"; - await context.sync(); - }); -Excel.RangeAreas.format: - - |- - await Excel.run(async (context) => { - - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const usedRange = sheet.getUsedRange(); - - // Find the ranges with formulas - const formulaRanges = usedRange.getSpecialCells("Formulas"); - formulaRanges.format.fill.color = "lightgreen"; - await context.sync(); }); Excel.RangeFormat.textOrientation: diff --git a/view/excel.json b/view/excel.json index 7a46fb2bf..1870e13a4 100644 --- a/view/excel.json +++ b/view/excel.json @@ -68,7 +68,6 @@ "excel-table-style": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/style.yaml", "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/workbook-get-active-cell.yaml", "excel-settings-create-get-change-delete-settings": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/create-get-change-delete-settings.yaml", - "excel-comment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/comment.yaml", "excel-workbook-create-workbook": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/create-workbook.yaml", "excel-workbook-data-protection": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/data-protection.yaml", "excel-worksheet-active-worksheet": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/active-worksheet.yaml", @@ -84,6 +83,7 @@ "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-visibility.yaml", + "excel-comment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/comment.yaml", "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", "excel-workbook-save-and-close": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-save-and-close.yaml", "excel-pivottable-slicer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/pivottable-slicer.yaml", From f6ab44bf799fd8bf462f711ed178c12f63d7d71c Mon Sep 17 00:00:00 2001 From: Alex Jerabek Date: Fri, 3 May 2019 17:12:35 -0700 Subject: [PATCH 169/660] Fixing missing snippet --- snippet-extractor-metadata/excel.xlsx | Bin 19757 -> 19790 bytes snippet-extractor-output/snippets.yaml | 13 +++++++++++++ 2 files changed, 13 insertions(+) diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index ae5c4170f9ed49e862e888e9c304bc440c3186e0..8cad8392ebc93ae74e9fa7a61bf20acfa6ed592f 100644 GIT binary patch delta 10029 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 F_+P68TDAZH delta 9969 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 D!ayWX diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 924996a04..0c5f203d5 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -2996,6 +2996,19 @@ Excel.WorksheetProtection.unprotect: let activeSheet = context.workbook.worksheets.getActiveWorksheet(); activeSheet.protection.unprotect(password); }); +Excel.RangeAreas.format: + - |- + await Excel.run(async (context) => { + + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const usedRange = sheet.getUsedRange(); + + // Find the ranges with formulas + const formulaRanges = usedRange.getSpecialCells("Formulas"); + formulaRanges.format.fill.color = "lightgreen"; + + await context.sync(); + }); Word.InlinePicture.getBase64ImageSrc: - |- await Word.run(async (context) => { From 5e7f2819f73bc13541d2ef823bb1811888b9d360 Mon Sep 17 00:00:00 2001 From: David Chesnut Date: Thu, 30 May 2019 14:03:17 -0700 Subject: [PATCH 170/660] added basic custom function (#305) * added basic custom function * updated description --- package-lock.json | 1137 +++++++++++++++++ playlists/excel.yaml | 9 + .../16-custom-functions/basic-function.yaml | 23 + .../streaming-function.yaml | 2 +- .../volatile-function.yaml | 2 +- view/excel.json | 1 + 6 files changed, 1172 insertions(+), 2 deletions(-) create mode 100644 package-lock.json create mode 100644 samples/excel/16-custom-functions/basic-function.yaml diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..ca98cb74e --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1137 @@ +{ + "name": "office-js-snippets", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/highlight": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "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" + } + }, + "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" + } + } + } + }, + "@microsoft/office-js-helpers": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@microsoft/office-js-helpers/-/office-js-helpers-0.5.0.tgz", + "integrity": "sha1-Gvp7Cr4MgrU3ky+UfNBnTDzRrys=", + "requires": { + "@types/jquery": "^2.0.39", + "@types/lodash": "^4.14.50", + "@types/office-js": "^0.0.37", + "core-js": "^2.4.1", + "lodash": "^4.17.4" + } + }, + "@types/chalk": { + "version": "0.4.31", + "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz", + "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=", + "dev": true + }, + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", + "dev": true + }, + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "dev": true, + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/jquery": { + "version": "2.0.53", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-2.0.53.tgz", + "integrity": "sha512-MZKPWUhp5TKkoJ/58NSq6io+CSUCOHm2b3Z6U4+r9v70kktB0JM+eRjdp6YmDHtw0kK2XB7L2K7/FMIoziHjUA==" + }, + "@types/js-yaml": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.1.tgz", + "integrity": "sha512-SGGAhXLHDx+PK4YLNcNGa6goPf9XRWQNAUUbffkwVGGXIxmDKWyGGL4inzq2sPmExu431Ekb9aEMn9BkPqEYFA==", + "dev": true + }, + "@types/lodash": { + "version": "4.14.132", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.132.tgz", + "integrity": "sha512-RNUU1rrh85NgUJcjOOr96YXr+RHwInGbaQCZmlitqOaCKXffj8bh+Zxwuq5rjDy5OgzFldDVoqk4pyLEDiwxIw==" + }, + "@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.13.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.11.tgz", + "integrity": "sha512-blLeR+KIy26km1OU8yTLUlSyVCOvT6+wPq/77tIA+uSHHa4yYQosn+bbaJqPtWId0wjVClUtD7aXzDbZeKWqig==", + "dev": true + }, + "@types/office-js": { + "version": "0.0.37", + "resolved": "https://registry.npmjs.org/@types/office-js/-/office-js-0.0.37.tgz", + "integrity": "sha1-+6O6Bv/Z9Lg94LvmZ3AkXNIjsNo=" + }, + "@types/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-bZgjwIWu9gHCjirKJoOlLzGi5N0QgZ5t7EXEuoqyWCHTuSddURXo3FOBYDyRPNOWzZ6NbkLvZnVkn483Y/tvcQ==", + "dev": true, + "requires": { + "@types/glob": "*", + "@types/node": "*" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "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=" + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "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=" + }, + "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" + } + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "chownr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==" + }, + "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=" + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "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.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "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=" + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, + "core-js": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.8.tgz", + "integrity": "sha512-RWlREFU74TEkdXzyl1bka66O3kYp8jeTXrvJZDzVVMH8AiHUSOFpL1yfhQJ+wHocAm1m+4971W1PPzfLuCv1vg==" + }, + "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=" + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "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=" + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "excel": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/excel/-/excel-0.1.7.tgz", + "integrity": "sha1-AKiOb+1fwG9EpKr2+I9l+FqTwLw=", + "requires": { + "libxmljs": "~0.18.0", + "node-promise": "~0.5.3", + "underscore": "~1.3.3", + "unzip2": "0.2.5" + } + }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=" + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "fs-minipass": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz", + "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==", + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fstream": { + "version": "0.1.31", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-0.1.31.tgz", + "integrity": "sha1-czfwWPu7vvqMn1YaKMqwhJICyYg=", + "requires": { + "graceful-fs": "~3.0.2", + "inherits": "~2.0.0", + "mkdirp": "0.5", + "rimraf": "2" + } + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "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" + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "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": "3.0.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", + "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", + "requires": { + "natives": "^1.1.0" + } + }, + "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 + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "requires": { + "minimatch": "^3.0.4" + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "interpret": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "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.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "libxmljs": { + "version": "0.18.8", + "resolved": "https://registry.npmjs.org/libxmljs/-/libxmljs-0.18.8.tgz", + "integrity": "sha1-sKB1EqASkLYkBgDWwrwzo8cJdtY=", + "requires": { + "bindings": "^1.3.0", + "nan": "~2.10.0", + "node-pre-gyp": "^0.9.1" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + }, + "match-stream": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/match-stream/-/match-stream-0.0.2.tgz", + "integrity": "sha1-mesFAJOzTf+t5CG5rAtBCpz6F88=", + "requires": { + "buffers": "~0.1.1", + "readable-stream": "~1.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "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": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "minipass": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" + }, + "natives": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.6.tgz", + "integrity": "sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA==" + }, + "needle": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", + "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.9.1.tgz", + "integrity": "sha1-8RwHUW3ZL4cZnbx+GDjqt81WyeA=", + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "node-promise": { + "version": "0.5.14", + "resolved": "https://registry.npmjs.org/node-promise/-/node-promise-0.5.14.tgz", + "integrity": "sha512-kbd+ABY2XRdByRVHPcBDemymfNL8+msGyKNxG/ziZnh9RjneuuGQl3/CE5UkNWxCInkJS+ztc5B31/t2kIO4Yw==" + }, + "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" + } + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", + "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==" + }, + "npm-packlist": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz", + "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "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", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "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=" + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "over": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/over/-/over-0.0.5.tgz", + "integrity": "sha1-8phS5w/X4l82DgE6jsRMgq7bVwg=" + }, + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "pullstream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/pullstream/-/pullstream-0.4.1.tgz", + "integrity": "sha1-1vs79a7Wl+gxFQ6xACwlo/iuExQ=", + "requires": { + "over": ">= 0.0.5 < 1", + "readable-stream": "~1.0.31", + "setimmediate": ">= 1.0.2 < 2", + "slice-stream": ">= 1.0.0 < 2" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "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" + } + }, + "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.11.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", + "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", + "requires": { + "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": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "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==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "shelljs": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", + "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "slice-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-stream/-/slice-stream-1.0.0.tgz", + "integrity": "sha1-WzO9ZvATsaf4ZGCwPUY97DmtPqA=", + "requires": { + "readable-stream": "~1.0.31" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "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" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "tar": { + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", + "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=" + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true + }, + "tslint": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.16.0.tgz", + "integrity": "sha512-UxG2yNxJ5pgGwmMzPMYh/CCnCnh0HfPgtlVRDs1ykZklufFBL1ZoTlWFRz2NQjcoEiDoRp+JyT0lhBbbH/obyA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^3.2.0", + "glob": "^7.1.1", + "js-yaml": "^3.13.0", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.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" + } + }, + "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.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.5.tgz", + "integrity": "sha512-YycBxUb49UUhdNMU5aJ7z5Ej2XGmaIBL0x34vZ82fn3hGvD+bgrMrVDpatgz2f7YxUMJxMkbWxJZeAvDxVe7Vw==", + "dev": true + }, + "underscore": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.3.3.tgz", + "integrity": "sha1-R6xTaD2vgyv6lS4XdEF9pHgXrkI=" + }, + "unzip2": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/unzip2/-/unzip2-0.2.5.tgz", + "integrity": "sha1-TveleaeMFcUfVQ9qBT2xlBSciZI=", + "requires": { + "binary": "~0.3.0", + "fstream": "~0.1.21", + "match-stream": "~0.0.2", + "pullstream": "~0.4.0", + "readable-stream": "~1.0.0", + "setimmediate": "~1.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + } + } +} diff --git a/playlists/excel.yaml b/playlists/excel.yaml index d99a95042..2ee130ec9 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -155,6 +155,15 @@ 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////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 diff --git a/samples/excel/16-custom-functions/basic-function.yaml b/samples/excel/16-custom-functions/basic-function.yaml new file mode 100644 index 000000000..c085f87e1 --- /dev/null +++ b/samples/excel/16-custom-functions/basic-function.yaml @@ -0,0 +1,23 @@ +order: 1 +id: excel-custom-functions-basic +name: Basic custom function +description: Calculates the volume of a sphere. +host: EXCEL +api_set: + CustomFunctionsRuntime: 1.1 +script: + content: | + /** + * Calculates the volume of a sphere. + * @customfunction + * @param {number} radius + * @returns The volume of the sphere. + */ + function sphereVolume(radius) { + return Math.pow(radius, 3) * 4 * Math.PI / 3; + } + 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/samples/excel/16-custom-functions/streaming-function.yaml b/samples/excel/16-custom-functions/streaming-function.yaml index f5475156c..1e9740051 100644 --- a/samples/excel/16-custom-functions/streaming-function.yaml +++ b/samples/excel/16-custom-functions/streaming-function.yaml @@ -1,4 +1,4 @@ -order: 2 +order: 3 id: excel-custom-functions-streaming name: Streaming function description: A streaming function that continuously increments the cell value. diff --git a/samples/excel/16-custom-functions/volatile-function.yaml b/samples/excel/16-custom-functions/volatile-function.yaml index a95766da1..68438aefc 100644 --- a/samples/excel/16-custom-functions/volatile-function.yaml +++ b/samples/excel/16-custom-functions/volatile-function.yaml @@ -1,4 +1,4 @@ -order: 1 +order: 2 id: excel-custom-functions-volatile name: Volatile function description: Rolls a 6 sided die that returns a possible new value every calculation. diff --git a/view/excel.json b/view/excel.json index 09e892143..0dd267ba2 100644 --- a/view/excel.json +++ b/view/excel.json @@ -16,6 +16,7 @@ "excel-chart-trendlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-trendlines.yaml", "excel-range-conditional-formatting-basic": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml", "excel-range-conditional-formatting-advanced": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml", + "excel-custom-functions-basic": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/16-custom-functions/basic-function.yaml", "excel-custom-functions-volatile": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/16-custom-functions/volatile-function.yaml", "excel-custom-functions-streaming": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/16-custom-functions/streaming-function.yaml", "excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml", From 0e63f58555197dcfd3cf83cd0de87d5ce216cfbb Mon Sep 17 00:00:00 2001 From: Alex Jerabek Date: Tue, 11 Jun 2019 11:04:50 -0700 Subject: [PATCH 171/660] Using range instead of a string in DV sample --- samples/excel/22-data-validation/data-validation.yaml | 2 +- snippet-extractor-output/snippets.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/excel/22-data-validation/data-validation.yaml b/samples/excel/22-data-validation/data-validation.yaml index 39a72f522..fd26b695c 100644 --- a/samples/excel/22-data-validation/data-validation.yaml +++ b/samples/excel/22-data-validation/data-validation.yaml @@ -61,7 +61,7 @@ script: let approvedListRule = { list: { inCellDropDown: true, - source: '=Names!$A$1:$A$3' + source: nameSourceRange } }; nameRange.dataValidation.rule = approvedListRule; diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 0c5f203d5..8d8974754 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -1194,7 +1194,7 @@ Excel.DataValidationRule.list: let approvedListRule = { list: { inCellDropDown: true, - source: '=Names!$A$1:$A$3' + source: nameSourceRange } }; nameRange.dataValidation.rule = approvedListRule; From dd9009df5abf4bf16b3aeb6a634981d246361e7a Mon Sep 17 00:00:00 2001 From: Alex Jerabek Date: Tue, 11 Jun 2019 13:56:58 -0700 Subject: [PATCH 172/660] Unfreezing yarn lock --- package-lock.json | 1137 --------------------------------------------- yarn.lock | 182 ++++---- 2 files changed, 97 insertions(+), 1222 deletions(-) delete mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index ca98cb74e..000000000 --- a/package-lock.json +++ /dev/null @@ -1,1137 +0,0 @@ -{ - "name": "office-js-snippets", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "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" - } - }, - "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" - } - } - } - }, - "@microsoft/office-js-helpers": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@microsoft/office-js-helpers/-/office-js-helpers-0.5.0.tgz", - "integrity": "sha1-Gvp7Cr4MgrU3ky+UfNBnTDzRrys=", - "requires": { - "@types/jquery": "^2.0.39", - "@types/lodash": "^4.14.50", - "@types/office-js": "^0.0.37", - "core-js": "^2.4.1", - "lodash": "^4.17.4" - } - }, - "@types/chalk": { - "version": "0.4.31", - "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz", - "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=", - "dev": true - }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", - "dev": true - }, - "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "dev": true, - "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/jquery": { - "version": "2.0.53", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-2.0.53.tgz", - "integrity": "sha512-MZKPWUhp5TKkoJ/58NSq6io+CSUCOHm2b3Z6U4+r9v70kktB0JM+eRjdp6YmDHtw0kK2XB7L2K7/FMIoziHjUA==" - }, - "@types/js-yaml": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.1.tgz", - "integrity": "sha512-SGGAhXLHDx+PK4YLNcNGa6goPf9XRWQNAUUbffkwVGGXIxmDKWyGGL4inzq2sPmExu431Ekb9aEMn9BkPqEYFA==", - "dev": true - }, - "@types/lodash": { - "version": "4.14.132", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.132.tgz", - "integrity": "sha512-RNUU1rrh85NgUJcjOOr96YXr+RHwInGbaQCZmlitqOaCKXffj8bh+Zxwuq5rjDy5OgzFldDVoqk4pyLEDiwxIw==" - }, - "@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.13.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.11.tgz", - "integrity": "sha512-blLeR+KIy26km1OU8yTLUlSyVCOvT6+wPq/77tIA+uSHHa4yYQosn+bbaJqPtWId0wjVClUtD7aXzDbZeKWqig==", - "dev": true - }, - "@types/office-js": { - "version": "0.0.37", - "resolved": "https://registry.npmjs.org/@types/office-js/-/office-js-0.0.37.tgz", - "integrity": "sha1-+6O6Bv/Z9Lg94LvmZ3AkXNIjsNo=" - }, - "@types/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-bZgjwIWu9gHCjirKJoOlLzGi5N0QgZ5t7EXEuoqyWCHTuSddURXo3FOBYDyRPNOWzZ6NbkLvZnVkn483Y/tvcQ==", - "dev": true, - "requires": { - "@types/glob": "*", - "@types/node": "*" - } - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "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=" - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "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=" - }, - "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" - } - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "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" - } - }, - "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" - } - }, - "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" - } - }, - "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==" - }, - "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=" - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "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.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", - "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=" - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, - "core-js": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.8.tgz", - "integrity": "sha512-RWlREFU74TEkdXzyl1bka66O3kYp8jeTXrvJZDzVVMH8AiHUSOFpL1yfhQJ+wHocAm1m+4971W1PPzfLuCv1vg==" - }, - "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=" - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "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=" - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "excel": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/excel/-/excel-0.1.7.tgz", - "integrity": "sha1-AKiOb+1fwG9EpKr2+I9l+FqTwLw=", - "requires": { - "libxmljs": "~0.18.0", - "node-promise": "~0.5.3", - "underscore": "~1.3.3", - "unzip2": "0.2.5" - } - }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=" - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "fs-minipass": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz", - "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==", - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fstream": { - "version": "0.1.31", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-0.1.31.tgz", - "integrity": "sha1-czfwWPu7vvqMn1YaKMqwhJICyYg=", - "requires": { - "graceful-fs": "~3.0.2", - "inherits": "~2.0.0", - "mkdirp": "0.5", - "rimraf": "2" - } - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "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" - } - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "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": "3.0.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", - "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", - "requires": { - "natives": "^1.1.0" - } - }, - "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 - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", - "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", - "requires": { - "minimatch": "^3.0.4" - } - }, - "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.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, - "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "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.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "libxmljs": { - "version": "0.18.8", - "resolved": "https://registry.npmjs.org/libxmljs/-/libxmljs-0.18.8.tgz", - "integrity": "sha1-sKB1EqASkLYkBgDWwrwzo8cJdtY=", - "requires": { - "bindings": "^1.3.0", - "nan": "~2.10.0", - "node-pre-gyp": "^0.9.1" - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "match-stream": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/match-stream/-/match-stream-0.0.2.tgz", - "integrity": "sha1-mesFAJOzTf+t5CG5rAtBCpz6F88=", - "requires": { - "buffers": "~0.1.1", - "readable-stream": "~1.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "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": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "minipass": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", - "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", - "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - }, - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" - }, - "natives": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.6.tgz", - "integrity": "sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA==" - }, - "needle": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", - "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.9.1.tgz", - "integrity": "sha1-8RwHUW3ZL4cZnbx+GDjqt81WyeA=", - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "node-promise": { - "version": "0.5.14", - "resolved": "https://registry.npmjs.org/node-promise/-/node-promise-0.5.14.tgz", - "integrity": "sha512-kbd+ABY2XRdByRVHPcBDemymfNL8+msGyKNxG/ziZnh9RjneuuGQl3/CE5UkNWxCInkJS+ztc5B31/t2kIO4Yw==" - }, - "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" - } - }, - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", - "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==" - }, - "npm-packlist": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz", - "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "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", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "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=" - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "over": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/over/-/over-0.0.5.tgz", - "integrity": "sha1-8phS5w/X4l82DgE6jsRMgq7bVwg=" - }, - "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": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, - "pullstream": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/pullstream/-/pullstream-0.4.1.tgz", - "integrity": "sha1-1vs79a7Wl+gxFQ6xACwlo/iuExQ=", - "requires": { - "over": ">= 0.0.5 < 1", - "readable-stream": "~1.0.31", - "setimmediate": ">= 1.0.2 < 2", - "slice-stream": ">= 1.0.0 < 2" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - } - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "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" - } - }, - "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.11.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", - "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", - "requires": { - "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": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "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==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "shelljs": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", - "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "slice-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-stream/-/slice-stream-1.0.0.tgz", - "integrity": "sha1-WzO9ZvATsaf4ZGCwPUY97DmtPqA=", - "requires": { - "readable-stream": "~1.0.31" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "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" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - }, - "tar": { - "version": "4.4.8", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", - "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=" - }, - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", - "dev": true - }, - "tslint": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.16.0.tgz", - "integrity": "sha512-UxG2yNxJ5pgGwmMzPMYh/CCnCnh0HfPgtlVRDs1ykZklufFBL1ZoTlWFRz2NQjcoEiDoRp+JyT0lhBbbH/obyA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^3.2.0", - "glob": "^7.1.1", - "js-yaml": "^3.13.0", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.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" - } - }, - "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.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.5.tgz", - "integrity": "sha512-YycBxUb49UUhdNMU5aJ7z5Ej2XGmaIBL0x34vZ82fn3hGvD+bgrMrVDpatgz2f7YxUMJxMkbWxJZeAvDxVe7Vw==", - "dev": true - }, - "underscore": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.3.3.tgz", - "integrity": "sha1-R6xTaD2vgyv6lS4XdEF9pHgXrkI=" - }, - "unzip2": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/unzip2/-/unzip2-0.2.5.tgz", - "integrity": "sha1-TveleaeMFcUfVQ9qBT2xlBSciZI=", - "requires": { - "binary": "~0.3.0", - "fstream": "~0.1.21", - "match-stream": "~0.0.2", - "pullstream": "~0.4.0", - "readable-stream": "~1.0.0", - "setimmediate": "~1.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" - } - } -} diff --git a/yarn.lock b/yarn.lock index d4cedc0fa..844115179 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,22 @@ # yarn lockfile v1 +"@babel/code-frame@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" + integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/highlight@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" + integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + "@microsoft/office-js-helpers@^0.5.0": version "0.5.0" resolved "https://registry.yarnpkg.com/@microsoft/office-js-helpers/-/office-js-helpers-0.5.0.tgz#1afa7b0abe0c82b537932f947cd0674c3cd1af2b" @@ -38,24 +54,29 @@ integrity sha512-MZKPWUhp5TKkoJ/58NSq6io+CSUCOHm2b3Z6U4+r9v70kktB0JM+eRjdp6YmDHtw0kK2XB7L2K7/FMIoziHjUA== "@types/js-yaml@^3.12.0": - version "3.12.0" - resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.0.tgz#3494ce97358e2675e24e97a747ec23478eeaf8b6" - integrity sha512-UGEe/6RsNAxgWdknhzFZbCxuYc5I7b/YEKlfKbo+76SM8CJzGs7XKCj7zyugXViRbKYpXhSXhCYVQZL5tmDbpQ== + version "3.12.1" + resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.1.tgz#5c6f4a1eabca84792fbd916f0cb40847f123c656" + integrity sha512-SGGAhXLHDx+PK4YLNcNGa6goPf9XRWQNAUUbffkwVGGXIxmDKWyGGL4inzq2sPmExu431Ekb9aEMn9BkPqEYFA== "@types/lodash@^4.14.122", "@types/lodash@^4.14.50": - version "4.14.122" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.122.tgz#3e31394c38cf1e5949fb54c1192cbc406f152c6c" - integrity sha512-9IdED8wU93ty8gP06ninox+42SBSJHp2IAamsSYMUY76mshRTeUsid/gtbl8ovnOwy8im41ib4cxTiIYMXGKew== + version "4.14.134" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.134.tgz#9032b440122db3a2a56200e91191996161dde5b9" + integrity sha512-2/O0khFUCFeDlbi7sZ7ZFRCcT812fAeOLm7Ev4KbwASkZ575TDrDcY7YyaoHdTOzKcNbfiwLYZqPmoC4wadrsw== "@types/minimatch@*": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== -"@types/node@*", "@types/node@^11.10.5": - version "11.10.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-11.10.5.tgz#fbaca34086bdc118011e1f05c47688d432f2d571" - integrity sha512-DuIRlQbX4K+d5I+GMnv+UfnGh+ist0RdlvOp+JZ7ePJ6KQONCFQv/gKYSU1ZzbVdFSUCKZOltjmpFAGGv5MdYA== +"@types/node@*": + version "12.0.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.0.8.tgz#551466be11b2adc3f3d47156758f610bd9f6b1d8" + integrity sha512-b8bbUOTwzIY3V5vDTY1fIJ+ePKDUBqt2hC2woVGotdQQhG/2Sh62HOKHrT7ab+VerXAcPyAiTEipPu/FsreUtg== + +"@types/node@^11.10.5": + version "11.13.14" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.14.tgz#03e9416f7d699d71742e5a1e455def7bd55f8fb9" + integrity sha512-9NjFOB6UUGjJLNANmyIouuaN8YPsPgC4DCOd5lU+DL7HSX/RCfzz0JOtHlspEJq1Ll/JUu/8Cm4wzxpZ8w5sjQ== "@types/office-js@^0.0.37": version "0.0.37" @@ -63,9 +84,9 @@ integrity sha1-+6O6Bv/Z9Lg94LvmZ3AkXNIjsNo= "@types/shelljs@^0.8.3": - version "0.8.3" - resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.8.3.tgz#f713f312dbae49ab5025290007e71ea32998e9a9" - integrity sha512-miY41hqc5SkRlsZDod3heDa4OS9xv8G77EMBQuSpqq86HBn66l7F+f8y9YKm+1PIuwC8QEZVwN8YxOOG7Y67fA== + version "0.8.5" + resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.8.5.tgz#1e507b2f6d1f893269bd3e851ec24419ef9beeea" + integrity sha512-bZgjwIWu9gHCjirKJoOlLzGi5N0QgZ5t7EXEuoqyWCHTuSddURXo3FOBYDyRPNOWzZ6NbkLvZnVkn483Y/tvcQ== dependencies: "@types/glob" "*" "@types/node" "*" @@ -117,15 +138,6 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -babel-code-frame@^6.22.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -171,7 +183,7 @@ chainsaw@~0.1.0: dependencies: traverse ">=0.3.0 <0.4" -chalk@1.1.3, chalk@^1.1.3: +chalk@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= @@ -182,7 +194,7 @@ chalk@1.1.3, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -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== @@ -238,9 +250,9 @@ colors@1.1.2: integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= commander@^2.12.1: - version "2.19.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" - integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== + version "2.20.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" + integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== concat-map@0.0.1: version "0.0.1" @@ -253,21 +265,21 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= core-js@^2.4.1: - version "2.6.5" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895" - integrity sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A== + version "2.6.9" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" + integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== 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= -debug@^2.1.2: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== +debug@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== dependencies: - ms "2.0.0" + ms "^2.1.1" deep-extend@^0.6.0: version "0.6.0" @@ -325,9 +337,9 @@ file-uri-to-path@1.0.0: integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== fs-minipass@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" - integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ== + version "1.2.6" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" + integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ== dependencies: minipass "^2.2.1" @@ -361,9 +373,9 @@ gauge@~2.7.3: wide-align "^1.1.0" glob@^7.0.0, glob@^7.1.1, glob@^7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -455,15 +467,15 @@ isarray@~1.0.0: resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= +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.12.2, js-yaml@^3.7.0: - version "3.12.2" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.2.tgz#ef1d067c5a9d9cb65bd72f285b5d8105c77f14fc" - integrity sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q== +js-yaml@^3.12.2, js-yaml@^3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -507,7 +519,7 @@ minimist@^1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= -minipass@^2.2.1, minipass@^2.3.4: +minipass@^2.2.1, minipass@^2.3.5: version "2.3.5" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== @@ -515,7 +527,7 @@ minipass@^2.2.1, minipass@^2.3.4: safe-buffer "^5.1.2" yallist "^3.0.0" -minizlib@^1.1.1: +minizlib@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== @@ -529,10 +541,10 @@ mkdirp@0.5, mkdirp@^0.5.0, mkdirp@^0.5.1: dependencies: minimist "0.0.8" -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== nan@~2.10.0: version "2.10.0" @@ -545,11 +557,11 @@ natives@^1.1.0: integrity sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA== needle@^2.2.0: - version "2.2.4" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" - integrity sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA== + version "2.4.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" + integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== dependencies: - debug "^2.1.2" + debug "^3.2.6" iconv-lite "^0.4.4" sax "^1.2.4" @@ -726,9 +738,9 @@ rechoir@^0.6.2: resolve "^1.1.6" resolve@^1.1.6, resolve@^1.3.2: - version "1.10.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" - integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== + version "1.11.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" + integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== dependencies: path-parse "^1.0.6" @@ -763,9 +775,9 @@ sax@^1.2.4: integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== semver@^5.3.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" - integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== + version "5.7.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" + integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== set-blocking@~2.0.0: version "2.0.0" @@ -864,17 +876,17 @@ supports-color@^5.3.0: has-flag "^3.0.0" tar@^4: - version "4.4.8" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" - integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ== + version "4.4.10" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" + integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA== dependencies: chownr "^1.1.1" fs-minipass "^1.2.5" - minipass "^2.3.4" - minizlib "^1.1.1" + minipass "^2.3.5" + minizlib "^1.2.1" mkdirp "^0.5.0" safe-buffer "^5.1.2" - yallist "^3.0.2" + yallist "^3.0.3" "traverse@>=0.3.0 <0.4": version "0.3.9" @@ -882,30 +894,30 @@ tar@^4: integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= tslib@^1.8.0, tslib@^1.8.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" - integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== + version "1.10.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" + integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== tslint@^5.13.1: - version "5.13.1" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.13.1.tgz#fbc0541c425647a33cd9108ce4fd4cd18d7904ed" - integrity sha512-fplQqb2miLbcPhyHoMV4FU9PtNRbgmm/zI5d3SZwwmJQM6V0eodju+hplpyfhLWpmwrDNfNYU57uYRb8s0zZoQ== + version "5.17.0" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.17.0.tgz#f9f0ce2011d8e90debaa6e9b4975f24cd16852b8" + integrity sha512-pflx87WfVoYepTet3xLfDOLDm9Jqi61UXIKePOuca0qoAZyrGWonDG9VTbji58Fy+8gciUn8Bt7y69+KEVjc/w== dependencies: - babel-code-frame "^6.22.0" + "@babel/code-frame" "^7.0.0" builtin-modules "^1.1.1" chalk "^2.3.0" commander "^2.12.1" diff "^3.2.0" glob "^7.1.1" - js-yaml "^3.7.0" + js-yaml "^3.13.1" minimatch "^3.0.4" mkdirp "^0.5.1" resolve "^1.3.2" semver "^5.3.0" tslib "^1.8.0" - tsutils "^2.27.2" + tsutils "^2.29.0" -tsutils@^2.27.2: +tsutils@^2.29.0: version "2.29.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== @@ -913,9 +925,9 @@ tsutils@^2.27.2: tslib "^1.8.1" typescript@^3.3.3333: - version "3.3.3333" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.3.3333.tgz#171b2c5af66c59e9431199117a3bcadc66fdcfd6" - integrity sha512-JjSKsAfuHBE/fB2oZ8NxtRTk5iGcg6hkYXMnZ3Wc+b2RSqejEqTaem11mHASMnFilHrax3sLK0GDzcJrekZYLw== + version "3.5.1" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.1.tgz#ba72a6a600b2158139c5dd8850f700e231464202" + integrity sha512-64HkdiRv1yYZsSe4xC1WVgamNigVYjlssIoaH2HcZF0+ijsk5YK2g0G34w9wJkze8+5ow4STd22AynfO6ZYYLw== underscore@~1.3.3: version "1.3.3" @@ -951,7 +963,7 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -yallist@^3.0.0, yallist@^3.0.2: +yallist@^3.0.0, yallist@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== From fca46caffbc4d30ea880ced5f32fbb2c8215501e Mon Sep 17 00:00:00 2001 From: Alex Jerabek Date: Tue, 11 Jun 2019 14:01:13 -0700 Subject: [PATCH 173/660] Updating readme --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d98600430..9ea79c746 100644 --- a/README.md +++ b/README.md @@ -48,11 +48,11 @@ A collection of code snippets built with [Script Lab](//github.com/OfficeDev/scr 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 `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. +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. - > **Note**: The `npm 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 `npm start`, and fix errors, until the build succeeds. +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"`. From 213fb6a7cffdef055d72b32b68d4d77ccf3b5035 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 14 Jun 2019 08:24:26 -0700 Subject: [PATCH 174/660] Update screenshot (#310) --- .../images/addin-samples-gallery-screenshot.jpg | Bin 46187 -> 0 bytes .../images/addin-samples-gallery-screenshot.png | Bin 0 -> 30045 bytes README.md | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 .github/images/addin-samples-gallery-screenshot.jpg create mode 100644 .github/images/addin-samples-gallery-screenshot.png diff --git a/.github/images/addin-samples-gallery-screenshot.jpg b/.github/images/addin-samples-gallery-screenshot.jpg deleted file mode 100644 index df1f9c7a7ed239b417101c52f8c94eefd7016901..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46187 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 T6KMA5CcU5k2MH46&(i+`U`&Rg diff --git a/.github/images/addin-samples-gallery-screenshot.png b/.github/images/addin-samples-gallery-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..cbdbe07e2f7f23243859a2e625aa767594e32eb9 GIT binary patch literal 30045 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 C0;K~0 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 9ea79c746..130a67ce8 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ A collection of code snippets built with [Script Lab](//github.com/OfficeDev/script-lab) -![Script Lab import gallery screenshot](.github/images/addin-samples-gallery-screenshot.jpg) +![Script Lab import gallery screenshot](.github/images/addin-samples-gallery-screenshot.png) ## To contribute: From e8493e345c439dfb925f3cc56dc8ca39c19053b6 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 21 Jun 2019 12:56:10 -0700 Subject: [PATCH 175/660] [all] (office-js-helpers) Removing references to the office-js-helpers library (#312) * Excel helper removal * Removing references to office-js-helpers * Remove extra content.sync and upgrade required API set * Restoring compatibility for select samples * Rerunning yarn install --- playlists/excel.yaml | 46 +++++----- .../excel/01-basics/basic-api-call-es5.yaml | 3 - samples/excel/01-basics/basic-api-call.yaml | 3 - .../01-basics/basic-common-api-call.yaml | 3 - .../excel/10-chart/chart-axis-formatting.yaml | 8 +- samples/excel/10-chart/chart-axis.yaml | 13 ++- .../10-chart/chart-create-several-charts.yaml | 54 +++++------- samples/excel/10-chart/chart-formatting.yaml | 7 +- samples/excel/10-chart/chart-legend.yaml | 14 ++- samples/excel/10-chart/chart-point.yaml | 14 ++- .../excel/10-chart/chart-series-markers.yaml | 14 ++- .../10-chart/chart-series-plotorder.yaml | 14 ++- samples/excel/10-chart/chart-series.yaml | 16 ++-- .../excel/10-chart/chart-title-format.yaml | 7 +- samples/excel/10-chart/chart-trendlines.yaml | 14 ++- .../excel/10-chart/create-doughnut-chart.yaml | 8 +- .../conditional-formatting-advanced.yaml | 8 +- .../conditional-formatting-basic.yaml | 8 +- ...e-set-get-and-delete-custom-xml-parts.yaml | 3 - .../test-xml-for-unique-namespace.yaml | 3 - .../22-data-validation/data-validation.yaml | 15 ++-- .../26-document/get-file-in-slices-async.yaml | 16 ++-- samples/excel/26-document/properties.yaml | 3 - .../30-events/data-change-event-details.yaml | 7 +- samples/excel/30-events/data-changed.yaml | 9 +- .../30-events/events-chart-activated.yaml | 13 +-- ...vents-chartcollection-added-activated.yaml | 15 ++-- .../30-events/events-disable-events.yaml | 8 +- .../excel/30-events/events-table-changed.yaml | 15 ++-- .../events-tablecollection-changed.yaml | 8 +- ...nts-workbook-and-worksheet-collection.yaml | 3 - samples/excel/30-events/events-worksheet.yaml | 9 +- .../create-and-remove-named-item.yaml | 7 +- .../34-named-item/update-named-item.yaml | 7 +- .../pivottable-calculations.yaml | 11 +-- .../pivottable-create-and-modify.yaml | 15 ++-- .../pivottable-filters-and-summaries.yaml | 11 +-- samples/excel/42-range/formatting.yaml | 9 +- .../42-range/insert-delete-clear-range.yaml | 9 +- samples/excel/42-range/range-areas.yaml | 7 +- samples/excel/42-range/range-copyfrom.yaml | 6 +- samples/excel/42-range/range-find.yaml | 8 +- samples/excel/42-range/range-hyperlink.yaml | 24 ++---- .../excel/42-range/range-relationships.yaml | 12 +-- .../42-range/range-remove-duplicates.yaml | 6 +- .../42-range/range-text-orientation.yaml | 7 +- samples/excel/42-range/selected-range.yaml | 3 - samples/excel/42-range/set-get-values.yaml | 9 +- samples/excel/42-range/used-range.yaml | 7 +- .../44-shape/shape-create-and-delete.yaml | 12 +-- samples/excel/44-shape/shape-groups.yaml | 8 +- samples/excel/44-shape/shape-images.yaml | 8 +- samples/excel/44-shape/shape-lines.yaml | 8 +- .../excel/44-shape/shape-move-and-order.yaml | 8 +- samples/excel/44-shape/shape-textboxes.yaml | 8 +- .../add-rows-and-columns-to-a-table.yaml | 14 +-- .../46-table/convert-range-to-table.yaml | 16 ++-- samples/excel/46-table/create-table.yaml | 17 ++-- samples/excel/46-table/filter-data.yaml | 18 ++-- samples/excel/46-table/formatting.yaml | 18 ++-- .../excel/46-table/get-data-from-table.yaml | 18 ++-- ...get-visible-range-of-a-filtered-table.yaml | 15 ++-- samples/excel/46-table/import-json-data.yaml | 31 +++---- samples/excel/46-table/sort-data.yaml | 85 +++++++++---------- samples/excel/46-table/style.yaml | 16 ++-- .../create-get-change-delete-settings.yaml | 3 - .../excel/50-workbook/create-workbook.yaml | 3 - .../excel/50-workbook/data-protection.yaml | 15 ++-- .../50-workbook/workbook-get-active-cell.yaml | 3 - .../excel/54-worksheet/active-worksheet.yaml | 3 - .../add-delete-rename-move-worksheet.yaml | 3 - samples/excel/54-worksheet/gridlines.yaml | 3 - .../excel/54-worksheet/list-worksheets.yaml | 3 - ...rence-worksheets-by-relative-position.yaml | 3 - samples/excel/54-worksheet/tab-color.yaml | 3 - .../54-worksheet/worksheet-auto-filter.yaml | 6 +- .../excel/54-worksheet/worksheet-copy.yaml | 15 ++-- .../54-worksheet/worksheet-find-all.yaml | 7 +- .../54-worksheet/worksheet-freeze-panes.yaml | 7 +- .../54-worksheet/worksheet-page-layout.yaml | 6 +- .../54-worksheet/worksheet-range-cell.yaml | 9 +- .../54-worksheet/worksheet-visibility.yaml | 17 ++-- samples/excel/85-preview-apis/comment.yaml | 8 +- .../85-preview-apis/pivottable-slicer.yaml | 13 ++- .../workbook-insert-external-worksheets.yaml | 3 - .../workbook-save-and-close.yaml | 3 - .../90-scenarios/multiple-property-set.yaml | 7 +- .../performance-optimization.yaml | 7 +- .../excel/90-scenarios/report-generation.yaml | 3 - .../90-scenarios/working-with-dates.yaml | 9 +- .../excel/99-just-for-fun/color-wheel.yaml | 12 ++- samples/excel/99-just-for-fun/gradient.yaml | 11 +-- .../99-just-for-fun/path-finder-game.yaml | 11 +-- samples/excel/99-just-for-fun/patterns.yaml | 26 ++++-- samples/excel/99-just-for-fun/tetrominos.yaml | 3 - samples/excel/default.yaml | 3 - samples/onenote/default.yaml | 3 - .../01-compose-basics/get-item-subject.yaml | 3 - .../01-compose-basics/get-selected-text.yaml | 3 - .../01-compose-basics/set-selected-text.yaml | 3 - samples/outlook/default.yaml | 3 - .../basics/basic-common-api-call.yaml | 3 - .../basics/create-presentation.yaml | 3 - .../powerpoint/basics/get-slide-metadata.yaml | 3 - samples/powerpoint/basics/insert-image.yaml | 3 - samples/powerpoint/basics/insert-svg.yaml | 3 - samples/powerpoint/default.yaml | 3 - .../project/basics/basic-common-api-call.yaml | 3 - samples/project/default.yaml | 3 - samples/web/default.yaml | 3 - .../word/01-basics/basic-api-call-es5.yaml | 3 - samples/word/01-basics/basic-api-call.yaml | 3 - .../word/01-basics/basic-common-api-call.yaml | 3 - .../insert-and-change-content-controls.yaml | 3 - .../15-images/insert-and-get-pictures.yaml | 3 - samples/word/20-lists/insert-list.yaml | 3 - .../get-paragraph-on-insertion-point.yaml | 3 - samples/word/25-paragraph/get-word-count.yaml | 3 - .../25-paragraph/insert-formatted-text.yaml | 3 - .../insert-header-and-footer.yaml | 3 - .../insert-in-different-locations.yaml | 3 - .../insert-line-and-page-breaks.yaml | 3 - .../25-paragraph/paragraph-properties.yaml | 3 - samples/word/25-paragraph/search.yaml | 3 - .../get-built-in-properties.yaml | 3 - ...read-write-custom-document-properties.yaml | 5 +- samples/word/35-ranges/scroll-to-range.yaml | 3 - .../split-words-of-first-paragraph.yaml | 3 - samples/word/40-tables/table-cell-access.yaml | 3 - samples/word/90-scenarios/doc-assembly.yaml | 3 - .../90-scenarios/multiple-property-set.yaml | 3 - samples/word/default.yaml | 3 - snippet-extractor-output/snippets.yaml | 4 +- 133 files changed, 388 insertions(+), 793 deletions(-) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 2ee130ec9..bc0d045f8 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -55,7 +55,7 @@ https://raw.githubusercontent.com////samples/excel/10-chart/chart-create-several-charts.yaml group: Chart api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 - id: excel-chart-create-doughnut-chart name: Doughnut chart fileName: create-doughnut-chart.yaml @@ -221,7 +221,7 @@ https://raw.githubusercontent.com////samples/excel/26-document/get-file-in-slices-async.yaml group: Document api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 - id: excel-document-properties name: Properties fileName: properties.yaml @@ -262,7 +262,7 @@ https://raw.githubusercontent.com////samples/excel/30-events/data-changed.yaml group: Events api_set: - ExcelApi: 1.3 + ExcelApi: 1.4 - id: excel-data-change-event-details name: Data change event details fileName: data-change-event-details.yaml @@ -320,7 +320,7 @@ https://raw.githubusercontent.com////samples/excel/30-events/events-worksheet.yaml group: Events api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 - id: excel-named-item-create-and-remove-named-item name: 'Create, access, and remove' fileName: create-and-remove-named-item.yaml @@ -404,7 +404,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/formatting.yaml group: Range api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 - id: excel-range-hyperlink name: Hyperlinks fileName: range-hyperlink.yaml @@ -422,7 +422,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/insert-delete-clear-range.yaml group: Range api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 - id: excel-range-range-relationships name: Range relationships fileName: range-relationships.yaml @@ -433,7 +433,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/range-relationships.yaml group: Range api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 - id: excel-range-remove-duplicates name: Remove duplicates fileName: range-remove-duplicates.yaml @@ -480,7 +480,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/set-get-values.yaml group: Range api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 - id: excel-shape-create-and-delete name: Create and delete geometric shapes fileName: shape-create-and-delete.yaml @@ -545,7 +545,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/add-rows-and-columns-to-a-table.yaml group: Table api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 - id: excel-table-convert-range-to-table name: Convert a range fileName: convert-range-to-table.yaml @@ -554,7 +554,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/convert-range-to-table.yaml group: Table api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 - id: excel-table-create-table name: Create a table fileName: create-table.yaml @@ -563,7 +563,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/create-table.yaml group: Table api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 - id: excel-table-filter-data name: Filter data fileName: filter-data.yaml @@ -572,7 +572,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/filter-data.yaml group: Table api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 - id: excel-table-formatting name: Formatting fileName: formatting.yaml @@ -581,7 +581,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/formatting.yaml group: Table api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 - id: excel-table-get-data-from-table name: Get data fileName: get-data-from-table.yaml @@ -590,7 +590,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/get-data-from-table.yaml group: Table api_set: - ExcelApi: 1.1 + 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 @@ -599,7 +599,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml group: Table api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 - id: excel-table-import-json-data name: Import JSON data fileName: import-json-data.yaml @@ -608,7 +608,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/import-json-data.yaml group: Table api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 - id: excel-table-sort-data name: Sort data fileName: sort-data.yaml @@ -617,7 +617,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/sort-data.yaml group: Table api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 - id: excel-table-style name: Style fileName: style.yaml @@ -735,7 +735,7 @@ https://raw.githubusercontent.com////samples/excel/54-worksheet/worksheet-range-cell.yaml group: Worksheet api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 - id: excel-worksheet-gridlines name: Gridlines fileName: gridlines.yaml @@ -865,7 +865,7 @@ https://raw.githubusercontent.com////samples/excel/90-scenarios/working-with-dates.yaml group: Scenarios api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 - id: excel-just-for-fun-patterns name: Colorful Patterns fileName: patterns.yaml @@ -876,7 +876,7 @@ https://raw.githubusercontent.com////samples/excel/99-just-for-fun/patterns.yaml group: Just For Fun api_set: - ExcelApi: 1.2 + ExcelApi: 1.4 - id: excel-just-for-fun-gradient name: Gradient fileName: gradient.yaml @@ -887,7 +887,7 @@ https://raw.githubusercontent.com////samples/excel/99-just-for-fun/gradient.yaml group: Just For Fun api_set: - ExcelApi: 1.2 + ExcelApi: 1.4 - id: excel-just-for-fun-path-finder-game name: Path finder fileName: path-finder-game.yaml @@ -898,7 +898,7 @@ https://raw.githubusercontent.com////samples/excel/99-just-for-fun/path-finder-game.yaml group: Just For Fun api_set: - ExcelApi: 1.2 + ExcelApi: 1.4 - id: excel-just-for-fun-tetrominos name: Tetromino stacking fileName: tetrominos.yaml @@ -918,4 +918,4 @@ https://raw.githubusercontent.com////samples/excel/99-just-for-fun/color-wheel.yaml group: Just For Fun api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 diff --git a/samples/excel/01-basics/basic-api-call-es5.yaml b/samples/excel/01-basics/basic-api-call-es5.yaml index 94f0d2a33..799a3e4de 100644 --- a/samples/excel/01-basics/basic-api-call-es5.yaml +++ b/samples/excel/01-basics/basic-api-call-es5.yaml @@ -69,8 +69,5 @@ 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/samples/excel/01-basics/basic-api-call.yaml b/samples/excel/01-basics/basic-api-call.yaml index ee1ca630f..23852b546 100644 --- a/samples/excel/01-basics/basic-api-call.yaml +++ b/samples/excel/01-basics/basic-api-call.yaml @@ -70,8 +70,5 @@ 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/samples/excel/01-basics/basic-common-api-call.yaml b/samples/excel/01-basics/basic-common-api-call.yaml index a5284b800..4299dd3a7 100644 --- a/samples/excel/01-basics/basic-common-api-call.yaml +++ b/samples/excel/01-basics/basic-common-api-call.yaml @@ -61,8 +61,5 @@ 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/samples/excel/10-chart/chart-axis-formatting.yaml b/samples/excel/10-chart/chart-axis-formatting.yaml index 7b7b6c0d0..eea0c6042 100644 --- a/samples/excel/10-chart/chart-axis-formatting.yaml +++ b/samples/excel/10-chart/chart-axis-formatting.yaml @@ -52,8 +52,9 @@ script: async function setup() { await Excel.run(async (context) => { - let sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + let salesTable = sheet.tables.add('A1:E1', true); salesTable.name = "SalesTable"; @@ -165,8 +166,5 @@ 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/samples/excel/10-chart/chart-axis.yaml b/samples/excel/10-chart/chart-axis.yaml index 23ffd6a41..efd14e6dc 100644 --- a/samples/excel/10-chart/chart-axis.yaml +++ b/samples/excel/10-chart/chart-axis.yaml @@ -102,7 +102,9 @@ script: async function setup() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + let expensesTable = sheet.tables.add("A1:E1", true); expensesTable.name = "SalesTable"; @@ -117,10 +119,8 @@ script: ["Spokes", 6005, 7634, 4589, 8765] ]); - if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); const chart = createChart(context); addVerticalAxisLabel(chart); @@ -235,8 +235,5 @@ 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/samples/excel/10-chart/chart-create-several-charts.yaml b/samples/excel/10-chart/chart-create-several-charts.yaml index b70ef4de8..f0626b591 100644 --- a/samples/excel/10-chart/chart-create-several-charts.yaml +++ b/samples/excel/10-chart/chart-create-several-charts.yaml @@ -5,7 +5,7 @@ description: 'Creates column-clustered, line, XY-scatter, area, radar, pie, 3D, author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 script: content: | $("#setup").click(() => tryCatch(setup)); @@ -213,39 +213,30 @@ script: } async function setup() { - await Excel.run(async (context) => { - await OfficeHelpers.ExcelUtilities.forceCreateSheet( - context.workbook, - "Sample" - ); - - const sheet = context.workbook.worksheets.getItem("Sample"); - - let expensesTable = sheet.tables.add("A1:E1", true); - - expensesTable.name = "SalesTable"; - - expensesTable.getHeaderRowRange().values = [ - ["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4"] - ]; + 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] + ]); - 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] - ]); - - if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { sheet.getUsedRange().format.autofitColumns(); sheet.getUsedRange().format.autofitRows(); - } - - sheet.activate(); - await context.sync(); + sheet.activate(); + await context.sync(); }); } @@ -343,8 +334,5 @@ 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/samples/excel/10-chart/chart-formatting.yaml b/samples/excel/10-chart/chart-formatting.yaml index 72d312e7e..a3a8d6f4e 100644 --- a/samples/excel/10-chart/chart-formatting.yaml +++ b/samples/excel/10-chart/chart-formatting.yaml @@ -115,7 +115,9 @@ script: async function setup() { await Excel.run(async (context) => { - let sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + let salesTable = sheet.tables.add("A1:E1", true); salesTable.name = "SalesTable"; @@ -219,8 +221,5 @@ 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/samples/excel/10-chart/chart-legend.yaml b/samples/excel/10-chart/chart-legend.yaml index 7f1b67b9f..68b189b2f 100644 --- a/samples/excel/10-chart/chart-legend.yaml +++ b/samples/excel/10-chart/chart-legend.yaml @@ -32,8 +32,9 @@ script: async function setup() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + let expensesTable = sheet.tables.add('A1:E1', true); expensesTable.name = "SalesTable"; @@ -48,10 +49,8 @@ script: ["Spokes", 6005, 7634, 4589, 8765] ]); - if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); createChart(context); addVerticalAxisLabel(context); @@ -142,8 +141,5 @@ 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/samples/excel/10-chart/chart-point.yaml b/samples/excel/10-chart/chart-point.yaml index c76d12ca5..dc770e43e 100644 --- a/samples/excel/10-chart/chart-point.yaml +++ b/samples/excel/10-chart/chart-point.yaml @@ -26,8 +26,9 @@ script: async function setup() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + let expensesTable = sheet.tables.add('A1:E1', true); expensesTable.name = "SalesTable"; @@ -42,10 +43,8 @@ script: ["Spokes", 6005, 7634, 4589, 8765] ]); - if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); createChart(context); sheet.activate(); @@ -128,8 +127,5 @@ 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/samples/excel/10-chart/chart-series-markers.yaml b/samples/excel/10-chart/chart-series-markers.yaml index 853e41a05..610119126 100644 --- a/samples/excel/10-chart/chart-series-markers.yaml +++ b/samples/excel/10-chart/chart-series-markers.yaml @@ -42,8 +42,9 @@ script: async function setup() { await Excel.run(async (context) => { - let sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + let salesTable = sheet.tables.add('A1:E1', true); salesTable.name = "SalesTable"; @@ -58,10 +59,8 @@ script: ["Spokes", 6005, 7634, 4589, 765] ]); - if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); sheet.activate(); @@ -123,8 +122,5 @@ 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/samples/excel/10-chart/chart-series-plotorder.yaml b/samples/excel/10-chart/chart-series-plotorder.yaml index 4c3878eac..fc343b468 100644 --- a/samples/excel/10-chart/chart-series-plotorder.yaml +++ b/samples/excel/10-chart/chart-series-plotorder.yaml @@ -38,8 +38,9 @@ script: async function setup() { await Excel.run(async (context) => { - let sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + let salesTable = sheet.tables.add('A1:E1', true); salesTable.name = "SalesTable"; @@ -54,10 +55,8 @@ script: ["Spokes", 6005, 7634, 4589, 8765] ]); - if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); createChart(context); sheet.activate(); @@ -134,8 +133,5 @@ 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/samples/excel/10-chart/chart-series.yaml b/samples/excel/10-chart/chart-series.yaml index 807debc29..4378f8118 100644 --- a/samples/excel/10-chart/chart-series.yaml +++ b/samples/excel/10-chart/chart-series.yaml @@ -48,10 +48,9 @@ script: async function setup() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet( - context.workbook, - "Sample" - ); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + let expensesTable = sheet.tables.add("A1:E1", true); expensesTable.name = "SalesTable"; @@ -68,10 +67,8 @@ script: ["Spokes", 6005, 7634, 4589, 8765] ]); - if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); createLineChart(context); sheet.activate(); @@ -153,8 +150,5 @@ 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/samples/excel/10-chart/chart-title-format.yaml b/samples/excel/10-chart/chart-title-format.yaml index b89f0e6e2..7978eae50 100644 --- a/samples/excel/10-chart/chart-title-format.yaml +++ b/samples/excel/10-chart/chart-title-format.yaml @@ -58,7 +58,9 @@ script: async function setup() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + let expensesTable = sheet.tables.add("A1:E1", true); expensesTable.name = "SalesTable"; @@ -156,8 +158,5 @@ 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/samples/excel/10-chart/chart-trendlines.yaml b/samples/excel/10-chart/chart-trendlines.yaml index 3b052e984..8f8586089 100644 --- a/samples/excel/10-chart/chart-trendlines.yaml +++ b/samples/excel/10-chart/chart-trendlines.yaml @@ -79,8 +79,9 @@ script: async function setup() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + let expensesTable = sheet.tables.add('A1:E1', true); expensesTable.name = "SalesTable"; @@ -95,10 +96,8 @@ script: ["Spokes", 6005, 7634, 4589, 8765] ]); - if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); createChart(context); sheet.activate(); @@ -200,8 +199,5 @@ 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/samples/excel/10-chart/create-doughnut-chart.yaml b/samples/excel/10-chart/create-doughnut-chart.yaml index 168c9f04b..b2200906d 100644 --- a/samples/excel/10-chart/create-doughnut-chart.yaml +++ b/samples/excel/10-chart/create-doughnut-chart.yaml @@ -66,8 +66,9 @@ script: async function setup() { await Excel.run(async (context) => { - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - const sheet = context.workbook.worksheets.getItem("Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + const expensesTable = sheet.tables.add('A1:B1', true); expensesTable.name = "ExpensesByCategoryTable"; @@ -147,8 +148,5 @@ 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/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml index 5b4d28cfe..31403d225 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml @@ -142,8 +142,9 @@ script: async function setup() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + queueCommandsToCreateTemperatureTable(sheet); sheet.activate(); @@ -233,8 +234,5 @@ 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/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml index f00248b2d..3208a7b9b 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -195,8 +195,9 @@ script: async function setup() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + queueCommandsToCreateTemperatureTable(sheet); queueCommandsToCreateSalesTable(sheet); queueCommandsToCreateProjectTable(sheet); @@ -350,8 +351,5 @@ 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/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 8013d57e2..f5862b6c4 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 @@ -155,8 +155,5 @@ 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/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 3d0ea3607..31b224f9d 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 @@ -141,8 +141,5 @@ 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/samples/excel/22-data-validation/data-validation.yaml b/samples/excel/22-data-validation/data-validation.yaml index fd26b695c..88f96ae7d 100644 --- a/samples/excel/22-data-validation/data-validation.yaml +++ b/samples/excel/22-data-validation/data-validation.yaml @@ -102,8 +102,9 @@ script: async function setup() { await Excel.run(async (context) => { - const decisionSheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Decision"); + context.workbook.worksheets.getItemOrNullObject("Decision").delete(); + const decisionSheet = context.workbook.worksheets.add("Decision"); + const optionsTable = decisionSheet.tables.add("A1:C4", true /*hasHeaders*/); optionsTable.name = "NameOptionsTable"; optionsTable.showBandedRows = false; @@ -115,12 +116,11 @@ script: // The names that will be allowed in the Baby Name column are // listed in a range on the Names sheet. - const namesSheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Names"); - namesSheet.getRange("A1:A3").values = [["Sue"], ["Ricky"], ["Liz"]]; + context.workbook.worksheets.getItemOrNullObject("Names").delete(); + const namesSheet = context.workbook.worksheets.add("Names"); + namesSheet.getRange("A1:A3").values = [["Sue"], ["Ricky"], ["Liz"]]; decisionSheet.activate(); - await context.sync(); }); } @@ -188,8 +188,5 @@ 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/samples/excel/26-document/get-file-in-slices-async.yaml b/samples/excel/26-document/get-file-in-slices-async.yaml index d2bbc8851..31251d395 100644 --- a/samples/excel/26-document/get-file-in-slices-async.yaml +++ b/samples/excel/26-document/get-file-in-slices-async.yaml @@ -4,7 +4,7 @@ name: Get file using slicing description: Uses slicing to get the byte array and base64-encoded string that represent the current document. host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 script: content: |- $("#setup").click(() => tryCatch(setup)); @@ -89,8 +89,9 @@ script: async function setup() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + let expensesTable = sheet.tables.add('A1:E1', true); expensesTable.name = "SalesTable"; @@ -105,10 +106,8 @@ script: ["Spokes", 6005, 7634, 4589, 8765] ]); - if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); createChart(context); sheet.activate(); @@ -213,9 +212,6 @@ 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 diff --git a/samples/excel/26-document/properties.yaml b/samples/excel/26-document/properties.yaml index 4669f3f21..67e36b50e 100644 --- a/samples/excel/26-document/properties.yaml +++ b/samples/excel/26-document/properties.yaml @@ -183,8 +183,5 @@ 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/samples/excel/30-events/data-change-event-details.yaml b/samples/excel/30-events/data-change-event-details.yaml index b16220ab0..1d03b8b23 100644 --- a/samples/excel/30-events/data-change-event-details.yaml +++ b/samples/excel/30-events/data-change-event-details.yaml @@ -34,9 +34,9 @@ script: async function setup() { await Excel.run(async (context) => { - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); - const sheet = context.workbook.worksheets.getItem("Sample"); const expensesTable = sheet.tables.add("A1:D1", true /*hasHeaders*/); expensesTable.name = "ExpensesTable"; @@ -112,8 +112,5 @@ 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/samples/excel/30-events/data-changed.yaml b/samples/excel/30-events/data-changed.yaml index 8bb5221f1..d644f3b86 100644 --- a/samples/excel/30-events/data-changed.yaml +++ b/samples/excel/30-events/data-changed.yaml @@ -5,7 +5,7 @@ description: Registers an event handler that runs when data is changed. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.3 + ExcelApi: 1.4 script: content: | $("#setup").click(() => tryCatch(setup)); @@ -39,7 +39,9 @@ script: async function setup() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + let salesTable = sheet.tables.add('A1:E1', true); salesTable.name = "SalesTable"; salesTable.getHeaderRowRange().values = [["Sales Team", "Qtr1", "Qtr2", "Qtr3", "Qtr4"]]; @@ -114,8 +116,5 @@ 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 diff --git a/samples/excel/30-events/events-chart-activated.yaml b/samples/excel/30-events/events-chart-activated.yaml index 250696518..3722acb94 100644 --- a/samples/excel/30-events/events-chart-activated.yaml +++ b/samples/excel/30-events/events-chart-activated.yaml @@ -40,8 +40,8 @@ script: async function setup() { await Excel.run(async (context) => { - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - const sheet = context.workbook.worksheets.getItem("Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); let expensesTable = sheet.tables.add('A1:E1', true); expensesTable.name = "SalesTable"; @@ -57,10 +57,8 @@ script: ["Spokes", 6005, 7634, 4589, 8765] ]); - if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); createPieChart(); createCylinderChart(); @@ -169,8 +167,5 @@ 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/samples/excel/30-events/events-chartcollection-added-activated.yaml b/samples/excel/30-events/events-chartcollection-added-activated.yaml index fb5416b56..4533e93cd 100644 --- a/samples/excel/30-events/events-chartcollection-added-activated.yaml +++ b/samples/excel/30-events/events-chartcollection-added-activated.yaml @@ -51,8 +51,9 @@ script: async function setup() { await Excel.run(async (context) => { - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - const sheet = context.workbook.worksheets.getItem("Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + let expensesTable = sheet.tables.add('A1:E1', true); expensesTable.name = "SalesTable"; @@ -68,13 +69,10 @@ script: ["Spokes", 6005, 7634, 4589, 8765] ]); - if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); sheet.activate(); - await context.sync(); }); } @@ -161,8 +159,5 @@ 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/samples/excel/30-events/events-disable-events.yaml b/samples/excel/30-events/events-disable-events.yaml index 77e73e4bb..d5deb0fcf 100644 --- a/samples/excel/30-events/events-disable-events.yaml +++ b/samples/excel/30-events/events-disable-events.yaml @@ -65,8 +65,9 @@ script: async function setup() { await Excel.run(async (context) => { - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - const sheet = context.workbook.worksheets.getItem("Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + let infoRange = sheet.getRange("A20:A21"); infoRange.values = [["Sums"], ["Grand Total"]] infoRange.format.autofitColumns(); @@ -182,8 +183,5 @@ 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 diff --git a/samples/excel/30-events/events-table-changed.yaml b/samples/excel/30-events/events-table-changed.yaml index 7556f7997..5267fec82 100644 --- a/samples/excel/30-events/events-table-changed.yaml +++ b/samples/excel/30-events/events-table-changed.yaml @@ -69,8 +69,9 @@ script: async function setup() { await Excel.run(async (context) => { - let sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + let salesTable = sheet.tables.add('A1:E1', true); salesTable.name = "SalesTable"; @@ -85,13 +86,10 @@ script: ["Spokes", 6005, 7634, 4589, 8765] ]); - if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); sheet.activate(); - await context.sync(); }); } @@ -175,8 +173,5 @@ 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 diff --git a/samples/excel/30-events/events-tablecollection-changed.yaml b/samples/excel/30-events/events-tablecollection-changed.yaml index 8702e0948..94a3e564e 100644 --- a/samples/excel/30-events/events-tablecollection-changed.yaml +++ b/samples/excel/30-events/events-tablecollection-changed.yaml @@ -54,8 +54,9 @@ script: async function setup() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + createSalesTable(sheet); createReturnsTable(sheet); @@ -165,8 +166,5 @@ 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 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 fa5334892..0188c8ff7 100644 --- a/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml +++ b/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml @@ -234,8 +234,5 @@ 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 diff --git a/samples/excel/30-events/events-worksheet.yaml b/samples/excel/30-events/events-worksheet.yaml index 3b66422f5..2f14d6a82 100644 --- a/samples/excel/30-events/events-worksheet.yaml +++ b/samples/excel/30-events/events-worksheet.yaml @@ -5,7 +5,7 @@ description: 'Registers event handlers that run when data is changed in workshee author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 script: content: |- $("#setup").click(() => tryCatch(setup)); @@ -104,7 +104,9 @@ script: async function setup() { await Excel.run(async (context) => { - let sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + let salesTable = sheet.tables.add("A1:F1", true); salesTable.name = "SalesTable"; @@ -192,8 +194,5 @@ 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/samples/excel/34-named-item/create-and-remove-named-item.yaml b/samples/excel/34-named-item/create-and-remove-named-item.yaml index aaa6e2fd2..4d5c620bb 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 @@ -93,7 +93,9 @@ script: async function setup() { await Excel.run(async (context) => { - let sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + let expensesTable = sheet.tables.add("A1:D1", true); expensesTable.name = "ExpensesTable"; expensesTable.getHeaderRowRange().values = [["Date", "Merchant", "Category", "Amount"]]; @@ -230,8 +232,5 @@ 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/samples/excel/34-named-item/update-named-item.yaml b/samples/excel/34-named-item/update-named-item.yaml index 7d018350a..5d42d5d35 100644 --- a/samples/excel/34-named-item/update-named-item.yaml +++ b/samples/excel/34-named-item/update-named-item.yaml @@ -61,7 +61,9 @@ script: async function setup() { await Excel.run(async (context) => { // Create and activate the worksheet - const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + sheet.activate(); // Format the first range @@ -130,8 +132,5 @@ 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/samples/excel/38-pivottable/pivottable-calculations.yaml b/samples/excel/38-pivottable/pivottable-calculations.yaml index 403562c73..0e6eb9022 100644 --- a/samples/excel/38-pivottable/pivottable-calculations.yaml +++ b/samples/excel/38-pivottable/pivottable-calculations.yaml @@ -90,10 +90,10 @@ script: async function setup() { await Excel.run(async (context) => { // create the worksheets - const dataSheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Data"); - const pivotSheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Pivot"); + 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 const data = [["Farm", "Type", "Classification", "Crates Sold at Farm", "Crates Sold Wholesale"], @@ -209,8 +209,5 @@ 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/samples/excel/38-pivottable/pivottable-create-and-modify.yaml b/samples/excel/38-pivottable/pivottable-create-and-modify.yaml index 55844af49..9bb3d76dc 100644 --- a/samples/excel/38-pivottable/pivottable-create-and-modify.yaml +++ b/samples/excel/38-pivottable/pivottable-create-and-modify.yaml @@ -145,10 +145,10 @@ script: async function setup() { await Excel.run(async (context) => { - const sheetData = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Data"); - const sheetPivot = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Pivot"); + 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], @@ -172,11 +172,11 @@ script: ["F Farms", "Kiwi", "Organic", 100, 150], ["F Farms", "Lemon", "Conventional", 150, 270]]; - const range = sheetData.getRange("A1:E21"); + const range = dataSheet.getRange("A1:E21"); range.values = data; range.format.autofitColumns(); - sheetPivot.activate(); + pivotSheet.activate(); await context.sync(); }); @@ -274,8 +274,5 @@ 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/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml b/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml index c2c48d015..425d4df3d 100644 --- a/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml +++ b/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml @@ -84,10 +84,10 @@ script: async function setup() { await Excel.run(async (context) => { // create the worksheets - const dataSheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Data"); - const pivotSheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Pivot"); + 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 const data = [["Farm", "Type", "Classification", "Crates Sold at Farm", "Crates Sold Wholesale"], @@ -231,8 +231,5 @@ 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/samples/excel/42-range/formatting.yaml b/samples/excel/42-range/formatting.yaml index 17cd4bf0e..0c93397be 100644 --- a/samples/excel/42-range/formatting.yaml +++ b/samples/excel/42-range/formatting.yaml @@ -5,7 +5,7 @@ description: Formats a range. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 script: content: | $("#setup").click(() => tryCatch(setup)); @@ -43,8 +43,8 @@ script: async function setup() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); const data = [ ["Product", "Qty", "Unit Price", "Total Price"], @@ -120,8 +120,5 @@ 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/samples/excel/42-range/insert-delete-clear-range.yaml b/samples/excel/42-range/insert-delete-clear-range.yaml index 9bf7ec205..336f66733 100644 --- a/samples/excel/42-range/insert-delete-clear-range.yaml +++ b/samples/excel/42-range/insert-delete-clear-range.yaml @@ -5,7 +5,7 @@ description: 'Inserts, deletes, and clears a range.' author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 script: content: | $("#setup").click(() => tryCatch(setup)); @@ -49,8 +49,8 @@ script: async function setup() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); const data = [ ["Product", "Qty", "Unit Price", "Total Price"], @@ -133,8 +133,5 @@ 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/samples/excel/42-range/range-areas.yaml b/samples/excel/42-range/range-areas.yaml index d3b690bd3..a8a6f6d7a 100644 --- a/samples/excel/42-range/range-areas.yaml +++ b/samples/excel/42-range/range-areas.yaml @@ -93,8 +93,8 @@ script: async function reset() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); const data = [ ["Product", "Qty", "Category", "Unit Price", "Base Price", "Tax", "Total Charge", "Manager's Discount", "Final Price"], @@ -181,8 +181,5 @@ 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/samples/excel/42-range/range-copyfrom.yaml b/samples/excel/42-range/range-copyfrom.yaml index dd6f2db12..3c04b8bf2 100644 --- a/samples/excel/42-range/range-copyfrom.yaml +++ b/samples/excel/42-range/range-copyfrom.yaml @@ -112,7 +112,8 @@ script: async function setup() { await Excel.run(async (context) => { - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); const sheet = context.workbook.worksheets.getItem("Sample"); sheet.getRange("A1:D1").values = [["3", "5", "7", ""]]; @@ -203,8 +204,5 @@ 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/samples/excel/42-range/range-find.yaml b/samples/excel/42-range/range-find.yaml index b64c6ebc6..997ce437b 100644 --- a/samples/excel/42-range/range-find.yaml +++ b/samples/excel/42-range/range-find.yaml @@ -79,9 +79,8 @@ script: async function setup() { await Excel.run(async (context) => { - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - - const sheet = context.workbook.worksheets.getItem("Sample"); + 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"; @@ -168,8 +167,5 @@ 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/samples/excel/42-range/range-hyperlink.yaml b/samples/excel/42-range/range-hyperlink.yaml index ffdc4d42e..6baa18497 100644 --- a/samples/excel/42-range/range-hyperlink.yaml +++ b/samples/excel/42-range/range-hyperlink.yaml @@ -126,29 +126,24 @@ script: async function setup() { await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Orders").delete(); + const ordersSheet = context.workbook.worksheets.add("Orders"); - const ordersSheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Orders"); + context.workbook.worksheets.getItemOrNullObject("Apple").delete(); + const appleSheet = context.workbook.worksheets.add("Apple"); - const appleSheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Apple"); + context.workbook.worksheets.getItemOrNullObject("Banana").delete(); + const bananaSheet = context.workbook.worksheets.add("Banana"); - const bananaSheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Banana"); - - const melonSheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Melon"); + context.workbook.worksheets.getItemOrNullObject("Melon").delete(); + const melonSheet = context.workbook.worksheets.add("Melon"); createOrdersData(ordersSheet); - createAppleData(appleSheet); - createBananaData(bananaSheet); - createMelonData(melonSheet); ordersSheet.activate(); - await context.sync(); }); } @@ -328,8 +323,5 @@ 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/samples/excel/42-range/range-relationships.yaml b/samples/excel/42-range/range-relationships.yaml index 94af9d20c..c3738dcee 100644 --- a/samples/excel/42-range/range-relationships.yaml +++ b/samples/excel/42-range/range-relationships.yaml @@ -5,7 +5,7 @@ description: 'Shows relationships between ranges, such as bounding rectangles an author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 script: content: | $("#setup").click(() => tryCatch(setup)); @@ -154,15 +154,12 @@ script: // (3) Press "Create sales contest charts". console.log(`Missing ${continent} Data`); console.log(`There is no data for the ${continent} teams.`); - ); } async function setup() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet( - context.workbook, - "Sample" - ); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); const rangeA = sheet.getRange("H2:J5"); rangeA.format.fill.color = "green"; @@ -261,8 +258,5 @@ 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/samples/excel/42-range/range-remove-duplicates.yaml b/samples/excel/42-range/range-remove-duplicates.yaml index bd1c1680f..deb113235 100644 --- a/samples/excel/42-range/range-remove-duplicates.yaml +++ b/samples/excel/42-range/range-remove-duplicates.yaml @@ -42,7 +42,8 @@ script: async function setup() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); const data = [ ["Product Name", "Distributor", "Order Amount"], @@ -128,8 +129,5 @@ 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/samples/excel/42-range/range-text-orientation.yaml b/samples/excel/42-range/range-text-orientation.yaml index 13984683e..4aea9a61a 100644 --- a/samples/excel/42-range/range-text-orientation.yaml +++ b/samples/excel/42-range/range-text-orientation.yaml @@ -43,8 +43,8 @@ script: async function setup() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); const data = [ ["Product", "Qty", "Unit Price", "Total Price"], @@ -123,8 +123,5 @@ 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/samples/excel/42-range/selected-range.yaml b/samples/excel/42-range/selected-range.yaml index 19a43de5e..40527b061 100644 --- a/samples/excel/42-range/selected-range.yaml +++ b/samples/excel/42-range/selected-range.yaml @@ -83,8 +83,5 @@ 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/samples/excel/42-range/set-get-values.yaml b/samples/excel/42-range/set-get-values.yaml index dffbad027..e1a196207 100644 --- a/samples/excel/42-range/set-get-values.yaml +++ b/samples/excel/42-range/set-get-values.yaml @@ -5,7 +5,7 @@ description: Gets and sets values and formulas for a range. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 script: content: | $("#setup").click(() => tryCatch(setup)); @@ -137,8 +137,8 @@ script: async function setup() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); const data = [ ["Product", "Qty", "Unit Price"], @@ -240,8 +240,5 @@ 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/samples/excel/42-range/used-range.yaml b/samples/excel/42-range/used-range.yaml index d671a608d..68bc65cf1 100644 --- a/samples/excel/42-range/used-range.yaml +++ b/samples/excel/42-range/used-range.yaml @@ -67,7 +67,9 @@ script: async function setup() { await Excel.run(async context => { - const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + let salesTable = sheet.tables.add("B2:F2", true /* hasHeaders */); salesTable.name = "SalesTable"; salesTable.showTotals = true; @@ -143,8 +145,5 @@ 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/samples/excel/44-shape/shape-create-and-delete.yaml b/samples/excel/44-shape/shape-create-and-delete.yaml index 32cfed48e..51bdfb42e 100644 --- a/samples/excel/44-shape/shape-create-and-delete.yaml +++ b/samples/excel/44-shape/shape-create-and-delete.yaml @@ -54,8 +54,9 @@ script: async function setup() { await Excel.run(async (context) => { - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Shapes"); - const sheet = context.workbook.worksheets.getItem("Shapes"); + context.workbook.worksheets.getItemOrNullObject("Shapes").delete(); + const sheet = context.workbook.worksheets.add("Shapes"); + sheet.activate(); await context.sync(); }); @@ -63,7 +64,9 @@ script: async function removeAll() { await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Shapes"); + context.workbook.worksheets.getItemOrNullObject("Shapes").delete(); + const sheet = context.workbook.worksheets.add("Shapes"); + const shapes = sheet.shapes; // load all the shapes in the collection without loading their properties @@ -135,8 +138,5 @@ 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/samples/excel/44-shape/shape-groups.yaml b/samples/excel/44-shape/shape-groups.yaml index 74026d545..b264c071c 100644 --- a/samples/excel/44-shape/shape-groups.yaml +++ b/samples/excel/44-shape/shape-groups.yaml @@ -54,8 +54,9 @@ script: async function setup() { await Excel.run(async (context) => { - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Shapes"); - const sheet = context.workbook.worksheets.getItem("Shapes"); + context.workbook.worksheets.getItemOrNullObject("Shapes").delete(); + const sheet = context.workbook.worksheets.add("Shapes"); + sheet.activate(); await context.sync(); }); @@ -152,8 +153,5 @@ 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/samples/excel/44-shape/shape-images.yaml b/samples/excel/44-shape/shape-images.yaml index 288639820..8a569b43a 100644 --- a/samples/excel/44-shape/shape-images.yaml +++ b/samples/excel/44-shape/shape-images.yaml @@ -69,8 +69,9 @@ script: async function setup() { await Excel.run(async (context) => { - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Shapes"); - const sheet = context.workbook.worksheets.getItem("Shapes"); + context.workbook.worksheets.getItemOrNullObject("Shapes").delete(); + const sheet = context.workbook.worksheets.add("Shapes"); + sheet.activate(); await context.sync(); }); @@ -136,8 +137,5 @@ 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/samples/excel/44-shape/shape-lines.yaml b/samples/excel/44-shape/shape-lines.yaml index 596e6befd..fd565f396 100644 --- a/samples/excel/44-shape/shape-lines.yaml +++ b/samples/excel/44-shape/shape-lines.yaml @@ -121,8 +121,9 @@ script: async function setup() { await Excel.run(async (context) => { - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Shapes"); - const sheet = context.workbook.worksheets.getItem("Shapes"); + context.workbook.worksheets.getItemOrNullObject("Shapes").delete(); + const sheet = context.workbook.worksheets.add("Shapes"); + sheet.activate(); await context.sync(); }); @@ -226,8 +227,5 @@ 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 diff --git a/samples/excel/44-shape/shape-move-and-order.yaml b/samples/excel/44-shape/shape-move-and-order.yaml index 7e30c1ca6..01e8641df 100644 --- a/samples/excel/44-shape/shape-move-and-order.yaml +++ b/samples/excel/44-shape/shape-move-and-order.yaml @@ -63,8 +63,9 @@ script: async function setup() { await Excel.run(async (context) => { - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Shapes"); - const sheet = context.workbook.worksheets.getItem("Shapes"); + context.workbook.worksheets.getItemOrNullObject("Shapes").delete(); + const sheet = context.workbook.worksheets.add("Shapes"); + sheet.activate(); await context.sync(); }); @@ -167,8 +168,5 @@ 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/samples/excel/44-shape/shape-textboxes.yaml b/samples/excel/44-shape/shape-textboxes.yaml index 2cf326762..59f6aeb2c 100644 --- a/samples/excel/44-shape/shape-textboxes.yaml +++ b/samples/excel/44-shape/shape-textboxes.yaml @@ -72,8 +72,9 @@ script: async function setup() { await Excel.run(async (context) => { - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Shapes"); - const sheet = context.workbook.worksheets.getItem("Shapes"); + context.workbook.worksheets.getItemOrNullObject("Shapes").delete(); + const sheet = context.workbook.worksheets.add("Shapes"); + sheet.activate(); await context.sync(); }); @@ -142,8 +143,5 @@ 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 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 3262a6f87..a023706a7 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 @@ -5,7 +5,7 @@ description: Adds rows and columns to a table. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 script: content: | $("#setup").click(() => tryCatch(setup)); @@ -88,12 +88,9 @@ script: /** Create a new table with sample data */ async function setup() { await Excel.run(async (context) => { - await OfficeHelpers.ExcelUtilities.forceCreateSheet( - context.workbook, - "Sample" - ); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); - const sheet = context.workbook.worksheets.getItem("Sample"); const expensesTable = sheet.tables.add("A1:D1", true /*hasHeaders*/); expensesTable.name = "ExpensesTable"; expensesTable.getHeaderRowRange().values = [ @@ -110,10 +107,8 @@ script: ["1/15/2017", "Best For You Organics Company", "Groceries", "$97"] ]); - if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { sheet.getUsedRange().format.autofitColumns(); sheet.getUsedRange().format.autofitRows(); - } sheet.activate(); await context.sync(); @@ -180,8 +175,5 @@ 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/samples/excel/46-table/convert-range-to-table.yaml b/samples/excel/46-table/convert-range-to-table.yaml index 9f9ab9e7e..3d097ca21 100644 --- a/samples/excel/46-table/convert-range-to-table.yaml +++ b/samples/excel/46-table/convert-range-to-table.yaml @@ -5,7 +5,7 @@ description: Converts a range to a table. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 script: content: | $("#setup").click(() => tryCatch(setup)); @@ -24,8 +24,8 @@ script: /** Create a range */ async function setup() { await Excel.run(async (context) => { - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - const sheet = context.workbook.worksheets.getItem("Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); const values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4"], ["Frames", 5000, 7000, 6544, 4377], @@ -39,11 +39,8 @@ script: range.values = values; sheet.getRange("A1:E1").format.font.bold = true; - - if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); sheet.activate(); await context.sync(); @@ -104,8 +101,5 @@ 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/samples/excel/46-table/create-table.yaml b/samples/excel/46-table/create-table.yaml index 8c1a107d2..b8caf3b27 100644 --- a/samples/excel/46-table/create-table.yaml +++ b/samples/excel/46-table/create-table.yaml @@ -5,16 +5,16 @@ description: Creates a table. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 script: content: | $("#create-table").click(() => tryCatch(createTable)); async function createTable() { await Excel.run(async (context) => { - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); - const sheet = context.workbook.worksheets.getItem("Sample"); const expensesTable = sheet.tables.add("A1:D1", true /*hasHeaders*/); expensesTable.name = "ExpensesTable"; @@ -30,11 +30,9 @@ script: ["1/15/2017", "Best For You Organics Company", "Groceries", "$97"] ]); - if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } - + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + sheet.activate(); await context.sync(); @@ -88,8 +86,5 @@ 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/samples/excel/46-table/filter-data.yaml b/samples/excel/46-table/filter-data.yaml index 6d8999dd7..6c5401794 100644 --- a/samples/excel/46-table/filter-data.yaml +++ b/samples/excel/46-table/filter-data.yaml @@ -5,7 +5,7 @@ description: Filters table data. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 script: content: | $("#setup").click(() => tryCatch(setup)); @@ -49,10 +49,8 @@ script: /** Create a new table with sample data */ async function setup() { await Excel.run(async (context) => { - - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - - const sheet = context.workbook.worksheets.getItem("Sample"); + 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"; @@ -69,13 +67,10 @@ script: ["1/15/2017", "Best For You Organics Company", "Groceries", "$97"] ]); - if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); sheet.activate(); - await context.sync(); }); } @@ -137,8 +132,5 @@ 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/samples/excel/46-table/formatting.yaml b/samples/excel/46-table/formatting.yaml index 914dd2f85..7a876f4c4 100644 --- a/samples/excel/46-table/formatting.yaml +++ b/samples/excel/46-table/formatting.yaml @@ -5,7 +5,7 @@ description: Formats a table. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 script: content: | $("#setup").click(() => tryCatch(setup)); @@ -28,10 +28,8 @@ script: /** Create a new table with sample data */ async function setup() { await Excel.run(async (context) => { - - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - - const sheet = context.workbook.worksheets.getItem("Sample"); + 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"; @@ -48,13 +46,10 @@ script: ["1/15/2017", "Best For You Organics Company", "Groceries", "$97"] ]); - if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); sheet.activate(); - await context.sync(); }); } @@ -113,8 +108,5 @@ 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/samples/excel/46-table/get-data-from-table.yaml b/samples/excel/46-table/get-data-from-table.yaml index a1bf61f7d..421bf9580 100644 --- a/samples/excel/46-table/get-data-from-table.yaml +++ b/samples/excel/46-table/get-data-from-table.yaml @@ -5,7 +5,7 @@ description: Gets data from a table. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 script: content: | $("#setup").click(() => tryCatch(setup)); @@ -41,12 +41,11 @@ script: /** Create a new table with some sample data */ async function setup() { await Excel.run(async (context) => { - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - - const sheet = context.workbook.worksheets.getItem("Sample"); + 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.name = "ExpensesTable"; expensesTable.getHeaderRowRange().values = [["Date", "Merchant", "Category", "Amount"]]; @@ -60,10 +59,8 @@ script: ["1/15/2017", "Best For You Organics Company", "Groceries", "$97"] ]); - if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); sheet.activate(); await context.sync(); @@ -126,8 +123,5 @@ 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/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 267565bfd..98958e3c8 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 @@ -5,7 +5,7 @@ description: Gets the visible range from a filtered table. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 script: content: |+ $("#create-table").click(() => tryCatch(createTable)); @@ -42,8 +42,8 @@ script: /** Create a new table with some sample data*/ async function createTable() { await Excel.run(async (context) => { - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - const sheet = context.workbook.worksheets.getItem("Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); let expensesTable = sheet.tables.add('A1:D1', true /*hasHeaders*/); expensesTable.name = "ExpensesTable"; @@ -60,10 +60,8 @@ script: ["1/15/2017", "Best For You Organics Company", "Groceries", "$97"] ]); - if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); sheet.activate(); await context.sync(); @@ -148,8 +146,5 @@ 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/samples/excel/46-table/import-json-data.yaml b/samples/excel/46-table/import-json-data.yaml index 3c169030b..ea1ed9d31 100644 --- a/samples/excel/46-table/import-json-data.yaml +++ b/samples/excel/46-table/import-json-data.yaml @@ -5,33 +5,31 @@ description: Imports JSON data into a table. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 script: content: | $("#import-json-data").click(() => tryCatch(importJsonData)); async function importJsonData() { await Excel.run(async (context) => { - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - const sheet = context.workbook.worksheets.getItem("Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); - let expensesTable = sheet.tables.add("A1:D1", true); - expensesTable.name = "ExpensesTable"; - expensesTable.getHeaderRowRange().values = [["Date", "Merchant", "Category", "Amount"]]; + let expensesTable = sheet.tables.add("A1:D1", true); + expensesTable.name = "ExpensesTable"; + expensesTable.getHeaderRowRange().values = [["Date", "Merchant", "Category", "Amount"]]; - const newData = transactions.map(item => - [item.DATE, item.MERCHANT, item.CATEGORY, item.AMOUNT]); + const newData = transactions.map(item => + [item.DATE, item.MERCHANT, item.CATEGORY, item.AMOUNT]); - expensesTable.rows.add(null, newData); + expensesTable.rows.add(null, newData); - if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { sheet.getUsedRange().format.autofitColumns(); sheet.getUsedRange().format.autofitRows(); - } - - sheet.activate(); - await context.sync(); - }); + + sheet.activate(); + await context.sync(); + }); } const transactions = [ @@ -151,8 +149,5 @@ 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/samples/excel/46-table/sort-data.yaml b/samples/excel/46-table/sort-data.yaml index 6dc35da73..ad017725b 100644 --- a/samples/excel/46-table/sort-data.yaml +++ b/samples/excel/46-table/sort-data.yaml @@ -5,7 +5,7 @@ description: Sorts the data within a table. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 script: content: | $("#setup").click(() => tryCatch(setup)); @@ -13,56 +13,52 @@ script: async function sortTable() { await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const expensesTable = sheet.tables.getItem("ExpensesTable"); - - // sort the table by the "Amount" column - const sortFields = [ - { - key: 3, - ascending: false - } - ]; - expensesTable.sort.apply(sortFields); - - await context.sync(); + const sheet = context.workbook.worksheets.getItem("Sample"); + const expensesTable = sheet.tables.getItem("ExpensesTable"); + + // sort the table by the "Amount" column + const sortFields = [ + { + key: 3, + ascending: false + } + ]; + expensesTable.sort.apply(sortFields); + + await context.sync(); }); } /** Create a new table with sample data */ async function setup() { await Excel.run(async (context) => { - await OfficeHelpers.ExcelUtilities.forceCreateSheet( - context.workbook, - "Sample" - ); - - const sheet = context.workbook.worksheets.getItem("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"] - ]); - - if (Office.context.requirements.isSetSupported("ExcelApi", 1.2)) { + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + + const sheet = context.workbook.worksheets.getItem("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(); + + sheet.activate(); + await context.sync(); }); } @@ -119,8 +115,5 @@ 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/samples/excel/46-table/style.yaml b/samples/excel/46-table/style.yaml index b851d7d77..ae65e0c93 100644 --- a/samples/excel/46-table/style.yaml +++ b/samples/excel/46-table/style.yaml @@ -116,8 +116,9 @@ script: async function setup() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + let salesTable = sheet.tables.add('A1:E1', true); salesTable.name = "SalesTable"; @@ -132,14 +133,10 @@ script: ["Spokes", 6005, 7634, 4589, 8765] ]); - - if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); sheet.activate(); - await context.sync(); }); } @@ -234,8 +231,5 @@ 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/samples/excel/50-workbook/create-get-change-delete-settings.yaml b/samples/excel/50-workbook/create-get-change-delete-settings.yaml index 1712af221..0f79490d0 100644 --- a/samples/excel/50-workbook/create-get-change-delete-settings.yaml +++ b/samples/excel/50-workbook/create-get-change-delete-settings.yaml @@ -117,8 +117,5 @@ 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/samples/excel/50-workbook/create-workbook.yaml b/samples/excel/50-workbook/create-workbook.yaml index bd6d180a3..bfd83ce52 100644 --- a/samples/excel/50-workbook/create-workbook.yaml +++ b/samples/excel/50-workbook/create-workbook.yaml @@ -88,8 +88,5 @@ 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/samples/excel/50-workbook/data-protection.yaml b/samples/excel/50-workbook/data-protection.yaml index b83ae1cc5..c0ec6cd07 100644 --- a/samples/excel/50-workbook/data-protection.yaml +++ b/samples/excel/50-workbook/data-protection.yaml @@ -137,8 +137,9 @@ script: async function setup() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + let expensesTable = sheet.tables.add('A1:E1', true); expensesTable.name = "SalesTable"; @@ -153,13 +154,10 @@ script: ["Spokes", 6005, 7634, 4589, 8765] ]); - if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); sheet.activate(); - await context.sync(); }); } @@ -263,8 +261,5 @@ 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/samples/excel/50-workbook/workbook-get-active-cell.yaml b/samples/excel/50-workbook/workbook-get-active-cell.yaml index f3baac87e..e6fd931c9 100644 --- a/samples/excel/50-workbook/workbook-get-active-cell.yaml +++ b/samples/excel/50-workbook/workbook-get-active-cell.yaml @@ -69,8 +69,5 @@ 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/samples/excel/54-worksheet/active-worksheet.yaml b/samples/excel/54-worksheet/active-worksheet.yaml index 5a08fdbb9..7b81a0512 100644 --- a/samples/excel/54-worksheet/active-worksheet.yaml +++ b/samples/excel/54-worksheet/active-worksheet.yaml @@ -128,8 +128,5 @@ 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/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml b/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml index 19bb795dc..a1ad45ccc 100644 --- a/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml +++ b/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml @@ -147,8 +147,5 @@ 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/samples/excel/54-worksheet/gridlines.yaml b/samples/excel/54-worksheet/gridlines.yaml index e72c21f9f..cd050b281 100644 --- a/samples/excel/54-worksheet/gridlines.yaml +++ b/samples/excel/54-worksheet/gridlines.yaml @@ -82,8 +82,5 @@ 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/samples/excel/54-worksheet/list-worksheets.yaml b/samples/excel/54-worksheet/list-worksheets.yaml index 1a2be30bd..a33432cfa 100644 --- a/samples/excel/54-worksheet/list-worksheets.yaml +++ b/samples/excel/54-worksheet/list-worksheets.yaml @@ -75,8 +75,5 @@ 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/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml b/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml index be2384898..e2bb0c34f 100644 --- a/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml +++ b/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml @@ -166,8 +166,5 @@ 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/samples/excel/54-worksheet/tab-color.yaml b/samples/excel/54-worksheet/tab-color.yaml index 9d4122d2b..cee3d8ec1 100644 --- a/samples/excel/54-worksheet/tab-color.yaml +++ b/samples/excel/54-worksheet/tab-color.yaml @@ -111,8 +111,5 @@ 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/samples/excel/54-worksheet/worksheet-auto-filter.yaml b/samples/excel/54-worksheet/worksheet-auto-filter.yaml index 81d8d9122..af2e1b0f4 100644 --- a/samples/excel/54-worksheet/worksheet-auto-filter.yaml +++ b/samples/excel/54-worksheet/worksheet-auto-filter.yaml @@ -57,7 +57,8 @@ script: async function setup() { await Excel.run(async (context) => { - const dataSheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const dataSheet = context.workbook.worksheets.add("Sample"); const data = [ ["Farm", "Type", "Classification", "Crates Sold Wholesale"], @@ -156,8 +157,5 @@ 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/samples/excel/54-worksheet/worksheet-copy.yaml b/samples/excel/54-worksheet/worksheet-copy.yaml index 603cdb62f..602b9e6db 100644 --- a/samples/excel/54-worksheet/worksheet-copy.yaml +++ b/samples/excel/54-worksheet/worksheet-copy.yaml @@ -28,8 +28,9 @@ script: async function setup() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + let expensesTable = sheet.tables.add('A1:E1', true); expensesTable.name = "SalesTable"; @@ -44,13 +45,10 @@ script: ["Spokes", 6005, 7634, 4589, 8765] ]); - if (Office.context.requirements.isSetSupported("ExcelApi", 1.7)) { - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - } + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); sheet.activate(); - await context.sync(); }); } @@ -109,8 +107,5 @@ 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/samples/excel/54-worksheet/worksheet-find-all.yaml b/samples/excel/54-worksheet/worksheet-find-all.yaml index 3c9486427..6e880ddce 100644 --- a/samples/excel/54-worksheet/worksheet-find-all.yaml +++ b/samples/excel/54-worksheet/worksheet-find-all.yaml @@ -72,8 +72,8 @@ script: async function setup() { await Excel.run(async (context) => { - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - const sheet = context.workbook.worksheets.getItem("Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); const projectTable = sheet.tables.add("A1:D1", true); projectTable.name = "ProjectTable"; @@ -149,8 +149,5 @@ 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/samples/excel/54-worksheet/worksheet-freeze-panes.yaml b/samples/excel/54-worksheet/worksheet-freeze-panes.yaml index ee0769e86..e85e69095 100644 --- a/samples/excel/54-worksheet/worksheet-freeze-panes.yaml +++ b/samples/excel/54-worksheet/worksheet-freeze-panes.yaml @@ -76,8 +76,8 @@ script: async function setup() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); const productsData1 = [ ["Vegetables", "Qty", "Unit Price", "Total Price"], @@ -181,8 +181,5 @@ 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/samples/excel/54-worksheet/worksheet-page-layout.yaml b/samples/excel/54-worksheet/worksheet-page-layout.yaml index b66d84a49..ed9126377 100644 --- a/samples/excel/54-worksheet/worksheet-page-layout.yaml +++ b/samples/excel/54-worksheet/worksheet-page-layout.yaml @@ -66,7 +66,8 @@ script: async function setup() { await Excel.run(async (context) => { - const printSheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Print"); + context.workbook.worksheets.getItemOrNullObject("Print").delete(); + const printSheet = context.workbook.worksheets.add("Print"); let farmTable = printSheet.tables.add("A1:E1", true); farmTable.name = "FarmTable"; @@ -191,8 +192,5 @@ 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/samples/excel/54-worksheet/worksheet-range-cell.yaml b/samples/excel/54-worksheet/worksheet-range-cell.yaml index 5d142bb55..98a656053 100644 --- a/samples/excel/54-worksheet/worksheet-range-cell.yaml +++ b/samples/excel/54-worksheet/worksheet-range-cell.yaml @@ -5,7 +5,7 @@ description: 'Gets the used range, the entire range of a worksheet, the specifie author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 script: content: | $("#setup").click(() => tryCatch(setup)); @@ -65,8 +65,8 @@ script: async function setup() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); const data = [ ["Product", "Qty", "Unit Price", "Total Price"], @@ -152,8 +152,5 @@ 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/samples/excel/54-worksheet/worksheet-visibility.yaml b/samples/excel/54-worksheet/worksheet-visibility.yaml index d89ca56e0..3af9e502a 100644 --- a/samples/excel/54-worksheet/worksheet-visibility.yaml +++ b/samples/excel/54-worksheet/worksheet-visibility.yaml @@ -57,16 +57,16 @@ script: async function setup() { await Excel.run(async (context) => { - const sheets = context.workbook.worksheets; - sheets.load("items"); + const sheets = context.workbook.worksheets; + sheets.load("items"); - await context.sync(); + await context.sync(); - if (sheets.items.length < 2) { - sheets.add(); + if (sheets.items.length < 2) { + sheets.add(); - await context.sync(); - } + await context.sync(); + } }); } @@ -127,8 +127,5 @@ 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/samples/excel/85-preview-apis/comment.yaml b/samples/excel/85-preview-apis/comment.yaml index 2e040113f..f4f064bd4 100644 --- a/samples/excel/85-preview-apis/comment.yaml +++ b/samples/excel/85-preview-apis/comment.yaml @@ -96,8 +96,9 @@ script: async function setup() { await Excel.run(async (context) => { - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Comments"); - const sheet = context.workbook.worksheets.getItem("Comments"); + context.workbook.worksheets.getItemOrNullObject("Comments").delete(); + const sheet = context.workbook.worksheets.add("Comments"); + sheet.activate(); await context.sync(); }); @@ -184,8 +185,5 @@ 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/samples/excel/85-preview-apis/pivottable-slicer.yaml b/samples/excel/85-preview-apis/pivottable-slicer.yaml index 7a1a7900e..51fd370ad 100644 --- a/samples/excel/85-preview-apis/pivottable-slicer.yaml +++ b/samples/excel/85-preview-apis/pivottable-slicer.yaml @@ -91,8 +91,10 @@ script: async function setup() { await Excel.run(async (context) => { - const sheetData = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Data"); - const sheetPivot = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Pivot"); + 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"], @@ -118,11 +120,11 @@ script: ["F Farms", "Lemon", "Conventional", 150, 270] ]; - const range = sheetData.getRange("A1:E21"); + const range = dataSheet.getRange("A1:E21"); range.values = data; range.format.autofitColumns(); - sheetPivot.activate(); + pivotSheet.activate(); await context.sync(); }); @@ -208,8 +210,5 @@ 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/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml index 990b152df..672fed5ad 100644 --- a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml +++ b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml @@ -80,8 +80,5 @@ 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/samples/excel/85-preview-apis/workbook-save-and-close.yaml b/samples/excel/85-preview-apis/workbook-save-and-close.yaml index a076c287f..f95b02270 100644 --- a/samples/excel/85-preview-apis/workbook-save-and-close.yaml +++ b/samples/excel/85-preview-apis/workbook-save-and-close.yaml @@ -91,8 +91,5 @@ 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/samples/excel/90-scenarios/multiple-property-set.yaml b/samples/excel/90-scenarios/multiple-property-set.yaml index d01b0e1a3..b06a14c07 100644 --- a/samples/excel/90-scenarios/multiple-property-set.yaml +++ b/samples/excel/90-scenarios/multiple-property-set.yaml @@ -52,8 +52,8 @@ script: async function setup() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); const groceryData = [ ["Product", "Qty", "Unit Price", "Total Price"], @@ -139,8 +139,5 @@ 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/samples/excel/90-scenarios/performance-optimization.yaml b/samples/excel/90-scenarios/performance-optimization.yaml index 346120026..0f68d85c4 100644 --- a/samples/excel/90-scenarios/performance-optimization.yaml +++ b/samples/excel/90-scenarios/performance-optimization.yaml @@ -56,7 +56,9 @@ script: async function setup() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + sheet.activate(); await context.sync(); }); @@ -121,8 +123,5 @@ 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/samples/excel/90-scenarios/report-generation.yaml b/samples/excel/90-scenarios/report-generation.yaml index ecc23fb95..1ec74c5f8 100644 --- a/samples/excel/90-scenarios/report-generation.yaml +++ b/samples/excel/90-scenarios/report-generation.yaml @@ -154,8 +154,5 @@ 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/samples/excel/90-scenarios/working-with-dates.yaml b/samples/excel/90-scenarios/working-with-dates.yaml index 9ce4f97ef..23466d5a8 100644 --- a/samples/excel/90-scenarios/working-with-dates.yaml +++ b/samples/excel/90-scenarios/working-with-dates.yaml @@ -5,7 +5,7 @@ description: Shows how to work with dates by using the Moment JavaScript library author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 script: content: | declare var moment: any; @@ -63,8 +63,8 @@ script: async function setup() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Sample"); + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); const data = [ ["Now"], @@ -145,9 +145,6 @@ 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 diff --git a/samples/excel/99-just-for-fun/color-wheel.yaml b/samples/excel/99-just-for-fun/color-wheel.yaml index 988f2b05e..a1af61e12 100644 --- a/samples/excel/99-just-for-fun/color-wheel.yaml +++ b/samples/excel/99-just-for-fun/color-wheel.yaml @@ -5,7 +5,7 @@ description: Uses chart formatting to draw a wheel with changing colors. Contrib author: AlexanderZlatkovski host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: 1.4 script: content: | $("#wheel").click(wheelGo); @@ -22,7 +22,8 @@ script: isStopped = false; // Create a hidden sheet which will contain data for the color wheel chart: - const sheetSettings = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Color Wheel Settings", true /*clearOnly*/); + context.workbook.worksheets.getItemOrNullObject("Color Wheel Settings").delete(); + const sheetSettings = context.workbook.worksheets.add("Color Wheel Settings"); sheetSettings.visibility = Excel.SheetVisibility.hidden; const dataRange = sheetSettings.getRange("A1:A" + numberOfSlices); const matrix = new Array(); @@ -35,7 +36,8 @@ script: dataRange.values = matrix; // Create a sheet for the color wheel and format it - const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Color Wheel", true /*clearOnly*/); + context.workbook.worksheets.getItemOrNullObject("Color Wheel").delete(); + const sheet = context.workbook.worksheets.add("Color Wheel"); sheet.charts.load("id"); sheet.activate(); @@ -82,7 +84,6 @@ script: console.error(error); } } - } async function loopThroughColors(points: Excel.ChartPointsCollection, max, colorGenerator: (i: number) => string) { for (var i = 0; i < max; i++) { @@ -151,8 +152,5 @@ 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/samples/excel/99-just-for-fun/gradient.yaml b/samples/excel/99-just-for-fun/gradient.yaml index 7753da285..97d6ff2d6 100644 --- a/samples/excel/99-just-for-fun/gradient.yaml +++ b/samples/excel/99-just-for-fun/gradient.yaml @@ -5,7 +5,7 @@ description: Uses range formatting and external libraries to draw a colorful gra author: AlexanderZlatkovski host: EXCEL api_set: - ExcelApi: 1.2 + ExcelApi: 1.4 script: content: |- initializeColorPickers(); @@ -22,7 +22,7 @@ script: await Excel.run(drawGradientHelper); } catch (error) { - OfficeHelpers.Utilities.log(error); + console.log(error); } $drawButton.prop("disabled", false); @@ -30,8 +30,8 @@ script: /** Helper function to do the actual gradient-drawing */ async function drawGradientHelper(context: Excel.RequestContext) { - const sheet = await OfficeHelpers.ExcelUtilities - .forceCreateSheet(context.workbook, "Gradient", true /*clearOnly*/); + context.workbook.worksheets.getItemOrNullObject("Gradient").delete(); + const sheet = context.workbook.worksheets.add("Gradient"); sheet.getRange().untrack().format.set({ rowHeight: 15, @@ -201,9 +201,6 @@ 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 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 623c00b27..b8aad1a4b 100644 --- a/samples/excel/99-just-for-fun/path-finder-game.yaml +++ b/samples/excel/99-just-for-fun/path-finder-game.yaml @@ -5,7 +5,7 @@ description: Uses range formatting to play a "pathfinder game". Contributed by A author: AlexanderZlatkovski host: EXCEL api_set: - ExcelApi: 1.2 + ExcelApi: 1.4 script: content: | $("#setup").click(setup); @@ -44,7 +44,11 @@ script: function setupHelper(matrix: string[][]) { tryCatch(() => Excel.run(async (context) => { - let sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Path Finder", true /*clearOnly*/); + if (context.workbook.worksheets.getItem("Path Finder")) { + context.workbook.worksheets.getItem("Path Finder").delete(); + } + + const sheet = context.workbook.worksheets.add("Path Finder"); sheet.getRange().format.set({ columnWidth: 16, @@ -230,8 +234,5 @@ 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/samples/excel/99-just-for-fun/patterns.yaml b/samples/excel/99-just-for-fun/patterns.yaml index 6f5f4cd31..d13636874 100644 --- a/samples/excel/99-just-for-fun/patterns.yaml +++ b/samples/excel/99-just-for-fun/patterns.yaml @@ -5,7 +5,7 @@ description: Uses range formatting to draw interesting pattern. Contributed by A author: AlexanderZlatkovski host: EXCEL api_set: - ExcelApi: 1.2 + ExcelApi: 1.4 script: content: |- $("#squares").click(() => tryCatch(drawSquares)); @@ -14,7 +14,12 @@ script: async function drawSquares() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Patterns", true /*clearOnly*/); + if (context.workbook.worksheets.getItem("Patterns")) { + context.workbook.worksheets.getItem("Patterns").delete(); + } + + const sheet = context.workbook.worksheets.add("Patterns"); + sheet.activate(); formatBackground(sheet); @@ -37,7 +42,12 @@ script: async function drawSpiral() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Patterns", true /*clearOnly*/); + if (context.workbook.worksheets.getItem("Patterns")) { + context.workbook.worksheets.getItem("Patterns").delete(); + } + + const sheet = context.workbook.worksheets.add("Patterns"); + sheet.activate(); formatBackground(sheet); @@ -96,7 +106,12 @@ script: async function drawDecoration() { await Excel.run(async (context) => { - const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Patterns", true /*clearOnly*/); + if (context.workbook.worksheets.getItem("Patterns")) { + context.workbook.worksheets.getItem("Patterns").delete(); + } + + const sheet = context.workbook.worksheets.add("Patterns"); + sheet.activate(); formatBackground(sheet); @@ -192,8 +207,5 @@ 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/samples/excel/99-just-for-fun/tetrominos.yaml b/samples/excel/99-just-for-fun/tetrominos.yaml index 81c3e2ce3..91d12f609 100644 --- a/samples/excel/99-just-for-fun/tetrominos.yaml +++ b/samples/excel/99-just-for-fun/tetrominos.yaml @@ -794,9 +794,6 @@ 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 diff --git a/samples/excel/default.yaml b/samples/excel/default.yaml index 97d0ffb4a..acdd871ff 100644 --- a/samples/excel/default.yaml +++ b/samples/excel/default.yaml @@ -59,8 +59,5 @@ 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/samples/onenote/default.yaml b/samples/onenote/default.yaml index e365363cd..6aca02824 100644 --- a/samples/onenote/default.yaml +++ b/samples/onenote/default.yaml @@ -57,8 +57,5 @@ 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/samples/outlook/01-compose-basics/get-item-subject.yaml b/samples/outlook/01-compose-basics/get-item-subject.yaml index 47a1bf92a..6893133b8 100644 --- a/samples/outlook/01-compose-basics/get-item-subject.yaml +++ b/samples/outlook/01-compose-basics/get-item-subject.yaml @@ -39,8 +39,5 @@ 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/samples/outlook/01-compose-basics/get-selected-text.yaml b/samples/outlook/01-compose-basics/get-selected-text.yaml index ff0722cf8..74d1babd6 100644 --- a/samples/outlook/01-compose-basics/get-selected-text.yaml +++ b/samples/outlook/01-compose-basics/get-selected-text.yaml @@ -39,8 +39,5 @@ 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/samples/outlook/01-compose-basics/set-selected-text.yaml b/samples/outlook/01-compose-basics/set-selected-text.yaml index cbea49176..62d6e5641 100644 --- a/samples/outlook/01-compose-basics/set-selected-text.yaml +++ b/samples/outlook/01-compose-basics/set-selected-text.yaml @@ -37,8 +37,5 @@ 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/samples/outlook/default.yaml b/samples/outlook/default.yaml index 0d644a1a6..03b07809b 100644 --- a/samples/outlook/default.yaml +++ b/samples/outlook/default.yaml @@ -42,8 +42,5 @@ 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/samples/powerpoint/basics/basic-common-api-call.yaml b/samples/powerpoint/basics/basic-common-api-call.yaml index 59203f132..edc6ba604 100644 --- a/samples/powerpoint/basics/basic-common-api-call.yaml +++ b/samples/powerpoint/basics/basic-common-api-call.yaml @@ -49,8 +49,5 @@ 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/samples/powerpoint/basics/create-presentation.yaml b/samples/powerpoint/basics/create-presentation.yaml index de57053a8..7113cca35 100644 --- a/samples/powerpoint/basics/create-presentation.yaml +++ b/samples/powerpoint/basics/create-presentation.yaml @@ -83,8 +83,5 @@ 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/samples/powerpoint/basics/get-slide-metadata.yaml b/samples/powerpoint/basics/get-slide-metadata.yaml index 5e0779f18..c507d2d43 100644 --- a/samples/powerpoint/basics/get-slide-metadata.yaml +++ b/samples/powerpoint/basics/get-slide-metadata.yaml @@ -55,8 +55,5 @@ 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/samples/powerpoint/basics/insert-image.yaml b/samples/powerpoint/basics/insert-image.yaml index fdd99e5b5..8384b2407 100644 --- a/samples/powerpoint/basics/insert-image.yaml +++ b/samples/powerpoint/basics/insert-image.yaml @@ -63,8 +63,5 @@ 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/samples/powerpoint/basics/insert-svg.yaml b/samples/powerpoint/basics/insert-svg.yaml index a635f3dfa..45403aab4 100644 --- a/samples/powerpoint/basics/insert-svg.yaml +++ b/samples/powerpoint/basics/insert-svg.yaml @@ -67,8 +67,5 @@ 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/samples/powerpoint/default.yaml b/samples/powerpoint/default.yaml index de631077e..175564923 100644 --- a/samples/powerpoint/default.yaml +++ b/samples/powerpoint/default.yaml @@ -47,8 +47,5 @@ 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/samples/project/basics/basic-common-api-call.yaml b/samples/project/basics/basic-common-api-call.yaml index 432bb70ae..5e15a37cc 100644 --- a/samples/project/basics/basic-common-api-call.yaml +++ b/samples/project/basics/basic-common-api-call.yaml @@ -40,8 +40,5 @@ 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/samples/project/default.yaml b/samples/project/default.yaml index b069c2d3d..4e90aaa56 100644 --- a/samples/project/default.yaml +++ b/samples/project/default.yaml @@ -47,8 +47,5 @@ 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/samples/web/default.yaml b/samples/web/default.yaml index 5767e0615..b8b93782f 100644 --- a/samples/web/default.yaml +++ b/samples/web/default.yaml @@ -38,8 +38,5 @@ 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/samples/word/01-basics/basic-api-call-es5.yaml b/samples/word/01-basics/basic-api-call-es5.yaml index 0fe623f0c..84efe2cc5 100644 --- a/samples/word/01-basics/basic-api-call-es5.yaml +++ b/samples/word/01-basics/basic-api-call-es5.yaml @@ -65,8 +65,5 @@ 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/samples/word/01-basics/basic-api-call.yaml b/samples/word/01-basics/basic-api-call.yaml index 790f03965..b86d169d4 100644 --- a/samples/word/01-basics/basic-api-call.yaml +++ b/samples/word/01-basics/basic-api-call.yaml @@ -66,8 +66,5 @@ 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/samples/word/01-basics/basic-common-api-call.yaml b/samples/word/01-basics/basic-common-api-call.yaml index d6f5f6c38..8fa401ce0 100644 --- a/samples/word/01-basics/basic-common-api-call.yaml +++ b/samples/word/01-basics/basic-common-api-call.yaml @@ -52,8 +52,5 @@ 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/samples/word/10-content-controls/insert-and-change-content-controls.yaml b/samples/word/10-content-controls/insert-and-change-content-controls.yaml index 653a520ca..2177de93b 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 @@ -146,8 +146,5 @@ 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/samples/word/15-images/insert-and-get-pictures.yaml b/samples/word/15-images/insert-and-get-pictures.yaml index 4cf665d02..e8aea919c 100644 --- a/samples/word/15-images/insert-and-get-pictures.yaml +++ b/samples/word/15-images/insert-and-get-pictures.yaml @@ -122,8 +122,5 @@ 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/samples/word/20-lists/insert-list.yaml b/samples/word/20-lists/insert-list.yaml index cb8888e9d..03c1fd450 100644 --- a/samples/word/20-lists/insert-list.yaml +++ b/samples/word/20-lists/insert-list.yaml @@ -112,8 +112,5 @@ 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/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml b/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml index 4acd8c5a9..e87e2f00e 100644 --- a/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml +++ b/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -124,8 +124,5 @@ 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/samples/word/25-paragraph/get-word-count.yaml b/samples/word/25-paragraph/get-word-count.yaml index 79112a4fd..8b872c185 100644 --- a/samples/word/25-paragraph/get-word-count.yaml +++ b/samples/word/25-paragraph/get-word-count.yaml @@ -128,8 +128,5 @@ 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/samples/word/25-paragraph/insert-formatted-text.yaml b/samples/word/25-paragraph/insert-formatted-text.yaml index 020f2e067..8f9c8f4e9 100644 --- a/samples/word/25-paragraph/insert-formatted-text.yaml +++ b/samples/word/25-paragraph/insert-formatted-text.yaml @@ -116,8 +116,5 @@ 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 diff --git a/samples/word/25-paragraph/insert-header-and-footer.yaml b/samples/word/25-paragraph/insert-header-and-footer.yaml index c6b00d61b..efeced43b 100644 --- a/samples/word/25-paragraph/insert-header-and-footer.yaml +++ b/samples/word/25-paragraph/insert-header-and-footer.yaml @@ -77,8 +77,5 @@ 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/samples/word/25-paragraph/insert-in-different-locations.yaml b/samples/word/25-paragraph/insert-in-different-locations.yaml index 2caa98e0b..16c6cb0d0 100644 --- a/samples/word/25-paragraph/insert-in-different-locations.yaml +++ b/samples/word/25-paragraph/insert-in-different-locations.yaml @@ -159,8 +159,5 @@ 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/samples/word/25-paragraph/insert-line-and-page-breaks.yaml b/samples/word/25-paragraph/insert-line-and-page-breaks.yaml index 2e15bd6c0..ade410bb8 100644 --- a/samples/word/25-paragraph/insert-line-and-page-breaks.yaml +++ b/samples/word/25-paragraph/insert-line-and-page-breaks.yaml @@ -103,8 +103,5 @@ 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/samples/word/25-paragraph/paragraph-properties.yaml b/samples/word/25-paragraph/paragraph-properties.yaml index c8e2e56b3..b919c9634 100644 --- a/samples/word/25-paragraph/paragraph-properties.yaml +++ b/samples/word/25-paragraph/paragraph-properties.yaml @@ -130,8 +130,5 @@ 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/samples/word/25-paragraph/search.yaml b/samples/word/25-paragraph/search.yaml index 5abdfbfed..bcfbb8271 100644 --- a/samples/word/25-paragraph/search.yaml +++ b/samples/word/25-paragraph/search.yaml @@ -120,8 +120,5 @@ 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/samples/word/30-properties/get-built-in-properties.yaml b/samples/word/30-properties/get-built-in-properties.yaml index 21d6d4dfb..302996153 100644 --- a/samples/word/30-properties/get-built-in-properties.yaml +++ b/samples/word/30-properties/get-built-in-properties.yaml @@ -67,8 +67,5 @@ 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 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 70881fa19..7e8703459 100644 --- a/samples/word/30-properties/read-write-custom-document-properties.yaml +++ b/samples/word/30-properties/read-write-custom-document-properties.yaml @@ -94,8 +94,5 @@ 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 + @types/jquery@3.3.1 \ 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 d8f5d277d..e89762c43 100644 --- a/samples/word/35-ranges/scroll-to-range.yaml +++ b/samples/word/35-ranges/scroll-to-range.yaml @@ -103,8 +103,5 @@ 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/samples/word/35-ranges/split-words-of-first-paragraph.yaml b/samples/word/35-ranges/split-words-of-first-paragraph.yaml index 3fc55f0a1..8a04f0777 100644 --- a/samples/word/35-ranges/split-words-of-first-paragraph.yaml +++ b/samples/word/35-ranges/split-words-of-first-paragraph.yaml @@ -103,8 +103,5 @@ 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/samples/word/40-tables/table-cell-access.yaml b/samples/word/40-tables/table-cell-access.yaml index 53372a9d0..d37397dfa 100644 --- a/samples/word/40-tables/table-cell-access.yaml +++ b/samples/word/40-tables/table-cell-access.yaml @@ -86,8 +86,5 @@ 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 diff --git a/samples/word/90-scenarios/doc-assembly.yaml b/samples/word/90-scenarios/doc-assembly.yaml index f3971e511..4b73bf0f9 100644 --- a/samples/word/90-scenarios/doc-assembly.yaml +++ b/samples/word/90-scenarios/doc-assembly.yaml @@ -174,8 +174,5 @@ 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/samples/word/90-scenarios/multiple-property-set.yaml b/samples/word/90-scenarios/multiple-property-set.yaml index 671180ddd..a377fbc6d 100644 --- a/samples/word/90-scenarios/multiple-property-set.yaml +++ b/samples/word/90-scenarios/multiple-property-set.yaml @@ -115,8 +115,5 @@ 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/samples/word/default.yaml b/samples/word/default.yaml index d33e34950..3c1583c9c 100644 --- a/samples/word/default.yaml +++ b/samples/word/default.yaml @@ -59,8 +59,5 @@ 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-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 8d8974754..d5f05e1d9 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -2079,7 +2079,9 @@ Excel.SettingCollection.onSettingsChanged: Excel.Shape.delete: - |- await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Shapes"); + context.workbook.worksheets.getItemOrNullObject("Shapes").delete(); + const sheet = context.workbook.worksheets.add("Shapes"); + const shapes = sheet.shapes; // load all the shapes in the collection without loading their properties From d81ffe82a96e3e7cca6c4dc526df28b89313e859 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 21 Jun 2019 16:30:38 -0700 Subject: [PATCH 176/660] [excel] (Samples) Mapping snippets for structs that must be set together (#315) * Mapping snippets for structs that must be set together * Update snippet-extractor-output/snippets.yaml Co-Authored-By: Elizabeth Samuel --- .../54-worksheet/worksheet-page-layout.yaml | 42 ++++++--- snippet-extractor-metadata/excel.xlsx | Bin 19790 -> 19845 bytes snippet-extractor-output/snippets.yaml | 89 +++++++++++++++--- 3 files changed, 107 insertions(+), 24 deletions(-) diff --git a/samples/excel/54-worksheet/worksheet-page-layout.yaml b/samples/excel/54-worksheet/worksheet-page-layout.yaml index ed9126377..be0bd3f38 100644 --- a/samples/excel/54-worksheet/worksheet-page-layout.yaml +++ b/samples/excel/54-worksheet/worksheet-page-layout.yaml @@ -14,6 +14,7 @@ script: $("#setPrintTitleRow").click(() => tryCatch(setPrintTitleRow)); $("#setPrintArea").click(() => tryCatch(setPrintArea)); $("#changeOrientation").click(() => tryCatch(changeOrientation)); + $("#setZoom").click(() => tryCatch(setZoom)); async function setPageBreaks() { await Excel.run(async (context) => { @@ -64,6 +65,14 @@ script: }); } + async function setZoom() { + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.pageLayout.zoom = { scale: 200 }; + await context.sync(); + }); + } + async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Print").delete(); @@ -137,36 +146,47 @@ script: template: content: |-
    -

    This sample shows how to change page layout and other settings for printing a worksheet.

    +

    This sample shows how to change page layout and other settings for printing a worksheet.

    -

    Setup

    -

    Try it out

    -

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

    +

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

    + +

    -

    In Excel, choose File > Print to see differences in printing before and after you press the following buttons.

    + +

    +

    In Excel, choose File > Print to see differences in printing before and after you press the following + buttons.

    + +

    + +

    + +

    +

    +

    language: html style: @@ -193,4 +213,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 8cad8392ebc93ae74e9fa7a61bf20acfa6ed592f..11312928758a44b611535879ed7207a9cf1e78e1 100644 GIT binary patch delta 9192 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 C{*KE4 delta 9174 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 N=_xazq|5(f@IRX&pkx35 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index d5f05e1d9..5b9e8bd89 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -1147,6 +1147,62 @@ Excel.DataPivotHierarchy.showAs: wholesaleShowAs.calculation = Excel.ShowAsCalculation.percentOfColumnTotal; wholesaleShowAs.baseField = pivotTable.rowHierarchies.getItem("Type").fields.getItem("Type"); wholesaleDataHierarchy.showAs = wholesaleShowAs; + await context.sync(); + }); +Excel.DataValidation.prompt: + - |- + 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.rule: + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Decision"); + const nameRange = + sheet.tables.getItem("NameOptionsTable").columns.getItem("Baby Name").getDataBodyRange(); + + // When you are developing, it is a good practice to + // clear the dataValidation object with each run of your code. + nameRange.dataValidation.clear(); + + const nameSourceRange = context.workbook.worksheets.getItem("Names").getRange("A1:A3"); + + let approvedListRule = { + list: { + inCellDropDown: true, + source: nameSourceRange + } + }; + nameRange.dataValidation.rule = approvedListRule; + await context.sync(); }); Excel.DataValidation.errorAlert: @@ -1456,6 +1512,13 @@ Excel.PageLayout.setPrintTitleRows: farmSheet.pageLayout.setPrintTitleRows("$1:$1"); await context.sync(); }); +Excel.PageLayout.zoom: + - |- + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.pageLayout.zoom = { scale: 200 }; + await context.sync(); + }); Excel.PivotLayout.getDataBodyRange: - |- await Excel.run(async (context) => { @@ -1874,6 +1937,19 @@ Excel.Range.style: range.style = Excel.BuiltInStyle.neutral; range.format.horizontalAlignment = "Right"; + await context.sync(); + }); +Excel.RangeAreas.format: + - |- + await Excel.run(async (context) => { + + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const usedRange = sheet.getUsedRange(); + + // Find the ranges with formulas. + const formulaRanges = usedRange.getSpecialCells("Formulas"); + formulaRanges.format.fill.color = "lightgreen"; + await context.sync(); }); Excel.RangeFormat.textOrientation: @@ -2998,19 +3074,6 @@ Excel.WorksheetProtection.unprotect: let activeSheet = context.workbook.worksheets.getActiveWorksheet(); activeSheet.protection.unprotect(password); }); -Excel.RangeAreas.format: - - |- - await Excel.run(async (context) => { - - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const usedRange = sheet.getUsedRange(); - - // Find the ranges with formulas - const formulaRanges = usedRange.getSpecialCells("Formulas"); - formulaRanges.format.fill.color = "lightgreen"; - - await context.sync(); - }); Word.InlinePicture.getBase64ImageSrc: - |- await Word.run(async (context) => { From 4b93614f3689995fda8222092854612017adebf7 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 26 Jun 2019 16:56:31 -0700 Subject: [PATCH 177/660] Fixing fun snippets to use proper null checking pattern when creating worksheets (#317) --- .../excel/99-just-for-fun/path-finder-game.yaml | 5 +---- samples/excel/99-just-for-fun/patterns.yaml | 15 +++------------ 2 files changed, 4 insertions(+), 16 deletions(-) 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 b8aad1a4b..cc92693f3 100644 --- a/samples/excel/99-just-for-fun/path-finder-game.yaml +++ b/samples/excel/99-just-for-fun/path-finder-game.yaml @@ -44,10 +44,7 @@ script: function setupHelper(matrix: string[][]) { tryCatch(() => Excel.run(async (context) => { - if (context.workbook.worksheets.getItem("Path Finder")) { - context.workbook.worksheets.getItem("Path Finder").delete(); - } - + context.workbook.worksheets.getItemOrNullObject("Path Finder").delete(); const sheet = context.workbook.worksheets.add("Path Finder"); sheet.getRange().format.set({ diff --git a/samples/excel/99-just-for-fun/patterns.yaml b/samples/excel/99-just-for-fun/patterns.yaml index d13636874..414f3f254 100644 --- a/samples/excel/99-just-for-fun/patterns.yaml +++ b/samples/excel/99-just-for-fun/patterns.yaml @@ -14,10 +14,7 @@ script: async function drawSquares() { await Excel.run(async (context) => { - if (context.workbook.worksheets.getItem("Patterns")) { - context.workbook.worksheets.getItem("Patterns").delete(); - } - + context.workbook.worksheets.getItemOrNullObject("Patterns").delete(); const sheet = context.workbook.worksheets.add("Patterns"); sheet.activate(); @@ -42,10 +39,7 @@ script: async function drawSpiral() { await Excel.run(async (context) => { - if (context.workbook.worksheets.getItem("Patterns")) { - context.workbook.worksheets.getItem("Patterns").delete(); - } - + context.workbook.worksheets.getItemOrNullObject("Patterns").delete(); const sheet = context.workbook.worksheets.add("Patterns"); sheet.activate(); @@ -106,10 +100,7 @@ script: async function drawDecoration() { await Excel.run(async (context) => { - if (context.workbook.worksheets.getItem("Patterns")) { - context.workbook.worksheets.getItem("Patterns").delete(); - } - + context.workbook.worksheets.getItemOrNullObject("Patterns").delete(); const sheet = context.workbook.worksheets.add("Patterns"); sheet.activate(); From 3187e5a59f767ff11da073625b8f83c8b36be886 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Tue, 2 Jul 2019 13:49:35 -0700 Subject: [PATCH 178/660] [excel] (Range) Cell properties samples (#319) * Mapping snippets for structs that must be set together * Adding cell properties sample * Updating yarn lock --- playlists/excel.yaml | 9 + samples/excel/42-range/cell-properties.yaml | 193 +++++++++ .../42-range/insert-delete-clear-range.yaml | 2 +- samples/excel/42-range/range-hyperlink.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/used-range.yaml | 2 +- snippet-extractor-metadata/excel.xlsx | Bin 19845 -> 20182 bytes snippet-extractor-output/snippets.yaml | 390 +++++++++++++++++- view/excel.json | 1 + yarn.lock | 48 +-- 14 files changed, 624 insertions(+), 33 deletions(-) create mode 100644 samples/excel/42-range/cell-properties.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index bc0d045f8..f6324d8fb 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -405,6 +405,15 @@ 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////samples/excel/42-range/cell-properties.yaml + group: Range + api_set: + ExcelApi: 1.9 - id: excel-range-hyperlink name: Hyperlinks fileName: range-hyperlink.yaml diff --git a/samples/excel/42-range/cell-properties.yaml b/samples/excel/42-range/cell-properties.yaml new file mode 100644 index 000000000..63a21ffb7 --- /dev/null +++ b/samples/excel/42-range/cell-properties.yaml @@ -0,0 +1,193 @@ +order: 5 +id: excel-range-cell-properties +name: Get and set cell properties +description: Sets different properties across a range then retrieves those properties. +author: OfficeDev +host: EXCEL +api_set: + ExcelApi: 1.9 +script: + content: | + $("#set-cell-properties").click(() => tryCatch(setCellProperties)); + $("#get-cell-properties").click(() => tryCatch(getCellProperties)); + $("#setup").click(() => tryCatch(setup)); + + async function setCellProperties() { + 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 tkes a string matching the name of an Excel style. + // 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(); + }); + } + + async function getCellProperties() { + 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 cellProperies = propertiesToGet.value[0][0]; + console.log( + `Address: ${cellProperies.address}\nStyle: ${cellProperies.style}\nFill Color: ${cellProperies.format.fill.color}\nFont Color: ${cellProperies.format.font.color}`); + }); + } + + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + + const data = [ + ["Matchups", " ", " ", " ", " "], + [" ", " ", "SEA", "POR", "VAN"], + [" ", "SEA", "N/A", -1, 2], + [" ", "POR", 1, "N/A", 4], + [" ", "VAN", -2, -4, "N/A"] + ]; + + const range = sheet.getRange("A1:E5"); + range.values = data; + + 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 format a range.

    +
    + +
    +

    Set up

    + +
    + +
    +

    Try it out

    +

    +

    Select a cell and press the following button to display some of the cell properties.

    + +
    + 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/42-range/insert-delete-clear-range.yaml b/samples/excel/42-range/insert-delete-clear-range.yaml index 336f66733..aa39c6222 100644 --- a/samples/excel/42-range/insert-delete-clear-range.yaml +++ b/samples/excel/42-range/insert-delete-clear-range.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 7 id: excel-range-insert-delete-and-clear-range name: 'Insert, delete, and clear' description: 'Inserts, deletes, and clears a range.' diff --git a/samples/excel/42-range/range-hyperlink.yaml b/samples/excel/42-range/range-hyperlink.yaml index 6baa18497..64a5dbac1 100644 --- a/samples/excel/42-range/range-hyperlink.yaml +++ b/samples/excel/42-range/range-hyperlink.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 6 id: excel-range-hyperlink name: Hyperlinks description: 'Creates, updates, and clears hyperlinks in a range.' diff --git a/samples/excel/42-range/range-relationships.yaml b/samples/excel/42-range/range-relationships.yaml index c3738dcee..59f300840 100644 --- a/samples/excel/42-range/range-relationships.yaml +++ b/samples/excel/42-range/range-relationships.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 8 id: excel-range-range-relationships name: Range relationships description: 'Shows relationships between ranges, such as bounding rectangles and intersections.' diff --git a/samples/excel/42-range/range-remove-duplicates.yaml b/samples/excel/42-range/range-remove-duplicates.yaml index deb113235..2fb23aefd 100644 --- a/samples/excel/42-range/range-remove-duplicates.yaml +++ b/samples/excel/42-range/range-remove-duplicates.yaml @@ -1,4 +1,4 @@ -order: 8 +order: 9 id: excel-range-remove-duplicates name: Remove duplicates description: Removes duplicate entries from a range. diff --git a/samples/excel/42-range/range-text-orientation.yaml b/samples/excel/42-range/range-text-orientation.yaml index 4aea9a61a..8abe42c8c 100644 --- a/samples/excel/42-range/range-text-orientation.yaml +++ b/samples/excel/42-range/range-text-orientation.yaml @@ -1,4 +1,4 @@ -order: 10 +order: 11 id: excel-range-text-orientation name: Text orientation description: Gets and sets the text orientation within a range. diff --git a/samples/excel/42-range/selected-range.yaml b/samples/excel/42-range/selected-range.yaml index 40527b061..6b584eb7f 100644 --- a/samples/excel/42-range/selected-range.yaml +++ b/samples/excel/42-range/selected-range.yaml @@ -1,4 +1,4 @@ -order: 9 +order: 10 id: excel-range-selected-range name: Selected range description: Gets and sets the currently selected range. diff --git a/samples/excel/42-range/set-get-values.yaml b/samples/excel/42-range/set-get-values.yaml index e1a196207..3594f9f18 100644 --- a/samples/excel/42-range/set-get-values.yaml +++ b/samples/excel/42-range/set-get-values.yaml @@ -1,4 +1,4 @@ -order: 12 +order: 13 id: excel-range-values-and-formulas name: Values and formulas description: Gets and sets values and formulas for a range. diff --git a/samples/excel/42-range/used-range.yaml b/samples/excel/42-range/used-range.yaml index 68bc65cf1..877430a06 100644 --- a/samples/excel/42-range/used-range.yaml +++ b/samples/excel/42-range/used-range.yaml @@ -1,4 +1,4 @@ -order: 11 +order: 12 id: excel-range-used-range name: Used range description: Tests for a used range and creates a chart from a table only if there's data in the table. diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 11312928758a44b611535879ed7207a9cf1e78e1..3bb245b37f78e3fb521c48031522eaf914f3ce1a 100644 GIT binary patch delta 10601 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 JW~Kl0`9B3We%b&4 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 5b9e8bd89..2ccd6ee78 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -48,6 +48,225 @@ Excel.Binding.onDataChanged: await context.sync(); }); +Excel.CellPropertiesFill .color: + - |- + 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 tkes a string matching the name of an Excel style. + // 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.CellPropertiesFillLoadOptions .color: + - |- + 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 cellProperies = propertiesToGet.value[0][0]; + console.log( + `Address: ${cellProperies.address}\nStyle: ${cellProperies.style}\nFill Color: ${cellProperies.format.fill.color}\nFont Color: ${cellProperies.format.font.color}`); + }); +Excel.CellPropertiesFont.color: + - |- + 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 tkes a string matching the name of an Excel style. + // 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.CellPropertiesFontLoadOptions .color: + - |- + 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 cellProperies = propertiesToGet.value[0][0]; + console.log( + `Address: ${cellProperies.address}\nStyle: ${cellProperies.style}\nFill Color: ${cellProperies.format.fill.color}\nFont Color: ${cellProperies.format.font.color}`); + }); +Excel.CellPropertiesLoadOptions .address: + - |- + 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 cellProperies = propertiesToGet.value[0][0]; + console.log( + `Address: ${cellProperies.address}\nStyle: ${cellProperies.style}\nFill Color: ${cellProperies.format.fill.color}\nFont Color: ${cellProperies.format.font.color}`); + }); Excel.CellValueConditionalFormat.format: - |- await Excel.run(async (context) => { @@ -1939,6 +2158,103 @@ Excel.Range.style: await context.sync(); }); +Excel.Range.setCellProperties: + - |- + 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 tkes a string matching the name of an Excel style. + // 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: + - |- + 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 cellProperies = propertiesToGet.value[0][0]; + console.log( + `Address: ${cellProperies.address}\nStyle: ${cellProperies.style}\nFill Color: ${cellProperies.format.fill.color}\nFont Color: ${cellProperies.format.font.color}`); + }); Excel.RangeAreas.format: - |- await Excel.run(async (context) => { @@ -1946,7 +2262,7 @@ Excel.RangeAreas.format: const sheet = context.workbook.worksheets.getActiveWorksheet(); const usedRange = sheet.getUsedRange(); - // Find the ranges with formulas. + // Find the ranges with formulas const formulaRanges = usedRange.getSpecialCells("Formulas"); formulaRanges.format.fill.color = "lightgreen"; @@ -2096,6 +2412,78 @@ Excel.Runtime.enableEvents: console.log("Events are currently off."); } + await context.sync(); + }); +Excel.SettableCellProperties .style: + - |- + 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 tkes a string matching the name of an Excel style. + // 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.Setting.delete: diff --git a/view/excel.json b/view/excel.json index 0dd267ba2..73234916c 100644 --- a/view/excel.json +++ b/view/excel.json @@ -44,6 +44,7 @@ "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-areas.yaml", "excel-range-find": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-find.yaml", "excel-range-formatting": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/formatting.yaml", + "excel-range-cell-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/cell-properties.yaml", "excel-range-hyperlink": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-hyperlink.yaml", "excel-range-insert-delete-and-clear-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/insert-delete-clear-range.yaml", "excel-range-range-relationships": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-relationships.yaml", diff --git a/yarn.lock b/yarn.lock index 844115179..401a5dde2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -59,9 +59,9 @@ integrity sha512-SGGAhXLHDx+PK4YLNcNGa6goPf9XRWQNAUUbffkwVGGXIxmDKWyGGL4inzq2sPmExu431Ekb9aEMn9BkPqEYFA== "@types/lodash@^4.14.122", "@types/lodash@^4.14.50": - version "4.14.134" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.134.tgz#9032b440122db3a2a56200e91191996161dde5b9" - integrity sha512-2/O0khFUCFeDlbi7sZ7ZFRCcT812fAeOLm7Ev4KbwASkZ575TDrDcY7YyaoHdTOzKcNbfiwLYZqPmoC4wadrsw== + version "4.14.135" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.135.tgz#d2607c35dd68f70c2b35ba020c667493dedd8447" + integrity sha512-Ed+tSZ9qM1oYpi5kzdsBuOzcAIn1wDW+e8TFJ50IMJMlSopGdJgKAbhHzN6h1E1OfjlGOr2JepzEWtg9NIfoNg== "@types/minimatch@*": version "3.0.3" @@ -69,14 +69,14 @@ integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/node@*": - version "12.0.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.0.8.tgz#551466be11b2adc3f3d47156758f610bd9f6b1d8" - integrity sha512-b8bbUOTwzIY3V5vDTY1fIJ+ePKDUBqt2hC2woVGotdQQhG/2Sh62HOKHrT7ab+VerXAcPyAiTEipPu/FsreUtg== + version "12.0.10" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.0.10.tgz#51babf9c7deadd5343620055fc8aff7995c8b031" + integrity sha512-LcsGbPomWsad6wmMNv7nBLw7YYYyfdYcz6xryKYQhx89c3XXan+8Q6AJ43G5XDIaklaVkK3mE4fCb0SBvMiPSQ== "@types/node@^11.10.5": - version "11.13.14" - resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.14.tgz#03e9416f7d699d71742e5a1e455def7bd55f8fb9" - integrity sha512-9NjFOB6UUGjJLNANmyIouuaN8YPsPgC4DCOd5lU+DL7HSX/RCfzz0JOtHlspEJq1Ll/JUu/8Cm4wzxpZ8w5sjQ== + version "11.13.15" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.15.tgz#699afb07a91adced2d6183a0ad156bf82542fc7d" + integrity sha512-x6ypl5Uzly+j23hbxmMzf12Eb4lOhIEqQz0HuczpTUa1KIx1GpbN/o4E3aAED20UoEsdK0wvyY8QcffuWSLDkw== "@types/office-js@^0.0.37": version "0.0.37" @@ -431,9 +431,9 @@ inflight@^1.0.4: wrappy "1" inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + 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.0: version "1.3.5" @@ -610,9 +610,9 @@ npm-bundled@^1.0.1: integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== npm-packlist@^1.1.6: - version "1.4.1" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" - integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw== + version "1.4.4" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44" + integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw== dependencies: ignore-walk "^3.0.1" npm-bundled "^1.0.1" @@ -683,9 +683,9 @@ path-parse@^1.0.6: integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== process-nextick-args@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" - integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== + 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== pullstream@~0.4.0: version "0.4.1" @@ -899,9 +899,9 @@ tslib@^1.8.0, tslib@^1.8.1: integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== tslint@^5.13.1: - version "5.17.0" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.17.0.tgz#f9f0ce2011d8e90debaa6e9b4975f24cd16852b8" - integrity sha512-pflx87WfVoYepTet3xLfDOLDm9Jqi61UXIKePOuca0qoAZyrGWonDG9VTbji58Fy+8gciUn8Bt7y69+KEVjc/w== + version "5.18.0" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.18.0.tgz#f61a6ddcf372344ac5e41708095bbf043a147ac6" + integrity sha512-Q3kXkuDEijQ37nXZZLKErssQVnwCV/+23gFEMROi8IlbaBG6tXqLPQJ5Wjcyt/yHPKBC+hD5SzuGaMora+ZS6w== dependencies: "@babel/code-frame" "^7.0.0" builtin-modules "^1.1.1" @@ -925,9 +925,9 @@ tsutils@^2.29.0: tslib "^1.8.1" typescript@^3.3.3333: - version "3.5.1" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.1.tgz#ba72a6a600b2158139c5dd8850f700e231464202" - integrity sha512-64HkdiRv1yYZsSe4xC1WVgamNigVYjlssIoaH2HcZF0+ijsk5YK2g0G34w9wJkze8+5ow4STd22AynfO6ZYYLw== + version "3.5.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.2.tgz#a09e1dc69bc9551cadf17dba10ee42cf55e5d56c" + integrity sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA== underscore@~1.3.3: version "1.3.3" From b3fd8b1361b8c6918695f730aa144621e87c7e42 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Tue, 2 Jul 2019 17:51:06 -0700 Subject: [PATCH 179/660] [excel] (Range) Upgrading Gradient snippet to showcase setCellProperties API (#320) * Upgrading Gradient snippet to showcase setCellProperties API * Consolidating code * Changing array filling method to create array * Final code refactoring pass --- samples/excel/99-just-for-fun/gradient.yaml | 75 ++++++++++++--------- 1 file changed, 45 insertions(+), 30 deletions(-) diff --git a/samples/excel/99-just-for-fun/gradient.yaml b/samples/excel/99-just-for-fun/gradient.yaml index 97d6ff2d6..c7f632ee9 100644 --- a/samples/excel/99-just-for-fun/gradient.yaml +++ b/samples/excel/99-just-for-fun/gradient.yaml @@ -20,8 +20,7 @@ script: try { await Excel.run(drawGradientHelper); - } - catch (error) { + } catch (error) { console.log(error); } @@ -41,22 +40,31 @@ script: } }); - let originalSize = parseInt($('#size').val() as string); - - // Create a 2D in-memory array to hold the colors - const colors2D = Array(originalSize); - for (let row = 0; row < originalSize; row++) { - colors2D[row] = Array(originalSize); - } - - fillInColors(colors2D, originalSize); - - let range = sheet.getCell(1, 1).untrack().getResizedRange( - originalSize - 1, originalSize - 1).untrack(); - for (let row = 0; row < originalSize; row++) { - for (let col = 0; col < originalSize; col++) { - range.getCell(row, col).untrack().format.fill.color = - colors2D[row][col]; + let originalSize = parseInt($("#size").val() as string); + const colors2D = createColorArray(originalSize); + + 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. + const cellProperties: Excel.SettableCellProperties[][] = + colors2D.map(row => + row.map(color => + ({ + format: { + fill: { + color: color + } + } + }) + ) + ); + sheet.getRangeByIndexes(1, 1, originalSize, originalSize).setCellProperties(cellProperties); + } else { + let range = sheet.getCell(1, 1).untrack().getResizedRange(originalSize - 1, originalSize - 1).untrack(); + for (let row = 0; row < originalSize; row++) { + for (let col = 0; col < originalSize; col++) { + range.getCell(row, col).untrack().format.fill.color = colors2D[row][col]; + } } } @@ -64,25 +72,33 @@ script: await context.sync(); } - function fillInColors(colors2D: string[][], size: number) { + function createColorArray(size: number): string[][] { + // 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); + } + const topColors = getColorsArray( $("#top-left").spectrum("get").toRgb(), $("#top-right").spectrum("get").toRgb(), - size); + size + ); const bottomColors = getColorsArray( $("#bottom-left").spectrum("get").toRgb(), $("#bottom-right").spectrum("get").toRgb(), - size); + size + ); for (let col = 0; col < size; col++) { - const columnColors = getColorsArray( - topColors[col], bottomColors[col], size); + const columnColors = getColorsArray(topColors[col], bottomColors[col], size); for (let row = 0; row < size; row++) { - colors2D[row][col] = - tinycolor(columnColors[row]).toHexString(); + colors2D[row][col] = tinycolor(columnColors[row]).toHexString(); } } + + return colors2D; } /** Helper function to get an array of colors */ @@ -94,7 +110,7 @@ script: r: color1.r + (color2.r - color1.r) * fraction, g: color1.g + (color2.g - color1.g) * fraction, b: color1.b + (color2.b - color1.b) * fraction - } + }; } return result; } @@ -107,10 +123,9 @@ script: } function randomizeColors() { - $("#color-table input[type='text']") - .each((index, element) => { - $(element).spectrum("set", tinycolor.random().toHexString()); - }); + $("#color-table input[type='text']").each((index, element) => { + $(element).spectrum("set", tinycolor.random().toHexString()); + }); } language: typescript template: From 9033cb2b1101388ed4988c6b45989bfe5ffb53d5 Mon Sep 17 00:00:00 2001 From: AlexJerabek Date: Wed, 3 Jul 2019 09:05:11 -0700 Subject: [PATCH 180/660] Remove spaces from mapping file --- snippet-extractor-metadata/excel.xlsx | Bin 20182 -> 20172 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 3bb245b37f78e3fb521c48031522eaf914f3ce1a..98c133a3a3fdd0f31ddbb2ecab0a3ad1b0768c84 100644 GIT binary patch delta 9022 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 delta 8993 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 XnljQ_OA;MR8JVvI!e&+bPvZXo5_&jF From d516366d16c27f0d5d5b8f36467fd88cc5232a27 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 3 Jul 2019 09:58:37 -0700 Subject: [PATCH 181/660] Remove spaces from mapping file (#321) --- snippet-extractor-metadata/excel.xlsx | Bin 20182 -> 20172 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 3bb245b37f78e3fb521c48031522eaf914f3ce1a..98c133a3a3fdd0f31ddbb2ecab0a3ad1b0768c84 100644 GIT binary patch delta 9022 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 delta 8993 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 XnljQ_OA;MR8JVvI!e&+bPvZXo5_&jF From 13e42f13792b60623237bbb710a8dc1e52710f55 Mon Sep 17 00:00:00 2001 From: AlexJerabek Date: Wed, 3 Jul 2019 14:17:18 -0700 Subject: [PATCH 182/660] Running yarn start --- snippet-extractor-output/snippets.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 2ccd6ee78..af2f5ee89 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -48,7 +48,7 @@ Excel.Binding.onDataChanged: await context.sync(); }); -Excel.CellPropertiesFill .color: +Excel.CellPropertiesFill.color: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -120,7 +120,7 @@ Excel.CellPropertiesFill .color: sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); -Excel.CellPropertiesFillLoadOptions .color: +Excel.CellPropertiesFillLoadOptions.color: - |- await Excel.run(async (context) => { const cell = context.workbook.getActiveCell(); @@ -217,7 +217,7 @@ Excel.CellPropertiesFont.color: sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); -Excel.CellPropertiesFontLoadOptions .color: +Excel.CellPropertiesFontLoadOptions.color: - |- await Excel.run(async (context) => { const cell = context.workbook.getActiveCell(); @@ -242,7 +242,7 @@ Excel.CellPropertiesFontLoadOptions .color: console.log( `Address: ${cellProperies.address}\nStyle: ${cellProperies.style}\nFill Color: ${cellProperies.format.fill.color}\nFont Color: ${cellProperies.format.font.color}`); }); -Excel.CellPropertiesLoadOptions .address: +Excel.CellPropertiesLoadOptions.address: - |- await Excel.run(async (context) => { const cell = context.workbook.getActiveCell(); @@ -2414,7 +2414,7 @@ Excel.Runtime.enableEvents: await context.sync(); }); -Excel.SettableCellProperties .style: +Excel.SettableCellProperties.style: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); From ed47c41769f9acabf297e50ca694f8b45ff561d6 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 3 Jul 2019 14:57:02 -0700 Subject: [PATCH 183/660] Fixing snippet typos (#324) --- samples/excel/42-range/cell-properties.yaml | 8 ++--- samples/excel/42-range/range-areas.yaml | 5 ++- snippet-extractor-output/snippets.yaml | 37 ++++++++++----------- 3 files changed, 24 insertions(+), 26 deletions(-) diff --git a/samples/excel/42-range/cell-properties.yaml b/samples/excel/42-range/cell-properties.yaml index 63a21ffb7..bbcb162b7 100644 --- a/samples/excel/42-range/cell-properties.yaml +++ b/samples/excel/42-range/cell-properties.yaml @@ -19,7 +19,7 @@ script: // 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 tkes a string matching the name of an Excel style. + // The style property takes a string matching the name of an Excel style. // Note that a style will overwrite any formatting, // so do not use the format property with the style property. style: "Heading1" @@ -103,11 +103,11 @@ script: style: true }); - // Sync to get the data from the workbook + // Sync to get the data from the workbook. await context.sync(); - const cellProperies = propertiesToGet.value[0][0]; + const cellProperties = propertiesToGet.value[0][0]; console.log( - `Address: ${cellProperies.address}\nStyle: ${cellProperies.style}\nFill Color: ${cellProperies.format.fill.color}\nFont Color: ${cellProperies.format.font.color}`); + `Address: ${cellProperties.address}\nStyle: ${cellProperties.style}\nFill Color: ${cellProperties.format.fill.color}\nFont Color: ${cellProperties.format.font.color}`); }); } diff --git a/samples/excel/42-range/range-areas.yaml b/samples/excel/42-range/range-areas.yaml index a8a6f6d7a..dc279e288 100644 --- a/samples/excel/42-range/range-areas.yaml +++ b/samples/excel/42-range/range-areas.yaml @@ -41,7 +41,7 @@ script: const sheet = context.workbook.worksheets.getActiveWorksheet(); const usedRange = sheet.getUsedRange(); - // Find the ranges with formulas + // Find the ranges with formulas. const formulaRanges = usedRange.getSpecialCells("Formulas"); formulaRanges.format.fill.color = "lightgreen"; @@ -55,8 +55,7 @@ script: const sheet = context.workbook.worksheets.getActiveWorksheet(); const usedRange = sheet.getUsedRange(); - // Find the ranges with either text or logical (boolean) - // values + // Find the ranges with either text or logical (boolean) values. const formulaRanges = usedRange.getSpecialCells("Constants", "LogicalText"); formulaRanges.format.fill.color = "orange"; diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index af2f5ee89..766de884f 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -56,7 +56,7 @@ Excel.CellPropertiesFill.color: // 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 tkes a string matching the name of an Excel style. + // The style property takes a string matching the name of an Excel style. // Note that a style will overwrite any formatting, // so do not use the format property with the style property. style: "Heading1" @@ -139,11 +139,11 @@ Excel.CellPropertiesFillLoadOptions.color: style: true }); - // Sync to get the data from the workbook + // Sync to get the data from the workbook. await context.sync(); - const cellProperies = propertiesToGet.value[0][0]; + const cellProperties = propertiesToGet.value[0][0]; console.log( - `Address: ${cellProperies.address}\nStyle: ${cellProperies.style}\nFill Color: ${cellProperies.format.fill.color}\nFont Color: ${cellProperies.format.font.color}`); + `Address: ${cellProperties.address}\nStyle: ${cellProperties.style}\nFill Color: ${cellProperties.format.fill.color}\nFont Color: ${cellProperties.format.font.color}`); }); Excel.CellPropertiesFont.color: - |- @@ -153,7 +153,7 @@ Excel.CellPropertiesFont.color: // 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 tkes a string matching the name of an Excel style. + // The style property takes a string matching the name of an Excel style. // Note that a style will overwrite any formatting, // so do not use the format property with the style property. style: "Heading1" @@ -236,11 +236,11 @@ Excel.CellPropertiesFontLoadOptions.color: style: true }); - // Sync to get the data from the workbook + // Sync to get the data from the workbook. await context.sync(); - const cellProperies = propertiesToGet.value[0][0]; + const cellProperties = propertiesToGet.value[0][0]; console.log( - `Address: ${cellProperies.address}\nStyle: ${cellProperies.style}\nFill Color: ${cellProperies.format.fill.color}\nFont Color: ${cellProperies.format.font.color}`); + `Address: ${cellProperties.address}\nStyle: ${cellProperties.style}\nFill Color: ${cellProperties.format.fill.color}\nFont Color: ${cellProperties.format.font.color}`); }); Excel.CellPropertiesLoadOptions.address: - |- @@ -261,11 +261,11 @@ Excel.CellPropertiesLoadOptions.address: style: true }); - // Sync to get the data from the workbook + // Sync to get the data from the workbook. await context.sync(); - const cellProperies = propertiesToGet.value[0][0]; + const cellProperties = propertiesToGet.value[0][0]; console.log( - `Address: ${cellProperies.address}\nStyle: ${cellProperies.style}\nFill Color: ${cellProperies.format.fill.color}\nFont Color: ${cellProperies.format.font.color}`); + `Address: ${cellProperties.address}\nStyle: ${cellProperties.style}\nFill Color: ${cellProperties.format.fill.color}\nFont Color: ${cellProperties.format.font.color}`); }); Excel.CellValueConditionalFormat.format: - |- @@ -1974,8 +1974,7 @@ Excel.Range.getSpecialCells: const sheet = context.workbook.worksheets.getActiveWorksheet(); const usedRange = sheet.getUsedRange(); - // Find the ranges with either text or logical (boolean) - // values + // Find the ranges with either text or logical (boolean) values. const formulaRanges = usedRange.getSpecialCells("Constants", "LogicalText"); formulaRanges.format.fill.color = "orange"; @@ -2166,7 +2165,7 @@ Excel.Range.setCellProperties: // 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 tkes a string matching the name of an Excel style. + // The style property takes a string matching the name of an Excel style. // Note that a style will overwrite any formatting, // so do not use the format property with the style property. style: "Heading1" @@ -2249,11 +2248,11 @@ Excel.Range.getCellProperties: style: true }); - // Sync to get the data from the workbook + // Sync to get the data from the workbook. await context.sync(); - const cellProperies = propertiesToGet.value[0][0]; + const cellProperties = propertiesToGet.value[0][0]; console.log( - `Address: ${cellProperies.address}\nStyle: ${cellProperies.style}\nFill Color: ${cellProperies.format.fill.color}\nFont Color: ${cellProperies.format.font.color}`); + `Address: ${cellProperties.address}\nStyle: ${cellProperties.style}\nFill Color: ${cellProperties.format.fill.color}\nFont Color: ${cellProperties.format.font.color}`); }); Excel.RangeAreas.format: - |- @@ -2262,7 +2261,7 @@ Excel.RangeAreas.format: const sheet = context.workbook.worksheets.getActiveWorksheet(); const usedRange = sheet.getUsedRange(); - // Find the ranges with formulas + // Find the ranges with formulas. const formulaRanges = usedRange.getSpecialCells("Formulas"); formulaRanges.format.fill.color = "lightgreen"; @@ -2422,7 +2421,7 @@ Excel.SettableCellProperties.style: // 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 tkes a string matching the name of an Excel style. + // The style property takes a string matching the name of an Excel style. // Note that a style will overwrite any formatting, // so do not use the format property with the style property. style: "Heading1" From 59c7080ae5a415f0e1c103c752ce80d1bee498a4 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 17 Jul 2019 11:26:29 -0700 Subject: [PATCH 184/660] Adding single click event sample (#327) --- playlists/excel.yaml | 19 ++++- samples/excel/85-preview-apis/comment.yaml | 2 +- .../event-worksheet-single-click.yaml | 77 ++++++++++++++++++ .../85-preview-apis/pivottable-slicer.yaml | 4 +- .../workbook-insert-external-worksheets.yaml | 2 +- .../workbook-save-and-close.yaml | 2 +- snippet-extractor-metadata/excel.xlsx | Bin 20172 -> 20279 bytes snippet-extractor-output/snippets.yaml | 30 +++++++ view/excel.json | 1 + 9 files changed, 128 insertions(+), 9 deletions(-) create mode 100644 samples/excel/85-preview-apis/event-worksheet-single-click.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index f6324d8fb..b401efb19 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -807,7 +807,7 @@ https://raw.githubusercontent.com////samples/excel/85-preview-apis/comment.yaml group: Preview APIs api_set: - ExcelApi: 1.9 + ExcelApi: '1.10' - id: excel-workbook-insert-external-worksheets name: Insert external worksheets fileName: workbook-insert-external-worksheets.yaml @@ -816,7 +816,7 @@ https://raw.githubusercontent.com////samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml group: Preview APIs api_set: - ExcelAPI: 2 + ExcelAPI: '1.10' - id: excel-workbook-save-and-close name: Save and close fileName: workbook-save-and-close.yaml @@ -825,7 +825,18 @@ https://raw.githubusercontent.com////samples/excel/85-preview-apis/workbook-save-and-close.yaml group: Preview APIs api_set: - ExcelAPI: 2 + ExcelAPI: '1.10' +- 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////samples/excel/85-preview-apis/event-worksheet-single-click.yaml + group: Preview APIs + api_set: + ExcelApi: '1.10' - id: excel-pivottable-slicer name: Slicer fileName: pivottable-slicer.yaml @@ -834,7 +845,7 @@ https://raw.githubusercontent.com////samples/excel/85-preview-apis/pivottable-slicer.yaml group: Preview APIs api_set: - ExcelApi: 2 + ExcelApi: '1.10' - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/samples/excel/85-preview-apis/comment.yaml b/samples/excel/85-preview-apis/comment.yaml index f4f064bd4..1bf254336 100644 --- a/samples/excel/85-preview-apis/comment.yaml +++ b/samples/excel/85-preview-apis/comment.yaml @@ -4,7 +4,7 @@ name: Comments description: 'Adds, edits, and removes comments and comment replies.' host: EXCEL api_set: - ExcelApi: 1.9 + ExcelApi: '1.10' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/85-preview-apis/event-worksheet-single-click.yaml b/samples/excel/85-preview-apis/event-worksheet-single-click.yaml new file mode 100644 index 000000000..b7efc810c --- /dev/null +++ b/samples/excel/85-preview-apis/event-worksheet-single-click.yaml @@ -0,0 +1,77 @@ +order: 4 +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. +host: EXCEL +api_set: + ExcelApi: '1.10' +script: + content: |- + $("#register-click-handler").click(() => tryCatch(registerClickHandler)); + + async function registerClickHandler() { + 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(); + }); + } + + /** 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 and use a handler for the data-changed event.

    +
    + +
    +

    Try it out

    +

    Use the button below to register the event handler. Then, left-click around the worksheet and check 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/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/pivottable-slicer.yaml b/samples/excel/85-preview-apis/pivottable-slicer.yaml index 51fd370ad..7be9d862a 100644 --- a/samples/excel/85-preview-apis/pivottable-slicer.yaml +++ b/samples/excel/85-preview-apis/pivottable-slicer.yaml @@ -1,10 +1,10 @@ -order: 4 +order: 5 id: excel-pivottable-slicer name: Slicer description: Adds a slicer to a PivotTable. host: EXCEL api_set: - ExcelApi: 2 + ExcelApi: '1.10' script: content: | $("#setup").click(() => tryCatch(setup)); 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 672fed5ad..375e8dd65 100644 --- a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml +++ b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml @@ -4,7 +4,7 @@ name: Insert external worksheets description: Inserts worksheets from another workbook into the current workbook. host: EXCEL api_set: - ExcelAPI: 2 + ExcelAPI: '1.10' script: content: | $("#file").change(() => tryCatch(insertSheets)); diff --git a/samples/excel/85-preview-apis/workbook-save-and-close.yaml b/samples/excel/85-preview-apis/workbook-save-and-close.yaml index f95b02270..795862101 100644 --- a/samples/excel/85-preview-apis/workbook-save-and-close.yaml +++ b/samples/excel/85-preview-apis/workbook-save-and-close.yaml @@ -4,7 +4,7 @@ name: Save and close description: Saves and closes a workbook. host: EXCEL api_set: - ExcelAPI: 2 + ExcelAPI: '1.10' script: content: | $("#saveWithPrompt").click(() => tryCatch(saveWithPrompt)); diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 98c133a3a3fdd0f31ddbb2ecab0a3ad1b0768c84..e41a0c2d86c69aed08234ca79bf0b01a19c3e785 100644 GIT binary patch delta 10664 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 delta 10605 zcmZ8{byS=&)9>P5+^uMFD^lDFEi7(@Qrz8(^H5lz#Y$P+-Q5et-Q5c;?(Tl+`=0xK z=idC4^P9;eGnq_ICR3jVHnHAIGNH9d=s#28FxNJQplW#2ZE@+hL z>bYK9cR3bqsXi}bi4Y}>J{6L^8InaVRZpw*BF|2*C*C3;Rr@7G$53t+9tmhhQ2z%50E2SYoB6goQF`hn6ysOUf}~$ZKkTjVR} z=1WvBUdK^|g)2N2_0wE%J1L+HKiibe5{J&=SvCS%Ap6)FM!iVX{$eiTCtI=k^WTGa=^Ub9k`i=VmS1kIQey|KJOt3|k1Y?k>I73*;SkSKF13?PL0( zA=g7NY)sG=O}#@NXqjv_D1RdK&Jo^pSlPLS2)T`gr3`5idV%T=Pf7|5%jp*BMqPQl zp7RxV6=|-=A5VC)VZiiQDdGIqfi;gngDUJjzK^Wb1q~4*#P#zy^AT|LdBdF_W@^^> z<2YHJ!WbVVjLS*yjkX~1Xw=))56o{$S@eyk$GDx}08V

    @N(3t#z*C*Zci$6TO~H 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 { + 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.onSingleClicked: + - |- + 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(); + }); Word.InlinePicture.getBase64ImageSrc: - |- await Word.run(async (context) => { diff --git a/view/excel.json b/view/excel.json index 73234916c..7fb88e5e6 100644 --- a/view/excel.json +++ b/view/excel.json @@ -89,6 +89,7 @@ "excel-comment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/comment.yaml", "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", "excel-workbook-save-and-close": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-save-and-close.yaml", + "excel-event-worksheet-single-click": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/event-worksheet-single-click.yaml", "excel-pivottable-slicer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/pivottable-slicer.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/report-generation.yaml", From 77f9f90979fafe4e3637b91368f48175e19680b8 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 17 Jul 2019 11:45:35 -0700 Subject: [PATCH 185/660] Fixing space (#328) --- snippet-extractor-metadata/excel.xlsx | Bin 20279 -> 20258 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 e41a0c2d86c69aed08234ca79bf0b01a19c3e785..aa369c232465b5fba52353e6d4d77d9866cb8e0e 100644 GIT binary patch delta 9874 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 NY)w`)H`RX|{{>s{1{44Q delta 9853 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 03a2b5474..2c9a21237 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -3461,7 +3461,7 @@ Excel.WorksheetProtection.unprotect: let activeSheet = context.workbook.worksheets.getActiveWorksheet(); activeSheet.protection.unprotect(password); }); -'Excel.WorksheetSingleClickedEventArgs .address ': +Excel.WorksheetSingleClickedEventArgs.address: - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); From f687352c4d6e073779fbab8fe418203bd48b84f5 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 18 Jul 2019 11:14:09 -0700 Subject: [PATCH 186/660] Updating yarn lock (#326) --- yarn.lock | 49 +++++++++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/yarn.lock b/yarn.lock index 401a5dde2..f4d7a7f1d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,9 +10,9 @@ "@babel/highlight" "^7.0.0" "@babel/highlight@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" - integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" + integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== dependencies: chalk "^2.0.0" esutils "^2.0.2" @@ -59,9 +59,9 @@ integrity sha512-SGGAhXLHDx+PK4YLNcNGa6goPf9XRWQNAUUbffkwVGGXIxmDKWyGGL4inzq2sPmExu431Ekb9aEMn9BkPqEYFA== "@types/lodash@^4.14.122", "@types/lodash@^4.14.50": - version "4.14.135" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.135.tgz#d2607c35dd68f70c2b35ba020c667493dedd8447" - integrity sha512-Ed+tSZ9qM1oYpi5kzdsBuOzcAIn1wDW+e8TFJ50IMJMlSopGdJgKAbhHzN6h1E1OfjlGOr2JepzEWtg9NIfoNg== + version "4.14.136" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.136.tgz#413e85089046b865d960c9ff1d400e04c31ab60f" + integrity sha512-0GJhzBdvsW2RUccNHOBkabI8HZVdOXmXbXhuKlDEd5Vv12P7oAVGfomGp3Ne21o5D/qu1WmthlNKFaoZJJeErA== "@types/minimatch@*": version "3.0.3" @@ -69,14 +69,14 @@ integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/node@*": - version "12.0.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.0.10.tgz#51babf9c7deadd5343620055fc8aff7995c8b031" - integrity sha512-LcsGbPomWsad6wmMNv7nBLw7YYYyfdYcz6xryKYQhx89c3XXan+8Q6AJ43G5XDIaklaVkK3mE4fCb0SBvMiPSQ== + version "12.6.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.3.tgz#44d507c5634f85e7164707ca36bba21b5213d487" + integrity sha512-7TEYTQT1/6PP53NftXXabIZDaZfaoBdeBm8Md/i7zsWRoBe0YwOXguyK8vhHs8ehgB/w9U4K/6EWuTyp0W6nIA== "@types/node@^11.10.5": - version "11.13.15" - resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.15.tgz#699afb07a91adced2d6183a0ad156bf82542fc7d" - integrity sha512-x6ypl5Uzly+j23hbxmMzf12Eb4lOhIEqQz0HuczpTUa1KIx1GpbN/o4E3aAED20UoEsdK0wvyY8QcffuWSLDkw== + version "11.13.17" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.17.tgz#2e7efbfe5253561087812571e5e6a1e4b1d6295b" + integrity sha512-7W3kSMa8diVH6s24a8Qrmvwu+vG3ahOC/flMHFdWSdnPYoQI0yPO84h5zOWYXAha2Npn3Pw3SSuQSwBUfaniyQ== "@types/office-js@^0.0.37": version "0.0.37" @@ -211,9 +211,9 @@ charm@1.0.1: inherits "^2.0.1" chownr@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" - integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== + version "1.1.2" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" + integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== cli-cursor@^1.0.2: version "1.0.2" @@ -490,9 +490,9 @@ libxmljs@~0.18.0: node-pre-gyp "^0.9.1" lodash@^4.17.11, lodash@^4.17.4: - version "4.17.11" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" - integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== + version "4.17.14" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" + integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== match-stream@~0.0.2: version "0.0.2" @@ -759,7 +759,12 @@ rimraf@2, rimraf@^2.6.1, rimraf@^2.6.3: dependencies: glob "^7.1.3" -safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@^5.1.2: + version "5.2.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + +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== @@ -925,9 +930,9 @@ tsutils@^2.29.0: tslib "^1.8.1" typescript@^3.3.3333: - version "3.5.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.2.tgz#a09e1dc69bc9551cadf17dba10ee42cf55e5d56c" - integrity sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA== + version "3.5.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" + integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== underscore@~1.3.3: version "1.3.3" From 0551d063b4413c563716dc4b23b953ad28f0fbbc Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 18 Jul 2019 15:47:14 -0700 Subject: [PATCH 187/660] Fix Yarn (#329) --- package.json | 2 +- yarn.lock | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 57db23281..2c8cb4fb6 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "escape-string-regexp": "^1.0.5", "excel": "^0.1.7", "js-yaml": "^3.12.2", - "lodash": "^4.17.11", + "lodash": "^4.17.13", "node-status": "^1.0.0", "rimraf": "^2.6.3", "shelljs": "^0.8.3" diff --git a/yarn.lock b/yarn.lock index f4d7a7f1d..ae5e9ee38 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,9 +3,9 @@ "@babel/code-frame@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" - integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" + integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== dependencies: "@babel/highlight" "^7.0.0" @@ -69,14 +69,14 @@ integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/node@*": - version "12.6.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.3.tgz#44d507c5634f85e7164707ca36bba21b5213d487" - integrity sha512-7TEYTQT1/6PP53NftXXabIZDaZfaoBdeBm8Md/i7zsWRoBe0YwOXguyK8vhHs8ehgB/w9U4K/6EWuTyp0W6nIA== + version "12.6.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.8.tgz#e469b4bf9d1c9832aee4907ba8a051494357c12c" + integrity sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg== "@types/node@^11.10.5": - version "11.13.17" - resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.17.tgz#2e7efbfe5253561087812571e5e6a1e4b1d6295b" - integrity sha512-7W3kSMa8diVH6s24a8Qrmvwu+vG3ahOC/flMHFdWSdnPYoQI0yPO84h5zOWYXAha2Npn3Pw3SSuQSwBUfaniyQ== + version "11.13.18" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.18.tgz#758ec2bf26339d3cc83da22676b64777d0c2befe" + integrity sha512-sMHdXLccscaxI+Hlzz58yLQue3lQyXP+6aQniDRi5oju3n0123kcjhicVGF20WF7cHiwJ2vxMbXc4skOclosoA== "@types/office-js@^0.0.37": version "0.0.37" @@ -489,7 +489,7 @@ libxmljs@~0.18.0: nan "~2.10.0" node-pre-gyp "^0.9.1" -lodash@^4.17.11, lodash@^4.17.4: +lodash@^4.17.13, lodash@^4.17.4: version "4.17.14" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== From d82d228b9d823fdb3e510537e64c637264cb9169 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 18 Jul 2019 16:02:44 -0700 Subject: [PATCH 188/660] Merging to prod (#330) * Adding single click event sample (#327) * Fixing space (#328) * Updating yarn lock (#326) * Fix Yarn (#329) --- package.json | 2 +- playlists/excel.yaml | 19 ++++- samples/excel/85-preview-apis/comment.yaml | 2 +- .../event-worksheet-single-click.yaml | 77 ++++++++++++++++++ .../85-preview-apis/pivottable-slicer.yaml | 4 +- .../workbook-insert-external-worksheets.yaml | 2 +- .../workbook-save-and-close.yaml | 2 +- snippet-extractor-metadata/excel.xlsx | Bin 20172 -> 20258 bytes snippet-extractor-output/snippets.yaml | 30 +++++++ view/excel.json | 1 + yarn.lock | 57 +++++++------ 11 files changed, 160 insertions(+), 36 deletions(-) create mode 100644 samples/excel/85-preview-apis/event-worksheet-single-click.yaml diff --git a/package.json b/package.json index 57db23281..2c8cb4fb6 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "escape-string-regexp": "^1.0.5", "excel": "^0.1.7", "js-yaml": "^3.12.2", - "lodash": "^4.17.11", + "lodash": "^4.17.13", "node-status": "^1.0.0", "rimraf": "^2.6.3", "shelljs": "^0.8.3" diff --git a/playlists/excel.yaml b/playlists/excel.yaml index f6324d8fb..b401efb19 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -807,7 +807,7 @@ https://raw.githubusercontent.com////samples/excel/85-preview-apis/comment.yaml group: Preview APIs api_set: - ExcelApi: 1.9 + ExcelApi: '1.10' - id: excel-workbook-insert-external-worksheets name: Insert external worksheets fileName: workbook-insert-external-worksheets.yaml @@ -816,7 +816,7 @@ https://raw.githubusercontent.com////samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml group: Preview APIs api_set: - ExcelAPI: 2 + ExcelAPI: '1.10' - id: excel-workbook-save-and-close name: Save and close fileName: workbook-save-and-close.yaml @@ -825,7 +825,18 @@ https://raw.githubusercontent.com////samples/excel/85-preview-apis/workbook-save-and-close.yaml group: Preview APIs api_set: - ExcelAPI: 2 + ExcelAPI: '1.10' +- 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////samples/excel/85-preview-apis/event-worksheet-single-click.yaml + group: Preview APIs + api_set: + ExcelApi: '1.10' - id: excel-pivottable-slicer name: Slicer fileName: pivottable-slicer.yaml @@ -834,7 +845,7 @@ https://raw.githubusercontent.com////samples/excel/85-preview-apis/pivottable-slicer.yaml group: Preview APIs api_set: - ExcelApi: 2 + ExcelApi: '1.10' - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/samples/excel/85-preview-apis/comment.yaml b/samples/excel/85-preview-apis/comment.yaml index f4f064bd4..1bf254336 100644 --- a/samples/excel/85-preview-apis/comment.yaml +++ b/samples/excel/85-preview-apis/comment.yaml @@ -4,7 +4,7 @@ name: Comments description: 'Adds, edits, and removes comments and comment replies.' host: EXCEL api_set: - ExcelApi: 1.9 + ExcelApi: '1.10' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/85-preview-apis/event-worksheet-single-click.yaml b/samples/excel/85-preview-apis/event-worksheet-single-click.yaml new file mode 100644 index 000000000..b7efc810c --- /dev/null +++ b/samples/excel/85-preview-apis/event-worksheet-single-click.yaml @@ -0,0 +1,77 @@ +order: 4 +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. +host: EXCEL +api_set: + ExcelApi: '1.10' +script: + content: |- + $("#register-click-handler").click(() => tryCatch(registerClickHandler)); + + async function registerClickHandler() { + 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(); + }); + } + + /** 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 and use a handler for the data-changed event.

    +
    + +
    +

    Try it out

    +

    Use the button below to register the event handler. Then, left-click around the worksheet and check 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/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/pivottable-slicer.yaml b/samples/excel/85-preview-apis/pivottable-slicer.yaml index 51fd370ad..7be9d862a 100644 --- a/samples/excel/85-preview-apis/pivottable-slicer.yaml +++ b/samples/excel/85-preview-apis/pivottable-slicer.yaml @@ -1,10 +1,10 @@ -order: 4 +order: 5 id: excel-pivottable-slicer name: Slicer description: Adds a slicer to a PivotTable. host: EXCEL api_set: - ExcelApi: 2 + ExcelApi: '1.10' script: content: | $("#setup").click(() => tryCatch(setup)); 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 672fed5ad..375e8dd65 100644 --- a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml +++ b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml @@ -4,7 +4,7 @@ name: Insert external worksheets description: Inserts worksheets from another workbook into the current workbook. host: EXCEL api_set: - ExcelAPI: 2 + ExcelAPI: '1.10' script: content: | $("#file").change(() => tryCatch(insertSheets)); diff --git a/samples/excel/85-preview-apis/workbook-save-and-close.yaml b/samples/excel/85-preview-apis/workbook-save-and-close.yaml index f95b02270..795862101 100644 --- a/samples/excel/85-preview-apis/workbook-save-and-close.yaml +++ b/samples/excel/85-preview-apis/workbook-save-and-close.yaml @@ -4,7 +4,7 @@ name: Save and close description: Saves and closes a workbook. host: EXCEL api_set: - ExcelAPI: 2 + ExcelAPI: '1.10' script: content: | $("#saveWithPrompt").click(() => tryCatch(saveWithPrompt)); diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 98c133a3a3fdd0f31ddbb2ecab0a3ad1b0768c84..aa369c232465b5fba52353e6d4d77d9866cb8e0e 100644 GIT binary patch delta 10205 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 { + 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.onSingleClicked: + - |- + 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(); + }); Word.InlinePicture.getBase64ImageSrc: - |- await Word.run(async (context) => { diff --git a/view/excel.json b/view/excel.json index 73234916c..7fb88e5e6 100644 --- a/view/excel.json +++ b/view/excel.json @@ -89,6 +89,7 @@ "excel-comment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/comment.yaml", "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", "excel-workbook-save-and-close": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-save-and-close.yaml", + "excel-event-worksheet-single-click": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/event-worksheet-single-click.yaml", "excel-pivottable-slicer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/pivottable-slicer.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/report-generation.yaml", diff --git a/yarn.lock b/yarn.lock index 401a5dde2..ae5e9ee38 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,16 +3,16 @@ "@babel/code-frame@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" - integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" + integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== dependencies: "@babel/highlight" "^7.0.0" "@babel/highlight@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" - integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" + integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== dependencies: chalk "^2.0.0" esutils "^2.0.2" @@ -59,9 +59,9 @@ integrity sha512-SGGAhXLHDx+PK4YLNcNGa6goPf9XRWQNAUUbffkwVGGXIxmDKWyGGL4inzq2sPmExu431Ekb9aEMn9BkPqEYFA== "@types/lodash@^4.14.122", "@types/lodash@^4.14.50": - version "4.14.135" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.135.tgz#d2607c35dd68f70c2b35ba020c667493dedd8447" - integrity sha512-Ed+tSZ9qM1oYpi5kzdsBuOzcAIn1wDW+e8TFJ50IMJMlSopGdJgKAbhHzN6h1E1OfjlGOr2JepzEWtg9NIfoNg== + version "4.14.136" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.136.tgz#413e85089046b865d960c9ff1d400e04c31ab60f" + integrity sha512-0GJhzBdvsW2RUccNHOBkabI8HZVdOXmXbXhuKlDEd5Vv12P7oAVGfomGp3Ne21o5D/qu1WmthlNKFaoZJJeErA== "@types/minimatch@*": version "3.0.3" @@ -69,14 +69,14 @@ integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/node@*": - version "12.0.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.0.10.tgz#51babf9c7deadd5343620055fc8aff7995c8b031" - integrity sha512-LcsGbPomWsad6wmMNv7nBLw7YYYyfdYcz6xryKYQhx89c3XXan+8Q6AJ43G5XDIaklaVkK3mE4fCb0SBvMiPSQ== + version "12.6.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.8.tgz#e469b4bf9d1c9832aee4907ba8a051494357c12c" + integrity sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg== "@types/node@^11.10.5": - version "11.13.15" - resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.15.tgz#699afb07a91adced2d6183a0ad156bf82542fc7d" - integrity sha512-x6ypl5Uzly+j23hbxmMzf12Eb4lOhIEqQz0HuczpTUa1KIx1GpbN/o4E3aAED20UoEsdK0wvyY8QcffuWSLDkw== + version "11.13.18" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.18.tgz#758ec2bf26339d3cc83da22676b64777d0c2befe" + integrity sha512-sMHdXLccscaxI+Hlzz58yLQue3lQyXP+6aQniDRi5oju3n0123kcjhicVGF20WF7cHiwJ2vxMbXc4skOclosoA== "@types/office-js@^0.0.37": version "0.0.37" @@ -211,9 +211,9 @@ charm@1.0.1: inherits "^2.0.1" chownr@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" - integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== + version "1.1.2" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" + integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== cli-cursor@^1.0.2: version "1.0.2" @@ -489,10 +489,10 @@ libxmljs@~0.18.0: nan "~2.10.0" node-pre-gyp "^0.9.1" -lodash@^4.17.11, lodash@^4.17.4: - version "4.17.11" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" - integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== +lodash@^4.17.13, lodash@^4.17.4: + version "4.17.14" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" + integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== match-stream@~0.0.2: version "0.0.2" @@ -759,7 +759,12 @@ rimraf@2, rimraf@^2.6.1, rimraf@^2.6.3: dependencies: glob "^7.1.3" -safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@^5.1.2: + version "5.2.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + +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== @@ -925,9 +930,9 @@ tsutils@^2.29.0: tslib "^1.8.1" typescript@^3.3.3333: - version "3.5.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.2.tgz#a09e1dc69bc9551cadf17dba10ee42cf55e5d56c" - integrity sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA== + version "3.5.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" + integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== underscore@~1.3.3: version "1.3.3" From 57e0a584b5482651673590974a0565f793fa5737 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 19 Jul 2019 09:39:31 -0700 Subject: [PATCH 189/660] [admin] (Snippet Generator) Trimming white space from class and method names (#331) * Fix Yarn * Trimming white space from snippet generator --- config/build.documentation.ts | 28 +++++++++++--------------- snippet-extractor-metadata/excel.xlsx | Bin 20258 -> 20234 bytes 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/config/build.documentation.ts b/config/build.documentation.ts index 9e5f53be5..d65eb02ea 100644 --- a/config/build.documentation.ts +++ b/config/build.documentation.ts @@ -78,21 +78,17 @@ async function buildSnippetExtractsPerHost( // Remove the first line, since it's the header line rows.splice(0, 1); - resolve( - rows - .map((row: string[]) => { - if (row.find(text => text.startsWith('//'))) { - return null; - } - - let result: MappingFileRowData = {} as any; - row.forEach((column: string, index) => { - result[headerNames[index]] = column; - }); - return result; - }) - .filter(item => item) - ); + resolve(rows.map((row: string[]) => { + if (row.find(text => text.startsWith('//'))) { + return null; + } + + let result: MappingFileRowData = {} as any; + row.forEach((column: string, index) => { + result[headerNames[index]] = column; + }); + return result; + }).filter(item => item)); }); }); @@ -102,7 +98,7 @@ async function buildSnippetExtractsPerHost( .filter(item => item) .forEach((text, index) => { const row = lines[index]; - const fullName = `${hostName}.${row.class}.${row.member}`; + const fullName = `${hostName}.${row.class.trim()}.${row.member.trim()}`; if (!allSnippetData[fullName]) { allSnippetData[fullName] = []; } diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index aa369c232465b5fba52353e6d4d77d9866cb8e0e..a71a7e153213f4fa57ab88411ef693f2fa046f4c 100644 GIT binary patch delta 8582 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 delta 8575 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 Pb<&o#Sg}0R|1tgp=CpKN From 437443f49881e2fc99421d20672b36ade3a386a6 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 25 Jul 2019 12:05:08 -0700 Subject: [PATCH 190/660] [admin] (Dependencies) Removing office-js-helpers and upgrading to excel.js 1.0.0 (#333) * Fix Yarn * Removing office-js-helpers and upgrading to excel.js 1.0.0 * Reverting prive sample changes * Rebuilding folder structure --- config/build.documentation.ts | 21 +- config/build.ts | 7 +- config/helpers.ts | 139 +++++++++++- package.json | 3 +- .../excel/20-chart/chart-title-js.yaml | 152 ------------- .../excel/20-chart/chart-title-ts.yaml | 5 +- view/excel.json | 1 - yarn.lock | 211 ++++++++---------- 8 files changed, 245 insertions(+), 294 deletions(-) delete mode 100644 private-samples/excel/20-chart/chart-title-js.yaml diff --git a/config/build.documentation.ts b/config/build.documentation.ts index d65eb02ea..99684e5d6 100644 --- a/config/build.documentation.ts +++ b/config/build.documentation.ts @@ -1,10 +1,11 @@ import * as path from 'path'; import * as fs from 'fs'; import * as jsyaml from 'js-yaml'; -import { Dictionary } from '@microsoft/office-js-helpers'; +import { Dictionary } from './helpers'; import { SnippetProcessedData, banner, readDir, officeHostsToAppNames, writeFile, rmRf, mkDir } from './helpers'; import { status } from './status'; +import parseXlsx from 'excel'; const SNIPPET_EXTRACTOR_METADATA_FOLDER_NAME = 'snippet-extractor-metadata'; @@ -12,7 +13,7 @@ interface MappingFileRowData { class: string; member: string; snippetId: string; snippetFunction: string } const headerNames: (keyof MappingFileRowData)[] = - ['class', 'member', 'snippetId', 'snippetFunction']; + ['class', 'member', 'snippetId', 'snippetFunction']; export async function buildReferenceDocSnippetExtracts( @@ -51,22 +52,16 @@ async function buildSnippetExtractsPerHost( const lines: MappingFileRowData[] = await new Promise((resolve: (data: MappingFileRowData[]) => void, reject) => { - const parseXlsx = require('excel'); - const fullFilePath = path.join( path.resolve(SNIPPET_EXTRACTOR_METADATA_FOLDER_NAME), filename ); - parseXlsx(fullFilePath, (err, rows: any[][]) => { - if (err) { - reject(err); - } - - if (rows.length < 2) { + parseXlsx(fullFilePath).then((data) => { + if (data.length < 2) { reject(new Error('No data rows found')); } - if (rows[0].length !== headerNames.length) { + if (data[0].length !== headerNames.length) { reject( new Error('Unexpected number of columns. Expecting the following ' + headerNames.length + ' columns: ' + @@ -76,9 +71,9 @@ async function buildSnippetExtractsPerHost( } // Remove the first line, since it's the header line - rows.splice(0, 1); + data.splice(0, 1); - resolve(rows.map((row: string[]) => { + resolve(data.map((row: string[]) => { if (row.find(text => text.startsWith('//'))) { return null; } diff --git a/config/build.ts b/config/build.ts index f6b777a0f..e071fe4df 100644 --- a/config/build.ts +++ b/config/build.ts @@ -7,13 +7,12 @@ import { status } from './status'; import { SnippetFileInput, SnippetProcessedData, getDestinationBranch, followsNamingGuidelines, isCUID, - rmRf, mkDir, getFiles, writeFile, loadFileContents, banner, getPrintableDetails + rmRf, mkDir, getFiles, writeFile, loadFileContents, banner, getPrintableDetails, Dictionary } from './helpers'; import { buildReferenceDocSnippetExtracts } from './build.documentation'; import { getShareableYaml } from './snippet.helpers'; import { processLibraries } from './libraries.processor'; import { startCase, groupBy, map } from 'lodash'; -import { Dictionary } from '@microsoft/office-js-helpers'; import * as jsyaml from 'js-yaml'; import escapeStringRegexp = require('escape-string-regexp'); @@ -71,7 +70,7 @@ async function processSnippets(processedSnippets: Dictionary processAndValidateSnippet(file)))) .filter(file => file !== null) - .map(file => processedSnippets.add(file.rawUrl, file)); + .map(file => processedSnippets.set(file.rawUrl, file)); // Helpers: @@ -489,7 +488,7 @@ async function generatePlaylists(processedSnippets: Dictionary(); for (let processedSnippet of processedSnippets.values()) { if (processedSnippet.isPublic) { - processedPublicSnippets.add(processedSnippet.rawUrl, processedSnippet); + processedPublicSnippets.set(processedSnippet.rawUrl, processedSnippet); } } diff --git a/config/helpers.ts b/config/helpers.ts index 0df238a89..d595428eb 100644 --- a/config/helpers.ts +++ b/config/helpers.ts @@ -5,6 +5,7 @@ import * as chalk from 'chalk'; import * as jsyaml from 'js-yaml'; import { console } from './status'; import * as rimraf from 'rimraf'; +import { isObject, isNil, isString, isEmpty } from 'lodash'; export const officeHostsToAppNames = { 'ACCESS': 'Access', @@ -221,7 +222,7 @@ export function getFileMetadata(fullPath: string, root: string): SnippetFileInpu } /** - * Recurrsively crawl through a folder and return all the files in it. + * Recursively crawl through a folder and return all the files in it. * @param root An absolute path to the directory. */ export function getFiles(root: string): SnippetFileInput[] { @@ -287,3 +288,139 @@ export function isCUID(id: string) { export function pause(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } + +/** + * Helper for creating and querying Dictionaries. + * A wrapper around ES6 Maps. + */ +export class Dictionary { + protected _items: Map; + + /** + * @constructor + * @param {object} items Initial seed of items. + */ + constructor(items?: { [index: string]: T } | Array<[string, T]> | Map) { + if (isNil(items)) { + this._items = new Map(); + } + else if (items instanceof Set) { + throw new TypeError(`Invalid type of argument: Set`); + } + else if (items instanceof Map) { + this._items = new Map(items); + } + else if (Array.isArray(items)) { + this._items = new Map(items); + } + else if (isObject(items)) { + this._items = new Map(); + for (const key of Object.keys(items)) { + this._items.set(key, items[key]); + } + } + else { + throw new TypeError(`Invalid type of argument: ${typeof items}`); + } + } + + /** + * Gets an item from the dictionary. + * + * @param {string} key The key of the item. + * @return {object} Returns an item if found. + */ + get(key: string): T { + return this._items.get(key); + } + + /** + * Inserts an item into the dictionary. + * If an item already exists with the same key, it will be overridden by the new value. + * + * @param {string} key The key of the item. + * @param {object} value The item to be added. + * @return {object} Returns the added item. + */ + set(key: string, value: T): T { + this._validateKey(key); + this._items.set(key, value); + return value; + } + + /** + * Removes an item from the dictionary. + * Will throw if the key doesn't exist. + * + * @param {string} key The key of the item. + * @return {object} Returns the deleted item. + */ + delete(key: string): T { + if (!this.has(key)) { + throw new ReferenceError(`Key: ${key} not found.`); + } + let value = this._items.get(key); + this._items.delete(key); + return value; + } + + /** + * Clears the dictionary. + */ + clear(): void { + this._items.clear(); + } + + /** + * Check if the dictionary contains the given key. + * + * @param {string} key The key of the item. + * @return {boolean} Returns true if the key was found. + */ + has(key: string): boolean { + this._validateKey(key); + return this._items.has(key); + } + + /** + * Lists all the keys in the dictionary. + * + * @return {array} Returns all the keys. + */ + keys(): Array { + return Array.from(this._items.keys()); + } + + /** + * Lists all the values in the dictionary. + * + * @return {array} Returns all the values. + */ + values(): Array { + return Array.from(this._items.values()); + } + + /** + * Get a shallow copy of the underlying map. + * + * @return {object} Returns the shallow copy of the map. + */ + clone(): Map { + return new Map(this._items); + } + + /** + * Number of items in the dictionary. + * + * @return {number} Returns the number of items in the dictionary. + */ + get count(): number { + return this._items.size; + } + + private _validateKey(key: string): void { + if (!isString(key) || isEmpty(key)) { + throw new TypeError('Key needs to be a string'); + } + } +} diff --git a/package.json b/package.json index 2c8cb4fb6..3d6e60026 100644 --- a/package.json +++ b/package.json @@ -24,10 +24,9 @@ }, "homepage": "https://github.com/OfficeDev/office-js-snippets#readme", "dependencies": { - "@microsoft/office-js-helpers": "^0.5.0", "chalk": "1.1.3", "escape-string-regexp": "^1.0.5", - "excel": "^0.1.7", + "excel": "^1.0.0", "js-yaml": "^3.12.2", "lodash": "^4.17.13", "node-status": "^1.0.0", diff --git a/private-samples/excel/20-chart/chart-title-js.yaml b/private-samples/excel/20-chart/chart-title-js.yaml deleted file mode 100644 index d6eba987b..000000000 --- a/private-samples/excel/20-chart/chart-title-js.yaml +++ /dev/null @@ -1,152 +0,0 @@ -id: excel-chart-chart-title-js -name: Chart title - JS -description: Set and get the title of a chart -author: OfficeDev -host: EXCEL -api_set: - ExcelApi: 1.1 -script: - content: | - $("#setup").click(() => tryCatch(setup)); - - $("#set-title").click(() => tryCatch(setTitle)); - $("#get-title").click(() => tryCatch(getTitle)); - - function setTitle() { - return Excel.run(function (ctx) { - var chart = ctx.workbook.worksheets.getItem("Sample").charts.getItem("Chart1"); - - chart.title.text = "My Chart"; - chart.title.visible = true; - chart.title.overlay = false; - - return ctx.sync() - .then(function () { - console.log("Chart title has been updated"); - }) - }); - } - - function getTitle() { - return Excel.run(function (ctx) { - var chart = ctx.workbook.worksheets.getItem("Sample").charts.getItem("Chart1"); - chart.load('title/text'); - - return ctx.sync() - .then(function () { - console.log("Chart title is '" + chart.title.text + "'"); - }) - }); - } - - async function setup() { - await Excel.run(async (context) => { - - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - - const sheet = context.workbook.worksheets.getItem("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] - ]); - - const salesTable = sheet.tables.getItem("SalesTable"); - - const dataRange = salesTable.getDataBodyRange(); - - let chart = sheet.charts.add("ColumnClustered", dataRange, "auto"); - - 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"; - let points = chart.series.getItemAt(0).points; - points.getItemAt(0).format.fill.setSolidColor("pink"); - points.getItemAt(1).format.fill.setSolidColor("indigo"); - - chart.name = "Chart1"; - - await context.sync(); - sheet.activate(); - }); - } - - - /** Default helper for invoking an action and handling errors. */ - async function tryCatch(callback) { - try { - await callback(); - } - catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); - } - } - language: typescript -template: - content: |- -
    -

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

    -
    - -
    -

    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: | - // Office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.js - - // 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 - - // NPM libraries - core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js - jquery@3.1.1 - - // IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-js - @types/core-js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts - @types/jquery@3.3.1 \ No newline at end of file diff --git a/private-samples/excel/20-chart/chart-title-ts.yaml b/private-samples/excel/20-chart/chart-title-ts.yaml index 1feef0ca6..9d4fd0629 100644 --- a/private-samples/excel/20-chart/chart-title-ts.yaml +++ b/private-samples/excel/20-chart/chart-title-ts.yaml @@ -40,9 +40,8 @@ script: async function setup() { await Excel.run(async (context) => { - await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); - - const sheet = context.workbook.worksheets.getItem("Sample"); + // NOTE: This is throw an error if a worksheet named "Sample" already exists. + const sheet = context.workbook.worksheets.add("Sample"); let expensesTable = sheet.tables.add('A1:E1', true); diff --git a/view/excel.json b/view/excel.json index 7fb88e5e6..c76f4347d 100644 --- a/view/excel.json +++ b/view/excel.json @@ -21,7 +21,6 @@ "excel-custom-functions-streaming": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/16-custom-functions/streaming-function.yaml", "excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml", - "excel-chart-chart-title-js": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/private-samples/excel/20-chart/chart-title-js.yaml", "excel-chart-chart-title-ts": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/private-samples/excel/20-chart/chart-title-ts.yaml", "excel-data-validation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/22-data-validation/data-validation.yaml", "excel-document-get-file-in-slices-async": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/26-document/get-file-in-slices-async.yaml", diff --git a/yarn.lock b/yarn.lock index ae5e9ee38..dbedb97e4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18,17 +18,6 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@microsoft/office-js-helpers@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@microsoft/office-js-helpers/-/office-js-helpers-0.5.0.tgz#1afa7b0abe0c82b537932f947cd0674c3cd1af2b" - integrity sha1-Gvp7Cr4MgrU3ky+UfNBnTDzRrys= - dependencies: - "@types/jquery" "^2.0.39" - "@types/lodash" "^4.14.50" - "@types/office-js" "^0.0.37" - core-js "^2.4.1" - lodash "^4.17.4" - "@types/chalk@0.4.31": version "0.4.31" resolved "https://registry.yarnpkg.com/@types/chalk/-/chalk-0.4.31.tgz#a31d74241a6b1edbb973cf36d97a2896834a51f9" @@ -48,17 +37,12 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/jquery@^2.0.39": - version "2.0.53" - resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-2.0.53.tgz#89c53bc83d820e50c3b667ae2fdf4276df8b3aba" - integrity sha512-MZKPWUhp5TKkoJ/58NSq6io+CSUCOHm2b3Z6U4+r9v70kktB0JM+eRjdp6YmDHtw0kK2XB7L2K7/FMIoziHjUA== - "@types/js-yaml@^3.12.0": version "3.12.1" resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.1.tgz#5c6f4a1eabca84792fbd916f0cb40847f123c656" integrity sha512-SGGAhXLHDx+PK4YLNcNGa6goPf9XRWQNAUUbffkwVGGXIxmDKWyGGL4inzq2sPmExu431Ekb9aEMn9BkPqEYFA== -"@types/lodash@^4.14.122", "@types/lodash@^4.14.50": +"@types/lodash@^4.14.122": version "4.14.136" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.136.tgz#413e85089046b865d960c9ff1d400e04c31ab60f" integrity sha512-0GJhzBdvsW2RUccNHOBkabI8HZVdOXmXbXhuKlDEd5Vv12P7oAVGfomGp3Ne21o5D/qu1WmthlNKFaoZJJeErA== @@ -78,11 +62,6 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.18.tgz#758ec2bf26339d3cc83da22676b64777d0c2befe" integrity sha512-sMHdXLccscaxI+Hlzz58yLQue3lQyXP+6aQniDRi5oju3n0123kcjhicVGF20WF7cHiwJ2vxMbXc4skOclosoA== -"@types/office-js@^0.0.37": - version "0.0.37" - resolved "https://registry.yarnpkg.com/@types/office-js/-/office-js-0.0.37.tgz#fba3ba06ffd9f4b83de0bbe66770245cd223b0da" - integrity sha1-+6O6Bv/Z9Lg94LvmZ3AkXNIjsNo= - "@types/shelljs@^0.8.3": version "0.8.5" resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.8.5.tgz#1e507b2f6d1f893269bd3e851ec24419ef9beeea" @@ -143,6 +122,11 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= +big-integer@^1.6.17: + version "1.6.44" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.44.tgz#4ee9ae5f5839fc11ade338fea216b4513454a539" + integrity sha512-7MzElZPTyJ2fNvBkPxtFQ2fWIkVmuzw41+BZHSzpEq3ymB2MfeKp1+yXl/tS75xCx+WnyV+yb0kp+K1C3UNwmQ== + binary@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" @@ -158,6 +142,11 @@ bindings@^1.3.0: dependencies: file-uri-to-path "1.0.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" @@ -166,6 +155,16 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +buffer-indexof-polyfill@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz#a9fb806ce8145d5428510ce72f278bb363a638bf" + integrity sha1-qfuAbOgUXVQoUQznLyeLs2OmOL8= + +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= + buffers@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" @@ -264,11 +263,6 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= -core-js@^2.4.1: - version "2.6.9" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" - integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== - 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" @@ -301,6 +295,13 @@ diff@^3.2.0: resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== +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" + 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" @@ -316,15 +317,15 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= -excel@^0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/excel/-/excel-0.1.7.tgz#00a88e6fed5fc06f44a4aaf6f88f65f85a93c0bc" - integrity sha1-AKiOb+1fwG9EpKr2+I9l+FqTwLw= +excel@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/excel/-/excel-1.0.0.tgz#5ad98f460ce9f7ee48e514d3d6388e018d874d3c" + integrity sha512-Jpp9TpqqHBLi4gt5migJ2sPd4ARORDfl3UFgPlcPd7xbajpPfZx1fmbMerZzKY/ofALd3gilUSneiupLn9Ph5Q== dependencies: - libxmljs "~0.18.0" - node-promise "~0.5.3" - underscore "~1.3.3" - unzip2 "0.2.5" + libxmljs "^0.18.0" + unzipper "^0.8.11" + xmldom "^0.1.27" + xpath "0.0.27" exit-hook@^1.0.0: version "1.1.1" @@ -348,14 +349,14 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fstream@~0.1.21: - version "0.1.31" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-0.1.31.tgz#7337f058fbbbbefa8c9f561a28cab0849202c988" - integrity sha1-czfwWPu7vvqMn1YaKMqwhJICyYg= +fstream@~1.0.10: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== dependencies: - graceful-fs "~3.0.2" + graceful-fs "^4.1.2" inherits "~2.0.0" - mkdirp "0.5" + mkdirp ">=0.5 0" rimraf "2" gauge@~2.7.3: @@ -384,12 +385,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@~3.0.2: - version "3.0.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" - integrity sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg= - dependencies: - natives "^1.1.0" +graceful-fs@^4.1.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b" + integrity sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg== has-ansi@^2.0.0: version "2.0.0" @@ -457,11 +456,6 @@ 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= -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" @@ -480,7 +474,7 @@ js-yaml@^3.12.2, js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -libxmljs@~0.18.0: +libxmljs@^0.18.0: version "0.18.8" resolved "https://registry.yarnpkg.com/libxmljs/-/libxmljs-0.18.8.tgz#b0a07512a01290b6240600d6c2bc33a3c70976d6" integrity sha1-sKB1EqASkLYkBgDWwrwzo8cJdtY= @@ -489,18 +483,15 @@ libxmljs@~0.18.0: nan "~2.10.0" node-pre-gyp "^0.9.1" -lodash@^4.17.13, lodash@^4.17.4: - version "4.17.14" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" - integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== +listenercount@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" + integrity sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc= -match-stream@~0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/match-stream/-/match-stream-0.0.2.tgz#99eb050093b34dffade421b9ac0b410a9cfa17cf" - integrity sha1-mesFAJOzTf+t5CG5rAtBCpz6F88= - dependencies: - buffers "~0.1.1" - readable-stream "~1.0.0" +lodash@^4.17.13: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== minimatch@^3.0.4: version "3.0.4" @@ -534,7 +525,7 @@ minizlib@^1.2.1: dependencies: minipass "^2.2.1" -mkdirp@0.5, mkdirp@^0.5.0, mkdirp@^0.5.1: +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -551,11 +542,6 @@ nan@~2.10.0: resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" integrity sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA== -natives@^1.1.0: - version "1.1.6" - resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.6.tgz#a603b4a498ab77173612b9ea1acdec4d980f00bb" - integrity sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA== - needle@^2.2.0: version "2.4.0" resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" @@ -581,11 +567,6 @@ node-pre-gyp@^0.9.1: semver "^5.3.0" tar "^4" -node-promise@~0.5.3: - version "0.5.14" - resolved "https://registry.yarnpkg.com/node-promise/-/node-promise-0.5.14.tgz#6dccbae26d2c5383d1f49ead782c7cecbbbd07dc" - integrity sha512-kbd+ABY2XRdByRVHPcBDemymfNL8+msGyKNxG/ziZnh9RjneuuGQl3/CE5UkNWxCInkJS+ztc5B31/t2kIO4Yw== - node-status@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-status/-/node-status-1.0.0.tgz#7906a7c47a6587d03496bf74ec634abaa03f8e80" @@ -667,11 +648,6 @@ osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -"over@>= 0.0.5 < 1": - version "0.0.5" - resolved "https://registry.yarnpkg.com/over/-/over-0.0.5.tgz#f29852e70fd7e25f360e013a8ec44c82aedb5708" - integrity sha1-8phS5w/X4l82DgE6jsRMgq7bVwg= - 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" @@ -682,21 +658,16 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== +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= + 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== -pullstream@~0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/pullstream/-/pullstream-0.4.1.tgz#d6fb3bf5aed697e831150eb1002c25a3f8ae1314" - integrity sha1-1vs79a7Wl+gxFQ6xACwlo/iuExQ= - dependencies: - over ">= 0.0.5 < 1" - readable-stream "~1.0.31" - setimmediate ">= 1.0.2 < 2" - slice-stream ">= 1.0.0 < 2" - rc@^1.1.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -707,7 +678,7 @@ rc@^1.1.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -readable-stream@^2.0.6: +readable-stream@^2.0.2, readable-stream@^2.0.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== @@ -720,15 +691,18 @@ readable-stream@^2.0.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@~1.0.0, readable-stream@~1.0.31: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= +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= dependencies: + buffer-shims "^1.0.0" core-util-is "~1.0.0" inherits "~2.0.1" - isarray "0.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" string_decoder "~0.10.x" + util-deprecate "~1.0.1" rechoir@^0.6.2: version "0.6.2" @@ -789,7 +763,7 @@ set-blocking@~2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= -"setimmediate@>= 1.0.2 < 2", setimmediate@~1.0.1: +setimmediate@~1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= @@ -808,13 +782,6 @@ signal-exit@^3.0.0: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= -"slice-stream@>= 1.0.0 < 2": - version "1.0.0" - resolved "https://registry.yarnpkg.com/slice-stream/-/slice-stream-1.0.0.tgz#5b33bd66f013b1a7f86460b03d463dec39ad3ea0" - integrity sha1-WzO9ZvATsaf4ZGCwPUY97DmtPqA= - dependencies: - readable-stream "~1.0.31" - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -934,22 +901,20 @@ typescript@^3.3.3333: resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== -underscore@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.3.3.tgz#47ac53683daf832bfa952e1774417da47817ae42" - integrity sha1-R6xTaD2vgyv6lS4XdEF9pHgXrkI= - -unzip2@0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/unzip2/-/unzip2-0.2.5.tgz#4ef7a579a78c15c51f550f6a053db194149c8992" - integrity sha1-TveleaeMFcUfVQ9qBT2xlBSciZI= +unzipper@^0.8.11: + version "0.8.14" + resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.8.14.tgz#ade0524cd2fc14d11b8de258be22f9d247d3f79b" + integrity sha512-8rFtE7EP5ssOwGpN2dt1Q4njl0N1hUXJ7sSPz0leU2hRdq6+pra57z4YPBlVqm40vcgv6ooKZEAx48fMTv9x4w== dependencies: + big-integer "^1.6.17" binary "~0.3.0" - fstream "~0.1.21" - match-stream "~0.0.2" - pullstream "~0.4.0" - readable-stream "~1.0.0" - setimmediate "~1.0.1" + 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@~1.0.1: version "1.0.2" @@ -968,6 +933,16 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +xmldom@^0.1.27: + version "0.1.27" + resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" + integrity sha1-1QH5ezvbQDr4757MIFcxh6rawOk= + +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@^3.0.0, yallist@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" From ba9f70fe5f55d36f21e5d36e5c634c36a1521ef6 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Tue, 30 Jul 2019 13:25:41 -0700 Subject: [PATCH 191/660] Typo fixes (#335) --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 130a67ce8..404cde3b8 100644 --- a/README.md +++ b/README.md @@ -134,9 +134,8 @@ A few style rules to observe: ## Debugging the build script -* The scripts for building/validating the snippets are under the `config` folder -- in particular, under `build.ts`. There is also a `deploy.ts` for copying the built files to their final location.) +* The scripts for building/validating the snippets are under the `config` folder -- in particular, under `build.ts`. There is also a `deploy.ts` for copying the built files to their final location. > **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! -
    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 0ed8714289754bc6b6849d21493b5d476d6f5fc8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2019 17:27:54 -0700 Subject: [PATCH 192/660] Bump fstream from 0.1.31 to 1.0.12 (#337) Bumps [fstream](https://github.com/npm/fstream) from 0.1.31 to 1.0.12. - [Release notes](https://github.com/npm/fstream/releases) - [Commits](https://github.com/npm/fstream/compare/v0.1.31...v1.0.12) Signed-off-by: dependabot[bot] --- yarn.lock | 207 ++++++++++++++++++++++++------------------------------ 1 file changed, 91 insertions(+), 116 deletions(-) diff --git a/yarn.lock b/yarn.lock index ae5e9ee38..85582e71d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18,17 +18,6 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@microsoft/office-js-helpers@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@microsoft/office-js-helpers/-/office-js-helpers-0.5.0.tgz#1afa7b0abe0c82b537932f947cd0674c3cd1af2b" - integrity sha1-Gvp7Cr4MgrU3ky+UfNBnTDzRrys= - dependencies: - "@types/jquery" "^2.0.39" - "@types/lodash" "^4.14.50" - "@types/office-js" "^0.0.37" - core-js "^2.4.1" - lodash "^4.17.4" - "@types/chalk@0.4.31": version "0.4.31" resolved "https://registry.yarnpkg.com/@types/chalk/-/chalk-0.4.31.tgz#a31d74241a6b1edbb973cf36d97a2896834a51f9" @@ -48,17 +37,12 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/jquery@^2.0.39": - version "2.0.53" - resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-2.0.53.tgz#89c53bc83d820e50c3b667ae2fdf4276df8b3aba" - integrity sha512-MZKPWUhp5TKkoJ/58NSq6io+CSUCOHm2b3Z6U4+r9v70kktB0JM+eRjdp6YmDHtw0kK2XB7L2K7/FMIoziHjUA== - "@types/js-yaml@^3.12.0": version "3.12.1" resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.1.tgz#5c6f4a1eabca84792fbd916f0cb40847f123c656" integrity sha512-SGGAhXLHDx+PK4YLNcNGa6goPf9XRWQNAUUbffkwVGGXIxmDKWyGGL4inzq2sPmExu431Ekb9aEMn9BkPqEYFA== -"@types/lodash@^4.14.122", "@types/lodash@^4.14.50": +"@types/lodash@^4.14.122": version "4.14.136" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.136.tgz#413e85089046b865d960c9ff1d400e04c31ab60f" integrity sha512-0GJhzBdvsW2RUccNHOBkabI8HZVdOXmXbXhuKlDEd5Vv12P7oAVGfomGp3Ne21o5D/qu1WmthlNKFaoZJJeErA== @@ -78,11 +62,6 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.18.tgz#758ec2bf26339d3cc83da22676b64777d0c2befe" integrity sha512-sMHdXLccscaxI+Hlzz58yLQue3lQyXP+6aQniDRi5oju3n0123kcjhicVGF20WF7cHiwJ2vxMbXc4skOclosoA== -"@types/office-js@^0.0.37": - version "0.0.37" - resolved "https://registry.yarnpkg.com/@types/office-js/-/office-js-0.0.37.tgz#fba3ba06ffd9f4b83de0bbe66770245cd223b0da" - integrity sha1-+6O6Bv/Z9Lg94LvmZ3AkXNIjsNo= - "@types/shelljs@^0.8.3": version "0.8.5" resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.8.5.tgz#1e507b2f6d1f893269bd3e851ec24419ef9beeea" @@ -143,6 +122,11 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= +big-integer@^1.6.17: + version "1.6.44" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.44.tgz#4ee9ae5f5839fc11ade338fea216b4513454a539" + integrity sha512-7MzElZPTyJ2fNvBkPxtFQ2fWIkVmuzw41+BZHSzpEq3ymB2MfeKp1+yXl/tS75xCx+WnyV+yb0kp+K1C3UNwmQ== + binary@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" @@ -158,6 +142,11 @@ bindings@^1.3.0: dependencies: file-uri-to-path "1.0.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" @@ -166,6 +155,16 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +buffer-indexof-polyfill@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz#a9fb806ce8145d5428510ce72f278bb363a638bf" + integrity sha1-qfuAbOgUXVQoUQznLyeLs2OmOL8= + +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= + buffers@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" @@ -264,11 +263,6 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= -core-js@^2.4.1: - version "2.6.9" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" - integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== - 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" @@ -301,6 +295,13 @@ diff@^3.2.0: resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== +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" + 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" @@ -316,15 +317,15 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= -excel@^0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/excel/-/excel-0.1.7.tgz#00a88e6fed5fc06f44a4aaf6f88f65f85a93c0bc" - integrity sha1-AKiOb+1fwG9EpKr2+I9l+FqTwLw= +excel@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/excel/-/excel-1.0.0.tgz#5ad98f460ce9f7ee48e514d3d6388e018d874d3c" + integrity sha512-Jpp9TpqqHBLi4gt5migJ2sPd4ARORDfl3UFgPlcPd7xbajpPfZx1fmbMerZzKY/ofALd3gilUSneiupLn9Ph5Q== dependencies: - libxmljs "~0.18.0" - node-promise "~0.5.3" - underscore "~1.3.3" - unzip2 "0.2.5" + libxmljs "^0.18.0" + unzipper "^0.8.11" + xmldom "^0.1.27" + xpath "0.0.27" exit-hook@^1.0.0: version "1.1.1" @@ -348,14 +349,14 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fstream@~0.1.21: - version "0.1.31" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-0.1.31.tgz#7337f058fbbbbefa8c9f561a28cab0849202c988" - integrity sha1-czfwWPu7vvqMn1YaKMqwhJICyYg= +fstream@~1.0.10: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== dependencies: - graceful-fs "~3.0.2" + graceful-fs "^4.1.2" inherits "~2.0.0" - mkdirp "0.5" + mkdirp ">=0.5 0" rimraf "2" gauge@~2.7.3: @@ -384,12 +385,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@~3.0.2: - version "3.0.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" - integrity sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg= - dependencies: - natives "^1.1.0" +graceful-fs@^4.1.2: + version "4.2.1" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.1.tgz#1c1f0c364882c868f5bff6512146328336a11b1d" + integrity sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw== has-ansi@^2.0.0: version "2.0.0" @@ -457,11 +456,6 @@ 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= -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" @@ -480,7 +474,7 @@ js-yaml@^3.12.2, js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -libxmljs@~0.18.0: +libxmljs@^0.18.0: version "0.18.8" resolved "https://registry.yarnpkg.com/libxmljs/-/libxmljs-0.18.8.tgz#b0a07512a01290b6240600d6c2bc33a3c70976d6" integrity sha1-sKB1EqASkLYkBgDWwrwzo8cJdtY= @@ -489,19 +483,16 @@ libxmljs@~0.18.0: nan "~2.10.0" node-pre-gyp "^0.9.1" -lodash@^4.17.13, lodash@^4.17.4: +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.13: version "4.17.14" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== -match-stream@~0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/match-stream/-/match-stream-0.0.2.tgz#99eb050093b34dffade421b9ac0b410a9cfa17cf" - integrity sha1-mesFAJOzTf+t5CG5rAtBCpz6F88= - dependencies: - buffers "~0.1.1" - readable-stream "~1.0.0" - minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -534,7 +525,7 @@ minizlib@^1.2.1: dependencies: minipass "^2.2.1" -mkdirp@0.5, mkdirp@^0.5.0, mkdirp@^0.5.1: +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -551,11 +542,6 @@ nan@~2.10.0: resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" integrity sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA== -natives@^1.1.0: - version "1.1.6" - resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.6.tgz#a603b4a498ab77173612b9ea1acdec4d980f00bb" - integrity sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA== - needle@^2.2.0: version "2.4.0" resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" @@ -581,11 +567,6 @@ node-pre-gyp@^0.9.1: semver "^5.3.0" tar "^4" -node-promise@~0.5.3: - version "0.5.14" - resolved "https://registry.yarnpkg.com/node-promise/-/node-promise-0.5.14.tgz#6dccbae26d2c5383d1f49ead782c7cecbbbd07dc" - integrity sha512-kbd+ABY2XRdByRVHPcBDemymfNL8+msGyKNxG/ziZnh9RjneuuGQl3/CE5UkNWxCInkJS+ztc5B31/t2kIO4Yw== - node-status@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-status/-/node-status-1.0.0.tgz#7906a7c47a6587d03496bf74ec634abaa03f8e80" @@ -667,11 +648,6 @@ osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -"over@>= 0.0.5 < 1": - version "0.0.5" - resolved "https://registry.yarnpkg.com/over/-/over-0.0.5.tgz#f29852e70fd7e25f360e013a8ec44c82aedb5708" - integrity sha1-8phS5w/X4l82DgE6jsRMgq7bVwg= - 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" @@ -682,21 +658,16 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== +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= + 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== -pullstream@~0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/pullstream/-/pullstream-0.4.1.tgz#d6fb3bf5aed697e831150eb1002c25a3f8ae1314" - integrity sha1-1vs79a7Wl+gxFQ6xACwlo/iuExQ= - dependencies: - over ">= 0.0.5 < 1" - readable-stream "~1.0.31" - setimmediate ">= 1.0.2 < 2" - slice-stream ">= 1.0.0 < 2" - rc@^1.1.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -707,7 +678,7 @@ rc@^1.1.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -readable-stream@^2.0.6: +readable-stream@^2.0.2, readable-stream@^2.0.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== @@ -720,15 +691,18 @@ readable-stream@^2.0.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@~1.0.0, readable-stream@~1.0.31: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= +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= dependencies: + buffer-shims "^1.0.0" core-util-is "~1.0.0" inherits "~2.0.1" - isarray "0.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" string_decoder "~0.10.x" + util-deprecate "~1.0.1" rechoir@^0.6.2: version "0.6.2" @@ -789,7 +763,7 @@ set-blocking@~2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= -"setimmediate@>= 1.0.2 < 2", setimmediate@~1.0.1: +setimmediate@~1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= @@ -808,13 +782,6 @@ signal-exit@^3.0.0: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= -"slice-stream@>= 1.0.0 < 2": - version "1.0.0" - resolved "https://registry.yarnpkg.com/slice-stream/-/slice-stream-1.0.0.tgz#5b33bd66f013b1a7f86460b03d463dec39ad3ea0" - integrity sha1-WzO9ZvATsaf4ZGCwPUY97DmtPqA= - dependencies: - readable-stream "~1.0.31" - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -934,22 +901,20 @@ typescript@^3.3.3333: resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== -underscore@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.3.3.tgz#47ac53683daf832bfa952e1774417da47817ae42" - integrity sha1-R6xTaD2vgyv6lS4XdEF9pHgXrkI= - -unzip2@0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/unzip2/-/unzip2-0.2.5.tgz#4ef7a579a78c15c51f550f6a053db194149c8992" - integrity sha1-TveleaeMFcUfVQ9qBT2xlBSciZI= +unzipper@^0.8.11: + version "0.8.14" + resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.8.14.tgz#ade0524cd2fc14d11b8de258be22f9d247d3f79b" + integrity sha512-8rFtE7EP5ssOwGpN2dt1Q4njl0N1hUXJ7sSPz0leU2hRdq6+pra57z4YPBlVqm40vcgv6ooKZEAx48fMTv9x4w== dependencies: + big-integer "^1.6.17" binary "~0.3.0" - fstream "~0.1.21" - match-stream "~0.0.2" - pullstream "~0.4.0" - readable-stream "~1.0.0" - setimmediate "~1.0.1" + 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@~1.0.1: version "1.0.2" @@ -968,6 +933,16 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +xmldom@^0.1.27: + version "0.1.27" + resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" + integrity sha1-1QH5ezvbQDr4757MIFcxh6rawOk= + +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@^3.0.0, yallist@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" From aec17c4c2cce728a0ccb66b619527100c1690210 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 8 Aug 2019 17:35:30 -0700 Subject: [PATCH 193/660] Merging to prod (#336) * Typo fixes (#335) * Bump fstream from 0.1.31 to 1.0.12 (#337) Bumps [fstream](https://github.com/npm/fstream) from 0.1.31 to 1.0.12. - [Release notes](https://github.com/npm/fstream/releases) - [Commits](https://github.com/npm/fstream/compare/v0.1.31...v1.0.12) Signed-off-by: dependabot[bot] --- README.md | 3 +- yarn.lock | 207 ++++++++++++++++++++++++------------------------------ 2 files changed, 92 insertions(+), 118 deletions(-) diff --git a/README.md b/README.md index 130a67ce8..404cde3b8 100644 --- a/README.md +++ b/README.md @@ -134,9 +134,8 @@ A few style rules to observe: ## Debugging the build script -* The scripts for building/validating the snippets are under the `config` folder -- in particular, under `build.ts`. There is also a `deploy.ts` for copying the built files to their final location.) +* The scripts for building/validating the snippets are under the `config` folder -- in particular, under `build.ts`. There is also a `deploy.ts` for copying the built files to their final location. > **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! -
    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. diff --git a/yarn.lock b/yarn.lock index ae5e9ee38..85582e71d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18,17 +18,6 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@microsoft/office-js-helpers@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@microsoft/office-js-helpers/-/office-js-helpers-0.5.0.tgz#1afa7b0abe0c82b537932f947cd0674c3cd1af2b" - integrity sha1-Gvp7Cr4MgrU3ky+UfNBnTDzRrys= - dependencies: - "@types/jquery" "^2.0.39" - "@types/lodash" "^4.14.50" - "@types/office-js" "^0.0.37" - core-js "^2.4.1" - lodash "^4.17.4" - "@types/chalk@0.4.31": version "0.4.31" resolved "https://registry.yarnpkg.com/@types/chalk/-/chalk-0.4.31.tgz#a31d74241a6b1edbb973cf36d97a2896834a51f9" @@ -48,17 +37,12 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/jquery@^2.0.39": - version "2.0.53" - resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-2.0.53.tgz#89c53bc83d820e50c3b667ae2fdf4276df8b3aba" - integrity sha512-MZKPWUhp5TKkoJ/58NSq6io+CSUCOHm2b3Z6U4+r9v70kktB0JM+eRjdp6YmDHtw0kK2XB7L2K7/FMIoziHjUA== - "@types/js-yaml@^3.12.0": version "3.12.1" resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.1.tgz#5c6f4a1eabca84792fbd916f0cb40847f123c656" integrity sha512-SGGAhXLHDx+PK4YLNcNGa6goPf9XRWQNAUUbffkwVGGXIxmDKWyGGL4inzq2sPmExu431Ekb9aEMn9BkPqEYFA== -"@types/lodash@^4.14.122", "@types/lodash@^4.14.50": +"@types/lodash@^4.14.122": version "4.14.136" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.136.tgz#413e85089046b865d960c9ff1d400e04c31ab60f" integrity sha512-0GJhzBdvsW2RUccNHOBkabI8HZVdOXmXbXhuKlDEd5Vv12P7oAVGfomGp3Ne21o5D/qu1WmthlNKFaoZJJeErA== @@ -78,11 +62,6 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.18.tgz#758ec2bf26339d3cc83da22676b64777d0c2befe" integrity sha512-sMHdXLccscaxI+Hlzz58yLQue3lQyXP+6aQniDRi5oju3n0123kcjhicVGF20WF7cHiwJ2vxMbXc4skOclosoA== -"@types/office-js@^0.0.37": - version "0.0.37" - resolved "https://registry.yarnpkg.com/@types/office-js/-/office-js-0.0.37.tgz#fba3ba06ffd9f4b83de0bbe66770245cd223b0da" - integrity sha1-+6O6Bv/Z9Lg94LvmZ3AkXNIjsNo= - "@types/shelljs@^0.8.3": version "0.8.5" resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.8.5.tgz#1e507b2f6d1f893269bd3e851ec24419ef9beeea" @@ -143,6 +122,11 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= +big-integer@^1.6.17: + version "1.6.44" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.44.tgz#4ee9ae5f5839fc11ade338fea216b4513454a539" + integrity sha512-7MzElZPTyJ2fNvBkPxtFQ2fWIkVmuzw41+BZHSzpEq3ymB2MfeKp1+yXl/tS75xCx+WnyV+yb0kp+K1C3UNwmQ== + binary@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" @@ -158,6 +142,11 @@ bindings@^1.3.0: dependencies: file-uri-to-path "1.0.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" @@ -166,6 +155,16 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +buffer-indexof-polyfill@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz#a9fb806ce8145d5428510ce72f278bb363a638bf" + integrity sha1-qfuAbOgUXVQoUQznLyeLs2OmOL8= + +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= + buffers@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" @@ -264,11 +263,6 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= -core-js@^2.4.1: - version "2.6.9" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" - integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== - 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" @@ -301,6 +295,13 @@ diff@^3.2.0: resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== +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" + 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" @@ -316,15 +317,15 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= -excel@^0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/excel/-/excel-0.1.7.tgz#00a88e6fed5fc06f44a4aaf6f88f65f85a93c0bc" - integrity sha1-AKiOb+1fwG9EpKr2+I9l+FqTwLw= +excel@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/excel/-/excel-1.0.0.tgz#5ad98f460ce9f7ee48e514d3d6388e018d874d3c" + integrity sha512-Jpp9TpqqHBLi4gt5migJ2sPd4ARORDfl3UFgPlcPd7xbajpPfZx1fmbMerZzKY/ofALd3gilUSneiupLn9Ph5Q== dependencies: - libxmljs "~0.18.0" - node-promise "~0.5.3" - underscore "~1.3.3" - unzip2 "0.2.5" + libxmljs "^0.18.0" + unzipper "^0.8.11" + xmldom "^0.1.27" + xpath "0.0.27" exit-hook@^1.0.0: version "1.1.1" @@ -348,14 +349,14 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fstream@~0.1.21: - version "0.1.31" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-0.1.31.tgz#7337f058fbbbbefa8c9f561a28cab0849202c988" - integrity sha1-czfwWPu7vvqMn1YaKMqwhJICyYg= +fstream@~1.0.10: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== dependencies: - graceful-fs "~3.0.2" + graceful-fs "^4.1.2" inherits "~2.0.0" - mkdirp "0.5" + mkdirp ">=0.5 0" rimraf "2" gauge@~2.7.3: @@ -384,12 +385,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@~3.0.2: - version "3.0.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" - integrity sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg= - dependencies: - natives "^1.1.0" +graceful-fs@^4.1.2: + version "4.2.1" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.1.tgz#1c1f0c364882c868f5bff6512146328336a11b1d" + integrity sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw== has-ansi@^2.0.0: version "2.0.0" @@ -457,11 +456,6 @@ 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= -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" @@ -480,7 +474,7 @@ js-yaml@^3.12.2, js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -libxmljs@~0.18.0: +libxmljs@^0.18.0: version "0.18.8" resolved "https://registry.yarnpkg.com/libxmljs/-/libxmljs-0.18.8.tgz#b0a07512a01290b6240600d6c2bc33a3c70976d6" integrity sha1-sKB1EqASkLYkBgDWwrwzo8cJdtY= @@ -489,19 +483,16 @@ libxmljs@~0.18.0: nan "~2.10.0" node-pre-gyp "^0.9.1" -lodash@^4.17.13, lodash@^4.17.4: +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.13: version "4.17.14" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== -match-stream@~0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/match-stream/-/match-stream-0.0.2.tgz#99eb050093b34dffade421b9ac0b410a9cfa17cf" - integrity sha1-mesFAJOzTf+t5CG5rAtBCpz6F88= - dependencies: - buffers "~0.1.1" - readable-stream "~1.0.0" - minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -534,7 +525,7 @@ minizlib@^1.2.1: dependencies: minipass "^2.2.1" -mkdirp@0.5, mkdirp@^0.5.0, mkdirp@^0.5.1: +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -551,11 +542,6 @@ nan@~2.10.0: resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" integrity sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA== -natives@^1.1.0: - version "1.1.6" - resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.6.tgz#a603b4a498ab77173612b9ea1acdec4d980f00bb" - integrity sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA== - needle@^2.2.0: version "2.4.0" resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" @@ -581,11 +567,6 @@ node-pre-gyp@^0.9.1: semver "^5.3.0" tar "^4" -node-promise@~0.5.3: - version "0.5.14" - resolved "https://registry.yarnpkg.com/node-promise/-/node-promise-0.5.14.tgz#6dccbae26d2c5383d1f49ead782c7cecbbbd07dc" - integrity sha512-kbd+ABY2XRdByRVHPcBDemymfNL8+msGyKNxG/ziZnh9RjneuuGQl3/CE5UkNWxCInkJS+ztc5B31/t2kIO4Yw== - node-status@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-status/-/node-status-1.0.0.tgz#7906a7c47a6587d03496bf74ec634abaa03f8e80" @@ -667,11 +648,6 @@ osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -"over@>= 0.0.5 < 1": - version "0.0.5" - resolved "https://registry.yarnpkg.com/over/-/over-0.0.5.tgz#f29852e70fd7e25f360e013a8ec44c82aedb5708" - integrity sha1-8phS5w/X4l82DgE6jsRMgq7bVwg= - 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" @@ -682,21 +658,16 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== +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= + 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== -pullstream@~0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/pullstream/-/pullstream-0.4.1.tgz#d6fb3bf5aed697e831150eb1002c25a3f8ae1314" - integrity sha1-1vs79a7Wl+gxFQ6xACwlo/iuExQ= - dependencies: - over ">= 0.0.5 < 1" - readable-stream "~1.0.31" - setimmediate ">= 1.0.2 < 2" - slice-stream ">= 1.0.0 < 2" - rc@^1.1.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -707,7 +678,7 @@ rc@^1.1.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -readable-stream@^2.0.6: +readable-stream@^2.0.2, readable-stream@^2.0.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== @@ -720,15 +691,18 @@ readable-stream@^2.0.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@~1.0.0, readable-stream@~1.0.31: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= +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= dependencies: + buffer-shims "^1.0.0" core-util-is "~1.0.0" inherits "~2.0.1" - isarray "0.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" string_decoder "~0.10.x" + util-deprecate "~1.0.1" rechoir@^0.6.2: version "0.6.2" @@ -789,7 +763,7 @@ set-blocking@~2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= -"setimmediate@>= 1.0.2 < 2", setimmediate@~1.0.1: +setimmediate@~1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= @@ -808,13 +782,6 @@ signal-exit@^3.0.0: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= -"slice-stream@>= 1.0.0 < 2": - version "1.0.0" - resolved "https://registry.yarnpkg.com/slice-stream/-/slice-stream-1.0.0.tgz#5b33bd66f013b1a7f86460b03d463dec39ad3ea0" - integrity sha1-WzO9ZvATsaf4ZGCwPUY97DmtPqA= - dependencies: - readable-stream "~1.0.31" - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -934,22 +901,20 @@ typescript@^3.3.3333: resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== -underscore@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.3.3.tgz#47ac53683daf832bfa952e1774417da47817ae42" - integrity sha1-R6xTaD2vgyv6lS4XdEF9pHgXrkI= - -unzip2@0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/unzip2/-/unzip2-0.2.5.tgz#4ef7a579a78c15c51f550f6a053db194149c8992" - integrity sha1-TveleaeMFcUfVQ9qBT2xlBSciZI= +unzipper@^0.8.11: + version "0.8.14" + resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.8.14.tgz#ade0524cd2fc14d11b8de258be22f9d247d3f79b" + integrity sha512-8rFtE7EP5ssOwGpN2dt1Q4njl0N1hUXJ7sSPz0leU2hRdq6+pra57z4YPBlVqm40vcgv6ooKZEAx48fMTv9x4w== dependencies: + big-integer "^1.6.17" binary "~0.3.0" - fstream "~0.1.21" - match-stream "~0.0.2" - pullstream "~0.4.0" - readable-stream "~1.0.0" - setimmediate "~1.0.1" + 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@~1.0.1: version "1.0.2" @@ -968,6 +933,16 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +xmldom@^0.1.27: + version "0.1.27" + resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" + integrity sha1-1QH5ezvbQDr4757MIFcxh6rawOk= + +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@^3.0.0, yallist@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" From 70c46f5f97b00efa7c9396103a9bf7c353d24277 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Mon, 12 Aug 2019 14:14:48 -0700 Subject: [PATCH 194/660] Make requirement set version take a string (#338) --- samples/excel/99-just-for-fun/gradient.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/excel/99-just-for-fun/gradient.yaml b/samples/excel/99-just-for-fun/gradient.yaml index c7f632ee9..8438dff8d 100644 --- a/samples/excel/99-just-for-fun/gradient.yaml +++ b/samples/excel/99-just-for-fun/gradient.yaml @@ -43,7 +43,7 @@ script: let originalSize = parseInt($("#size").val() as string); const colors2D = createColorArray(originalSize); - if (Office.context.requirements.isSetSupported("ExcelApi", 1.9)) { + 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. const cellProperties: Excel.SettableCellProperties[][] = From 6f89f8a4afd6ab335d5bf34573af11da3c254622 Mon Sep 17 00:00:00 2001 From: Ricky Kirkham Date: Mon, 12 Aug 2019 15:46:11 -0700 Subject: [PATCH 195/660] remove reference to office helpers --- private-samples/excel/20-chart/chart-title-ts.yaml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/private-samples/excel/20-chart/chart-title-ts.yaml b/private-samples/excel/20-chart/chart-title-ts.yaml index 9d4fd0629..29e777b3b 100644 --- a/private-samples/excel/20-chart/chart-title-ts.yaml +++ b/private-samples/excel/20-chart/chart-title-ts.yaml @@ -88,8 +88,7 @@ script: await callback(); } catch (error) { - OfficeHelpers.UI.notify(error); - OfficeHelpers.Utilities.log(error); + console.log(error); } } language: typescript @@ -139,11 +138,9 @@ libraries: | // NPM libraries core-js@2.4.1/client/core.min.js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js jquery@3.1.1 // IntelliSense: @types/library or node_modules paths or URL to d.ts files @types/office-js @types/core-js - @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts @types/jquery@3.3.1 \ No newline at end of file From f52d30ea07f27529330ff6147aa4a49864d1b654 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Mon, 26 Aug 2019 09:47:42 -0700 Subject: [PATCH 196/660] Using a string to represent the requirement set in all snippets (#342) --- README.md | 2 +- playlists/excel.yaml | 180 +++++++++--------- playlists/word.yaml | 40 ++-- .../excel/01-basics/basic-api-call-es5.yaml | 2 +- samples/excel/01-basics/basic-api-call.yaml | 2 +- .../excel/10-chart/chart-axis-formatting.yaml | 2 +- samples/excel/10-chart/chart-axis.yaml | 2 +- .../10-chart/chart-create-several-charts.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 +- .../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 +- .../conditional-formatting-advanced.yaml | 2 +- .../conditional-formatting-basic.yaml | 2 +- ...e-set-get-and-delete-custom-xml-parts.yaml | 2 +- .../test-xml-for-unique-namespace.yaml | 2 +- .../22-data-validation/data-validation.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/events-chart-activated.yaml | 2 +- ...vents-chartcollection-added-activated.yaml | 2 +- .../30-events/events-disable-events.yaml | 2 +- .../excel/30-events/events-table-changed.yaml | 2 +- .../events-tablecollection-changed.yaml | 2 +- ...nts-workbook-and-worksheet-collection.yaml | 2 +- samples/excel/30-events/events-worksheet.yaml | 2 +- .../create-and-remove-named-item.yaml | 2 +- .../34-named-item/update-named-item.yaml | 2 +- .../pivottable-calculations.yaml | 2 +- .../pivottable-create-and-modify.yaml | 2 +- .../pivottable-filters-and-summaries.yaml | 2 +- samples/excel/42-range/cell-properties.yaml | 2 +- samples/excel/42-range/formatting.yaml | 2 +- .../42-range/insert-delete-clear-range.yaml | 2 +- samples/excel/42-range/range-areas.yaml | 2 +- samples/excel/42-range/range-copyfrom.yaml | 2 +- samples/excel/42-range/range-find.yaml | 2 +- samples/excel/42-range/range-hyperlink.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/used-range.yaml | 2 +- .../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 +- .../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 +- .../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 +- .../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/sort-data.yaml | 2 +- samples/excel/46-table/style.yaml | 2 +- .../create-get-change-delete-settings.yaml | 2 +- .../excel/50-workbook/create-workbook.yaml | 2 +- .../excel/50-workbook/data-protection.yaml | 2 +- .../50-workbook/workbook-get-active-cell.yaml | 2 +- .../excel/54-worksheet/active-worksheet.yaml | 2 +- .../add-delete-rename-move-worksheet.yaml | 2 +- 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/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 +- .../word/01-basics/basic-api-call-es5.yaml | 2 +- samples/word/01-basics/basic-api-call.yaml | 2 +- .../insert-and-change-content-controls.yaml | 2 +- .../15-images/insert-and-get-pictures.yaml | 2 +- samples/word/20-lists/insert-list.yaml | 2 +- .../get-paragraph-on-insertion-point.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 +- .../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/scroll-to-range.yaml | 2 +- .../split-words-of-first-paragraph.yaml | 2 +- samples/word/40-tables/table-cell-access.yaml | 2 +- samples/word/90-scenarios/doc-assembly.yaml | 2 +- .../90-scenarios/multiple-property-set.yaml | 2 +- samples/word/default.yaml | 2 +- 116 files changed, 224 insertions(+), 224 deletions(-) diff --git a/README.md b/README.md index 404cde3b8..ae3d4d5ca 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ A collection of code snippets built with [Script Lab](//github.com/OfficeDev/scr ```yaml api_set: - ExcelApi: 1.5 + ExcelApi: '1.5' ``` 5. Check the name and description property values, also near the top of the file, and edit as needed. diff --git a/playlists/excel.yaml b/playlists/excel.yaml index b401efb19..8231fefe5 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -6,7 +6,7 @@ https://raw.githubusercontent.com////samples/excel/01-basics/basic-api-call.yaml group: Basics api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' - id: excel-basics-basic-api-call-es5 name: Basic API call (JavaScript) fileName: basic-api-call-es5.yaml @@ -15,7 +15,7 @@ https://raw.githubusercontent.com////samples/excel/01-basics/basic-api-call-es5.yaml group: Basics api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' - id: excel-basics-basic-common-api-call name: Basic API call (Office 2013) fileName: basic-common-api-call.yaml @@ -35,7 +35,7 @@ https://raw.githubusercontent.com////samples/excel/10-chart/chart-axis.yaml group: Chart api_set: - ExcelAPI: 1.7 + ExcelApi: '1.7' - id: excel-chart-axis-formatting name: Axis formatting fileName: chart-axis-formatting.yaml @@ -44,7 +44,7 @@ https://raw.githubusercontent.com////samples/excel/10-chart/chart-axis-formatting.yaml group: Chart api_set: - ExcelAPI: 1.8 + ExcelApi: '1.8' - id: excel-chart-create-several-charts name: Create charts fileName: chart-create-several-charts.yaml @@ -55,7 +55,7 @@ https://raw.githubusercontent.com////samples/excel/10-chart/chart-create-several-charts.yaml group: Chart api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-chart-create-doughnut-chart name: Doughnut chart fileName: create-doughnut-chart.yaml @@ -64,7 +64,7 @@ https://raw.githubusercontent.com////samples/excel/10-chart/create-doughnut-chart.yaml group: Chart api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' - id: excel-chart-formatting name: Formatting fileName: chart-formatting.yaml @@ -73,7 +73,7 @@ https://raw.githubusercontent.com////samples/excel/10-chart/chart-formatting.yaml group: Chart api_set: - ExcelAPI: 1.8 + ExcelApi: '1.8' - id: excel-chart-legend name: Legend fileName: chart-legend.yaml @@ -82,7 +82,7 @@ https://raw.githubusercontent.com////samples/excel/10-chart/chart-legend.yaml group: Chart api_set: - ExcelAPI: 1.7 + ExcelApi: '1.7' - id: excel-chart-point name: Points fileName: chart-point.yaml @@ -91,7 +91,7 @@ https://raw.githubusercontent.com////samples/excel/10-chart/chart-point.yaml group: Chart api_set: - ExcelAPI: 1.7 + ExcelApi: '1.7' - id: excel-chart-series name: Series fileName: chart-series.yaml @@ -100,7 +100,7 @@ https://raw.githubusercontent.com////samples/excel/10-chart/chart-series.yaml group: Chart api_set: - ExcelAPI: 1.7 + ExcelApi: '1.7' - id: excel-chart-series-markers name: Series markers fileName: chart-series-markers.yaml @@ -109,7 +109,7 @@ https://raw.githubusercontent.com////samples/excel/10-chart/chart-series-markers.yaml group: Chart api_set: - ExcelAPI: 1.7 + ExcelApi: '1.7' - id: excel-chart-series-plotorder name: Series plot order fileName: chart-series-plotorder.yaml @@ -118,7 +118,7 @@ https://raw.githubusercontent.com////samples/excel/10-chart/chart-series-plotorder.yaml group: Chart api_set: - ExcelAPI: 1.7 + ExcelApi: '1.7' - id: excel-chart-title-format name: Title format fileName: chart-title-format.yaml @@ -127,7 +127,7 @@ https://raw.githubusercontent.com////samples/excel/10-chart/chart-title-format.yaml group: Chart api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' - id: excel-chart-trendlines name: Trendlines fileName: chart-trendlines.yaml @@ -136,7 +136,7 @@ https://raw.githubusercontent.com////samples/excel/10-chart/chart-trendlines.yaml group: Chart api_set: - ExcelAPI: 1.7 + ExcelApi: '1.7' - id: excel-range-conditional-formatting-basic name: Basic conditional formatting fileName: conditional-formatting-basic.yaml @@ -145,7 +145,7 @@ https://raw.githubusercontent.com////samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml group: Conditional Formatting api_set: - ExcelApi: 1.6 + ExcelApi: '1.6' - id: excel-range-conditional-formatting-advanced name: Advanced conditional formatting fileName: conditional-formatting-advanced.yaml @@ -154,7 +154,7 @@ https://raw.githubusercontent.com////samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml group: Conditional Formatting api_set: - ExcelApi: 1.6 + ExcelApi: '1.6' - id: excel-custom-functions-basic name: Basic custom function fileName: basic-function.yaml @@ -190,7 +190,7 @@ https://raw.githubusercontent.com////samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml group: Custom XML Parts api_set: - ExcelApi: 1.5 + 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 @@ -199,7 +199,7 @@ https://raw.githubusercontent.com////samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml group: Custom XML Parts api_set: - ExcelApi: 1.5 + ExcelApi: '1.5' - id: excel-data-validation name: Data validation fileName: data-validation.yaml @@ -210,7 +210,7 @@ https://raw.githubusercontent.com////samples/excel/22-data-validation/data-validation.yaml group: Data Validation api_set: - ExcelApi: 1.8 + ExcelApi: '1.8' - id: excel-document-get-file-in-slices-async name: Get file using slicing fileName: get-file-in-slices-async.yaml @@ -221,7 +221,7 @@ https://raw.githubusercontent.com////samples/excel/26-document/get-file-in-slices-async.yaml group: Document api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-document-properties name: Properties fileName: properties.yaml @@ -230,7 +230,7 @@ https://raw.githubusercontent.com////samples/excel/26-document/properties.yaml group: Document api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' - id: excel-events-chartcollection-added-activated name: Chart collection events fileName: events-chartcollection-added-activated.yaml @@ -242,7 +242,7 @@ https://raw.githubusercontent.com////samples/excel/30-events/events-chartcollection-added-activated.yaml group: Events api_set: - ExcelApi: 1.8 + ExcelApi: '1.8' - id: excel-events-chart-activated name: Chart events fileName: events-chart-activated.yaml @@ -253,7 +253,7 @@ https://raw.githubusercontent.com////samples/excel/30-events/events-chart-activated.yaml group: Events api_set: - ExcelApi: 1.8 + ExcelApi: '1.8' - id: excel-events-data-changed name: Data change event fileName: data-changed.yaml @@ -262,7 +262,7 @@ https://raw.githubusercontent.com////samples/excel/30-events/data-changed.yaml group: Events api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-data-change-event-details name: Data change event details fileName: data-change-event-details.yaml @@ -271,7 +271,7 @@ https://raw.githubusercontent.com////samples/excel/30-events/data-change-event-details.yaml group: Events api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' - id: excel-events-disable-events name: Enable and disable events fileName: events-disable-events.yaml @@ -280,7 +280,7 @@ https://raw.githubusercontent.com////samples/excel/30-events/events-disable-events.yaml group: Events api_set: - ExcelAPI: 1.8 + ExcelApi: '1.8' - id: excel-events-table-changed name: Table events fileName: events-table-changed.yaml @@ -289,7 +289,7 @@ https://raw.githubusercontent.com////samples/excel/30-events/events-table-changed.yaml group: Events api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' - id: excel-events-tablecollection-changed name: Table collection events fileName: events-tablecollection-changed.yaml @@ -298,7 +298,7 @@ https://raw.githubusercontent.com////samples/excel/30-events/events-tablecollection-changed.yaml group: Events api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' - id: excel-events-workbook-and-worksheet-collection name: Workbook and worksheet collection events fileName: events-workbook-and-worksheet-collection.yaml @@ -309,7 +309,7 @@ https://raw.githubusercontent.com////samples/excel/30-events/events-workbook-and-worksheet-collection.yaml group: Events api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-events-worksheet name: Worksheet events fileName: events-worksheet.yaml @@ -320,7 +320,7 @@ https://raw.githubusercontent.com////samples/excel/30-events/events-worksheet.yaml group: Events api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-named-item-create-and-remove-named-item name: 'Create, access, and remove' fileName: create-and-remove-named-item.yaml @@ -329,7 +329,7 @@ https://raw.githubusercontent.com////samples/excel/34-named-item/create-and-remove-named-item.yaml group: Named Item api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-update-named-item name: Update fileName: update-named-item.yaml @@ -338,7 +338,7 @@ https://raw.githubusercontent.com////samples/excel/34-named-item/update-named-item.yaml group: Named Item api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' - id: excel-pivottable-calculations name: Calculations fileName: pivottable-calculations.yaml @@ -347,7 +347,7 @@ https://raw.githubusercontent.com////samples/excel/38-pivottable/pivottable-calculations.yaml group: PivotTable api_set: - ExcelApi: 1.8 + ExcelApi: '1.8' - id: excel-pivottable-create-and-modify name: Create and modify fileName: pivottable-create-and-modify.yaml @@ -356,7 +356,7 @@ https://raw.githubusercontent.com////samples/excel/38-pivottable/pivottable-create-and-modify.yaml group: PivotTable api_set: - ExcelApi: 1.8 + ExcelApi: '1.8' - id: excel-pivottable-filters-and-summaries name: Filters and summaries fileName: pivottable-filters-and-summaries.yaml @@ -365,7 +365,7 @@ https://raw.githubusercontent.com////samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml group: PivotTable api_set: - ExcelApi: 1.8 + ExcelApi: '1.8' - id: excel-range-copyfrom name: Copy and paste ranges fileName: range-copyfrom.yaml @@ -374,7 +374,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/range-copyfrom.yaml group: Range api_set: - ExcelAPI: 1.9 + ExcelApi: '1.9' - id: excel-range-areas name: Discontiguous ranges (RangeAreas) and special cells fileName: range-areas.yaml @@ -386,7 +386,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/range-areas.yaml group: Range api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' - id: excel-range-find name: Find text matches within a range fileName: range-find.yaml @@ -395,7 +395,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/range-find.yaml group: Range api_set: - ExcelAPI: 1.9 + ExcelApi: '1.9' - id: excel-range-formatting name: Formatting fileName: formatting.yaml @@ -404,7 +404,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/formatting.yaml group: Range api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-range-cell-properties name: Get and set cell properties fileName: cell-properties.yaml @@ -413,7 +413,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/cell-properties.yaml group: Range api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' - id: excel-range-hyperlink name: Hyperlinks fileName: range-hyperlink.yaml @@ -422,7 +422,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/range-hyperlink.yaml group: Range api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' - id: excel-range-insert-delete-and-clear-range name: 'Insert, delete, and clear' fileName: insert-delete-clear-range.yaml @@ -431,7 +431,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/insert-delete-clear-range.yaml group: Range api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-range-range-relationships name: Range relationships fileName: range-relationships.yaml @@ -442,7 +442,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/range-relationships.yaml group: Range api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-range-remove-duplicates name: Remove duplicates fileName: range-remove-duplicates.yaml @@ -451,7 +451,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/range-remove-duplicates.yaml group: Range api_set: - ExcelAPI: 1.9 + ExcelApi: '1.9' - id: excel-range-selected-range name: Selected range fileName: selected-range.yaml @@ -460,7 +460,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/selected-range.yaml group: Range api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' - id: excel-range-text-orientation name: Text orientation fileName: range-text-orientation.yaml @@ -469,7 +469,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/range-text-orientation.yaml group: Range api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' - id: excel-range-used-range name: Used range fileName: used-range.yaml @@ -480,7 +480,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/used-range.yaml group: Range api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-range-values-and-formulas name: Values and formulas fileName: set-get-values.yaml @@ -489,7 +489,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/set-get-values.yaml group: Range api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-shape-create-and-delete name: Create and delete geometric shapes fileName: shape-create-and-delete.yaml @@ -500,7 +500,7 @@ https://raw.githubusercontent.com////samples/excel/44-shape/shape-create-and-delete.yaml group: Shape api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' - id: excel-shape-images name: Image shapes fileName: shape-images.yaml @@ -509,7 +509,7 @@ https://raw.githubusercontent.com////samples/excel/44-shape/shape-images.yaml group: Shape api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' - id: excel-shape-lines name: Lines fileName: shape-lines.yaml @@ -518,7 +518,7 @@ https://raw.githubusercontent.com////samples/excel/44-shape/shape-lines.yaml group: Shape api_set: - ExcelAPI: 1.9 + ExcelApi: '1.9' - id: excel-shape-move-and-order name: Move and order shapes fileName: shape-move-and-order.yaml @@ -527,7 +527,7 @@ https://raw.githubusercontent.com////samples/excel/44-shape/shape-move-and-order.yaml group: Shape api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' - id: excel-shape-groups name: Shape groups fileName: shape-groups.yaml @@ -536,7 +536,7 @@ https://raw.githubusercontent.com////samples/excel/44-shape/shape-groups.yaml group: Shape api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' - id: excel-shape-textboxes name: Textboxes fileName: shape-textboxes.yaml @@ -545,7 +545,7 @@ https://raw.githubusercontent.com////samples/excel/44-shape/shape-textboxes.yaml group: Shape api_set: - ExcelAPI: 1.9 + 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 @@ -554,7 +554,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/add-rows-and-columns-to-a-table.yaml group: Table api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-table-convert-range-to-table name: Convert a range fileName: convert-range-to-table.yaml @@ -563,7 +563,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/convert-range-to-table.yaml group: Table api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-table-create-table name: Create a table fileName: create-table.yaml @@ -572,7 +572,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/create-table.yaml group: Table api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-table-filter-data name: Filter data fileName: filter-data.yaml @@ -581,7 +581,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/filter-data.yaml group: Table api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-table-formatting name: Formatting fileName: formatting.yaml @@ -590,7 +590,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/formatting.yaml group: Table api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-table-get-data-from-table name: Get data fileName: get-data-from-table.yaml @@ -599,7 +599,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/get-data-from-table.yaml group: Table api_set: - ExcelApi: 1.4 + 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 @@ -608,7 +608,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml group: Table api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-table-import-json-data name: Import JSON data fileName: import-json-data.yaml @@ -617,7 +617,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/import-json-data.yaml group: Table api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-table-sort-data name: Sort data fileName: sort-data.yaml @@ -626,7 +626,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/sort-data.yaml group: Table api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-table-style name: Style fileName: style.yaml @@ -637,7 +637,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/style.yaml group: Table api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' - id: excel-workbook-get-active-cell name: Active cell fileName: workbook-get-active-cell.yaml @@ -646,7 +646,7 @@ https://raw.githubusercontent.com////samples/excel/50-workbook/workbook-get-active-cell.yaml group: Workbook api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' - id: excel-settings-create-get-change-delete-settings name: Add-in settings fileName: create-get-change-delete-settings.yaml @@ -657,7 +657,7 @@ https://raw.githubusercontent.com////samples/excel/50-workbook/create-get-change-delete-settings.yaml group: Workbook api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-workbook-create-workbook name: Create workbook fileName: create-workbook.yaml @@ -668,7 +668,7 @@ https://raw.githubusercontent.com////samples/excel/50-workbook/create-workbook.yaml group: Workbook api_set: - ExcelApi: 1.8 + ExcelApi: '1.8' - id: excel-workbook-data-protection name: Data protection fileName: data-protection.yaml @@ -677,7 +677,7 @@ https://raw.githubusercontent.com////samples/excel/50-workbook/data-protection.yaml group: Workbook api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' - id: excel-worksheet-active-worksheet name: Active worksheet fileName: active-worksheet.yaml @@ -686,7 +686,7 @@ https://raw.githubusercontent.com////samples/excel/54-worksheet/active-worksheet.yaml group: Worksheet api_set: - ExcelApi: 1.1 + 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 @@ -695,7 +695,7 @@ https://raw.githubusercontent.com////samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml group: Worksheet api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' - id: excel-worksheet-auto-filter name: AutoFilter fileName: worksheet-auto-filter.yaml @@ -704,7 +704,7 @@ https://raw.githubusercontent.com////samples/excel/54-worksheet/worksheet-auto-filter.yaml group: Worksheet api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' - id: excel-worksheet-copy name: Copy worksheet fileName: worksheet-copy.yaml @@ -713,7 +713,7 @@ https://raw.githubusercontent.com////samples/excel/54-worksheet/worksheet-copy.yaml group: Worksheet api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' - id: excel-worksheet-find-all name: Find text matches within a worksheet fileName: worksheet-find-all.yaml @@ -722,7 +722,7 @@ https://raw.githubusercontent.com////samples/excel/54-worksheet/worksheet-find-all.yaml group: Worksheet api_set: - ExcelAPI: 1.9 + ExcelApi: '1.9' - id: excel-worksheet-freeze-panes name: Frozen panes fileName: worksheet-freeze-panes.yaml @@ -733,7 +733,7 @@ https://raw.githubusercontent.com////samples/excel/54-worksheet/worksheet-freeze-panes.yaml group: Worksheet api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' - id: excel-worksheet-worksheet-range-cell name: Get range or cell fileName: worksheet-range-cell.yaml @@ -744,7 +744,7 @@ https://raw.githubusercontent.com////samples/excel/54-worksheet/worksheet-range-cell.yaml group: Worksheet api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-worksheet-gridlines name: Gridlines fileName: gridlines.yaml @@ -753,7 +753,7 @@ https://raw.githubusercontent.com////samples/excel/54-worksheet/gridlines.yaml group: Worksheet api_set: - ExcelAPI: 1.8 + ExcelApi: '1.8' - id: excel-worksheet-list-worksheets name: List worksheets fileName: list-worksheets.yaml @@ -762,7 +762,7 @@ https://raw.githubusercontent.com////samples/excel/54-worksheet/list-worksheets.yaml group: Worksheet api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' - id: excel-worksheet-page-layout name: Page layout and print settings fileName: worksheet-page-layout.yaml @@ -771,7 +771,7 @@ https://raw.githubusercontent.com////samples/excel/54-worksheet/worksheet-page-layout.yaml group: Worksheet api_set: - ExcelAPI: 1.9 + ExcelApi: '1.9' - id: excel-worksheet-reference-worksheets-by-relative-position name: Reference worksheets by relative position fileName: reference-worksheets-by-relative-position.yaml @@ -780,7 +780,7 @@ https://raw.githubusercontent.com////samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml group: Worksheet api_set: - ExcelApi: 1.5 + ExcelApi: '1.5' - id: excel-worksheet-tab-color name: Tab color fileName: tab-color.yaml @@ -789,7 +789,7 @@ https://raw.githubusercontent.com////samples/excel/54-worksheet/tab-color.yaml group: Worksheet api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' - id: excel-worksheet-visibility name: Visibility fileName: worksheet-visibility.yaml @@ -798,7 +798,7 @@ https://raw.githubusercontent.com////samples/excel/54-worksheet/worksheet-visibility.yaml group: Worksheet api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' - id: excel-comment name: Comments fileName: comment.yaml @@ -854,7 +854,7 @@ https://raw.githubusercontent.com////samples/excel/90-scenarios/performance-optimization.yaml group: Scenarios api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' - id: excel-scenarios-report-generation name: Report generation fileName: report-generation.yaml @@ -865,7 +865,7 @@ https://raw.githubusercontent.com////samples/excel/90-scenarios/report-generation.yaml group: Scenarios api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' - id: excel-scenarios-multiple-property-set name: Set multiple properties fileName: multiple-property-set.yaml @@ -874,7 +874,7 @@ https://raw.githubusercontent.com////samples/excel/90-scenarios/multiple-property-set.yaml group: Scenarios api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-scenarios-working-with-dates name: Working with dates fileName: working-with-dates.yaml @@ -885,7 +885,7 @@ https://raw.githubusercontent.com////samples/excel/90-scenarios/working-with-dates.yaml group: Scenarios api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-just-for-fun-patterns name: Colorful Patterns fileName: patterns.yaml @@ -896,7 +896,7 @@ https://raw.githubusercontent.com////samples/excel/99-just-for-fun/patterns.yaml group: Just For Fun api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-just-for-fun-gradient name: Gradient fileName: gradient.yaml @@ -907,7 +907,7 @@ https://raw.githubusercontent.com////samples/excel/99-just-for-fun/gradient.yaml group: Just For Fun api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-just-for-fun-path-finder-game name: Path finder fileName: path-finder-game.yaml @@ -918,7 +918,7 @@ https://raw.githubusercontent.com////samples/excel/99-just-for-fun/path-finder-game.yaml group: Just For Fun api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-just-for-fun-tetrominos name: Tetromino stacking fileName: tetrominos.yaml @@ -927,7 +927,7 @@ https://raw.githubusercontent.com////samples/excel/99-just-for-fun/tetrominos.yaml group: Just For Fun api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' - id: excel-just-for-fun-color-wheel name: Wheel of colors fileName: color-wheel.yaml @@ -938,4 +938,4 @@ https://raw.githubusercontent.com////samples/excel/99-just-for-fun/color-wheel.yaml group: Just For Fun api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' diff --git a/playlists/word.yaml b/playlists/word.yaml index fe0dc5fb1..2d9498bc1 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -6,7 +6,7 @@ https://raw.githubusercontent.com////samples/word/01-basics/basic-api-call.yaml group: Basics api_set: - WordApi: 1.1 + WordApi: '1.1' - id: word-basics-api-call-es5 name: Basic API call (JavaScript) fileName: basic-api-call-es5.yaml @@ -15,7 +15,7 @@ https://raw.githubusercontent.com////samples/word/01-basics/basic-api-call-es5.yaml group: Basics api_set: - WordApi: 1.1 + WordApi: '1.1' - id: word-basics-basic-common-api-call name: Basic API call (Office 2013) fileName: basic-common-api-call.yaml @@ -35,7 +35,7 @@ https://raw.githubusercontent.com////samples/word/10-content-controls/insert-and-change-content-controls.yaml group: Content Controls api_set: - WordApi: 1.1 + WordApi: '1.1' - id: word-images-insert-and-get-pictures name: Use inline pictures fileName: insert-and-get-pictures.yaml @@ -44,7 +44,7 @@ https://raw.githubusercontent.com////samples/word/15-images/insert-and-get-pictures.yaml group: Images api_set: - WordApi: 1.1 + WordApi: '1.1' - id: word-lists-insert-list name: Create a list fileName: insert-list.yaml @@ -53,7 +53,7 @@ https://raw.githubusercontent.com////samples/word/20-lists/insert-list.yaml group: Lists api_set: - WordApi: 1.3 + WordApi: '1.3' - id: word-paragraph-get-paragraph-on-insertion-point name: Get paragraph from insertion point fileName: get-paragraph-on-insertion-point.yaml @@ -62,7 +62,7 @@ https://raw.githubusercontent.com////samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml group: Paragraph api_set: - WordApi: 1.1 + WordApi: '1.1' - id: word-paragraph-insert-line-and-page-breaks name: Insert breaks fileName: insert-line-and-page-breaks.yaml @@ -71,7 +71,7 @@ https://raw.githubusercontent.com////samples/word/25-paragraph/insert-line-and-page-breaks.yaml group: Paragraph api_set: - WordApi: 1.2 + WordApi: '1.2' - id: word-paragraph-insert-in-different-locations name: Insert content at different locations fileName: insert-in-different-locations.yaml @@ -80,7 +80,7 @@ https://raw.githubusercontent.com////samples/word/25-paragraph/insert-in-different-locations.yaml group: Paragraph api_set: - WordApi: 1.2 + WordApi: '1.2' - id: word-paragraph-insert-formatted-text name: Insert formatted text fileName: insert-formatted-text.yaml @@ -89,7 +89,7 @@ https://raw.githubusercontent.com////samples/word/25-paragraph/insert-formatted-text.yaml group: Paragraph api_set: - WordApi: 1.1 + WordApi: '1.1' - id: word-paragraph-insert-header-and-footer name: Insert a header and footer fileName: insert-header-and-footer.yaml @@ -98,7 +98,7 @@ https://raw.githubusercontent.com////samples/word/25-paragraph/insert-header-and-footer.yaml group: Paragraph api_set: - WordApi: 1.1 + WordApi: '1.1' - id: word-paragraph-paragraph-properties name: Paragraph properties fileName: paragraph-properties.yaml @@ -107,7 +107,7 @@ https://raw.githubusercontent.com////samples/word/25-paragraph/paragraph-properties.yaml group: Paragraph api_set: - WordApi: 1.2 + WordApi: '1.2' - id: word-paragraph-search name: Search fileName: search.yaml @@ -116,7 +116,7 @@ https://raw.githubusercontent.com////samples/word/25-paragraph/search.yaml group: Paragraph api_set: - WordApi: 1.1 + WordApi: '1.1' - id: word-paragraph-get-word-count name: Get word count fileName: get-word-count.yaml @@ -125,7 +125,7 @@ https://raw.githubusercontent.com////samples/word/25-paragraph/get-word-count.yaml group: Paragraph api_set: - WordApi: 1.1 + WordApi: '1.1' - id: word-properties-get-built-in-properties name: Built-in document properties fileName: get-built-in-properties.yaml @@ -134,7 +134,7 @@ https://raw.githubusercontent.com////samples/word/30-properties/get-built-in-properties.yaml group: Properties api_set: - WordApi: 1.1 + WordApi: '1.1' - id: word-properties-read-write-custom-document-properties name: Custom document properties fileName: read-write-custom-document-properties.yaml @@ -143,7 +143,7 @@ https://raw.githubusercontent.com////samples/word/30-properties/read-write-custom-document-properties.yaml group: Properties api_set: - WordApi: 1.3 + WordApi: '1.3' - id: word-ranges-scroll-to-range name: Scroll to a range fileName: scroll-to-range.yaml @@ -152,7 +152,7 @@ https://raw.githubusercontent.com////samples/word/35-ranges/scroll-to-range.yaml group: Ranges api_set: - WordApi: 1.2 + WordApi: '1.2' - id: word-ranges-split-words-of-first-paragraph name: Split a paragraph into ranges fileName: split-words-of-first-paragraph.yaml @@ -163,7 +163,7 @@ https://raw.githubusercontent.com////samples/word/35-ranges/split-words-of-first-paragraph.yaml group: Ranges api_set: - WordApi: 1.3 + WordApi: '1.3' - id: word-tables-table-cell-access name: Create and access a table fileName: table-cell-access.yaml @@ -172,7 +172,7 @@ https://raw.githubusercontent.com////samples/word/40-tables/table-cell-access.yaml group: Tables api_set: - WordApi: 1.3 + WordApi: '1.3' - id: word-scenarios-doc-assembly name: Document assembly fileName: doc-assembly.yaml @@ -181,7 +181,7 @@ https://raw.githubusercontent.com////samples/word/90-scenarios/doc-assembly.yaml group: Scenarios api_set: - WordApi: 1.1 + WordApi: '1.1' - id: word-scenarios-multiple-property-set name: Set multiple properties at once fileName: multiple-property-set.yaml @@ -190,4 +190,4 @@ https://raw.githubusercontent.com////samples/word/90-scenarios/multiple-property-set.yaml group: Scenarios api_set: - WordApi: 1.3 + WordApi: '1.3' diff --git a/samples/excel/01-basics/basic-api-call-es5.yaml b/samples/excel/01-basics/basic-api-call-es5.yaml index 799a3e4de..949160c1a 100644 --- a/samples/excel/01-basics/basic-api-call-es5.yaml +++ b/samples/excel/01-basics/basic-api-call-es5.yaml @@ -5,7 +5,7 @@ description: Performs a basic Excel API call using plain JavaScript & Promises. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' script: content: | $("#run").click(() => tryCatch(run)); diff --git a/samples/excel/01-basics/basic-api-call.yaml b/samples/excel/01-basics/basic-api-call.yaml index 23852b546..ff3e77392 100644 --- a/samples/excel/01-basics/basic-api-call.yaml +++ b/samples/excel/01-basics/basic-api-call.yaml @@ -5,7 +5,7 @@ description: Performs a basic Excel API call using TypeScript. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' script: content: | $("#run").click(() => tryCatch(run)); diff --git a/samples/excel/10-chart/chart-axis-formatting.yaml b/samples/excel/10-chart/chart-axis-formatting.yaml index eea0c6042..36cadc25a 100644 --- a/samples/excel/10-chart/chart-axis-formatting.yaml +++ b/samples/excel/10-chart/chart-axis-formatting.yaml @@ -4,7 +4,7 @@ name: Axis formatting description: Formats the vertical and horizontal axes in a chart. host: EXCEL api_set: - ExcelAPI: 1.8 + ExcelApi: '1.8' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/10-chart/chart-axis.yaml b/samples/excel/10-chart/chart-axis.yaml index efd14e6dc..f37d4ee45 100644 --- a/samples/excel/10-chart/chart-axis.yaml +++ b/samples/excel/10-chart/chart-axis.yaml @@ -4,7 +4,7 @@ name: Axis details description: 'Gets, sets, and removes axis unit, label, and title in a chart.' host: EXCEL api_set: - ExcelAPI: 1.7 + ExcelApi: '1.7' script: content: |- $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/10-chart/chart-create-several-charts.yaml b/samples/excel/10-chart/chart-create-several-charts.yaml index f0626b591..b5b7d7537 100644 --- a/samples/excel/10-chart/chart-create-several-charts.yaml +++ b/samples/excel/10-chart/chart-create-several-charts.yaml @@ -5,7 +5,7 @@ description: 'Creates column-clustered, line, XY-scatter, area, radar, pie, 3D, author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/10-chart/chart-formatting.yaml b/samples/excel/10-chart/chart-formatting.yaml index a3a8d6f4e..43858df03 100644 --- a/samples/excel/10-chart/chart-formatting.yaml +++ b/samples/excel/10-chart/chart-formatting.yaml @@ -4,7 +4,7 @@ name: Formatting description: Formats labels and lines of a slope chart. host: EXCEL api_set: - ExcelAPI: 1.8 + ExcelApi: '1.8' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/10-chart/chart-legend.yaml b/samples/excel/10-chart/chart-legend.yaml index 68b189b2f..b00d524f8 100644 --- a/samples/excel/10-chart/chart-legend.yaml +++ b/samples/excel/10-chart/chart-legend.yaml @@ -4,7 +4,7 @@ name: Legend description: Formats the legend's font. host: EXCEL api_set: - ExcelAPI: 1.7 + ExcelApi: '1.7' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/10-chart/chart-point.yaml b/samples/excel/10-chart/chart-point.yaml index dc770e43e..267698091 100644 --- a/samples/excel/10-chart/chart-point.yaml +++ b/samples/excel/10-chart/chart-point.yaml @@ -4,7 +4,7 @@ name: Points description: Sets the color of a point on the chart. host: EXCEL api_set: - ExcelAPI: 1.7 + ExcelApi: '1.7' script: content: |+ $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/10-chart/chart-series-markers.yaml b/samples/excel/10-chart/chart-series-markers.yaml index 610119126..0669879b9 100644 --- a/samples/excel/10-chart/chart-series-markers.yaml +++ b/samples/excel/10-chart/chart-series-markers.yaml @@ -4,7 +4,7 @@ name: Series markers description: Sets the chart series marker properties. host: EXCEL api_set: - ExcelAPI: 1.7 + ExcelApi: '1.7' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/10-chart/chart-series-plotorder.yaml b/samples/excel/10-chart/chart-series-plotorder.yaml index fc343b468..a26d2477f 100644 --- a/samples/excel/10-chart/chart-series-plotorder.yaml +++ b/samples/excel/10-chart/chart-series-plotorder.yaml @@ -4,7 +4,7 @@ name: Series plot order description: Orders the plotting of series in a chart. host: EXCEL api_set: - ExcelAPI: 1.7 + ExcelApi: '1.7' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/10-chart/chart-series.yaml b/samples/excel/10-chart/chart-series.yaml index 4378f8118..6cdf4cda5 100644 --- a/samples/excel/10-chart/chart-series.yaml +++ b/samples/excel/10-chart/chart-series.yaml @@ -4,7 +4,7 @@ name: Series description: Adds and deletes series in a chart. host: EXCEL api_set: - ExcelAPI: 1.7 + ExcelApi: '1.7' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/10-chart/chart-title-format.yaml b/samples/excel/10-chart/chart-title-format.yaml index 7978eae50..666104ed5 100644 --- a/samples/excel/10-chart/chart-title-format.yaml +++ b/samples/excel/10-chart/chart-title-format.yaml @@ -4,7 +4,7 @@ name: Title format description: Adjust a chart title's format. host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/10-chart/chart-trendlines.yaml b/samples/excel/10-chart/chart-trendlines.yaml index 8f8586089..bda6c33bd 100644 --- a/samples/excel/10-chart/chart-trendlines.yaml +++ b/samples/excel/10-chart/chart-trendlines.yaml @@ -4,7 +4,7 @@ name: Trendlines description: 'Adds, gets, and formats trendlines in a chart.' host: EXCEL api_set: - ExcelAPI: 1.7 + ExcelApi: '1.7' script: content: |+ $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/10-chart/create-doughnut-chart.yaml b/samples/excel/10-chart/create-doughnut-chart.yaml index b2200906d..e0011a6e1 100644 --- a/samples/excel/10-chart/create-doughnut-chart.yaml +++ b/samples/excel/10-chart/create-doughnut-chart.yaml @@ -5,7 +5,7 @@ description: Creates a doughnut chart and adjusts its size. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml index 31403d225..07bcbf4c2 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml @@ -4,7 +4,7 @@ name: Advanced conditional formatting description: Applies more than one conditional format on the same range. host: EXCEL api_set: - ExcelApi: 1.6 + ExcelApi: '1.6' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml index 3208a7b9b..365a9963e 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -4,7 +4,7 @@ name: Basic conditional formatting description: Applies common types of conditional formatting to ranges. host: EXCEL api_set: - ExcelApi: 1.6 + ExcelApi: '1.6' script: content: |- $("#setup").click(() => tryCatch(setup)); 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 f5862b6c4..906c96685 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 @@ -5,7 +5,7 @@ description: 'Creates, sets, gets, and deletes a custom XML part.' author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.5 + ExcelApi: '1.5' script: content: | $("#create-custom-xml-part").click(() => tryCatch(createCustomXmlPart)); 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 31b224f9d..c42b996bd 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 @@ -5,7 +5,7 @@ description: Tests to see if there is only one XML part for a specified namespac author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.5 + ExcelApi: '1.5' script: content: | $("#create-custom-xml-part").click(() => tryCatch(createCustomXmlPart)); diff --git a/samples/excel/22-data-validation/data-validation.yaml b/samples/excel/22-data-validation/data-validation.yaml index 88f96ae7d..cabcc1092 100644 --- a/samples/excel/22-data-validation/data-validation.yaml +++ b/samples/excel/22-data-validation/data-validation.yaml @@ -4,7 +4,7 @@ name: Data validation 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 + ExcelApi: '1.8' script: content: | $("#setup").click(() => tryCatch(setup)); 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 31251d395..28c0c4e7f 100644 --- a/samples/excel/26-document/get-file-in-slices-async.yaml +++ b/samples/excel/26-document/get-file-in-slices-async.yaml @@ -4,7 +4,7 @@ name: Get file using slicing description: Uses slicing to get the byte array and base64-encoded string that represent the current document. host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: |- $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/26-document/properties.yaml b/samples/excel/26-document/properties.yaml index 67e36b50e..58cbe430d 100644 --- a/samples/excel/26-document/properties.yaml +++ b/samples/excel/26-document/properties.yaml @@ -4,7 +4,7 @@ name: Properties description: Gets and sets document properties. host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' script: content: | $("#set-doc-properties").click(() => tryCatch(setDocProperties)); diff --git a/samples/excel/30-events/data-change-event-details.yaml b/samples/excel/30-events/data-change-event-details.yaml index 1d03b8b23..1342f3622 100644 --- a/samples/excel/30-events/data-change-event-details.yaml +++ b/samples/excel/30-events/data-change-event-details.yaml @@ -4,7 +4,7 @@ name: Data change event details description: Uses the onChanged event of a table to determine the specifics of changes. host: EXCEL api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/30-events/data-changed.yaml b/samples/excel/30-events/data-changed.yaml index d644f3b86..8987658e2 100644 --- a/samples/excel/30-events/data-changed.yaml +++ b/samples/excel/30-events/data-changed.yaml @@ -5,7 +5,7 @@ description: Registers an event handler that runs when data is changed. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/30-events/events-chart-activated.yaml b/samples/excel/30-events/events-chart-activated.yaml index 3722acb94..febc4ccc8 100644 --- a/samples/excel/30-events/events-chart-activated.yaml +++ b/samples/excel/30-events/events-chart-activated.yaml @@ -4,7 +4,7 @@ name: Chart events description: Registers event handlers on an individual chart that run when the chart is activated or deactivated. host: EXCEL api_set: - ExcelApi: 1.8 + ExcelApi: '1.8' script: content: |- $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/30-events/events-chartcollection-added-activated.yaml b/samples/excel/30-events/events-chartcollection-added-activated.yaml index 4533e93cd..f96ad0f9f 100644 --- a/samples/excel/30-events/events-chartcollection-added-activated.yaml +++ b/samples/excel/30-events/events-chartcollection-added-activated.yaml @@ -4,7 +4,7 @@ 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.' host: EXCEL api_set: - ExcelApi: 1.8 + ExcelApi: '1.8' script: content: |- $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/30-events/events-disable-events.yaml b/samples/excel/30-events/events-disable-events.yaml index d5deb0fcf..371d24007 100644 --- a/samples/excel/30-events/events-disable-events.yaml +++ b/samples/excel/30-events/events-disable-events.yaml @@ -4,7 +4,7 @@ name: Enable and disable events description: Toggles event firing on and off. host: EXCEL api_set: - ExcelAPI: 1.8 + ExcelApi: '1.8' script: content: | $("#toggleEvents").click(() => tryCatch(toggleEvents)); diff --git a/samples/excel/30-events/events-table-changed.yaml b/samples/excel/30-events/events-table-changed.yaml index 5267fec82..577ddf501 100644 --- a/samples/excel/30-events/events-table-changed.yaml +++ b/samples/excel/30-events/events-table-changed.yaml @@ -4,7 +4,7 @@ name: Table events description: Registers event handlers that run when a table is changed or selected. host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' script: content: |+ $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/30-events/events-tablecollection-changed.yaml b/samples/excel/30-events/events-tablecollection-changed.yaml index 94a3e564e..cfd362dae 100644 --- a/samples/excel/30-events/events-tablecollection-changed.yaml +++ b/samples/excel/30-events/events-tablecollection-changed.yaml @@ -4,7 +4,7 @@ name: Table collection events description: Registers an event handler that runs when a table collection is changed. host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' script: content: |+ $("#setup").click(() => tryCatch(setup)); 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 0188c8ff7..3d2956273 100644 --- a/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml +++ b/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml @@ -5,7 +5,7 @@ description: 'Registers event handlers that run when a worksheet is added, activ author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: |- $("#register-on-add-handler").click(() => tryCatch(registerOnAddHandler)); diff --git a/samples/excel/30-events/events-worksheet.yaml b/samples/excel/30-events/events-worksheet.yaml index 2f14d6a82..6da26fcb9 100644 --- a/samples/excel/30-events/events-worksheet.yaml +++ b/samples/excel/30-events/events-worksheet.yaml @@ -5,7 +5,7 @@ description: 'Registers event handlers that run when data is changed in workshee author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: |- $("#setup").click(() => tryCatch(setup)); 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 4d5c620bb..c152eb15d 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 @@ -4,7 +4,7 @@ name: 'Create, access, and remove' description: 'Creates, accesses, and removes named items in a worksheet.' host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: |- $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/34-named-item/update-named-item.yaml b/samples/excel/34-named-item/update-named-item.yaml index 5d42d5d35..1cee72d6f 100644 --- a/samples/excel/34-named-item/update-named-item.yaml +++ b/samples/excel/34-named-item/update-named-item.yaml @@ -5,7 +5,7 @@ description: Creates and then updates a named item. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' script: content: |- $("#add-named-item").click(() => tryCatch(addNamedItem)); diff --git a/samples/excel/38-pivottable/pivottable-calculations.yaml b/samples/excel/38-pivottable/pivottable-calculations.yaml index 0e6eb9022..0efe9bded 100644 --- a/samples/excel/38-pivottable/pivottable-calculations.yaml +++ b/samples/excel/38-pivottable/pivottable-calculations.yaml @@ -5,7 +5,7 @@ description: Changes the calculations the PivotTable performs. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.8 + ExcelApi: '1.8' script: content: |- $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/38-pivottable/pivottable-create-and-modify.yaml b/samples/excel/38-pivottable/pivottable-create-and-modify.yaml index 9bb3d76dc..25ab95a16 100644 --- a/samples/excel/38-pivottable/pivottable-create-and-modify.yaml +++ b/samples/excel/38-pivottable/pivottable-create-and-modify.yaml @@ -5,7 +5,7 @@ description: Creates and modifies a PivotTable. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.8 + ExcelApi: '1.8' script: content: |- $("#deletePivot").click(() => tryCatch(deletePivot)); diff --git a/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml b/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml index 425d4df3d..5709b93d9 100644 --- a/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml +++ b/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml @@ -5,7 +5,7 @@ description: Filters PivotTable data and shows different summarizations. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.8 + ExcelApi: '1.8' script: content: |- $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/42-range/cell-properties.yaml b/samples/excel/42-range/cell-properties.yaml index bbcb162b7..3a530d49f 100644 --- a/samples/excel/42-range/cell-properties.yaml +++ b/samples/excel/42-range/cell-properties.yaml @@ -5,7 +5,7 @@ description: Sets different properties across a range then retrieves those prope author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' script: content: | $("#set-cell-properties").click(() => tryCatch(setCellProperties)); diff --git a/samples/excel/42-range/formatting.yaml b/samples/excel/42-range/formatting.yaml index 0c93397be..8a6cafe56 100644 --- a/samples/excel/42-range/formatting.yaml +++ b/samples/excel/42-range/formatting.yaml @@ -5,7 +5,7 @@ description: Formats a range. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/42-range/insert-delete-clear-range.yaml b/samples/excel/42-range/insert-delete-clear-range.yaml index aa39c6222..db776a767 100644 --- a/samples/excel/42-range/insert-delete-clear-range.yaml +++ b/samples/excel/42-range/insert-delete-clear-range.yaml @@ -5,7 +5,7 @@ description: 'Inserts, deletes, and clears a range.' author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/42-range/range-areas.yaml b/samples/excel/42-range/range-areas.yaml index dc279e288..d3eb0ac04 100644 --- a/samples/excel/42-range/range-areas.yaml +++ b/samples/excel/42-range/range-areas.yaml @@ -4,7 +4,7 @@ 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.' host: EXCEL api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' script: content: | $("#reset").click(() => tryCatch(reset)); diff --git a/samples/excel/42-range/range-copyfrom.yaml b/samples/excel/42-range/range-copyfrom.yaml index 3c04b8bf2..0b49a0479 100644 --- a/samples/excel/42-range/range-copyfrom.yaml +++ b/samples/excel/42-range/range-copyfrom.yaml @@ -4,7 +4,7 @@ name: Copy and paste ranges description: Copies data and formatting from one range to another. host: EXCEL api_set: - ExcelAPI: 1.9 + ExcelApi: '1.9' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/42-range/range-find.yaml b/samples/excel/42-range/range-find.yaml index 997ce437b..3c76be910 100644 --- a/samples/excel/42-range/range-find.yaml +++ b/samples/excel/42-range/range-find.yaml @@ -4,7 +4,7 @@ name: Find text matches within a range description: Finds a cell within a range based on string matching. host: EXCEL api_set: - ExcelAPI: 1.9 + ExcelApi: '1.9' script: content: |- $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/42-range/range-hyperlink.yaml b/samples/excel/42-range/range-hyperlink.yaml index 64a5dbac1..829c49369 100644 --- a/samples/excel/42-range/range-hyperlink.yaml +++ b/samples/excel/42-range/range-hyperlink.yaml @@ -5,7 +5,7 @@ description: 'Creates, updates, and clears hyperlinks in a range.' author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/42-range/range-relationships.yaml b/samples/excel/42-range/range-relationships.yaml index 59f300840..f7545d7a3 100644 --- a/samples/excel/42-range/range-relationships.yaml +++ b/samples/excel/42-range/range-relationships.yaml @@ -5,7 +5,7 @@ description: 'Shows relationships between ranges, such as bounding rectangles an author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/42-range/range-remove-duplicates.yaml b/samples/excel/42-range/range-remove-duplicates.yaml index 2fb23aefd..b034a6428 100644 --- a/samples/excel/42-range/range-remove-duplicates.yaml +++ b/samples/excel/42-range/range-remove-duplicates.yaml @@ -4,7 +4,7 @@ name: Remove duplicates description: Removes duplicate entries from a range. host: EXCEL api_set: - ExcelAPI: 1.9 + ExcelApi: '1.9' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/42-range/range-text-orientation.yaml b/samples/excel/42-range/range-text-orientation.yaml index 8abe42c8c..021b416ba 100644 --- a/samples/excel/42-range/range-text-orientation.yaml +++ b/samples/excel/42-range/range-text-orientation.yaml @@ -5,7 +5,7 @@ description: Gets and sets the text orientation within a range. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/42-range/selected-range.yaml b/samples/excel/42-range/selected-range.yaml index 6b584eb7f..375b08a34 100644 --- a/samples/excel/42-range/selected-range.yaml +++ b/samples/excel/42-range/selected-range.yaml @@ -5,7 +5,7 @@ description: Gets and sets the currently selected range. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' script: content: | $("#get-selection").click(() => tryCatch(getSelection)); diff --git a/samples/excel/42-range/set-get-values.yaml b/samples/excel/42-range/set-get-values.yaml index 3594f9f18..bb352dba9 100644 --- a/samples/excel/42-range/set-get-values.yaml +++ b/samples/excel/42-range/set-get-values.yaml @@ -5,7 +5,7 @@ description: Gets and sets values and formulas for a range. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/42-range/used-range.yaml b/samples/excel/42-range/used-range.yaml index 877430a06..741ba3fcb 100644 --- a/samples/excel/42-range/used-range.yaml +++ b/samples/excel/42-range/used-range.yaml @@ -5,7 +5,7 @@ description: Tests for a used range and creates a chart from a table only if the author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/44-shape/shape-create-and-delete.yaml b/samples/excel/44-shape/shape-create-and-delete.yaml index 51bdfb42e..3469e9ea7 100644 --- a/samples/excel/44-shape/shape-create-and-delete.yaml +++ b/samples/excel/44-shape/shape-create-and-delete.yaml @@ -4,7 +4,7 @@ name: Create and delete geometric shapes description: Creates a few different geometric shapes and deletes them from the worksheet. host: EXCEL api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/44-shape/shape-groups.yaml b/samples/excel/44-shape/shape-groups.yaml index b264c071c..b6d60f218 100644 --- a/samples/excel/44-shape/shape-groups.yaml +++ b/samples/excel/44-shape/shape-groups.yaml @@ -4,7 +4,7 @@ name: Shape groups description: Groups and ungroups shapes. host: EXCEL api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/44-shape/shape-images.yaml b/samples/excel/44-shape/shape-images.yaml index 8a569b43a..a955ab46b 100644 --- a/samples/excel/44-shape/shape-images.yaml +++ b/samples/excel/44-shape/shape-images.yaml @@ -4,7 +4,7 @@ name: Image shapes description: Creates and adjusts image-based shapes. host: EXCEL api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/44-shape/shape-lines.yaml b/samples/excel/44-shape/shape-lines.yaml index fd565f396..8fd8207fe 100644 --- a/samples/excel/44-shape/shape-lines.yaml +++ b/samples/excel/44-shape/shape-lines.yaml @@ -4,7 +4,7 @@ name: Lines description: Creates and modifies line shapes. host: EXCEL api_set: - ExcelAPI: 1.9 + ExcelApi: '1.9' script: content: |- $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/44-shape/shape-move-and-order.yaml b/samples/excel/44-shape/shape-move-and-order.yaml index 01e8641df..f5a6625e8 100644 --- a/samples/excel/44-shape/shape-move-and-order.yaml +++ b/samples/excel/44-shape/shape-move-and-order.yaml @@ -4,7 +4,7 @@ name: Move and order shapes description: Moves created shapes around the worksheet and adjusts their z-order. host: EXCEL api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/44-shape/shape-textboxes.yaml b/samples/excel/44-shape/shape-textboxes.yaml index 59f6aeb2c..114d919df 100644 --- a/samples/excel/44-shape/shape-textboxes.yaml +++ b/samples/excel/44-shape/shape-textboxes.yaml @@ -4,7 +4,7 @@ name: Textboxes description: Creates a textbox shape and works with the text in it and other shapes. host: EXCEL api_set: - ExcelAPI: 1.9 + ExcelApi: '1.9' script: content: | $("#setup").click(() => tryCatch(setup)); 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 a023706a7..006660870 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 @@ -5,7 +5,7 @@ description: Adds rows and columns to a table. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/46-table/convert-range-to-table.yaml b/samples/excel/46-table/convert-range-to-table.yaml index 3d097ca21..1e7924e1b 100644 --- a/samples/excel/46-table/convert-range-to-table.yaml +++ b/samples/excel/46-table/convert-range-to-table.yaml @@ -5,7 +5,7 @@ description: Converts a range to a table. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/46-table/create-table.yaml b/samples/excel/46-table/create-table.yaml index b8caf3b27..ab0340392 100644 --- a/samples/excel/46-table/create-table.yaml +++ b/samples/excel/46-table/create-table.yaml @@ -5,7 +5,7 @@ description: Creates a table. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#create-table").click(() => tryCatch(createTable)); diff --git a/samples/excel/46-table/filter-data.yaml b/samples/excel/46-table/filter-data.yaml index 6c5401794..229a37783 100644 --- a/samples/excel/46-table/filter-data.yaml +++ b/samples/excel/46-table/filter-data.yaml @@ -5,7 +5,7 @@ description: Filters table data. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/46-table/formatting.yaml b/samples/excel/46-table/formatting.yaml index 7a876f4c4..a40833fc5 100644 --- a/samples/excel/46-table/formatting.yaml +++ b/samples/excel/46-table/formatting.yaml @@ -5,7 +5,7 @@ description: Formats a table. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/46-table/get-data-from-table.yaml b/samples/excel/46-table/get-data-from-table.yaml index 421bf9580..3b48ea6df 100644 --- a/samples/excel/46-table/get-data-from-table.yaml +++ b/samples/excel/46-table/get-data-from-table.yaml @@ -5,7 +5,7 @@ description: Gets data from a table. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); 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 98958e3c8..c719c7902 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 @@ -5,7 +5,7 @@ description: Gets the visible range from a filtered table. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: |+ $("#create-table").click(() => tryCatch(createTable)); diff --git a/samples/excel/46-table/import-json-data.yaml b/samples/excel/46-table/import-json-data.yaml index ea1ed9d31..937fa71bb 100644 --- a/samples/excel/46-table/import-json-data.yaml +++ b/samples/excel/46-table/import-json-data.yaml @@ -5,7 +5,7 @@ description: Imports JSON data into a table. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#import-json-data").click(() => tryCatch(importJsonData)); diff --git a/samples/excel/46-table/sort-data.yaml b/samples/excel/46-table/sort-data.yaml index ad017725b..255f6015c 100644 --- a/samples/excel/46-table/sort-data.yaml +++ b/samples/excel/46-table/sort-data.yaml @@ -5,7 +5,7 @@ description: Sorts the data within a table. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/46-table/style.yaml b/samples/excel/46-table/style.yaml index ae65e0c93..8ef126ef8 100644 --- a/samples/excel/46-table/style.yaml +++ b/samples/excel/46-table/style.yaml @@ -5,7 +5,7 @@ description: 'Creates a custom style, applies a custom and built-in styles to a author: siewmoi host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' script: content: |+ $("#setup").click(() => tryCatch(setup)); 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 0f79490d0..bb393f18b 100644 --- a/samples/excel/50-workbook/create-get-change-delete-settings.yaml +++ b/samples/excel/50-workbook/create-get-change-delete-settings.yaml @@ -5,7 +5,7 @@ description: 'Creates, gets, changes, and deletes settings that are unique to th author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#create-setting").click(() => tryCatch(createSetting)); diff --git a/samples/excel/50-workbook/create-workbook.yaml b/samples/excel/50-workbook/create-workbook.yaml index bfd83ce52..34b85bca6 100644 --- a/samples/excel/50-workbook/create-workbook.yaml +++ b/samples/excel/50-workbook/create-workbook.yaml @@ -5,7 +5,7 @@ description: 'Creates a new, empty workbook and creates a new workbook by copyin author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.8 + ExcelApi: '1.8' script: content: | $("#create-new-blank-workbook").click(() => tryCatch(createBlankWorkbook)); diff --git a/samples/excel/50-workbook/data-protection.yaml b/samples/excel/50-workbook/data-protection.yaml index c0ec6cd07..5dc58c574 100644 --- a/samples/excel/50-workbook/data-protection.yaml +++ b/samples/excel/50-workbook/data-protection.yaml @@ -4,7 +4,7 @@ name: Data protection description: Protects data in a worksheet and the workbook structure. host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/50-workbook/workbook-get-active-cell.yaml b/samples/excel/50-workbook/workbook-get-active-cell.yaml index e6fd931c9..6b56e6c76 100644 --- a/samples/excel/50-workbook/workbook-get-active-cell.yaml +++ b/samples/excel/50-workbook/workbook-get-active-cell.yaml @@ -4,7 +4,7 @@ name: Active cell description: Gets the active cell of the entire workbook. host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' script: content: | $("#get-active-cell").click(() => tryCatch(run)); diff --git a/samples/excel/54-worksheet/active-worksheet.yaml b/samples/excel/54-worksheet/active-worksheet.yaml index 7b81a0512..cabb12f81 100644 --- a/samples/excel/54-worksheet/active-worksheet.yaml +++ b/samples/excel/54-worksheet/active-worksheet.yaml @@ -5,7 +5,7 @@ description: Gets and sets the active worksheet. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' script: content: |- $("#setup").click(() => tryCatch(setup)); 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 a1ad45ccc..904c01b51 100644 --- a/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml +++ b/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml @@ -5,7 +5,7 @@ description: 'Adds, deletes, renames, and moves a worksheet.' author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' script: content: | $("#add-worksheet").click(() => tryCatch(addWorksheet)); diff --git a/samples/excel/54-worksheet/gridlines.yaml b/samples/excel/54-worksheet/gridlines.yaml index cd050b281..ed691a166 100644 --- a/samples/excel/54-worksheet/gridlines.yaml +++ b/samples/excel/54-worksheet/gridlines.yaml @@ -5,7 +5,7 @@ description: Hides and shows a worksheet's gridlines. author: OfficeDev host: EXCEL api_set: - ExcelAPI: 1.8 + ExcelApi: '1.8' script: content: | $("#hide-gridlines").click(() => tryCatch(hideGridlines)); diff --git a/samples/excel/54-worksheet/list-worksheets.yaml b/samples/excel/54-worksheet/list-worksheets.yaml index a33432cfa..50e56f674 100644 --- a/samples/excel/54-worksheet/list-worksheets.yaml +++ b/samples/excel/54-worksheet/list-worksheets.yaml @@ -5,7 +5,7 @@ description: Lists the worksheets in the workbook. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' script: content: | $("#list-worksheets").click(() => tryCatch(listWorksheets)); 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 e2bb0c34f..da01e093a 100644 --- a/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml +++ b/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml @@ -5,7 +5,7 @@ description: Gets a worksheet by using its relative position within the workbook author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.5 + ExcelApi: '1.5' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/54-worksheet/tab-color.yaml b/samples/excel/54-worksheet/tab-color.yaml index cee3d8ec1..7e2656a1f 100644 --- a/samples/excel/54-worksheet/tab-color.yaml +++ b/samples/excel/54-worksheet/tab-color.yaml @@ -5,7 +5,7 @@ description: Gets and sets the tab color of a worksheet. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' script: content: | $("#set-tab-color-to-hex-color").click(() => tryCatch(setTabColorToHexColor)); diff --git a/samples/excel/54-worksheet/worksheet-auto-filter.yaml b/samples/excel/54-worksheet/worksheet-auto-filter.yaml index af2e1b0f4..bb4178d93 100644 --- a/samples/excel/54-worksheet/worksheet-auto-filter.yaml +++ b/samples/excel/54-worksheet/worksheet-auto-filter.yaml @@ -4,7 +4,7 @@ name: AutoFilter description: Adds an AutoFilter to a worksheet. host: EXCEL api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/54-worksheet/worksheet-copy.yaml b/samples/excel/54-worksheet/worksheet-copy.yaml index 602b9e6db..bd11af31b 100644 --- a/samples/excel/54-worksheet/worksheet-copy.yaml +++ b/samples/excel/54-worksheet/worksheet-copy.yaml @@ -4,7 +4,7 @@ name: Copy worksheet description: Copies the active worksheet to the specified location. host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/54-worksheet/worksheet-find-all.yaml b/samples/excel/54-worksheet/worksheet-find-all.yaml index 6e880ddce..de104f7e4 100644 --- a/samples/excel/54-worksheet/worksheet-find-all.yaml +++ b/samples/excel/54-worksheet/worksheet-find-all.yaml @@ -4,7 +4,7 @@ name: Find text matches within a worksheet description: Finds cells within a worksheet based on string matching. host: EXCEL api_set: - ExcelAPI: 1.9 + ExcelApi: '1.9' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/54-worksheet/worksheet-freeze-panes.yaml b/samples/excel/54-worksheet/worksheet-freeze-panes.yaml index e85e69095..dd8c0f0f8 100644 --- a/samples/excel/54-worksheet/worksheet-freeze-panes.yaml +++ b/samples/excel/54-worksheet/worksheet-freeze-panes.yaml @@ -5,7 +5,7 @@ description: 'Freezes columns, rows, and a range of cells. Gets the address of t author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/54-worksheet/worksheet-page-layout.yaml b/samples/excel/54-worksheet/worksheet-page-layout.yaml index be0bd3f38..64c36ead9 100644 --- a/samples/excel/54-worksheet/worksheet-page-layout.yaml +++ b/samples/excel/54-worksheet/worksheet-page-layout.yaml @@ -4,7 +4,7 @@ name: Page layout and print settings description: Changes the page layout and other settings for printing a worksheet. host: EXCEL api_set: - ExcelAPI: 1.9 + ExcelApi: '1.9' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/54-worksheet/worksheet-range-cell.yaml b/samples/excel/54-worksheet/worksheet-range-cell.yaml index 98a656053..176fe8714 100644 --- a/samples/excel/54-worksheet/worksheet-range-cell.yaml +++ b/samples/excel/54-worksheet/worksheet-range-cell.yaml @@ -5,7 +5,7 @@ description: 'Gets the used range, the entire range of a worksheet, the specifie author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/54-worksheet/worksheet-visibility.yaml b/samples/excel/54-worksheet/worksheet-visibility.yaml index 3af9e502a..2dafa0639 100644 --- a/samples/excel/54-worksheet/worksheet-visibility.yaml +++ b/samples/excel/54-worksheet/worksheet-visibility.yaml @@ -5,7 +5,7 @@ description: Hides and unhides a worksheet. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' script: content: | $("#hide-worksheet").click(() => tryCatch(hideWorksheet)); diff --git a/samples/excel/90-scenarios/multiple-property-set.yaml b/samples/excel/90-scenarios/multiple-property-set.yaml index b06a14c07..fc6a4c6b6 100644 --- a/samples/excel/90-scenarios/multiple-property-set.yaml +++ b/samples/excel/90-scenarios/multiple-property-set.yaml @@ -5,7 +5,7 @@ description: Sets multiple properties at once with the API object set() method. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/90-scenarios/performance-optimization.yaml b/samples/excel/90-scenarios/performance-optimization.yaml index 0f68d85c4..08b21139e 100644 --- a/samples/excel/90-scenarios/performance-optimization.yaml +++ b/samples/excel/90-scenarios/performance-optimization.yaml @@ -4,7 +4,7 @@ name: Performance optimization description: Optimizes performance by untracking ranges and turning off screen painting. host: EXCEL api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/90-scenarios/report-generation.yaml b/samples/excel/90-scenarios/report-generation.yaml index 1ec74c5f8..2add48209 100644 --- a/samples/excel/90-scenarios/report-generation.yaml +++ b/samples/excel/90-scenarios/report-generation.yaml @@ -5,7 +5,7 @@ description: 'Writes data to the workbook, reads and applies basic formatting, a author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' script: content: | $("#create-report").click(() => tryCatch(createReport)); diff --git a/samples/excel/90-scenarios/working-with-dates.yaml b/samples/excel/90-scenarios/working-with-dates.yaml index 23466d5a8..5504a56a0 100644 --- a/samples/excel/90-scenarios/working-with-dates.yaml +++ b/samples/excel/90-scenarios/working-with-dates.yaml @@ -5,7 +5,7 @@ description: Shows how to work with dates by using the Moment JavaScript library author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | declare var moment: any; diff --git a/samples/excel/99-just-for-fun/color-wheel.yaml b/samples/excel/99-just-for-fun/color-wheel.yaml index a1af61e12..b63475a5b 100644 --- a/samples/excel/99-just-for-fun/color-wheel.yaml +++ b/samples/excel/99-just-for-fun/color-wheel.yaml @@ -5,7 +5,7 @@ description: Uses chart formatting to draw a wheel with changing colors. Contrib author: AlexanderZlatkovski host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#wheel").click(wheelGo); diff --git a/samples/excel/99-just-for-fun/gradient.yaml b/samples/excel/99-just-for-fun/gradient.yaml index 8438dff8d..d4720d92e 100644 --- a/samples/excel/99-just-for-fun/gradient.yaml +++ b/samples/excel/99-just-for-fun/gradient.yaml @@ -5,7 +5,7 @@ description: Uses range formatting and external libraries to draw a colorful gra author: AlexanderZlatkovski host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: |- initializeColorPickers(); 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 cc92693f3..b63a27b27 100644 --- a/samples/excel/99-just-for-fun/path-finder-game.yaml +++ b/samples/excel/99-just-for-fun/path-finder-game.yaml @@ -5,7 +5,7 @@ description: Uses range formatting to play a "pathfinder game". Contributed by A author: AlexanderZlatkovski host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(setup); diff --git a/samples/excel/99-just-for-fun/patterns.yaml b/samples/excel/99-just-for-fun/patterns.yaml index 414f3f254..282e7cbaf 100644 --- a/samples/excel/99-just-for-fun/patterns.yaml +++ b/samples/excel/99-just-for-fun/patterns.yaml @@ -5,7 +5,7 @@ description: Uses range formatting to draw interesting pattern. Contributed by A author: AlexanderZlatkovski host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: |- $("#squares").click(() => tryCatch(drawSquares)); diff --git a/samples/excel/99-just-for-fun/tetrominos.yaml b/samples/excel/99-just-for-fun/tetrominos.yaml index 91d12f609..06ce38b90 100644 --- a/samples/excel/99-just-for-fun/tetrominos.yaml +++ b/samples/excel/99-just-for-fun/tetrominos.yaml @@ -5,7 +5,7 @@ description: Arrange moving tetromino shapes to form lines. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' script: content: |- $("#run").click(() => { diff --git a/samples/excel/default.yaml b/samples/excel/default.yaml index acdd871ff..10ea5b1db 100644 --- a/samples/excel/default.yaml +++ b/samples/excel/default.yaml @@ -4,7 +4,7 @@ description: Create a new snippet from a blank template. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' script: content: | $("#run").click(() => tryCatch(run)); diff --git a/samples/onenote/default.yaml b/samples/onenote/default.yaml index 6aca02824..57fbd0e52 100644 --- a/samples/onenote/default.yaml +++ b/samples/onenote/default.yaml @@ -4,7 +4,7 @@ description: Create a new snippet from a blank template. author: OfficeDev host: ONENOTE api_set: - OneNoteApi: 1.1 + OneNoteApi: '1.1' script: content: | $("#run").click(() => tryCatch(run)); diff --git a/samples/word/01-basics/basic-api-call-es5.yaml b/samples/word/01-basics/basic-api-call-es5.yaml index 84efe2cc5..c27dbdf75 100644 --- a/samples/word/01-basics/basic-api-call-es5.yaml +++ b/samples/word/01-basics/basic-api-call-es5.yaml @@ -5,7 +5,7 @@ description: Performs a basic Word API call using plain JavaScript & Promises. author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: '1.1' script: content: |- $("#run").click(() => tryCatch(run)); diff --git a/samples/word/01-basics/basic-api-call.yaml b/samples/word/01-basics/basic-api-call.yaml index b86d169d4..fd9f583c1 100644 --- a/samples/word/01-basics/basic-api-call.yaml +++ b/samples/word/01-basics/basic-api-call.yaml @@ -5,7 +5,7 @@ description: Performs a basic Word API call using TypeScript. author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: '1.1' script: content: |- $("#run").click(() => tryCatch(run)); 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 2177de93b..11ce1a84e 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 @@ -5,7 +5,7 @@ description: 'Inserts, updates, and retrieves content controls.' author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: '1.1' script: content: | $("#insert-controls").click(() => tryCatch(insertContentControls)); diff --git a/samples/word/15-images/insert-and-get-pictures.yaml b/samples/word/15-images/insert-and-get-pictures.yaml index e8aea919c..f2d2e0490 100644 --- a/samples/word/15-images/insert-and-get-pictures.yaml +++ b/samples/word/15-images/insert-and-get-pictures.yaml @@ -5,7 +5,7 @@ description: Inserts and gets inline pictures. author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: '1.1' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/word/20-lists/insert-list.yaml b/samples/word/20-lists/insert-list.yaml index 03c1fd450..660b30415 100644 --- a/samples/word/20-lists/insert-list.yaml +++ b/samples/word/20-lists/insert-list.yaml @@ -5,7 +5,7 @@ description: Inserts a new list into the document. author: OfficeDev host: WORD api_set: - WordApi: 1.3 + WordApi: '1.3' script: content: | $("#insert-controls").click(() => tryCatch(insertList)); 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 e87e2f00e..e5aa023ca 100644 --- a/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml +++ b/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -5,7 +5,7 @@ description: Gets the full paragraph containing the insertion point. author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: '1.1' script: content: | $("#get-paragraph").click(() => tryCatch(getParagraph)); diff --git a/samples/word/25-paragraph/get-word-count.yaml b/samples/word/25-paragraph/get-word-count.yaml index 8b872c185..23affcac2 100644 --- a/samples/word/25-paragraph/get-word-count.yaml +++ b/samples/word/25-paragraph/get-word-count.yaml @@ -5,7 +5,7 @@ description: Counts how many times a word or term appears in the document. author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: '1.1' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/word/25-paragraph/insert-formatted-text.yaml b/samples/word/25-paragraph/insert-formatted-text.yaml index 8f9c8f4e9..889aa2965 100644 --- a/samples/word/25-paragraph/insert-formatted-text.yaml +++ b/samples/word/25-paragraph/insert-formatted-text.yaml @@ -5,7 +5,7 @@ description: Formats text with pre-built and custom styles. author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: '1.1' script: content: |- $("#add-text").click(() => tryCatch(addFormattedText)); diff --git a/samples/word/25-paragraph/insert-header-and-footer.yaml b/samples/word/25-paragraph/insert-header-and-footer.yaml index efeced43b..c4d84a1ec 100644 --- a/samples/word/25-paragraph/insert-header-and-footer.yaml +++ b/samples/word/25-paragraph/insert-header-and-footer.yaml @@ -5,7 +5,7 @@ description: Inserts a header and a footer in the document. author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: '1.1' script: content: |- $("#add-header").click(() => tryCatch(addHeader)); diff --git a/samples/word/25-paragraph/insert-in-different-locations.yaml b/samples/word/25-paragraph/insert-in-different-locations.yaml index 16c6cb0d0..144f50bc3 100644 --- a/samples/word/25-paragraph/insert-in-different-locations.yaml +++ b/samples/word/25-paragraph/insert-in-different-locations.yaml @@ -5,7 +5,7 @@ description: Inserts content at different document locations. author: OfficeDev host: WORD api_set: - WordApi: 1.2 + WordApi: '1.2' script: content: | $("#setup").click(() => tryCatch(setup)); 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 ade410bb8..03dcbe85f 100644 --- a/samples/word/25-paragraph/insert-line-and-page-breaks.yaml +++ b/samples/word/25-paragraph/insert-line-and-page-breaks.yaml @@ -5,7 +5,7 @@ description: Inserts page and line breaks in a document. author: OfficeDev host: WORD api_set: - WordApi: 1.2 + WordApi: '1.2' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/word/25-paragraph/paragraph-properties.yaml b/samples/word/25-paragraph/paragraph-properties.yaml index b919c9634..525b97c2d 100644 --- a/samples/word/25-paragraph/paragraph-properties.yaml +++ b/samples/word/25-paragraph/paragraph-properties.yaml @@ -5,7 +5,7 @@ description: 'Sets indentation, space between paragraphs, and other paragraph pr author: OfficeDev host: WORD api_set: - WordApi: 1.2 + WordApi: '1.2' script: content: | $("#indent").click(() => tryCatch(indent)); diff --git a/samples/word/25-paragraph/search.yaml b/samples/word/25-paragraph/search.yaml index bcfbb8271..f6d37bc1d 100644 --- a/samples/word/25-paragraph/search.yaml +++ b/samples/word/25-paragraph/search.yaml @@ -5,7 +5,7 @@ description: Shows basic and advanced search capabilities. author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: '1.1' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/word/30-properties/get-built-in-properties.yaml b/samples/word/30-properties/get-built-in-properties.yaml index 302996153..1977ac9cf 100644 --- a/samples/word/30-properties/get-built-in-properties.yaml +++ b/samples/word/30-properties/get-built-in-properties.yaml @@ -5,7 +5,7 @@ description: Gets built-in document properties. author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: '1.1' script: content: |- $("#run").click(() => tryCatch(getProperties)); 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 7e8703459..6a933e24c 100644 --- a/samples/word/30-properties/read-write-custom-document-properties.yaml +++ b/samples/word/30-properties/read-write-custom-document-properties.yaml @@ -5,7 +5,7 @@ description: Adds and reads custom document properties of different types. author: OfficeDev host: WORD api_set: - WordApi: 1.3 + WordApi: '1.3' script: content: |- $("#number").click(() => tryCatch(insertNumericProperty)); diff --git a/samples/word/35-ranges/scroll-to-range.yaml b/samples/word/35-ranges/scroll-to-range.yaml index e89762c43..d91ac37ed 100644 --- a/samples/word/35-ranges/scroll-to-range.yaml +++ b/samples/word/35-ranges/scroll-to-range.yaml @@ -5,7 +5,7 @@ description: Scrolls to a range with and without selection. author: OfficeDev host: WORD api_set: - WordApi: 1.2 + WordApi: '1.2' script: content: | $("#setup").click(() => tryCatch(setup)); 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 8a04f0777..b0ed4a52c 100644 --- a/samples/word/35-ranges/split-words-of-first-paragraph.yaml +++ b/samples/word/35-ranges/split-words-of-first-paragraph.yaml @@ -5,7 +5,7 @@ description: 'Splits a paragraph into word ranges and then traverses all the ran author: OfficeDev host: WORD api_set: - WordApi: 1.3 + WordApi: '1.3' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/word/40-tables/table-cell-access.yaml b/samples/word/40-tables/table-cell-access.yaml index d37397dfa..265b537e1 100644 --- a/samples/word/40-tables/table-cell-access.yaml +++ b/samples/word/40-tables/table-cell-access.yaml @@ -5,7 +5,7 @@ description: Creates a table and accesses a specific cell. author: OfficeDev host: WORD api_set: - WordApi: 1.3 + WordApi: '1.3' script: content: |- $("#run").click(() => tryCatch(getTableCell)); diff --git a/samples/word/90-scenarios/doc-assembly.yaml b/samples/word/90-scenarios/doc-assembly.yaml index 4b73bf0f9..6ecee3ef0 100644 --- a/samples/word/90-scenarios/doc-assembly.yaml +++ b/samples/word/90-scenarios/doc-assembly.yaml @@ -5,7 +5,7 @@ description: Composes different parts of a Word document. author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: '1.1' script: content: |- $("#insert-header").click(() => tryCatch(insertHeader)); diff --git a/samples/word/90-scenarios/multiple-property-set.yaml b/samples/word/90-scenarios/multiple-property-set.yaml index a377fbc6d..d67bf9373 100644 --- a/samples/word/90-scenarios/multiple-property-set.yaml +++ b/samples/word/90-scenarios/multiple-property-set.yaml @@ -5,7 +5,7 @@ description: Sets multiple properties at once with the API object set() method. author: OfficeDev host: WORD api_set: - WordApi: 1.3 + WordApi: '1.3' script: content: | $("#set-multiple-properties-with-object").click(() => tryCatch(setMultiplePropertiesWithObject)); diff --git a/samples/word/default.yaml b/samples/word/default.yaml index 3c1583c9c..19d5ecb66 100644 --- a/samples/word/default.yaml +++ b/samples/word/default.yaml @@ -4,7 +4,7 @@ description: Create a new snippet from a blank template. author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: '1.1' script: content: | $("#run").click(() => tryCatch(run)); From a9f43c21630af3c4b58f005d85fe34807a816c9d Mon Sep 17 00:00:00 2001 From: David Chesnut Date: Wed, 28 Aug 2019 14:52:38 -0700 Subject: [PATCH 197/660] Added web call custom function (#313) * Added web call custom function * fixes from review comments --- playlists/excel.yaml | 9 +++++ .../web-call-function.yaml | 33 +++++++++++++++++++ view/excel.json | 1 + 3 files changed, 43 insertions(+) create mode 100644 samples/excel/16-custom-functions/web-call-function.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 8231fefe5..496a0f942 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -182,6 +182,15 @@ 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////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 diff --git a/samples/excel/16-custom-functions/web-call-function.yaml b/samples/excel/16-custom-functions/web-call-function.yaml new file mode 100644 index 000000000..faf57fbdb --- /dev/null +++ b/samples/excel/16-custom-functions/web-call-function.yaml @@ -0,0 +1,33 @@ +order: 4 +id: excel-custom-functions-web-call +name: Web request to GitHub API +description: Calls the GitHub API to get the star count for an org/user and repository. +host: EXCEL +api_set: + CustomFunctionsRuntime: 1.1 +script: + content: | + /** + * Gets the star count for a given org/user and repo. Try =GETSTARCOUNT("officedev","office-js") + * @customfunction + * @param userName Name of org or user. + * @param repoName Name of the repo. + * @return Number of stars. + */ + async function getStarCount(userName = "OfficeDev", repoName = "office-js") { + //You can change this URL to any web request you want to work with. + const url = `https://api.github.com/repos/${userName}/${repoName}`; + const response = await fetch(url); + + //Expect that status code is in 200-299 range + if (!response.ok) { + throw new Error(response.statusText); + } + const jsonResponse = await response.json(); + return jsonResponse.watchers_count; + } + 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/view/excel.json b/view/excel.json index c76f4347d..010a2e7c7 100644 --- a/view/excel.json +++ b/view/excel.json @@ -19,6 +19,7 @@ "excel-custom-functions-basic": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/16-custom-functions/basic-function.yaml", "excel-custom-functions-volatile": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/16-custom-functions/volatile-function.yaml", "excel-custom-functions-streaming": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/16-custom-functions/streaming-function.yaml", + "excel-custom-functions-web-call": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml", "excel-chart-chart-title-ts": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/private-samples/excel/20-chart/chart-title-ts.yaml", From 1367e90ecc19d12c1cc59133d28222c021215239 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 29 Aug 2019 12:45:00 -0700 Subject: [PATCH 198/660] Merging to prod (#343) * Using a string to represent the requirement set in all snippets (#342) * Added web call custom function (#313) * Added web call custom function * fixes from review comments --- README.md | 2 +- playlists/excel.yaml | 189 +++++++++--------- playlists/word.yaml | 40 ++-- .../excel/01-basics/basic-api-call-es5.yaml | 2 +- samples/excel/01-basics/basic-api-call.yaml | 2 +- .../excel/10-chart/chart-axis-formatting.yaml | 2 +- samples/excel/10-chart/chart-axis.yaml | 2 +- .../10-chart/chart-create-several-charts.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 +- .../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 +- .../conditional-formatting-advanced.yaml | 2 +- .../conditional-formatting-basic.yaml | 2 +- .../web-call-function.yaml | 33 +++ ...e-set-get-and-delete-custom-xml-parts.yaml | 2 +- .../test-xml-for-unique-namespace.yaml | 2 +- .../22-data-validation/data-validation.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/events-chart-activated.yaml | 2 +- ...vents-chartcollection-added-activated.yaml | 2 +- .../30-events/events-disable-events.yaml | 2 +- .../excel/30-events/events-table-changed.yaml | 2 +- .../events-tablecollection-changed.yaml | 2 +- ...nts-workbook-and-worksheet-collection.yaml | 2 +- samples/excel/30-events/events-worksheet.yaml | 2 +- .../create-and-remove-named-item.yaml | 2 +- .../34-named-item/update-named-item.yaml | 2 +- .../pivottable-calculations.yaml | 2 +- .../pivottable-create-and-modify.yaml | 2 +- .../pivottable-filters-and-summaries.yaml | 2 +- samples/excel/42-range/cell-properties.yaml | 2 +- samples/excel/42-range/formatting.yaml | 2 +- .../42-range/insert-delete-clear-range.yaml | 2 +- samples/excel/42-range/range-areas.yaml | 2 +- samples/excel/42-range/range-copyfrom.yaml | 2 +- samples/excel/42-range/range-find.yaml | 2 +- samples/excel/42-range/range-hyperlink.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/used-range.yaml | 2 +- .../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 +- .../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 +- .../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 +- .../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/sort-data.yaml | 2 +- samples/excel/46-table/style.yaml | 2 +- .../create-get-change-delete-settings.yaml | 2 +- .../excel/50-workbook/create-workbook.yaml | 2 +- .../excel/50-workbook/data-protection.yaml | 2 +- .../50-workbook/workbook-get-active-cell.yaml | 2 +- .../excel/54-worksheet/active-worksheet.yaml | 2 +- .../add-delete-rename-move-worksheet.yaml | 2 +- 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/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 +- .../word/01-basics/basic-api-call-es5.yaml | 2 +- samples/word/01-basics/basic-api-call.yaml | 2 +- .../insert-and-change-content-controls.yaml | 2 +- .../15-images/insert-and-get-pictures.yaml | 2 +- samples/word/20-lists/insert-list.yaml | 2 +- .../get-paragraph-on-insertion-point.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 +- .../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/scroll-to-range.yaml | 2 +- .../split-words-of-first-paragraph.yaml | 2 +- samples/word/40-tables/table-cell-access.yaml | 2 +- samples/word/90-scenarios/doc-assembly.yaml | 2 +- .../90-scenarios/multiple-property-set.yaml | 2 +- samples/word/default.yaml | 2 +- view/excel.json | 1 + 118 files changed, 267 insertions(+), 224 deletions(-) create mode 100644 samples/excel/16-custom-functions/web-call-function.yaml diff --git a/README.md b/README.md index 404cde3b8..ae3d4d5ca 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ A collection of code snippets built with [Script Lab](//github.com/OfficeDev/scr ```yaml api_set: - ExcelApi: 1.5 + ExcelApi: '1.5' ``` 5. Check the name and description property values, also near the top of the file, and edit as needed. diff --git a/playlists/excel.yaml b/playlists/excel.yaml index b401efb19..496a0f942 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -6,7 +6,7 @@ https://raw.githubusercontent.com////samples/excel/01-basics/basic-api-call.yaml group: Basics api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' - id: excel-basics-basic-api-call-es5 name: Basic API call (JavaScript) fileName: basic-api-call-es5.yaml @@ -15,7 +15,7 @@ https://raw.githubusercontent.com////samples/excel/01-basics/basic-api-call-es5.yaml group: Basics api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' - id: excel-basics-basic-common-api-call name: Basic API call (Office 2013) fileName: basic-common-api-call.yaml @@ -35,7 +35,7 @@ https://raw.githubusercontent.com////samples/excel/10-chart/chart-axis.yaml group: Chart api_set: - ExcelAPI: 1.7 + ExcelApi: '1.7' - id: excel-chart-axis-formatting name: Axis formatting fileName: chart-axis-formatting.yaml @@ -44,7 +44,7 @@ https://raw.githubusercontent.com////samples/excel/10-chart/chart-axis-formatting.yaml group: Chart api_set: - ExcelAPI: 1.8 + ExcelApi: '1.8' - id: excel-chart-create-several-charts name: Create charts fileName: chart-create-several-charts.yaml @@ -55,7 +55,7 @@ https://raw.githubusercontent.com////samples/excel/10-chart/chart-create-several-charts.yaml group: Chart api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-chart-create-doughnut-chart name: Doughnut chart fileName: create-doughnut-chart.yaml @@ -64,7 +64,7 @@ https://raw.githubusercontent.com////samples/excel/10-chart/create-doughnut-chart.yaml group: Chart api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' - id: excel-chart-formatting name: Formatting fileName: chart-formatting.yaml @@ -73,7 +73,7 @@ https://raw.githubusercontent.com////samples/excel/10-chart/chart-formatting.yaml group: Chart api_set: - ExcelAPI: 1.8 + ExcelApi: '1.8' - id: excel-chart-legend name: Legend fileName: chart-legend.yaml @@ -82,7 +82,7 @@ https://raw.githubusercontent.com////samples/excel/10-chart/chart-legend.yaml group: Chart api_set: - ExcelAPI: 1.7 + ExcelApi: '1.7' - id: excel-chart-point name: Points fileName: chart-point.yaml @@ -91,7 +91,7 @@ https://raw.githubusercontent.com////samples/excel/10-chart/chart-point.yaml group: Chart api_set: - ExcelAPI: 1.7 + ExcelApi: '1.7' - id: excel-chart-series name: Series fileName: chart-series.yaml @@ -100,7 +100,7 @@ https://raw.githubusercontent.com////samples/excel/10-chart/chart-series.yaml group: Chart api_set: - ExcelAPI: 1.7 + ExcelApi: '1.7' - id: excel-chart-series-markers name: Series markers fileName: chart-series-markers.yaml @@ -109,7 +109,7 @@ https://raw.githubusercontent.com////samples/excel/10-chart/chart-series-markers.yaml group: Chart api_set: - ExcelAPI: 1.7 + ExcelApi: '1.7' - id: excel-chart-series-plotorder name: Series plot order fileName: chart-series-plotorder.yaml @@ -118,7 +118,7 @@ https://raw.githubusercontent.com////samples/excel/10-chart/chart-series-plotorder.yaml group: Chart api_set: - ExcelAPI: 1.7 + ExcelApi: '1.7' - id: excel-chart-title-format name: Title format fileName: chart-title-format.yaml @@ -127,7 +127,7 @@ https://raw.githubusercontent.com////samples/excel/10-chart/chart-title-format.yaml group: Chart api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' - id: excel-chart-trendlines name: Trendlines fileName: chart-trendlines.yaml @@ -136,7 +136,7 @@ https://raw.githubusercontent.com////samples/excel/10-chart/chart-trendlines.yaml group: Chart api_set: - ExcelAPI: 1.7 + ExcelApi: '1.7' - id: excel-range-conditional-formatting-basic name: Basic conditional formatting fileName: conditional-formatting-basic.yaml @@ -145,7 +145,7 @@ https://raw.githubusercontent.com////samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml group: Conditional Formatting api_set: - ExcelApi: 1.6 + ExcelApi: '1.6' - id: excel-range-conditional-formatting-advanced name: Advanced conditional formatting fileName: conditional-formatting-advanced.yaml @@ -154,7 +154,7 @@ https://raw.githubusercontent.com////samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml group: Conditional Formatting api_set: - ExcelApi: 1.6 + ExcelApi: '1.6' - id: excel-custom-functions-basic name: Basic custom function fileName: basic-function.yaml @@ -182,6 +182,15 @@ 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////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 @@ -190,7 +199,7 @@ https://raw.githubusercontent.com////samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml group: Custom XML Parts api_set: - ExcelApi: 1.5 + 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 @@ -199,7 +208,7 @@ https://raw.githubusercontent.com////samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml group: Custom XML Parts api_set: - ExcelApi: 1.5 + ExcelApi: '1.5' - id: excel-data-validation name: Data validation fileName: data-validation.yaml @@ -210,7 +219,7 @@ https://raw.githubusercontent.com////samples/excel/22-data-validation/data-validation.yaml group: Data Validation api_set: - ExcelApi: 1.8 + ExcelApi: '1.8' - id: excel-document-get-file-in-slices-async name: Get file using slicing fileName: get-file-in-slices-async.yaml @@ -221,7 +230,7 @@ https://raw.githubusercontent.com////samples/excel/26-document/get-file-in-slices-async.yaml group: Document api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-document-properties name: Properties fileName: properties.yaml @@ -230,7 +239,7 @@ https://raw.githubusercontent.com////samples/excel/26-document/properties.yaml group: Document api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' - id: excel-events-chartcollection-added-activated name: Chart collection events fileName: events-chartcollection-added-activated.yaml @@ -242,7 +251,7 @@ https://raw.githubusercontent.com////samples/excel/30-events/events-chartcollection-added-activated.yaml group: Events api_set: - ExcelApi: 1.8 + ExcelApi: '1.8' - id: excel-events-chart-activated name: Chart events fileName: events-chart-activated.yaml @@ -253,7 +262,7 @@ https://raw.githubusercontent.com////samples/excel/30-events/events-chart-activated.yaml group: Events api_set: - ExcelApi: 1.8 + ExcelApi: '1.8' - id: excel-events-data-changed name: Data change event fileName: data-changed.yaml @@ -262,7 +271,7 @@ https://raw.githubusercontent.com////samples/excel/30-events/data-changed.yaml group: Events api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-data-change-event-details name: Data change event details fileName: data-change-event-details.yaml @@ -271,7 +280,7 @@ https://raw.githubusercontent.com////samples/excel/30-events/data-change-event-details.yaml group: Events api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' - id: excel-events-disable-events name: Enable and disable events fileName: events-disable-events.yaml @@ -280,7 +289,7 @@ https://raw.githubusercontent.com////samples/excel/30-events/events-disable-events.yaml group: Events api_set: - ExcelAPI: 1.8 + ExcelApi: '1.8' - id: excel-events-table-changed name: Table events fileName: events-table-changed.yaml @@ -289,7 +298,7 @@ https://raw.githubusercontent.com////samples/excel/30-events/events-table-changed.yaml group: Events api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' - id: excel-events-tablecollection-changed name: Table collection events fileName: events-tablecollection-changed.yaml @@ -298,7 +307,7 @@ https://raw.githubusercontent.com////samples/excel/30-events/events-tablecollection-changed.yaml group: Events api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' - id: excel-events-workbook-and-worksheet-collection name: Workbook and worksheet collection events fileName: events-workbook-and-worksheet-collection.yaml @@ -309,7 +318,7 @@ https://raw.githubusercontent.com////samples/excel/30-events/events-workbook-and-worksheet-collection.yaml group: Events api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-events-worksheet name: Worksheet events fileName: events-worksheet.yaml @@ -320,7 +329,7 @@ https://raw.githubusercontent.com////samples/excel/30-events/events-worksheet.yaml group: Events api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-named-item-create-and-remove-named-item name: 'Create, access, and remove' fileName: create-and-remove-named-item.yaml @@ -329,7 +338,7 @@ https://raw.githubusercontent.com////samples/excel/34-named-item/create-and-remove-named-item.yaml group: Named Item api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-update-named-item name: Update fileName: update-named-item.yaml @@ -338,7 +347,7 @@ https://raw.githubusercontent.com////samples/excel/34-named-item/update-named-item.yaml group: Named Item api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' - id: excel-pivottable-calculations name: Calculations fileName: pivottable-calculations.yaml @@ -347,7 +356,7 @@ https://raw.githubusercontent.com////samples/excel/38-pivottable/pivottable-calculations.yaml group: PivotTable api_set: - ExcelApi: 1.8 + ExcelApi: '1.8' - id: excel-pivottable-create-and-modify name: Create and modify fileName: pivottable-create-and-modify.yaml @@ -356,7 +365,7 @@ https://raw.githubusercontent.com////samples/excel/38-pivottable/pivottable-create-and-modify.yaml group: PivotTable api_set: - ExcelApi: 1.8 + ExcelApi: '1.8' - id: excel-pivottable-filters-and-summaries name: Filters and summaries fileName: pivottable-filters-and-summaries.yaml @@ -365,7 +374,7 @@ https://raw.githubusercontent.com////samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml group: PivotTable api_set: - ExcelApi: 1.8 + ExcelApi: '1.8' - id: excel-range-copyfrom name: Copy and paste ranges fileName: range-copyfrom.yaml @@ -374,7 +383,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/range-copyfrom.yaml group: Range api_set: - ExcelAPI: 1.9 + ExcelApi: '1.9' - id: excel-range-areas name: Discontiguous ranges (RangeAreas) and special cells fileName: range-areas.yaml @@ -386,7 +395,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/range-areas.yaml group: Range api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' - id: excel-range-find name: Find text matches within a range fileName: range-find.yaml @@ -395,7 +404,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/range-find.yaml group: Range api_set: - ExcelAPI: 1.9 + ExcelApi: '1.9' - id: excel-range-formatting name: Formatting fileName: formatting.yaml @@ -404,7 +413,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/formatting.yaml group: Range api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-range-cell-properties name: Get and set cell properties fileName: cell-properties.yaml @@ -413,7 +422,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/cell-properties.yaml group: Range api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' - id: excel-range-hyperlink name: Hyperlinks fileName: range-hyperlink.yaml @@ -422,7 +431,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/range-hyperlink.yaml group: Range api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' - id: excel-range-insert-delete-and-clear-range name: 'Insert, delete, and clear' fileName: insert-delete-clear-range.yaml @@ -431,7 +440,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/insert-delete-clear-range.yaml group: Range api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-range-range-relationships name: Range relationships fileName: range-relationships.yaml @@ -442,7 +451,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/range-relationships.yaml group: Range api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-range-remove-duplicates name: Remove duplicates fileName: range-remove-duplicates.yaml @@ -451,7 +460,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/range-remove-duplicates.yaml group: Range api_set: - ExcelAPI: 1.9 + ExcelApi: '1.9' - id: excel-range-selected-range name: Selected range fileName: selected-range.yaml @@ -460,7 +469,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/selected-range.yaml group: Range api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' - id: excel-range-text-orientation name: Text orientation fileName: range-text-orientation.yaml @@ -469,7 +478,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/range-text-orientation.yaml group: Range api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' - id: excel-range-used-range name: Used range fileName: used-range.yaml @@ -480,7 +489,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/used-range.yaml group: Range api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-range-values-and-formulas name: Values and formulas fileName: set-get-values.yaml @@ -489,7 +498,7 @@ https://raw.githubusercontent.com////samples/excel/42-range/set-get-values.yaml group: Range api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-shape-create-and-delete name: Create and delete geometric shapes fileName: shape-create-and-delete.yaml @@ -500,7 +509,7 @@ https://raw.githubusercontent.com////samples/excel/44-shape/shape-create-and-delete.yaml group: Shape api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' - id: excel-shape-images name: Image shapes fileName: shape-images.yaml @@ -509,7 +518,7 @@ https://raw.githubusercontent.com////samples/excel/44-shape/shape-images.yaml group: Shape api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' - id: excel-shape-lines name: Lines fileName: shape-lines.yaml @@ -518,7 +527,7 @@ https://raw.githubusercontent.com////samples/excel/44-shape/shape-lines.yaml group: Shape api_set: - ExcelAPI: 1.9 + ExcelApi: '1.9' - id: excel-shape-move-and-order name: Move and order shapes fileName: shape-move-and-order.yaml @@ -527,7 +536,7 @@ https://raw.githubusercontent.com////samples/excel/44-shape/shape-move-and-order.yaml group: Shape api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' - id: excel-shape-groups name: Shape groups fileName: shape-groups.yaml @@ -536,7 +545,7 @@ https://raw.githubusercontent.com////samples/excel/44-shape/shape-groups.yaml group: Shape api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' - id: excel-shape-textboxes name: Textboxes fileName: shape-textboxes.yaml @@ -545,7 +554,7 @@ https://raw.githubusercontent.com////samples/excel/44-shape/shape-textboxes.yaml group: Shape api_set: - ExcelAPI: 1.9 + 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 @@ -554,7 +563,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/add-rows-and-columns-to-a-table.yaml group: Table api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-table-convert-range-to-table name: Convert a range fileName: convert-range-to-table.yaml @@ -563,7 +572,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/convert-range-to-table.yaml group: Table api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-table-create-table name: Create a table fileName: create-table.yaml @@ -572,7 +581,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/create-table.yaml group: Table api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-table-filter-data name: Filter data fileName: filter-data.yaml @@ -581,7 +590,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/filter-data.yaml group: Table api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-table-formatting name: Formatting fileName: formatting.yaml @@ -590,7 +599,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/formatting.yaml group: Table api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-table-get-data-from-table name: Get data fileName: get-data-from-table.yaml @@ -599,7 +608,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/get-data-from-table.yaml group: Table api_set: - ExcelApi: 1.4 + 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 @@ -608,7 +617,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml group: Table api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-table-import-json-data name: Import JSON data fileName: import-json-data.yaml @@ -617,7 +626,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/import-json-data.yaml group: Table api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-table-sort-data name: Sort data fileName: sort-data.yaml @@ -626,7 +635,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/sort-data.yaml group: Table api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-table-style name: Style fileName: style.yaml @@ -637,7 +646,7 @@ https://raw.githubusercontent.com////samples/excel/46-table/style.yaml group: Table api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' - id: excel-workbook-get-active-cell name: Active cell fileName: workbook-get-active-cell.yaml @@ -646,7 +655,7 @@ https://raw.githubusercontent.com////samples/excel/50-workbook/workbook-get-active-cell.yaml group: Workbook api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' - id: excel-settings-create-get-change-delete-settings name: Add-in settings fileName: create-get-change-delete-settings.yaml @@ -657,7 +666,7 @@ https://raw.githubusercontent.com////samples/excel/50-workbook/create-get-change-delete-settings.yaml group: Workbook api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-workbook-create-workbook name: Create workbook fileName: create-workbook.yaml @@ -668,7 +677,7 @@ https://raw.githubusercontent.com////samples/excel/50-workbook/create-workbook.yaml group: Workbook api_set: - ExcelApi: 1.8 + ExcelApi: '1.8' - id: excel-workbook-data-protection name: Data protection fileName: data-protection.yaml @@ -677,7 +686,7 @@ https://raw.githubusercontent.com////samples/excel/50-workbook/data-protection.yaml group: Workbook api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' - id: excel-worksheet-active-worksheet name: Active worksheet fileName: active-worksheet.yaml @@ -686,7 +695,7 @@ https://raw.githubusercontent.com////samples/excel/54-worksheet/active-worksheet.yaml group: Worksheet api_set: - ExcelApi: 1.1 + 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 @@ -695,7 +704,7 @@ https://raw.githubusercontent.com////samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml group: Worksheet api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' - id: excel-worksheet-auto-filter name: AutoFilter fileName: worksheet-auto-filter.yaml @@ -704,7 +713,7 @@ https://raw.githubusercontent.com////samples/excel/54-worksheet/worksheet-auto-filter.yaml group: Worksheet api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' - id: excel-worksheet-copy name: Copy worksheet fileName: worksheet-copy.yaml @@ -713,7 +722,7 @@ https://raw.githubusercontent.com////samples/excel/54-worksheet/worksheet-copy.yaml group: Worksheet api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' - id: excel-worksheet-find-all name: Find text matches within a worksheet fileName: worksheet-find-all.yaml @@ -722,7 +731,7 @@ https://raw.githubusercontent.com////samples/excel/54-worksheet/worksheet-find-all.yaml group: Worksheet api_set: - ExcelAPI: 1.9 + ExcelApi: '1.9' - id: excel-worksheet-freeze-panes name: Frozen panes fileName: worksheet-freeze-panes.yaml @@ -733,7 +742,7 @@ https://raw.githubusercontent.com////samples/excel/54-worksheet/worksheet-freeze-panes.yaml group: Worksheet api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' - id: excel-worksheet-worksheet-range-cell name: Get range or cell fileName: worksheet-range-cell.yaml @@ -744,7 +753,7 @@ https://raw.githubusercontent.com////samples/excel/54-worksheet/worksheet-range-cell.yaml group: Worksheet api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-worksheet-gridlines name: Gridlines fileName: gridlines.yaml @@ -753,7 +762,7 @@ https://raw.githubusercontent.com////samples/excel/54-worksheet/gridlines.yaml group: Worksheet api_set: - ExcelAPI: 1.8 + ExcelApi: '1.8' - id: excel-worksheet-list-worksheets name: List worksheets fileName: list-worksheets.yaml @@ -762,7 +771,7 @@ https://raw.githubusercontent.com////samples/excel/54-worksheet/list-worksheets.yaml group: Worksheet api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' - id: excel-worksheet-page-layout name: Page layout and print settings fileName: worksheet-page-layout.yaml @@ -771,7 +780,7 @@ https://raw.githubusercontent.com////samples/excel/54-worksheet/worksheet-page-layout.yaml group: Worksheet api_set: - ExcelAPI: 1.9 + ExcelApi: '1.9' - id: excel-worksheet-reference-worksheets-by-relative-position name: Reference worksheets by relative position fileName: reference-worksheets-by-relative-position.yaml @@ -780,7 +789,7 @@ https://raw.githubusercontent.com////samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml group: Worksheet api_set: - ExcelApi: 1.5 + ExcelApi: '1.5' - id: excel-worksheet-tab-color name: Tab color fileName: tab-color.yaml @@ -789,7 +798,7 @@ https://raw.githubusercontent.com////samples/excel/54-worksheet/tab-color.yaml group: Worksheet api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' - id: excel-worksheet-visibility name: Visibility fileName: worksheet-visibility.yaml @@ -798,7 +807,7 @@ https://raw.githubusercontent.com////samples/excel/54-worksheet/worksheet-visibility.yaml group: Worksheet api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' - id: excel-comment name: Comments fileName: comment.yaml @@ -854,7 +863,7 @@ https://raw.githubusercontent.com////samples/excel/90-scenarios/performance-optimization.yaml group: Scenarios api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' - id: excel-scenarios-report-generation name: Report generation fileName: report-generation.yaml @@ -865,7 +874,7 @@ https://raw.githubusercontent.com////samples/excel/90-scenarios/report-generation.yaml group: Scenarios api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' - id: excel-scenarios-multiple-property-set name: Set multiple properties fileName: multiple-property-set.yaml @@ -874,7 +883,7 @@ https://raw.githubusercontent.com////samples/excel/90-scenarios/multiple-property-set.yaml group: Scenarios api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-scenarios-working-with-dates name: Working with dates fileName: working-with-dates.yaml @@ -885,7 +894,7 @@ https://raw.githubusercontent.com////samples/excel/90-scenarios/working-with-dates.yaml group: Scenarios api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-just-for-fun-patterns name: Colorful Patterns fileName: patterns.yaml @@ -896,7 +905,7 @@ https://raw.githubusercontent.com////samples/excel/99-just-for-fun/patterns.yaml group: Just For Fun api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-just-for-fun-gradient name: Gradient fileName: gradient.yaml @@ -907,7 +916,7 @@ https://raw.githubusercontent.com////samples/excel/99-just-for-fun/gradient.yaml group: Just For Fun api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-just-for-fun-path-finder-game name: Path finder fileName: path-finder-game.yaml @@ -918,7 +927,7 @@ https://raw.githubusercontent.com////samples/excel/99-just-for-fun/path-finder-game.yaml group: Just For Fun api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' - id: excel-just-for-fun-tetrominos name: Tetromino stacking fileName: tetrominos.yaml @@ -927,7 +936,7 @@ https://raw.githubusercontent.com////samples/excel/99-just-for-fun/tetrominos.yaml group: Just For Fun api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' - id: excel-just-for-fun-color-wheel name: Wheel of colors fileName: color-wheel.yaml @@ -938,4 +947,4 @@ https://raw.githubusercontent.com////samples/excel/99-just-for-fun/color-wheel.yaml group: Just For Fun api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' diff --git a/playlists/word.yaml b/playlists/word.yaml index fe0dc5fb1..2d9498bc1 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -6,7 +6,7 @@ https://raw.githubusercontent.com////samples/word/01-basics/basic-api-call.yaml group: Basics api_set: - WordApi: 1.1 + WordApi: '1.1' - id: word-basics-api-call-es5 name: Basic API call (JavaScript) fileName: basic-api-call-es5.yaml @@ -15,7 +15,7 @@ https://raw.githubusercontent.com////samples/word/01-basics/basic-api-call-es5.yaml group: Basics api_set: - WordApi: 1.1 + WordApi: '1.1' - id: word-basics-basic-common-api-call name: Basic API call (Office 2013) fileName: basic-common-api-call.yaml @@ -35,7 +35,7 @@ https://raw.githubusercontent.com////samples/word/10-content-controls/insert-and-change-content-controls.yaml group: Content Controls api_set: - WordApi: 1.1 + WordApi: '1.1' - id: word-images-insert-and-get-pictures name: Use inline pictures fileName: insert-and-get-pictures.yaml @@ -44,7 +44,7 @@ https://raw.githubusercontent.com////samples/word/15-images/insert-and-get-pictures.yaml group: Images api_set: - WordApi: 1.1 + WordApi: '1.1' - id: word-lists-insert-list name: Create a list fileName: insert-list.yaml @@ -53,7 +53,7 @@ https://raw.githubusercontent.com////samples/word/20-lists/insert-list.yaml group: Lists api_set: - WordApi: 1.3 + WordApi: '1.3' - id: word-paragraph-get-paragraph-on-insertion-point name: Get paragraph from insertion point fileName: get-paragraph-on-insertion-point.yaml @@ -62,7 +62,7 @@ https://raw.githubusercontent.com////samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml group: Paragraph api_set: - WordApi: 1.1 + WordApi: '1.1' - id: word-paragraph-insert-line-and-page-breaks name: Insert breaks fileName: insert-line-and-page-breaks.yaml @@ -71,7 +71,7 @@ https://raw.githubusercontent.com////samples/word/25-paragraph/insert-line-and-page-breaks.yaml group: Paragraph api_set: - WordApi: 1.2 + WordApi: '1.2' - id: word-paragraph-insert-in-different-locations name: Insert content at different locations fileName: insert-in-different-locations.yaml @@ -80,7 +80,7 @@ https://raw.githubusercontent.com////samples/word/25-paragraph/insert-in-different-locations.yaml group: Paragraph api_set: - WordApi: 1.2 + WordApi: '1.2' - id: word-paragraph-insert-formatted-text name: Insert formatted text fileName: insert-formatted-text.yaml @@ -89,7 +89,7 @@ https://raw.githubusercontent.com////samples/word/25-paragraph/insert-formatted-text.yaml group: Paragraph api_set: - WordApi: 1.1 + WordApi: '1.1' - id: word-paragraph-insert-header-and-footer name: Insert a header and footer fileName: insert-header-and-footer.yaml @@ -98,7 +98,7 @@ https://raw.githubusercontent.com////samples/word/25-paragraph/insert-header-and-footer.yaml group: Paragraph api_set: - WordApi: 1.1 + WordApi: '1.1' - id: word-paragraph-paragraph-properties name: Paragraph properties fileName: paragraph-properties.yaml @@ -107,7 +107,7 @@ https://raw.githubusercontent.com////samples/word/25-paragraph/paragraph-properties.yaml group: Paragraph api_set: - WordApi: 1.2 + WordApi: '1.2' - id: word-paragraph-search name: Search fileName: search.yaml @@ -116,7 +116,7 @@ https://raw.githubusercontent.com////samples/word/25-paragraph/search.yaml group: Paragraph api_set: - WordApi: 1.1 + WordApi: '1.1' - id: word-paragraph-get-word-count name: Get word count fileName: get-word-count.yaml @@ -125,7 +125,7 @@ https://raw.githubusercontent.com////samples/word/25-paragraph/get-word-count.yaml group: Paragraph api_set: - WordApi: 1.1 + WordApi: '1.1' - id: word-properties-get-built-in-properties name: Built-in document properties fileName: get-built-in-properties.yaml @@ -134,7 +134,7 @@ https://raw.githubusercontent.com////samples/word/30-properties/get-built-in-properties.yaml group: Properties api_set: - WordApi: 1.1 + WordApi: '1.1' - id: word-properties-read-write-custom-document-properties name: Custom document properties fileName: read-write-custom-document-properties.yaml @@ -143,7 +143,7 @@ https://raw.githubusercontent.com////samples/word/30-properties/read-write-custom-document-properties.yaml group: Properties api_set: - WordApi: 1.3 + WordApi: '1.3' - id: word-ranges-scroll-to-range name: Scroll to a range fileName: scroll-to-range.yaml @@ -152,7 +152,7 @@ https://raw.githubusercontent.com////samples/word/35-ranges/scroll-to-range.yaml group: Ranges api_set: - WordApi: 1.2 + WordApi: '1.2' - id: word-ranges-split-words-of-first-paragraph name: Split a paragraph into ranges fileName: split-words-of-first-paragraph.yaml @@ -163,7 +163,7 @@ https://raw.githubusercontent.com////samples/word/35-ranges/split-words-of-first-paragraph.yaml group: Ranges api_set: - WordApi: 1.3 + WordApi: '1.3' - id: word-tables-table-cell-access name: Create and access a table fileName: table-cell-access.yaml @@ -172,7 +172,7 @@ https://raw.githubusercontent.com////samples/word/40-tables/table-cell-access.yaml group: Tables api_set: - WordApi: 1.3 + WordApi: '1.3' - id: word-scenarios-doc-assembly name: Document assembly fileName: doc-assembly.yaml @@ -181,7 +181,7 @@ https://raw.githubusercontent.com////samples/word/90-scenarios/doc-assembly.yaml group: Scenarios api_set: - WordApi: 1.1 + WordApi: '1.1' - id: word-scenarios-multiple-property-set name: Set multiple properties at once fileName: multiple-property-set.yaml @@ -190,4 +190,4 @@ https://raw.githubusercontent.com////samples/word/90-scenarios/multiple-property-set.yaml group: Scenarios api_set: - WordApi: 1.3 + WordApi: '1.3' diff --git a/samples/excel/01-basics/basic-api-call-es5.yaml b/samples/excel/01-basics/basic-api-call-es5.yaml index 799a3e4de..949160c1a 100644 --- a/samples/excel/01-basics/basic-api-call-es5.yaml +++ b/samples/excel/01-basics/basic-api-call-es5.yaml @@ -5,7 +5,7 @@ description: Performs a basic Excel API call using plain JavaScript & Promises. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' script: content: | $("#run").click(() => tryCatch(run)); diff --git a/samples/excel/01-basics/basic-api-call.yaml b/samples/excel/01-basics/basic-api-call.yaml index 23852b546..ff3e77392 100644 --- a/samples/excel/01-basics/basic-api-call.yaml +++ b/samples/excel/01-basics/basic-api-call.yaml @@ -5,7 +5,7 @@ description: Performs a basic Excel API call using TypeScript. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' script: content: | $("#run").click(() => tryCatch(run)); diff --git a/samples/excel/10-chart/chart-axis-formatting.yaml b/samples/excel/10-chart/chart-axis-formatting.yaml index eea0c6042..36cadc25a 100644 --- a/samples/excel/10-chart/chart-axis-formatting.yaml +++ b/samples/excel/10-chart/chart-axis-formatting.yaml @@ -4,7 +4,7 @@ name: Axis formatting description: Formats the vertical and horizontal axes in a chart. host: EXCEL api_set: - ExcelAPI: 1.8 + ExcelApi: '1.8' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/10-chart/chart-axis.yaml b/samples/excel/10-chart/chart-axis.yaml index efd14e6dc..f37d4ee45 100644 --- a/samples/excel/10-chart/chart-axis.yaml +++ b/samples/excel/10-chart/chart-axis.yaml @@ -4,7 +4,7 @@ name: Axis details description: 'Gets, sets, and removes axis unit, label, and title in a chart.' host: EXCEL api_set: - ExcelAPI: 1.7 + ExcelApi: '1.7' script: content: |- $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/10-chart/chart-create-several-charts.yaml b/samples/excel/10-chart/chart-create-several-charts.yaml index f0626b591..b5b7d7537 100644 --- a/samples/excel/10-chart/chart-create-several-charts.yaml +++ b/samples/excel/10-chart/chart-create-several-charts.yaml @@ -5,7 +5,7 @@ description: 'Creates column-clustered, line, XY-scatter, area, radar, pie, 3D, author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/10-chart/chart-formatting.yaml b/samples/excel/10-chart/chart-formatting.yaml index a3a8d6f4e..43858df03 100644 --- a/samples/excel/10-chart/chart-formatting.yaml +++ b/samples/excel/10-chart/chart-formatting.yaml @@ -4,7 +4,7 @@ name: Formatting description: Formats labels and lines of a slope chart. host: EXCEL api_set: - ExcelAPI: 1.8 + ExcelApi: '1.8' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/10-chart/chart-legend.yaml b/samples/excel/10-chart/chart-legend.yaml index 68b189b2f..b00d524f8 100644 --- a/samples/excel/10-chart/chart-legend.yaml +++ b/samples/excel/10-chart/chart-legend.yaml @@ -4,7 +4,7 @@ name: Legend description: Formats the legend's font. host: EXCEL api_set: - ExcelAPI: 1.7 + ExcelApi: '1.7' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/10-chart/chart-point.yaml b/samples/excel/10-chart/chart-point.yaml index dc770e43e..267698091 100644 --- a/samples/excel/10-chart/chart-point.yaml +++ b/samples/excel/10-chart/chart-point.yaml @@ -4,7 +4,7 @@ name: Points description: Sets the color of a point on the chart. host: EXCEL api_set: - ExcelAPI: 1.7 + ExcelApi: '1.7' script: content: |+ $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/10-chart/chart-series-markers.yaml b/samples/excel/10-chart/chart-series-markers.yaml index 610119126..0669879b9 100644 --- a/samples/excel/10-chart/chart-series-markers.yaml +++ b/samples/excel/10-chart/chart-series-markers.yaml @@ -4,7 +4,7 @@ name: Series markers description: Sets the chart series marker properties. host: EXCEL api_set: - ExcelAPI: 1.7 + ExcelApi: '1.7' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/10-chart/chart-series-plotorder.yaml b/samples/excel/10-chart/chart-series-plotorder.yaml index fc343b468..a26d2477f 100644 --- a/samples/excel/10-chart/chart-series-plotorder.yaml +++ b/samples/excel/10-chart/chart-series-plotorder.yaml @@ -4,7 +4,7 @@ name: Series plot order description: Orders the plotting of series in a chart. host: EXCEL api_set: - ExcelAPI: 1.7 + ExcelApi: '1.7' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/10-chart/chart-series.yaml b/samples/excel/10-chart/chart-series.yaml index 4378f8118..6cdf4cda5 100644 --- a/samples/excel/10-chart/chart-series.yaml +++ b/samples/excel/10-chart/chart-series.yaml @@ -4,7 +4,7 @@ name: Series description: Adds and deletes series in a chart. host: EXCEL api_set: - ExcelAPI: 1.7 + ExcelApi: '1.7' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/10-chart/chart-title-format.yaml b/samples/excel/10-chart/chart-title-format.yaml index 7978eae50..666104ed5 100644 --- a/samples/excel/10-chart/chart-title-format.yaml +++ b/samples/excel/10-chart/chart-title-format.yaml @@ -4,7 +4,7 @@ name: Title format description: Adjust a chart title's format. host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/10-chart/chart-trendlines.yaml b/samples/excel/10-chart/chart-trendlines.yaml index 8f8586089..bda6c33bd 100644 --- a/samples/excel/10-chart/chart-trendlines.yaml +++ b/samples/excel/10-chart/chart-trendlines.yaml @@ -4,7 +4,7 @@ name: Trendlines description: 'Adds, gets, and formats trendlines in a chart.' host: EXCEL api_set: - ExcelAPI: 1.7 + ExcelApi: '1.7' script: content: |+ $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/10-chart/create-doughnut-chart.yaml b/samples/excel/10-chart/create-doughnut-chart.yaml index b2200906d..e0011a6e1 100644 --- a/samples/excel/10-chart/create-doughnut-chart.yaml +++ b/samples/excel/10-chart/create-doughnut-chart.yaml @@ -5,7 +5,7 @@ description: Creates a doughnut chart and adjusts its size. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml index 31403d225..07bcbf4c2 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml @@ -4,7 +4,7 @@ name: Advanced conditional formatting description: Applies more than one conditional format on the same range. host: EXCEL api_set: - ExcelApi: 1.6 + ExcelApi: '1.6' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml index 3208a7b9b..365a9963e 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -4,7 +4,7 @@ name: Basic conditional formatting description: Applies common types of conditional formatting to ranges. host: EXCEL api_set: - ExcelApi: 1.6 + ExcelApi: '1.6' script: content: |- $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/16-custom-functions/web-call-function.yaml b/samples/excel/16-custom-functions/web-call-function.yaml new file mode 100644 index 000000000..faf57fbdb --- /dev/null +++ b/samples/excel/16-custom-functions/web-call-function.yaml @@ -0,0 +1,33 @@ +order: 4 +id: excel-custom-functions-web-call +name: Web request to GitHub API +description: Calls the GitHub API to get the star count for an org/user and repository. +host: EXCEL +api_set: + CustomFunctionsRuntime: 1.1 +script: + content: | + /** + * Gets the star count for a given org/user and repo. Try =GETSTARCOUNT("officedev","office-js") + * @customfunction + * @param userName Name of org or user. + * @param repoName Name of the repo. + * @return Number of stars. + */ + async function getStarCount(userName = "OfficeDev", repoName = "office-js") { + //You can change this URL to any web request you want to work with. + const url = `https://api.github.com/repos/${userName}/${repoName}`; + const response = await fetch(url); + + //Expect that status code is in 200-299 range + if (!response.ok) { + throw new Error(response.statusText); + } + const jsonResponse = await response.json(); + return jsonResponse.watchers_count; + } + 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/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 f5862b6c4..906c96685 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 @@ -5,7 +5,7 @@ description: 'Creates, sets, gets, and deletes a custom XML part.' author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.5 + ExcelApi: '1.5' script: content: | $("#create-custom-xml-part").click(() => tryCatch(createCustomXmlPart)); 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 31b224f9d..c42b996bd 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 @@ -5,7 +5,7 @@ description: Tests to see if there is only one XML part for a specified namespac author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.5 + ExcelApi: '1.5' script: content: | $("#create-custom-xml-part").click(() => tryCatch(createCustomXmlPart)); diff --git a/samples/excel/22-data-validation/data-validation.yaml b/samples/excel/22-data-validation/data-validation.yaml index 88f96ae7d..cabcc1092 100644 --- a/samples/excel/22-data-validation/data-validation.yaml +++ b/samples/excel/22-data-validation/data-validation.yaml @@ -4,7 +4,7 @@ name: Data validation 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 + ExcelApi: '1.8' script: content: | $("#setup").click(() => tryCatch(setup)); 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 31251d395..28c0c4e7f 100644 --- a/samples/excel/26-document/get-file-in-slices-async.yaml +++ b/samples/excel/26-document/get-file-in-slices-async.yaml @@ -4,7 +4,7 @@ name: Get file using slicing description: Uses slicing to get the byte array and base64-encoded string that represent the current document. host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: |- $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/26-document/properties.yaml b/samples/excel/26-document/properties.yaml index 67e36b50e..58cbe430d 100644 --- a/samples/excel/26-document/properties.yaml +++ b/samples/excel/26-document/properties.yaml @@ -4,7 +4,7 @@ name: Properties description: Gets and sets document properties. host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' script: content: | $("#set-doc-properties").click(() => tryCatch(setDocProperties)); diff --git a/samples/excel/30-events/data-change-event-details.yaml b/samples/excel/30-events/data-change-event-details.yaml index 1d03b8b23..1342f3622 100644 --- a/samples/excel/30-events/data-change-event-details.yaml +++ b/samples/excel/30-events/data-change-event-details.yaml @@ -4,7 +4,7 @@ name: Data change event details description: Uses the onChanged event of a table to determine the specifics of changes. host: EXCEL api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/30-events/data-changed.yaml b/samples/excel/30-events/data-changed.yaml index d644f3b86..8987658e2 100644 --- a/samples/excel/30-events/data-changed.yaml +++ b/samples/excel/30-events/data-changed.yaml @@ -5,7 +5,7 @@ description: Registers an event handler that runs when data is changed. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/30-events/events-chart-activated.yaml b/samples/excel/30-events/events-chart-activated.yaml index 3722acb94..febc4ccc8 100644 --- a/samples/excel/30-events/events-chart-activated.yaml +++ b/samples/excel/30-events/events-chart-activated.yaml @@ -4,7 +4,7 @@ name: Chart events description: Registers event handlers on an individual chart that run when the chart is activated or deactivated. host: EXCEL api_set: - ExcelApi: 1.8 + ExcelApi: '1.8' script: content: |- $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/30-events/events-chartcollection-added-activated.yaml b/samples/excel/30-events/events-chartcollection-added-activated.yaml index 4533e93cd..f96ad0f9f 100644 --- a/samples/excel/30-events/events-chartcollection-added-activated.yaml +++ b/samples/excel/30-events/events-chartcollection-added-activated.yaml @@ -4,7 +4,7 @@ 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.' host: EXCEL api_set: - ExcelApi: 1.8 + ExcelApi: '1.8' script: content: |- $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/30-events/events-disable-events.yaml b/samples/excel/30-events/events-disable-events.yaml index d5deb0fcf..371d24007 100644 --- a/samples/excel/30-events/events-disable-events.yaml +++ b/samples/excel/30-events/events-disable-events.yaml @@ -4,7 +4,7 @@ name: Enable and disable events description: Toggles event firing on and off. host: EXCEL api_set: - ExcelAPI: 1.8 + ExcelApi: '1.8' script: content: | $("#toggleEvents").click(() => tryCatch(toggleEvents)); diff --git a/samples/excel/30-events/events-table-changed.yaml b/samples/excel/30-events/events-table-changed.yaml index 5267fec82..577ddf501 100644 --- a/samples/excel/30-events/events-table-changed.yaml +++ b/samples/excel/30-events/events-table-changed.yaml @@ -4,7 +4,7 @@ name: Table events description: Registers event handlers that run when a table is changed or selected. host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' script: content: |+ $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/30-events/events-tablecollection-changed.yaml b/samples/excel/30-events/events-tablecollection-changed.yaml index 94a3e564e..cfd362dae 100644 --- a/samples/excel/30-events/events-tablecollection-changed.yaml +++ b/samples/excel/30-events/events-tablecollection-changed.yaml @@ -4,7 +4,7 @@ name: Table collection events description: Registers an event handler that runs when a table collection is changed. host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' script: content: |+ $("#setup").click(() => tryCatch(setup)); 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 0188c8ff7..3d2956273 100644 --- a/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml +++ b/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml @@ -5,7 +5,7 @@ description: 'Registers event handlers that run when a worksheet is added, activ author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: |- $("#register-on-add-handler").click(() => tryCatch(registerOnAddHandler)); diff --git a/samples/excel/30-events/events-worksheet.yaml b/samples/excel/30-events/events-worksheet.yaml index 2f14d6a82..6da26fcb9 100644 --- a/samples/excel/30-events/events-worksheet.yaml +++ b/samples/excel/30-events/events-worksheet.yaml @@ -5,7 +5,7 @@ description: 'Registers event handlers that run when data is changed in workshee author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: |- $("#setup").click(() => tryCatch(setup)); 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 4d5c620bb..c152eb15d 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 @@ -4,7 +4,7 @@ name: 'Create, access, and remove' description: 'Creates, accesses, and removes named items in a worksheet.' host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: |- $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/34-named-item/update-named-item.yaml b/samples/excel/34-named-item/update-named-item.yaml index 5d42d5d35..1cee72d6f 100644 --- a/samples/excel/34-named-item/update-named-item.yaml +++ b/samples/excel/34-named-item/update-named-item.yaml @@ -5,7 +5,7 @@ description: Creates and then updates a named item. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' script: content: |- $("#add-named-item").click(() => tryCatch(addNamedItem)); diff --git a/samples/excel/38-pivottable/pivottable-calculations.yaml b/samples/excel/38-pivottable/pivottable-calculations.yaml index 0e6eb9022..0efe9bded 100644 --- a/samples/excel/38-pivottable/pivottable-calculations.yaml +++ b/samples/excel/38-pivottable/pivottable-calculations.yaml @@ -5,7 +5,7 @@ description: Changes the calculations the PivotTable performs. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.8 + ExcelApi: '1.8' script: content: |- $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/38-pivottable/pivottable-create-and-modify.yaml b/samples/excel/38-pivottable/pivottable-create-and-modify.yaml index 9bb3d76dc..25ab95a16 100644 --- a/samples/excel/38-pivottable/pivottable-create-and-modify.yaml +++ b/samples/excel/38-pivottable/pivottable-create-and-modify.yaml @@ -5,7 +5,7 @@ description: Creates and modifies a PivotTable. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.8 + ExcelApi: '1.8' script: content: |- $("#deletePivot").click(() => tryCatch(deletePivot)); diff --git a/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml b/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml index 425d4df3d..5709b93d9 100644 --- a/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml +++ b/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml @@ -5,7 +5,7 @@ description: Filters PivotTable data and shows different summarizations. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.8 + ExcelApi: '1.8' script: content: |- $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/42-range/cell-properties.yaml b/samples/excel/42-range/cell-properties.yaml index bbcb162b7..3a530d49f 100644 --- a/samples/excel/42-range/cell-properties.yaml +++ b/samples/excel/42-range/cell-properties.yaml @@ -5,7 +5,7 @@ description: Sets different properties across a range then retrieves those prope author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' script: content: | $("#set-cell-properties").click(() => tryCatch(setCellProperties)); diff --git a/samples/excel/42-range/formatting.yaml b/samples/excel/42-range/formatting.yaml index 0c93397be..8a6cafe56 100644 --- a/samples/excel/42-range/formatting.yaml +++ b/samples/excel/42-range/formatting.yaml @@ -5,7 +5,7 @@ description: Formats a range. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/42-range/insert-delete-clear-range.yaml b/samples/excel/42-range/insert-delete-clear-range.yaml index aa39c6222..db776a767 100644 --- a/samples/excel/42-range/insert-delete-clear-range.yaml +++ b/samples/excel/42-range/insert-delete-clear-range.yaml @@ -5,7 +5,7 @@ description: 'Inserts, deletes, and clears a range.' author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/42-range/range-areas.yaml b/samples/excel/42-range/range-areas.yaml index dc279e288..d3eb0ac04 100644 --- a/samples/excel/42-range/range-areas.yaml +++ b/samples/excel/42-range/range-areas.yaml @@ -4,7 +4,7 @@ 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.' host: EXCEL api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' script: content: | $("#reset").click(() => tryCatch(reset)); diff --git a/samples/excel/42-range/range-copyfrom.yaml b/samples/excel/42-range/range-copyfrom.yaml index 3c04b8bf2..0b49a0479 100644 --- a/samples/excel/42-range/range-copyfrom.yaml +++ b/samples/excel/42-range/range-copyfrom.yaml @@ -4,7 +4,7 @@ name: Copy and paste ranges description: Copies data and formatting from one range to another. host: EXCEL api_set: - ExcelAPI: 1.9 + ExcelApi: '1.9' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/42-range/range-find.yaml b/samples/excel/42-range/range-find.yaml index 997ce437b..3c76be910 100644 --- a/samples/excel/42-range/range-find.yaml +++ b/samples/excel/42-range/range-find.yaml @@ -4,7 +4,7 @@ name: Find text matches within a range description: Finds a cell within a range based on string matching. host: EXCEL api_set: - ExcelAPI: 1.9 + ExcelApi: '1.9' script: content: |- $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/42-range/range-hyperlink.yaml b/samples/excel/42-range/range-hyperlink.yaml index 64a5dbac1..829c49369 100644 --- a/samples/excel/42-range/range-hyperlink.yaml +++ b/samples/excel/42-range/range-hyperlink.yaml @@ -5,7 +5,7 @@ description: 'Creates, updates, and clears hyperlinks in a range.' author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/42-range/range-relationships.yaml b/samples/excel/42-range/range-relationships.yaml index 59f300840..f7545d7a3 100644 --- a/samples/excel/42-range/range-relationships.yaml +++ b/samples/excel/42-range/range-relationships.yaml @@ -5,7 +5,7 @@ description: 'Shows relationships between ranges, such as bounding rectangles an author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/42-range/range-remove-duplicates.yaml b/samples/excel/42-range/range-remove-duplicates.yaml index 2fb23aefd..b034a6428 100644 --- a/samples/excel/42-range/range-remove-duplicates.yaml +++ b/samples/excel/42-range/range-remove-duplicates.yaml @@ -4,7 +4,7 @@ name: Remove duplicates description: Removes duplicate entries from a range. host: EXCEL api_set: - ExcelAPI: 1.9 + ExcelApi: '1.9' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/42-range/range-text-orientation.yaml b/samples/excel/42-range/range-text-orientation.yaml index 8abe42c8c..021b416ba 100644 --- a/samples/excel/42-range/range-text-orientation.yaml +++ b/samples/excel/42-range/range-text-orientation.yaml @@ -5,7 +5,7 @@ description: Gets and sets the text orientation within a range. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/42-range/selected-range.yaml b/samples/excel/42-range/selected-range.yaml index 6b584eb7f..375b08a34 100644 --- a/samples/excel/42-range/selected-range.yaml +++ b/samples/excel/42-range/selected-range.yaml @@ -5,7 +5,7 @@ description: Gets and sets the currently selected range. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' script: content: | $("#get-selection").click(() => tryCatch(getSelection)); diff --git a/samples/excel/42-range/set-get-values.yaml b/samples/excel/42-range/set-get-values.yaml index 3594f9f18..bb352dba9 100644 --- a/samples/excel/42-range/set-get-values.yaml +++ b/samples/excel/42-range/set-get-values.yaml @@ -5,7 +5,7 @@ description: Gets and sets values and formulas for a range. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/42-range/used-range.yaml b/samples/excel/42-range/used-range.yaml index 877430a06..741ba3fcb 100644 --- a/samples/excel/42-range/used-range.yaml +++ b/samples/excel/42-range/used-range.yaml @@ -5,7 +5,7 @@ description: Tests for a used range and creates a chart from a table only if the author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/44-shape/shape-create-and-delete.yaml b/samples/excel/44-shape/shape-create-and-delete.yaml index 51bdfb42e..3469e9ea7 100644 --- a/samples/excel/44-shape/shape-create-and-delete.yaml +++ b/samples/excel/44-shape/shape-create-and-delete.yaml @@ -4,7 +4,7 @@ name: Create and delete geometric shapes description: Creates a few different geometric shapes and deletes them from the worksheet. host: EXCEL api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/44-shape/shape-groups.yaml b/samples/excel/44-shape/shape-groups.yaml index b264c071c..b6d60f218 100644 --- a/samples/excel/44-shape/shape-groups.yaml +++ b/samples/excel/44-shape/shape-groups.yaml @@ -4,7 +4,7 @@ name: Shape groups description: Groups and ungroups shapes. host: EXCEL api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/44-shape/shape-images.yaml b/samples/excel/44-shape/shape-images.yaml index 8a569b43a..a955ab46b 100644 --- a/samples/excel/44-shape/shape-images.yaml +++ b/samples/excel/44-shape/shape-images.yaml @@ -4,7 +4,7 @@ name: Image shapes description: Creates and adjusts image-based shapes. host: EXCEL api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/44-shape/shape-lines.yaml b/samples/excel/44-shape/shape-lines.yaml index fd565f396..8fd8207fe 100644 --- a/samples/excel/44-shape/shape-lines.yaml +++ b/samples/excel/44-shape/shape-lines.yaml @@ -4,7 +4,7 @@ name: Lines description: Creates and modifies line shapes. host: EXCEL api_set: - ExcelAPI: 1.9 + ExcelApi: '1.9' script: content: |- $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/44-shape/shape-move-and-order.yaml b/samples/excel/44-shape/shape-move-and-order.yaml index 01e8641df..f5a6625e8 100644 --- a/samples/excel/44-shape/shape-move-and-order.yaml +++ b/samples/excel/44-shape/shape-move-and-order.yaml @@ -4,7 +4,7 @@ name: Move and order shapes description: Moves created shapes around the worksheet and adjusts their z-order. host: EXCEL api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/44-shape/shape-textboxes.yaml b/samples/excel/44-shape/shape-textboxes.yaml index 59f6aeb2c..114d919df 100644 --- a/samples/excel/44-shape/shape-textboxes.yaml +++ b/samples/excel/44-shape/shape-textboxes.yaml @@ -4,7 +4,7 @@ name: Textboxes description: Creates a textbox shape and works with the text in it and other shapes. host: EXCEL api_set: - ExcelAPI: 1.9 + ExcelApi: '1.9' script: content: | $("#setup").click(() => tryCatch(setup)); 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 a023706a7..006660870 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 @@ -5,7 +5,7 @@ description: Adds rows and columns to a table. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/46-table/convert-range-to-table.yaml b/samples/excel/46-table/convert-range-to-table.yaml index 3d097ca21..1e7924e1b 100644 --- a/samples/excel/46-table/convert-range-to-table.yaml +++ b/samples/excel/46-table/convert-range-to-table.yaml @@ -5,7 +5,7 @@ description: Converts a range to a table. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/46-table/create-table.yaml b/samples/excel/46-table/create-table.yaml index b8caf3b27..ab0340392 100644 --- a/samples/excel/46-table/create-table.yaml +++ b/samples/excel/46-table/create-table.yaml @@ -5,7 +5,7 @@ description: Creates a table. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#create-table").click(() => tryCatch(createTable)); diff --git a/samples/excel/46-table/filter-data.yaml b/samples/excel/46-table/filter-data.yaml index 6c5401794..229a37783 100644 --- a/samples/excel/46-table/filter-data.yaml +++ b/samples/excel/46-table/filter-data.yaml @@ -5,7 +5,7 @@ description: Filters table data. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/46-table/formatting.yaml b/samples/excel/46-table/formatting.yaml index 7a876f4c4..a40833fc5 100644 --- a/samples/excel/46-table/formatting.yaml +++ b/samples/excel/46-table/formatting.yaml @@ -5,7 +5,7 @@ description: Formats a table. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/46-table/get-data-from-table.yaml b/samples/excel/46-table/get-data-from-table.yaml index 421bf9580..3b48ea6df 100644 --- a/samples/excel/46-table/get-data-from-table.yaml +++ b/samples/excel/46-table/get-data-from-table.yaml @@ -5,7 +5,7 @@ description: Gets data from a table. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); 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 98958e3c8..c719c7902 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 @@ -5,7 +5,7 @@ description: Gets the visible range from a filtered table. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: |+ $("#create-table").click(() => tryCatch(createTable)); diff --git a/samples/excel/46-table/import-json-data.yaml b/samples/excel/46-table/import-json-data.yaml index ea1ed9d31..937fa71bb 100644 --- a/samples/excel/46-table/import-json-data.yaml +++ b/samples/excel/46-table/import-json-data.yaml @@ -5,7 +5,7 @@ description: Imports JSON data into a table. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#import-json-data").click(() => tryCatch(importJsonData)); diff --git a/samples/excel/46-table/sort-data.yaml b/samples/excel/46-table/sort-data.yaml index ad017725b..255f6015c 100644 --- a/samples/excel/46-table/sort-data.yaml +++ b/samples/excel/46-table/sort-data.yaml @@ -5,7 +5,7 @@ description: Sorts the data within a table. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/46-table/style.yaml b/samples/excel/46-table/style.yaml index ae65e0c93..8ef126ef8 100644 --- a/samples/excel/46-table/style.yaml +++ b/samples/excel/46-table/style.yaml @@ -5,7 +5,7 @@ description: 'Creates a custom style, applies a custom and built-in styles to a author: siewmoi host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' script: content: |+ $("#setup").click(() => tryCatch(setup)); 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 0f79490d0..bb393f18b 100644 --- a/samples/excel/50-workbook/create-get-change-delete-settings.yaml +++ b/samples/excel/50-workbook/create-get-change-delete-settings.yaml @@ -5,7 +5,7 @@ description: 'Creates, gets, changes, and deletes settings that are unique to th author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#create-setting").click(() => tryCatch(createSetting)); diff --git a/samples/excel/50-workbook/create-workbook.yaml b/samples/excel/50-workbook/create-workbook.yaml index bfd83ce52..34b85bca6 100644 --- a/samples/excel/50-workbook/create-workbook.yaml +++ b/samples/excel/50-workbook/create-workbook.yaml @@ -5,7 +5,7 @@ description: 'Creates a new, empty workbook and creates a new workbook by copyin author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.8 + ExcelApi: '1.8' script: content: | $("#create-new-blank-workbook").click(() => tryCatch(createBlankWorkbook)); diff --git a/samples/excel/50-workbook/data-protection.yaml b/samples/excel/50-workbook/data-protection.yaml index c0ec6cd07..5dc58c574 100644 --- a/samples/excel/50-workbook/data-protection.yaml +++ b/samples/excel/50-workbook/data-protection.yaml @@ -4,7 +4,7 @@ name: Data protection description: Protects data in a worksheet and the workbook structure. host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/50-workbook/workbook-get-active-cell.yaml b/samples/excel/50-workbook/workbook-get-active-cell.yaml index e6fd931c9..6b56e6c76 100644 --- a/samples/excel/50-workbook/workbook-get-active-cell.yaml +++ b/samples/excel/50-workbook/workbook-get-active-cell.yaml @@ -4,7 +4,7 @@ name: Active cell description: Gets the active cell of the entire workbook. host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' script: content: | $("#get-active-cell").click(() => tryCatch(run)); diff --git a/samples/excel/54-worksheet/active-worksheet.yaml b/samples/excel/54-worksheet/active-worksheet.yaml index 7b81a0512..cabb12f81 100644 --- a/samples/excel/54-worksheet/active-worksheet.yaml +++ b/samples/excel/54-worksheet/active-worksheet.yaml @@ -5,7 +5,7 @@ description: Gets and sets the active worksheet. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' script: content: |- $("#setup").click(() => tryCatch(setup)); 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 a1ad45ccc..904c01b51 100644 --- a/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml +++ b/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml @@ -5,7 +5,7 @@ description: 'Adds, deletes, renames, and moves a worksheet.' author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' script: content: | $("#add-worksheet").click(() => tryCatch(addWorksheet)); diff --git a/samples/excel/54-worksheet/gridlines.yaml b/samples/excel/54-worksheet/gridlines.yaml index cd050b281..ed691a166 100644 --- a/samples/excel/54-worksheet/gridlines.yaml +++ b/samples/excel/54-worksheet/gridlines.yaml @@ -5,7 +5,7 @@ description: Hides and shows a worksheet's gridlines. author: OfficeDev host: EXCEL api_set: - ExcelAPI: 1.8 + ExcelApi: '1.8' script: content: | $("#hide-gridlines").click(() => tryCatch(hideGridlines)); diff --git a/samples/excel/54-worksheet/list-worksheets.yaml b/samples/excel/54-worksheet/list-worksheets.yaml index a33432cfa..50e56f674 100644 --- a/samples/excel/54-worksheet/list-worksheets.yaml +++ b/samples/excel/54-worksheet/list-worksheets.yaml @@ -5,7 +5,7 @@ description: Lists the worksheets in the workbook. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' script: content: | $("#list-worksheets").click(() => tryCatch(listWorksheets)); 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 e2bb0c34f..da01e093a 100644 --- a/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml +++ b/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml @@ -5,7 +5,7 @@ description: Gets a worksheet by using its relative position within the workbook author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.5 + ExcelApi: '1.5' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/54-worksheet/tab-color.yaml b/samples/excel/54-worksheet/tab-color.yaml index cee3d8ec1..7e2656a1f 100644 --- a/samples/excel/54-worksheet/tab-color.yaml +++ b/samples/excel/54-worksheet/tab-color.yaml @@ -5,7 +5,7 @@ description: Gets and sets the tab color of a worksheet. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' script: content: | $("#set-tab-color-to-hex-color").click(() => tryCatch(setTabColorToHexColor)); diff --git a/samples/excel/54-worksheet/worksheet-auto-filter.yaml b/samples/excel/54-worksheet/worksheet-auto-filter.yaml index af2e1b0f4..bb4178d93 100644 --- a/samples/excel/54-worksheet/worksheet-auto-filter.yaml +++ b/samples/excel/54-worksheet/worksheet-auto-filter.yaml @@ -4,7 +4,7 @@ name: AutoFilter description: Adds an AutoFilter to a worksheet. host: EXCEL api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/54-worksheet/worksheet-copy.yaml b/samples/excel/54-worksheet/worksheet-copy.yaml index 602b9e6db..bd11af31b 100644 --- a/samples/excel/54-worksheet/worksheet-copy.yaml +++ b/samples/excel/54-worksheet/worksheet-copy.yaml @@ -4,7 +4,7 @@ name: Copy worksheet description: Copies the active worksheet to the specified location. host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/54-worksheet/worksheet-find-all.yaml b/samples/excel/54-worksheet/worksheet-find-all.yaml index 6e880ddce..de104f7e4 100644 --- a/samples/excel/54-worksheet/worksheet-find-all.yaml +++ b/samples/excel/54-worksheet/worksheet-find-all.yaml @@ -4,7 +4,7 @@ name: Find text matches within a worksheet description: Finds cells within a worksheet based on string matching. host: EXCEL api_set: - ExcelAPI: 1.9 + ExcelApi: '1.9' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/54-worksheet/worksheet-freeze-panes.yaml b/samples/excel/54-worksheet/worksheet-freeze-panes.yaml index e85e69095..dd8c0f0f8 100644 --- a/samples/excel/54-worksheet/worksheet-freeze-panes.yaml +++ b/samples/excel/54-worksheet/worksheet-freeze-panes.yaml @@ -5,7 +5,7 @@ description: 'Freezes columns, rows, and a range of cells. Gets the address of t author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.7 + ExcelApi: '1.7' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/54-worksheet/worksheet-page-layout.yaml b/samples/excel/54-worksheet/worksheet-page-layout.yaml index be0bd3f38..64c36ead9 100644 --- a/samples/excel/54-worksheet/worksheet-page-layout.yaml +++ b/samples/excel/54-worksheet/worksheet-page-layout.yaml @@ -4,7 +4,7 @@ name: Page layout and print settings description: Changes the page layout and other settings for printing a worksheet. host: EXCEL api_set: - ExcelAPI: 1.9 + ExcelApi: '1.9' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/54-worksheet/worksheet-range-cell.yaml b/samples/excel/54-worksheet/worksheet-range-cell.yaml index 98a656053..176fe8714 100644 --- a/samples/excel/54-worksheet/worksheet-range-cell.yaml +++ b/samples/excel/54-worksheet/worksheet-range-cell.yaml @@ -5,7 +5,7 @@ description: 'Gets the used range, the entire range of a worksheet, the specifie author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/54-worksheet/worksheet-visibility.yaml b/samples/excel/54-worksheet/worksheet-visibility.yaml index 3af9e502a..2dafa0639 100644 --- a/samples/excel/54-worksheet/worksheet-visibility.yaml +++ b/samples/excel/54-worksheet/worksheet-visibility.yaml @@ -5,7 +5,7 @@ description: Hides and unhides a worksheet. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' script: content: | $("#hide-worksheet").click(() => tryCatch(hideWorksheet)); diff --git a/samples/excel/90-scenarios/multiple-property-set.yaml b/samples/excel/90-scenarios/multiple-property-set.yaml index b06a14c07..fc6a4c6b6 100644 --- a/samples/excel/90-scenarios/multiple-property-set.yaml +++ b/samples/excel/90-scenarios/multiple-property-set.yaml @@ -5,7 +5,7 @@ description: Sets multiple properties at once with the API object set() method. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/90-scenarios/performance-optimization.yaml b/samples/excel/90-scenarios/performance-optimization.yaml index 0f68d85c4..08b21139e 100644 --- a/samples/excel/90-scenarios/performance-optimization.yaml +++ b/samples/excel/90-scenarios/performance-optimization.yaml @@ -4,7 +4,7 @@ name: Performance optimization description: Optimizes performance by untracking ranges and turning off screen painting. host: EXCEL api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/90-scenarios/report-generation.yaml b/samples/excel/90-scenarios/report-generation.yaml index 1ec74c5f8..2add48209 100644 --- a/samples/excel/90-scenarios/report-generation.yaml +++ b/samples/excel/90-scenarios/report-generation.yaml @@ -5,7 +5,7 @@ description: 'Writes data to the workbook, reads and applies basic formatting, a author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' script: content: | $("#create-report").click(() => tryCatch(createReport)); diff --git a/samples/excel/90-scenarios/working-with-dates.yaml b/samples/excel/90-scenarios/working-with-dates.yaml index 23466d5a8..5504a56a0 100644 --- a/samples/excel/90-scenarios/working-with-dates.yaml +++ b/samples/excel/90-scenarios/working-with-dates.yaml @@ -5,7 +5,7 @@ description: Shows how to work with dates by using the Moment JavaScript library author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | declare var moment: any; diff --git a/samples/excel/99-just-for-fun/color-wheel.yaml b/samples/excel/99-just-for-fun/color-wheel.yaml index a1af61e12..b63475a5b 100644 --- a/samples/excel/99-just-for-fun/color-wheel.yaml +++ b/samples/excel/99-just-for-fun/color-wheel.yaml @@ -5,7 +5,7 @@ description: Uses chart formatting to draw a wheel with changing colors. Contrib author: AlexanderZlatkovski host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#wheel").click(wheelGo); diff --git a/samples/excel/99-just-for-fun/gradient.yaml b/samples/excel/99-just-for-fun/gradient.yaml index 8438dff8d..d4720d92e 100644 --- a/samples/excel/99-just-for-fun/gradient.yaml +++ b/samples/excel/99-just-for-fun/gradient.yaml @@ -5,7 +5,7 @@ description: Uses range formatting and external libraries to draw a colorful gra author: AlexanderZlatkovski host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: |- initializeColorPickers(); 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 cc92693f3..b63a27b27 100644 --- a/samples/excel/99-just-for-fun/path-finder-game.yaml +++ b/samples/excel/99-just-for-fun/path-finder-game.yaml @@ -5,7 +5,7 @@ description: Uses range formatting to play a "pathfinder game". Contributed by A author: AlexanderZlatkovski host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: | $("#setup").click(setup); diff --git a/samples/excel/99-just-for-fun/patterns.yaml b/samples/excel/99-just-for-fun/patterns.yaml index 414f3f254..282e7cbaf 100644 --- a/samples/excel/99-just-for-fun/patterns.yaml +++ b/samples/excel/99-just-for-fun/patterns.yaml @@ -5,7 +5,7 @@ description: Uses range formatting to draw interesting pattern. Contributed by A author: AlexanderZlatkovski host: EXCEL api_set: - ExcelApi: 1.4 + ExcelApi: '1.4' script: content: |- $("#squares").click(() => tryCatch(drawSquares)); diff --git a/samples/excel/99-just-for-fun/tetrominos.yaml b/samples/excel/99-just-for-fun/tetrominos.yaml index 91d12f609..06ce38b90 100644 --- a/samples/excel/99-just-for-fun/tetrominos.yaml +++ b/samples/excel/99-just-for-fun/tetrominos.yaml @@ -5,7 +5,7 @@ description: Arrange moving tetromino shapes to form lines. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.9 + ExcelApi: '1.9' script: content: |- $("#run").click(() => { diff --git a/samples/excel/default.yaml b/samples/excel/default.yaml index acdd871ff..10ea5b1db 100644 --- a/samples/excel/default.yaml +++ b/samples/excel/default.yaml @@ -4,7 +4,7 @@ description: Create a new snippet from a blank template. author: OfficeDev host: EXCEL api_set: - ExcelApi: 1.1 + ExcelApi: '1.1' script: content: | $("#run").click(() => tryCatch(run)); diff --git a/samples/onenote/default.yaml b/samples/onenote/default.yaml index 6aca02824..57fbd0e52 100644 --- a/samples/onenote/default.yaml +++ b/samples/onenote/default.yaml @@ -4,7 +4,7 @@ description: Create a new snippet from a blank template. author: OfficeDev host: ONENOTE api_set: - OneNoteApi: 1.1 + OneNoteApi: '1.1' script: content: | $("#run").click(() => tryCatch(run)); diff --git a/samples/word/01-basics/basic-api-call-es5.yaml b/samples/word/01-basics/basic-api-call-es5.yaml index 84efe2cc5..c27dbdf75 100644 --- a/samples/word/01-basics/basic-api-call-es5.yaml +++ b/samples/word/01-basics/basic-api-call-es5.yaml @@ -5,7 +5,7 @@ description: Performs a basic Word API call using plain JavaScript & Promises. author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: '1.1' script: content: |- $("#run").click(() => tryCatch(run)); diff --git a/samples/word/01-basics/basic-api-call.yaml b/samples/word/01-basics/basic-api-call.yaml index b86d169d4..fd9f583c1 100644 --- a/samples/word/01-basics/basic-api-call.yaml +++ b/samples/word/01-basics/basic-api-call.yaml @@ -5,7 +5,7 @@ description: Performs a basic Word API call using TypeScript. author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: '1.1' script: content: |- $("#run").click(() => tryCatch(run)); 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 2177de93b..11ce1a84e 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 @@ -5,7 +5,7 @@ description: 'Inserts, updates, and retrieves content controls.' author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: '1.1' script: content: | $("#insert-controls").click(() => tryCatch(insertContentControls)); diff --git a/samples/word/15-images/insert-and-get-pictures.yaml b/samples/word/15-images/insert-and-get-pictures.yaml index e8aea919c..f2d2e0490 100644 --- a/samples/word/15-images/insert-and-get-pictures.yaml +++ b/samples/word/15-images/insert-and-get-pictures.yaml @@ -5,7 +5,7 @@ description: Inserts and gets inline pictures. author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: '1.1' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/word/20-lists/insert-list.yaml b/samples/word/20-lists/insert-list.yaml index 03c1fd450..660b30415 100644 --- a/samples/word/20-lists/insert-list.yaml +++ b/samples/word/20-lists/insert-list.yaml @@ -5,7 +5,7 @@ description: Inserts a new list into the document. author: OfficeDev host: WORD api_set: - WordApi: 1.3 + WordApi: '1.3' script: content: | $("#insert-controls").click(() => tryCatch(insertList)); 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 e87e2f00e..e5aa023ca 100644 --- a/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml +++ b/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -5,7 +5,7 @@ description: Gets the full paragraph containing the insertion point. author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: '1.1' script: content: | $("#get-paragraph").click(() => tryCatch(getParagraph)); diff --git a/samples/word/25-paragraph/get-word-count.yaml b/samples/word/25-paragraph/get-word-count.yaml index 8b872c185..23affcac2 100644 --- a/samples/word/25-paragraph/get-word-count.yaml +++ b/samples/word/25-paragraph/get-word-count.yaml @@ -5,7 +5,7 @@ description: Counts how many times a word or term appears in the document. author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: '1.1' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/word/25-paragraph/insert-formatted-text.yaml b/samples/word/25-paragraph/insert-formatted-text.yaml index 8f9c8f4e9..889aa2965 100644 --- a/samples/word/25-paragraph/insert-formatted-text.yaml +++ b/samples/word/25-paragraph/insert-formatted-text.yaml @@ -5,7 +5,7 @@ description: Formats text with pre-built and custom styles. author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: '1.1' script: content: |- $("#add-text").click(() => tryCatch(addFormattedText)); diff --git a/samples/word/25-paragraph/insert-header-and-footer.yaml b/samples/word/25-paragraph/insert-header-and-footer.yaml index efeced43b..c4d84a1ec 100644 --- a/samples/word/25-paragraph/insert-header-and-footer.yaml +++ b/samples/word/25-paragraph/insert-header-and-footer.yaml @@ -5,7 +5,7 @@ description: Inserts a header and a footer in the document. author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: '1.1' script: content: |- $("#add-header").click(() => tryCatch(addHeader)); diff --git a/samples/word/25-paragraph/insert-in-different-locations.yaml b/samples/word/25-paragraph/insert-in-different-locations.yaml index 16c6cb0d0..144f50bc3 100644 --- a/samples/word/25-paragraph/insert-in-different-locations.yaml +++ b/samples/word/25-paragraph/insert-in-different-locations.yaml @@ -5,7 +5,7 @@ description: Inserts content at different document locations. author: OfficeDev host: WORD api_set: - WordApi: 1.2 + WordApi: '1.2' script: content: | $("#setup").click(() => tryCatch(setup)); 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 ade410bb8..03dcbe85f 100644 --- a/samples/word/25-paragraph/insert-line-and-page-breaks.yaml +++ b/samples/word/25-paragraph/insert-line-and-page-breaks.yaml @@ -5,7 +5,7 @@ description: Inserts page and line breaks in a document. author: OfficeDev host: WORD api_set: - WordApi: 1.2 + WordApi: '1.2' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/word/25-paragraph/paragraph-properties.yaml b/samples/word/25-paragraph/paragraph-properties.yaml index b919c9634..525b97c2d 100644 --- a/samples/word/25-paragraph/paragraph-properties.yaml +++ b/samples/word/25-paragraph/paragraph-properties.yaml @@ -5,7 +5,7 @@ description: 'Sets indentation, space between paragraphs, and other paragraph pr author: OfficeDev host: WORD api_set: - WordApi: 1.2 + WordApi: '1.2' script: content: | $("#indent").click(() => tryCatch(indent)); diff --git a/samples/word/25-paragraph/search.yaml b/samples/word/25-paragraph/search.yaml index bcfbb8271..f6d37bc1d 100644 --- a/samples/word/25-paragraph/search.yaml +++ b/samples/word/25-paragraph/search.yaml @@ -5,7 +5,7 @@ description: Shows basic and advanced search capabilities. author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: '1.1' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/word/30-properties/get-built-in-properties.yaml b/samples/word/30-properties/get-built-in-properties.yaml index 302996153..1977ac9cf 100644 --- a/samples/word/30-properties/get-built-in-properties.yaml +++ b/samples/word/30-properties/get-built-in-properties.yaml @@ -5,7 +5,7 @@ description: Gets built-in document properties. author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: '1.1' script: content: |- $("#run").click(() => tryCatch(getProperties)); 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 7e8703459..6a933e24c 100644 --- a/samples/word/30-properties/read-write-custom-document-properties.yaml +++ b/samples/word/30-properties/read-write-custom-document-properties.yaml @@ -5,7 +5,7 @@ description: Adds and reads custom document properties of different types. author: OfficeDev host: WORD api_set: - WordApi: 1.3 + WordApi: '1.3' script: content: |- $("#number").click(() => tryCatch(insertNumericProperty)); diff --git a/samples/word/35-ranges/scroll-to-range.yaml b/samples/word/35-ranges/scroll-to-range.yaml index e89762c43..d91ac37ed 100644 --- a/samples/word/35-ranges/scroll-to-range.yaml +++ b/samples/word/35-ranges/scroll-to-range.yaml @@ -5,7 +5,7 @@ description: Scrolls to a range with and without selection. author: OfficeDev host: WORD api_set: - WordApi: 1.2 + WordApi: '1.2' script: content: | $("#setup").click(() => tryCatch(setup)); 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 8a04f0777..b0ed4a52c 100644 --- a/samples/word/35-ranges/split-words-of-first-paragraph.yaml +++ b/samples/word/35-ranges/split-words-of-first-paragraph.yaml @@ -5,7 +5,7 @@ description: 'Splits a paragraph into word ranges and then traverses all the ran author: OfficeDev host: WORD api_set: - WordApi: 1.3 + WordApi: '1.3' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/word/40-tables/table-cell-access.yaml b/samples/word/40-tables/table-cell-access.yaml index d37397dfa..265b537e1 100644 --- a/samples/word/40-tables/table-cell-access.yaml +++ b/samples/word/40-tables/table-cell-access.yaml @@ -5,7 +5,7 @@ description: Creates a table and accesses a specific cell. author: OfficeDev host: WORD api_set: - WordApi: 1.3 + WordApi: '1.3' script: content: |- $("#run").click(() => tryCatch(getTableCell)); diff --git a/samples/word/90-scenarios/doc-assembly.yaml b/samples/word/90-scenarios/doc-assembly.yaml index 4b73bf0f9..6ecee3ef0 100644 --- a/samples/word/90-scenarios/doc-assembly.yaml +++ b/samples/word/90-scenarios/doc-assembly.yaml @@ -5,7 +5,7 @@ description: Composes different parts of a Word document. author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: '1.1' script: content: |- $("#insert-header").click(() => tryCatch(insertHeader)); diff --git a/samples/word/90-scenarios/multiple-property-set.yaml b/samples/word/90-scenarios/multiple-property-set.yaml index a377fbc6d..d67bf9373 100644 --- a/samples/word/90-scenarios/multiple-property-set.yaml +++ b/samples/word/90-scenarios/multiple-property-set.yaml @@ -5,7 +5,7 @@ description: Sets multiple properties at once with the API object set() method. author: OfficeDev host: WORD api_set: - WordApi: 1.3 + WordApi: '1.3' script: content: | $("#set-multiple-properties-with-object").click(() => tryCatch(setMultiplePropertiesWithObject)); diff --git a/samples/word/default.yaml b/samples/word/default.yaml index 3c1583c9c..19d5ecb66 100644 --- a/samples/word/default.yaml +++ b/samples/word/default.yaml @@ -4,7 +4,7 @@ description: Create a new snippet from a blank template. author: OfficeDev host: WORD api_set: - WordApi: 1.1 + WordApi: '1.1' script: content: | $("#run").click(() => tryCatch(run)); diff --git a/view/excel.json b/view/excel.json index c76f4347d..010a2e7c7 100644 --- a/view/excel.json +++ b/view/excel.json @@ -19,6 +19,7 @@ "excel-custom-functions-basic": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/16-custom-functions/basic-function.yaml", "excel-custom-functions-volatile": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/16-custom-functions/volatile-function.yaml", "excel-custom-functions-streaming": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/16-custom-functions/streaming-function.yaml", + "excel-custom-functions-web-call": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml", "excel-chart-chart-title-ts": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/private-samples/excel/20-chart/chart-title-ts.yaml", From d390d5fd18895dbc9c119601f5a575592e5634f0 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Tue, 3 Sep 2019 13:59:27 -0700 Subject: [PATCH 199/660] Updating samples to avoid casting (#344) --- samples/excel/44-shape/shape-images.yaml | 4 ++-- samples/excel/50-workbook/create-workbook.yaml | 4 ++-- .../workbook-insert-external-worksheets.yaml | 4 ++-- samples/excel/99-just-for-fun/tetrominos.yaml | 4 ++-- samples/powerpoint/basics/create-presentation.yaml | 4 ++-- snippet-extractor-output/snippets.yaml | 8 ++++---- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/samples/excel/44-shape/shape-images.yaml b/samples/excel/44-shape/shape-images.yaml index a955ab46b..b70079c40 100644 --- a/samples/excel/44-shape/shape-images.yaml +++ b/samples/excel/44-shape/shape-images.yaml @@ -19,8 +19,8 @@ script: reader.onload = (event) => { Excel.run((context) => { - const startIndex = ((event.target).result).indexOf("base64,"); - const mybase64 = ((event.target).result).substr(startIndex + 7); + const startIndex = reader.result.toString().indexOf("base64,"); + const mybase64 = reader.result.toString().substr(startIndex + 7); const sheet = context.workbook.worksheets.getItem("Shapes"); const image = sheet.shapes.addImage(mybase64); image.name = "Image"; diff --git a/samples/excel/50-workbook/create-workbook.yaml b/samples/excel/50-workbook/create-workbook.yaml index 34b85bca6..e5b1ea75c 100644 --- a/samples/excel/50-workbook/create-workbook.yaml +++ b/samples/excel/50-workbook/create-workbook.yaml @@ -24,8 +24,8 @@ script: reader.onload = ((event) => { Excel.run(context => { // strip off the metadata before the base64-encoded string - const startIndex = (event.target).result.indexOf("base64,"); - const mybase64 = (event.target).result.substr(startIndex + 7); + const startIndex = reader.result.toString().indexOf("base64,"); + const mybase64 = reader.result.toString().substr(startIndex + 7); Excel.createWorkbook(mybase64); return context.sync(); 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 375e8dd65..2ae010e8e 100644 --- a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml +++ b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml @@ -16,8 +16,8 @@ script: reader.onload = (event) => { Excel.run((context) => { // strip off the metadata before the base64-encoded string - const startIndex = ((event.target).result).indexOf("base64,"); - const workbookContents = ((event.target).result).substr(startIndex + 7); + const startIndex = reader.result.toString().indexOf("base64,"); + const workbookContents = reader.result.toString().substr(startIndex + 7); const sheets = context.workbook.worksheets; sheets.addFromBase64( diff --git a/samples/excel/99-just-for-fun/tetrominos.yaml b/samples/excel/99-just-for-fun/tetrominos.yaml index 06ce38b90..19ee7a37f 100644 --- a/samples/excel/99-just-for-fun/tetrominos.yaml +++ b/samples/excel/99-just-for-fun/tetrominos.yaml @@ -23,8 +23,8 @@ script: const reader = new FileReader(); reader.onload = (event) => { - const startIndex = ((event.target).result).indexOf("base64,"); - const mybase64 = ((event.target).result).substr(startIndex + 7); + const startIndex = reader.result.toString().indexOf("base64,"); + const mybase64 = reader.result.toString().substr(startIndex + 7); backgroundPicture = mybase64; }; diff --git a/samples/powerpoint/basics/create-presentation.yaml b/samples/powerpoint/basics/create-presentation.yaml index 7113cca35..990e8bef9 100644 --- a/samples/powerpoint/basics/create-presentation.yaml +++ b/samples/powerpoint/basics/create-presentation.yaml @@ -21,8 +21,8 @@ script: reader.onload = (event) => { // strip off the metadata before the base64-encoded string - const startIndex = ((event.target).result).indexOf("base64,"); - const copyBase64 = ((event.target).result).substr(startIndex + 7); + const startIndex = reader.result.toString().indexOf("base64,"); + const copyBase64 = reader.result.toString().substr(startIndex + 7); PowerPoint.createPresentation(copyBase64); }; diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 2c9a21237..06fc8fd03 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -2699,8 +2699,8 @@ Excel.ShapeCollection.addImage: reader.onload = (event) => { Excel.run((context) => { - const startIndex = ((event.target).result).indexOf("base64,"); - const mybase64 = ((event.target).result).substr(startIndex + 7); + const startIndex = reader.result.toString().indexOf("base64,"); + const mybase64 = reader.result.toString().substr(startIndex + 7); const sheet = context.workbook.worksheets.getItem("Shapes"); const image = sheet.shapes.addImage(mybase64); image.name = "Image"; @@ -3276,8 +3276,8 @@ Excel.WorksheetCollection.addFromBase64: reader.onload = (event) => { Excel.run((context) => { // strip off the metadata before the base64-encoded string - const startIndex = ((event.target).result).indexOf("base64,"); - const workbookContents = ((event.target).result).substr(startIndex + 7); + const startIndex = reader.result.toString().indexOf("base64,"); + const workbookContents = reader.result.toString().substr(startIndex + 7); const sheets = context.workbook.worksheets; sheets.addFromBase64( From ebf77b67d61dfb7884a75e4a5a7d0aa22079c22a Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 4 Sep 2019 11:27:40 -0700 Subject: [PATCH 200/660] Addressing sample naming for ref doc snippets (#345) --- samples/excel/42-range/range-find.yaml | 30 +++++++++++++------------- snippet-extractor-output/snippets.yaml | 12 +++++------ 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/samples/excel/42-range/range-find.yaml b/samples/excel/42-range/range-find.yaml index 3c76be910..ccbab0e22 100644 --- a/samples/excel/42-range/range-find.yaml +++ b/samples/excel/42-range/range-find.yaml @@ -14,9 +14,9 @@ script: $("#toggleCase").click(() => tryCatch(toggleCase)); $("#toggleDirection").click(() => tryCatch(toggleDirection)); - let completeMatch = false; - let matchCase = false; - let searchDirection = Excel.SearchDirection.forward; + let isCompleteMatchToggle = false; + let isMatchCaseToggle = false; + let searchDirectionToggle = Excel.SearchDirection.forward; async function findText() { await Excel.run(async (context) => { @@ -27,9 +27,9 @@ script: // NOTE: If no match is found, an ItemNotFound error // is thrown when Range.find is evaluated. const foundRange = searchRange.find($("#searchText").text(), { - completeMatch: completeMatch, - matchCase: matchCase, - searchDirection: searchDirection + completeMatch: isCompleteMatchToggle, + matchCase: isMatchCaseToggle, + searchDirection: searchDirectionToggle }); foundRange.load("address"); @@ -46,9 +46,9 @@ script: const table = sheet.tables.getItem("ExpensesTable"); const searchRange = table.getRange(); const foundRange = searchRange.findOrNullObject($("#searchText").text(), { - completeMatch: completeMatch, - matchCase: matchCase, - searchDirection: searchDirection + completeMatch: isCompleteMatchToggle, + matchCase: isMatchCaseToggle, + searchDirection: searchDirectionToggle }); foundRange.load("address"); @@ -63,18 +63,18 @@ script: } function toggleComplete() { - completeMatch = !completeMatch; - console.log("Finding complete match = " + completeMatch); + isCompleteMatchToggle = !isCompleteMatchToggle; + console.log("Finding complete match = " + isCompleteMatchToggle); } function toggleCase() { - matchCase = !matchCase; - console.log("Finding matched case = " + matchCase); + isMatchCaseToggle = !isMatchCaseToggle; + console.log("Finding matched case = " + isMatchCaseToggle); } function toggleDirection() { - searchDirection = searchDirection === Excel.SearchDirection.forward ? Excel.SearchDirection.backwards : Excel.SearchDirection.forward; - console.log("Search direction = " + searchDirection); + searchDirectionToggle = searchDirectionToggle === Excel.SearchDirection.forward ? Excel.SearchDirection.backwards : Excel.SearchDirection.forward; + console.log("Search direction = " + searchDirectionToggle); } async function setup() { diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 06fc8fd03..c6ea772ac 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -1879,9 +1879,9 @@ Excel.Range.find: // NOTE: If no match is found, an ItemNotFound error // is thrown when Range.find is evaluated. const foundRange = searchRange.find($("#searchText").text(), { - completeMatch: completeMatch, - matchCase: matchCase, - searchDirection: searchDirection + completeMatch: isCompleteMatchToggle, + matchCase: isMatchCaseToggle, + searchDirection: searchDirectionToggle }); foundRange.load("address"); @@ -1897,9 +1897,9 @@ Excel.Range.findOrNullObject: const table = sheet.tables.getItem("ExpensesTable"); const searchRange = table.getRange(); const foundRange = searchRange.findOrNullObject($("#searchText").text(), { - completeMatch: completeMatch, - matchCase: matchCase, - searchDirection: searchDirection + completeMatch: isCompleteMatchToggle, + matchCase: isMatchCaseToggle, + searchDirection: searchDirectionToggle }); foundRange.load("address"); From ed24fd5ede72a7eff73a17c35ab9945a60f3c6f8 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 6 Sep 2019 14:00:45 -0700 Subject: [PATCH 201/660] [excel] (Sort, Events) Samples for onRowSorted and onColumnSorted (#347) * Initial work * Partial work * Running yarn start --- playlists/excel.yaml | 11 + samples/excel/85-preview-apis/comment.yaml | 2 +- .../event-column-and-row-sort.yaml | 201 ++++++++++++++++++ .../event-worksheet-single-click.yaml | 4 +- .../85-preview-apis/pivottable-slicer.yaml | 2 +- .../workbook-insert-external-worksheets.yaml | 2 +- .../workbook-save-and-close.yaml | 2 +- snippet-extractor-metadata/excel.xlsx | Bin 20234 -> 20376 bytes snippet-extractor-output/snippets.yaml | 70 ++++++ view/excel.json | 1 + 10 files changed, 289 insertions(+), 6 deletions(-) create mode 100644 samples/excel/85-preview-apis/event-column-and-row-sort.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 496a0f942..32e04c66c 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -808,6 +808,17 @@ group: Worksheet api_set: ExcelApi: '1.1' +- 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////samples/excel/85-preview-apis/event-column-and-row-sort.yaml + group: Preview APIs + api_set: + ExcelApi: '1.10' - id: excel-comment name: Comments fileName: comment.yaml diff --git a/samples/excel/85-preview-apis/comment.yaml b/samples/excel/85-preview-apis/comment.yaml index 1bf254336..80af2b001 100644 --- a/samples/excel/85-preview-apis/comment.yaml +++ b/samples/excel/85-preview-apis/comment.yaml @@ -1,4 +1,4 @@ -order: 1 +order: 2 id: excel-comment name: Comments description: 'Adds, edits, and removes comments and comment replies.' diff --git a/samples/excel/85-preview-apis/event-column-and-row-sort.yaml b/samples/excel/85-preview-apis/event-column-and-row-sort.yaml new file mode 100644 index 000000000..83d207254 --- /dev/null +++ b/samples/excel/85-preview-apis/event-column-and-row-sort.yaml @@ -0,0 +1,201 @@ +order: 1 +id: excel-event-column-and-row-sort +name: Column and row sort events +description: Registers event handlers that run when column or row sorting events occur in the current worksheet. +host: EXCEL +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")); + async function registerSortHandlers() { + registerRowSortHandler(); + registerColumnSortHandler(); + } + async function registerRowSortHandler() { + 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(); + }); + }); + }); + } + + async function registerColumnSortHandler() { + 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"; + } + + return context.sync(); + }); + }); + }); + } + + 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(); + }); + } + + 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(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + + const data = [ + ["Fruit Sales", "Q1", "Q2", "Q3", "Q4"], + ["Apples", 5000, 2000, 1000, 7500], + ["Pears", 2000, 900, 550, 1800], + ["Quinces", 500, 800, 400, 100], + ["Plums", 600, 700, 8000, 900] + ]; + + sheet.getRanges("A1:E1,A2:A5").format.font.bold = true; + const range = sheet.getRange("A1:E5"); + range.values = data; + range.format.autofitColumns(); + sheet.activate(); + + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback, option?) { + try { + await callback(option); + } 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 and use handlers for the column and row sorting events.

    +
    + +
    +

    Set up

    + +
    + +
    +

    Try it out

    + +

    The event handlers will highlight any rows or columns moved as part of a sorting operation.

    + + + + +
    + 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/event-worksheet-single-click.yaml b/samples/excel/85-preview-apis/event-worksheet-single-click.yaml index b7efc810c..4c4291264 100644 --- a/samples/excel/85-preview-apis/event-worksheet-single-click.yaml +++ b/samples/excel/85-preview-apis/event-worksheet-single-click.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 5 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. @@ -38,7 +38,7 @@ script: template: content: |-
    -

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

    +

    This sample shows how to register and use a handler for the single-click event.

    language: html style: content: |- diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index f51cae9b7cab19aedee9a6e84f4f72497a94b9f8..4c83565dd88a314923d9096aa8e4ce004e091f4c 100644 GIT binary patch delta 11871 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
    diff --git a/samples/excel/85-preview-apis/pivottable-slicer.yaml b/samples/excel/85-preview-apis/pivottable-slicer.yaml index 7be9d862a..1c7159fd1 100644 --- a/samples/excel/85-preview-apis/pivottable-slicer.yaml +++ b/samples/excel/85-preview-apis/pivottable-slicer.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 6 id: excel-pivottable-slicer name: Slicer description: Adds a slicer to a PivotTable. 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 2ae010e8e..582104363 100644 --- a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml +++ b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml @@ -1,4 +1,4 @@ -order: 2 +order: 3 id: excel-workbook-insert-external-worksheets name: Insert external worksheets description: Inserts worksheets from another workbook into the current workbook. diff --git a/samples/excel/85-preview-apis/workbook-save-and-close.yaml b/samples/excel/85-preview-apis/workbook-save-and-close.yaml index 795862101..584dff9e9 100644 --- a/samples/excel/85-preview-apis/workbook-save-and-close.yaml +++ b/samples/excel/85-preview-apis/workbook-save-and-close.yaml @@ -1,4 +1,4 @@ -order: 3 +order: 4 id: excel-workbook-save-and-close name: Save and close description: Saves and closes a workbook. diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index a71a7e153213f4fa57ab88411ef693f2fa046f4c..67254dfa609182476eca00d984e748fa764faee7 100644 GIT binary patch delta 9246 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 Snkd{LbX|=ec~9v-$o~ND&d}`u delta 9146 zcmZ8{Wl)_l(>CsQa1L%oic4`Q?(W6CxD<+W)iY8;5y zGx7;pb>Y3sOl{6>Lwo@}AZEI*`#LLX`f+gP*HA3Vs7D5ck0o_b6CbNiyX?$#hWxis zv@#jJ`1EEjQAEbs!I$fjYaxO)#HnTks74OaWHkdjU5=Ws;=4o_Us2N&qeAI*B4cO; zL}e*I0&<$_da?G1TH-oUu}F0umQXjnnnlgf5q zk+0zo)rhfm#PmML3(C)s&hrV@VfP~H!qZi51Mp~T@6n-ojYD4|C_Ts}u9eqGxI|cW z6&>S>Y~!n+mB3kLU?T1W8%;LJD7cW?UGFD3iYJy6UGy)A(!8G+Uo@t)`=E3r2a}Bj z63MrfC<=0Ek8Iswi-d^aJh3EVYo;-%vipFdVCeUgJ?&g4#qXby)>*Po+|cpsytnqL zfT8=iSb{2iR90@Qgo6x2e3l8OTJ?GNGd2Ub6_oZAWh_q603TgvdA9Gu4D#Rg?$WLV zlR0C7bKNVkomoFW1)+C#g*Ljg*sg`<=<_{!jhi{ba~-`)-#~>^fAz4X@z>H0vygJ^ z-6P9Sen6!BKG z-1(DNuRq1zDOV%)bfY$l`BwxutL&3hRL7&r7pI^47F|>E=l)mkhp;O0%W)-(WaYYA z5~akVf0?;<$r~ragA@7r;e2|lB7SmbrN6^KdZlq2=ukLeFuIS%F>~;spej?Kpa`KL zAO&zkAX+*!FzLkK@^;x3mD}yevxTt$7?CdJ_-zQt7s%K-f864^AKu&lo#!JKdwYB4{QSJ1V&~5J&?rFW9ygfljS%}- zbAI0r*k$u$Z&=}Z6{&IwbF2OIddNu;o`^iTZH2uB0N`Rmc?0Kq{O#D`Tld?O)64Wm zGq7eS0x(1mdy>dgbhST!`^mSyPe*ZoV$aD^wRukFg7f%ZL)N^fItA)@+u_1qYu`!9 z5asj~$i`SpnyeAF#~98rMEHGoLg{|ptt@p^RHjbNhtwwZx4XNOE3tb_o8M}Ditqh- z(DMa&QYP!BHRdFYn7x(Rs+K-Q8K`tXk+Syfe?d$bI zKRmIb&W7zW!|vnz_wO@z7`E72Yjz-I-1=45pzMp_$AkHalR~ z`@b_{u7xK4gI^ExV>#S^3Rx|roEDH0uxqHd%M>o`_=OR!+9W(J*zi^%G|Os#OOJ!- zDi$}3GSkXATaxOs$WdZ$>)KbYA$+usN2^!BvJxL${3T&dCW*`hC6m^(0RyxyvdUIf z7$1v&a*ae33@TR9O>D-Jas*hvi|41=gve8)OvCq?5t&?)p_&ADf-o4q>RR28m*)xE zb7x9n_d>-nrsDV(OQ0Jyuie8l0j2%>S_RkP~ZU<{JCaR zU+ZAd{>Q?@s^Hl*Y7*=g-73+)^+frZAkm~k%aGEB+{}=HDxDl@?NJ!UIO5z6jo}}p zwAmrSRXX>&f?nM?pR+xn6*#JMt#KSbpjxk1E;jy1fk*WZVSf1J^N}EWz%wx7^YYoe6{_Rp}T}MYB0ZjOrm3G>dzXB{rG*2C(&#V8d~m1Xs9H z1P=((*bhEon*@6j$!>}*UrY5-T4w}3$)Mp(%t_T^4Gm>2to(yyad*O3H_Ag^j+utP zS(iOk2X`!la!yW)n`&29yb6)mf|yj%H#K9s<*h1b)?$w1wWQkp-z7ecF zFH$quo!tMz78M?UGimE)!$k$PPu)uEIsR`k)V|h)b6ry%V6&+_iYfMqO@%aPD^vOY z_!qZ*tEq+j%V#}c|7YM)#@b%Lm*b{@`p%T66gc#zhO>L1e;80q$8E*He2PD6x|Z zZf`CDL8n?C(k=>q*)WCckH6Wg$4QX}8*e^An!A|ds@j1a6724z3Ks)34F8f$EUJ4x zX0>llx!u(M)`V(3Q!i=~LE%R?XtnH9{_Q&?b3I&eS#ur;I$=b{U6`3+M9$9?BJdSI zK0AYS58SJ=x`PGXoN1YzrW@e2=c(4!&%fSc3+C<28L8wI+Vio;BN1p)uIu_2tMSvQ zkRve05K;r^-h5NNZsdz1=w`z8q8-N^k#e=M$VpV}^!*6R3_&wQNxd7RB*khzG#q0o zZdh_@8t}wQDSmC36;f&QVc{jmijLs@RJ0#~)QuUR5cFcC^dHRAqKl=}U`Lx=nxM-n zX#YN?`>+;CZ%^o2iuHfx+VwpmXZ{_8Xq$X~D|x)~p7< zk)7ypCk5llCvpEtv^54y6yK(fR2bc4U_gNu@@R`c|Lnt)*T9Y#=@xVgEV9cE&V4{Q z@xlkjPUuWxTI!|NElAgl#GoNR9J5)l|M=uE5^#xcB<-R8-uzpn!5krhgi!2EeH-$jg*O^v>OBYf5Ndt0FBlyRr$QHJLBwlNN46>+pM>9vX{AJ81oLkGB4}s0d z`3r6EhBa+*jt+8&WsKnY?T~7Y(z4cH+KdT+FtMpqfYGlqR<2Ksag0#Cgd-2CQu%|W zTNbH)WxQOV4ZROHV;p;FW@R0eL$oM@yJNiBo(6W3pmoc@B8+pgjBC!gA(C_Rxj|*2 zTwpytzV&j_7;*isW33c$fgFveC96U_Xo|k3)H)ja#@v0`YPvrDI#6CgL!V$;hky)J z%Gq?D?vxHhhNJ(^ULJ_7q@gb`t*fSO+>2svy`=l&LmlkwIIM3|0;d5lSEW;V!empy zK*6+NDuMLW?o2u_R$BTG{Bth@~B< z7%MJ~C}NZg<{tUMZa~cfhLzL-n*sacfVR2mnsjN3sU*^RNy5ir4ksIkljAq6 zijl+$_@y#0QrjLqgCeTxN@RE4;ifnh(Lut062n3!oZlRa!QPBG6|;%CGjjcotOxbO z@dI;zYQt^yVK=psd9JLPXfnYF}H&`HN#zg8s#8^;2Ra(gX1|_wUUKf{L9)RF9=^;h?2ldmkYhk(luD1%$qh zx>##!4GZfc9VIILrl@dYX9HVDz0SkW%4Q10c^>lp7Y+M-aE&qY6$f=v`omynR)`8p zjl_PusZz>Ixz+yOC)p)>;0sZp88jQ5HVA&dKx{U8LFtaq0G0zrT9bB4K?%$TmIk&Bj;Z;Wnh({U#?(+jf3Az z*E6G6Cn6m#+1zE~>Jk4>A`yHG(Rdkan>X#8dZmV<)h2m4QK2nflivW0#-=g)o8ih8 zZiViAnvprWtZr9civ(a>IlCp$5sp_Qs}eATf~BG>6oCLlag*d~>2i5VnK8zM*c3YG z!{{FncGwrHqNf?S146hTEg=^Yzb+gYtSV)xzajSweKxxmK1$sevq+cPlBi0 zLHoB6cRzn+B9DNQO6zp`kBWY!C~W6EP}#nr6W!cv!PRl_ATzFT`79X+c+7F}Ka`{u zq9FZCmR;=f#eZ3QW}Ucdiu}U7xNXGD=mf)X`;`g=Ltq>O)P(_F@_T>Q==4&^Edg1l=G56 zd6wE5%nK+&$sa-ey_U4tkk3b|3dd@L#n}P<6s}fXjT&gz301bUSgf}^57|avJALjo-3nT%; zo|hg{lw^S~dqr2hJ*|D70<4%_2Nk9rX z%VuBnNRY;`&Z|{2s~x%%;*LvRlvQ~PomR$2DrxN)g+4EnqwhAKLAozK(eccJ!*fBK zb4mchxXmNZnYX@7iZDjJ8OBy7bs`TSYK*eWEcK1l$XiT7jVFRlSaHZI>LB-i3n&A| z`uz(vja~ZCFpg8zd!h)A7c}{}%@NVgRXPY}ygQj=u82jh;AH245|*Ro4c#OE<=E0!GV($Uy{3ADOViv3_D*im=D2PrC&Q66YYd;7aPvt*b4EZKa>cJc&N zvz(N#f==Wfh>tFG}^Ku=uBbE=n(}qkMn-WR?!(Y zjwaF?O*A$jqfVdQn$J^Xro;Z{7Ez(-3m0j~PfxVD?TgntBgQ=sszTdaPMIJNt?}rT zWIX(LcA0|iX7zBqOIej*y6%)Is}3M|d=jH?uLydH{64XcLl~LyN~h9tK58!+(9utQm{d*BWT@M(f4fmPFNmdeOl(Gr;)d zx=)}hPS*6BneF*n2gh(hyQB^S*;G9e>ei9-ns^^|fSX+MEz#Z>kTy-%u>f+WUZ`wG z`sMIrUeFigOR8AP=5)e>>v~rOhIE4JWrZXEi4QMMiCw6es5r772kQ{5Id%G1ih9A9 z<%dEsZZhDEYJ4nvEDx=zSp#six!v@=o=Doeal09K z6y0|%l9hj1Yd!6xKV@|ez9}j`n>ky3#^jHwGUqaPxZQ6 z_IG>Ak9F-^XR%xFPQEtxOOsb8*9#8a8-k=u!)ND5mX{rC_A`p*~X;t`?Ues z{CekUzJEXE_RXWEZNt}hj64frVe4*Dv99ZU@|wKs?5^8Q=;`tu3JMC+FO3ZmP{3+P zp=v=v>01KjH=;p7WpYDwnaO}PUTi>Q`z?&(V%0Tj(A4>ByHjE@di*ER)6>nf@qh%v z3~k+CiE7yQHQihB^>*JvUAC~Dc}b@35ns>mm)v~+R%Y=uc>+(@%8p9PuIj5}T;um8 zm{Apfn&)x0%8J!~+TT3S$J~{40}lrxo1R-)#*RB%In`~|uS+XwtlEHA)r)e|0=iaq zrCtTbd)r=`W0qF3k@ZH^Nkg;a=8IR8RxzItgZ-B4g)-nBW%e}mvT+jiu$R*8s3g*H zz2Dz{-Y;3z0k|*vdbmrG{~2a&(_1+{om#m&HC&=ITKH1Jc0JTsbzWU@Qml9MKGC(V zpO!8vsnGb|rdxSa%K!|zIe<;&o>o4kl&cebTwrobW;tF`TMF@8R6K}6agtllvbyY8WRa9L*ILRlG+J(3v_PyYq9`{Fj&4_5mRo8wBZ+Y3an&$!(oz-k$zu7e z_WNd4_{6k1H9s0EkynQL>C348u^!u36i2v`P4nt@jK8A|gP#D{@M#&_kHK(E)Zx%_ zUD0s^56nA1+K45LBw`8lkaQ`Cc0Y^fce@!qw{`ixkniT4chgBKh?s5#Eotgxtgg3C zO2%{X?zVljS|VSvZ`Li9cHowfhfTg!MJ}0Hhuo!p#>k z|LG`aOo1z*(V165E9V_hb@VN%YSD?iNxZH|;$$k7V}Z6`I( zGFhuiO`luWv9_fmZ0yG!pPtLXr*p%U9z>FRr_Bi`X0Z>d1vYG?qdhd3Fq;MRa9U@HIRER5bCasoi3HwVJHx%@j3_nuPCQ zI{F4nC9c8|3WAI#FI^S|g>B8P<|pN!M5L;p#(qcnCGtr2;en`p-)7#&OrhqdOGEnL zi_3!_keREA;fAI)n_wAW%749moFMky>=)~$`f0)fkh-|8R0_rq+=f= z8FBGZ3wiKv$jBJ9$)1yaA9oe}O?SzuWMvP3nISzK-6z%fi!%nG(ZJKpqVwY4HTdDx zkdo2wa4M2? zp4IP6TYJwAudWG*aOh6+?N5ei#|NEd!0Zy1u7AsoW_P%JJn*1&I+25QvPTk&r~l@D zs(oAeX*@JP);Q>QDu@EW-y0DJ*qYka^wIo}Mw`gLXXKZ2Fte{slt;RYx_i`SuJHe8 zSc*nliw*!kKXSAD6eGSNx;+>`|Nhx?HO?#zoq~wOcCX8tj&YydUPnT)FoHqk8W zV$Je!%yJKMw3?5E>RYYBE@MqrWr57rYJ*)+Tu(_pVr^@;0KW|r?D*99nQJE^!X zn7M;<$(!KbC|>+u!^()R$T#ZX36-!o?q(VGM8!tdhIEgCqWa1zQ{j(XYdBj5zJ;K< z3Fb6qEWPXJH#PE=49r&OTVvOiYY@(b*!Yz$aJCe;x^dF&?P^eXxc3K`s|>*xK9Nhu z>ZD(qAhVAnF(DnVMmbmDwiue~Q#jM5WCc}}rzBS)wh^AF`f#qfP33$5=ssIep&YjBpEuYw;cb9QKj9sQ0YgiL)%1odM1{lB=J8X7$A747Z(U)Tw-5&2BZgW;LnG_Y z*=1S#au{%_^z2P9qKLdMt{98c!^rkwh1{T~$&InN6<7B&iWS_Ae}%CeM!NDCCMh4|lDsibO!jA~ac1=A#Qzk8KAKrqU zqbjN+Q3n91qrnBNyhhY2da%_ReqFDR$SUzLnw|woCEe9Uw??|xS|jOwQwANShU61f zG)?j^6C8y+mpyZu39J&rBjumgl4R)!V`OUE(abZ?#A0bgiE=KUc|?Eh$?x-=aM!!6 zXR;3WZ&dyf+Rl*A(+SWoPf@3o()YwyxHI}^Y;VApcXhl239DB@PHK8w6zcepus9o< z8m98x$X>zjE+|lo_Vng;uB%pIdA>aW@jFGpyPG^>c!nzhLD~tOUCvM4>gC&WitcY; zZ<@{A`dJcxE~^=*((ZPKzfy~xLlR7>u1LM3xodb}2FPz@P;jr^`j|_4lDb@~arji~ zSOx%JYmForwjp#R%WajmPwZsGZIxo8b&iYuoI~Ytlo@)Ka4i$n!zEJp9#=Nt-uMo$ zsSabXeeh?o4@QfNoW@^hFVIB``u(junDk}aVHj6G5lqGX#xbM&xr;NBTBx{d)xx+k zJ`(SJmf%;c(JQOc!QXtUIos7a7k)ka&kFz(B+OFMQea->L}x?8MdTk=a!Mm)l6by;Wfl?W7fzza!S2r*w!L2I)e4Ark!h;>Es*@l(l;uSkKIUlo9O z?m;!wswsQgSqvVSK1#1W`-_cQ(u$5jNn^Ad;sy_KxC1I475iBb9@ao_h zg-SGO)OVl~J01u=#?qLbhuFF>J({rE1X%m`Yg!-Xd`2o_32O;(Y?b`|p-~*~F+c=O z5IWo{Cokrc?@DLrj3Md>wX8TnMKE8jn1?`KSMJ~`lnWUf9HFocnH3A7%1Wzj=CasX zBX6Bhe@%t(3;BP40&VzJ;o%%Tjy56PB1}LBCl!M#X8(7J6KF!2NGc^vAr5R(P_jfo zAr7MCduQPpV;w|1f%qr3m8H8SclYLf*8M;-zKaf&Pl*3;*q2YH9{T>|_jn5aCFsQ9 z#nAxP9@M36ugBZ*_1dsl@4LHPf?RIP%*U>3y-iMET4~{B9=$Rz%hLj{o7+-eTUTJb z^++Ix0{2k}2bPy=;^_(a>{aY{CZ#j(XD%feu9TVri+}m#)#OJ~=u(bvT+`8s@)mHh zAaH5;OU|a1TN{5OWv#08Q6Pr*1`oh?;HpvSrK`(F9zVv8$@)2{(U2wZ77NMzz*SJ2 z8{Wq@Nu9b+6e>%knqFvvz5RfBi2y9F?SBd)ly=~{1m_LMcKWo_f9x{wN1H|oG~Fh$ z)+xEzy)I6kUNk##vaQ-4`w{v2-TqO$HnSlsA^8wZd-L&C);w(w#H<2Ukx#*fMjt>_ z1rvUq&omaU(m@6IcW2s`O$@R1E6WTpy;y_r3VleuwF=lI zQZ0;F*$Sfq#aYx^tJb9fIL@-4Gmmh38KrdQ{Rent`g!N)&UF!A8QqOys657MOnhR%0TOIbsckyba;9y-Z&QZCWpl! z>&NNSyP@KpOb{?Y*kv(cmRQ6kiB+O$K{O6i3_>x%noBKA`os8{fV8b^vEO%GnO)=r zL>leOso@L08tQPpTh+?`zPtH~h%u z_4Vfpx0?|utKtHW*be}5#efG_&drA1kSfLi4fL_$hHNRmV9IYbSHr?(*wff}Bo0V~ z4>hkE8n=B{)FXNEZb#pj33u$g&-4?zFFtyq7~e*WW@b#L#2%!F8vLkQY9G2-A;~Kq z;HH4ArG>)b3KzBic&0eUy_Xz7pl;1p4MpscSf6x)c9uDhYc}pqkrvY-?&+*fG@8je z3Ej^`7<|QLr$jYmAPNB{rvKML)v{6P@kzesnAtE?I!tlT|3Dq%`3$ zq@_+*I5NMRHE(U%qB#Tqy}5iJcxJns(G`z2<0rxlxB8s&{MUWA8|uHupFmO<;r}XM z@swABCWMU0GZX*6#R31=kpJD}Ay^8M&=e3Yh0oAAkQ4<9lK(@EKtbXDZ`^+dhfI)p zh0ickd=L{w97q&DI;2Da3z8y$^^ZvTpZ3iEPpJfL2dPz5fe97*FA`5l3?@bxqN~J5 z{GYq2%#1pNPRoE%c6L`U+Uq)>o{g0lIC0sW87|Mm}}kV_>Y7;gy(tFj<8AH+`i L1A>m+e^mbqC>E3h diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index c6ea772ac..8ce7778fc 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -3491,6 +3491,76 @@ Excel.Worksheet.onSingleClicked: await context.sync(); }); +Excel.Range.sort: + - |- + 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.Worksheet.onRowSorted: + - |- + 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.onColumnSorted: + - |- + 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"; + } + + return context.sync(); + }); + }); + }); Word.InlinePicture.getBase64ImageSrc: - |- await Word.run(async (context) => { diff --git a/view/excel.json b/view/excel.json index 010a2e7c7..3ddb91f4f 100644 --- a/view/excel.json +++ b/view/excel.json @@ -86,6 +86,7 @@ "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-visibility.yaml", + "excel-event-column-and-row-sort": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/event-column-and-row-sort.yaml", "excel-comment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/comment.yaml", "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", "excel-workbook-save-and-close": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-save-and-close.yaml", From 7bbe313d33aa6d61c4da7780e9990aa6bce06c02 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 11 Sep 2019 11:36:21 -0700 Subject: [PATCH 202/660] Mapping snippets to new API Documenter UID format (#348) --- config/build.documentation.ts | 9 +- snippet-extractor-metadata/excel.xlsx | Bin 20376 -> 21069 bytes snippet-extractor-metadata/word.xlsx | Bin 12651 -> 12900 bytes snippet-extractor-output/snippets.yaml | 457 +++++++++++++------------ 4 files changed, 235 insertions(+), 231 deletions(-) diff --git a/config/build.documentation.ts b/config/build.documentation.ts index 99684e5d6..f324eaf8d 100644 --- a/config/build.documentation.ts +++ b/config/build.documentation.ts @@ -10,10 +10,10 @@ import parseXlsx from 'excel'; const SNIPPET_EXTRACTOR_METADATA_FOLDER_NAME = 'snippet-extractor-metadata'; interface MappingFileRowData { - class: string; member: string; snippetId: string; snippetFunction: string + class: string; member: string; memberId: string, snippetId: string; snippetFunction: string } const headerNames: (keyof MappingFileRowData)[] = - ['class', 'member', 'snippetId', 'snippetFunction']; + ['class', 'member', 'memberId', 'snippetId', 'snippetFunction']; export async function buildReferenceDocSnippetExtracts( @@ -93,7 +93,10 @@ async function buildSnippetExtractsPerHost( .filter(item => item) .forEach((text, index) => { const row = lines[index]; - const fullName = `${hostName}.${row.class.trim()}.${row.member.trim()}`; + let fullName = `${hostName}.${row.class.trim()}#${row.member.trim()}:member`; + if (row.memberId) { + fullName += `(${row.memberId})`; + } if (!allSnippetData[fullName]) { allSnippetData[fullName] = []; } diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 67254dfa609182476eca00d984e748fa764faee7..d2c05993e3b24a8024f639e8cdd2c1e72154ba1a 100644 GIT binary patch delta 12436 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 Y3HXH{1r%2VCV^3^;=Cjnk$*J*0k9rddH?_b delta 4217 zcmZ9PXHXLklg0yqKmesf0!Z&g2t|5RqzMQry@eKf5s)4tML?<;LAvy2KzawINbgmV zP{q*Uj}VZS^WM9g_nq5MJF~kpyC0tU?eo)d*S>~`46IqzLRm`;0L-8%$oNp%wnS;q z3hXROyej9bkr*qVNX9RN8PVlCgf1ze?Y4u09VS}V%cH;*EV65+zMvW-W}5p(KXMSP z$>i;89*4-y{~&9-2dz^W%ZfCvTLUltzMVU!ic-MpGzP!%bs$ok;VYkQOS)4w^2nzC zK%=RHXhgR%%hjy1ai%f8z7QoMzwlzyFcDaWC{!nlHtQsNP;J7Edz5)5<9$M;@lU*K z{z_WmK7WG(irQ*yw$yvyYFx^lYynvW9HkGAdHwrE0gt{0e)qdu`M8xZBeT3UkI?e-rYt1d>-Z?-Xy`9-MkECQxAB zo!`|QzY@fWI1yof?dZN18#(h4cw>CTxGRDLPUo@pgwtru$~u!VKHmO3Jsf$Ku*qlG zg0SQyv16VH=>(+ob$a`v7}1vliPKI@Yl8t5xbHSwuL6D|BJPw(i4UgB@w#4+$Ujxj zc{IO!EN=qL<(#-q*k)zrr|f<%9?#5@a{k9T`%j8popPqnXjKw ze1rUuww`c{5Za|zSeJJCS9iHS-aS=UitYSlg?YrOSI)umP{=Kg54H7=(&_b}ZA=px zd6O30?2VuOQ`E0gO1eL5_Aol%a0lroYWTfz6RGs8Hd@aSnWgLJ3yx4o#kU|MW>T2C z{7iR_u{^_fJqP*wk*+RXt5IEhCvujZbZT#cf@s$V>!1I+Xp#j+N==mDTbqkBIS?bF zr}`0kz(j%;D?o@=l`~J_qn){Ai8sTD>|_e+$aq-6aF&a6mC{Zhle;~8#ff@GqK9pz|XY>M4@^SX#qc^uONs$C?N@V(EBLW@^M3@l!=#zZ+nfHMd{v~v=r9M z2~`!WMw9XHVkKUAk?sEQlE&+`8{CJ3JoD2k6{BIX8pCyeQzo#wBKI%@2xvoRH4TZ&VzxKo5(NTm` zA;ksn`FQ{MR_=-}>v35jk#YDs*ND`OaMGelYPG6rI!2e>H}3M4D0()eV)X+hp|g2l z@NfzpFIr_bmVCt|s)$OOkh@B&_kDZf1|CoyqB2)tL=N|n1e7ju_`Nc{>$wBfcB2>``mOMs{I^+H#@4AHwSOJsS?UD z@$9nrbd1A9bMB>LrW(rWr1b#V6m)!)_Dgz`f&IS6qn|jS18Rlj9NJ~^a>(z=likx@ zD8gJaCl^(s)m0XJoBGI8L?;-p@fpxm%K^b*XcnAEea?5xY7ZOUsSIj?anbsWUWwA0 z4&LBE0uK+(hi)Wp2Sxa8Df+>&GpqswROWx5Lm1CP6@1^&k?ZInb&y<}k6p-^7kUOD z3D^bK3ypN6Kvxa%de0|m#zY6zC`l4sh0o4wcy7KbIm#IRD(`0)O@d#?}5Wu#TNY9ikB774ZsI#bus%z#KSEKWemS^WzltiS~4{3pHl^>Fc%o@@W=u+1fgq zHgB&Go_&J!n?03z%t{h&qV8^1=BS{&w+iv}de8t~whW}t!ZwKt;X`hgFf=JTO6wr0o@807N~y7;56K|+ykElc-lRXMr>0l=7h6;D66MIAD3M+&Sn2wNas2iU`M5ZwhynHeD zP+T&j8wQV|+S4Cmi%38ERvG;@EkA88e~N{^dE$w$Z+K_+6U#r95nRpag6UzZxX8MuY zUAy30{;%El1)uMTPlEU%asVIPU_XO7l>v?!woBG+KUZdn zeaQ&9qh`;m!3F1s(8zfwYd;EdWYSCQ`o|0EWIXL4AC|r6-dhP%deLbLGK97bXd*nq55N4q}5D-msevYMh#R zTz_leyCCr>2~d&myMIHsFp{rRgb)Nwub+=S6xEmn}{ZCJk8m-H4Kzo-=J_ zzN}pOc)578msL6~A6)#IZ_dGF-sCn`eJTPtRguM?dqstOX#Pj+n@3xmH!3%upkFY? z8xk;|3cJCRNgqXHKfSXZXZk3)wKtTG?^mghH`VE11G`VDR;h3}qHka1%KHn8*jNg+ z$7ym#l+K<0NDgqCsqHN&da;jPAyA|3co^#S=<6s@7YGgNXdnOpr2+sL{(>jSL)_2B z&ezHDslTtQm$Tp9AWx5I6Rh`)1Pw}S9aVmO;FRx5Jo{pif-$WLR`rlRrP|MvD*4VH zWf4Kyxr}2pps7soZ1eI8nSyYgzX_#*clIXG^UPV1AhNEnN7KfSXH;B23I>9h2lKH~k6wuDbDyh$#?WG<;T8 zhI8sIxvSaZ&$5k`3Td7>4kVk&J6>~uK^5hp8;+GNej9WG8`Jb5>tb-v%H!p%rZ9j^ z+s3UvNlLLFOg=VaGV@0pJ9q@YG54J1G3vsv6JuA#@MGPW5zXGR%sbBp7u72MVNl?~ z7!=rDNOC4vd((6Q=BCv;&z@Y2vhldev+SzvsB-8B9q}y_OFt>#(!tCoD_J3OI1~Q< zL*wPfjxccNW~73UR?J74Nd0NdPt5@hQumzQ93-EN=&`qtcg4`TV}Y?1@2jFM)UR8Q zDRocW4_2>4eV9%9md6^;)@>;EJjQoScdn!-NsaR~@7|ktCd5$L%=BFi*W1FePf5h< z$l9E~<}y&On(!u_@EY^AR2^HrpKHB0cTY+^Hb!qTw%^??OskM!Rs^~@ZZ*7$F2B|` zP>e0rd3qqyYJFVH`r$_oOUZE~7mCBV-!Utl3I|2X*n;F>wCtWM9A73Z#P4yvo9-?|apJ~Ct>NJ)1I#RimrRYV1~L1)`` z%biQURmC}mT~sgo#kMzi=a5?TV7V;Ap=Wp%R`m%trMsniZ(}k;PaSFW+m+qMFs`7$ zR1Ftj9|=kv@V-pB&hLzYc|(!y?yK)?QyFzlvD-hp^X-*G zCb|lldu*B-sK~@-;Ipn@Xl>fHhL!{#A6bO!Xxvxq``Ft?Wl&Y`!dmgFlHEo!1jo5= zGS8Bk$D4Wqt66x$j!T}_KW_y++UR{pyL9+F44(rStCAjP&X|&+923;#qi0uAjK9~O z{oHm|Y-A}t({T?E#?C#*vD@o+G+hBYqpphQmnl%-H7dFxAuvbsY%^$s3^TT%jA8O-9SCFJo+kh zyc5Uf7uEZ1*Cl*)7Fb;J)!Ws1!eOe3@f^*iMktf7duqcNApYpa*MfS0Z189YUTH48-q zZTZs(wJVBERs6#lx@{9+#tF&#zGLJnr7uHfN$;V5#T@3Y@{+m^wz$*SegrSD`Q*f- zG8(7j(ud9|4vvZ^(2L01|7msHZNz6Fnlh6=&tQt7VuFqgM%u@c5y9s03}Y~=#N40` zQuc|{FzjdqDj~ z=Yq)N$6wapdgoL-9Y%u<7E^dk9%dTG*qcc)sngAnGc_c0-8KJO$y*o%?TqxPrPi#t z9Lx8Z+)DBdjj@K~Pn)kdq5$P6M{_F)s$C^vPIaLus16OUak|~x)hwxqD3;cHkJE=xHm6lW8% z(lj5dwEQ^G%d~^GYKf|X;Bbzan>K4c3w_^K5iq9uuGCS1M{5nmbEB(gyPusr7Z@da z^A{2X0uW&M2uQ*J0HG%Y$w)0s2zLzXP5GsXfLQ;x=wtx}q8Rj$fC`Z}np`kmpqY!y zPSTuDNZ)JQA3ueVZ(rfxXFWbYBJ{OO { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -26,7 +26,7 @@ Excel.Application.suspendScreenUpdatingUntilNextSync: console.log(`Ending. Adding ${rowCount * columnCount} cells took ${Date.now() - startTime} milliseconds`); }); -Excel.AutoFilter.apply: +'Excel.AutoFilter#apply:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -36,7 +36,7 @@ Excel.AutoFilter.apply: sheet.autoFilter.apply(farmData, 3, { criterion1: "25", filterOn: Excel.FilterOn.topPercent }); await context.sync(); }); -Excel.Binding.onDataChanged: +'Excel.Binding#onDataChanged:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -48,7 +48,7 @@ Excel.Binding.onDataChanged: await context.sync(); }); -Excel.CellPropertiesFill.color: +'Excel.CellPropertiesFill#color:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -120,7 +120,7 @@ Excel.CellPropertiesFill.color: sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); -Excel.CellPropertiesFillLoadOptions.color: +'Excel.CellPropertiesFillLoadOptions#color:member': - |- await Excel.run(async (context) => { const cell = context.workbook.getActiveCell(); @@ -145,7 +145,7 @@ Excel.CellPropertiesFillLoadOptions.color: console.log( `Address: ${cellProperties.address}\nStyle: ${cellProperties.style}\nFill Color: ${cellProperties.format.fill.color}\nFont Color: ${cellProperties.format.font.color}`); }); -Excel.CellPropertiesFont.color: +'Excel.CellPropertiesFont#color:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -217,7 +217,7 @@ Excel.CellPropertiesFont.color: sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); -Excel.CellPropertiesFontLoadOptions.color: +'Excel.CellPropertiesFontLoadOptions#color:member': - |- await Excel.run(async (context) => { const cell = context.workbook.getActiveCell(); @@ -242,7 +242,7 @@ Excel.CellPropertiesFontLoadOptions.color: console.log( `Address: ${cellProperties.address}\nStyle: ${cellProperties.style}\nFill Color: ${cellProperties.format.fill.color}\nFont Color: ${cellProperties.format.font.color}`); }); -Excel.CellPropertiesLoadOptions.address: +'Excel.CellPropertiesLoadOptions#address:member': - |- await Excel.run(async (context) => { const cell = context.workbook.getActiveCell(); @@ -267,7 +267,7 @@ Excel.CellPropertiesLoadOptions.address: console.log( `Address: ${cellProperties.address}\nStyle: ${cellProperties.style}\nFill Color: ${cellProperties.format.fill.color}\nFont Color: ${cellProperties.format.font.color}`); }); -Excel.CellValueConditionalFormat.format: +'Excel.CellValueConditionalFormat#format:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -279,7 +279,7 @@ Excel.CellValueConditionalFormat.format: await context.sync(); }); -Excel.CellValueConditionalFormat.rule: +'Excel.CellValueConditionalFormat#rule:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -291,7 +291,7 @@ Excel.CellValueConditionalFormat.rule: await context.sync(); }); -Excel.ChartAxis.displayUnit: +'Excel.ChartAxis#displayUnit:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -307,7 +307,7 @@ Excel.ChartAxis.displayUnit: console.log("The vertical axis display unit is: " + valueAxis.displayUnit); }); -Excel.ChartAxis.showDisplayUnitLabel: +'Excel.ChartAxis#showDisplayUnitLabel:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -319,7 +319,7 @@ Excel.ChartAxis.showDisplayUnitLabel: await context.sync(); }); -Excel.ChartFill.setSolidColor: +'Excel.ChartFill#setSolidColor:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -332,7 +332,7 @@ Excel.ChartFill.setSolidColor: await context.sync(); }); -Excel.ChartLegendFormat.font: +'Excel.ChartLegendFormat#font:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -351,7 +351,7 @@ Excel.ChartLegendFormat.font: await context.sync(); }); -Excel.ChartSeries.delete: +'Excel.ChartSeries#delete:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -368,7 +368,7 @@ Excel.ChartSeries.delete: await context.sync(); }); -Excel.ChartSeries.markerBackgroundColor: +'Excel.ChartSeries#markerBackgroundColor:member': - |- await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); @@ -397,7 +397,7 @@ Excel.ChartSeries.markerBackgroundColor: await context.sync(); }); -Excel.ChartSeries.markerForegroundColor: +'Excel.ChartSeries#markerForegroundColor:member': - |- await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); @@ -426,7 +426,7 @@ Excel.ChartSeries.markerForegroundColor: await context.sync(); }); -Excel.ChartSeries.markerSize: +'Excel.ChartSeries#markerSize:member': - |- await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); @@ -455,7 +455,7 @@ Excel.ChartSeries.markerSize: await context.sync(); }); -Excel.ChartSeries.markerStyle: +'Excel.ChartSeries#markerStyle:member': - |- await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); @@ -484,7 +484,7 @@ Excel.ChartSeries.markerStyle: await context.sync(); }); -Excel.ChartSeries.setValues: +'Excel.ChartSeries#setValues:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -500,7 +500,7 @@ Excel.ChartSeries.setValues: await context.sync(); }); -Excel.ChartTitle.getSubstring: +'Excel.ChartTitle#getSubstring:member(1)': - |- await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); @@ -510,7 +510,7 @@ Excel.ChartTitle.getSubstring: chart.title.getSubstring(0, 7).font.color = "Yellow"; await context.sync(); }); -Excel.ChartTitle.textOrientation: +'Excel.ChartTitle#textOrientation:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -519,7 +519,7 @@ Excel.ChartTitle.textOrientation: await context.sync(); }); -Excel.ChartTrendline.type: +'Excel.ChartTrendline#type:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -534,7 +534,7 @@ Excel.ChartTrendline.type: console.log("The trendline type is:" + trendline.type); }); -Excel.ChartTrendlineCollection.add: +'Excel.ChartTrendlineCollection#add:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -546,7 +546,7 @@ Excel.ChartTrendlineCollection.add: await context.sync(); }); -Excel.ChartTrendlineFormat.line: +'Excel.ChartTrendlineFormat#line:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -578,7 +578,7 @@ Excel.ChartTrendlineFormat.line: console.log("The trendline color has been set to:" + line.color); }); -Excel.ColorScaleConditionalFormat.criteria: +'Excel.ColorScaleConditionalFormat#criteria:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -594,20 +594,20 @@ Excel.ColorScaleConditionalFormat.criteria: await context.sync(); }); -Excel.Comment.content: +'Excel.Comment#content:member': - |- await Excel.run(async (context) => { const comment = context.workbook.comments.getItemAt(0); comment.content = "PLEASE add headers here."; await context.sync(); }); -Excel.Comment.delete: +'Excel.Comment#delete:member(1)': - |- await Excel.run(async (context) => { context.workbook.comments.getItemByCell("Comments!A2").delete(); await context.sync(); }); -Excel.Comment.load_2: +'Excel.Comment#load:member(2)': - |- await Excel.run(async (context) => { const comment = context.workbook.comments.getItemByCell("Comments!A2"); @@ -617,7 +617,7 @@ Excel.Comment.load_2: console.log(`${comment.creationDate.toDateString()}: ${comment.authorName} (${comment.authorEmail})`); await context.sync(); }); -Excel.CommentCollection.add: +'Excel.CommentCollection#add:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Comments"); @@ -626,14 +626,14 @@ Excel.CommentCollection.add: sheet.comments.add("TODO: add data.", "A2"); await context.sync(); }); -Excel.CommentReply.content: +'Excel.CommentReply#content:member': - |- await Excel.run(async (context) => { const comment = context.workbook.comments.getItemAt(0); comment.content = "PLEASE add headers here."; await context.sync(); }); -Excel.CommentReply.delete: +'Excel.CommentReply#delete:member(1)': - |- await Excel.run(async (context) => { var comment = context.workbook.comments.getItemAt(0); @@ -643,14 +643,14 @@ Excel.CommentReply.delete: comment.replies.getItemAt(0).delete(); await context.sync(); }); -Excel.CommentReplyCollection.add: +'Excel.CommentReplyCollection#add:member(1)': - |- await Excel.run(async (context) => { const comment = context.workbook.comments.getItemAt(0); comment.replies.add("Do I have to?"); await context.sync(); }); -Excel.ConditionalCellValueRule.formula1: +'Excel.ConditionalCellValueRule#formula1:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -662,7 +662,7 @@ Excel.ConditionalCellValueRule.formula1: await context.sync(); }); -Excel.ConditionalCellValueRule.operator: +'Excel.ConditionalCellValueRule#operator:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -674,7 +674,7 @@ Excel.ConditionalCellValueRule.operator: await context.sync(); }); -Excel.ConditionalFormat.cellValue: +'Excel.ConditionalFormat#cellValue:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -686,7 +686,7 @@ Excel.ConditionalFormat.cellValue: await context.sync(); }); -Excel.ConditionalFormat.colorScale: +'Excel.ConditionalFormat#colorScale:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -702,7 +702,7 @@ Excel.ConditionalFormat.colorScale: await context.sync(); }); -Excel.ConditionalFormat.custom: +'Excel.ConditionalFormat#custom:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -713,7 +713,7 @@ Excel.ConditionalFormat.custom: await context.sync(); }); -Excel.ConditionalFormat.dataBar: +'Excel.ConditionalFormat#dataBar:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -724,7 +724,7 @@ Excel.ConditionalFormat.dataBar: await context.sync(); }); -Excel.ConditionalFormat.getRange: +'Excel.ConditionalFormat#getRange:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -751,7 +751,7 @@ Excel.ConditionalFormat.getRange: console.log("No conditional formats applied."); } }); -Excel.ConditionalFormat.iconSet: +'Excel.ConditionalFormat#iconSet:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -791,7 +791,7 @@ Excel.ConditionalFormat.iconSet: await context.sync(); }); -Excel.ConditionalFormat.preset: +'Excel.ConditionalFormat#preset:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -803,7 +803,7 @@ Excel.ConditionalFormat.preset: await context.sync(); }); -Excel.ConditionalFormat.textComparison: +'Excel.ConditionalFormat#textComparison:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -815,7 +815,7 @@ Excel.ConditionalFormat.textComparison: await context.sync(); }); -Excel.ConditionalFormat.type: +'Excel.ConditionalFormat#type:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -842,7 +842,7 @@ Excel.ConditionalFormat.type: console.log("No conditional formats applied."); } }); -Excel.ConditionalFormatCollection.add: +'Excel.ConditionalFormatCollection#add:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -858,7 +858,7 @@ Excel.ConditionalFormatCollection.add: await context.sync(); }); -Excel.ConditionalFormatCollection.clearAll: +'Excel.ConditionalFormatCollection#clearAll:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -869,7 +869,7 @@ Excel.ConditionalFormatCollection.clearAll: $(".conditional-formats").hide(); }); -Excel.ConditionalFormatCollection.getItemAt: +'Excel.ConditionalFormatCollection#getItemAt:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -896,7 +896,7 @@ Excel.ConditionalFormatCollection.getItemAt: console.log("No conditional formats applied."); } }); -Excel.ConditionalFormatRule.formula: +'Excel.ConditionalFormatRule#formula:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -907,7 +907,7 @@ Excel.ConditionalFormatRule.formula: await context.sync(); }); -Excel.ConditionalIconCriterion.formula: +'Excel.ConditionalIconCriterion#formula:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -947,7 +947,7 @@ Excel.ConditionalIconCriterion.formula: await context.sync(); }); -Excel.ConditionalIconCriterion.operator: +'Excel.ConditionalIconCriterion#operator:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -998,7 +998,7 @@ Excel.ConditionalIconCriterion.operator: await context.sync(); }); -Excel.ConditionalIconCriterion.type: +'Excel.ConditionalIconCriterion#type:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1038,7 +1038,7 @@ Excel.ConditionalIconCriterion.type: await context.sync(); }); -Excel.ConditionalPresetCriteriaRule.criterion: +'Excel.ConditionalPresetCriteriaRule#criterion:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1050,7 +1050,7 @@ Excel.ConditionalPresetCriteriaRule.criterion: await context.sync(); }); -Excel.ConditionalTextComparisonRule.text: +'Excel.ConditionalTextComparisonRule#text:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1062,7 +1062,7 @@ Excel.ConditionalTextComparisonRule.text: await context.sync(); }); -Excel.CustomConditionalFormat.format: +'Excel.CustomConditionalFormat#format:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1073,7 +1073,7 @@ Excel.CustomConditionalFormat.format: await context.sync(); }); -Excel.CustomXmlPart.delete: +'Excel.CustomXmlPart#delete:member(1)': - |- await Excel.run(async (context) => { const settings = context.workbook.settings; @@ -1102,7 +1102,7 @@ Excel.CustomXmlPart.delete: await context.sync(); } }); -Excel.CustomXmlPart.getXml: +'Excel.CustomXmlPart#getXml:member(1)': - |- await Excel.run(async (context) => { // You must have the xmlns attribute to populate the @@ -1123,7 +1123,7 @@ Excel.CustomXmlPart.getXml: await context.sync(); }); -Excel.CustomXmlPart.id: +'Excel.CustomXmlPart#id:member': - |- await Excel.run(async (context) => { // You must have the xmlns attribute to populate the @@ -1144,7 +1144,7 @@ Excel.CustomXmlPart.id: await context.sync(); }); -Excel.CustomXmlPart.setXml: +'Excel.CustomXmlPart#setXml:member(1)': - |- await Excel.run(async (context) => { const settings = context.workbook.settings; @@ -1165,7 +1165,7 @@ Excel.CustomXmlPart.setXml: await context.sync(); } }); -Excel.CustomXmlPartCollection.add: +'Excel.CustomXmlPartCollection#add:member(1)': - |- await Excel.run(async (context) => { // You must have the xmlns attribute to populate the @@ -1186,7 +1186,7 @@ Excel.CustomXmlPartCollection.add: await context.sync(); }); -Excel.CustomXmlPartCollection.getByNamespace: +'Excel.CustomXmlPartCollection#getByNamespace:member(1)': - |- await Excel.run(async (context) => { $("#display-xml").text(""); @@ -1215,7 +1215,7 @@ Excel.CustomXmlPartCollection.getByNamespace: await context.sync(); }); -Excel.CustomXmlPartCollection.getItem: +'Excel.CustomXmlPartCollection#getItem:member(1)': - |- await Excel.run(async (context) => { const settings = context.workbook.settings; @@ -1236,7 +1236,7 @@ Excel.CustomXmlPartCollection.getItem: await context.sync(); } }); -Excel.CustomXmlPartScopedCollection.getCount: +'Excel.CustomXmlPartScopedCollection#getCount:member(1)': - |- await Excel.run(async (context) => { $("#display-xml").text(""); @@ -1265,7 +1265,7 @@ Excel.CustomXmlPartScopedCollection.getCount: await context.sync(); }); -Excel.CustomXmlPartScopedCollection.getItemOrNullObject: +'Excel.CustomXmlPartScopedCollection#getItemOrNullObject:member(1)': - |- await Excel.run(async (context) => { const settings = context.workbook.settings; @@ -1294,7 +1294,7 @@ Excel.CustomXmlPartScopedCollection.getItemOrNullObject: await context.sync(); } }); -Excel.CustomXmlPartScopedCollection.getOnlyItem: +'Excel.CustomXmlPartScopedCollection#getOnlyItem:member(1)': - |- await Excel.run(async (context) => { $("#display-xml").text(""); @@ -1323,7 +1323,7 @@ Excel.CustomXmlPartScopedCollection.getOnlyItem: await context.sync(); }); -Excel.DataBarConditionalFormat.barDirection: +'Excel.DataBarConditionalFormat#barDirection:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1334,7 +1334,7 @@ Excel.DataBarConditionalFormat.barDirection: await context.sync(); }); -Excel.DataPivotHierarchy.name: +'Excel.DataPivotHierarchy#name:member': - |- await Excel.run(async (context) => { const dataHierarchies = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales").dataHierarchies @@ -1345,7 +1345,7 @@ Excel.DataPivotHierarchy.name: dataHierarchies.items[1].name = "Wholesale"; await context.sync(); }); -Excel.DataPivotHierarchy.showAs: +'Excel.DataPivotHierarchy#showAs:member': - |- await Excel.run(async (context) => { const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); @@ -1368,7 +1368,7 @@ Excel.DataPivotHierarchy.showAs: wholesaleDataHierarchy.showAs = wholesaleShowAs; await context.sync(); }); -Excel.DataValidation.prompt: +'Excel.DataValidation#prompt:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Decision"); @@ -1401,7 +1401,7 @@ Excel.DataValidation.prompt: await context.sync(); }); -Excel.DataValidation.rule: +'Excel.DataValidation#rule:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Decision"); @@ -1424,7 +1424,7 @@ Excel.DataValidation.rule: await context.sync(); }); -Excel.DataValidation.errorAlert: +'Excel.DataValidation#errorAlert:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Decision"); @@ -1453,7 +1453,7 @@ Excel.DataValidation.errorAlert: await context.sync(); }); -Excel.DataValidationRule.list: +'Excel.DataValidationRule#list:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Decision"); @@ -1476,7 +1476,7 @@ Excel.DataValidationRule.list: await context.sync(); }); -Excel.DataValidationRule.wholeNumber: +'Excel.DataValidationRule#wholeNumber:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Decision"); @@ -1509,7 +1509,7 @@ Excel.DataValidationRule.wholeNumber: await context.sync(); }); -Excel.IconSetConditionalFormat.criteria: +'Excel.IconSetConditionalFormat#criteria:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1549,7 +1549,7 @@ Excel.IconSetConditionalFormat.criteria: await context.sync(); }); -Excel.IconSetConditionalFormat.style: +'Excel.IconSetConditionalFormat#style:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1589,7 +1589,7 @@ Excel.IconSetConditionalFormat.style: await context.sync(); }); -Excel.Image.format: +'Excel.Image#format:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); @@ -1600,7 +1600,7 @@ Excel.Image.format: console.log("The image's format is: " + image.format); await context.sync(); }); -Excel.Line.connectBeginShape: +'Excel.Line#connectBeginShape:member(1)': - |- await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; @@ -1609,7 +1609,7 @@ Excel.Line.connectBeginShape: line.connectEndShape(shapes.getItem("Right"), 0); await context.sync(); }); -Excel.Line.connectEndShape: +'Excel.Line#connectEndShape:member(1)': - |- await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; @@ -1618,7 +1618,7 @@ Excel.Line.connectEndShape: line.connectEndShape(shapes.getItem("Right"), 0); await context.sync(); }); -Excel.Line.disconnectBeginShape: +'Excel.Line#disconnectBeginShape:member(1)': - |- await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; @@ -1627,7 +1627,7 @@ Excel.Line.disconnectBeginShape: line.disconnectEndShape(); await context.sync(); }); -Excel.Line.disconnectEndShape: +'Excel.Line#disconnectEndShape:member(1)': - |- await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; @@ -1636,7 +1636,7 @@ Excel.Line.disconnectEndShape: line.disconnectEndShape(); await context.sync(); }); -Excel.NamedItem.delete: +'Excel.NamedItem#delete:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1655,7 +1655,7 @@ Excel.NamedItem.delete: await context.sync(); }); -Excel.NamedItem.formula: +'Excel.NamedItem#formula:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1676,7 +1676,7 @@ Excel.NamedItem.formula: console.log(`Just updated the named item "${myNamedItem.name}" -- it's now located here: ${myNamedItem.formula}`); } }); -Excel.NamedItemCollection.add: +'Excel.NamedItemCollection#add:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1687,14 +1687,14 @@ Excel.NamedItemCollection.add: await context.sync(); }); -Excel.PageBreakCollection.add: +'Excel.PageBreakCollection#add:member(1)': - |- await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); farmSheet.horizontalPageBreaks.add("A21:E21"); await context.sync(); }); -Excel.PageLayout.centerHorizontally: +'Excel.PageLayout#centerHorizontally:member': - |- await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); @@ -1702,7 +1702,7 @@ Excel.PageLayout.centerHorizontally: farmSheet.pageLayout.centerVertically = true; await context.sync(); }); -Excel.PageLayout.centerVertically: +'Excel.PageLayout#centerVertically:member': - |- await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); @@ -1710,35 +1710,35 @@ Excel.PageLayout.centerVertically: farmSheet.pageLayout.centerVertically = true; await context.sync(); }); -Excel.PageLayout.orientation: +'Excel.PageLayout#orientation:member': - |- await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); farmSheet.pageLayout.orientation = Excel.PageOrientation.landscape; await context.sync(); }); -Excel.PageLayout.setPrintArea: +'Excel.PageLayout#setPrintArea:member(1)': - |- await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); farmSheet.pageLayout.setPrintArea("A1:D41"); await context.sync(); }); -Excel.PageLayout.setPrintTitleRows: +'Excel.PageLayout#setPrintTitleRows:member(1)': - |- await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); farmSheet.pageLayout.setPrintTitleRows("$1:$1"); await context.sync(); }); -Excel.PageLayout.zoom: +'Excel.PageLayout#zoom:member': - |- await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); farmSheet.pageLayout.zoom = { scale: 200 }; await context.sync(); }); -Excel.PivotLayout.getDataBodyRange: +'Excel.PivotLayout#getDataBodyRange:member(1)': - |- await Excel.run(async (context) => { const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); @@ -1756,7 +1756,7 @@ Excel.PivotLayout.getDataBodyRange: masterTotalRange.formulas = [["All Crates", "=SUM(" + grandTotalRange.address + ")"]]; await context.sync(); }); -Excel.PivotTable.columnHierarchies: +'Excel.PivotTable#columnHierarchies:member': - |- await Excel.run(async (context) => { const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); @@ -1775,7 +1775,7 @@ Excel.PivotTable.columnHierarchies: await context.sync(); }); -Excel.PivotTable.dataHierarchies: +'Excel.PivotTable#dataHierarchies:member': - |- await Excel.run(async (context) => { const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); @@ -1784,14 +1784,14 @@ Excel.PivotTable.dataHierarchies: await context.sync(); }); -Excel.PivotTable.delete: +'Excel.PivotTable#delete:member(1)': - |- await Excel.run(async (context) => { context.workbook.worksheets.getItem("Pivot").pivotTables.getItem("Farm Sales").delete(); await context.sync(); }); -Excel.PivotTable.filterHierarchies: +'Excel.PivotTable#filterHierarchies:member': - |- async function filter(functionType: Excel.AggregationFunction) { await Excel.run(async (context) => { @@ -1808,7 +1808,7 @@ Excel.PivotTable.filterHierarchies: } }); } -Excel.PivotTable.layout: +'Excel.PivotTable#layout:member': - |- await Excel.run(async (context) => { const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); @@ -1826,7 +1826,7 @@ Excel.PivotTable.layout: await context.sync(); console.log("Pivot layout is now " + pivotTable.layout.layoutType); }); -Excel.PivotTableCollection.add: +'Excel.PivotTableCollection#add:member(1)': - |- await Excel.run(async (context) => { const rangeToAnalyze = context.workbook.worksheets.getItem("Data").getRange("A1:E21"); @@ -1835,7 +1835,7 @@ Excel.PivotTableCollection.add: await context.sync(); }); -Excel.PresetCriteriaConditionalFormat.rule: +'Excel.PresetCriteriaConditionalFormat#rule:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1857,7 +1857,7 @@ Excel.PresetCriteriaConditionalFormat.rule: await context.sync(); }); -Excel.Range.copyFrom: +'Excel.Range#copyFrom:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1869,7 +1869,7 @@ Excel.Range.copyFrom: sheet.getRange("G2").copyFrom("A1:E1", Excel.RangeCopyType.formulas); await context.sync(); }); -Excel.Range.find: +'Excel.Range#find:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1890,7 +1890,7 @@ Excel.Range.find: console.log(foundRange.address); }); -Excel.Range.findOrNullObject: +'Excel.Range#findOrNullObject:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1911,7 +1911,7 @@ Excel.Range.findOrNullObject: console.log(foundRange.address); } }); -Excel.Range.getIntersectionOrNullObject: +'Excel.Range#getIntersectionOrNullObject:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1967,7 +1967,7 @@ Excel.Range.getIntersectionOrNullObject: await context.sync(); }); -Excel.Range.getSpecialCells: +'Excel.Range#getSpecialCells:member(1)': - |- await Excel.run(async (context) => { @@ -1980,7 +1980,7 @@ Excel.Range.getSpecialCells: return context.sync(); }); -Excel.Range.getUsedRange: +'Excel.Range#getUsedRange:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -2036,7 +2036,7 @@ Excel.Range.getUsedRange: await context.sync(); }); -Excel.Range.getUsedRangeOrNullObject: +'Excel.Range#getUsedRangeOrNullObject:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -2070,7 +2070,7 @@ Excel.Range.getUsedRangeOrNullObject: await context.sync(); }); -Excel.Range.hyperlink: +'Excel.Range#hyperlink:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Orders"); @@ -2096,7 +2096,7 @@ Excel.Range.hyperlink: await context.sync(); }); -Excel.Range.removeDuplicates: +'Excel.Range#removeDuplicates:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -2109,7 +2109,7 @@ Excel.Range.removeDuplicates: console.log(deleteResult.removed + " entries with duplicate names removed."); console.log(deleteResult.uniqueRemaining + " entries with unique names remain in the range."); }); -Excel.Range.set: +'Excel.Range#set:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -2144,7 +2144,7 @@ Excel.Range.set: targetRange.format.autofitColumns(); await context.sync(); }); -Excel.Range.style: +'Excel.Range#style:member': - |- await Excel.run(async (context) => { let worksheet = context.workbook.worksheets.getItem("Sample"); @@ -2157,7 +2157,7 @@ Excel.Range.style: await context.sync(); }); -Excel.Range.setCellProperties: +'Excel.Range#setCellProperties:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -2229,7 +2229,7 @@ Excel.Range.setCellProperties: sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); -Excel.Range.getCellProperties: +'Excel.Range#getCellProperties:member(1)': - |- await Excel.run(async (context) => { const cell = context.workbook.getActiveCell(); @@ -2254,7 +2254,7 @@ Excel.Range.getCellProperties: console.log( `Address: ${cellProperties.address}\nStyle: ${cellProperties.style}\nFill Color: ${cellProperties.format.fill.color}\nFont Color: ${cellProperties.format.font.color}`); }); -Excel.RangeAreas.format: +'Excel.RangeAreas#format:member': - |- await Excel.run(async (context) => { @@ -2267,7 +2267,7 @@ Excel.RangeAreas.format: await context.sync(); }); -Excel.RangeFormat.textOrientation: +'Excel.RangeFormat#textOrientation:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -2279,7 +2279,7 @@ Excel.RangeFormat.textOrientation: await context.sync(); }); -Excel.RangeHyperlink.address: +'Excel.RangeHyperlink#address:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Orders"); @@ -2305,7 +2305,7 @@ Excel.RangeHyperlink.address: await context.sync(); }); -Excel.RangeHyperlink.documentReference: +'Excel.RangeHyperlink#documentReference:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Orders"); @@ -2331,7 +2331,7 @@ Excel.RangeHyperlink.documentReference: await context.sync(); }); -Excel.RangeHyperlink.screenTip: +'Excel.RangeHyperlink#screenTip:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Orders"); @@ -2357,7 +2357,7 @@ Excel.RangeHyperlink.screenTip: await context.sync(); }); -Excel.RangeHyperlink.textToDisplay: +'Excel.RangeHyperlink#textToDisplay:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Orders"); @@ -2383,7 +2383,7 @@ Excel.RangeHyperlink.textToDisplay: await context.sync(); }); -Excel.RemoveDuplicatesResult.uniqueRemaining: +'Excel.RemoveDuplicatesResult#uniqueRemaining:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -2396,7 +2396,7 @@ Excel.RemoveDuplicatesResult.uniqueRemaining: console.log(deleteResult.removed + " entries with duplicate names removed."); console.log(deleteResult.uniqueRemaining + " entries with unique names remain in the range."); }); -Excel.Runtime.enableEvents: +'Excel.Runtime#enableEvents:member(1)': - |- await Excel.run(async (context) => { context.runtime.load("enableEvents"); @@ -2413,7 +2413,7 @@ Excel.Runtime.enableEvents: await context.sync(); }); -Excel.SettableCellProperties.style: +'Excel.SettableCellProperties#style:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -2485,7 +2485,7 @@ Excel.SettableCellProperties.style: sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); -Excel.Setting.delete: +'Excel.Setting#delete:member(1)': - |- await Excel.run(async (context) => { const settings = context.workbook.settings; @@ -2503,7 +2503,7 @@ Excel.Setting.delete: await context.sync(); }); -Excel.SettingCollection.add: +'Excel.SettingCollection#add:member(1)': - |- await Excel.run(async (context) => { const settings = context.workbook.settings; @@ -2512,7 +2512,7 @@ Excel.SettingCollection.add: await context.sync(); console.log("Settings changed handler registered."); }); -Excel.SettingCollection.getItemOrNullObject: +'Excel.SettingCollection#getItemOrNullObject:member(1)': - |- await Excel.run(async (context) => { const settings = context.workbook.settings; @@ -2530,7 +2530,7 @@ Excel.SettingCollection.getItemOrNullObject: await context.sync(); }); -Excel.SettingCollection.onSettingsChanged: +'Excel.SettingCollection#onSettingsChanged:member': - |- await Excel.run(async (context) => { const settings = context.workbook.settings; @@ -2539,7 +2539,7 @@ Excel.SettingCollection.onSettingsChanged: await context.sync(); console.log("Settings changed handler registered."); }); -Excel.Shape.delete: +'Excel.Shape#delete:member(1)': - |- await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Shapes").delete(); @@ -2554,7 +2554,7 @@ Excel.Shape.delete: shapes.items.forEach((shape) => shape.delete()); await context.sync(); }); -Excel.Shape.fill: +'Excel.Shape#fill:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); @@ -2566,7 +2566,7 @@ Excel.Shape.fill: shape.fill.foregroundColor = "yellow" await context.sync(); }); -Excel.Shape.getAsImage: +'Excel.Shape#getAsImage:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); @@ -2578,7 +2578,7 @@ Excel.Shape.getAsImage: // Your add-in would save this string as a .png file. console.log("The image's base64-encoded string: " + imageString); }); -Excel.Shape.group: +'Excel.Shape#group:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); @@ -2589,7 +2589,7 @@ Excel.Shape.group: await context.sync(); }); -Excel.Shape.incrementLeft: +'Excel.Shape#incrementLeft:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); @@ -2597,7 +2597,7 @@ Excel.Shape.incrementLeft: shape.incrementLeft(-25); await context.sync(); }); -Excel.Shape.incrementRotation: +'Excel.Shape#incrementRotation:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); @@ -2605,7 +2605,7 @@ Excel.Shape.incrementRotation: shape.incrementRotation(180); await context.sync(); }); -Excel.Shape.incrementTop: +'Excel.Shape#incrementTop:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); @@ -2613,7 +2613,7 @@ Excel.Shape.incrementTop: shape.incrementTop(25); await context.sync(); }); -Excel.Shape.line: +'Excel.Shape#line:member': - |- await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; @@ -2628,7 +2628,7 @@ Excel.Shape.line: await context.sync(); }); -Excel.Shape.rotation: +'Excel.Shape#rotation:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); @@ -2641,7 +2641,7 @@ Excel.Shape.rotation: shape.fill.clear(); await context.sync(); }); -Excel.Shape.scaleHeight: +'Excel.Shape#scaleHeight:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); @@ -2650,7 +2650,7 @@ Excel.Shape.scaleHeight: shape.scaleHeight(1.25, Excel.ShapeScaleType.currentSize); await context.sync(); }); -Excel.Shape.lockAspectRatio: +'Excel.Shape#lockAspectRatio:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); @@ -2659,7 +2659,7 @@ Excel.Shape.lockAspectRatio: shape.scaleHeight(1.25, Excel.ShapeScaleType.currentSize); await context.sync(); }); -Excel.Shape.setZOrder: +'Excel.Shape#setZOrder:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); @@ -2667,7 +2667,7 @@ Excel.Shape.setZOrder: shape.setZOrder(Excel.ShapeZOrder.sendBackward); await context.sync(); }); -Excel.ShapeCollection.addGeometricShape: +'Excel.ShapeCollection#addGeometricShape:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); @@ -2678,7 +2678,7 @@ Excel.ShapeCollection.addGeometricShape: shape.width = 200; await context.sync(); }); -Excel.ShapeCollection.addGroup: +'Excel.ShapeCollection#addGroup:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); @@ -2692,7 +2692,7 @@ Excel.ShapeCollection.addGroup: await context.sync(); }); -Excel.ShapeCollection.addImage: +'Excel.ShapeCollection#addImage:member(1)': - |- const myFile = document.getElementById("selectedFile"); const reader = new FileReader(); @@ -2710,7 +2710,7 @@ Excel.ShapeCollection.addImage: // Read in the image file as a data URL. reader.readAsDataURL(myFile.files[0]); -Excel.ShapeCollection.addLine: +'Excel.ShapeCollection#addLine:member(1)': - |- await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; @@ -2718,7 +2718,7 @@ Excel.ShapeCollection.addLine: line.name = "StraightLine"; await context.sync(); }); -Excel.ShapeCollection.addTextBox: +'Excel.ShapeCollection#addTextBox:member(1)': - |- await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; @@ -2730,7 +2730,7 @@ Excel.ShapeCollection.addTextBox: textbox.name = "Textbox"; await context.sync(); }); -Excel.ShapeGroup.ungroup: +'Excel.ShapeGroup#ungroup:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); @@ -2741,7 +2741,7 @@ Excel.ShapeGroup.ungroup: await context.sync(); }); -Excel.ShowAsRule.baseItem: +'Excel.ShowAsRule#baseItem:member': - |- await Excel.run(async (context) => { const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); @@ -2767,35 +2767,35 @@ Excel.ShowAsRule.baseItem: wholesaleDataHierarchy.showAs = wholesaleShowAs; await context.sync(); }); -Excel.Slicer.style: +'Excel.Slicer#style:member': - |- await Excel.run(async (context) => { const slicer = context.workbook.slicers.getItem("Fruit Slicer"); slicer.style = "SlicerStyleLight6"; await context.sync(); }); -Excel.Slicer.selectItems: +'Excel.Slicer#selectItems:member(1)': - |- await Excel.run(async (context) => { const slicer = context.workbook.slicers.getItem("Fruit Slicer"); slicer.selectItems(["Lemon", "Lime", "Orange"]); await context.sync(); }); -Excel.Slicer.clearFilters: +'Excel.Slicer#clearFilters:member(1)': - |- await Excel.run(async (context) => { const slicer = context.workbook.slicers.getItem("Fruit Slicer"); slicer.clearFilters(); await context.sync(); }); -Excel.Slicer.delete: +'Excel.Slicer#delete:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); sheet.slicers.getItemAt(0).delete(); await context.sync(); }); -Excel.SlicerCollection.add: +'Excel.SlicerCollection#add:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Pivot"); @@ -2806,7 +2806,7 @@ Excel.SlicerCollection.add: slicer.name = "Fruit Slicer"; await context.sync(); }); -Excel.SlicerCollection.getItem: +'Excel.SlicerCollection#getItem:member(1)': - |- await Excel.run(async (context) => { const slicer = context.workbook.slicers.getItem("Fruit Slicer"); @@ -2817,7 +2817,7 @@ Excel.SlicerCollection.getItem: slicer.width = 150; await context.sync(); }); -Excel.Style.delete: +'Excel.Style#delete:member(1)': - |- await Excel.run(async (context) => { let style = context.workbook.styles.getItem("Diagonal Orientation Style"); @@ -2830,7 +2830,7 @@ Excel.Style.delete: console.log("Successfully deleted the diagonal orientation style from the Home tab ribbon."); }); -Excel.Style.font: +'Excel.Style#font:member': - |- await Excel.run(async (context) => { let style = context.workbook.styles.getItem("Normal"); @@ -2846,7 +2846,7 @@ Excel.Style.font: console.log("Size: " + style.font.size); console.log("Fill color: " + style.fill.color); }); -Excel.Style.horizontalAlignment: +'Excel.Style#horizontalAlignment:member': - |- await Excel.run(async (context) => { let worksheet = context.workbook.worksheets.getItem("Sample"); @@ -2859,7 +2859,7 @@ Excel.Style.horizontalAlignment: await context.sync(); }); -Excel.Style.load: +'Excel.Style#load:member(1)': - |- await Excel.run(async (context) => { let style = context.workbook.styles.getItem("Diagonal Orientation Style"); @@ -2876,7 +2876,7 @@ Excel.Style.load: console.log("Shrink to fit: " + style.shrinkToFit); console.log("Style locked: " + style.locked); }); -Excel.StyleCollection.add: +'Excel.StyleCollection#add:member(1)': - |- await Excel.run(async (context) => { let styles = context.workbook.styles; @@ -2898,7 +2898,7 @@ Excel.StyleCollection.add: console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); -Excel.StyleCollection.getItem: +'Excel.StyleCollection#getItem:member(1)': - |- await Excel.run(async (context) => { let styles = context.workbook.styles; @@ -2920,7 +2920,7 @@ Excel.StyleCollection.getItem: console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); -Excel.Table.onChanged: +'Excel.Table#onChanged:member': - |- await Excel.run(async (context) => { let table = context.workbook.tables.getItemAt(0); @@ -2929,7 +2929,7 @@ Excel.Table.onChanged: await context.sync(); console.log("A handler has been registered for the onChanged event"); }); -Excel.Table.onSelectionChanged: +'Excel.Table#onSelectionChanged:member': - |- await Excel.run(async (context) => { let table = context.workbook.tables.getItemAt(0); @@ -2938,7 +2938,7 @@ Excel.Table.onSelectionChanged: await context.sync(); console.log("A handler has been registered for table onSelectionChanged event"); }); -Excel.TableChangedEventArgs.tableId: +'Excel.TableChangedEventArgs#tableId:member': - |- async function onChange(event) { await Excel.run(async (context) => { @@ -2953,7 +2953,7 @@ Excel.TableChangedEventArgs.tableId: console.log("Worksheet Id : " + worksheet.name); }); } -Excel.TableChangedEventArgs.worksheetId: +'Excel.TableChangedEventArgs#worksheetId:member': - |- async function onChange(event) { await Excel.run(async (context) => { @@ -2968,7 +2968,7 @@ Excel.TableChangedEventArgs.worksheetId: console.log("Worksheet Id : " + worksheet.name); }); } -Excel.TableChangedEventArgs.details: +'Excel.TableChangedEventArgs#details:member': - |- async function onTableChanged(eventArgs: Excel.TableChangedEventArgs) { await Excel.run(async (context) => { @@ -2979,7 +2979,7 @@ Excel.TableChangedEventArgs.details: + ` now is ${details.valueAfter}(${details.valueTypeAfter})`); }); } -Excel.TableCollection.onChanged: +'Excel.TableCollection#onChanged:member': - |- await Excel.run(async (context) => { let tables = context.workbook.tables; @@ -2988,14 +2988,14 @@ Excel.TableCollection.onChanged: await context.sync(); console.log("A handler has been registered for the table collection onChanged event"); }); -Excel.TableSelectionChangedEventArgs.address: +'Excel.TableSelectionChangedEventArgs#address:member': - |- 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); }); } -Excel.TextConditionalFormat.format: +'Excel.TextConditionalFormat#format:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -3007,7 +3007,7 @@ Excel.TextConditionalFormat.format: await context.sync(); }); -Excel.TextConditionalFormat.rule: +'Excel.TextConditionalFormat#rule:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -3019,7 +3019,7 @@ Excel.TextConditionalFormat.rule: await context.sync(); }); -Excel.TextFrame.deleteText: +'Excel.TextFrame#deleteText:member(1)': - |- await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; @@ -3027,12 +3027,12 @@ Excel.TextFrame.deleteText: textbox.textFrame.deleteText(); await context.sync(); }); -Excel.Workbook.close: +'Excel.Workbook#close:member(1)': - |- await Excel.run(async (context) => { context.workbook.close(Excel.CloseBehavior.save); }); -Excel.Workbook.getActiveCell: +'Excel.Workbook#getActiveCell:member(1)': - |- await Excel.run(async (context) => { @@ -3044,7 +3044,7 @@ Excel.Workbook.getActiveCell: console.log("The active cell is " + activeCell.address); }); -Excel.Workbook.getSelectedRanges: +'Excel.Workbook#getSelectedRanges:member(1)': - |- await Excel.run(async (context) => { @@ -3053,7 +3053,7 @@ Excel.Workbook.getSelectedRanges: await context.sync(); }) -Excel.Workbook.properties: +'Excel.Workbook#properties:member': - |- await Excel.run(async (context) => { let titleValue = "Excel document properties API"; @@ -3079,12 +3079,12 @@ Excel.Workbook.properties: console.log("Set the following document properties: title, subject, keywords, comments, category, manager, company."); }); -Excel.Workbook.save: +'Excel.Workbook#save:member(1)': - |- await Excel.run(async (context) => { context.workbook.save(Excel.SaveBehavior.save); }); -Excel.WorkbookProtection.protect: +'Excel.WorkbookProtection#protect:member(1)': - |- await Excel.run(async (context) => { let workbook = context.workbook; @@ -3109,7 +3109,7 @@ Excel.WorkbookProtection.protect: workbook.protection.protect(password); } }); -Excel.WorkbookProtection.unprotect: +'Excel.WorkbookProtection#unprotect:member(1)': - |- await Excel.run(async (context) => { let workbook = context.workbook; @@ -3122,7 +3122,7 @@ Excel.WorkbookProtection.unprotect: let workbook = context.workbook; workbook.protection.unprotect(password); }); -Excel.Worksheet.copy: +'Excel.Worksheet#copy:member(1)': - |- await Excel.run(async (context) => { @@ -3137,7 +3137,7 @@ Excel.Worksheet.copy: console.log("'" + sampleSheet.name + "' was copied to '" + copiedSheet.name + "'") }); -Excel.Worksheet.findAllOrNullObject: +'Excel.Worksheet#findAllOrNullObject:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -3154,7 +3154,7 @@ Excel.Worksheet.findAllOrNullObject: foundRanges.format.fill.color = "green" } }); -Excel.Worksheet.getNext: +'Excel.Worksheet#getNext:member(1)': - |- await Excel.run(async (context) => { const sheets = context.workbook.worksheets; @@ -3180,7 +3180,7 @@ Excel.Worksheet.getNext: await context.sync(); }); -Excel.Worksheet.getPrevious: +'Excel.Worksheet#getPrevious:member(1)': - |- await Excel.run(async (context) => { const sheets = context.workbook.worksheets; @@ -3202,7 +3202,7 @@ Excel.Worksheet.getPrevious: await context.sync(); }); -Excel.Worksheet.getRanges: +'Excel.Worksheet#getRanges:member(1)': - |- await Excel.run(async (context) => { @@ -3212,7 +3212,7 @@ Excel.Worksheet.getRanges: await context.sync(); }) -Excel.Worksheet.onChanged: +'Excel.Worksheet#onChanged:member': - |- await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); @@ -3221,7 +3221,7 @@ Excel.Worksheet.onChanged: await context.sync(); console.log("A handler has been registered for the onChanged event."); }); -Excel.Worksheet.showGridlines: +'Excel.Worksheet#showGridlines:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -3229,7 +3229,7 @@ Excel.Worksheet.showGridlines: await context.sync(); }); -Excel.Worksheet.tabColor: +'Excel.Worksheet#tabColor:member': - |- await Excel.run(async (context) => { const activeSheet = context.workbook.worksheets.getActiveWorksheet(); @@ -3237,7 +3237,7 @@ Excel.Worksheet.tabColor: await context.sync(); }); -Excel.Worksheet.autoFilter: +'Excel.Worksheet#autoFilter:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -3247,7 +3247,7 @@ Excel.Worksheet.autoFilter: sheet.autoFilter.apply(farmData, 3, { criterion1: "25", filterOn: Excel.FilterOn.topPercent }); await context.sync(); }); -Excel.Worksheet.slicers: +'Excel.Worksheet#slicers:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Pivot"); @@ -3258,7 +3258,7 @@ Excel.Worksheet.slicers: slicer.name = "Fruit Slicer"; await context.sync(); }); -Excel.WorksheetAddedEventArgs.worksheetId: +'Excel.WorksheetAddedEventArgs#worksheetId:member': - |- async function onWorksheetAdd(event) { await Excel.run(async (context) => { @@ -3268,7 +3268,7 @@ Excel.WorksheetAddedEventArgs.worksheetId: ); }); } -Excel.WorksheetCollection.addFromBase64: +'Excel.WorksheetCollection#addFromBase64:member(1)': - |- const myFile = document.getElementById("file"); const reader = new FileReader(); @@ -3291,7 +3291,7 @@ Excel.WorksheetCollection.addFromBase64: // read in the file as a data URL so we can parse the base64-encoded string reader.readAsDataURL(myFile.files[0]); -Excel.WorksheetCollection.getFirst: +'Excel.WorksheetCollection#getFirst:member(1)': - |- await Excel.run(async (context) => { const sheets = context.workbook.worksheets; @@ -3317,7 +3317,7 @@ Excel.WorksheetCollection.getFirst: await context.sync(); }); -Excel.WorksheetCollection.getLast: +'Excel.WorksheetCollection#getLast:member(1)': - |- await Excel.run(async (context) => { const sheets = context.workbook.worksheets; @@ -3343,7 +3343,7 @@ Excel.WorksheetCollection.getLast: await context.sync(); }); -Excel.WorksheetCollection.onActivated: +'Excel.WorksheetCollection#onActivated:member': - |- await Excel.run(async (context) => { let sheets = context.workbook.worksheets; @@ -3352,7 +3352,7 @@ Excel.WorksheetCollection.onActivated: await context.sync(); console.log("A handler has been registered for the OnActivate event."); }); -Excel.WorksheetCollection.onAdded: +'Excel.WorksheetCollection#onAdded:member': - |- await Excel.run(async (context) => { let sheet = context.workbook.worksheets; @@ -3361,7 +3361,7 @@ Excel.WorksheetCollection.onAdded: await context.sync(); console.log("A handler has been registered for the OnAdded event."); }); -Excel.WorksheetCollection.onDeactivated: +'Excel.WorksheetCollection#onDeactivated:member': - |- await Excel.run(async (context) => { let sheets = context.workbook.worksheets; @@ -3370,7 +3370,7 @@ Excel.WorksheetCollection.onDeactivated: await context.sync(); console.log("A handler has been registered for the OnDeactivate event."); }); -Excel.WorksheetFreezePanes.freezeAt: +'Excel.WorksheetFreezePanes#freezeAt:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -3380,7 +3380,7 @@ Excel.WorksheetFreezePanes.freezeAt: await context.sync(); }); -Excel.WorksheetFreezePanes.freezeColumns: +'Excel.WorksheetFreezePanes#freezeColumns:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -3390,7 +3390,7 @@ Excel.WorksheetFreezePanes.freezeColumns: await context.sync(); }); -Excel.WorksheetFreezePanes.freezeRows: +'Excel.WorksheetFreezePanes#freezeRows:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -3400,7 +3400,7 @@ Excel.WorksheetFreezePanes.freezeRows: await context.sync(); }); -Excel.WorksheetFreezePanes.getLocationOrNullObject: +'Excel.WorksheetFreezePanes#getLocationOrNullObject:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -3415,7 +3415,7 @@ Excel.WorksheetFreezePanes.getLocationOrNullObject: 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: +'Excel.WorksheetFreezePanes#unfreeze:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -3423,7 +3423,7 @@ Excel.WorksheetFreezePanes.unfreeze: await context.sync(); }); -Excel.WorksheetProtection.protect: +'Excel.WorksheetProtection#protect:member(1)': - |- await Excel.run(async (context) => { let activeSheet = context.workbook.worksheets.getActiveWorksheet(); @@ -3448,7 +3448,7 @@ Excel.WorksheetProtection.protect: activeSheet.protection.protect(null, password); } }); -Excel.WorksheetProtection.unprotect: +'Excel.WorksheetProtection#unprotect:member(1)': - |- await Excel.run(async (context) => { let activeSheet = context.workbook.worksheets.getActiveWorksheet(); @@ -3461,7 +3461,7 @@ Excel.WorksheetProtection.unprotect: let activeSheet = context.workbook.worksheets.getActiveWorksheet(); activeSheet.protection.unprotect(password); }); -Excel.WorksheetSingleClickedEventArgs.address: +'Excel.WorksheetSingleClickedEventArgs#address:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -3476,7 +3476,7 @@ Excel.WorksheetSingleClickedEventArgs.address: await context.sync(); }); -Excel.Worksheet.onSingleClicked: +'Excel.Worksheet#onSingleClicked:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -3491,7 +3491,7 @@ Excel.Worksheet.onSingleClicked: await context.sync(); }); -Excel.Range.sort: +'Excel.Range#sort:member(1)': - |- async function sortTopToBottom(criteria: string) { await Excel.run(async (context) => { @@ -3517,7 +3517,7 @@ Excel.Range.sort: await context.sync(); }); } -Excel.Worksheet.onRowSorted: +'Excel.Worksheet#onRowSorted:member': - |- await Excel.run(async (context) => { console.log("Adding row handler"); @@ -3539,7 +3539,7 @@ Excel.Worksheet.onRowSorted: }); }); }); -Excel.Worksheet.onColumnSorted: +'Excel.Worksheet#onColumnSorted:member': - |- await Excel.run(async (context) => { console.log("Adding column handler"); @@ -3561,7 +3561,7 @@ Excel.Worksheet.onColumnSorted: }); }); }); -Word.InlinePicture.getBase64ImageSrc: +'Word.InlinePicture#getBase64ImageSrc:member': - |- await Word.run(async (context) => { const firstPicture = context.document.body.inlinePictures.getFirst(); @@ -3575,7 +3575,7 @@ Word.InlinePicture.getBase64ImageSrc: await context.sync(); console.log(base64.value); }); -Word.Section.getHeader: +'Word.Section#getHeader:member': - |- await Word.run(async (context) => { context.document.sections.getFirst().getHeader("Primary") @@ -3583,7 +3583,7 @@ Word.Section.getHeader: await context.sync(); }); -Word.Paragraph.insertBreak: +'Word.Paragraph#insertBreak:member': - |- Word.run(async (context) => { context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.line, "After"); @@ -3591,6 +3591,7 @@ Word.Paragraph.insertBreak: await context.sync(); console.log("success"); }); +'Word.Paragraph#insertBreak:member(1)': - |- await Word.run(async (context) => { context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.page, "After"); @@ -3598,7 +3599,7 @@ Word.Paragraph.insertBreak: await context.sync(); console.log("success"); }); -Word.Paragraph.insertParagraph: +'Word.Paragraph#insertParagraph:member(1)': - |- await Word.run(async (context) => { // Second sentence, let's insert it as a paragraph after the previously inserted one. @@ -3616,7 +3617,7 @@ Word.Paragraph.insertParagraph: await context.sync(); }); -Word.Body.search: +'Word.Body#search:member(1)': - |- await Word.run(async (context) => { let results = context.document.body.search("Online"); @@ -3693,7 +3694,7 @@ Word.Body.search: console.log("Search term: " + result.searchTerm + " => Count: " + length); }); }); -Word.Body.insertParagraph: +'Word.Body#insertParagraph:member(1)': - |- await Word.run(async (context) => { let paragraph = context.document.body.insertParagraph("Timeline", "End"); @@ -3724,7 +3725,7 @@ Word.Body.insertParagraph: await context.sync(); }); -Word.Range.insertContentControl: +'Word.Range#insertContentControl:member(1)': - |- await Word.run(async (context) => { let results = context.document.body.search("Contractor"); @@ -3745,7 +3746,7 @@ Word.Range.insertContentControl: } await context.sync(); }); -Word.ContentControlCollection.getByTag: +'Word.ContentControlCollection#getByTag:member(1)': - |- await Word.run(async (context) => { let contentControls = context.document.contentControls.getByTag("customer"); @@ -3759,7 +3760,7 @@ Word.ContentControlCollection.getByTag: await context.sync(); }); -Word.Section.getFooter: +'Word.Section#getFooter:member(1)': - |- await Word.run(async (context) => { context.document.sections.getFirst().getFooter("Primary") @@ -3767,7 +3768,7 @@ Word.Section.getFooter: await context.sync(); }); -Word.Paragraph.text: +'Word.Paragraph#text:member': - |- await Word.run(async (context) => { // The collection of paragraphs of the current selection returns the full paragraphs contained in it. @@ -3777,7 +3778,7 @@ Word.Paragraph.text: await context.sync(); console.log(paragraph.text); }); -Word.Range.getTextRanges: +'Word.Range#getTextRanges:member(1)': - |- await Word.run(async (context) => { // Gets the complete sentence (as range) associated with the insertion point. @@ -3804,7 +3805,7 @@ Word.Range.getTextRanges: console.log(sentencesToTheEndOfParagraph.items[i].text); } }); -Word.Paragraph.leftIndent: +'Word.Paragraph#leftIndent:member': - |- await Word.run(async (context) => { // Indents the first paragraph. @@ -3812,7 +3813,7 @@ Word.Paragraph.leftIndent: return context.sync(); }); -Word.Paragraph.lineSpacing: +'Word.Paragraph#lineSpacing:member': - |- await Word.run(async (context) => { // Adjusts line spacing. @@ -3820,7 +3821,7 @@ Word.Paragraph.lineSpacing: await context.sync(); }); -Word.Paragraph.spaceAfter: +'Word.Paragraph#spaceAfter:member': - |- await Word.run(async (context) => { // Adjust space between paragraphs. @@ -3828,7 +3829,7 @@ Word.Paragraph.spaceAfter: await context.sync(); }); -Word.Paragraph.alignment: +'Word.Paragraph#alignment:member': - |- await Word.run(async (context) => { // Centers last paragraph alignment. @@ -3836,7 +3837,7 @@ Word.Paragraph.alignment: await context.sync(); }); -Word.Paragraph.insertText: +'Word.Paragraph#insertText:member(1)': - |- await Word.run(async (context) => { // Replace the last paragraph. @@ -3846,7 +3847,7 @@ Word.Paragraph.insertText: await context.sync(); }); -Word.ContentControl.tag: +'Word.ContentControl#tag:member': - >- // Traverses each paragraph of the document and wraps a content control on each with either a even or odd tags. @@ -3870,7 +3871,7 @@ Word.ContentControl.tag: await context.sync(); }); -Word.ContentControl.set: +'Word.ContentControl#set:member': - >- // Adds title and colors to odd and even content controls and changes their appearance. @@ -3906,7 +3907,7 @@ Word.ContentControl.set: await context.sync(); }); -Word.Paragraph.select: +'Word.Paragraph#select:member': - |- await Word.run(async (context) => { // If select is called with no parameters, it selects the object. @@ -3921,7 +3922,7 @@ Word.Paragraph.select: await context.sync(); }); -Word.Paragraph.split: +'Word.Paragraph#split:member': - |- await Word.run(async (context) => { let paragraph = context.document.body.paragraphs.getFirst(); @@ -3940,7 +3941,7 @@ Word.Paragraph.split: await pause(200); } }); -Word.Table.getCell: +'Word.Table#getCell:member(1)': - |- await Word.run(async (context) => { let firstCell = context.document.body.tables.getFirst().getCell(0, 0).body; @@ -3949,7 +3950,7 @@ Word.Table.getCell: await context.sync(); console.log("First cell text is " + firstCell.text); }); -Word.Body.insertTable: +'Word.Body#insertTable:member(1)': - |- await Word.run(async (context) => { // Use a two-dimensional array to hold the initial table values. @@ -3963,7 +3964,7 @@ Word.Body.insertTable: await context.sync(); }); -Word.Paragraph.startNewList: +'Word.Paragraph#startNewList:member(1)': - |- // This example starts a new list stating with the second paragraph. await Word.run(async (context) => { @@ -3986,7 +3987,7 @@ Word.Paragraph.startNewList: await context.sync(); }); -Word.CustomPropertyCollection.add: +'Word.CustomPropertyCollection#add:member(1)': - |- await Word.run(async (context) => { context.document.properties.customProperties.add("Numeric Property", 1234); @@ -4001,7 +4002,7 @@ Word.CustomPropertyCollection.add: await context.sync(); console.log("Property added"); }); -Word.CustomPropertyCollection.items: +'Word.CustomPropertyCollection#items:member': - |- await Word.run(async (context) => { let properties = context.document.properties.customProperties; @@ -4011,7 +4012,7 @@ Word.CustomPropertyCollection.items: 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.properties: +'Word.Document#properties:member': - |- await Word.run(async (context) => { let builtInProperties = context.document.properties; @@ -4020,7 +4021,7 @@ Word.Document.properties: await context.sync(); console.log(JSON.stringify(builtInProperties, null, 4)); }); -Word.Paragraph.set: +'Word.Paragraph#set:member(1)': - |- await Word.run(async (context) => { const paragraph = context.document.body.paragraphs.getFirst(); @@ -4046,7 +4047,7 @@ Word.Paragraph.set: await context.sync(); }); -Word.Body.paragraphs: +'Word.Body#paragraphs:member': - |- await Word.run(async (context) => { let paragraphs = context.document.body.paragraphs; From 2442e9500e5cf8182bce7740e1d17576c190408c Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 11 Sep 2019 12:25:02 -0700 Subject: [PATCH 203/660] Fixing snippet maps (#349) --- snippet-extractor-metadata/excel.xlsx | Bin 21069 -> 21054 bytes snippet-extractor-metadata/word.xlsx | Bin 12900 -> 12961 bytes snippet-extractor-output/snippets.yaml | 688 ++++++++++++------------- 3 files changed, 344 insertions(+), 344 deletions(-) diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index d2c05993e3b24a8024f639e8cdd2c1e72154ba1a..dce9172d056b0893ff4fafeafc11a49f8305742d 100644 GIT binary patch delta 8020 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 delta 8039 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 b3u0st3cw`j-}RQDbeKm7Fd0_#|L6V>GT6*B diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 8a7635c6c..21ce5d14d 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -36,7 +36,7 @@ sheet.autoFilter.apply(farmData, 3, { criterion1: "25", filterOn: Excel.FilterOn.topPercent }); await context.sync(); }); -'Excel.Binding#onDataChanged:member(1)': +'Excel.Binding#onDataChanged:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -307,7 +307,7 @@ console.log("The vertical axis display unit is: " + valueAxis.displayUnit); }); -'Excel.ChartAxis#showDisplayUnitLabel:member(1)': +'Excel.ChartAxis#showDisplayUnitLabel:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -724,7 +724,7 @@ await context.sync(); }); -'Excel.ConditionalFormat#getRange:member': +'Excel.ConditionalFormat#getRange:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -2254,6 +2254,32 @@ console.log( `Address: ${cellProperties.address}\nStyle: ${cellProperties.style}\nFill Color: ${cellProperties.format.fill.color}\nFont Color: ${cellProperties.format.font.color}`); }); +'Excel.Range#sort:member': + - |- + 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.RangeAreas#format:member': - |- await Excel.run(async (context) => { @@ -2396,7 +2422,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(1)': +'Excel.Runtime#enableEvents:member': - |- await Excel.run(async (context) => { context.runtime.load("enableEvents"); @@ -3221,7 +3247,7 @@ await context.sync(); console.log("A handler has been registered for the onChanged event."); }); -'Excel.Worksheet#showGridlines:member(1)': +'Excel.Worksheet#showGridlines:member': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -3258,6 +3284,65 @@ slicer.name = "Fruit Slicer"; await context.sync(); }); +'Excel.Worksheet#onSingleClicked:member': + - |- + 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#onRowSorted:member': + - |- + 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#onColumnSorted:member': + - |- + 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"; + } + + return context.sync(); + }); + }); + }); 'Excel.WorksheetAddedEventArgs#worksheetId:member': - |- async function onWorksheetAdd(event) { @@ -3476,147 +3561,6 @@ await context.sync(); }); -'Excel.Worksheet#onSingleClicked:member': - - |- - 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.Range#sort:member(1)': - - |- - 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.Worksheet#onRowSorted:member': - - |- - 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#onColumnSorted:member': - - |- - 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"; - } - - return context.sync(); - }); - }); - }); -'Word.InlinePicture#getBase64ImageSrc:member': - - |- - 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.Section#getHeader:member': - - |- - await Word.run(async (context) => { - context.document.sections.getFirst().getHeader("Primary") - .insertParagraph("This is a header", "End"); - - await context.sync(); - }); -'Word.Paragraph#insertBreak:member': - - |- - Word.run(async (context) => { - context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.line, "After"); - - await context.sync(); - console.log("success"); - }); -'Word.Paragraph#insertBreak:member(1)': - - |- - await Word.run(async (context) => { - context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.page, "After"); - - await context.sync(); - console.log("success"); - }); -'Word.Paragraph#insertParagraph:member(1)': - - |- - 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#search:member(1)': - |- await Word.run(async (context) => { @@ -3725,127 +3669,65 @@ await context.sync(); }); -'Word.Range#insertContentControl:member(1)': +'Word.Body#insertTable:member(1)': - |- 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(); + // 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; - 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(); + await context.sync(); }); -'Word.ContentControlCollection#getByTag:member(1)': +'Word.Body#paragraphs:member': - |- await Word.run(async (context) => { - let contentControls = context.document.contentControls.getByTag("customer"); - contentControls.load("text"); + let paragraphs = context.document.body.paragraphs; + paragraphs.load("text"); + await context.sync(); - await context.sync(); - - for (let i = 0; i < contentControls.items.length; i++) { - contentControls.items[i].insertText("Fabrikam", "Replace"); + 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); + } + }); } + }); - await context.sync(); - }); -'Word.Section#getFooter:member(1)': - - |- - await Word.run(async (context) => { - context.document.sections.getFirst().getFooter("Primary") - .insertParagraph("This is a footer", "End"); - - await context.sync(); - }); -'Word.Paragraph#text:member': - - |- - 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"); + let makeTextDistinct = new Set(text); + let distinctText = Array.from(makeTextDistinct); + let allSearchResults = []; - await context.sync(); - console.log(paragraph.text); - }); -'Word.Range#getTextRanges:member(1)': - - |- - 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(); + for (let i = 0; i < distinctText.length; i++) { + let results = context.document.body.search(distinctText[i], { matchCase: true, matchWholeWord: true }); + results.load("text"); - // 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("End") - ) - .getTextRanges(["."], false /* Don't trim spaces*/); - sentencesToTheEndOfParagraph.load("text"); - await context.sync(); + // Map search term with its results. + let correlatedResults = { + searchTerm: distinctText[i], + hits: results + }; - for (let i = 0; i < sentencesToTheEndOfParagraph.items.length; i++) { - console.log(sentencesToTheEndOfParagraph.items[i].text); + allSearchResults.push(correlatedResults); } - }); -'Word.Paragraph#leftIndent:member': - - |- - 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': - - |- - await Word.run(async (context) => { - // Adjusts line spacing. - context.document.body.paragraphs.getFirst().lineSpacing = 20; await context.sync(); - }); -'Word.Paragraph#spaceAfter:member': - - |- - await Word.run(async (context) => { - // Adjust space between paragraphs. - context.document.body.paragraphs.getFirst().spaceAfter = 20; - await context.sync(); - }); -'Word.Paragraph#alignment:member': - - |- - await Word.run(async (context) => { - // Centers last paragraph alignment. - context.document.body.paragraphs.getLast().alignment = "Centered"; - - await context.sync(); - }); -'Word.Paragraph#insertText:member(1)': - - |- - await Word.run(async (context) => { - // Replace the last paragraph. - let range = context.document.body.paragraphs.getLast().insertText("Just replaced the last paragraph!", "Replace"); - range.font.highlightColor = "black"; - range.font.color = "white"; + // Display counts. + allSearchResults.forEach((result) => { + let length = result.hits.items.length; - await context.sync(); + console.log("Search term: " + result.searchTerm + " => Count: " + length); + }); }); 'Word.ContentControl#tag:member': - >- @@ -3871,7 +3753,7 @@ await context.sync(); }); -'Word.ContentControl#set:member': +'Word.ContentControl#set:member(1)': - >- // Adds title and colors to odd and even content controls and changes their appearance. @@ -3907,7 +3789,154 @@ await context.sync(); }); -'Word.Paragraph#select:member': +'Word.ContentControlCollection#getByTag:member(1)': + - |- + await Word.run(async (context) => { + let contentControls = 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.CustomPropertyCollection#add:member(1)': + - |- + await Word.run(async (context) => { + context.document.properties.customProperties.add("Numeric Property", 1234); + + await context.sync(); + console.log("Property added"); + }); + - |- + await Word.run(async (context) => { + context.document.properties.customProperties.add("String Property", "Hello World!"); + + await context.sync(); + console.log("Property added"); + }); +'Word.CustomPropertyCollection#items:member': + - |- + await Word.run(async (context) => { + let properties = context.document.properties.customProperties; + properties.load("key,type,value"); + + await context.sync(); + 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#properties:member': + - |- + await Word.run(async (context) => { + let builtInProperties = context.document.properties; + builtInProperties.load("*"); // Let's get all! + + await context.sync(); + console.log(JSON.stringify(builtInProperties, null, 4)); + }); +'Word.InlinePicture#getBase64ImageSrc:member(1)': + - |- + 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.Paragraph#insertBreak:member(1)': + - |- + Word.run(async (context) => { + context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.line, "After"); + + await context.sync(); + console.log("success"); + }); + - |- + await Word.run(async (context) => { + context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.page, "After"); + + await context.sync(); + console.log("success"); + }); +'Word.Paragraph#insertParagraph:member(1)': + - |- + 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': + - |- + 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.Paragraph#leftIndent:member': + - |- + 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': + - |- + await Word.run(async (context) => { + // Adjusts line spacing. + context.document.body.paragraphs.getFirst().lineSpacing = 20; + + await context.sync(); + }); +'Word.Paragraph#spaceAfter:member': + - |- + await Word.run(async (context) => { + // Adjust space between paragraphs. + context.document.body.paragraphs.getFirst().spaceAfter = 20; + + await context.sync(); + }); +'Word.Paragraph#alignment:member': + - |- + await Word.run(async (context) => { + // Centers last paragraph alignment. + context.document.body.paragraphs.getLast().alignment = "Centered"; + + await context.sync(); + }); +'Word.Paragraph#insertText:member(1)': + - |- + await Word.run(async (context) => { + // Replace the last paragraph. + let range = context.document.body.paragraphs.getLast().insertText("Just replaced the last paragraph!", "Replace"); + range.font.highlightColor = "black"; + range.font.color = "white"; + + await context.sync(); + }); +'Word.Paragraph#select:member(1)': - |- await Word.run(async (context) => { // If select is called with no parameters, it selects the object. @@ -3915,6 +3944,7 @@ await context.sync(); }); +'Word.Paragraph#select:member': - |- 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. @@ -3922,7 +3952,7 @@ await context.sync(); }); -'Word.Paragraph#split:member': +'Word.Paragraph#split:member(1)': - |- await Word.run(async (context) => { let paragraph = context.document.body.paragraphs.getFirst(); @@ -3941,29 +3971,6 @@ await pause(200); } }); -'Word.Table#getCell:member(1)': - - |- - 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); - }); -'Word.Body#insertTable:member(1)': - - |- - 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.Paragraph#startNewList:member(1)': - |- // This example starts a new list stating with the second paragraph. @@ -3987,40 +3994,6 @@ await context.sync(); }); -'Word.CustomPropertyCollection#add:member(1)': - - |- - await Word.run(async (context) => { - context.document.properties.customProperties.add("Numeric Property", 1234); - - await context.sync(); - console.log("Property added"); - }); - - |- - await Word.run(async (context) => { - context.document.properties.customProperties.add("String Property", "Hello World!"); - - await context.sync(); - console.log("Property added"); - }); -'Word.CustomPropertyCollection#items:member': - - |- - await Word.run(async (context) => { - let properties = context.document.properties.customProperties; - properties.load("key,type,value"); - - await context.sync(); - 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#properties:member': - - |- - await Word.run(async (context) => { - let builtInProperties = context.document.properties; - builtInProperties.load("*"); // Let's get all! - - await context.sync(); - console.log(JSON.stringify(builtInProperties, null, 4)); - }); 'Word.Paragraph#set:member(1)': - |- await Word.run(async (context) => { @@ -4047,49 +4020,76 @@ await context.sync(); }); -'Word.Body#paragraphs:member': +'Word.Range#insertContentControl:member(1)': - |- await Word.run(async (context) => { - let 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 results = context.document.body.search("Contractor"); + results.load("font/bold"); - let makeTextDistinct = new Set(text); - let distinctText = Array.from(makeTextDistinct); - let allSearchResults = []; + // 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(); - for (let i = 0; i < distinctText.length; i++) { - let results = context.document.body.search(distinctText[i], { matchCase: true, matchWholeWord: true }); - results.load("text"); + 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#getTextRanges:member(1)': + - |- + 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(); - // Map search term with its results. - let correlatedResults = { - searchTerm: distinctText[i], - hits: results - }; + // 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("End") + ) + .getTextRanges(["."], false /* Don't trim spaces*/); + sentencesToTheEndOfParagraph.load("text"); + await context.sync(); - allSearchResults.push(correlatedResults); + for (let i = 0; i < sentencesToTheEndOfParagraph.items.length; i++) { + console.log(sentencesToTheEndOfParagraph.items[i].text); } + }); +'Word.Section#getHeader:member(1)': + - |- + await Word.run(async (context) => { + context.document.sections.getFirst().getHeader("Primary") + .insertParagraph("This is a header", "End"); await context.sync(); + }); +'Word.Section#getFooter:member(1)': + - |- + await Word.run(async (context) => { + context.document.sections.getFirst().getFooter("Primary") + .insertParagraph("This is a footer", "End"); - // Display counts. - allSearchResults.forEach((result) => { - let length = result.hits.items.length; + await context.sync(); + }); +'Word.Table#getCell:member(1)': + - |- + await Word.run(async (context) => { + let firstCell = context.document.body.tables.getFirst().getCell(0, 0).body; + firstCell.load("text"); - console.log("Search term: " + result.searchTerm + " => Count: " + length); - }); + await context.sync(); + console.log("First cell text is " + firstCell.text); }); From 603ccc71d301c0214c1b694a77384fa67e873fe2 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 11 Sep 2019 12:43:48 -0700 Subject: [PATCH 204/660] Final snippet mapping rework pass (#350) --- snippet-extractor-metadata/excel.xlsx | Bin 21054 -> 21034 bytes snippet-extractor-metadata/word.xlsx | Bin 12961 -> 12960 bytes snippet-extractor-output/snippets.yaml | 3 +-- 3 files changed, 1 insertion(+), 2 deletions(-) diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index dce9172d056b0893ff4fafeafc11a49f8305742d..1eaaf80d03452a5c07721696890361ee30e12a58 100644 GIT binary patch delta 7002 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 { const sheet = context.workbook.worksheets.getItem("Shapes"); @@ -3944,7 +3944,6 @@ await context.sync(); }); -'Word.Paragraph#select:member': - |- 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. From c73b995ae6b33cf8b64cef2d0ec15c5706d6705a Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 19 Sep 2019 11:32:15 -0700 Subject: [PATCH 205/660] [excel] (Range) Group/Ungroup sample (#352) * Inital work * Outline sample --- playlists/excel.yaml | 9 + .../event-worksheet-single-click.yaml | 2 +- samples/excel/85-preview-apis/outline.yaml | 240 ++++++++++++++++++ .../85-preview-apis/pivottable-slicer.yaml | 2 +- .../workbook-save-and-close.yaml | 2 +- snippet-extractor-metadata/excel.xlsx | Bin 21034 -> 21294 bytes snippet-extractor-output/snippets.yaml | 45 ++++ view/excel.json | 1 + 8 files changed, 298 insertions(+), 3 deletions(-) create mode 100644 samples/excel/85-preview-apis/outline.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 32e04c66c..f05fd207d 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -837,6 +837,15 @@ group: Preview APIs api_set: ExcelAPI: '1.10' +- id: excel-outline + name: Outline + fileName: outline.yaml + description: Creates an outline by grouping rows and columns. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/85-preview-apis/outline.yaml + group: Preview APIs + api_set: + ExcelApi: '1.10' - id: excel-workbook-save-and-close name: Save and close fileName: workbook-save-and-close.yaml diff --git a/samples/excel/85-preview-apis/event-worksheet-single-click.yaml b/samples/excel/85-preview-apis/event-worksheet-single-click.yaml index 4c4291264..e2b1e3431 100644 --- a/samples/excel/85-preview-apis/event-worksheet-single-click.yaml +++ b/samples/excel/85-preview-apis/event-worksheet-single-click.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 6 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/85-preview-apis/outline.yaml b/samples/excel/85-preview-apis/outline.yaml new file mode 100644 index 000000000..86aabe849 --- /dev/null +++ b/samples/excel/85-preview-apis/outline.yaml @@ -0,0 +1,240 @@ +order: 4 +id: excel-outline +name: Outline +description: Creates an outline by grouping rows and columns. +host: EXCEL +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)); + + async function groupRows() { + 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(); + }); + } + + async function groupColumns() { + Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Group the larger, main level. Note that the outline controls + // will be on column R, meaning C-Q will collapse and expand. + sheet.getRange("C:Q").group(Excel.GroupOption.byColumns); + + // Group the smaller, sublevels. Note that the outline controls + // will be on columns G, L, and R, meaning C-F, H-K, and M-P will collapse and expand. + sheet.getRange("C:F").group(Excel.GroupOption.byColumns); + sheet.getRange("H:K").group(Excel.GroupOption.byColumns); + sheet.getRange("M:P").group(Excel.GroupOption.byColumns); + await context.sync(); + }); + } + + async function collapseOutline() { + Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // This collapses the entire outline. + sheet.showOutlineLevels(1, 1); + await context.sync(); + }); + } + + async function expandOutline() { + 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(); + }); + } + + async function ungroup() { + 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(); + }); + } + + async function setupData() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + + const data = [ + ["Category", "Type", "Q1", "Q2", "Q3", "Q4", "Q1", "Q2", "Q3", "Q4", "Q1", "Q2", "Q3", "Q4"], + ["Stone Fruit", "Peaches", 500, 2000, 5000, 1500, 600, 2200, 5400, 1300, 300, 1500, 4300, 1200], + [, "Plums", 700, 900, 1300, 800, 800, 1000, 2000, 700, 300, 600, 1100, 700], + ["Citrus", "Lemons", 8000, 3000, 4500, 7500, 8900, 4000, 3500, 4500, 6000, 2500, 4500, 9500], + [, "Limes", 12000, 7000, 8000, 13000, 16000, 10000, 8500, 12000, 11000, 5600, 6500, 11000] + ]; + + sheet.getRange("A3:N7").values = data; + sheet.getRange("A1").values = [["Fruit Sales"]]; + sheet.getRange("A1").style = "Heading1"; + sheet.getRanges("C2:N3,A3:B7").format.font.bold = true; + + sheet.getRange("A1:N7").format.autofitColumns(); + sheet.activate(); + + await context.sync(); + }); + } + + async function setupTotals() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const subtotalColumns = ["G", "L", "Q"]; + const subtotalRows = ["6", "9"]; + let year = 2017; + for (let column of subtotalColumns) { + sheet.getRange(`${column}:${column}`).insert(Excel.InsertShiftDirection.right); + sheet.getRange(`${column}3`).values = [["Year Total"]]; + sheet.getRange(`${column}3`).getRowsAbove(1).values = [[`${year++}`]]; + } + + for (let row of subtotalRows) { + sheet.getRange(`${row}:${row}`).insert(Excel.InsertShiftDirection.down); + sheet.getRange(`B${row}`).values = [["Category Total"]]; + } + + for (let column of subtotalColumns) { + const totalRange = sheet.getRange(`${column}4`); + const precedingRange = totalRange.getColumnsBefore(4); + precedingRange.load("address"); + await context.sync(); + totalRange.formulas = [[`=SUM(${precedingRange.address})`]]; + totalRange.format.font.italic = true; + totalRange.format.fill.color = "LightBlue"; + totalRange.autoFill(`${column}4:${column}9`); + } + + for (let row of subtotalRows) { + const totalRange = sheet.getRange(`C${row}`); + const precedingRange = totalRange.getRowsAbove(2); + precedingRange.load("address"); + await context.sync(); + totalRange.formulas = [[`=SUM(${precedingRange.address})`]]; + totalRange.format.font.italic = true; + totalRange.format.fill.color = "LightBlue"; + totalRange.autoFill(`C${row}:Q${row}`); + } + + sheet.getRange("R3").values = [["Grand Total"]]; + sheet.getRange("R4").formulas = [["=SUM(G4,K4,Q4)"]]; + sheet.getRange("R4").autoFill("R4:R9"); + + sheet.getRange("B10").values = [["Grand Total"]]; + sheet.getRange("C10").formulas = [["=SUM(C6,C9)"]]; + sheet.getRange("C10").autoFill("C10:R10"); + + sheet.getRange("A1:R9").format.autofitColumns(); + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback, option?) { + try { + await callback(option); + } 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 group and ungroup rows and columns for an outline.

    +
    + +
    +

    Set up

    + +

    + +

    + +
    +

    Try it out

    + +

    + +

    +

    Use the Excel UI to expand or collapse parts of the outline. The following buttons will expand or collapse the + entire outline.

    + +

    + +

    +

    When you are finished exploring the grouping functionality, use the following button to ungroup the rows and + 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/samples/excel/85-preview-apis/pivottable-slicer.yaml b/samples/excel/85-preview-apis/pivottable-slicer.yaml index 1c7159fd1..f7730be03 100644 --- a/samples/excel/85-preview-apis/pivottable-slicer.yaml +++ b/samples/excel/85-preview-apis/pivottable-slicer.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 7 id: excel-pivottable-slicer name: Slicer description: Adds a slicer to a PivotTable. diff --git a/samples/excel/85-preview-apis/workbook-save-and-close.yaml b/samples/excel/85-preview-apis/workbook-save-and-close.yaml index 584dff9e9..0dc1b0f57 100644 --- a/samples/excel/85-preview-apis/workbook-save-and-close.yaml +++ b/samples/excel/85-preview-apis/workbook-save-and-close.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 5 id: excel-workbook-save-and-close name: Save and close description: Saves and closes a workbook. diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 1eaaf80d03452a5c07721696890361ee30e12a58..60f33f07bb2dfd33145a6a53e77ae5e52125a2f6 100644 GIT binary patch delta 11859 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 { + 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#showOutlineLevels:member(1)': + - |- + Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // This collapses the entire outline. + sheet.showOutlineLevels(1, 1); + await context.sync(); + }); + - |- + 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.Range#ungroup:member(1)': + - |- + 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': - |- await Excel.run(async (context) => { diff --git a/view/excel.json b/view/excel.json index 3ddb91f4f..82a8751b6 100644 --- a/view/excel.json +++ b/view/excel.json @@ -89,6 +89,7 @@ "excel-event-column-and-row-sort": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/event-column-and-row-sort.yaml", "excel-comment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/comment.yaml", "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", + "excel-outline": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/outline.yaml", "excel-workbook-save-and-close": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-save-and-close.yaml", "excel-event-worksheet-single-click": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/event-worksheet-single-click.yaml", "excel-pivottable-slicer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/pivottable-slicer.yaml", From 8670b7dd35f5f13f6242c62fe8ddb3a0af8cbd3d Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 20 Sep 2019 14:35:31 -0700 Subject: [PATCH 206/660] [excel] (Range) Auto fill sample (#354) * Auto fill sample * Fixing variable name * Smaller button names --- playlists/excel.yaml | 9 + samples/excel/85-preview-apis/comment.yaml | 2 +- .../event-column-and-row-sort.yaml | 2 +- .../event-worksheet-single-click.yaml | 2 +- samples/excel/85-preview-apis/outline.yaml | 2 +- .../85-preview-apis/pivottable-slicer.yaml | 2 +- .../85-preview-apis/range-auto-fill.yaml | 156 ++++++++++++++++++ .../workbook-insert-external-worksheets.yaml | 2 +- .../workbook-save-and-close.yaml | 2 +- snippet-extractor-metadata/excel.xlsx | Bin 21294 -> 21378 bytes snippet-extractor-output/snippets.yaml | 11 ++ view/excel.json | 1 + 12 files changed, 184 insertions(+), 7 deletions(-) create mode 100644 samples/excel/85-preview-apis/range-auto-fill.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index f05fd207d..a4dd0cbec 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -808,6 +808,15 @@ group: Worksheet api_set: ExcelApi: '1.1' +- 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////samples/excel/85-preview-apis/range-auto-fill.yaml + group: Preview APIs + api_set: + ExcelApi: '1.10' - id: excel-event-column-and-row-sort name: Column and row sort events fileName: event-column-and-row-sort.yaml diff --git a/samples/excel/85-preview-apis/comment.yaml b/samples/excel/85-preview-apis/comment.yaml index 80af2b001..83d8c6ba8 100644 --- a/samples/excel/85-preview-apis/comment.yaml +++ b/samples/excel/85-preview-apis/comment.yaml @@ -1,4 +1,4 @@ -order: 2 +order: 3 id: excel-comment name: Comments description: 'Adds, edits, and removes comments and comment replies.' diff --git a/samples/excel/85-preview-apis/event-column-and-row-sort.yaml b/samples/excel/85-preview-apis/event-column-and-row-sort.yaml index 83d207254..92227ed6e 100644 --- a/samples/excel/85-preview-apis/event-column-and-row-sort.yaml +++ b/samples/excel/85-preview-apis/event-column-and-row-sort.yaml @@ -1,4 +1,4 @@ -order: 1 +order: 2 id: excel-event-column-and-row-sort name: Column and row sort events description: Registers event handlers that run when column or row sorting events occur in the current worksheet. diff --git a/samples/excel/85-preview-apis/event-worksheet-single-click.yaml b/samples/excel/85-preview-apis/event-worksheet-single-click.yaml index e2b1e3431..6e30ed8ab 100644 --- a/samples/excel/85-preview-apis/event-worksheet-single-click.yaml +++ b/samples/excel/85-preview-apis/event-worksheet-single-click.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 7 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/85-preview-apis/outline.yaml b/samples/excel/85-preview-apis/outline.yaml index 86aabe849..7a81bc748 100644 --- a/samples/excel/85-preview-apis/outline.yaml +++ b/samples/excel/85-preview-apis/outline.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 5 id: excel-outline name: Outline description: Creates an outline by grouping rows and columns. diff --git a/samples/excel/85-preview-apis/pivottable-slicer.yaml b/samples/excel/85-preview-apis/pivottable-slicer.yaml index f7730be03..46cd4069f 100644 --- a/samples/excel/85-preview-apis/pivottable-slicer.yaml +++ b/samples/excel/85-preview-apis/pivottable-slicer.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 8 id: excel-pivottable-slicer name: Slicer description: Adds a slicer to a PivotTable. diff --git a/samples/excel/85-preview-apis/range-auto-fill.yaml b/samples/excel/85-preview-apis/range-auto-fill.yaml new file mode 100644 index 000000000..d7a0ff07c --- /dev/null +++ b/samples/excel/85-preview-apis/range-auto-fill.yaml @@ -0,0 +1,156 @@ +order: 1 +id: excel-range-auto-fill +name: Auto fill +description: Writes to cells with the auto fill feature. +host: EXCEL +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)); + + async function autoFillValues() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const sumCell = sheet.getRange("F4"); + + // Copy only the values and formulas, not the formatting. The formulas will be contextually updated based on their new locations. + sumCell.autoFill("F4:F7", Excel.AutoFillType.fillValues); + sumCell.format.autofitColumns(); + await context.sync(); + }); + } + + async function autoFillFormats() { + 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(); + }); + } + + async function autoFillCopy() { + 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(); + }); + } + + async function setupData() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + + const data = [ + ["Fruit", "Q1", "Q2", "Q3", "Q4", 2017, "Q1", "Q2", "Q3", "Q4", 2018, "Q1", "Q2", "Q3", "Q4", 2019], + ["Quinces", 500, 2000, 5000, 1500, , 600, 2200, 5400, 1300, , 300, 1500, 4300, 1200, ""], + ["Plums", 700, 900, 1300, 800, , 800, 1000, 2000, 700, , 300, 600, 1100, 700, ""], + ["Apples", 8000, 3000, 4500, 7500, , 8900, 4000, 3500, 4500, , 6000, 2500, 4500, 9500, ""], + ["Peaches", 12000, 7000, 8000, 13000, , 16000, 10000, 8500, 12000, , 11000, 5600, 6500, 11000, ""] + ]; + + sheet.getRange("A3:P7").values = data; + sheet.getRange("A1").values = [["Fruit Sales"]]; + sheet.getRange("A1").style = "Heading1"; + sheet.getRanges("B2:P3,A3:A7").format.font.bold = true; + + sheet.getRange("A1:P7").format.autofitColumns(); + sheet.activate(); + + await context.sync(); + }); + } + + async function setupFirstSums() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const sumRange = sheet.getRange("F4"); + sumRange.formulas = [["=SUM(B4:E4)"]]; + sumRange.format.fill.color = "LightBlue"; + sumRange.format.font.bold = true; + sheet.getRanges("K4,P4").copyFrom("F4", Excel.RangeCopyType.all); + sheet.getRanges("F4,K4,P4").format.autofitColumns(); + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback, option?) { + try { + await callback(option); + } 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 provide cell data for surrounding cells using auto fill.

    +
    + +
    +

    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/excel/85-preview-apis/workbook-insert-external-worksheets.yaml b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml index 582104363..010b5a9c2 100644 --- a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml +++ b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml @@ -1,4 +1,4 @@ -order: 3 +order: 4 id: excel-workbook-insert-external-worksheets name: Insert external worksheets description: Inserts worksheets from another workbook into the current workbook. diff --git a/samples/excel/85-preview-apis/workbook-save-and-close.yaml b/samples/excel/85-preview-apis/workbook-save-and-close.yaml index 0dc1b0f57..fd1bf3ebf 100644 --- a/samples/excel/85-preview-apis/workbook-save-and-close.yaml +++ b/samples/excel/85-preview-apis/workbook-save-and-close.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 6 id: excel-workbook-save-and-close name: Save and close description: Saves and closes a workbook. diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 60f33f07bb2dfd33145a6a53e77ae5e52125a2f6..8b4ba0e02934431b6a9d17e308cc52c24d405072 100644 GIT binary patch delta 11849 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 I@E_X$2U&1I5&!@I delta 11750 zcmZ8{18`+gv+jv)TN868wlT47+t!Jb$s`k;*tTukw(U&p*2zsunTben&)KH^xkV z96XN~l~%%3d6TU}?o!}rbugOJuC+scw2WP%YIU01jaskXLh|1NiT$`=-cLOl7e6W! zp0EK8enINm9<}@TgOQvSg7HKS!YV%(S&(Ghj_)(~DlRlK&WqgnmXR{Teqr088N0!T zRnRH@mBkkA*Xe{(>M+MYd7__vz|dA91Yc%x6LfVaOGhTP7iYZRhmEW#icq-LE?u!h zGIwBUM1{l{4aQLyPbQFDp8O{$^Y!3^bI&p zOGA;EVqMe*S+HDuvf_s=;JZ*lAN!$3U$uIj9JHXbcW)I{4YpnJ+Q=4In=V!?k1Jd1 zQ&~dGv>sJMTA$1bFXTM%ML`^7T+F}dY5~eyc{KI{v0@Z~7$bCEgJIeR!qy5nL42^} zF=_P#SPEBy%VR-L^A`k)Ev6_!uoFxkFW&H+#$OgXCAeR{dA;!rIJC8Q4AdN{yP^El zcdbNIH6(@p#6?#32);!@EwQ#U<(ZYxJi;Me`8+1+KZ7?tQ4d+8sXd_D~u87kFd? z+m13b^W=qWd8-pt-)?P#j8gWYn)vZwPYESmIkICiGH?opkiidzR;`Ci44U%JTf%Nh z3WsJDbLcplOXkrD+A~fKd(Xi4Y>U2=qq%pETh3M;hrbT z)r7Fpa{|dDF3v62OE#nkx%!P_)(plZHXxPFM74lscrI(!kt_f7_t&22-`5rz7AE!`HUX?WD^VueTq>IK{t)#} z@RH!j*oKHVowxu%MF{|a3jn<-;DdG$(ShSNzD5GrTBKmut9%0Ub0g&H=veVh9uBcz zS!cOy^T(=Km2E=y9gn4DrD^^dS7%v!!`&Y*&yF{pnwa49MtshTT)Wv%Eq|&?KhC?<=^%AkemhqKS{n!5bU3>cGetpVwo!<)a*IAUl zKHrw_^TYYPefP^Psnb_#+T`S5Hqhs#Tl!O@TcGI8qa?;;pWs_+8_hC6`n&hbc)&c3Ht^&zG;VW_jxnnnF9c!;XA_PyC@@Ok9*bI*@daR zsry$i2J7wnb$*_))KVkq>HCj9Z|M0uM4xcrfIDR|Iq%oYmj0(<6Ao{`*B|ZgE_a`=+eyCW?7O!tl80}} zT@>CO-Wa0OU8y4*5f!W)Tiy$n2yvRmdo19{TZDj+45f| zSW22OgwdAbd0*eh*zF4CszT5ARHu~qaL_Xry@ntueCpmDW{9$zi7IJkV8DyCc%cIo zH}egsC!u@L%9z9A293GgrH6Z9ALWE0ufH_cm~xe9qzcf;0DlG7nPw!VNd%4c5n{%8 z%Y+4cC!Pk^C2-Nm3|WI#--GtbVME#G<|AtRKK>9T!sLjJsf@GogfM*$us(9R6LuN%Aky$*ElxV~Py=gkj6tu%{g6eu)EU?4kfm=b zs}kPHEa{4fm>wwO+NVV`qqa^emU*QZ?)gIo<)x1HItA{i`S;(DJM)6es6L(nkk)HP ze~)ViIHnn^0UU=L?z0p%luGytt4uZmM1=jox%2Fl)8B7@B-{v}fwC5qI>U3Ll(UN% zTZCpNqG3Vkd*Er6fmCY6A}gz9OJr9QbK*8LCAz2;5@43+%YTMCl~DJl+6ub8%Lt*} zRr3vPyFF@3`+FpLRLqF-78v+DJmldS0p`+JGZ*}p$`8aLofwIzg-ev@liZ-l5*|8Q zx5W^YHrDA?)XXJHp?xb08C5$zVGUk{wyb(Gy2?OlFDvAeC=BL+f2VYOE8R{+HLVb4 z%fbRI^Y277O|>%WgZ!un+gd_K5eI+36etS=8yHySj_sOR+6wpG_@CEpe@%JGW9Zq) zLx6aoSxzU$sDQ+NSz8Eu;MRL45R*3*eWU&`{|9vDKR^>s-GWhT*(pDwxQU=j@ZEu| zJ}ZgXZm{5`MaI|-r()lcZw!-&+qfjbPBJ(-g0zJL z;;rG>PW5JBXZKqQhFc@STpC?T;9MK)4OerAog#?q?_+8ASMg^CbdgKku^D_EIK*Q1 z<13$O48cmYf#7ACP~-pXMN9~xQwrqN$y-~k=Yvh^tgrR$W_B!xMK2m#tv_9O|CZeV z#yCa%7g{v}X1K@9Iw0{RVY*u}xtL9iXpT7ClSKwa3vtVqV$8xI;7kA^>3=4lrlzcr zY5}f8Hk?BLL6qJm62-~%5?(*)yx0mGT1~?U#oh`oTej{%shuGW-0f^e-IgN_9UBIZ zxE&K!q=!~jPTt%Jl;?3q-)m>!|7NU;7;tMudq(%)hWEf2F`=`NY2d25wkKs0U-sQK zR2~fYrSgV-^-V1JAK~ntVL~e|T3pDHpDfTpj-+`{qLL58Wx$n{XHl;GT@;>WPX|l* zx2N~_5H1&GP%Rb?u5vu(wyF;4*twnXByLYZB$#3~kq9C$EocV|6POwj!71}3syz%S z!JmIb#*`~_2Y~c>L!Lds+r`<7WD-z_)Jw+4e+U)J7un&HZ!z#sOcFR|?)jymUs6dVVP_GP5(djEgMu9M(go=I zHEjy3&JP~d?!YzhXFk4y?vkbF?1<4^&7AeP)zFN&nGB)=ip{ zyaKK>PQGCMTttKCrfG_u*U8|=gdAd(SdVGPiaaytl%vG_2bEyTkf3B8!f33LL3}+5 z!XvAUf2O2fF*8)^hfKB&N{Cgweq<9KjOFR0P`*AP*= z|EC2UFT$)<5|B9F&Gi9SD6v&C;R!l|XF(9*yHyhLk@q8(Jc(5?L)y_gliU3|w0)*0 zt968qMGf`A;V8J_Rvw%sbRgBs9-Ba|W~@k`6E^uK1Aml(8(OO2))VQ3%^15CZ~2B+ zgy(t%u_oSIXV5EPeh!H<%o2p+Ab^Rw^$@Z7akfF15iZ3kgOhGAFinwyat~XyYAsi@ zoGt>K;Dw>9Na%+xKZX4dpe+LAn+rmWrmArX}pE^Ft!s^_`6hdEtA`_KD}z9dH|o^5pVS=iT=Pd5=QS_xOrU7tZKy6Ge?S zv~-J2^@Xb zv65uQa#|gvWNTrleEX&%Lzl=9<}dnbs^fr;5o9G6G7&inQ&lX)9$h7q)Wu6fp%@1| z85YasOBpitL}j{T9caU@D(2pm;ZoBjSm;Zh_e2S@q0513H`a}eIe$)@b)?`?pr!Qc z&wjvFlT5_#dDxUVmj=kY(yWHxD(qmBw?sdGK@scdVicoc7$2~SEU8jJ8_MB4ey7(W zI(G-Fw{H(=;fan_P@@5y|C;Ff5L18YYiC19aZCD1t62ye30LYTZ&67i+sEx{l;rgA z+S@Uq|5*78vr;{zxc2=smt0Bj4%o#YI7zr)P^^h|vo{6z=eMp1jUqKX9Wovxz(==> zCrfPo57ZQJ*jGRKA+jMDv>?~ZBdK^Y0t?mD&4U@fGh2oRpW^m7PMb^;*)ZniA8srm zuJ%Xed-s(Q1Ps<-lspzDn!;f6(E`YrEsGvqNxjb!l5wF#*}9a|%!6qh8hBg_Lm(F-n|8E*ZP`>ij5o=n`^7+Vr0N_|lTiF%ZB zL8CO6M)gZUoT7AKAxBfn3-2bO99MjAd`~c10bx;`5j2l9I}fU-ZKrLFF3JlX@~%+| zJF6sc_9~Dn(Rwe=wayJY2mY2)>5^W}#pj4pWTbV#BBtL<;JL{TwT8vZeN;9tNkSqj zd-)dg;QX^lsN8)|5Q%-gpy5`t(%DDFy<{zHHW10QPm^pQyn^^!=fPSH0P{Fy@brfb=_-*etrPy=J;yX} zf7@O#_B_PmU7-vdygjzPHLHP5P9hy1p-Jj~E7_y+2CAf}A6sl^?efD*5Q^+&N7F*4 z?t!eXUAzp{_)d+#MS&ZegM)OElr(=;Zz%C^@Lj-P^(dy2(WJI3Iq>Pp5_z1eIwwf7 zw3Iszwf-sOYp?jmlCs!StDRKSPAW4^rDTXRaT(I*ca-KVEp3R# z#qtYBxtMaFwbqTYYveU3M}5#knG)Ue#4u^?+faj|=2!&e9Pr_NP|BH3;Sk7-jI)p< zxnc*xeG_q_r9d}S5Qvh`vFr3z^f2&`^2vQw9UPP@Bq3{ccGop@F^e=mrdtnb(NW}5 z526!}qov0k87}(2Oh#Uz$`j8oO;X-S-x=Ww6^R_}gn=$t2-!kDS~Y zsRub#QhTNb7b%N33($8#H#lqLmAok^rc&$cyono^hI(XE3>}MvW~wgbrTKY3$qj#j zZztN~QA?`+MJJ3#PmiCY=~fHzVB^M}?&QEpNFS1z1GG&%WUpad2G@$~%F-I`lC-a# z(||kE(9%zi(!RqH{ej#;!X(7srTb^PvNI-Ixk?iY55|$FsuUmIa8ZIF;Z+?dxv}0k z7->pb5^vThJX*@moK}F8apzHEBOdJDIX|nrPB#bbiC%@yph#D~C-MV5x_`06A_`^a zY>kNIJFqHDS{rNmBR=~z*wfq~~EC?ZlO^QI{7;#Gb4Y*W|=Sc!7UT z<7=;EjKzdRdP zDrkLnr`Y7onRNBRTf0I^BS>1Ov8-sgWzGM07mx@kqxak?c$zWtRdIdbaa%F6-1<4p zfjk2N>3h{WUje>xL1TBQK+B)+&cBE z0Dfwo4FI>QUZ3?HY`y;z(_(fZ)>2p+=2j6yNjQ47tng}INf~5?)Dz1fZ(iknrU0~3 z%EQe4V`sBKGb8HHJE?~o@5$_gvCZt{TElSb6c!Qog2>mMm6BE=EmGAI3#yKZ z9vxk`7+w!Nq{zCL?ABS@i`0-Lq|p^ zt|5}O@i(NWF;9Fi7|iwi;;(mN@;!Zhvi|~efQ4ASYpS;>prGi=i1#m2Bztl+HE z)O=wiw%k%-q+UBh9TO!fHXe8+mK3`tZrdg>zNyu51p230RSN@;yol&ysr(aEg8i2R zmS4lE(2jlk@GqCQuHlO`fr$Y^vi!Y0SND$lq#=sPd_dcCn!0XnFRE4EZ5WIERvZhh=v~{x9 z_JvYG@es@|arvM$uo=#$FPbLt7>e&kLHsA1JTmd6Gb8&8lFbSv4nMMwD$^+Tj%CS? zdMSKB-5SI7Fy1T|w`YTm7(_NMmIpOWnkF*wS&Ppvp3@5P(V(YtOE zVoJugB3K#1w}V*Mq`*JkAS!E8lVE$+jkz;%+eBY5*bi<3LiJfy2{2)~`Je|}GLuM- z)d+9oCu;6;Y8m4Y^}#~hw|rk7CEQ^VNU3}_Z-xBFD6H|i#*A~*(nst;v__xky2eh= z#Ah8&?s6hv z9#R!5Wr%tLS!@_|P@f{>i#0D>pxze);R_b$9~4t)wf;C{j5HH7#4kWPKR3WG!)K#16v(WGg< zqMZ_l&pZL^&ZB}=Zn^v``*(pZdkM;HeG?H}$*B~;odT{Bi>^eimB%9D=KTG6DZn|^iIkmUa?iq6tm2@Q3^D%bz_@M!3%{6$Vgt?fV153X!k zdXZEED_E-WAaHY6yC6rk8mfJFw%A||!K=OXLQ4^x4Z0FT3vr0|2^*MP7@uu<_h_JH zPnCv;B$MF45YoX+^uO21o|uMz#wJIOg;=nArnjD2#UDLtfebzu;c}=wp7l&8R{V;X zV&_=f<@^rKz;<}L$x+$XDm0`lJT3#BG0I3qg?@Ms3AU8><8s3nC--$B z`>lw7-{4vSbm|9H7=r8bQ^!~JT|~gimkoZwWvxz)S{@H-rz${iI-QL4X0Rr*@<-7a z$8@@}PGtDp;%=8+O!=hK-Rb__kGApU#khI9Nnv=>sokfo%a?EKGUjda zkw)RUrn9qaJ>;-(C&A?NcwrYzZkRm8N-yP z@Pz_$g2$}?OF0G)obL&WB1QrL$TOR?xmX%Go0+P(I$POWxcsN~7o}t1vfqRT zyq4__9#*)7*q2EwN}bv?Gkwdri@Lt3Jt&wYknKbF#_Rc+y=z0=yn1eWZ`bv#237akFW0u^1VULAI_1b;ZHK82nd*rKR-2XQ^(0#z zFQ>MZvM%1rYh9;XnV;{|z|5@s=$HCsoSX5Oujk$S4;_cC?#nHMg|WA0i_L%Ip3Fak zvj}MC=Aoy@xhehS@pyVPw!ky^TF{~>~cm{wS& zoa4{vrgvho>DpBippoz+Z(e4f_wv!wFNDwLQaOIW+->vpA+*v)&t36nWFFnnNDJLy zrE4WGRosY&s16pi4;H2B{3$pCmVEVPJrmHqC&5%Khe!q1s=Ydqp|C47py)&*!C0(#GUOixuR2ey)#vNO zU&3FfuRcEp?kSe|J@ueg7WSs>n1YJP$d>iE+dpgU+b2c%Z*@dF*jThkq8%e`8?t~1 z2(H^ua~DNdE-B8y*|({xullO%9##GBSj#r_Y=H+ii#6?S?iRvjyi4FeGbQO+txqDy z{9%^93n0<@GBa!q2&dO(;a>y8r5nLMAx8>}%`1Y0*}WVWQe;kr(!ukc{MNh!Pr{CPGTN6EMbxkq%i;da05IR#%g zo*`~H+jPbmi&!nQi22R(GF+d)+cxW#XzX%jKhU?!K}6H<`{w)|eZA68&H=*UKRIq) z>}iL{?nx}7@_>I7AcAk^e}mL_NU-QIranI^EQ_Q6COg8p6t~SVM&yjwMD(dSdL3CJ0h)NCVDs|I!EI@#lv_si1yl4D^Do-k& zI@apEJ;ph$OhW_?rc?&ulnP9@p@F-(Ihl$X)5E7OmZF+N;7PrtsD_6&Y~KJ{(h z-Mi*sY^T6XRJBMY#BK?Yj9G#D*0wr?;6;i@Gt2Fr(6XBJ$CUf#2h0Av+edmCEt#P6 zXoQM8XH)rMdSfW@;ivKMR1-q(t1gz@W$jk2Nn?L*U%{yvI!PYr@)N0gsqdLyjt?Vbyx-4oo@pOf zO-k*ti{xT3kr~bdC+v-wqaAD-e=bMozQBicpYbkQHd&dC`$xlibR%`hW|0|m5zgF( zlgry@g3&@+`)fRzNtOUZC-?h8=R-4d9x;&zQwjfI;A+JtRJnP8YsLVFL1_m;M9)ZgPN!2O=I4Y`siWW;pHq`14W z6jsJr)#Z27u;f?-q?xDG>7>Y!BDYQJZn)I!8b98AJtdEUCEh9Wc<97knD$Z0uO^EG zIGxt}qY2LdpXK)^u2Ihq38S%eKQ$^e9x6D-!}9((!t`@ci1;&)#f5(w+Ikc=;DXnK z>;x}3DAmlgjhj-{u&#ryP5>ENJW2J-QAq1if%xYy-Z4zq%?SR`@1`r|D*lVgox~#(Z5uGRkkq=W^Kv+KeY05e4LljJaevAUOe)2A7>{?(payDq$kZTlW< zS!Os>GbMZCIwd>u+nZB{cH}i26UliiclQ0ZgXY>eCKrwmB960KN^BbxOu5Q;B@&8m3O(D)~yBAdH<*!U4So7JYnhQ>;P zrpCOzu6wW^TY|4saM$?A_=pXjDd8i@cEY$?+OuGg8NZ6K-otfkR5qcWgpe@QZg9|G zBt+cA6v^Z?JzVPbipG6EKQW@60;90pHcjI7Lj+YA#G2Lyws6`{I){HJTN8W#%Nj3$ z{Q&lamRQYkY_plQf#(aj3Tv3Q(?*m5Clxo4DE!Qwa-Z%QX)2i}L8Ec2?kR;-+Zjn^ zY4Mg`J`Jb#7wCH>7INYrV>?7p3i;29kU#Trr%j}E4fU5uqY8~vtA*%D0*xfPt=pGa zo_^%~P(eoX>KekxolIm22)mnPw>(%Ax(!lAQIt{egt-gBk)Tz$j}D>s%RZ|H+AoLR zgT;t5skfOHqLK;A4WE$W^h3bsc7%ylFGuKXxT-~sd8?;b22 z2w80toocccy1$gI&g|yhH`eX5LKLxHesjgED~HQ*g^neH;=YT<8&?P}7GarL;^X>A z1+sbsZf&EEPQl^ZNrVJQ;L< zmV?u3bKpG2>|&TuHy&UBM^Xyp4lKCnHj|Y|pVlZoWLtwkIi7CztL1qgZ_*S~l5b;$ z0%Fgw@>Y_Q(z`4j&W=H2y;IRF6KltzVS4e^!NIDoR)r7nnL#*k0i0w=uX-vr^!wdl zHbKwa#0Z?u&=?+H0b-yHa?o~*OV+@jcEUuVSB?AB)ZhyOYe5Ad&sjiE0Y3v`f>#~w zY=No#EAffNNzTprpeFAEPwim>yxobI+)*OLRG&2eVQnH-_U}UyyK4$~+AqM6jhpy` zRhR;H@(s9y<|rX7|Hz?e5iLg;PIg@Za=;V*u$)JQ-HTb6NQv0@0DDN6vq}GHr70E> zD`G#j3&|BMv@s00>C+UQi7Rf&(UO}#_IvC= zvADz9Wu^N-^xt{A^a_0a!Lq5&T!CCeV>=Yz5pPY~pB0OgyCbN--S5!UGYoD0%$fLE z@}1UTWT`;(k`gE1@&z{VvHWn7;eZJUn=QJ_NN-)jrO2!RoGuv+Js55qc`Zgm&YklV z>_v^#{^JxZJjf``mK!+2`EGsyC&u>|5vl&P|EkgdF^!-26!%q)5-~fmV_oYW3ambV z$SVic@mbL;ql(bbjQX1s2SWWkM!lB9%Y@OFV=X5M5NKim50}}ME3LiaB8%J7Ymf3r z%olm$Vitx=U6A9b!bnJ{{0{U;ByS$BkX9r{JvSW;J@arlx;<0at5Em;Yq0#ayIxZ& z(14C6Zy=UM<~q3qszh7ip&GL2^8wJ-8ooU7&Kuq0 zs55o=UlS4+B(p9-?g5V&CktYWts3>g9nbsiN&o|5lv$lgaJ(;3RtwxU2k_I$W_7*? z!b3aFZAFK-GH;}TpCq+a2_yMxT>msq>!~c8g4JpY$TRO^KTOt#N;NwYg2)V8Ui*O+ z8+Qss!LVH9`c9uUKzeZ+g#~TWzQ!+8*jeW0xzMXL{1r^{0P|O=K^w2JnG=~o`K{CP z1tvN|EUg<>FioT6nX@(?YWx&EGrh5Yp*$G)&O9ldHX9TaDFQF0Pesa%09nVA%QpTK zJOAE?7FUX+?TEM_h00zI*R@X;g7@RDs^Z0;2-{N4M69oeZXEhf%g^UzkrOm5#({Hf z)X>TTt8sRUHJGZh;Gl3s@mQ~QIQs!BEUN7YIQLRr<$>c z;>lX>`=u-!O=zRsO3OS{k@>R!P9bIhR9wH{UHz<>ra{VbS+ z+fd!2qdw^c^B-__Fmyi7q?$^;zehLK?dD@m-QOOIF4cKax1F!KUk*29;tzA_f*n|z zO4K4P#S{V33w4U?n4JgZj(@<n%f&3ItRWPNmJD^lIR1V!OP!%z z<1WSTKbDZ&4rUHRXo0BcZ(qA++HKj=$Q8vIxQB%>q`rU^<@QUr4bohzw>dx?O~L})>_ z%BcTCA%V(RU { + 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.RangeAreas#format:member': - |- await Excel.run(async (context) => { diff --git a/view/excel.json b/view/excel.json index 82a8751b6..2207a9b93 100644 --- a/view/excel.json +++ b/view/excel.json @@ -86,6 +86,7 @@ "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-visibility.yaml", + "excel-range-auto-fill": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-auto-fill.yaml", "excel-event-column-and-row-sort": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/event-column-and-row-sort.yaml", "excel-comment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/comment.yaml", "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", From a53e268774adb58e104e63c5f2f6b16294536bd3 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Mon, 23 Sep 2019 12:53:24 -0700 Subject: [PATCH 207/660] Moving style sample to range category (#355) --- playlists/excel.yaml | 22 +++++++++--------- .../42-range/range-text-orientation.yaml | 2 +- samples/excel/42-range/set-get-values.yaml | 2 +- .../excel/{46-table => 42-range}/style.yaml | 6 ++--- samples/excel/42-range/used-range.yaml | 2 +- snippet-extractor-metadata/excel.xlsx | Bin 21378 -> 21395 bytes snippet-extractor-output/snippets.yaml | 22 ++++++++++++++++++ view/excel.json | 2 +- 8 files changed, 40 insertions(+), 18 deletions(-) rename samples/excel/{46-table => 42-range}/style.yaml (98%) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index a4dd0cbec..9ace23b19 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -470,6 +470,17 @@ group: Range api_set: ExcelApi: '1.1' +- 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////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 @@ -636,17 +647,6 @@ group: Table api_set: ExcelApi: '1.4' -- id: excel-table-style - name: Style - fileName: style.yaml - description: >- - Creates a custom style, applies a custom and built-in styles to a table, - gets style properties, and deletes the custom style. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/46-table/style.yaml - group: Table - api_set: - ExcelApi: '1.7' - id: excel-workbook-get-active-cell name: Active cell fileName: workbook-get-active-cell.yaml diff --git a/samples/excel/42-range/range-text-orientation.yaml b/samples/excel/42-range/range-text-orientation.yaml index 021b416ba..550b2cb27 100644 --- a/samples/excel/42-range/range-text-orientation.yaml +++ b/samples/excel/42-range/range-text-orientation.yaml @@ -1,4 +1,4 @@ -order: 11 +order: 12 id: excel-range-text-orientation name: Text orientation description: Gets and sets the text orientation within a range. diff --git a/samples/excel/42-range/set-get-values.yaml b/samples/excel/42-range/set-get-values.yaml index bb352dba9..747deff58 100644 --- a/samples/excel/42-range/set-get-values.yaml +++ b/samples/excel/42-range/set-get-values.yaml @@ -1,4 +1,4 @@ -order: 13 +order: 14 id: excel-range-values-and-formulas name: Values and formulas description: Gets and sets values and formulas for a range. diff --git a/samples/excel/46-table/style.yaml b/samples/excel/42-range/style.yaml similarity index 98% rename from samples/excel/46-table/style.yaml rename to samples/excel/42-range/style.yaml index 8ef126ef8..cdf58eff8 100644 --- a/samples/excel/46-table/style.yaml +++ b/samples/excel/42-range/style.yaml @@ -1,7 +1,7 @@ -order: 10 -id: excel-table-style +order: 11 +id: excel-range-style name: Style -description: 'Creates a custom style, applies a custom and built-in styles to a table, 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 741ba3fcb..9fca31609 100644 --- a/samples/excel/42-range/used-range.yaml +++ b/samples/excel/42-range/used-range.yaml @@ -1,4 +1,4 @@ -order: 12 +order: 13 id: excel-range-used-range name: Used range description: Tests for a used range and creates a chart from a table only if there's data in the table. diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 8b4ba0e02934431b6a9d17e308cc52c24d405072..faa6ad303d58d293d33f8296f8ee4db3e0ba51bc 100644 GIT binary patch delta 11086 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 delta 11101 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 { + 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."); + }); 'Word.Body#search:member(1)': - |- await Word.run(async (context) => { diff --git a/view/excel.json b/view/excel.json index 2207a9b93..b5942120f 100644 --- a/view/excel.json +++ b/view/excel.json @@ -50,6 +50,7 @@ "excel-range-range-relationships": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-relationships.yaml", "excel-range-remove-duplicates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-remove-duplicates.yaml", "excel-range-selected-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/selected-range.yaml", + "excel-range-style": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/style.yaml", "excel-range-text-orientation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-text-orientation.yaml", "excel-range-used-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/used-range.yaml", "excel-range-values-and-formulas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/set-get-values.yaml", @@ -68,7 +69,6 @@ "excel-table-get-visible-range-of-a-filtered-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml", "excel-table-import-json-data": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/import-json-data.yaml", "excel-table-sort-data": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/sort-data.yaml", - "excel-table-style": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/style.yaml", "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/workbook-get-active-cell.yaml", "excel-settings-create-get-change-delete-settings": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/create-get-change-delete-settings.yaml", "excel-workbook-create-workbook": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/create-workbook.yaml", From 8db7ca3bb18f0e3c241dde71b756e2f66b36e97b Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Tue, 24 Sep 2019 13:00:09 -0700 Subject: [PATCH 208/660] Adding missing period (#356) --- samples/excel/85-preview-apis/outline.yaml | 2 +- snippet-extractor-output/snippets.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/excel/85-preview-apis/outline.yaml b/samples/excel/85-preview-apis/outline.yaml index 7a81bc748..7bde2b2fd 100644 --- a/samples/excel/85-preview-apis/outline.yaml +++ b/samples/excel/85-preview-apis/outline.yaml @@ -62,7 +62,7 @@ script: Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); - // This shows the top 3 outline levels; collapsing any additional sublevels + // This shows the top 3 outline levels; collapsing any additional sublevels. sheet.showOutlineLevels(3, 3); await context.sync(); }); diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 0cf48d046..ef72df3f3 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -2308,7 +2308,7 @@ Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); - // This shows the top 3 outline levels; collapsing any additional sublevels + // This shows the top 3 outline levels; collapsing any additional sublevels. sheet.showOutlineLevels(3, 3); await context.sync(); }); From d2d932c1462878dd8b69385985736aeaa75ec90b Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Mon, 30 Sep 2019 13:26:45 -0700 Subject: [PATCH 209/660] [excel] (Comments) More comment samples (#358) * Updating comment sample * Reply refactoring * Comment resolutions * Comment mention sample * Typo fix * Update samples/excel/85-preview-apis/comment-mentions.yaml Co-Authored-By: Kim Brandl - MSFT * PR Feedback --- playlists/excel.yaml | 37 +- .../{comment.yaml => comment-basics.yaml} | 88 +- .../85-preview-apis/comment-mentions.yaml | 102 ++ .../85-preview-apis/comment-replies.yaml | 164 +++ .../85-preview-apis/comment-resolution.yaml | 113 ++ .../event-column-and-row-sort.yaml | 2 +- .../event-worksheet-single-click.yaml | 2 +- samples/excel/85-preview-apis/outline.yaml | 2 +- .../85-preview-apis/pivottable-slicer.yaml | 2 +- .../workbook-insert-external-worksheets.yaml | 2 +- .../workbook-save-and-close.yaml | 2 +- snippet-extractor-metadata/excel.xlsx | Bin 21395 -> 21518 bytes snippet-extractor-output/snippets.yaml | 1285 +++++++++-------- view/excel.json | 5 +- 14 files changed, 1103 insertions(+), 703 deletions(-) rename samples/excel/85-preview-apis/{comment.yaml => comment-basics.yaml} (56%) create mode 100644 samples/excel/85-preview-apis/comment-mentions.yaml create mode 100644 samples/excel/85-preview-apis/comment-replies.yaml create mode 100644 samples/excel/85-preview-apis/comment-resolution.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 9ace23b19..b088bf564 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -817,6 +817,15 @@ group: Preview APIs api_set: ExcelApi: '1.10' +- id: excel-comment-basics + name: Comment basics + fileName: comment-basics.yaml + description: 'Adds, edits, and removes comments.' + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/85-preview-apis/comment-basics.yaml + group: Preview APIs + api_set: + ExcelApi: '1.10' - id: excel-event-column-and-row-sort name: Column and row sort events fileName: event-column-and-row-sort.yaml @@ -828,12 +837,30 @@ group: Preview APIs api_set: ExcelApi: '1.10' -- id: excel-comment - name: Comments - fileName: comment.yaml - description: 'Adds, edits, and removes comments and comment replies.' +- id: excel-comment-mentions + name: Comment mentions + fileName: comment-mentions.yaml + description: Mentions someone in a comment. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/85-preview-apis/comment-mentions.yaml + group: Preview APIs + api_set: + ExcelApi: '1.10' +- id: excel-comment-replies + name: Comment replies + fileName: comment-replies.yaml + description: 'Adds, edits, and removes comment replies.' + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/85-preview-apis/comment-replies.yaml + group: Preview APIs + 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////samples/excel/85-preview-apis/comment.yaml + https://raw.githubusercontent.com////samples/excel/85-preview-apis/comment-resolution.yaml group: Preview APIs api_set: ExcelApi: '1.10' diff --git a/samples/excel/85-preview-apis/comment.yaml b/samples/excel/85-preview-apis/comment-basics.yaml similarity index 56% rename from samples/excel/85-preview-apis/comment.yaml rename to samples/excel/85-preview-apis/comment-basics.yaml index 83d8c6ba8..9010e3532 100644 --- a/samples/excel/85-preview-apis/comment.yaml +++ b/samples/excel/85-preview-apis/comment-basics.yaml @@ -1,28 +1,25 @@ -order: 3 -id: excel-comment -name: Comments -description: 'Adds, edits, and removes comments and comment replies.' +order: 2 +id: excel-comment-basics +name: Comment basics +description: 'Adds, edits, and removes comments.' host: EXCEL api_set: ExcelApi: '1.10' script: content: | $("#setup").click(() => tryCatch(setup)); - $("#addCommentToSelectedCell").click(() => tryCatch(addCommentToSelectedCell)); - $("#addCommentToCell").click(() => tryCatch(addCommentToCell)); - $("#addCommentReply").click(() => tryCatch(addCommentReply)); - $("#getCommentMetadata").click(() => tryCatch(getCommentMetadata)); - $("#editComment").click(() => tryCatch(editComment)); - $("#editCommentReply").click(() => tryCatch(editCommentReply)); - $("#deleteComment").click(() => tryCatch(deleteComment)); - $("#deleteCommentReply").click(() => tryCatch(deleteCommentReply)); + $("#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)); async function addCommentToSelectedCell() { await Excel.run(async (context) => { const selectedRange = context.workbook.getSelectedRange(); // Note that an InvalidArgument error will be thrown if multiple cells are selected. - context.workbook.comments.add("TODO: add headers here.", selectedRange); + context.workbook.comments.add(selectedRange, "TODO: add headers here."); await context.sync(); }); } @@ -32,15 +29,7 @@ script: const sheet = context.workbook.worksheets.getItem("Comments"); // Note that an InvalidArgument error will be thrown if multiple cells passed to `comment.add`. - sheet.comments.add("TODO: add data.", "A2"); - await context.sync(); - }); - } - - async function addCommentReply() { - await Excel.run(async (context) => { - const comment = context.workbook.comments.getItemAt(0); - comment.replies.add("Do I have to?"); + sheet.comments.add("A2", "TODO: add data."); await context.sync(); }); } @@ -58,35 +47,13 @@ script: async function editComment() { await Excel.run(async (context) => { - const comment = context.workbook.comments.getItemAt(0); + const sheet = context.workbook.worksheets.getItem("Comments"); + const comment = sheet.comments.getItemAt(0); comment.content = "PLEASE add headers here."; await context.sync(); }); } - async function editCommentReply() { - await Excel.run(async (context) => { - const comment = context.workbook.comments.getItemAt(0); - comment.load("replies"); - await context.sync(); - - const reply = comment.replies.getItemAt(0); - reply.content = "new content for the reply"; - await context.sync(); - }); - } - - async function deleteCommentReply() { - await Excel.run(async (context) => { - var comment = context.workbook.comments.getItemAt(0); - comment.load("replies"); - await context.sync(); - - comment.replies.getItemAt(0).delete(); - await context.sync(); - }); - } - async function deleteComment() { await Excel.run(async (context) => { context.workbook.comments.getItemByCell("Comments!A2").delete(); @@ -117,7 +84,7 @@ script: template: content: |-
    -

    This sample shows how to add and edit comments.

    +

    This sample shows how to add, edit, and remove comments.

    Setup

    @@ -127,39 +94,26 @@ template:

    Try it out

    -

    Press the buttons in order to add, edit, and remove comments and replies. Check the worksheet after each button to see the effects.

    -

    -

    - -

    -

    -

    - -

    - -

    - -

    language: html style: diff --git a/samples/excel/85-preview-apis/comment-mentions.yaml b/samples/excel/85-preview-apis/comment-mentions.yaml new file mode 100644 index 000000000..1b7825d9b --- /dev/null +++ b/samples/excel/85-preview-apis/comment-mentions.yaml @@ -0,0 +1,102 @@ +order: 4 +id: excel-comment-mentions +name: Comment mentions +description: Mentions someone in a comment. +host: EXCEL +api_set: + ExcelApi: '1.10' +script: + content: | + $("#setup").click(() => tryCatch(setup)); + $("#add-comment-with-mention").click(() => tryCatch(addCommentWithMention)); + + async function addCommentWithMention() { + 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(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Comments").delete(); + const sheet = context.workbook.worksheets.add("Comments"); + + 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 mention someone in a comment.

    +
    +
    +

    IMPORTANT: This sample is currently only supported by Excel on the web.

    +

    Setup

    + +
    +
    +

    Try it out

    +

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

    +

    + +

    +

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

    +
    + 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/excel/85-preview-apis/comment-replies.yaml b/samples/excel/85-preview-apis/comment-replies.yaml new file mode 100644 index 000000000..b38429e1a --- /dev/null +++ b/samples/excel/85-preview-apis/comment-replies.yaml @@ -0,0 +1,164 @@ +order: 5 +id: excel-comment-replies +name: Comment replies +description: 'Adds, edits, and removes comment replies.' +host: EXCEL +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)); + + async function addFirstCommentReply() { + await Excel.run(async (context) => { + // Adds a reply to the first comment in this worksheet. + const sheet = context.workbook.worksheets.getItem("Comments"); + const comment = sheet.comments.getItemAt(0); + comment.replies.add("Add content to this worksheet."); + await context.sync(); + }); + } + + async function addSecondCommentReply() { + await Excel.run(async (context) => { + // Adds a reply to the first comment in this worksheet. + const sheet = context.workbook.worksheets.getItem("Comments"); + const comment = sheet.comments.getItemAt(0); + comment.replies.add("You can do it. Believe in yourself!"); + await context.sync(); + }); + } + + async function getCommentReplyMetadata() { + await Excel.run(async (context) => { + const comment = context.workbook.comments.getItemByCell("Comments!A1"); + const replyCount = comment.replies.getCount(); + // Sync to get the current number of comment replies. + await context.sync(); + + // Get the last comment reply in the comment thread. + const reply = comment.replies.getItemAt(replyCount.value - 1); + reply.load(["authorEmail", "authorName", "creationDate"]); + // Sync to load the reply metadata. + await context.sync(); + + console.log(`Latest reply: ${reply.creationDate.toDateString()}: ${reply.authorName} ${reply.authorEmail})`); + await context.sync(); + }); + } + + async function editCommentReply() { + await Excel.run(async (context) => { + 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!"; + await context.sync(); + }); + } + + async function deleteCommentReply() { + 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(); + await context.sync(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Comments").delete(); + const sheet = context.workbook.worksheets.add("Comments"); + + // Note that an InvalidArgument error will be thrown if multiple cells passed to `comment.add`. + sheet.comments.add("A1", "TODO: add data."); + await context.sync(); + + 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, 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.

    + +

    + +

    + +

    + +

    + +

    +

    + 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/comment-resolution.yaml b/samples/excel/85-preview-apis/comment-resolution.yaml new file mode 100644 index 000000000..2a799781c --- /dev/null +++ b/samples/excel/85-preview-apis/comment-resolution.yaml @@ -0,0 +1,113 @@ +order: 6 +id: excel-comment-resolution +name: Comment resolution +description: Resolves and reopens a comment thread. +host: EXCEL +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)); + + async function addComment() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Comments"); + + // Note that an InvalidArgument error will be thrown if multiple cells passed to `comment.add`. + sheet.comments.add("A1", "TODO: add data."); + await context.sync(); + }); + } + + async function resolveComment() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Comments"); + sheet.comments.getItemAt(0).resolved = true; + await context.sync(); + }); + } + + async function reopenComment() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Comments"); + sheet.comments.getItemAt(0).resolved = false; + await context.sync(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Comments").delete(); + const sheet = context.workbook.worksheets.add("Comments"); + + 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 resolve and reopen comment threads.

    +
    +
    +

    Setup

    + +
    +
    +

    Try it out

    +

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

    +

    + +

    + +

    + +

    + 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/event-column-and-row-sort.yaml b/samples/excel/85-preview-apis/event-column-and-row-sort.yaml index 92227ed6e..8ef6a23f6 100644 --- a/samples/excel/85-preview-apis/event-column-and-row-sort.yaml +++ b/samples/excel/85-preview-apis/event-column-and-row-sort.yaml @@ -1,4 +1,4 @@ -order: 2 +order: 3 id: excel-event-column-and-row-sort name: Column and row sort events description: Registers event handlers that run when column or row sorting events occur in the current worksheet. diff --git a/samples/excel/85-preview-apis/event-worksheet-single-click.yaml b/samples/excel/85-preview-apis/event-worksheet-single-click.yaml index 6e30ed8ab..560299ef6 100644 --- a/samples/excel/85-preview-apis/event-worksheet-single-click.yaml +++ b/samples/excel/85-preview-apis/event-worksheet-single-click.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 10 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/85-preview-apis/outline.yaml b/samples/excel/85-preview-apis/outline.yaml index 7bde2b2fd..d79b967df 100644 --- a/samples/excel/85-preview-apis/outline.yaml +++ b/samples/excel/85-preview-apis/outline.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 8 id: excel-outline name: Outline description: Creates an outline by grouping rows and columns. diff --git a/samples/excel/85-preview-apis/pivottable-slicer.yaml b/samples/excel/85-preview-apis/pivottable-slicer.yaml index 46cd4069f..f5e2358d5 100644 --- a/samples/excel/85-preview-apis/pivottable-slicer.yaml +++ b/samples/excel/85-preview-apis/pivottable-slicer.yaml @@ -1,4 +1,4 @@ -order: 8 +order: 11 id: excel-pivottable-slicer name: Slicer description: Adds a slicer to a PivotTable. 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 010b5a9c2..0a2d8a46c 100644 --- a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml +++ b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 7 id: excel-workbook-insert-external-worksheets name: Insert external worksheets description: Inserts worksheets from another workbook into the current workbook. diff --git a/samples/excel/85-preview-apis/workbook-save-and-close.yaml b/samples/excel/85-preview-apis/workbook-save-and-close.yaml index fd1bf3ebf..20b090277 100644 --- a/samples/excel/85-preview-apis/workbook-save-and-close.yaml +++ b/samples/excel/85-preview-apis/workbook-save-and-close.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 9 id: excel-workbook-save-and-close name: Save and close description: Saves and closes a workbook. diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index faa6ad303d58d293d33f8296f8ee4db3e0ba51bc..976890f94e8996b031a2c51d7a1337858df9ea83 100644 GIT binary patch delta 12148 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 SYz})?IHV4MTw&pNg z;F;k_&-WiYCaSE1b)%S5lps}sr0sUi(En$5{0vYnvs(~YN5ttQyk|G$s~ z)b%!0NJG3N2RJ~h&_TZq z>%iXF(EJ;hpc`^jZkuo{JX1&3T)(WP)#xqK4m^>ya|l3Z#F$`T2Y)xG%%@PfLR&d= zTZDufQ3`}ILyq|g_vyuCX~k^tH#uB2AognQ z<+_bzkwv|Q;R~%Ibcy-rHT?P^T@Loe1ShNRsR%A&%WMQ*hx_i7HA$NQF%QLtuAt^|Ccf+)~0K`2Plq{;w1m*k$6Rk_dQKB8svs_-LZ8vLXbp zNMhx`OieWLU0EGMS1j>OlrGUv1@(U|SiA~0#JN~vj2L!ej|wWme=1i12LrQ)00Tq& gf42+vl6ayb2o5CDsR}>{$R%2;Qo-mc{#WDw0dU%-!2kdN delta 12051 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index ef72df3f3..41c78473f 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -366,6 +366,22 @@ series.delete(); } + await context.sync(); + }); +'Excel.ChartSeries#setValues:member(1)': + - |- + 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': @@ -484,22 +500,6 @@ await context.sync(); }); -'Excel.ChartSeries#setValues:member(1)': - - |- - 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)': - |- await Excel.run(async (context) => { @@ -597,7 +597,8 @@ 'Excel.Comment#content:member': - |- await Excel.run(async (context) => { - const comment = context.workbook.comments.getItemAt(0); + const sheet = context.workbook.worksheets.getItem("Comments"); + const comment = sheet.comments.getItemAt(0); comment.content = "PLEASE add headers here."; await context.sync(); }); @@ -617,37 +618,73 @@ console.log(`${comment.creationDate.toDateString()}: ${comment.authorName} (${comment.authorEmail})`); await context.sync(); }); +'Excel.Comment#resolved:member': + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Comments"); + sheet.comments.getItemAt(0).resolved = true; + await context.sync(); + }); 'Excel.CommentCollection#add:member(1)': - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Comments"); // Note that an InvalidArgument error will be thrown if multiple cells passed to `comment.add`. - sheet.comments.add("TODO: add data.", "A2"); + sheet.comments.add("A2", "TODO: add data."); await context.sync(); }); 'Excel.CommentReply#content:member': - |- await Excel.run(async (context) => { - const comment = context.workbook.comments.getItemAt(0); - comment.content = "PLEASE add headers here."; + 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!"; await context.sync(); }); 'Excel.CommentReply#delete:member(1)': - |- await Excel.run(async (context) => { - var comment = context.workbook.comments.getItemAt(0); - comment.load("replies"); - await context.sync(); - + // 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(); await context.sync(); }); 'Excel.CommentReplyCollection#add:member(1)': - |- await Excel.run(async (context) => { - const comment = context.workbook.comments.getItemAt(0); - comment.replies.add("Do I have to?"); + // Adds a reply to the first comment in this worksheet. + const sheet = context.workbook.worksheets.getItem("Comments"); + const comment = sheet.comments.getItemAt(0); + comment.replies.add("Add content to this worksheet."); + await context.sync(); + }); +'Excel.CommentRichContent#mentions:member': + - |- + 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.ConditionalCellValueRule#formula1:member': @@ -1184,35 +1221,6 @@ const settings = context.workbook.settings; settings.add("ContosoReviewXmlPartId", customXmlPart.id); - await context.sync(); - }); -'Excel.CustomXmlPartCollection#getByNamespace:member(1)': - - |- - 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)': @@ -1236,7 +1244,7 @@ await context.sync(); } }); -'Excel.CustomXmlPartScopedCollection#getCount:member(1)': +'Excel.CustomXmlPartCollection#getByNamespace:member(1)': - |- await Excel.run(async (context) => { $("#display-xml").text(""); @@ -1294,6 +1302,35 @@ await context.sync(); } }); +'Excel.CustomXmlPartScopedCollection#getCount:member(1)': + - |- + 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)': - |- await Excel.run(async (context) => { @@ -1332,17 +1369,6 @@ .add(Excel.ConditionalFormatType.dataBar); conditionalFormat.dataBar.barDirection = Excel.ConditionalDataBarDirection.leftToRight; - await context.sync(); - }); -'Excel.DataPivotHierarchy#name:member': - - |- - 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': @@ -1368,6 +1394,17 @@ wholesaleDataHierarchy.showAs = wholesaleShowAs; await context.sync(); }); +'Excel.DataPivotHierarchy#name:member': + - |- + 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': - |- await Excel.run(async (context) => { @@ -1791,23 +1828,6 @@ await context.sync(); }); -'Excel.PivotTable#filterHierarchies:member': - - |- - 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': - |- await Excel.run(async (context) => { @@ -1826,6 +1846,23 @@ await context.sync(); console.log("Pivot layout is now " + pivotTable.layout.layoutType); }); +'Excel.PivotTable#filterHierarchies:member': + - |- + 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)': - |- await Excel.run(async (context) => { @@ -1857,59 +1894,277 @@ await context.sync(); }); -'Excel.Range#copyFrom:member(1)': +'Excel.Range#sort:member': - |- - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - sheet.getRange("F2").values = [["Copied Formula"]]; - sheet.getRange("F2").format.autofitColumns(); + 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)': - - |- - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const table = sheet.tables.getItem("ExpensesTable"); - const searchRange = table.getRange(); + // Find the column header that provides the sort criteria. + const header = range.find(criteria, {}); + header.load("columnIndex"); + await context.sync(); - // 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 + 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)': + - |- + Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); - foundRange.load("address"); - await context.sync(); - + // 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); - console.log(foundRange.address); + // 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#findOrNullObject:member(1)': +'Excel.Range#showOutlineLevels:member(1)': - |- - 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(); + Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); - if (foundRange.isNullObject) { - console.log("Text not found"); - } else { - console.log(foundRange.address); - } + // This collapses the entire outline. + sheet.showOutlineLevels(1, 1); + await context.sync(); + }); + - |- + 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.Range#ungroup:member(1)': + - |- + 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#getSpecialCells:member(1)': + - |- + 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)': + - |- + 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)': + - |- + 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. + // 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)': + - |- + 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)': + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + sheet.getRange("F2").values = [["Copied Formula"]]; + sheet.getRange("F2").format.autofitColumns(); + + // 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)': + - |- + 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)': + - |- + 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#hyperlink:member': + - |- + 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)': - |- @@ -1967,19 +2222,6 @@ await context.sync(); }); -'Excel.Range#getSpecialCells:member(1)': - - |- - 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#getUsedRange:member(1)': - |- await Excel.run(async (context) => { @@ -2034,6 +2276,32 @@ ); } + await context.sync(); + }); +'Excel.Range#removeDuplicates:member(1)': + - |- + 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': + - |- + 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)': @@ -2070,45 +2338,6 @@ await context.sync(); }); -'Excel.Range#hyperlink:member': - - |- - 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#removeDuplicates:member(1)': - - |- - 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)': - |- await Excel.run(async (context) => { @@ -2139,203 +2368,11 @@ // 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#style:member': - - |- - 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#setCellProperties:member(1)': - - |- - 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. - // 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)': - - |- - 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#sort:member': - - |- - 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)': - - |- - 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#showOutlineLevels:member(1)': - - |- - Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - - // This collapses the entire outline. - sheet.showOutlineLevels(1, 1); - await context.sync(); - }); - - |- - 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.Range#ungroup:member(1)': - - |- - 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); + const targetRange = sheet.getRange("B7:E7"); + targetRange.set(sourceRange); + targetRange.format.autofitColumns(); await context.sync(); }); -'Excel.Range#autoFill:member(1)': - - |- - 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.RangeAreas#format:member': - |- await Excel.run(async (context) => { @@ -2594,6 +2631,15 @@ await context.sync(); console.log("Settings changed handler registered."); }); +'Excel.SettingCollection#onSettingsChanged:member': + - |- + 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)': - |- await Excel.run(async (context) => { @@ -2612,15 +2658,6 @@ await context.sync(); }); -'Excel.SettingCollection#onSettingsChanged:member': - - |- - 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)': - |- await Excel.run(async (context) => { @@ -2648,17 +2685,18 @@ shape.fill.foregroundColor = "yellow" await context.sync(); }); -'Excel.Shape#getAsImage:member(1)': +'Excel.Shape#rotation:member': - |- 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': - |- @@ -2671,13 +2709,17 @@ await context.sync(); }); -'Excel.Shape#incrementLeft:member(1)': +'Excel.Shape#getAsImage:member(1)': - |- 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)': - |- @@ -2687,14 +2729,6 @@ shape.incrementRotation(180); await context.sync(); }); -'Excel.Shape#incrementTop:member(1)': - - |- - 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': - |- await Excel.run(async (context) => { @@ -2710,17 +2744,20 @@ await context.sync(); }); -'Excel.Shape#rotation:member': +'Excel.Shape#incrementLeft:member(1)': - |- 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("Square") + shape.incrementLeft(-25); + await context.sync(); + }); +'Excel.Shape#incrementTop:member(1)': + - |- + 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#scaleHeight:member(1)': @@ -3020,6 +3057,17 @@ await context.sync(); console.log("A handler has been registered for table onSelectionChanged event"); }); +'Excel.TableChangedEventArgs#details:member': + - |- + async function onTableChanged(eventArgs: Excel.TableChangedEventArgs) { + await Excel.run(async (context) => { + const details = eventArgs.details; + const address = eventArgs.address; + + console.log(`Change at ${address}: was ${details.valueBefore}(${details.valueTypeBefore}),` + + ` now is ${details.valueAfter}(${details.valueTypeAfter})`); + }); + } 'Excel.TableChangedEventArgs#tableId:member': - |- async function onChange(event) { @@ -3050,17 +3098,6 @@ console.log("Worksheet Id : " + worksheet.name); }); } -'Excel.TableChangedEventArgs#details:member': - - |- - async function onTableChanged(eventArgs: Excel.TableChangedEventArgs) { - await Excel.run(async (context) => { - const details = eventArgs.details; - const address = eventArgs.address; - - console.log(`Change at ${address}: was ${details.valueBefore}(${details.valueTypeBefore}),` - + ` now is ${details.valueAfter}(${details.valueTypeAfter})`); - }); - } 'Excel.TableCollection#onChanged:member': - |- await Excel.run(async (context) => { @@ -3109,10 +3146,62 @@ textbox.textFrame.deleteText(); await context.sync(); }); -'Excel.Workbook#close:member(1)': +'Excel.Workbook#properties:member': - |- 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#getSelectedRanges:member(1)': + - |- + await Excel.run(async (context) => { + + const selectedRanges = context.workbook.getSelectedRanges(); + selectedRanges.format.fill.color = "lightblue"; + + await context.sync(); + }) +'Excel.Workbook#styles:member': + - |- + 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."); }); 'Excel.Workbook#getActiveCell:member(1)': - |- @@ -3126,83 +3215,152 @@ console.log("The active cell is " + activeCell.address); }); -'Excel.Workbook#getSelectedRanges:member(1)': +'Excel.Workbook#close:member(1)': + - |- + await Excel.run(async (context) => { + context.workbook.close(Excel.CloseBehavior.save); + }); +'Excel.Workbook#save:member(1)': + - |- + await Excel.run(async (context) => { + context.workbook.save(Excel.SaveBehavior.save); + }); +'Excel.WorkbookProtection#protect:member(1)': - |- await Excel.run(async (context) => { + let workbook = context.workbook; + workbook.load("protection/protected"); - const selectedRanges = context.workbook.getSelectedRanges(); - selectedRanges.format.fill.color = "lightblue"; + await context.sync(); + + if (!workbook.protection.protected) { + workbook.protection.protect(); + } + }); + - |- + let password = await passwordHandler(); + passwordHelper(password); + await Excel.run(async (context) => { + let workbook = context.workbook; + workbook.load("protection/protected"); await context.sync(); - }) -'Excel.Workbook#properties:member': + + if (!workbook.protection.protected) { + workbook.protection.protect(password); + } + }); +'Excel.WorkbookProtection#unprotect:member(1)': - |- 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 workbook = context.workbook; + workbook.protection.unprotect(); + }); + - |- + let password = await passwordHandler(); + passwordHelper(password); + await Excel.run(async (context) => { + let workbook = context.workbook; + workbook.protection.unprotect(password); + }); +'Excel.Worksheet#onRowSorted:member': + - |- + await Excel.run(async (context) => { + console.log("Adding row handler"); + const sheet = context.workbook.worksheets.getActiveWorksheet(); - let docProperties = context.workbook.properties; + // 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(); - // 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; + // 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(); + }); + }); + }); +'Excel.Worksheet#onColumnSorted:member': + - |- + 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"; + } - console.log("Set the following document properties: title, subject, keywords, comments, category, manager, company."); + return context.sync(); + }); + }); }); -'Excel.Workbook#save:member(1)': +'Excel.Worksheet#onChanged:member': - |- await Excel.run(async (context) => { - context.workbook.save(Excel.SaveBehavior.save); + let sheet = context.workbook.worksheets.getItem("Sample"); + sheet.onChanged.add(onChange); + + await context.sync(); + console.log("A handler has been registered for the onChanged event."); }); -'Excel.WorkbookProtection#protect:member(1)': +'Excel.Worksheet#onSingleClicked:member': - |- await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.load("protection/protected"); + 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(); + }); + }); - await context.sync(); + console.log("The worksheet click handler is registered."); - if (!workbook.protection.protected) { - workbook.protection.protect(); - } + await context.sync(); }); +'Excel.Worksheet#slicers:member': - |- - let password = await passwordHandler(); - passwordHelper(password); await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.load("protection/protected"); - + 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(); - - if (!workbook.protection.protected) { - workbook.protection.protect(password); - } }); -'Excel.WorkbookProtection#unprotect:member(1)': +'Excel.Worksheet#getRanges:member(1)': - |- await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.protection.unprotect(); - }); + + 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': - |- - let password = await passwordHandler(); - passwordHelper(password); await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.protection.unprotect(password); + 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)': - |- @@ -3236,6 +3394,14 @@ foundRanges.format.fill.color = "green" } }); +'Excel.Worksheet#showGridlines:member': + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + sheet.showGridlines = true; + + await context.sync(); + }); 'Excel.Worksheet#getNext:member(1)': - |- await Excel.run(async (context) => { @@ -3282,33 +3448,6 @@ 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)': - - |- - 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': - - |- - await Excel.run(async (context) => { - let sheet = context.workbook.worksheets.getItem("Sample"); - sheet.onChanged.add(onChange); - - await context.sync(); - console.log("A handler has been registered for the onChanged event."); - }); -'Excel.Worksheet#showGridlines:member': - - |- - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - sheet.showGridlines = true; - await context.sync(); }); 'Excel.Worksheet#tabColor:member': @@ -3319,96 +3458,43 @@ await context.sync(); }); -'Excel.Worksheet#autoFilter:member': - - |- - 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#slicers:member': +'Excel.WorksheetAddedEventArgs#worksheetId:member': - |- - 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#onSingleClicked:member': + 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': - |- 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."); + let sheets = context.workbook.worksheets; + sheets.onActivated.add(onActivate); await context.sync(); + console.log("A handler has been registered for the OnActivate event."); }); -'Excel.Worksheet#onRowSorted:member': +'Excel.WorksheetCollection#onAdded:member': - |- 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"; - } + let sheet = context.workbook.worksheets; + sheet.onAdded.add(onWorksheetAdd); - return context.sync(); - }); - }); + await context.sync(); + console.log("A handler has been registered for the OnAdded event."); }); -'Excel.Worksheet#onColumnSorted:member': +'Excel.WorksheetCollection#onDeactivated:member': - |- 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 sheets = context.workbook.worksheets; + sheets.onDeactivated.add(onDeactivate); - return context.sync(); - }); - }); + await context.sync(); + console.log("A handler has been registered for the OnDeactivate event."); }); -'Excel.WorksheetAddedEventArgs#worksheetId:member': - - |- - 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#addFromBase64:member(1)': - |- const myFile = document.getElementById("file"); @@ -3484,33 +3570,6 @@ await context.sync(); }); -'Excel.WorksheetCollection#onActivated:member': - - |- - 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': - - |- - 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': - - |- - 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.WorksheetFreezePanes#freezeAt:member(1)': - |- await Excel.run(async (context) => { @@ -3617,28 +3676,6 @@ await context.sync(); }); -'Excel.Workbook#styles:member': - - |- - 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."); - }); 'Word.Body#search:member(1)': - |- await Word.run(async (context) => { diff --git a/view/excel.json b/view/excel.json index b5942120f..717ae87ac 100644 --- a/view/excel.json +++ b/view/excel.json @@ -87,8 +87,11 @@ "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-visibility.yaml", "excel-range-auto-fill": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-auto-fill.yaml", + "excel-comment-basics": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/comment-basics.yaml", "excel-event-column-and-row-sort": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/event-column-and-row-sort.yaml", - "excel-comment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/comment.yaml", + "excel-comment-mentions": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/comment-mentions.yaml", + "excel-comment-replies": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/comment-replies.yaml", + "excel-comment-resolution": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/comment-resolution.yaml", "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", "excel-outline": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/outline.yaml", "excel-workbook-save-and-close": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-save-and-close.yaml", From c25b08f49d6f1b67e194da3f4c619c19c6cef03e Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 2 Oct 2019 10:24:27 -0700 Subject: [PATCH 210/660] Clarifying input with a comment (#359) --- samples/excel/42-range/cell-properties.yaml | 1 + snippet-extractor-output/snippets.yaml | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/samples/excel/42-range/cell-properties.yaml b/samples/excel/42-range/cell-properties.yaml index 3a530d49f..52cf8efd6 100644 --- a/samples/excel/42-range/cell-properties.yaml +++ b/samples/excel/42-range/cell-properties.yaml @@ -20,6 +20,7 @@ script: // 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" diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 41c78473f..89af9bc4c 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -57,6 +57,7 @@ // 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" @@ -154,6 +155,7 @@ // 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" @@ -1998,6 +2000,7 @@ // 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" @@ -2541,6 +2544,7 @@ // 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" From c8cf49f2343794210b5d8f143212b3b4bcaa64a4 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Tue, 15 Oct 2019 15:46:27 -0700 Subject: [PATCH 211/660] Correcting showOutlineLevels target API location (#361) --- snippet-extractor-metadata/excel.xlsx | Bin 21518 -> 21499 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 976890f94e8996b031a2c51d7a1337858df9ea83..f51cae9b7cab19aedee9a6e84f4f72497a94b9f8 100644 GIT binary patch delta 7589 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ê!e2>86s^ zJPIq!GjEijM9uP1cn5xuDR9qp{dSS8fam)*s0i+E9;xk_hJi2-N6s3GD%bzfP=4lqP2}psNqph8?1+K%B+pHX? zKR9qUEmk9nyk}`EShJhNW2C8zjLgdq4-@4fS0F6OY&ezcLGgpz{0|iELXeNMn^K$~ zdp9pYTX~9Lo=-EdvE}Kkc+wch*X%-?YjhBwbJk1Txe!5At?#sNX z@xg0FezSQ}XdTzQ)t*~%)=$$~4S)}Q+fZCfobe@Ui5Jg7EH3=oJK}SmXepBqEWUp4 zIh)v?-b4T%*ow56OHNcgo18+Trw#R~a=TE+6%)gZiS>Hx(%%ikWZ+W&y7K?&w9cYO zcaJOYvJba6w<3HO)kbDyZw|9-%OB*9ihOPhn6ksx7*Y{&v+G?R#;y6`_xWxrfr!=9 zU)0l5qj$c(x0inP%bpyV)(owPulb|ptM|{_tld**`YtXncYPji+}kP6w$bNzyQ%Z{ zL2ahTT|1GoH*Na)awW z0&?WWS3*T?HFM8DR~8x^DQ25AEyJ#K!J(0gR2;qi!@EPY(;UlXDe=)AZ^)P3k=s+W zsj;QxDP0%Vu+|3sNJ2hH^R*=u+}dV)o9GUJ2zLyU@sp2{vzM~zpO7vc_|Icu ze+5QiI})Y5ef$tC@Wxrt>PKdRLDuC|TW*SXxm)ieZ@-5eAF&p9x+ZU?{+-m5g1=&G!|b60}agr$Gdau4gbGJ<;i&QX}suwvUWF zu@IFS^VYZ8zKOGY=R>BJz@#b%=Xs^2uHRzb8W>>SnnAGd%sKs}Bf+@Bszr{&!MTg@N%D { const sheet = context.workbook.worksheets.getActiveWorksheet(); From 2eceb1609673f3fd8aa2bd35be085f66db106bb6 Mon Sep 17 00:00:00 2001 From: Alex Jerabek Date: Tue, 22 Oct 2019 14:01:55 -0700 Subject: [PATCH 212/660] Moving 1.10 snippets out of preview --- playlists/excel.yaml | 142 +++++++++--------- .../comment-basics.yaml | 6 +- .../comment-replies.yaml | 6 +- .../30-events/data-change-event-details.yaml | 2 +- samples/excel/30-events/data-changed.yaml | 2 +- .../event-column-and-row-sort.yaml | 4 +- .../event-worksheet-single-click.yaml | 8 +- .../30-events/events-disable-events.yaml | 2 +- .../excel/30-events/events-table-changed.yaml | 2 +- .../events-tablecollection-changed.yaml | 2 +- ...nts-workbook-and-worksheet-collection.yaml | 2 +- samples/excel/30-events/events-worksheet.yaml | 2 +- .../pivottable-slicer.yaml | 6 +- samples/excel/42-range/cell-properties.yaml | 2 +- samples/excel/42-range/formatting.yaml | 2 +- .../42-range/insert-delete-clear-range.yaml | 2 +- .../outline.yaml | 6 +- samples/excel/42-range/range-areas.yaml | 2 +- .../range-auto-fill.yaml | 4 +- samples/excel/42-range/range-copyfrom.yaml | 2 +- samples/excel/42-range/range-find.yaml | 2 +- samples/excel/42-range/range-hyperlink.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 +- .../85-preview-apis/comment-mentions.yaml | 4 +- .../85-preview-apis/comment-resolution.yaml | 4 +- .../workbook-insert-external-worksheets.yaml | 4 +- .../workbook-save-and-close.yaml | 4 +- view/excel.json | 14 +- 34 files changed, 127 insertions(+), 127 deletions(-) rename samples/excel/{85-preview-apis => 12-comment}/comment-basics.yaml (98%) rename samples/excel/{85-preview-apis => 12-comment}/comment-replies.yaml (98%) rename samples/excel/{85-preview-apis => 30-events}/event-column-and-row-sort.yaml (98%) rename samples/excel/{85-preview-apis => 30-events}/event-worksheet-single-click.yaml (95%) rename samples/excel/{85-preview-apis => 38-pivottable}/pivottable-slicer.yaml (98%) rename samples/excel/{85-preview-apis => 42-range}/outline.yaml (98%) rename samples/excel/{85-preview-apis => 42-range}/range-auto-fill.yaml (98%) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index b088bf564..8f70d5f9f 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -137,6 +137,24 @@ 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////samples/excel/12-comment/comment-basics.yaml + group: Comment + api_set: + ExcelApi: '1.10' +- id: excel-comment-replies + name: Comment replies + fileName: comment-replies.yaml + description: 'Adds, edits, and removes comment replies.' + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/12-comment/comment-replies.yaml + group: Comment + api_set: + ExcelApi: '1.10' - id: excel-range-conditional-formatting-basic name: Basic conditional formatting fileName: conditional-formatting-basic.yaml @@ -263,6 +281,17 @@ 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////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 @@ -290,6 +319,17 @@ group: Events api_set: ExcelApi: '1.8' +- 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////samples/excel/30-events/event-worksheet-single-click.yaml + group: Events + api_set: + ExcelApi: '1.10' - id: excel-events-table-changed name: Table events fileName: events-table-changed.yaml @@ -375,6 +415,24 @@ 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////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 + description: Writes to cells with the auto fill feature. + rawUrl: >- + https://raw.githubusercontent.com////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 @@ -441,6 +499,15 @@ 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////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 @@ -808,35 +875,6 @@ group: Worksheet api_set: ExcelApi: '1.1' -- 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////samples/excel/85-preview-apis/range-auto-fill.yaml - group: Preview APIs - api_set: - ExcelApi: '1.10' -- id: excel-comment-basics - name: Comment basics - fileName: comment-basics.yaml - description: 'Adds, edits, and removes comments.' - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/85-preview-apis/comment-basics.yaml - group: Preview APIs - api_set: - ExcelApi: '1.10' -- 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////samples/excel/85-preview-apis/event-column-and-row-sort.yaml - group: Preview APIs - api_set: - ExcelApi: '1.10' - id: excel-comment-mentions name: Comment mentions fileName: comment-mentions.yaml @@ -845,16 +883,7 @@ https://raw.githubusercontent.com////samples/excel/85-preview-apis/comment-mentions.yaml group: Preview APIs api_set: - ExcelApi: '1.10' -- id: excel-comment-replies - name: Comment replies - fileName: comment-replies.yaml - description: 'Adds, edits, and removes comment replies.' - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/85-preview-apis/comment-replies.yaml - group: Preview APIs - api_set: - ExcelApi: '1.10' + ExcelApi: '1.11' - id: excel-comment-resolution name: Comment resolution fileName: comment-resolution.yaml @@ -863,7 +892,7 @@ https://raw.githubusercontent.com////samples/excel/85-preview-apis/comment-resolution.yaml group: Preview APIs api_set: - ExcelApi: '1.10' + ExcelApi: '1.11' - id: excel-workbook-insert-external-worksheets name: Insert external worksheets fileName: workbook-insert-external-worksheets.yaml @@ -872,16 +901,7 @@ https://raw.githubusercontent.com////samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml group: Preview APIs api_set: - ExcelAPI: '1.10' -- id: excel-outline - name: Outline - fileName: outline.yaml - description: Creates an outline by grouping rows and columns. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/85-preview-apis/outline.yaml - group: Preview APIs - api_set: - ExcelApi: '1.10' + ExcelAPI: '1.11' - id: excel-workbook-save-and-close name: Save and close fileName: workbook-save-and-close.yaml @@ -890,27 +910,7 @@ https://raw.githubusercontent.com////samples/excel/85-preview-apis/workbook-save-and-close.yaml group: Preview APIs api_set: - ExcelAPI: '1.10' -- 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////samples/excel/85-preview-apis/event-worksheet-single-click.yaml - group: Preview APIs - api_set: - ExcelApi: '1.10' -- id: excel-pivottable-slicer - name: Slicer - fileName: pivottable-slicer.yaml - description: Adds a slicer to a PivotTable. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/85-preview-apis/pivottable-slicer.yaml - group: Preview APIs - api_set: - ExcelApi: '1.10' + ExcelAPI: '1.11' - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/samples/excel/85-preview-apis/comment-basics.yaml b/samples/excel/12-comment/comment-basics.yaml similarity index 98% rename from samples/excel/85-preview-apis/comment-basics.yaml rename to samples/excel/12-comment/comment-basics.yaml index 9010e3532..282e4627c 100644 --- a/samples/excel/85-preview-apis/comment-basics.yaml +++ b/samples/excel/12-comment/comment-basics.yaml @@ -1,4 +1,4 @@ -order: 2 +order: 1 id: excel-comment-basics name: Comment basics description: 'Adds, edits, and removes comments.' @@ -130,8 +130,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/comment-replies.yaml b/samples/excel/12-comment/comment-replies.yaml similarity index 98% rename from samples/excel/85-preview-apis/comment-replies.yaml rename to samples/excel/12-comment/comment-replies.yaml index b38429e1a..6f93aff49 100644 --- a/samples/excel/85-preview-apis/comment-replies.yaml +++ b/samples/excel/12-comment/comment-replies.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 2 id: excel-comment-replies name: Comment replies description: 'Adds, edits, and removes comment replies.' @@ -151,8 +151,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/data-change-event-details.yaml b/samples/excel/30-events/data-change-event-details.yaml index 1342f3622..2fb735c4f 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: 4 +order: 5 id: excel-data-change-event-details name: Data change 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 8987658e2..cb790701b 100644 --- a/samples/excel/30-events/data-changed.yaml +++ b/samples/excel/30-events/data-changed.yaml @@ -1,4 +1,4 @@ -order: 3 +order: 4 id: excel-events-data-changed name: Data change event description: Registers an event handler that runs when data is changed. diff --git a/samples/excel/85-preview-apis/event-column-and-row-sort.yaml b/samples/excel/30-events/event-column-and-row-sort.yaml similarity index 98% rename from samples/excel/85-preview-apis/event-column-and-row-sort.yaml rename to samples/excel/30-events/event-column-and-row-sort.yaml index 8ef6a23f6..bc2f39981 100644 --- a/samples/excel/85-preview-apis/event-column-and-row-sort.yaml +++ b/samples/excel/30-events/event-column-and-row-sort.yaml @@ -188,8 +188,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/event-worksheet-single-click.yaml b/samples/excel/30-events/event-worksheet-single-click.yaml similarity index 95% rename from samples/excel/85-preview-apis/event-worksheet-single-click.yaml rename to samples/excel/30-events/event-worksheet-single-click.yaml index 560299ef6..615d2c471 100644 --- a/samples/excel/85-preview-apis/event-worksheet-single-click.yaml +++ b/samples/excel/30-events/event-worksheet-single-click.yaml @@ -1,6 +1,6 @@ -order: 10 +order: 7 id: excel-event-worksheet-single-click -name: Single Click Event +name: Single click event description: Registers an event handler that runs when a single-click event occurs in the current worksheet. host: EXCEL api_set: @@ -64,8 +64,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/events-disable-events.yaml b/samples/excel/30-events/events-disable-events.yaml index 371d24007..9524450c3 100644 --- a/samples/excel/30-events/events-disable-events.yaml +++ b/samples/excel/30-events/events-disable-events.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 6 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-table-changed.yaml b/samples/excel/30-events/events-table-changed.yaml index 577ddf501..fc236ac86 100644 --- a/samples/excel/30-events/events-table-changed.yaml +++ b/samples/excel/30-events/events-table-changed.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 8 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 cfd362dae..18423e54d 100644 --- a/samples/excel/30-events/events-tablecollection-changed.yaml +++ b/samples/excel/30-events/events-tablecollection-changed.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 9 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-and-worksheet-collection.yaml b/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml index 3d2956273..01d55ba2e 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: 8 +order: 10 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.yaml b/samples/excel/30-events/events-worksheet.yaml index 6da26fcb9..2fae9d362 100644 --- a/samples/excel/30-events/events-worksheet.yaml +++ b/samples/excel/30-events/events-worksheet.yaml @@ -1,4 +1,4 @@ -order: 9 +order: 11 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/85-preview-apis/pivottable-slicer.yaml b/samples/excel/38-pivottable/pivottable-slicer.yaml similarity index 98% rename from samples/excel/85-preview-apis/pivottable-slicer.yaml rename to samples/excel/38-pivottable/pivottable-slicer.yaml index f5e2358d5..88a4cf56d 100644 --- a/samples/excel/85-preview-apis/pivottable-slicer.yaml +++ b/samples/excel/38-pivottable/pivottable-slicer.yaml @@ -1,4 +1,4 @@ -order: 11 +order: 4 id: excel-pivottable-slicer name: Slicer description: Adds a slicer to a PivotTable. @@ -201,8 +201,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/42-range/cell-properties.yaml b/samples/excel/42-range/cell-properties.yaml index 52cf8efd6..e923d3f2d 100644 --- a/samples/excel/42-range/cell-properties.yaml +++ b/samples/excel/42-range/cell-properties.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 6 id: excel-range-cell-properties name: Get and set cell properties description: Sets different properties across a range then retrieves those properties. diff --git a/samples/excel/42-range/formatting.yaml b/samples/excel/42-range/formatting.yaml index 8a6cafe56..a8abfa954 100644 --- a/samples/excel/42-range/formatting.yaml +++ b/samples/excel/42-range/formatting.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 5 id: excel-range-formatting name: Formatting description: Formats a range. diff --git a/samples/excel/42-range/insert-delete-clear-range.yaml b/samples/excel/42-range/insert-delete-clear-range.yaml index db776a767..cd6db23fd 100644 --- a/samples/excel/42-range/insert-delete-clear-range.yaml +++ b/samples/excel/42-range/insert-delete-clear-range.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 8 id: excel-range-insert-delete-and-clear-range name: 'Insert, delete, and clear' description: 'Inserts, deletes, and clears a range.' diff --git a/samples/excel/85-preview-apis/outline.yaml b/samples/excel/42-range/outline.yaml similarity index 98% rename from samples/excel/85-preview-apis/outline.yaml rename to samples/excel/42-range/outline.yaml index d79b967df..02f043b4a 100644 --- a/samples/excel/85-preview-apis/outline.yaml +++ b/samples/excel/42-range/outline.yaml @@ -1,4 +1,4 @@ -order: 8 +order: 9 id: excel-outline name: Outline description: Creates an outline by grouping rows and columns. @@ -227,8 +227,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/42-range/range-areas.yaml b/samples/excel/42-range/range-areas.yaml index d3eb0ac04..cfbff6ec9 100644 --- a/samples/excel/42-range/range-areas.yaml +++ b/samples/excel/42-range/range-areas.yaml @@ -1,4 +1,4 @@ -order: 2 +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.' diff --git a/samples/excel/85-preview-apis/range-auto-fill.yaml b/samples/excel/42-range/range-auto-fill.yaml similarity index 98% rename from samples/excel/85-preview-apis/range-auto-fill.yaml rename to samples/excel/42-range/range-auto-fill.yaml index d7a0ff07c..c6042f1d1 100644 --- a/samples/excel/85-preview-apis/range-auto-fill.yaml +++ b/samples/excel/42-range/range-auto-fill.yaml @@ -143,8 +143,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/42-range/range-copyfrom.yaml b/samples/excel/42-range/range-copyfrom.yaml index 0b49a0479..4bba125b2 100644 --- a/samples/excel/42-range/range-copyfrom.yaml +++ b/samples/excel/42-range/range-copyfrom.yaml @@ -1,4 +1,4 @@ -order: 1 +order: 2 id: excel-range-copyfrom name: Copy and paste ranges description: Copies data and formatting from one range to another. diff --git a/samples/excel/42-range/range-find.yaml b/samples/excel/42-range/range-find.yaml index ccbab0e22..9ad3fa386 100644 --- a/samples/excel/42-range/range-find.yaml +++ b/samples/excel/42-range/range-find.yaml @@ -1,4 +1,4 @@ -order: 3 +order: 4 id: excel-range-find name: Find text matches within a range description: Finds a cell within a range based on string matching. diff --git a/samples/excel/42-range/range-hyperlink.yaml b/samples/excel/42-range/range-hyperlink.yaml index 829c49369..1f7f91207 100644 --- a/samples/excel/42-range/range-hyperlink.yaml +++ b/samples/excel/42-range/range-hyperlink.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 7 id: excel-range-hyperlink name: Hyperlinks description: 'Creates, updates, and clears hyperlinks in a range.' diff --git a/samples/excel/42-range/range-relationships.yaml b/samples/excel/42-range/range-relationships.yaml index f7545d7a3..bb5b531bc 100644 --- a/samples/excel/42-range/range-relationships.yaml +++ b/samples/excel/42-range/range-relationships.yaml @@ -1,4 +1,4 @@ -order: 8 +order: 10 id: excel-range-range-relationships name: Range relationships description: 'Shows relationships between ranges, such as bounding rectangles and intersections.' diff --git a/samples/excel/42-range/range-remove-duplicates.yaml b/samples/excel/42-range/range-remove-duplicates.yaml index b034a6428..1d61d4180 100644 --- a/samples/excel/42-range/range-remove-duplicates.yaml +++ b/samples/excel/42-range/range-remove-duplicates.yaml @@ -1,4 +1,4 @@ -order: 9 +order: 11 id: excel-range-remove-duplicates name: Remove duplicates description: Removes duplicate entries from a range. diff --git a/samples/excel/42-range/range-text-orientation.yaml b/samples/excel/42-range/range-text-orientation.yaml index 550b2cb27..77422984d 100644 --- a/samples/excel/42-range/range-text-orientation.yaml +++ b/samples/excel/42-range/range-text-orientation.yaml @@ -1,4 +1,4 @@ -order: 12 +order: 14 id: excel-range-text-orientation name: Text orientation description: Gets and sets the text orientation within a range. diff --git a/samples/excel/42-range/selected-range.yaml b/samples/excel/42-range/selected-range.yaml index 375b08a34..4c14a5798 100644 --- a/samples/excel/42-range/selected-range.yaml +++ b/samples/excel/42-range/selected-range.yaml @@ -1,4 +1,4 @@ -order: 10 +order: 12 id: excel-range-selected-range name: Selected range description: Gets and sets the currently selected range. diff --git a/samples/excel/42-range/set-get-values.yaml b/samples/excel/42-range/set-get-values.yaml index 747deff58..3d044a086 100644 --- a/samples/excel/42-range/set-get-values.yaml +++ b/samples/excel/42-range/set-get-values.yaml @@ -1,4 +1,4 @@ -order: 14 +order: 16 id: excel-range-values-and-formulas name: Values and formulas description: Gets and sets values and formulas for a range. diff --git a/samples/excel/42-range/style.yaml b/samples/excel/42-range/style.yaml index cdf58eff8..9524314c0 100644 --- a/samples/excel/42-range/style.yaml +++ b/samples/excel/42-range/style.yaml @@ -1,4 +1,4 @@ -order: 11 +order: 13 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.' diff --git a/samples/excel/42-range/used-range.yaml b/samples/excel/42-range/used-range.yaml index 9fca31609..7ab7073b1 100644 --- a/samples/excel/42-range/used-range.yaml +++ b/samples/excel/42-range/used-range.yaml @@ -1,4 +1,4 @@ -order: 13 +order: 15 id: excel-range-used-range name: Used range description: Tests for a used range and creates a chart from a table only if there's data in the table. diff --git a/samples/excel/85-preview-apis/comment-mentions.yaml b/samples/excel/85-preview-apis/comment-mentions.yaml index 1b7825d9b..5739d5e47 100644 --- a/samples/excel/85-preview-apis/comment-mentions.yaml +++ b/samples/excel/85-preview-apis/comment-mentions.yaml @@ -1,10 +1,10 @@ -order: 4 +order: 1 id: excel-comment-mentions name: Comment mentions description: Mentions someone in a comment. host: EXCEL api_set: - ExcelApi: '1.10' + ExcelApi: '1.11' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/85-preview-apis/comment-resolution.yaml b/samples/excel/85-preview-apis/comment-resolution.yaml index 2a799781c..e85757218 100644 --- a/samples/excel/85-preview-apis/comment-resolution.yaml +++ b/samples/excel/85-preview-apis/comment-resolution.yaml @@ -1,10 +1,10 @@ -order: 6 +order: 2 id: excel-comment-resolution name: Comment resolution description: Resolves and reopens a comment thread. host: EXCEL api_set: - ExcelApi: '1.10' + ExcelApi: '1.11' script: content: | $("#setup").click(() => tryCatch(setup)); 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 0a2d8a46c..dccebf63b 100644 --- a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml +++ b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml @@ -1,10 +1,10 @@ -order: 7 +order: 3 id: excel-workbook-insert-external-worksheets name: Insert external worksheets description: Inserts worksheets from another workbook into the current workbook. host: EXCEL api_set: - ExcelAPI: '1.10' + ExcelAPI: '1.11' script: content: | $("#file").change(() => tryCatch(insertSheets)); diff --git a/samples/excel/85-preview-apis/workbook-save-and-close.yaml b/samples/excel/85-preview-apis/workbook-save-and-close.yaml index 20b090277..3347a8c1a 100644 --- a/samples/excel/85-preview-apis/workbook-save-and-close.yaml +++ b/samples/excel/85-preview-apis/workbook-save-and-close.yaml @@ -1,10 +1,10 @@ -order: 9 +order: 4 id: excel-workbook-save-and-close name: Save and close description: Saves and closes a workbook. host: EXCEL api_set: - ExcelAPI: '1.10' + ExcelAPI: '1.11' script: content: | $("#saveWithPrompt").click(() => tryCatch(saveWithPrompt)); diff --git a/view/excel.json b/view/excel.json index 717ae87ac..c118237da 100644 --- a/view/excel.json +++ b/view/excel.json @@ -14,6 +14,8 @@ "excel-chart-series-plotorder": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-series-plotorder.yaml", "excel-chart-title-format": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-title-format.yaml", "excel-chart-trendlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-trendlines.yaml", + "excel-comment-basics": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/12-comment/comment-basics.yaml", + "excel-comment-replies": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/12-comment/comment-replies.yaml", "excel-range-conditional-formatting-basic": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml", "excel-range-conditional-formatting-advanced": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml", "excel-custom-functions-basic": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/16-custom-functions/basic-function.yaml", @@ -28,9 +30,11 @@ "excel-document-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/26-document/properties.yaml", "excel-events-chartcollection-added-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-chartcollection-added-activated.yaml", "excel-events-chart-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-chart-activated.yaml", + "excel-event-column-and-row-sort": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/event-column-and-row-sort.yaml", "excel-events-data-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/data-changed.yaml", "excel-data-change-event-details": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/data-change-event-details.yaml", "excel-events-disable-events": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-disable-events.yaml", + "excel-event-worksheet-single-click": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/event-worksheet-single-click.yaml", "excel-events-table-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-table-changed.yaml", "excel-events-tablecollection-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-tablecollection-changed.yaml", "excel-events-workbook-and-worksheet-collection": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml", @@ -40,6 +44,8 @@ "excel-pivottable-calculations": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/38-pivottable/pivottable-calculations.yaml", "excel-pivottable-create-and-modify": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/38-pivottable/pivottable-create-and-modify.yaml", "excel-pivottable-filters-and-summaries": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml", + "excel-pivottable-slicer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/38-pivottable/pivottable-slicer.yaml", + "excel-range-auto-fill": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-auto-fill.yaml", "excel-range-copyfrom": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-copyfrom.yaml", "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-areas.yaml", "excel-range-find": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-find.yaml", @@ -47,6 +53,7 @@ "excel-range-cell-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/cell-properties.yaml", "excel-range-hyperlink": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-hyperlink.yaml", "excel-range-insert-delete-and-clear-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/insert-delete-clear-range.yaml", + "excel-outline": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/outline.yaml", "excel-range-range-relationships": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-relationships.yaml", "excel-range-remove-duplicates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-remove-duplicates.yaml", "excel-range-selected-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/selected-range.yaml", @@ -86,17 +93,10 @@ "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-visibility.yaml", - "excel-range-auto-fill": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/range-auto-fill.yaml", - "excel-comment-basics": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/comment-basics.yaml", - "excel-event-column-and-row-sort": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/event-column-and-row-sort.yaml", "excel-comment-mentions": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/comment-mentions.yaml", - "excel-comment-replies": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/comment-replies.yaml", "excel-comment-resolution": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/comment-resolution.yaml", "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", - "excel-outline": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/outline.yaml", "excel-workbook-save-and-close": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-save-and-close.yaml", - "excel-event-worksheet-single-click": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/event-worksheet-single-click.yaml", - "excel-pivottable-slicer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/pivottable-slicer.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/multiple-property-set.yaml", From 85120d194cb5d791b0efcd018ff74176406a5579 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Tue, 19 Nov 2019 14:03:59 -0800 Subject: [PATCH 213/660] Allowing yarn start to run on later node versions (#366) --- config/build.ts | 6 +- config/helpers.ts | 26 --- package.json | 12 +- yarn.lock | 405 +++++++--------------------------------------- 4 files changed, 64 insertions(+), 385 deletions(-) diff --git a/config/build.ts b/config/build.ts index e071fe4df..500880f80 100644 --- a/config/build.ts +++ b/config/build.ts @@ -7,7 +7,7 @@ import { status } from './status'; import { SnippetFileInput, SnippetProcessedData, getDestinationBranch, followsNamingGuidelines, isCUID, - rmRf, mkDir, getFiles, writeFile, loadFileContents, banner, getPrintableDetails, Dictionary + rmRf, mkDir, getFiles, writeFile, banner, getPrintableDetails, Dictionary } from './helpers'; import { buildReferenceDocSnippetExtracts } from './build.documentation'; import { getShareableYaml } from './snippet.helpers'; @@ -15,6 +15,7 @@ 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'; const { GH_ACCOUNT, GH_REPO, TRAVIS_BRANCH } = process.env; @@ -82,7 +83,7 @@ async function processSnippets(processedSnippets: Dictionary }); }); - -/** - * Load the contents of the YAML file. - * @param path Absolute to the yaml file. - */ -export const loadFileContents = (path: string) => - new Promise(async (resolve, reject) => { - let pathIsDirectory = await isDir(path); - if (pathIsDirectory) { - return reject(new Error(`Cannot open a directory @ ${chalk.bold.red(path)}`)); - } - else { - fs.readFile(path, 'UTF8', (err, contents) => { - try { - if (err) { - return reject(err); - } - return resolve(contents); - } - catch (err) { - reject(err); - } - }); - } - }); - /** * Check the file path against validations and return a 'File' object. * @param fullPath An absolute path to the file. diff --git a/package.json b/package.json index 3d6e60026..4bc655412 100644 --- a/package.json +++ b/package.json @@ -25,16 +25,18 @@ "homepage": "https://github.com/OfficeDev/office-js-snippets#readme", "dependencies": { "chalk": "1.1.3", - "escape-string-regexp": "^1.0.5", - "excel": "^1.0.0", - "js-yaml": "^3.12.2", - "lodash": "^4.17.13", + "escape-string-regexp": "^2.0.0", + "excel": "^1.0.1", + "fs-extra": "3.0.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.15", "node-status": "^1.0.0", - "rimraf": "^2.6.3", + "rimraf": "^3.0.0", "shelljs": "^0.8.3" }, "devDependencies": { "@types/chalk": "0.4.31", + "@types/fs-extra": "3.0.1", "@types/js-yaml": "^3.12.0", "@types/lodash": "^4.14.122", "@types/node": "^11.10.5", diff --git a/yarn.lock b/yarn.lock index 85582e71d..3c56548a1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -28,6 +28,13 @@ resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== +"@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= + dependencies: + "@types/node" "*" + "@types/glob@*": version "7.1.1" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" @@ -70,21 +77,11 @@ "@types/glob" "*" "@types/node" "*" -abbrev@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== - 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-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -97,19 +94,6 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -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" @@ -135,13 +119,6 @@ binary@~0.3.0: buffers "~0.1.1" chainsaw "~0.1.0" -bindings@^1.3.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - bluebird@~3.4.1: version "3.4.7" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" @@ -209,11 +186,6 @@ charm@1.0.1: dependencies: inherits "^2.0.1" -chownr@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" - integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== - cli-cursor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" @@ -226,11 +198,6 @@ cli-spinners@0.2.0: resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.2.0.tgz#85078737913b880f6ec9ffe7b65e83ec7776284f" integrity sha1-hQeHN5E7iA9uyf/ntl6D7Hd2KE8= -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" @@ -258,38 +225,11 @@ concat-map@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.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -debug@^3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -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== - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - diff@^3.2.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" @@ -307,6 +247,11 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^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" @@ -317,12 +262,11 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= -excel@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/excel/-/excel-1.0.0.tgz#5ad98f460ce9f7ee48e514d3d6388e018d874d3c" - integrity sha512-Jpp9TpqqHBLi4gt5migJ2sPd4ARORDfl3UFgPlcPd7xbajpPfZx1fmbMerZzKY/ofALd3gilUSneiupLn9Ph5Q== +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: - libxmljs "^0.18.0" unzipper "^0.8.11" xmldom "^0.1.27" xpath "0.0.27" @@ -332,17 +276,14 @@ exit-hook@^1.0.0: resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g= -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -fs-minipass@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" - integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ== +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: - minipass "^2.2.1" + graceful-fs "^4.1.2" + jsonfile "^3.0.0" + universalify "^0.1.0" fs.realpath@^1.0.0: version "1.0.0" @@ -359,20 +300,6 @@ fstream@~1.0.10: mkdirp ">=0.5 0" rimraf "2" -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" - glob@^7.0.0, glob@^7.1.1, glob@^7.1.3: version "7.1.4" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" @@ -390,6 +317,11 @@ graceful-fs@^4.1.2: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.1.tgz#1c1f0c364882c868f5bff6512146328336a11b1d" integrity sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw== +graceful-fs@^4.1.6: + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -402,25 +334,6 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= -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= - -iconv-lite@^0.4.4: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ignore-walk@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== - dependencies: - minimatch "^3.0.4" - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -434,28 +347,11 @@ 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@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - interpret@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== -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= - isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -466,7 +362,7 @@ js-tokens@^4.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.12.2, js-yaml@^3.13.1: +js-yaml@^3.13.1: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== @@ -474,24 +370,22 @@ js-yaml@^3.12.2, js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -libxmljs@^0.18.0: - version "0.18.8" - resolved "https://registry.yarnpkg.com/libxmljs/-/libxmljs-0.18.8.tgz#b0a07512a01290b6240600d6c2bc33a3c70976d6" - integrity sha1-sKB1EqASkLYkBgDWwrwzo8cJdtY= - dependencies: - bindings "^1.3.0" - nan "~2.10.0" - node-pre-gyp "^0.9.1" +jsonfile@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" + integrity sha1-pezG9l9T9mLEQVx2daAzHQmS7GY= + optionalDependencies: + graceful-fs "^4.1.6" 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.13: - version "4.17.14" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" - integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== +lodash@^4.17.15: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== minimatch@^3.0.4: version "3.0.4" @@ -505,68 +399,13 @@ minimist@0.0.8: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= -minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= - -minipass@^2.2.1, minipass@^2.3.5: - version "2.3.5" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" - integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" - integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== - dependencies: - minipass "^2.2.1" - -"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: +"mkdirp@>=0.5 0", mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= dependencies: minimist "0.0.8" -ms@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -nan@~2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" - integrity sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA== - -needle@^2.2.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" - integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - -node-pre-gyp@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.9.1.tgz#f11c07516dd92f87199dbc7e1838eab7cd56c9e0" - integrity sha1-8RwHUW3ZL4cZnbx+GDjqt81WyeA= - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.0" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.1.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - node-status@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-status/-/node-status-1.0.0.tgz#7906a7c47a6587d03496bf74ec634abaa03f8e80" @@ -577,47 +416,6 @@ node-status@^1.0.0: cli-spinners "0.2.0" colors "1.1.2" -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= - dependencies: - abbrev "1" - osenv "^0.1.4" - -npm-bundled@^1.0.1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" - integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== - -npm-packlist@^1.1.6: - version "1.4.4" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44" - integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - -npmlog@^4.0.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= - -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" @@ -630,24 +428,6 @@ onetime@^1.0.0: resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= -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-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: - 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" - 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" @@ -668,17 +448,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== -rc@^1.1.7: - 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" - -readable-stream@^2.0.2, readable-stream@^2.0.6: +readable-stream@^2.0.2: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== @@ -726,43 +496,30 @@ restore-cursor@^1.0.1: exit-hook "^1.0.0" onetime "^1.0.0" -rimraf@2, rimraf@^2.6.1, rimraf@^2.6.3: +rimraf@2: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== dependencies: glob "^7.1.3" -safe-buffer@^5.1.2: - version "5.2.0" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" - integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== +rimraf@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.0.tgz#614176d4b3010b75e5c390eb0ee96f6dc0cebb9b" + integrity sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg== + 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== -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sax@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - semver@^5.3.0: version "5.7.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== -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" @@ -777,33 +534,11 @@ shelljs@^0.8.3: interpret "^1.0.0" rechoir "^0.6.2" -signal-exit@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= - 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-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": - 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_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" @@ -816,25 +551,13 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -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-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= - supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -847,19 +570,6 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -tar@^4: - version "4.4.10" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" - integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.3.5" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" - "traverse@>=0.3.0 <0.4": version "0.3.9" resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" @@ -901,6 +611,11 @@ typescript@^3.3.3333: resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== +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.8.11: version "0.8.14" resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.8.14.tgz#ade0524cd2fc14d11b8de258be22f9d247d3f79b" @@ -921,13 +636,6 @@ util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -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" @@ -942,8 +650,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@^3.0.0, yallist@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" - integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== From ae1defbdf6c13752f9a22f684bdc07dce885d4f3 Mon Sep 17 00:00:00 2001 From: Oleg-O Date: Wed, 20 Nov 2019 10:06:37 -0800 Subject: [PATCH 214/660] Adds "Displaying items" samples for Outlook (#367) * Adds "Displaying items" samples * Update samples/outlook/55-displaying-items/display-exiting-message.yaml Co-Authored-By: Elizabeth Samuel * Update playlists/outlook.yaml Co-Authored-By: Elizabeth Samuel --- playlists/outlook.yaml | 48 +++++++++++++++++ .../display-exiting-appointment.yaml | 34 +++++++++++++ .../display-exiting-message.yaml | 34 +++++++++++++ .../display-new-appointment.yaml | 49 ++++++++++++++++++ .../display-new-message.yaml | 50 ++++++++++++++++++ .../display-reply-forms.yaml | 38 ++++++++++++++ .../display-reply-with-attachments.yaml | 51 +++++++++++++++++++ 7 files changed, 304 insertions(+) create mode 100644 samples/outlook/55-displaying-items/display-exiting-appointment.yaml create mode 100644 samples/outlook/55-displaying-items/display-exiting-message.yaml create mode 100644 samples/outlook/55-displaying-items/display-new-appointment.yaml create mode 100644 samples/outlook/55-displaying-items/display-new-message.yaml create mode 100644 samples/outlook/55-displaying-items/display-reply-forms.yaml create mode 100644 samples/outlook/55-displaying-items/display-reply-with-attachments.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 8c6436a54..fbe34c6a4 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -22,3 +22,51 @@ https://raw.githubusercontent.com////samples/outlook/01-compose-basics/set-selected-text.yaml group: Compose Basics api_set: {} +- id: outlook-displaying-items-display-new-message + name: Display new message form, with an inline attachment + fileName: display-new-message.yaml + description: Displays new message form, with an inline attachment + rawUrl: >- + https://raw.githubusercontent.com////samples/outlook/55-displaying-items/display-new-message.yaml + group: Displaying items + api_set: {} +- id: outlook-displaying-items-display-new-appointment + name: Display new appointment form + fileName: display-new-appointment.yaml + description: Displays new appointment form + rawUrl: >- + https://raw.githubusercontent.com////samples/outlook/55-displaying-items/display-new-appointment.yaml + group: Displaying items + api_set: {} +- id: outlook-displaying-items-display-reply-forms + name: Display reply forms + fileName: display-reply-forms.yaml + description: Displays reply forms + rawUrl: >- + https://raw.githubusercontent.com////samples/outlook/55-displaying-items/display-reply-forms.yaml + group: Displaying items + api_set: {} +- id: outlook-displaying-items-display-reply-with-attachments + name: Display Reply form, with attachments + fileName: display-reply-with-attachments.yaml + description: Displays Reply form, and adds attachments + rawUrl: >- + https://raw.githubusercontent.com////samples/outlook/55-displaying-items/display-reply-with-attachments.yaml + group: Displaying items + api_set: {} +- id: outlook-displaying-items-display-exiting-message + name: Display existing message + fileName: display-existing-message.yaml + description: Displays existing message in a separate window + rawUrl: >- + https://raw.githubusercontent.com////samples/outlook/55-displaying-items/display-exiting-message.yaml + group: Displaying items + api_set: {} +- id: outlook-displaying-items-display-exiting-appointment + name: Display existing appointment + fileName: display-exiting-appointment.yaml + description: Displays existing appointment in a separate window + rawUrl: >- + https://raw.githubusercontent.com////samples/outlook/55-displaying-items/display-exiting-appointment.yaml + group: Displaying items + api_set: {} diff --git a/samples/outlook/55-displaying-items/display-exiting-appointment.yaml b/samples/outlook/55-displaying-items/display-exiting-appointment.yaml new file mode 100644 index 000000000..2cdc02366 --- /dev/null +++ b/samples/outlook/55-displaying-items/display-exiting-appointment.yaml @@ -0,0 +1,34 @@ +id: outlook-displaying-items-display-exiting-appointment +name: Display existing appointment +description: Displays existing appointment in a separate window +host: OUTLOOK +api_set: {} +script: + content: | + // pre-populate with current item ID + $("#itemId").val(Office.context.mailbox.item.itemId); + + $("#run").click(function() { + var itemId = $("#itemId").val(); + Office.context.mailbox.displayAppointmentForm(itemId); + }); + language: typescript +template: + content: "
    \n\t\n\t\n
    \n\t" + language: html +style: + content: | + /* Your style goes here */ + 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/55-displaying-items/display-exiting-message.yaml b/samples/outlook/55-displaying-items/display-exiting-message.yaml new file mode 100644 index 000000000..05b044b8d --- /dev/null +++ b/samples/outlook/55-displaying-items/display-exiting-message.yaml @@ -0,0 +1,34 @@ +id: outlook-displaying-items-display-existing-message +name: Display existing message +description: Displays existing message in a separate window +host: OUTLOOK +api_set: {} +script: + content: | + // pre-populate with current item ID + $("#itemId").val(Office.context.mailbox.item.itemId); + + $("#run").click(function() { + var itemId = $("#itemId").val(); + Office.context.mailbox.displayMessageForm(itemId); + }); + language: typescript +template: + content: "
    \n\t\n\t\n
    \n\t" + language: html +style: + content: | + /* Your style goes here */ + 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/55-displaying-items/display-new-appointment.yaml b/samples/outlook/55-displaying-items/display-new-appointment.yaml new file mode 100644 index 000000000..9a2db8879 --- /dev/null +++ b/samples/outlook/55-displaying-items/display-new-appointment.yaml @@ -0,0 +1,49 @@ +id: outlook-displaying-items-display-new-appointment +name: Display new appointment form +description: Displays new appointment form +host: OUTLOOK +api_set: {} +script: + content: | + $("#run").click(run); + + function run() { + var start = new Date(); + var 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!' + }); + } + language: typescript +template: + content: | + + language: html +style: + content: | + /* Your style goes here */ + 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/55-displaying-items/display-new-message.yaml b/samples/outlook/55-displaying-items/display-new-message.yaml new file mode 100644 index 000000000..1a5acfd37 --- /dev/null +++ b/samples/outlook/55-displaying-items/display-new-message.yaml @@ -0,0 +1,50 @@ +id: outlook-displaying-items-display-new-message +name: Display new message form, with an inline attachment +description: Displays new message form, with an inline attachment +host: OUTLOOK +api_set: {} +script: + content: | + $("#run").click(run); + + function run() { + 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 + } + ] + }); + } + language: typescript +template: + content: | + + language: html +style: + content: | + /* Your style goes here */ + 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/55-displaying-items/display-reply-forms.yaml b/samples/outlook/55-displaying-items/display-reply-forms.yaml new file mode 100644 index 000000000..ba4d8184c --- /dev/null +++ b/samples/outlook/55-displaying-items/display-reply-forms.yaml @@ -0,0 +1,38 @@ +id: outlook-displaying-items-display-reply-forms +name: Display reply forms +description: Displays reply forms +host: OUTLOOK +api_set: {} +script: + content: | + $("#displayReplyForm").click(function() { + Office.context.mailbox.item.displayReplyForm( + "This is a reply with some text in italics." + ); + }); + + $("#displayReplyAllForm").click(function() { + Office.context.mailbox.item.displayReplyAllForm( + "This is a reply ALL with some text in bold." + ); + }); + language: typescript +template: + content: "\n

    \n" + language: html +style: + content: | + /* Your style goes here */ + 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/55-displaying-items/display-reply-with-attachments.yaml b/samples/outlook/55-displaying-items/display-reply-with-attachments.yaml new file mode 100644 index 000000000..f4b70ecfc --- /dev/null +++ b/samples/outlook/55-displaying-items/display-reply-with-attachments.yaml @@ -0,0 +1,51 @@ +id: outlook-displaying-items-display-reply-with-attachments +name: Display Reply form, with attachments +description: Displays Reply form, and adds attachments +host: OUTLOOK +api_set: {} +script: + content: | + $("#run").click(run); + + function run() { + 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}`); + } + } + }); + } + language: typescript +template: + content: | + + language: html +style: + content: | + /* Your style goes here */ + 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 From d0a78ee30ce2695da36ff1d72554d30684e47265 Mon Sep 17 00:00:00 2001 From: Oleg-O Date: Wed, 20 Nov 2019 15:40:41 -0800 Subject: [PATCH 215/660] Added roaming settings group for Outlook (#368) * Adds "Displaying items" samples * Update samples/outlook/55-displaying-items/display-exiting-message.yaml Co-Authored-By: Elizabeth Samuel * Update playlists/outlook.yaml Co-Authored-By: Elizabeth Samuel * adding roaming settings sample * makes styling consistent with excel samples; improves tites and descriptions * cleanup * yarn changes * Update samples/outlook/10-roaming-settings/roaming-settings.yaml Co-Authored-By: Elizabeth Samuel * Update samples/outlook/10-roaming-settings/roaming-settings.yaml Co-Authored-By: Elizabeth Samuel * Apply suggestions from code review Co-Authored-By: Elizabeth Samuel --- playlists/outlook.yaml | 74 +++++++++------- .../10-roaming-settings/roaming-settings.yaml | 84 +++++++++++++++++++ .../display-existing-appointment.yaml | 57 +++++++++++++ .../display-existing-message.yaml | 57 +++++++++++++ .../display-exiting-appointment.yaml | 34 -------- .../display-exiting-message.yaml | 34 -------- .../display-new-appointment.yaml | 24 +++++- .../display-new-message.yaml | 30 +++++-- .../display-reply-forms.yaml | 77 +++++++++++------ .../display-reply-with-attachments.yaml | 32 +++++-- view/outlook.json | 9 +- 11 files changed, 366 insertions(+), 146 deletions(-) create mode 100644 samples/outlook/10-roaming-settings/roaming-settings.yaml create mode 100644 samples/outlook/55-displaying-items/display-existing-appointment.yaml create mode 100644 samples/outlook/55-displaying-items/display-existing-message.yaml delete mode 100644 samples/outlook/55-displaying-items/display-exiting-appointment.yaml delete mode 100644 samples/outlook/55-displaying-items/display-exiting-message.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index fbe34c6a4..502a1f316 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -22,51 +22,63 @@ https://raw.githubusercontent.com////samples/outlook/01-compose-basics/set-selected-text.yaml group: Compose Basics api_set: {} -- id: outlook-displaying-items-display-new-message - name: Display new message form, with an inline attachment - fileName: display-new-message.yaml - description: Displays new message form, with an inline attachment +- id: outlook-roaming-settings-roaming-settings + name: Using add-in settings + fileName: roaming-settings.yaml + description: 'Gets, sets and saves add-in roaming settings' rawUrl: >- - https://raw.githubusercontent.com////samples/outlook/55-displaying-items/display-new-message.yaml - group: Displaying items + https://raw.githubusercontent.com////samples/outlook/10-roaming-settings/roaming-settings.yaml + group: Roaming Settings + api_set: {} +- id: outlook-displaying-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////samples/outlook/55-displaying-items/display-existing-appointment.yaml + group: Displaying Items + api_set: {} +- id: outlook-displaying-items-display-existing-message + name: Open a message + fileName: display-existing-message.yaml + description: Displays existing message in a separate window + rawUrl: >- + https://raw.githubusercontent.com////samples/outlook/55-displaying-items/display-existing-message.yaml + group: Displaying Items api_set: {} - id: outlook-displaying-items-display-new-appointment - name: Display new appointment form + name: Create a new appointment fileName: display-new-appointment.yaml - description: Displays new appointment form + description: >- + Opens a new appointment form with a sample content, and a few fields + populated rawUrl: >- https://raw.githubusercontent.com////samples/outlook/55-displaying-items/display-new-appointment.yaml - group: Displaying items + group: Displaying Items + api_set: {} +- id: outlook-displaying-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////samples/outlook/55-displaying-items/display-new-message.yaml + group: Displaying Items api_set: {} - id: outlook-displaying-items-display-reply-forms - name: Display reply forms + name: Create replies fileName: display-reply-forms.yaml - description: Displays reply forms + description: Opens a reply and reply-all message forms with a sample reply content rawUrl: >- https://raw.githubusercontent.com////samples/outlook/55-displaying-items/display-reply-forms.yaml - group: Displaying items + group: Displaying Items api_set: {} - id: outlook-displaying-items-display-reply-with-attachments - name: Display Reply form, with attachments + name: 'Create a reply, with attachments' fileName: display-reply-with-attachments.yaml - description: Displays Reply form, and adds attachments + description: Opens a reply message forms and adds sample attachments rawUrl: >- https://raw.githubusercontent.com////samples/outlook/55-displaying-items/display-reply-with-attachments.yaml - group: Displaying items - api_set: {} -- id: outlook-displaying-items-display-exiting-message - name: Display existing message - fileName: display-existing-message.yaml - description: Displays existing message in a separate window - rawUrl: >- - https://raw.githubusercontent.com////samples/outlook/55-displaying-items/display-exiting-message.yaml - group: Displaying items - api_set: {} -- id: outlook-displaying-items-display-exiting-appointment - name: Display existing appointment - fileName: display-exiting-appointment.yaml - description: Displays existing appointment in a separate window - rawUrl: >- - https://raw.githubusercontent.com////samples/outlook/55-displaying-items/display-exiting-appointment.yaml - group: Displaying items + group: Displaying Items api_set: {} diff --git a/samples/outlook/10-roaming-settings/roaming-settings.yaml b/samples/outlook/10-roaming-settings/roaming-settings.yaml new file mode 100644 index 000000000..7634e7f0d --- /dev/null +++ b/samples/outlook/10-roaming-settings/roaming-settings.yaml @@ -0,0 +1,84 @@ +id: outlook-roaming-settings-roaming-settings +name: Using add-in settings +description: 'Gets, sets, and saves add-in roaming settings' +host: OUTLOOK +api_set: {} +script: + content: | + $("#get").click(function() { + var settingName = $("#settingName").val(); + var settingValue = Office.context.roamingSettings.get(settingName); + $("#settingValue").val(settingValue); + console.log(`The value of setting "${settingName}" is "${settingValue}".`); + }); + + $("#set").click(function() { + var settingName = $("#settingName").val(); + var settingValue = $("#settingValue").val(); + Office.context.roamingSettings.set(settingName, settingValue); + console.log(`Setting "${settingName}" set to value "${settingValue}".`); + }); + + $("#save").click(function() { + // 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}`); + } + }); + }); + 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

    +
    + + +
    +
    + + +
    + + + +
    + 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/55-displaying-items/display-existing-appointment.yaml b/samples/outlook/55-displaying-items/display-existing-appointment.yaml new file mode 100644 index 000000000..22fe438f4 --- /dev/null +++ b/samples/outlook/55-displaying-items/display-existing-appointment.yaml @@ -0,0 +1,57 @@ +id: outlook-displaying-items-display-existing-appointment +name: Open an appointment +description: Displays existing appointment in a separate window +host: OUTLOOK +api_set: {} +script: + content: | + // Pre-populate with current item ID. + $("#itemId").val(Office.context.mailbox.item.itemId); + + $("#run").click(function() { + var itemId = $("#itemId").val(); + Office.context.mailbox.displayAppointmentForm(itemId); + }); + language: typescript +template: + content: | +
    +

    This sample shows how to display an existing appointment in a separate 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/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/55-displaying-items/display-existing-message.yaml b/samples/outlook/55-displaying-items/display-existing-message.yaml new file mode 100644 index 000000000..381b76fee --- /dev/null +++ b/samples/outlook/55-displaying-items/display-existing-message.yaml @@ -0,0 +1,57 @@ +id: outlook-displaying-items-display-existing-message +name: Open a message +description: Displays an existing message in a separate window +host: OUTLOOK +api_set: {} +script: + content: | + // Pre-populate with current item ID. + $("#itemId").val(Office.context.mailbox.item.itemId); + + $("#run").click(function() { + var itemId = $("#itemId").val(); + Office.context.mailbox.displayMessageForm(itemId); + }); + language: typescript +template: + content: | +
    +

    This sample shows how to display an existing message in a separate 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/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/55-displaying-items/display-exiting-appointment.yaml b/samples/outlook/55-displaying-items/display-exiting-appointment.yaml deleted file mode 100644 index 2cdc02366..000000000 --- a/samples/outlook/55-displaying-items/display-exiting-appointment.yaml +++ /dev/null @@ -1,34 +0,0 @@ -id: outlook-displaying-items-display-exiting-appointment -name: Display existing appointment -description: Displays existing appointment in a separate window -host: OUTLOOK -api_set: {} -script: - content: | - // pre-populate with current item ID - $("#itemId").val(Office.context.mailbox.item.itemId); - - $("#run").click(function() { - var itemId = $("#itemId").val(); - Office.context.mailbox.displayAppointmentForm(itemId); - }); - language: typescript -template: - content: "
    \n\t\n\t\n
    \n\t" - language: html -style: - content: | - /* Your style goes here */ - 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/55-displaying-items/display-exiting-message.yaml b/samples/outlook/55-displaying-items/display-exiting-message.yaml deleted file mode 100644 index 05b044b8d..000000000 --- a/samples/outlook/55-displaying-items/display-exiting-message.yaml +++ /dev/null @@ -1,34 +0,0 @@ -id: outlook-displaying-items-display-existing-message -name: Display existing message -description: Displays existing message in a separate window -host: OUTLOOK -api_set: {} -script: - content: | - // pre-populate with current item ID - $("#itemId").val(Office.context.mailbox.item.itemId); - - $("#run").click(function() { - var itemId = $("#itemId").val(); - Office.context.mailbox.displayMessageForm(itemId); - }); - language: typescript -template: - content: "
    \n\t\n\t\n
    \n\t" - language: html -style: - content: | - /* Your style goes here */ - 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/55-displaying-items/display-new-appointment.yaml b/samples/outlook/55-displaying-items/display-new-appointment.yaml index 9a2db8879..274a2d44f 100644 --- a/samples/outlook/55-displaying-items/display-new-appointment.yaml +++ b/samples/outlook/55-displaying-items/display-new-appointment.yaml @@ -1,6 +1,6 @@ id: outlook-displaying-items-display-new-appointment -name: Display new appointment form -description: Displays new appointment form +name: Create a new appointment +description: 'Opens a new appointment form with sample content and a few fields populated.' host: OUTLOOK api_set: {} script: @@ -27,13 +27,29 @@ script: language: typescript template: content: | +
    +

    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: | - /* Your style goes here */ + 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 @@ -46,4 +62,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/outlook/55-displaying-items/display-new-message.yaml b/samples/outlook/55-displaying-items/display-new-message.yaml index 1a5acfd37..a6e523a61 100644 --- a/samples/outlook/55-displaying-items/display-new-message.yaml +++ b/samples/outlook/55-displaying-items/display-new-message.yaml @@ -1,6 +1,6 @@ id: outlook-displaying-items-display-new-message -name: Display new message form, with an inline attachment -description: Displays new message form, with an inline attachment +name: Create a new message +description: 'Opens a new message form with a sample content, recipients, and an inline image attachment' host: OUTLOOK api_set: {} script: @@ -28,13 +28,29 @@ script: language: typescript template: 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: | - /* Your style goes here */ + 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 @@ -47,4 +63,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/outlook/55-displaying-items/display-reply-forms.yaml b/samples/outlook/55-displaying-items/display-reply-forms.yaml index ba4d8184c..d1e64c270 100644 --- a/samples/outlook/55-displaying-items/display-reply-forms.yaml +++ b/samples/outlook/55-displaying-items/display-reply-forms.yaml @@ -1,38 +1,61 @@ id: outlook-displaying-items-display-reply-forms -name: Display reply forms -description: Displays reply forms +name: Create replies +description: Opens reply and reply-all message forms with sample reply content. host: OUTLOOK api_set: {} script: - content: | - $("#displayReplyForm").click(function() { - Office.context.mailbox.item.displayReplyForm( - "This is a reply with some text in italics." - ); - }); + content: | + $("#displayReplyForm").click(function() { + Office.context.mailbox.item.displayReplyForm( + "This is a reply with some text in italics." + ); + }); - $("#displayReplyAllForm").click(function() { - Office.context.mailbox.item.displayReplyAllForm( - "This is a reply ALL with some text in bold." - ); - }); - language: typescript + $("#displayReplyAllForm").click(function() { + Office.context.mailbox.item.displayReplyAllForm( + "This is a reply ALL with some bold text." + ); + }); + language: typescript template: - content: "\n

    \n" - language: html + content: | +

    +

    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: | - /* Your style goes here */ - 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/1/hosted/office.js - @types/office-js + 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 + office-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 + 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 + jquery@3.1.1 + @types/jquery@3.3.1 diff --git a/samples/outlook/55-displaying-items/display-reply-with-attachments.yaml b/samples/outlook/55-displaying-items/display-reply-with-attachments.yaml index f4b70ecfc..3368dd927 100644 --- a/samples/outlook/55-displaying-items/display-reply-with-attachments.yaml +++ b/samples/outlook/55-displaying-items/display-reply-with-attachments.yaml @@ -1,6 +1,6 @@ id: outlook-displaying-items-display-reply-with-attachments -name: Display Reply form, with attachments -description: Displays Reply form, and adds attachments +name: 'Create a reply, with attachments' +description: Opens a reply message forms and adds sample attachments. host: OUTLOOK api_set: {} script: @@ -29,13 +29,29 @@ script: language: typescript template: content: | - +
    +

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

    +
    + +
    +

    Try it out

    + +
    language: html style: - content: | - /* Your style goes here */ + 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 @@ -48,4 +64,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/view/outlook.json b/view/outlook.json index 77011f3b3..fa555ca67 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -1,5 +1,12 @@ { "outlook-compose-basics-get-item-subject": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/01-compose-basics/get-item-subject.yaml", "outlook-compose-basics-get-selected-text": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/01-compose-basics/get-selected-text.yaml", - "outlook-compose-basics-set-selected-text": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/01-compose-basics/set-selected-text.yaml" + "outlook-compose-basics-set-selected-text": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/01-compose-basics/set-selected-text.yaml", + "outlook-roaming-settings-roaming-settings": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/10-roaming-settings/roaming-settings.yaml", + "outlook-displaying-items-display-existing-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-displaying-items/display-existing-appointment.yaml", + "outlook-displaying-items-display-existing-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-displaying-items/display-existing-message.yaml", + "outlook-displaying-items-display-new-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-displaying-items/display-new-appointment.yaml", + "outlook-displaying-items-display-new-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-displaying-items/display-new-message.yaml", + "outlook-displaying-items-display-reply-forms": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-displaying-items/display-reply-forms.yaml", + "outlook-displaying-items-display-reply-with-attachments": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-displaying-items/display-reply-with-attachments.yaml" } \ No newline at end of file From 2aae728a71795a7dda24a9645cdb81a12e2dfaca Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 21 Nov 2019 10:42:16 -0800 Subject: [PATCH 216/660] [Outlook] (message) Shows how to get from and to (#369) * [Outlook] (message) Shows how to get from and to * Undo change * tweak * tweak * Update get-from-message-compose.yaml * Update get-from-message-compose.yaml * Updates based on feedback --- playlists/outlook.yaml | 48 ++++++++++++-- .../get-from-message-compose.yaml | 61 ++++++++++++++++++ .../get-from-message-read.yaml | 55 ++++++++++++++++ .../get-to-message-compose.yaml | 64 +++++++++++++++++++ .../get-to-message-read.yaml | 58 +++++++++++++++++ view/outlook.json | 4 ++ 6 files changed, 283 insertions(+), 7 deletions(-) create mode 100644 samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml create mode 100644 samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml create mode 100644 samples/outlook/30-recipients-and-attendees/get-to-message-compose.yaml create mode 100644 samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 502a1f316..77094f23c 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -25,11 +25,47 @@ - id: outlook-roaming-settings-roaming-settings name: Using add-in settings fileName: roaming-settings.yaml - description: 'Gets, sets and saves add-in roaming settings' + description: 'Gets, sets, and saves add-in roaming settings' rawUrl: >- https://raw.githubusercontent.com////samples/outlook/10-roaming-settings/roaming-settings.yaml group: Roaming Settings api_set: {} +- 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////samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml + group: Recipients And Attendees + api_set: + Mailbox: '1.0' +- 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////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////samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml + group: Recipients And Attendees + api_set: + Mailbox: '1.0' +- id: outlook-recipients-and-attendees-get-to-message-compose + name: Get to (Message Compose) + fileName: get-to-message-compose.yaml + description: Gets the To line recipients of the message in Compose mode. + rawUrl: >- + https://raw.githubusercontent.com////samples/outlook/30-recipients-and-attendees/get-to-message-compose.yaml + group: Recipients And Attendees + api_set: + Mailbox: '1.0' - id: outlook-displaying-items-display-existing-appointment name: Open an appointment fileName: display-existing-appointment.yaml @@ -41,7 +77,7 @@ - id: outlook-displaying-items-display-existing-message name: Open a message fileName: display-existing-message.yaml - description: Displays existing message in a separate window + description: Displays an existing message in a separate window rawUrl: >- https://raw.githubusercontent.com////samples/outlook/55-displaying-items/display-existing-message.yaml group: Displaying Items @@ -49,9 +85,7 @@ - id: outlook-displaying-items-display-new-appointment name: Create a new appointment fileName: display-new-appointment.yaml - description: >- - Opens a new appointment form with a sample content, and a few fields - populated + description: Opens a new appointment form with sample content and a few fields populated. rawUrl: >- https://raw.githubusercontent.com////samples/outlook/55-displaying-items/display-new-appointment.yaml group: Displaying Items @@ -69,7 +103,7 @@ - id: outlook-displaying-items-display-reply-forms name: Create replies fileName: display-reply-forms.yaml - description: Opens a reply and reply-all message forms with a sample reply content + description: Opens reply and reply-all message forms with sample reply content. rawUrl: >- https://raw.githubusercontent.com////samples/outlook/55-displaying-items/display-reply-forms.yaml group: Displaying Items @@ -77,7 +111,7 @@ - id: outlook-displaying-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 message forms and adds sample attachments. rawUrl: >- https://raw.githubusercontent.com////samples/outlook/55-displaying-items/display-reply-with-attachments.yaml group: Displaying Items 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 new file mode 100644 index 000000000..daef2e171 --- /dev/null +++ b/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml @@ -0,0 +1,61 @@ +order: 2 +id: outlook-recipients-and-attendees-get-from-message-compose +name: Get from (Message Compose) +description: Gets who the message is from in Compose mode. +host: OUTLOOK +api_set: + Mailbox: '1.7' +script: + content: | + $("#get-from").click(getFrom); + + function getFrom() { + 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); + } + }); + } + language: typescript +template: + content: | +
    +

    This sample shows how to get who an email is from.

    +

    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/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/30-recipients-and-attendees/get-from-message-read.yaml b/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml new file mode 100644 index 000000000..bedfdc5df --- /dev/null +++ b/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml @@ -0,0 +1,55 @@ +order: 1 +id: outlook-recipients-and-attendees-get-from-message-read +name: Get from (Message Read) +description: Gets who the message is from in Read mode. +host: OUTLOOK +api_set: + Mailbox: '1.0' +script: + content: | + $("#get-from").click(getFrom); + + function getFrom() { + var msgFrom = Office.context.mailbox.item.from; + console.log("Message received from: " + msgFrom.displayName + " (" + msgFrom.emailAddress + ")"); + } + language: typescript +template: + content: |- +
    +

    This sample shows how to get who an email is from.

    +

    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/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/30-recipients-and-attendees/get-to-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-to-message-compose.yaml new file mode 100644 index 000000000..b0274ff91 --- /dev/null +++ b/samples/outlook/30-recipients-and-attendees/get-to-message-compose.yaml @@ -0,0 +1,64 @@ +order: 4 +id: outlook-recipients-and-attendees-get-to-message-compose +name: Get to (Message Compose) +description: Gets the To line recipients of the message in Compose mode. +host: OUTLOOK +api_set: + Mailbox: '1.0' +script: + content: | + $("#get-to").click(getTo); + + function getTo() { + 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); + } + }); + } + language: typescript +template: + content: |- +
    +

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

    +

    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/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/30-recipients-and-attendees/get-to-message-read.yaml b/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml new file mode 100644 index 000000000..39371528e --- /dev/null +++ b/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml @@ -0,0 +1,58 @@ +order: 3 +id: outlook-recipients-and-attendees-get-to-message-read +name: Get to (Message Read) +description: Gets the To line recipients of the message in Read mode. +host: OUTLOOK +api_set: + Mailbox: '1.0' +script: + content: | + $("#get-to").click(getTo); + + function getTo() { + var msgTo = Office.context.mailbox.item.to; + console.log("Message sent to:"); + for (var i = 0; i < msgTo.length; i++) { + console.log(msgTo[i].displayName + " (" + msgTo[i].emailAddress + ")"); + } + } + language: typescript +template: + content: |- +
    +

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

    +

    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/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/outlook.json b/view/outlook.json index fa555ca67..3265c82d0 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -3,6 +3,10 @@ "outlook-compose-basics-get-selected-text": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/01-compose-basics/get-selected-text.yaml", "outlook-compose-basics-set-selected-text": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/01-compose-basics/set-selected-text.yaml", "outlook-roaming-settings-roaming-settings": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/10-roaming-settings/roaming-settings.yaml", + "outlook-recipients-and-attendees-get-from-message-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml", + "outlook-recipients-and-attendees-get-from-message-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml", + "outlook-recipients-and-attendees-get-to-message-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml", + "outlook-recipients-and-attendees-get-to-message-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-to-message-compose.yaml", "outlook-displaying-items-display-existing-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-displaying-items/display-existing-appointment.yaml", "outlook-displaying-items-display-existing-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-displaying-items/display-existing-message.yaml", "outlook-displaying-items-display-new-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-displaying-items/display-new-appointment.yaml", From ac7c8ff30910db099ca726e30d92117ca66ada70 Mon Sep 17 00:00:00 2001 From: Oleg-O Date: Thu, 21 Nov 2019 15:46:00 -0800 Subject: [PATCH 217/660] Adds custom properties sample, and some feedback from last CR (#370) * renames group 55 and re-runs yarn to pick up group rename and CR commits * removing inline function usage to help documentation mapping * adds proper api sets for the snippets that are added so far * adds custom properties sample * Update samples/outlook/15-item-custom-properties/load-set-get-save.yaml Co-Authored-By: Elizabeth Samuel * Update samples/outlook/15-item-custom-properties/load-set-get-save.yaml Co-Authored-By: Elizabeth Samuel --- playlists/outlook.yaml | 57 +++++--- .../10-roaming-settings/roaming-settings.yaml | 23 ++-- .../load-set-get-save.yaml | 126 ++++++++++++++++++ .../display-existing-appointment.yaml | 9 +- .../display-existing-message.yaml | 9 +- .../display-new-appointment.yaml | 7 +- .../display-new-message.yaml | 3 +- .../display-reply-forms.yaml | 15 ++- .../display-reply-with-attachments.yaml | 3 +- view/outlook.json | 13 +- 10 files changed, 216 insertions(+), 49 deletions(-) create mode 100644 samples/outlook/15-item-custom-properties/load-set-get-save.yaml rename samples/outlook/{55-displaying-items => 55-display-items}/display-existing-appointment.yaml (94%) rename samples/outlook/{55-displaying-items => 55-display-items}/display-existing-message.yaml (94%) rename samples/outlook/{55-displaying-items => 55-display-items}/display-new-appointment.yaml (92%) rename samples/outlook/{55-displaying-items => 55-display-items}/display-new-message.yaml (98%) rename samples/outlook/{55-displaying-items => 55-display-items}/display-reply-forms.yaml (87%) rename samples/outlook/{55-displaying-items => 55-display-items}/display-reply-with-attachments.yaml (98%) diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 77094f23c..958f2a78d 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -29,7 +29,20 @@ rawUrl: >- https://raw.githubusercontent.com////samples/outlook/10-roaming-settings/roaming-settings.yaml group: Roaming Settings - api_set: {} + 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 were added by this add-in to 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////samples/outlook/15-item-custom-properties/load-set-get-save.yaml + group: Item Custom Properties + api_set: + Mailbox: '1.1' - id: outlook-recipients-and-attendees-get-from-message-read name: Get from (Message Read) fileName: get-from-message-read.yaml @@ -71,25 +84,28 @@ fileName: display-existing-appointment.yaml description: Displays existing appointment in a separate window rawUrl: >- - https://raw.githubusercontent.com////samples/outlook/55-displaying-items/display-existing-appointment.yaml - group: Displaying Items - api_set: {} + https://raw.githubusercontent.com////samples/outlook/55-display-items/display-existing-appointment.yaml + group: Display Items + api_set: + Mailbox: '1.1' - id: outlook-displaying-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////samples/outlook/55-displaying-items/display-existing-message.yaml - group: Displaying Items - api_set: {} + https://raw.githubusercontent.com////samples/outlook/55-display-items/display-existing-message.yaml + group: Display Items + api_set: + Mailbox: '1.1' - id: outlook-displaying-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////samples/outlook/55-displaying-items/display-new-appointment.yaml - group: Displaying Items - api_set: {} + https://raw.githubusercontent.com////samples/outlook/55-display-items/display-new-appointment.yaml + group: Display Items + api_set: + Mailbox: '1.1' - id: outlook-displaying-items-display-new-message name: Create a new message fileName: display-new-message.yaml @@ -97,22 +113,25 @@ Opens a new message form with a sample content, recipients, and an inline image attachment rawUrl: >- - https://raw.githubusercontent.com////samples/outlook/55-displaying-items/display-new-message.yaml - group: Displaying Items - api_set: {} + https://raw.githubusercontent.com////samples/outlook/55-display-items/display-new-message.yaml + group: Display Items + api_set: + Mailbox: '1.6' - id: outlook-displaying-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////samples/outlook/55-displaying-items/display-reply-forms.yaml - group: Displaying Items - api_set: {} + https://raw.githubusercontent.com////samples/outlook/55-display-items/display-reply-forms.yaml + group: Display Items + api_set: + Mailbox: '1.1' - id: outlook-displaying-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////samples/outlook/55-displaying-items/display-reply-with-attachments.yaml - group: Displaying Items - api_set: {} + https://raw.githubusercontent.com////samples/outlook/55-display-items/display-reply-with-attachments.yaml + group: Display Items + api_set: + Mailbox: '1.2' diff --git a/samples/outlook/10-roaming-settings/roaming-settings.yaml b/samples/outlook/10-roaming-settings/roaming-settings.yaml index 7634e7f0d..815af336d 100644 --- a/samples/outlook/10-roaming-settings/roaming-settings.yaml +++ b/samples/outlook/10-roaming-settings/roaming-settings.yaml @@ -2,24 +2,31 @@ id: outlook-roaming-settings-roaming-settings name: Using add-in settings description: 'Gets, sets, and saves add-in roaming settings' host: OUTLOOK -api_set: {} +api_set: + Mailbox: '1.1' script: content: | - $("#get").click(function() { + $("#get").click(get); + + function get() { var settingName = $("#settingName").val(); var settingValue = Office.context.roamingSettings.get(settingName); $("#settingValue").val(settingValue); console.log(`The value of setting "${settingName}" is "${settingValue}".`); - }); + } - $("#set").click(function() { + $("#set").click(set); + + function set() { var settingName = $("#settingName").val(); var settingValue = $("#settingValue").val(); Office.context.roamingSettings.set(settingName, settingValue); console.log(`Setting "${settingName}" set to value "${settingValue}".`); - }); + } - $("#save").click(function() { + $("#save").click(save); + + function save() { // Save settings in the mailbox to make it available in future sessions. Office.context.roamingSettings.saveAsync(function(result) { if (result.status !== Office.AsyncResultStatus.Succeeded) { @@ -28,7 +35,7 @@ script: console.log(`Settings saved with status: ${result.status}`); } }); - }); + } language: typescript template: content: | @@ -81,4 +88,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/15-item-custom-properties/load-set-get-save.yaml b/samples/outlook/15-item-custom-properties/load-set-get-save.yaml new file mode 100644 index 000000000..cdd91e459 --- /dev/null +++ b/samples/outlook/15-item-custom-properties/load-set-get-save.yaml @@ -0,0 +1,126 @@ +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.' +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + var customProps; + $("#load").click(load); + + function load() { + 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}`); + } + }); + } + + $("#get").click(get); + + function get() { + var propertyName = $("#propertyName").val(); + var propertyValue = customProps.get(propertyName); + $("#propertyValue").val(propertyValue); + console.log(`The value of custom property "${propertyName}" is "${propertyValue}".`); + } + + $("#set").click(set); + + function set() { + var propertyName = $("#propertyName").val(); + var propertyValue = $("#propertyValue").val(); + customProps.set(propertyName, propertyValue); + console.log(`Custom property "${propertyName}" set to value "${propertyValue}".`); + } + + $("#remove").click(remove); + + function remove() { + var propertyName = $("#propertyName").val(); + customProps.remove(propertyName); + console.log(`Custom property "${propertyName}" removed.`); + } + + $("#save").click(save); + + function save() { + customProps.saveAsync(function(result) { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`saveAsync failed with message ${result.error.message}`); + } else { + console.log(`Custom properties saved with status: ${result.status}`); + } + }); + } + language: typescript +template: + 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.

    +
    + +
    +

    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/55-displaying-items/display-existing-appointment.yaml b/samples/outlook/55-display-items/display-existing-appointment.yaml similarity index 94% rename from samples/outlook/55-displaying-items/display-existing-appointment.yaml rename to samples/outlook/55-display-items/display-existing-appointment.yaml index 22fe438f4..835182b7a 100644 --- a/samples/outlook/55-displaying-items/display-existing-appointment.yaml +++ b/samples/outlook/55-display-items/display-existing-appointment.yaml @@ -2,16 +2,19 @@ id: outlook-displaying-items-display-existing-appointment name: Open an appointment description: Displays existing appointment in a separate window host: OUTLOOK -api_set: {} +api_set: + Mailbox: '1.1' script: content: | // Pre-populate with current item ID. $("#itemId").val(Office.context.mailbox.item.itemId); - $("#run").click(function() { + $("#run").click(run); + + function run() { var itemId = $("#itemId").val(); Office.context.mailbox.displayAppointmentForm(itemId); - }); + } language: typescript template: content: | diff --git a/samples/outlook/55-displaying-items/display-existing-message.yaml b/samples/outlook/55-display-items/display-existing-message.yaml similarity index 94% rename from samples/outlook/55-displaying-items/display-existing-message.yaml rename to samples/outlook/55-display-items/display-existing-message.yaml index 381b76fee..3c3d8c642 100644 --- a/samples/outlook/55-displaying-items/display-existing-message.yaml +++ b/samples/outlook/55-display-items/display-existing-message.yaml @@ -2,16 +2,19 @@ id: outlook-displaying-items-display-existing-message name: Open a message description: Displays an existing message in a separate window host: OUTLOOK -api_set: {} +api_set: + Mailbox: '1.1' script: content: | // Pre-populate with current item ID. $("#itemId").val(Office.context.mailbox.item.itemId); - $("#run").click(function() { + $("#run").click(run); + + function run() { var itemId = $("#itemId").val(); Office.context.mailbox.displayMessageForm(itemId); - }); + } language: typescript template: content: | diff --git a/samples/outlook/55-displaying-items/display-new-appointment.yaml b/samples/outlook/55-display-items/display-new-appointment.yaml similarity index 92% rename from samples/outlook/55-displaying-items/display-new-appointment.yaml rename to samples/outlook/55-display-items/display-new-appointment.yaml index 274a2d44f..4f2de8bd2 100644 --- a/samples/outlook/55-displaying-items/display-new-appointment.yaml +++ b/samples/outlook/55-display-items/display-new-appointment.yaml @@ -1,8 +1,9 @@ id: outlook-displaying-items-display-new-appointment name: Create a new appointment -description: 'Opens a new appointment form with sample content and a few fields populated.' +description: Opens a new appointment form with sample content and a few fields populated. host: OUTLOOK -api_set: {} +api_set: + Mailbox: '1.1' script: content: | $("#run").click(run); @@ -62,4 +63,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/55-displaying-items/display-new-message.yaml b/samples/outlook/55-display-items/display-new-message.yaml similarity index 98% rename from samples/outlook/55-displaying-items/display-new-message.yaml rename to samples/outlook/55-display-items/display-new-message.yaml index a6e523a61..f02119a79 100644 --- a/samples/outlook/55-displaying-items/display-new-message.yaml +++ b/samples/outlook/55-display-items/display-new-message.yaml @@ -2,7 +2,8 @@ id: outlook-displaying-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' host: OUTLOOK -api_set: {} +api_set: + Mailbox: '1.6' script: content: | $("#run").click(run); diff --git a/samples/outlook/55-displaying-items/display-reply-forms.yaml b/samples/outlook/55-display-items/display-reply-forms.yaml similarity index 87% rename from samples/outlook/55-displaying-items/display-reply-forms.yaml rename to samples/outlook/55-display-items/display-reply-forms.yaml index d1e64c270..d6a1d4623 100644 --- a/samples/outlook/55-displaying-items/display-reply-forms.yaml +++ b/samples/outlook/55-display-items/display-reply-forms.yaml @@ -2,20 +2,25 @@ id: outlook-displaying-items-display-reply-forms name: Create replies description: Opens reply and reply-all message forms with sample reply content. host: OUTLOOK -api_set: {} +api_set: + Mailbox: '1.1' script: content: | - $("#displayReplyForm").click(function() { + $("#displayReplyForm").click(displayReplyForm); + + function displayReplyForm() { Office.context.mailbox.item.displayReplyForm( "This is a reply with some text in italics." ); - }); + } - $("#displayReplyAllForm").click(function() { + $("#displayReplyAllForm").click(displayReplyAllForm); + + function displayReplyAllForm() { Office.context.mailbox.item.displayReplyAllForm( "This is a reply ALL with some bold text." ); - }); + } language: typescript template: content: | diff --git a/samples/outlook/55-displaying-items/display-reply-with-attachments.yaml b/samples/outlook/55-display-items/display-reply-with-attachments.yaml similarity index 98% rename from samples/outlook/55-displaying-items/display-reply-with-attachments.yaml rename to samples/outlook/55-display-items/display-reply-with-attachments.yaml index 3368dd927..6bd1dee83 100644 --- a/samples/outlook/55-displaying-items/display-reply-with-attachments.yaml +++ b/samples/outlook/55-display-items/display-reply-with-attachments.yaml @@ -2,7 +2,8 @@ id: outlook-displaying-items-display-reply-with-attachments name: 'Create a reply, with attachments' description: Opens a reply message forms and adds sample attachments. host: OUTLOOK -api_set: {} +api_set: + Mailbox: '1.2' script: content: | $("#run").click(run); diff --git a/view/outlook.json b/view/outlook.json index 3265c82d0..e6c004fd1 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -3,14 +3,15 @@ "outlook-compose-basics-get-selected-text": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/01-compose-basics/get-selected-text.yaml", "outlook-compose-basics-set-selected-text": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/01-compose-basics/set-selected-text.yaml", "outlook-roaming-settings-roaming-settings": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/10-roaming-settings/roaming-settings.yaml", + "outlook-item-custom-properties-load-set-get-save": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/15-item-custom-properties/load-set-get-save.yaml", "outlook-recipients-and-attendees-get-from-message-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml", "outlook-recipients-and-attendees-get-from-message-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml", "outlook-recipients-and-attendees-get-to-message-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml", "outlook-recipients-and-attendees-get-to-message-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-to-message-compose.yaml", - "outlook-displaying-items-display-existing-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-displaying-items/display-existing-appointment.yaml", - "outlook-displaying-items-display-existing-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-displaying-items/display-existing-message.yaml", - "outlook-displaying-items-display-new-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-displaying-items/display-new-appointment.yaml", - "outlook-displaying-items-display-new-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-displaying-items/display-new-message.yaml", - "outlook-displaying-items-display-reply-forms": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-displaying-items/display-reply-forms.yaml", - "outlook-displaying-items-display-reply-with-attachments": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-displaying-items/display-reply-with-attachments.yaml" + "outlook-displaying-items-display-existing-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-existing-appointment.yaml", + "outlook-displaying-items-display-existing-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-existing-message.yaml", + "outlook-displaying-items-display-new-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-new-appointment.yaml", + "outlook-displaying-items-display-new-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-new-message.yaml", + "outlook-displaying-items-display-reply-forms": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-reply-forms.yaml", + "outlook-displaying-items-display-reply-with-attachments": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-reply-with-attachments.yaml" } \ No newline at end of file From c4c2f0f746c54588c0b32552ea512fe7a819dbf0 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 21 Nov 2019 17:56:24 -0800 Subject: [PATCH 218/660] [Outlook] (message) Shows how to get cc and bcc (#372) --- playlists/outlook.yaml | 47 +++++++++++--- .../get-bcc-message-compose.yaml | 64 +++++++++++++++++++ .../get-cc-message-compose.yaml | 64 +++++++++++++++++++ .../get-cc-message-read.yaml | 58 +++++++++++++++++ .../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 +- view/outlook.json | 15 +++-- 11 files changed, 238 insertions(+), 22 deletions(-) create mode 100644 samples/outlook/30-recipients-and-attendees/get-bcc-message-compose.yaml create mode 100644 samples/outlook/30-recipients-and-attendees/get-cc-message-compose.yaml create mode 100644 samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 958f2a78d..403f0f42e 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -32,12 +32,12 @@ api_set: Mailbox: '1.1' - id: outlook-item-custom-properties-load-set-get-save - name: work with item custom properties + name: Work with item custom properties fileName: load-set-get-save.yaml description: >- - Gets the custom properties that were added by this add-in to the current - item, sets a new one, gets it, removes it, and saves all custom properties - back to the item. + 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////samples/outlook/15-item-custom-properties/load-set-get-save.yaml group: Item Custom Properties @@ -79,7 +79,34 @@ group: Recipients And Attendees api_set: Mailbox: '1.0' -- id: outlook-displaying-items-display-existing-appointment +- 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////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-cc-message-compose + name: Get cc (Message Compose) + fileName: get-cc-message-compose.yaml + description: Gets the Cc line recipients of the message in Compose mode. + rawUrl: >- + https://raw.githubusercontent.com////samples/outlook/30-recipients-and-attendees/get-cc-message-compose.yaml + group: Recipients And Attendees + api_set: + Mailbox: '1.1' +- id: outlook-recipients-and-attendees-get-bcc-message-compose + name: Get bcc (Message Compose) + fileName: get-bcc-message-compose.yaml + description: Gets the Bcc line recipients of the message in Compose mode. + rawUrl: >- + https://raw.githubusercontent.com////samples/outlook/30-recipients-and-attendees/get-bcc-message-compose.yaml + group: Recipients And Attendees + api_set: + Mailbox: '1.1' +- id: outlook-display-items-display-existing-appointment name: Open an appointment fileName: display-existing-appointment.yaml description: Displays existing appointment in a separate window @@ -88,7 +115,7 @@ group: Display Items api_set: Mailbox: '1.1' -- id: outlook-displaying-items-display-existing-message +- 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 @@ -97,7 +124,7 @@ group: Display Items api_set: Mailbox: '1.1' -- id: outlook-displaying-items-display-new-appointment +- 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. @@ -106,7 +133,7 @@ group: Display Items api_set: Mailbox: '1.1' -- id: outlook-displaying-items-display-new-message +- id: outlook-display-items-display-new-message name: Create a new message fileName: display-new-message.yaml description: >- @@ -117,7 +144,7 @@ group: Display Items api_set: Mailbox: '1.6' -- id: outlook-displaying-items-display-reply-forms +- 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. @@ -126,7 +153,7 @@ group: Display Items api_set: Mailbox: '1.1' -- id: outlook-displaying-items-display-reply-with-attachments +- 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. diff --git a/samples/outlook/30-recipients-and-attendees/get-bcc-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-bcc-message-compose.yaml new file mode 100644 index 000000000..32dc53c61 --- /dev/null +++ b/samples/outlook/30-recipients-and-attendees/get-bcc-message-compose.yaml @@ -0,0 +1,64 @@ +order: 7 +id: outlook-recipients-and-attendees-get-bcc-message-compose +name: Get bcc (Message Compose) +description: Gets the Bcc line recipients of the message in Compose mode. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#get-bcc").click(getBcc); + + function getBcc() { + Office.context.mailbox.item.cc.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var msgBcc = asyncResult.value; + console.log("Message being bcc'd to:"); + for (var i = 0; i < msgBcc.length; i++) { + console.log(msgBcc[i].displayName + " (" + msgBcc[i].emailAddress + ")"); + } + } else { + console.error(asyncResult.error); + } + }); + } + language: typescript +template: + content: |- +
    +

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

    +

    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/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/30-recipients-and-attendees/get-cc-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-cc-message-compose.yaml new file mode 100644 index 000000000..759b8938b --- /dev/null +++ b/samples/outlook/30-recipients-and-attendees/get-cc-message-compose.yaml @@ -0,0 +1,64 @@ +order: 6 +id: outlook-recipients-and-attendees-get-cc-message-compose +name: Get cc (Message Compose) +description: Gets the Cc line recipients of the message in Compose mode. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#get-cc").click(getCc); + + function getCc() { + 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); + } + }); + } + language: typescript +template: + content: |- +
    +

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

    +

    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/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/30-recipients-and-attendees/get-cc-message-read.yaml b/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml new file mode 100644 index 000000000..03898b0c9 --- /dev/null +++ b/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml @@ -0,0 +1,58 @@ +order: 5 +id: outlook-recipients-and-attendees-get-cc-message-read +name: Get cc (Message Read) +description: Gets the Cc line recipients of the message in Read mode. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#get-cc").click(getCc); + + function getCc() { + var msgCc = Office.context.mailbox.item.cc; + console.log("Message copied to:"); + for (var i = 0; i < msgCc.length; i++) { + console.log(msgCc[i].displayName + " (" + msgCc[i].emailAddress + ")"); + } + } + language: typescript +template: + content: |- +
    +

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

    +

    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/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/55-display-items/display-existing-appointment.yaml b/samples/outlook/55-display-items/display-existing-appointment.yaml index 835182b7a..bb701ba6f 100644 --- a/samples/outlook/55-display-items/display-existing-appointment.yaml +++ b/samples/outlook/55-display-items/display-existing-appointment.yaml @@ -1,4 +1,4 @@ -id: outlook-displaying-items-display-existing-appointment +id: outlook-display-items-display-existing-appointment name: Open an appointment description: Displays existing appointment in a separate window host: OUTLOOK diff --git a/samples/outlook/55-display-items/display-existing-message.yaml b/samples/outlook/55-display-items/display-existing-message.yaml index 3c3d8c642..d2e4d5880 100644 --- a/samples/outlook/55-display-items/display-existing-message.yaml +++ b/samples/outlook/55-display-items/display-existing-message.yaml @@ -1,4 +1,4 @@ -id: outlook-displaying-items-display-existing-message +id: outlook-display-items-display-existing-message name: Open a message description: Displays an existing message in a separate window host: OUTLOOK diff --git a/samples/outlook/55-display-items/display-new-appointment.yaml b/samples/outlook/55-display-items/display-new-appointment.yaml index 4f2de8bd2..6ecdec49d 100644 --- a/samples/outlook/55-display-items/display-new-appointment.yaml +++ b/samples/outlook/55-display-items/display-new-appointment.yaml @@ -1,4 +1,4 @@ -id: outlook-displaying-items-display-new-appointment +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. host: OUTLOOK diff --git a/samples/outlook/55-display-items/display-new-message.yaml b/samples/outlook/55-display-items/display-new-message.yaml index f02119a79..e2455c12b 100644 --- a/samples/outlook/55-display-items/display-new-message.yaml +++ b/samples/outlook/55-display-items/display-new-message.yaml @@ -1,4 +1,4 @@ -id: outlook-displaying-items-display-new-message +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' host: OUTLOOK diff --git a/samples/outlook/55-display-items/display-reply-forms.yaml b/samples/outlook/55-display-items/display-reply-forms.yaml index d6a1d4623..b08949e11 100644 --- a/samples/outlook/55-display-items/display-reply-forms.yaml +++ b/samples/outlook/55-display-items/display-reply-forms.yaml @@ -1,4 +1,4 @@ -id: outlook-displaying-items-display-reply-forms +id: outlook-display-items-display-reply-forms name: Create replies description: Opens reply and reply-all message forms with sample reply content. host: OUTLOOK 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 6bd1dee83..fe0928fc2 100644 --- a/samples/outlook/55-display-items/display-reply-with-attachments.yaml +++ b/samples/outlook/55-display-items/display-reply-with-attachments.yaml @@ -1,4 +1,4 @@ -id: outlook-displaying-items-display-reply-with-attachments +id: outlook-display-items-display-reply-with-attachments name: 'Create a reply, with attachments' description: Opens a reply message forms and adds sample attachments. host: OUTLOOK diff --git a/view/outlook.json b/view/outlook.json index e6c004fd1..63d966d41 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -8,10 +8,13 @@ "outlook-recipients-and-attendees-get-from-message-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml", "outlook-recipients-and-attendees-get-to-message-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml", "outlook-recipients-and-attendees-get-to-message-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-to-message-compose.yaml", - "outlook-displaying-items-display-existing-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-existing-appointment.yaml", - "outlook-displaying-items-display-existing-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-existing-message.yaml", - "outlook-displaying-items-display-new-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-new-appointment.yaml", - "outlook-displaying-items-display-new-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-new-message.yaml", - "outlook-displaying-items-display-reply-forms": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-reply-forms.yaml", - "outlook-displaying-items-display-reply-with-attachments": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-reply-with-attachments.yaml" + "outlook-recipients-and-attendees-get-cc-message-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml", + "outlook-recipients-and-attendees-get-cc-message-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-cc-message-compose.yaml", + "outlook-recipients-and-attendees-get-bcc-message-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-bcc-message-compose.yaml", + "outlook-display-items-display-existing-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-existing-appointment.yaml", + "outlook-display-items-display-existing-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-existing-message.yaml", + "outlook-display-items-display-new-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-new-appointment.yaml", + "outlook-display-items-display-new-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-new-message.yaml", + "outlook-display-items-display-reply-forms": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-reply-forms.yaml", + "outlook-display-items-display-reply-with-attachments": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-reply-with-attachments.yaml" } \ No newline at end of file From a8e7569dee93737de7c1c97ac5f42a3434cfd6f5 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 21 Nov 2019 18:08:46 -0800 Subject: [PATCH 219/660] [Outlook] (Compose) Shows how to get and set selected data (#371) * [Outlook] (Compose) Shows how to get and set selected data * Apply suggestions from code review Co-Authored-By: Oleg-O --- playlists/outlook.yaml | 24 ++++++- .../20-item-body/get-selected-data.yaml | 63 +++++++++++++++++++ .../20-item-body/set-selected-data.yaml | 61 ++++++++++++++++++ .../get-from-message-read.yaml | 2 +- .../get-to-message-compose.yaml | 2 +- .../get-to-message-read.yaml | 2 +- view/outlook.json | 2 + 7 files changed, 150 insertions(+), 6 deletions(-) create mode 100644 samples/outlook/20-item-body/get-selected-data.yaml create mode 100644 samples/outlook/20-item-body/set-selected-data.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 403f0f42e..49a48e8c7 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -43,6 +43,24 @@ 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////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////samples/outlook/20-item-body/set-selected-data.yaml + group: Item Body + api_set: + Mailbox: '1.1' - id: outlook-recipients-and-attendees-get-from-message-read name: Get from (Message Read) fileName: get-from-message-read.yaml @@ -51,7 +69,7 @@ https://raw.githubusercontent.com////samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml group: Recipients And Attendees api_set: - Mailbox: '1.0' + Mailbox: '1.1' - id: outlook-recipients-and-attendees-get-from-message-compose name: Get from (Message Compose) fileName: get-from-message-compose.yaml @@ -69,7 +87,7 @@ https://raw.githubusercontent.com////samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml group: Recipients And Attendees api_set: - Mailbox: '1.0' + Mailbox: '1.1' - id: outlook-recipients-and-attendees-get-to-message-compose name: Get to (Message Compose) fileName: get-to-message-compose.yaml @@ -78,7 +96,7 @@ https://raw.githubusercontent.com////samples/outlook/30-recipients-and-attendees/get-to-message-compose.yaml group: Recipients And Attendees api_set: - Mailbox: '1.0' + Mailbox: '1.1' - id: outlook-recipients-and-attendees-get-cc-message-read name: Get cc (Message Read) fileName: get-cc-message-read.yaml diff --git a/samples/outlook/20-item-body/get-selected-data.yaml b/samples/outlook/20-item-body/get-selected-data.yaml new file mode 100644 index 000000000..d2721dd2c --- /dev/null +++ b/samples/outlook/20-item-body/get-selected-data.yaml @@ -0,0 +1,63 @@ +order: 1 +id: outlook-item-body-get-selected-data +name: Get selected text (Compose) +description: Gets the selected text in the item body or subject in Compose mode. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#get-selected-data").click(getSelectedData); + + 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; + console.log("Selected text in " + prop + ": " + text); + } else { + console.error(asyncResult.error); + } + }); + } + language: typescript +template: + content: |- +
    +

    This sample shows how to get 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 Get selected 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 diff --git a/samples/outlook/20-item-body/set-selected-data.yaml b/samples/outlook/20-item-body/set-selected-data.yaml new file mode 100644 index 000000000..4d8777681 --- /dev/null +++ b/samples/outlook/20-item-body/set-selected-data.yaml @@ -0,0 +1,61 @@ +order: 2 +id: outlook-item-body-set-selected-data +name: Set selected text (Compose) +description: Replaces the selected text in the item body or subject in Compose mode. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#set-selected-data").click(setSelectedData); + + function setSelectedData() { + 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); + } + }); + } + 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.

    + +
    + 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/30-recipients-and-attendees/get-from-message-read.yaml b/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml index bedfdc5df..e5ca36258 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 @@ -4,7 +4,7 @@ name: Get from (Message Read) description: Gets who the message is from in Read mode. host: OUTLOOK api_set: - Mailbox: '1.0' + Mailbox: '1.1' script: content: | $("#get-from").click(getFrom); diff --git a/samples/outlook/30-recipients-and-attendees/get-to-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-to-message-compose.yaml index b0274ff91..f1a38fe2a 100644 --- a/samples/outlook/30-recipients-and-attendees/get-to-message-compose.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-to-message-compose.yaml @@ -4,7 +4,7 @@ name: Get to (Message Compose) description: Gets the To line recipients of the message in Compose mode. host: OUTLOOK api_set: - Mailbox: '1.0' + Mailbox: '1.1' script: content: | $("#get-to").click(getTo); 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 39371528e..9983e8444 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 @@ -4,7 +4,7 @@ name: Get to (Message Read) description: Gets the To line recipients of the message in Read mode. host: OUTLOOK api_set: - Mailbox: '1.0' + Mailbox: '1.1' script: content: | $("#get-to").click(getTo); diff --git a/view/outlook.json b/view/outlook.json index 63d966d41..38b789801 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -4,6 +4,8 @@ "outlook-compose-basics-set-selected-text": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/01-compose-basics/set-selected-text.yaml", "outlook-roaming-settings-roaming-settings": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/10-roaming-settings/roaming-settings.yaml", "outlook-item-custom-properties-load-set-get-save": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/15-item-custom-properties/load-set-get-save.yaml", + "outlook-item-body-get-selected-data": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/20-item-body/get-selected-data.yaml", + "outlook-item-body-set-selected-data": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/20-item-body/set-selected-data.yaml", "outlook-recipients-and-attendees-get-from-message-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml", "outlook-recipients-and-attendees-get-from-message-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml", "outlook-recipients-and-attendees-get-to-message-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml", From 91a0fd8f38243cdde5ba63c38e5d3a4794ebfc89 Mon Sep 17 00:00:00 2001 From: Oleg-O Date: Fri, 22 Nov 2019 10:27:34 -0800 Subject: [PATCH 220/660] [Outlook] adding close/save item and notification messages samples (#373) * close/save item and notification messages samples * Update samples/outlook/35-notifications/add-getall-remove.yaml Co-Authored-By: Elizabeth Samuel --- playlists/outlook.yaml | 31 +++- .../10-roaming-settings/roaming-settings.yaml | 8 +- .../load-set-get-save.yaml | 15 +- .../outlook/25-item-save-and-close/close.yaml | 52 +++++++ .../outlook/25-item-save-and-close/save.yaml | 59 +++++++ .../35-notifications/add-getall-remove.yaml | 146 ++++++++++++++++++ .../55-display-items/display-reply-forms.yaml | 3 +- view/outlook.json | 3 + 8 files changed, 300 insertions(+), 17 deletions(-) create mode 100644 samples/outlook/25-item-save-and-close/close.yaml create mode 100644 samples/outlook/25-item-save-and-close/save.yaml create mode 100644 samples/outlook/35-notifications/add-getall-remove.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 49a48e8c7..ca4a32e62 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -23,7 +23,7 @@ group: Compose Basics api_set: {} - id: outlook-roaming-settings-roaming-settings - name: Using add-in settings + name: Use add-in settings fileName: roaming-settings.yaml description: 'Gets, sets, and saves add-in roaming settings' rawUrl: >- @@ -43,6 +43,24 @@ group: Item Custom Properties 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////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////samples/outlook/25-item-save-and-close/save.yaml + group: Item Save And Close + api_set: + Mailbox: '1.3' - id: outlook-item-body-get-selected-data name: Get selected text (Compose) fileName: get-selected-data.yaml @@ -124,6 +142,17 @@ group: Recipients And Attendees api_set: Mailbox: '1.1' +- 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, replaces, and + removes an individual notification message. + rawUrl: >- + https://raw.githubusercontent.com////samples/outlook/35-notifications/add-getall-remove.yaml + group: Notifications + api_set: + Mailbox: '1.3' - id: outlook-display-items-display-existing-appointment name: Open an appointment fileName: display-existing-appointment.yaml diff --git a/samples/outlook/10-roaming-settings/roaming-settings.yaml b/samples/outlook/10-roaming-settings/roaming-settings.yaml index 815af336d..c86dc2430 100644 --- a/samples/outlook/10-roaming-settings/roaming-settings.yaml +++ b/samples/outlook/10-roaming-settings/roaming-settings.yaml @@ -1,5 +1,5 @@ id: outlook-roaming-settings-roaming-settings -name: Using add-in settings +name: Use add-in settings description: 'Gets, sets, and saves add-in roaming settings' host: OUTLOOK api_set: @@ -7,6 +7,8 @@ api_set: script: content: | $("#get").click(get); + $("#set").click(set); + $("#save").click(save); function get() { var settingName = $("#settingName").val(); @@ -14,8 +16,6 @@ script: $("#settingValue").val(settingValue); console.log(`The value of setting "${settingName}" is "${settingValue}".`); } - - $("#set").click(set); function set() { var settingName = $("#settingName").val(); @@ -23,8 +23,6 @@ script: Office.context.roamingSettings.set(settingName, settingValue); console.log(`Setting "${settingName}" set to value "${settingValue}".`); } - - $("#save").click(save); function save() { // Save settings in the mailbox to make it available in future sessions. 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 cdd91e459..c24b37bdc 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 @@ -7,8 +7,13 @@ api_set: script: content: | var customProps; - $("#load").click(load); + $("#load").click(load); + $("#get").click(get); + $("#set").click(set); + $("#remove").click(remove); + $("#save").click(save); + function load() { Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { if (result.status === Office.AsyncResultStatus.Succeeded) { @@ -28,8 +33,6 @@ script: }); } - $("#get").click(get); - function get() { var propertyName = $("#propertyName").val(); var propertyValue = customProps.get(propertyName); @@ -37,8 +40,6 @@ script: console.log(`The value of custom property "${propertyName}" is "${propertyValue}".`); } - $("#set").click(set); - function set() { var propertyName = $("#propertyName").val(); var propertyValue = $("#propertyValue").val(); @@ -46,16 +47,12 @@ script: console.log(`Custom property "${propertyName}" set to value "${propertyValue}".`); } - $("#remove").click(remove); - function remove() { var propertyName = $("#propertyName").val(); customProps.remove(propertyName); console.log(`Custom property "${propertyName}" removed.`); } - $("#save").click(save); - function save() { customProps.saveAsync(function(result) { if (result.status !== Office.AsyncResultStatus.Succeeded) { diff --git a/samples/outlook/25-item-save-and-close/close.yaml b/samples/outlook/25-item-save-and-close/close.yaml new file mode 100644 index 000000000..54e6b9e3f --- /dev/null +++ b/samples/outlook/25-item-save-and-close/close.yaml @@ -0,0 +1,52 @@ +id: outlook-item-save-and-close-close +name: Close the item +description: Closes the item (compose mode) +host: OUTLOOK +api_set: + Mailbox: '1.3' +script: + content: | + $("#run").click(run); + + function run() { + Office.context.mailbox.item.close(); + } + language: typescript +template: + content: | +
    +

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

    +
    + +
    +

    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/25-item-save-and-close/save.yaml b/samples/outlook/25-item-save-and-close/save.yaml new file mode 100644 index 000000000..77d79ce17 --- /dev/null +++ b/samples/outlook/25-item-save-and-close/save.yaml @@ -0,0 +1,59 @@ +id: outlook-item-save-and-close-save +name: Save the item +description: Saves the item (compose mode) +host: OUTLOOK +api_set: + Mailbox: '1.3' +script: + content: | + $("#run").click(run); + + function run() { + 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}`); + } + }); + } + language: typescript +template: + content: | +
    +

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

    +
    + +
    +

    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/35-notifications/add-getall-remove.yaml b/samples/outlook/35-notifications/add-getall-remove.yaml new file mode 100644 index 000000000..53282fc55 --- /dev/null +++ b/samples/outlook/35-notifications/add-getall-remove.yaml @@ -0,0 +1,146 @@ +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.' +host: OUTLOOK +api_set: + Mailbox: '1.3' +script: + content: | + $("#addProgress").click(addProgress); + $("#addInformational").click(addInformational); + $("#addInformationalPersisted").click(addInformationalPersisted); + $("#addError").click(addError); + $("#getAll").click(getAll); + $("#replace").click(replace); + $("#remove").click(remove); + + function addProgress() { + var id = $("#nofiticationId").val(); + var details = + { + type: "progressIndicator", + message: "Progress indicator with id = " + id + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); + } + + function addInformational() { + var id = $("#nofiticationId").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); + } + + function addInformationalPersisted() { + var id = $("#nofiticationId").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); + } + + function addError() { + var id = $("#nofiticationId").val(); + var details = + { + type: "errorMessage", + message: "Error notification message with id = " + id + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); + } + + function getAll() { + Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); + } + + function replace() { + var id = $("#nofiticationId").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); + } + + function remove() { + var id = $("#nofiticationId").val(); + Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); + } + + function handleResult(result) { + console.log(result); + } + language: typescript +template: + content: | +
    +

    This sample shows how to add different kinds of notification messages, get all, replace, and remove an individual notification message.

    +
    + +
    +

    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/55-display-items/display-reply-forms.yaml b/samples/outlook/55-display-items/display-reply-forms.yaml index b08949e11..edbf493d0 100644 --- a/samples/outlook/55-display-items/display-reply-forms.yaml +++ b/samples/outlook/55-display-items/display-reply-forms.yaml @@ -7,6 +7,7 @@ api_set: script: content: | $("#displayReplyForm").click(displayReplyForm); + $("#displayReplyAllForm").click(displayReplyAllForm); function displayReplyForm() { Office.context.mailbox.item.displayReplyForm( @@ -14,8 +15,6 @@ script: ); } - $("#displayReplyAllForm").click(displayReplyAllForm); - function displayReplyAllForm() { Office.context.mailbox.item.displayReplyAllForm( "This is a reply ALL with some bold text." diff --git a/view/outlook.json b/view/outlook.json index 38b789801..4cbe3361f 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -4,6 +4,8 @@ "outlook-compose-basics-set-selected-text": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/01-compose-basics/set-selected-text.yaml", "outlook-roaming-settings-roaming-settings": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/10-roaming-settings/roaming-settings.yaml", "outlook-item-custom-properties-load-set-get-save": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/15-item-custom-properties/load-set-get-save.yaml", + "outlook-item-save-and-close-close": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/25-item-save-and-close/close.yaml", + "outlook-item-save-and-close-save": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/25-item-save-and-close/save.yaml", "outlook-item-body-get-selected-data": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/20-item-body/get-selected-data.yaml", "outlook-item-body-set-selected-data": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/20-item-body/set-selected-data.yaml", "outlook-recipients-and-attendees-get-from-message-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml", @@ -13,6 +15,7 @@ "outlook-recipients-and-attendees-get-cc-message-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml", "outlook-recipients-and-attendees-get-cc-message-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-cc-message-compose.yaml", "outlook-recipients-and-attendees-get-bcc-message-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-bcc-message-compose.yaml", + "outlook-notifications-add-getall-remove": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/35-notifications/add-getall-remove.yaml", "outlook-display-items-display-existing-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-existing-appointment.yaml", "outlook-display-items-display-existing-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-existing-message.yaml", "outlook-display-items-display-new-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-new-appointment.yaml", From 3fe7795f53a568647dfe71a9e8d03bf2a006f68a Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 22 Nov 2019 10:44:52 -0800 Subject: [PATCH 221/660] [Outlook] (appointment) Shows how to get organizer (#374) * [Outlook] (appointment) Shows how to get organizer * Update samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml Co-Authored-By: Oleg-O --- playlists/outlook.yaml | 56 +++++++++++------ .../get-organizer-appointment-attendee.yaml | 55 +++++++++++++++++ .../get-organizer-appointment-organizer.yaml | 61 +++++++++++++++++++ view/outlook.json | 6 +- 4 files changed, 157 insertions(+), 21 deletions(-) create mode 100644 samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml create mode 100644 samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index ca4a32e62..dcee2f328 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -43,24 +43,6 @@ group: Item Custom Properties 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////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////samples/outlook/25-item-save-and-close/save.yaml - group: Item Save And Close - api_set: - Mailbox: '1.3' - id: outlook-item-body-get-selected-data name: Get selected text (Compose) fileName: get-selected-data.yaml @@ -79,6 +61,24 @@ 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////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////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 @@ -142,11 +142,29 @@ 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////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////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, replaces, and + Adds different kinds of notification messages, gets all, and replaces and removes an individual notification message. rawUrl: >- https://raw.githubusercontent.com////samples/outlook/35-notifications/add-getall-remove.yaml 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 new file mode 100644 index 000000000..65634fdf1 --- /dev/null +++ b/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml @@ -0,0 +1,55 @@ +order: 8 +id: outlook-recipients-and-attendees-get-organizer-appointment-attendee +name: Get organizer (Appointment Attendee) +description: Gets the organizer in Appointment Attendee mode. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#get-organizer").click(getOrganizer); + + function getOrganizer() { + var apptOrganizer = Office.context.mailbox.item.organizer; + console.log("Organizer: " + apptOrganizer.displayName + " (" + apptOrganizer.emailAddress + ")"); + } + language: typescript +template: + content: |- +
    +

    This sample shows how to get the appointment organizer.

    +

    Required mode: Appointment 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 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 new file mode 100644 index 000000000..a53000b88 --- /dev/null +++ b/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml @@ -0,0 +1,61 @@ +order: 9 +id: outlook-recipients-and-attendees-get-organizer-appointment-organizer +name: Get organizer (Appointment Organizer) +description: Gets the organizer in Appointment Organizer mode. +host: OUTLOOK +api_set: + Mailbox: '1.7' +script: + content: | + $("#get-organizer").click(getOrganizer); + + function getOrganizer() { + 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); + } + }); + } + language: typescript +template: + content: |- +
    +

    This sample shows how to get the appointment organizer.

    +

    Required mode: Appointment Organizer

    +
    + +
    +

    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/outlook.json b/view/outlook.json index 4cbe3361f..802c34f2f 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -4,10 +4,10 @@ "outlook-compose-basics-set-selected-text": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/01-compose-basics/set-selected-text.yaml", "outlook-roaming-settings-roaming-settings": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/10-roaming-settings/roaming-settings.yaml", "outlook-item-custom-properties-load-set-get-save": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/15-item-custom-properties/load-set-get-save.yaml", - "outlook-item-save-and-close-close": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/25-item-save-and-close/close.yaml", - "outlook-item-save-and-close-save": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/25-item-save-and-close/save.yaml", "outlook-item-body-get-selected-data": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/20-item-body/get-selected-data.yaml", "outlook-item-body-set-selected-data": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/20-item-body/set-selected-data.yaml", + "outlook-item-save-and-close-close": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/25-item-save-and-close/close.yaml", + "outlook-item-save-and-close-save": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/25-item-save-and-close/save.yaml", "outlook-recipients-and-attendees-get-from-message-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml", "outlook-recipients-and-attendees-get-from-message-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml", "outlook-recipients-and-attendees-get-to-message-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml", @@ -15,6 +15,8 @@ "outlook-recipients-and-attendees-get-cc-message-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml", "outlook-recipients-and-attendees-get-cc-message-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-cc-message-compose.yaml", "outlook-recipients-and-attendees-get-bcc-message-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-bcc-message-compose.yaml", + "outlook-recipients-and-attendees-get-organizer-appointment-attendee": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml", + "outlook-recipients-and-attendees-get-organizer-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml", "outlook-notifications-add-getall-remove": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/35-notifications/add-getall-remove.yaml", "outlook-display-items-display-existing-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-existing-appointment.yaml", "outlook-display-items-display-existing-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-existing-message.yaml", From b1dd289a07191c6ca9d9f9c5f4b67cfb8d73294a Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 22 Nov 2019 11:22:24 -0800 Subject: [PATCH 222/660] [Outlook] (message) Shows how to get sender in Read mode (#375) * [Outlook] (message) Shows how to get sender in Read mode * Add tip to from --- playlists/outlook.yaml | 9 +++ .../get-from-message-read.yaml | 3 +- .../get-sender-message-read.yaml | 55 +++++++++++++++++++ view/outlook.json | 1 + 4 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index dcee2f328..7799a8b9e 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -160,6 +160,15 @@ group: Recipients And Attendees api_set: Mailbox: '1.7' +- 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////samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml + group: Recipients And Attendees + api_set: + Mailbox: '1.1' - id: outlook-notifications-add-getall-remove name: Work with notification messages fileName: add-getall-remove.yaml 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 e5ca36258..c5e7e1e79 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 @@ -17,7 +17,8 @@ script: template: content: |-
    -

    This sample shows how to get who an email is from.

    +

    This sample shows how to get who an email is from. In a delegate access scenario, the + from property represents the delegator. Tip: Use sender to get the delegate.

    Required mode: Message Read

    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 new file mode 100644 index 000000000..4496d3a72 --- /dev/null +++ b/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml @@ -0,0 +1,55 @@ +order: 10 +id: outlook-recipients-and-attendees-get-sender-message-read +name: Get sender (Message Read) +description: Gets the sender in Message Read mode. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#get-sender").click(getSender); + + function getSender() { + var msgSender = Office.context.mailbox.item.sender; + console.log("Sender: " + msgSender.displayName + " (" + msgSender.emailAddress + ")"); + } + language: typescript +template: + content: |- +
    +

    This sample shows how to get the email sender. In a delegate access scenario, the sender is the delegate. Tip: Use the from property to get the delegator.

    +

    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/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/outlook.json b/view/outlook.json index 802c34f2f..d1e5a1b4d 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -17,6 +17,7 @@ "outlook-recipients-and-attendees-get-bcc-message-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-bcc-message-compose.yaml", "outlook-recipients-and-attendees-get-organizer-appointment-attendee": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml", "outlook-recipients-and-attendees-get-organizer-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml", + "outlook-recipients-and-attendees-get-sender-message-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml", "outlook-notifications-add-getall-remove": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/35-notifications/add-getall-remove.yaml", "outlook-display-items-display-existing-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-existing-appointment.yaml", "outlook-display-items-display-existing-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-existing-message.yaml", From de850dd23936c0d5e608e0f760b1a5a5eab237b3 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 22 Nov 2019 13:07:33 -0800 Subject: [PATCH 223/660] =?UTF-8?q?[Outlook]=20(appointment)=20Shows=20how?= =?UTF-8?q?=20to=20get=20required=20and=20optional=20attend=E2=80=A6=20(#3?= =?UTF-8?q?76)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Outlook] (appointment) Shows how to get required and optional attendees in read mode * Add for Compose mode --- playlists/outlook.yaml | 56 ++++++++++++--- ...tional-attendees-appointment-attendee.yaml | 64 +++++++++++++++++ ...ional-attendees-appointment-organizer.yaml | 70 +++++++++++++++++++ .../get-organizer-appointment-attendee.yaml | 2 +- .../get-organizer-appointment-organizer.yaml | 2 +- ...quired-attendees-appointment-attendee.yaml | 64 +++++++++++++++++ ...uired-attendees-appointment-organizer.yaml | 70 +++++++++++++++++++ .../get-sender-message-read.yaml | 2 +- view/outlook.json | 6 +- 9 files changed, 323 insertions(+), 13 deletions(-) create mode 100644 samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml create mode 100644 samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-organizer.yaml create mode 100644 samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml create mode 100644 samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-organizer.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 7799a8b9e..7919a3171 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -142,6 +142,53 @@ 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////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////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-required-attendees-appointment-organizer + name: Get required attendees (Appointment Organizer) + fileName: get-required-attendees-appointment-organizer.yaml + description: Gets the required attendees in Appointment Organizer mode. + rawUrl: >- + https://raw.githubusercontent.com////samples/outlook/30-recipients-and-attendees/get-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////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-optional-attendees-appointment-organizer + name: Get optional attendees (Appointment Organizer) + fileName: get-optional-attendees-appointment-organizer.yaml + description: Gets the optional attendees in Appointment Organizer mode. + rawUrl: >- + https://raw.githubusercontent.com////samples/outlook/30-recipients-and-attendees/get-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 @@ -160,15 +207,6 @@ group: Recipients And Attendees api_set: Mailbox: '1.7' -- 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////samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml - group: Recipients And Attendees - api_set: - Mailbox: '1.1' - id: outlook-notifications-add-getall-remove name: Work with notification messages fileName: add-getall-remove.yaml 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 new file mode 100644 index 000000000..9ed1b3bdd --- /dev/null +++ b/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml @@ -0,0 +1,64 @@ +order: 11 +id: outlook-recipients-and-attendees-get-optional-attendees-appointment-attendee +name: Get optional attendees (Appointment Attendee) +description: Gets the optional attendees in Appointment Attendee mode. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#get-optional-attendees").click(getOptionalAttendees); + + function getOptionalAttendees() { + 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 + ); + } + } + language: typescript +template: + content: |- +
    +

    This sample shows how to get the optional attendees.

    +

    Required mode: Appointment 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/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-organizer.yaml b/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-organizer.yaml new file mode 100644 index 000000000..c72eb794a --- /dev/null +++ b/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-organizer.yaml @@ -0,0 +1,70 @@ +order: 12 +id: outlook-recipients-and-attendees-get-optional-attendees-appointment-organizer +name: Get optional attendees (Appointment Organizer) +description: Gets the optional attendees in Appointment Organizer mode. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#get-optional-attendees").click(getOptionalAttendees); + + 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++) { + console.log( + "Optional attendees: " + + apptOptionalAttendees[i].displayName + + " (" + + apptOptionalAttendees[i].emailAddress + + ") - response: " + + apptOptionalAttendees[i].appointmentResponse + ); + } + } else { + console.error(asyncResult.error); + } + }); + } + language: typescript +template: + content: |- +
    +

    This sample shows how to get the optional attendees.

    +

    Required mode: Appointment Organizer

    +
    + +
    +

    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/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml b/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml index 65634fdf1..9dca86116 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 @@ -1,4 +1,4 @@ -order: 8 +order: 13 id: outlook-recipients-and-attendees-get-organizer-appointment-attendee name: Get organizer (Appointment Attendee) description: Gets the organizer in Appointment Attendee mode. 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 a53000b88..89216644b 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 @@ -1,4 +1,4 @@ -order: 9 +order: 14 id: outlook-recipients-and-attendees-get-organizer-appointment-organizer name: Get organizer (Appointment Organizer) description: Gets the organizer in Appointment Organizer mode. 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 new file mode 100644 index 000000000..7b22ccbda --- /dev/null +++ b/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml @@ -0,0 +1,64 @@ +order: 9 +id: outlook-recipients-and-attendees-get-required-attendees-appointment-attendee +name: Get required attendees (Appointment Attendee) +description: Gets the required attendees in Appointment Attendee mode. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#get-required-attendees").click(getRequiredAttendees); + + function getRequiredAttendees() { + 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 + ); + } + } + language: typescript +template: + content: |- +
    +

    This sample shows how to get the required attendees.

    +

    Required mode: Appointment 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/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-organizer.yaml b/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-organizer.yaml new file mode 100644 index 000000000..6b6b262dd --- /dev/null +++ b/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-organizer.yaml @@ -0,0 +1,70 @@ +order: 10 +id: outlook-recipients-and-attendees-get-required-attendees-appointment-organizer +name: Get required attendees (Appointment Organizer) +description: Gets the required attendees in Appointment Organizer mode. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#get-required-attendees").click(getRequiredAttendees); + + 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++) { + console.log( + "Required attendees: " + + apptRequiredAttendees[i].displayName + + " (" + + apptRequiredAttendees[i].emailAddress + + ") - response: " + + apptRequiredAttendees[i].appointmentResponse + ); + } + } else { + console.error(asyncResult.error); + } + }); + } + language: typescript +template: + content: |- +
    +

    This sample shows how to get the required attendees.

    +

    Required mode: Appointment Organizer

    +
    + +
    +

    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/30-recipients-and-attendees/get-sender-message-read.yaml b/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml index 4496d3a72..be8c7922a 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 @@ -1,4 +1,4 @@ -order: 10 +order: 8 id: outlook-recipients-and-attendees-get-sender-message-read name: Get sender (Message Read) description: Gets the sender in Message Read mode. diff --git a/view/outlook.json b/view/outlook.json index d1e5a1b4d..18cbdcc0a 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -15,9 +15,13 @@ "outlook-recipients-and-attendees-get-cc-message-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml", "outlook-recipients-and-attendees-get-cc-message-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-cc-message-compose.yaml", "outlook-recipients-and-attendees-get-bcc-message-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-bcc-message-compose.yaml", + "outlook-recipients-and-attendees-get-sender-message-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml", + "outlook-recipients-and-attendees-get-required-attendees-appointment-attendee": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml", + "outlook-recipients-and-attendees-get-required-attendees-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-organizer.yaml", + "outlook-recipients-and-attendees-get-optional-attendees-appointment-attendee": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml", + "outlook-recipients-and-attendees-get-optional-attendees-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-organizer.yaml", "outlook-recipients-and-attendees-get-organizer-appointment-attendee": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml", "outlook-recipients-and-attendees-get-organizer-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml", - "outlook-recipients-and-attendees-get-sender-message-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml", "outlook-notifications-add-getall-remove": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/35-notifications/add-getall-remove.yaml", "outlook-display-items-display-existing-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-existing-appointment.yaml", "outlook-display-items-display-existing-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-existing-message.yaml", From 823c54d4246fe7c23a19270265093d69c265d094 Mon Sep 17 00:00:00 2001 From: Oleg-O Date: Fri, 22 Nov 2019 14:42:14 -0800 Subject: [PATCH 224/660] [Outlook] Adds "Tokens and service calls" samples (#377) * Adds "Tokens and service calls" samples * Apply suggestions from code review Co-Authored-By: Elizabeth Samuel * Apply suggestions from code review Co-Authored-By: Elizabeth Samuel --- .../basic-rest-cors.yaml | 66 +++++++++++++++++ .../ids-and-urls.yaml | 62 ++++++++++++++++ .../item-id-compose.yaml | 59 +++++++++++++++ .../make-ews-request-async.yaml | 70 ++++++++++++++++++ ...-message-using-make-ews-request-async.yaml | 73 +++++++++++++++++++ .../user-callback-token.yaml | 59 +++++++++++++++ .../user-identity-token.yaml | 59 +++++++++++++++ 7 files changed, 448 insertions(+) create mode 100644 samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml create mode 100644 samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml create mode 100644 samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml create mode 100644 samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml create mode 100644 samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml create mode 100644 samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml create mode 100644 samples/outlook/85-tokens-and-service-calls/user-identity-token.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 new file mode 100644 index 000000000..be42870f6 --- /dev/null +++ b/samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml @@ -0,0 +1,66 @@ +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").click(run); + + 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; + + var 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 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 new file mode 100644 index 000000000..c310ed7a5 --- /dev/null +++ b/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml @@ -0,0 +1,62 @@ +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.' +host: OUTLOOK +api_set: + Mailbox: '1.5' +script: + content: | + $("#run").click(run); + + function run() { + 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); + var 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); + console.log("EWS ID (from REST ID): " + ewsId2); + } + language: typescript +template: + content: | +
    +

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

    +
    + +
    +

    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/85-tokens-and-service-calls/item-id-compose.yaml b/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml new file mode 100644 index 000000000..ad0ec35f9 --- /dev/null +++ b/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml @@ -0,0 +1,59 @@ +order: 8 +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.' +host: OUTLOOK +api_set: + Mailbox: '1.8' +script: + content: | + $("#run").click(run); + + function run() { + 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); + } + }); + } + 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.

    +
    + +
    +

    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/make-ews-request-async.yaml b/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml new file mode 100644 index 000000000..99026b7df --- /dev/null +++ b/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml @@ -0,0 +1,70 @@ +order: 6 +id: outlook-tokens-and-service-calls-make-ews-request-async +name: Get a message using EWS +description: 'Gets a message using EWS without any back-end code.' +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#run").click(run); + + function run() { + var ewsId = Office.context.mailbox.item.itemId; + var request = '' + + ' ' + + ' ' + + ' ' + + ' ' + + ' IdOnly' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ''; + + Office.context.mailbox.makeEwsRequestAsync(request, function (result) { + console.log(result); + }); + } + language: typescript +template: + content: | +
    +

    This sample shows how to get a message using EWS, 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 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 new file mode 100644 index 000000000..63f19a6c4 --- /dev/null +++ b/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml @@ -0,0 +1,73 @@ +order: 7 +id: outlook-tokens-and-service-calls-send-message-using-make-ews-request-async +name: Send a message using EWS +description: 'Sends a message using EWS without any back-end code.' +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#run").click(run); + + function run() { + 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.makeEwsRequestAsync(request, function (result) { + console.log(result); + }); + } + language: typescript +template: + content: | +
    +

    This sample shows how to send a message using EWS, 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 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 new file mode 100644 index 000000000..4aa9a3f5b --- /dev/null +++ b/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml @@ -0,0 +1,59 @@ +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.' +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#run").click(run); + + function run() { + 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); + } + }); + } + 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.

    +
    + +
    +

    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/85-tokens-and-service-calls/user-identity-token.yaml b/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml new file mode 100644 index 000000000..c868b49bb --- /dev/null +++ b/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml @@ -0,0 +1,59 @@ +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.' +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#run").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); + } + }); + } + language: typescript +template: + content: | +
    +

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

    +
    + +
    +

    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 From 5a41d87dfc664a20dad6a2df20264991c304c0d5 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 22 Nov 2019 15:53:43 -0800 Subject: [PATCH 225/660] [Outlook] (recurrence) Shows how to get recurrence and seriesId (#378) * [Outlook] (recurrence) Shows how to get recurrence and seriesId * update * Apply suggestions from code review Co-Authored-By: Oleg-O --- .../get-recurrence-appointment-organizer.yaml | 65 +++++++++++++++++++ .../50-recurrence/get-recurrence-read.yaml | 62 ++++++++++++++++++ .../outlook/50-recurrence/get-series-id.yaml | 61 +++++++++++++++++ .../basic-rest-cors.yaml | 4 +- .../make-ews-request-async.yaml | 4 +- ...-message-using-make-ews-request-async.yaml | 4 +- .../user-callback-token.yaml | 4 +- .../user-identity-token.yaml | 4 +- 8 files changed, 198 insertions(+), 10 deletions(-) create mode 100644 samples/outlook/50-recurrence/get-recurrence-appointment-organizer.yaml create mode 100644 samples/outlook/50-recurrence/get-recurrence-read.yaml create mode 100644 samples/outlook/50-recurrence/get-series-id.yaml diff --git a/samples/outlook/50-recurrence/get-recurrence-appointment-organizer.yaml b/samples/outlook/50-recurrence/get-recurrence-appointment-organizer.yaml new file mode 100644 index 000000000..1c3aabcf7 --- /dev/null +++ b/samples/outlook/50-recurrence/get-recurrence-appointment-organizer.yaml @@ -0,0 +1,65 @@ +order: 3 +id: outlook-recurrence-get-recurrence-appointment-organizer +name: Get recurrence (Appointment Organizer) +description: Gets the recurrence pattern in Appointment Organizer mode. +host: OUTLOOK +api_set: + Mailbox: '1.7' +script: + content: | + $("#get-recurrence").click(getRecurrence); + + function getRecurrence() { + 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); + } + } else { + console.error(asyncResult.error); + } + }); + } + language: typescript +template: + content: |- +
    +

    This sample shows how to get the item's recurrence pattern, if any.

    +

    Required mode: Appointment Organizer

    +
    + +
    +

    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/50-recurrence/get-recurrence-read.yaml b/samples/outlook/50-recurrence/get-recurrence-read.yaml new file mode 100644 index 000000000..cb2e92534 --- /dev/null +++ b/samples/outlook/50-recurrence/get-recurrence-read.yaml @@ -0,0 +1,62 @@ +order: 2 +id: outlook-recurrence-get-recurrence-read +name: Get recurrence (Read) +description: Gets the recurrence pattern in Read mode. +host: OUTLOOK +api_set: + Mailbox: '1.7' +script: + content: | + $("#get-recurrence").click(getRecurrence); + + function getRecurrence() { + 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(recurrence); + } + } + language: typescript +template: + content: |- +
    +

    This sample shows how to get the item's recurrence pattern, if any.

    +

    Required mode: 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/50-recurrence/get-series-id.yaml b/samples/outlook/50-recurrence/get-series-id.yaml new file mode 100644 index 000000000..95e305d0f --- /dev/null +++ b/samples/outlook/50-recurrence/get-series-id.yaml @@ -0,0 +1,61 @@ +order: 1 +id: outlook-recurrence-get-series-id +name: Get the series ID +description: Gets the series ID. +host: OUTLOOK +api_set: + Mailbox: '1.7' +script: + content: | + $("#get-series-id").click(getSeriesId); + + function getSeriesId() { + 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); + } + } + language: typescript +template: + content: |- +
    +

    This sample shows how to get the item's series ID, if any.

    +
    + +
    +

    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/85-tokens-and-service-calls/basic-rest-cors.yaml b/samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml index be42870f6..ceb798d6e 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 @@ -1,7 +1,7 @@ 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.' +description: Gets a message using REST without any back-end code. host: OUTLOOK api_set: Mailbox: '1.5' @@ -63,4 +63,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/85-tokens-and-service-calls/make-ews-request-async.yaml b/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml index 99026b7df..06c761dc9 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,7 +1,7 @@ order: 6 id: outlook-tokens-and-service-calls-make-ews-request-async name: Get a message using EWS -description: 'Gets a message using EWS without any back-end code.' +description: Gets a message using EWS without any back-end code. host: OUTLOOK api_set: Mailbox: '1.1' @@ -67,4 +67,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/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 63f19a6c4..c9f6f9468 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,7 +1,7 @@ order: 7 id: outlook-tokens-and-service-calls-send-message-using-make-ews-request-async name: Send a message using EWS -description: 'Sends a message using EWS without any back-end code.' +description: Sends a message using EWS without any back-end code. host: OUTLOOK api_set: Mailbox: '1.1' @@ -70,4 +70,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/85-tokens-and-service-calls/user-callback-token.yaml b/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml index 4aa9a3f5b..cec954b38 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,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 use for calling outlook services from add-in''s backend service.' +description: Gets a callback token to use for calling outlook services from add-in's backend service. host: OUTLOOK api_set: Mailbox: '1.1' @@ -56,4 +56,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/85-tokens-and-service-calls/user-identity-token.yaml b/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml index c868b49bb..e974bfb1e 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 in authentication flows. host: OUTLOOK api_set: Mailbox: '1.1' @@ -56,4 +56,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 From 70f3a03a6b63c2f32c81e271e059d3323a909bc4 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 25 Nov 2019 07:36:49 -0800 Subject: [PATCH 226/660] [Outlook] (categories) Shows how to get item categories and mailbox master categories (#379) --- .../outlook/45-categories/get-categories.yaml | 64 +++++++++++++++++++ .../45-categories/get-master-categories.yaml | 64 +++++++++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 samples/outlook/45-categories/get-categories.yaml create mode 100644 samples/outlook/45-categories/get-master-categories.yaml diff --git a/samples/outlook/45-categories/get-categories.yaml b/samples/outlook/45-categories/get-categories.yaml new file mode 100644 index 000000000..277399308 --- /dev/null +++ b/samples/outlook/45-categories/get-categories.yaml @@ -0,0 +1,64 @@ +order: 1 +id: outlook-categories-get-categories +name: Get categories +description: Gets the categories assigned to the item. +host: OUTLOOK +api_set: + Mailbox: '1.8' +script: + content: | + $("#get-categories").click(getCategories); + + function getCategories() { + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var categories = asyncResult.value; + if (categories) { + console.log(categories); + } else { + console.log("There are no categories."); + } + } else { + console.error(asyncResult.error); + } + }); + } + language: typescript +template: + content: |- +
    +

    This sample shows how to get the categories assigned to the item.

    +
    + +
    +

    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/45-categories/get-master-categories.yaml b/samples/outlook/45-categories/get-master-categories.yaml new file mode 100644 index 000000000..0d652a583 --- /dev/null +++ b/samples/outlook/45-categories/get-master-categories.yaml @@ -0,0 +1,64 @@ +order: 2 +id: outlook-categories-get-master-categories +name: Get categories master list +description: Gets the categories master list for the mailbox. +host: OUTLOOK +api_set: + Mailbox: '1.8' +script: + content: | + $("#get-master-categories").click(getMasterCategories); + + function getMasterCategories() { + Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var categories = asyncResult.value; + if (categories) { + console.log(categories); + } else { + console.log("There are no categories in the master list."); + } + } else { + console.error(asyncResult.error); + } + }); + } + language: typescript +template: + content: |- +
    +

    This sample shows how to get the master categories for the mailbox.

    +
    + +
    +

    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 From 4b4ba5d79de5e9970a4bfce1344abd1772ab34d1 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 25 Nov 2019 09:33:52 -0800 Subject: [PATCH 227/660] Refresh outlook yaml and json (#380) --- playlists/outlook.yaml | 112 +++++++++++++++++++++++++++++++++++++++++ view/outlook.json | 14 +++++- 2 files changed, 125 insertions(+), 1 deletion(-) diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 7919a3171..500e065a5 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -218,6 +218,51 @@ group: Notifications api_set: Mailbox: '1.3' +- id: outlook-categories-get-categories + name: Get categories + fileName: get-categories.yaml + description: Gets the categories assigned to the item. + rawUrl: >- + https://raw.githubusercontent.com////samples/outlook/45-categories/get-categories.yaml + group: Categories + api_set: + Mailbox: '1.8' +- id: outlook-categories-get-master-categories + name: Get categories master list + fileName: get-master-categories.yaml + description: Gets the categories master list for the mailbox. + rawUrl: >- + https://raw.githubusercontent.com////samples/outlook/45-categories/get-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////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 in Read mode. + rawUrl: >- + https://raw.githubusercontent.com////samples/outlook/50-recurrence/get-recurrence-read.yaml + group: Recurrence + api_set: + Mailbox: '1.7' +- id: outlook-recurrence-get-recurrence-appointment-organizer + name: Get recurrence (Appointment Organizer) + fileName: get-recurrence-appointment-organizer.yaml + description: Gets the recurrence pattern in Appointment Organizer mode. + rawUrl: >- + https://raw.githubusercontent.com////samples/outlook/50-recurrence/get-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 @@ -274,3 +319,70 @@ group: Display Items api_set: Mailbox: '1.2' +- 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////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////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////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////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////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////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////samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml + group: Tokens And Service Calls + api_set: + Mailbox: '1.8' diff --git a/view/outlook.json b/view/outlook.json index 18cbdcc0a..e218b71f2 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -23,10 +23,22 @@ "outlook-recipients-and-attendees-get-organizer-appointment-attendee": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml", "outlook-recipients-and-attendees-get-organizer-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml", "outlook-notifications-add-getall-remove": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/35-notifications/add-getall-remove.yaml", + "outlook-categories-get-categories": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/45-categories/get-categories.yaml", + "outlook-categories-get-master-categories": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/45-categories/get-master-categories.yaml", + "outlook-recurrence-get-series-id": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/50-recurrence/get-series-id.yaml", + "outlook-recurrence-get-recurrence-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/50-recurrence/get-recurrence-read.yaml", + "outlook-recurrence-get-recurrence-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/50-recurrence/get-recurrence-appointment-organizer.yaml", "outlook-display-items-display-existing-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-existing-appointment.yaml", "outlook-display-items-display-existing-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-existing-message.yaml", "outlook-display-items-display-new-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-new-appointment.yaml", "outlook-display-items-display-new-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-new-message.yaml", "outlook-display-items-display-reply-forms": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-reply-forms.yaml", - "outlook-display-items-display-reply-with-attachments": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-reply-with-attachments.yaml" + "outlook-display-items-display-reply-with-attachments": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-reply-with-attachments.yaml", + "outlook-tokens-and-service-calls-ids-and-urls": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml", + "outlook-tokens-and-service-calls-user-identity-token": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml", + "outlook-tokens-and-service-calls-user-callback-token": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml", + "outlook-tokens-and-service-calls-basic-rest-cors": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml", + "outlook-tokens-and-service-calls-make-ews-request-async": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml" } \ No newline at end of file From a6d68133b7058daf894bcec21ef81beea594b821 Mon Sep 17 00:00:00 2001 From: Oleg-O Date: Mon, 25 Nov 2019 14:10:04 -0800 Subject: [PATCH 228/660] [Outlook] Adds attachment samples (#381) attachment samples --- .../40-attachments/attachments-compose.yaml | 145 ++++++++++++++++++ .../get-attachment-content.yaml | 86 +++++++++++ .../40-attachments/get-attachments-read.yaml | 54 +++++++ 3 files changed, 285 insertions(+) create mode 100644 samples/outlook/40-attachments/attachments-compose.yaml create mode 100644 samples/outlook/40-attachments/get-attachment-content.yaml create mode 100644 samples/outlook/40-attachments/get-attachments-read.yaml diff --git a/samples/outlook/40-attachments/attachments-compose.yaml b/samples/outlook/40-attachments/attachments-compose.yaml new file mode 100644 index 000000000..1ba54c00e --- /dev/null +++ b/samples/outlook/40-attachments/attachments-compose.yaml @@ -0,0 +1,145 @@ +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.' +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#add").click(add); + $("#addItemAttachment").click(addItemAttachment); + $("#addBase64").click(addBase64); + $("#get").click(get); + $("#remove").click(remove); + + function add() { + var attachmentUrl = $("#attachmentUrl").val(); + Office.context.mailbox.item.addFileAttachmentAsync( + attachmentUrl, + getFileName(attachmentUrl), + { "asyncContext" : { var1: 1, var2: true } }, + function(result) { console.log(result); }); + } + + function addItemAttachment() { + var attachmentItemId = $("#attachmentItemId").val(); + Office.context.mailbox.item.addItemAttachmentAsync( + attachmentItemId, + "My attachment", + { "asyncContext" : { var3: 3, var4: false } }, + function(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); }); + } + + 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 (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."); + } + } + }); + } + + 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.`); + } + } + ); + } + + function getFileName(url) { + var lastIndex = url.lastIndexOf('/'); + if (lastIndex >= 0) { + return url.substring(lastIndex + 1); + } + return url; + } + language: typescript +template: + content: | +
    +

    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

    +
    + + +
    + +
    + + +
    + + + +
    + + +
    + +
    + 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/get-attachment-content.yaml b/samples/outlook/40-attachments/get-attachment-content.yaml new file mode 100644 index 000000000..6ecee8e46 --- /dev/null +++ b/samples/outlook/40-attachments/get-attachment-content.yaml @@ -0,0 +1,86 @@ +id: outlook-attachments-get-attachment-content +name: Get attachment content +description: Gets the attachment content. +host: OUTLOOK +api_set: + Mailbox: '1.8' +script: + content: | + $("#run").click(run); + + function run() { + var item = Office.context.mailbox.item; + var options = {asyncContext: {currentItem: item}}; + item.getAttachmentsAsync(options, callback); + + 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. + } + } + } + language: typescript +template: + content: | +
    +

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

    +
    + +
    +

    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/get-attachments-read.yaml b/samples/outlook/40-attachments/get-attachments-read.yaml new file mode 100644 index 000000000..7b9fd8efc --- /dev/null +++ b/samples/outlook/40-attachments/get-attachments-read.yaml @@ -0,0 +1,54 @@ +id: outlook-attachments-get-attachments-read +name: Get attachments (Item Read) +description: Gets the attachments of a message or an appointment in Read mode. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#run").click(run); + + function run() { + var attachments = Office.context.mailbox.item.attachments; + console.log(attachments); + } + language: typescript +template: + content: | +
    +

    This sample shows how to get the attachments of a message or an appointment in Read mode.

    +

    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 \ No newline at end of file From 392eda7230f5fe5e01e1d2c8518fc546ff5d6d3f Mon Sep 17 00:00:00 2001 From: Oleg-O Date: Mon, 9 Dec 2019 14:03:36 -0800 Subject: [PATCH 229/660] [Outlook] adds shared properties sample (#383) [Outlook] adds shared properties sample --- playlists/outlook.yaml | 40 +++++++ .../get-shared-properties.yaml | 105 ++++++++++++++++++ view/outlook.json | 4 + 3 files changed, 149 insertions(+) create mode 100644 samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 500e065a5..743cf1bcf 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -218,6 +218,35 @@ 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////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////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////samples/outlook/40-attachments/get-attachments-read.yaml + group: Attachments + api_set: + Mailbox: '1.1' - id: outlook-categories-get-categories name: Get categories fileName: get-categories.yaml @@ -319,6 +348,17 @@ group: Display Items api_set: Mailbox: '1.2' +- 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////samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml + group: Delegates And Shared Folders + api_set: + Mailbox: '1.8' - 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/65-delegates-and-shared-folders/get-shared-properties.yaml b/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml new file mode 100644 index 000000000..7c74c65a9 --- /dev/null +++ b/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml @@ -0,0 +1,105 @@ +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.' +host: OUTLOOK +api_set: + Mailbox: '1.8' +script: + content: | + $("#get").click(get); + $("#run").click(run); + + function get() { + if (!Office.context.mailbox.item.getSharedPropertiesAsync) { + console.error("Try this sample on a message from a shared folder."); + return; + } + + Office.context.mailbox.item.getSharedPropertiesAsync(function(result) { + console.log(result.value); + }); + } + + function run() { + 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 can do the expected operation, e.g., do they have Write permission? + 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); + }); + } + } + ); + } + }); + } + language: typescript +template: + content: | +
    +

    This sample shows how to perform an operation as delegate.

    +
    + +
    +

    Try it out on a message from a shared folder.

    + + +
    + 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/outlook.json b/view/outlook.json index e218b71f2..11c98b233 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -23,6 +23,9 @@ "outlook-recipients-and-attendees-get-organizer-appointment-attendee": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml", "outlook-recipients-and-attendees-get-organizer-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml", "outlook-notifications-add-getall-remove": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/35-notifications/add-getall-remove.yaml", + "outlook-attachments-attachments-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/40-attachments/attachments-compose.yaml", + "outlook-attachments-get-attachment-content": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/40-attachments/get-attachment-content.yaml", + "outlook-attachments-get-attachments-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/40-attachments/get-attachments-read.yaml", "outlook-categories-get-categories": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/45-categories/get-categories.yaml", "outlook-categories-get-master-categories": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/45-categories/get-master-categories.yaml", "outlook-recurrence-get-series-id": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/50-recurrence/get-series-id.yaml", @@ -34,6 +37,7 @@ "outlook-display-items-display-new-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-new-message.yaml", "outlook-display-items-display-reply-forms": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-reply-forms.yaml", "outlook-display-items-display-reply-with-attachments": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-reply-with-attachments.yaml", + "outlook-delegates-and-shared-folders-get-shared-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml", "outlook-tokens-and-service-calls-ids-and-urls": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml", "outlook-tokens-and-service-calls-user-identity-token": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml", "outlook-tokens-and-service-calls-user-callback-token": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml", From 4bb5531c18324dd30c0dbe01e912bd6d2b2489b5 Mon Sep 17 00:00:00 2001 From: Oleg-O Date: Mon, 16 Dec 2019 10:54:40 -0800 Subject: [PATCH 230/660] [Outlook] adds entites and regex samples (#385) * [Outlook] adds entites and regex samples * Apply suggestions from code review Co-Authored-By: Elizabeth Samuel --- playlists/outlook.yaml | 29 +++++ .../basic-entities.yaml | 101 +++++++++++++++ .../contextual.yaml | 83 ++++++++++++ .../selected.yaml | 118 ++++++++++++++++++ view/outlook.json | 3 + 5 files changed, 334 insertions(+) create mode 100644 samples/outlook/75-entities-and-regex-matches/basic-entities.yaml create mode 100644 samples/outlook/75-entities-and-regex-matches/contextual.yaml create mode 100644 samples/outlook/75-entities-and-regex-matches/selected.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 743cf1bcf..dc6dd01c1 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -359,6 +359,35 @@ group: Delegates And Shared Folders 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////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////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////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 diff --git a/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml b/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml new file mode 100644 index 000000000..609b69f79 --- /dev/null +++ b/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml @@ -0,0 +1,101 @@ +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").click(getEntities); + $("#getEntitiesByType").click(getEntitiesByType); + + function getEntities() { + var entities = Office.context.mailbox.item.getEntities(); + 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.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 new file mode 100644 index 000000000..a09b89214 --- /dev/null +++ b/samples/outlook/75-entities-and-regex-matches/contextual.yaml @@ -0,0 +1,83 @@ +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").click(getFilteredEntitiesByName); + $("#getRegExMatches").click(getRegExMatches); + $("#getRegExMatchesByName").click(getRegExMatchesByName); + + function getFilteredEntitiesByName() { + // This API would only work when you click on highlighted "1 Microsoft Way, Redmond, WA 98052" text. + console.log(Office.context.mailbox.item.getFilteredEntitiesByName("sampleFilterName")); + } + + function getRegExMatches() { + // This API would only work when you click on highlighted word "please". + console.log(Office.context.mailbox.item.getRegExMatches()); + } + + function getRegExMatchesByName() { + // This API would only work when you click on highlighted word "please". + 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. + // + // + // + // + // + // + // + language: typescript +template: + content: | +
    +

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

    +

    Required mode: Item Read, 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 new file mode 100644 index 000000000..19a88dbd0 --- /dev/null +++ b/samples/outlook/75-entities-and-regex-matches/selected.yaml @@ -0,0 +1,118 @@ +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").click(getSelectedEntities); + $("#getSelectedRegExMatches").click(getSelectedRegExMatches); + + function getSelectedEntities() { + 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++; + } + 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() { + 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."); + } + } + + // 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. + // + // + // + // + // + // + // + language: typescript +template: + content: | +
    +

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

    +

    Required mode: Item Read

    +
    + +
    +

    Try it out while running this 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/view/outlook.json b/view/outlook.json index 11c98b233..e67576062 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -38,6 +38,9 @@ "outlook-display-items-display-reply-forms": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-reply-forms.yaml", "outlook-display-items-display-reply-with-attachments": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-reply-with-attachments.yaml", "outlook-delegates-and-shared-folders-get-shared-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml", + "outlook-entities-and-regex-matches-basic-entities": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml", + "outlook-entities-and-regex-matches-contextual": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/75-entities-and-regex-matches/contextual.yaml", + "outlook-entities-and-regex-matches-selected": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/75-entities-and-regex-matches/selected.yaml", "outlook-tokens-and-service-calls-ids-and-urls": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml", "outlook-tokens-and-service-calls-user-identity-token": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml", "outlook-tokens-and-service-calls-user-callback-token": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml", From 292e6dae8fc212a7dc2681261023fa20247ef37f Mon Sep 17 00:00:00 2001 From: Oleg-O Date: Tue, 17 Dec 2019 16:06:37 -0800 Subject: [PATCH 231/660] minor correction in comments (#386) * minor correction in comments * Update samples/outlook/75-entities-and-regex-matches/contextual.yaml Co-Authored-By: Elizabeth Samuel --- .../outlook/75-entities-and-regex-matches/contextual.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/samples/outlook/75-entities-and-regex-matches/contextual.yaml b/samples/outlook/75-entities-and-regex-matches/contextual.yaml index a09b89214..3e30783aa 100644 --- a/samples/outlook/75-entities-and-regex-matches/contextual.yaml +++ b/samples/outlook/75-entities-and-regex-matches/contextual.yaml @@ -11,17 +11,17 @@ script: $("#getRegExMatchesByName").click(getRegExMatchesByName); function getFilteredEntitiesByName() { - // This API would only work when you click on highlighted "1 Microsoft Way, Redmond, WA 98052" text. + // 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 "please". + // 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 "please". + // This API would only work when you click on highlighted word "ScriptLab". console.log(Office.context.mailbox.item.getRegExMatchesByName("sampleRegexName")); } From 0dd83d71886ca40d888aaf459350954eea327f2d Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 19 Dec 2019 15:34:04 -0800 Subject: [PATCH 232/660] [excel] (Range) Adding a Range.moveTo example (#387) * Adding a Range.moveTo example * Feedback --- playlists/excel.yaml | 4 +- samples/excel/42-range/range-copyfrom.yaml | 48 ++++++++++++++------- snippet-extractor-metadata/excel.xlsx | Bin 21499 -> 21556 bytes snippet-extractor-output/snippets.yaml | 15 ++++++- 4 files changed, 47 insertions(+), 20 deletions(-) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 8f70d5f9f..175111ee4 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -436,12 +436,12 @@ - id: excel-range-copyfrom name: Copy and paste ranges fileName: range-copyfrom.yaml - description: Copies data and formatting from one range to another. + description: Copies or moves data and formatting from one range to another. rawUrl: >- https://raw.githubusercontent.com////samples/excel/42-range/range-copyfrom.yaml group: Range api_set: - ExcelApi: '1.9' + ExcelApi: '1.10' - id: excel-range-areas name: Discontiguous ranges (RangeAreas) and special cells fileName: range-areas.yaml diff --git a/samples/excel/42-range/range-copyfrom.yaml b/samples/excel/42-range/range-copyfrom.yaml index 4bba125b2..fee1d352d 100644 --- a/samples/excel/42-range/range-copyfrom.yaml +++ b/samples/excel/42-range/range-copyfrom.yaml @@ -1,10 +1,10 @@ order: 2 id: excel-range-copyfrom name: Copy and paste ranges -description: Copies data and formatting from one range to another. +description: Copies or moves data and formatting from one range to another. host: EXCEL api_set: - ExcelApi: '1.9' + ExcelApi: '1.10' script: content: | $("#setup").click(() => tryCatch(setup)); @@ -13,8 +13,9 @@ script: $("#copyFormulaResult").click(() => tryCatch(copyFormulaResult)); $("#copySingleAcrossRange").click(() => tryCatch(copySingleAcrossRange)); $("#copyOnlyFormat").click(() => tryCatch(copyOnlyFormat)); - $("#transpose").click(() => tryCatch(transpose)); $("#skipBlanks").click(() => tryCatch(skipBlanks)); + $("#transpose").click(() => tryCatch(transpose)); + $("#move").click(() => tryCatch(move)); async function copyAll() { await Excel.run(async (context) => { @@ -22,7 +23,7 @@ script: sheet.getRange("F1").values = [["Copied Range"]]; sheet.getRange("F1").format.autofitColumns(); - // copy a range starting at a single cell destination + // Copy a range starting at a single cell destination. sheet.getRange("G1").copyFrom("A1:E1"); await context.sync(); }); @@ -34,8 +35,8 @@ script: sheet.getRange("F2").values = [["Copied Formula"]]; sheet.getRange("F2").format.autofitColumns(); - // copy a range preserving the formulas - // note: non-formula values are copied over as is + // 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(); }); @@ -47,7 +48,7 @@ script: sheet.getRange("F3").values = [["Copied Formula Result"]]; sheet.getRange("F3").format.autofitColumns(); - // copy the resulting value of a formula + // Copy the resulting value of a formula. sheet.getRange("G3").copyFrom("E1", Excel.RangeCopyType.values); await context.sync(); }); @@ -59,7 +60,7 @@ script: sheet.getRange("F4").values = [["Single Source"]]; sheet.getRange("F4").format.autofitColumns(); - // copy a single cell across an entire range + // Copy a single cell across an entire range. sheet.getRange("G4:K4").copyFrom("A1", Excel.RangeCopyType.values); await context.sync(); }); @@ -71,7 +72,7 @@ script: sheet.getRange("F5").values = [["Copied Formatting"]]; sheet.getRange("F5").format.autofitColumns(); - // copy only the formatting of the cells + // Copy only the formatting of the cells. sheet.getRange("G5").copyFrom("A1:E1", Excel.RangeCopyType.formats); await context.sync(); }); @@ -83,10 +84,10 @@ script: sheet.getRange("F6").values = [["Copied Without Blanks"]]; sheet.getRange("F6").format.autofitColumns(); - // fill the destination range so we can see the blank being skipped + // Fill the destination range so we can see the blank being skipped. sheet.getRange("G6:K6").values = [["Old Data", "Old Data", "Old Data", "Old Data", "Old Data"]] - // copy a range, omitting the blank cells so existing data is not overwritten in those cells + // Copy a range, omitting the blank cells so existing data is not overwritten in those cells. sheet.getRange("G6").copyFrom("A1:E1", Excel.RangeCopyType.all, true, // skipBlanks @@ -101,7 +102,7 @@ script: sheet.getRange("F7").values = [["Transpose"]]; sheet.getRange("F7").format.autofitColumns(); - // transpose a horizontal range of data into a vertical range + // Transpose a horizontal range of data into a vertical range. sheet.getRange("G7").copyFrom("A1:E1", Excel.RangeCopyType.all, false, // skipBlanks @@ -110,12 +111,23 @@ script: }); } + async function move() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + sheet.getRange("F12").values = [["Moved Range"]]; + sheet.getRange("F12").format.autofitColumns(); + + // Move a range to the specified location. + sheet.getRange("A1:E1").moveTo("G12"); + 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 sheet = context.workbook.worksheets.getItem("Sample"); + const sheet = context.workbook.worksheets.add("Sample"); sheet.getRange("A1:D1").values = [["3", "5", "7", ""]]; sheet.getRange("A1:D1").format.font.italic = true; sheet.getRange("A1:D1").format.font.color = "DarkMagenta"; @@ -142,7 +154,7 @@ script: template: content: |-
    -

    This sample shows how to copy data and formatting from one range to another.

    +

    This sample shows how to copy data and formatting from one range (A1:E1) to another.

    Setup

    @@ -179,7 +191,11 @@ template: -
    +

    + +

    +

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

    + + + +
    jizikv{!u;q| zg8g*bocE2xA2aP)Rq+VAIo#N3Nq%q}ywN_La)+wTvx=4q?Iy4dL~ITYkPB%nv1X0U z;2_8WO9#oz_ywtdxxXw{;xq43@qd_$YFpqYwL=Y=Ae8W0BIAaDFi*@Q)%I8ewX{Rt z_Hniirqd(FBrOb%XHiVaDW?w+tS2I=YX(R(nG>%eS_i#N} zly60;7a=%3U(K(!n|edh2U*hVlfFKyxoT5PMu^0YK8nwNk}uR2gai9*N2VOx6KUY_ zHnlqKObD8aFl(Jb9HB;ZJyj+P*E%;Ma$B!A;cV!!`dwIsh2t&tY{1$bFBb2|hG;{+ zaf~Gy`yI_qrZ3%Cj=)-ufAOV-H+SMbna+MmJy7kyn_>se;VQUlIsTC$ig)3SpR!I@ zma5xzvTWtW6>n+fU-wH45fX$WkTYvel=46112%H+K!RlZgB!9*Y4p&Z1-P3n92vpI zn)Evt4G8?Jj7v4AM1hzG(ASi%t4)B64RQ#N=9k#wN|&%U5jok^9D{J0hcJ>t#$w4D zTN&{C=)F_gvx??gP&wT_LGyQ*y)w=UHayB)#uUePq0E1W-=(CvKB9ry)?4?FbDkqC zp-gGuMhFtb%LeKepWh@@P?JI!CyY^(Ll7pMQS*aPeq>u}LA5+Gm?p`!NDjfe9=!=v z;4Do@B#}+F*rR~CD|&x*;1wPc+F{tTdsbH-PpxatX4)%&E<|o|HjD7wX{_;n4??t- z5aIpW%lQ+xkY8HB%;7h(sgji-jBA?T<=IgBiQP1Ce=7op+B$e$)w)dd3uY`>j@7^1QzBF8{vpY~MX*%X3eD zeLZ-3f3|7fbjXfA-Sv2MY~-S%!CdK&#UH+-7&&rz?G%=xGnqTNJ9rBVV!_@V#+gM0u0HXy-K1s4>l zyY9N%gaNvg|AdRlS%Di$;ZfkoY99mN@E;OvE}M?XWbmf`q`9O22_e1O*4@<&BP~0` zTH;$DHfU12NjAM|XwbAUlHjrN_htR~akGa z?cE<@cpd$PRvFcDvJ;!iS3Qfre%?*ZB~&+*6*s%@58hWF-aAw`x`k~w zyM^=7u6Ofz6!KTg7l7*ycOc80DmH~ewGySa^}h?2jSHIhF8Qwt4D+p}$DqDrOI^bf zjS1c|gHvEziJ`1M&Wp@aC7VV7lPtmXapQHR2V9HD&zvL=23bm1_l1-5HH{=z-QUzO zDoj$~7N%hRW7+0NskG^HYMGE9ao51(x5VV|c_0o;!2JRW=H0#~@v}lwFfi&yZb~vm=j1S-^;w%hDfdPiSL+?H@G9*tsN9vG_S@Mz^{8oHc@5QE-I+UC`L}jFy~}9Ms~uD!r$8zd~_Ia z5QaLQWO>pL1)G(xn4q25o+EUhpi5r&#)KgDo%D`}$~mPWk8$QaDu2?Wz+1n0)LKov zU0y?>v#UdBIP^6BTjKG z+Fe0d$|^-JRcp<&6ZP1#p#k6aY-03^4iLq}ehB&8{Bpq?8exbJ;~VJreY@F)E5_7g z6Y&?^yx@CX)d%(41?9!tu+XE=acnrW$GNK4mGvx#QutM<%5~fC@#pNfw zKov3n0q}2C3!;99<+_lC{P`(3F!45+zuU4PG{8sC4=PpONJ~IgA39dLJobhYvS9r8 z&S+#U+Kj5aQr~clGPh>h3zDf%VNwQ=`5@)}aTnU&1yo{M6CTZlgguw$s~Lq|N0jd$ zm}8P7+;rk&oqi{~-B(8}eV+W#_f(|X?zV}a&KCGo-UV#52(7YPw#V4M2`=Vie(|`F9FFe4dql1Yo7Gg^kvFg%yAnPxsO-Utv7!i&u*(Hq3NYQY^fO# zDt+J~zP@MQ;5bRs#0C}wP`8l|&-%}^Q8q1cfx}6ZBzSupB?Z^C>k8s17#L!|c|_s! z!Q{~S2AYNFV(7nqW6xy!Gf3siy)hHv1yyXp1`5frx3V=0L--Qm814W$2yxpOdZy9m zZA2SKVINi4uuYnBSMw;}aH%6~b&zDr7OWgG7DHcJ+@f*JJx&q)yY^of(MQC`RlR`3 zV6`(Z@!8!GG*dD~p$q5GpIy+^!BzXBr#? zq-G<(*JNNXFwSAt-`h3r=uZoiGFvu9@1NmN^)H&{4*B~>AyrPp`iZ^sJO2_^&VJa{ zvJjSr9oA@NTM0vSv7(qs!NEu`=0DPg0SVa^es}ER*d*4R1U{RePZQ>F%ytn(!NZ*6 zo0?Uzk@U1kPfjY9P)Yd9cobF>ZbFRIPChEEdz#nZjJVmW1O;eF+YXu?b$Z|4a+tEbpAOCH1HvChSADpZ1lX*NtspR?;enG`!#ICm4%=`EAcH=;j87dy=<=6gqY5NG3 z6RLLOio{YN5#a)Z%&YiZQmRGJy<2JHse3M_q<&k7RX{Zv%8N?X8oag;=!>rjK^Zw5 zl-bo$C90t5udl+HLt&V6{VYS3^1p51^o{Wl4)r5!W27$|GFl{|(bHH=C4>;pW!qQw zEgW6lp6+HT>*cOhQJl(2?xz>hmlWi!DcwcJV}3MCuHo$s02P2VK1TDNTgR~UskPM+ zS3nz`KR8u|{NF1qNMEm^K@*d+?Hk77jxCAq3L#j;$W*)cZ);vZ&xVidEXJ%1bgSLU z{UFG8{GFKmDuiY$!p^JsKoGvXMI&n_Uk9`g)6wD((d+~CD%seX(dx(klq}E8^L2Wi z;ihV2PP4YbZ3=8J_mzJ@*k25j)UmK2P)0DVcm|{$$@B_?@A;B|pc?;^&=MTb)s-yV z?=Vp@u5atEZaH9%6#pkk(=~E&Nfi(LM7-@OY{bBFj@rh-vzA-0={lVt+}6OMU@_knB%bt@J>Bp^!Svq3S%PgJlY$9p~fSQ9aCINT3WoX}4{y8RC3gz}tOO9Qn_I{=k zl^h>)2~TKblnTQ7ghj0r7b?Fc;=16eWN7RUG3EcbESOM_qZi{J$0S)xkfsxkl5(s? zvP|C+ilwCm%DQ+LVO%TVJ^o?EUh68I`C)~3HxxaC=$!Cv3S$fOCi)PY{~G0mXjSEr zdO_A9CCwX+2kKmmk)IeIEHqck62XTp4aKwEyHQcOffp^u^my?%&e6_0J=X3K7L4ur zZ21EGFDq>L^eWb$G~2WIjb}9fkE*&0w#}Jie?!I zPr-uN;q`%n34a#YPUh4bRpeg^BQDV*+Uep#kcGhC1^Ga8I??NAr25}0sQ)qG<2wCF z+9`{m$k4TbZUI*fr$~5uRoK|{#&-CO3MmuX2YnOEGtgM%G}58DL=nvo4AAso){|+6 zWL#-NpN!eYQln`+fEr3IP}s9})JX-B%!<`Bk1X|yGIHoxcZ*SNY3uYP#1NiWly)-hc0<@e zKJ#xtF1f&BDSZY=B&<>HZhE^t7xyBBy%SF>Du@ zDZY?iSzhHpttzm=;fo&tzb}YN~+j8;sy!}qEA9UQa^Yq;<1Xe`Q zHi$`yv_C_Jz_lfi&w8|nsuk(YtoTXUMpZ794(E=RzMf@hYD6+EUYSmHd}=Yt@0}Vi z@n{sj_ojURopz551fL^*&5Tr5O{jdU7!x=0eUGks4~`bXpjsB|30jO^o_~Pb0)dyl zK8Td;>s3Y|9pD<4)2*(U&3C$s-|DYd0Z9FbKS}wAMic7p4nK=UabQFMMbB01B_F^W zCW*vk;F@7xQ7KZXbKf+ue{Ar<`z~i_z>Dvl^ za0sc$`6OEZBYPT_h&AC}rgZn#aY_}d;zx)gl0Wyp5;JMnr*LC2dU0VMxeKyPHRx{O z_lj59wR*qo*u2R_O4XO4gKLTIEt*xv`V2^zH6ZsCs(t=58bt8@PgrQRF7Y1^L?RY# zgkEY&`T)VVfdPO886~XO_q0e8X-WCk-Z>Qp z?LV(F2BnUokH}zA3WB4U+`2=x0dyL5n(ZYh7X!DD9Ez^buYmdv5px*m)FGz*1R4n{ zkmD*Jb_d?yPx7M%Un2?C0+GnS!4+sd-{$&heg9HX&0y4GGQ_&s{u^&%vo0^o+N(KI z@WHe^=u8`ajTv@^?{cyaia$kP?`7Yr17^jtonGY>!~|^lz+K<46{rKZD1!(p%gNK@YMq<87Mnm}xSui)q=ef~XiF>|s*0W?rIN zQRkl!1Zf|a?136lSoJ&F$bH$9TE^^6}|FHUnbv7Dh`tJ6(<9 zRxTySHmxM6XWt^O@}FUFK4~@TjQI8QT>Tp0i)0reLUimW2K zLuU>)=VHV})yKPPX$*^cf}VIoQ>Ano{DztP73&TelFowMQCZ56HXGG2SU7l6 zYLadEB4?p11*CngUx;_)-c#tV?GTyEnOPa3(~0o{dKw@JWXQ?glPThJi+);tDI`w4 zj^?wzRSv_uP6znT;r+Bnh`^>JFK^-|hkv2_3(zYD)(x_kj#*H6ZSB_If`)wk#Id@+ zi&tBtGd6ikVa2M}!36PDF>fa4j@PC4A=5TEcTH@kTYCVn4#D=-0$B9?nICQ21DDP( z?z%c-yR;6<+jTo)Q1C2-u~><}%1Ul2LlC6QZv>{>9q8<*K3PabTFEy&!Zu8)mm zBQg)rb33ewP4xqX0-*nGW@SY-RC9mbSC67jcUbr6`iM-cCNR&^;9GJn5_!MAA_M?n0|@|N0N^3a98Hz$#lGV~fK-(F*s+5*72eR~Hk+%U zpwsQCZM@}vX{41WO)xRu z4&99kI(_~CVHLGo@*g;}c2JjpdYW8{{LSNCbSGKJ=Lwlox_Ui1E+pY*R7keIXyhO{^d@G6YRaV-BmQ|;>JZD*bkpn^mE zf8C>hoc+&QWB=zReS-)~s8NxFZ2Fo|tAdq)t||yYmmsgI3@Ix1-+@vw{DcuzMo4M# zge-A}1X4A0;{V9p>OZ=xVgBPs{qMCRp1>x7n_%>>=>Oh}|6Oz_l@O^W3}KfrswNE0 WC=UQ61j=J2kgB7@$|(J(?!N%-G4|R3 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 8260c6bac..0410b6166 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -2096,8 +2096,8 @@ sheet.getRange("F2").values = [["Copied Formula"]]; sheet.getRange("F2").format.autofitColumns(); - // copy a range preserving the formulas - // note: non-formula values are copied over as is + // 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(); }); @@ -3678,6 +3678,17 @@ console.log("The worksheet click handler is registered."); + await context.sync(); + }); +'Excel.Range#moveTo:member(1)': + - |- + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + sheet.getRange("F12").values = [["Moved Range"]]; + sheet.getRange("F12").format.autofitColumns(); + + // Move a range to the specified location. + sheet.getRange("A1:E1").moveTo("G12"); await context.sync(); }); 'Word.Body#search:member(1)': From d73f1e4b7140606f19c4e3b2501d28d58892d980 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 10 Feb 2020 12:23:30 -0800 Subject: [PATCH 233/660] [Outlook] Add mapping spreadsheet (#390) --- .../get-bcc-message-compose.yaml | 2 +- snippet-extractor-metadata/outlook.xlsx | Bin 0 -> 16963 bytes snippet-extractor-output/snippets.yaml | 1926 +++++++++++++++++ 3 files changed, 1927 insertions(+), 1 deletion(-) create mode 100644 snippet-extractor-metadata/outlook.xlsx diff --git a/samples/outlook/30-recipients-and-attendees/get-bcc-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-bcc-message-compose.yaml index 32dc53c61..58bbe1251 100644 --- a/samples/outlook/30-recipients-and-attendees/get-bcc-message-compose.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-bcc-message-compose.yaml @@ -10,7 +10,7 @@ script: $("#get-bcc").click(getBcc); function getBcc() { - Office.context.mailbox.item.cc.getAsync(function(asyncResult) { + Office.context.mailbox.item.bcc.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var msgBcc = asyncResult.value; console.log("Message being bcc'd to:"); diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..81d110c687eee9229e0e9829107f0e831bce6c55 GIT binary patch literal 16963 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 S|BQ9e03V?MfLQ*YpZ*6XTX28? literal 0 HcmV?d00001 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 0410b6166..045fa427d 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -3691,6 +3691,1932 @@ sheet.getRange("A1:E1").moveTo("G12"); await context.sync(); }); +'Outlook.RoamingSettings#get: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}".`); +'Outlook.RoamingSettings#set:member(1)': + - |- + var settingName = $("#settingName").val(); + var settingValue = $("#settingValue").val(); + Office.context.roamingSettings.set(settingName, settingValue); + console.log(`Setting "${settingName}" set to value "${settingValue}".`); +'Outlook.RoamingSettings#saveAsync:member(1)': + - |- + // 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}`); + } + }); +'Outlook.CustomProperties#get:member(1)': + - >- + var propertyName = $("#propertyName").val(); + + var propertyValue = customProps.get(propertyName); + + $("#propertyValue").val(propertyValue); + + console.log(`The value of custom property "${propertyName}" is + "${propertyValue}".`); +'Outlook.CustomProperties#set:member(1)': + - >- + var propertyName = $("#propertyName").val(); + + var propertyValue = $("#propertyValue").val(); + + customProps.set(propertyName, propertyValue); + + console.log(`Custom property "${propertyName}" set to value + "${propertyValue}".`); +'Outlook.CustomProperties#remove:member(1)': + - |- + var propertyName = $("#propertyName").val(); + customProps.remove(propertyName); + console.log(`Custom property "${propertyName}" removed.`); +'Outlook.AppointmentCompose#loadCustomPropertiesAsync:member(1)': + - |- + 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}`); + } + }); +'Outlook.AppointmentRead#loadCustomPropertiesAsync:member(1)': + - |- + 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}`); + } + }); +'Outlook.MessageCompose#loadCustomPropertiesAsync:member(1)': + - |- + 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}`); + } + }); +'Outlook.MessageRead#loadCustomPropertiesAsync:member(1)': + - |- + 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}`); + } + }); +'Outlook.AppointmentCompose#getSelectedDataAsync:member(2)': + - >- + 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); + } + }); +'Outlook.MessageCompose#getSelectedDataAsync:member(2)': + - >- + 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); + } + }); +'Outlook.AppointmentCompose#setSelectedDataAsync:member(2)': + - >- + 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); + } + }); +'Outlook.MessageCompose#setSelectedDataAsync:member(2)': + - >- + 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); + } + }); +'Outlook.AppointmentCompose#close:member(1)': + - Office.context.mailbox.item.close(); +'Outlook.MessageCompose#close:member(1)': + - Office.context.mailbox.item.close(); +'Outlook.AppointmentCompose#saveAsync:member(1)': + - |- + 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}`); + } + }); +'Outlook.MessageCompose#bcc:member': + - |- + Office.context.mailbox.item.bcc.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var msgBcc = asyncResult.value; + console.log("Message being bcc'd to:"); + for (var i = 0; i < msgBcc.length; i++) { + console.log(msgBcc[i].displayName + " (" + msgBcc[i].emailAddress + ")"); + } + } else { + console.error(asyncResult.error); + } + }); +'Outlook.Recipients#getAsync:member(2)': + - |- + Office.context.mailbox.item.bcc.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var msgBcc = asyncResult.value; + console.log("Message being bcc'd to:"); + for (var i = 0; i < msgBcc.length; i++) { + console.log(msgBcc[i].displayName + " (" + msgBcc[i].emailAddress + ")"); + } + } else { + console.error(asyncResult.error); + } + }); + - |- + 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); + } + }); + - >- + 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); + } + }); + - >- + 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); + } + }); + - |- + 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); + } + }); +'Outlook.MessageCompose#cc:member': + - |- + 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); + } + }); +'Outlook.MessageRead#cc:member': + - |- + var msgCc = Office.context.mailbox.item.cc; + console.log("Message copied to:"); + for (var i = 0; i < msgCc.length; i++) { + console.log(msgCc[i].displayName + " (" + msgCc[i].emailAddress + ")"); + } +'Outlook.MessageCompose#from:member': + - |- + 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); + } + }); +'Outlook.From#getAsync:member(2)': + - |- + 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); + } + }); +'Outlook.MessageRead#from:member': + - >- + var msgFrom = Office.context.mailbox.item.from; + + console.log("Message received from: " + msgFrom.displayName + " (" + + msgFrom.emailAddress + ")"); +'Outlook.AppointmentRead#optionalAttendees:member': + - |- + 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 + ); + } +'Outlook.AppointmentCompose#optionalAttendees:member': + - >- + 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); + } + }); +'Outlook.AppointmentRead#organizer:member': + - >- + var apptOrganizer = Office.context.mailbox.item.organizer; + + console.log("Organizer: " + apptOrganizer.displayName + " (" + + apptOrganizer.emailAddress + ")"); +'Outlook.AppointmentCompose#organizer:member': + - |- + 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); + } + }); +'Outlook.Organizer#getAsync:member(2)': + - |- + 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); + } + }); +'Outlook.AppointmentRead#requiredAttendees:member': + - |- + 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 + ); + } +'Outlook.AppointmentCompose#requiredAttendees:member': + - >- + 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); + } + }); +'Outlook.MessageRead#sender:member': + - >- + var msgSender = Office.context.mailbox.item.sender; + + console.log("Sender: " + msgSender.displayName + " (" + + msgSender.emailAddress + ")"); +'Outlook.MessageCompose#to:member': + - |- + 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); + } + }); +'Outlook.MessageRead#to:member': + - |- + var msgTo = Office.context.mailbox.item.to; + console.log("Message sent to:"); + for (var i = 0; i < msgTo.length; i++) { + console.log(msgTo[i].displayName + " (" + msgTo[i].emailAddress + ")"); + } +'Outlook.AppointmentCompose#notificationMessages:member': + - >- + var id = $("#nofiticationId").val(); + + var details = + { + type: "progressIndicator", + message: "Progress indicator with id = " + id + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); + - >- + var id = $("#nofiticationId").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); + - >- + var id = $("#nofiticationId").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); + - >- + Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); + - |- + var id = $("#nofiticationId").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); + - >- + var id = $("#nofiticationId").val(); + + Office.context.mailbox.item.notificationMessages.removeAsync(id, + handleResult); +'Outlook.AppointmentRead#notificationMessages:member': + - >- + var id = $("#nofiticationId").val(); + + var details = + { + type: "progressIndicator", + message: "Progress indicator with id = " + id + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); + - >- + var id = $("#nofiticationId").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); + - >- + var id = $("#nofiticationId").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); + - >- + Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); + - |- + var id = $("#nofiticationId").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); + - >- + var id = $("#nofiticationId").val(); + + Office.context.mailbox.item.notificationMessages.removeAsync(id, + handleResult); +'Outlook.MessageCompose#notificationMessages:member': + - >- + var id = $("#nofiticationId").val(); + + var details = + { + type: "progressIndicator", + message: "Progress indicator with id = " + id + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); + - >- + var id = $("#nofiticationId").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); + - >- + var id = $("#nofiticationId").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); + - >- + Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); + - |- + var id = $("#nofiticationId").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); + - >- + var id = $("#nofiticationId").val(); + + Office.context.mailbox.item.notificationMessages.removeAsync(id, + handleResult); +'Outlook.MessageRead#notificationMessages:member': + - >- + var id = $("#nofiticationId").val(); + + var details = + { + type: "progressIndicator", + message: "Progress indicator with id = " + id + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); + - >- + var id = $("#nofiticationId").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); + - >- + var id = $("#nofiticationId").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); + - >- + Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); + - |- + var id = $("#nofiticationId").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); + - >- + var id = $("#nofiticationId").val(); + + Office.context.mailbox.item.notificationMessages.removeAsync(id, + handleResult); +'Outlook.NotificationMessages#addAsync:member(2)': + - >- + var id = $("#nofiticationId").val(); + + var details = + { + type: "progressIndicator", + message: "Progress indicator with id = " + id + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); + - >- + var id = $("#nofiticationId").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); + - >- + var id = $("#nofiticationId").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); + - >- + var id = $("#nofiticationId").val(); + + var details = + { + type: "errorMessage", + message: "Error notification message with id = " + id + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); +'Outlook.NotificationMessages#getAllAsync:member(2)': + - >- + Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); +'Outlook.NotificationMessages#replaceAsync:member(2)': + - |- + var id = $("#nofiticationId").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); +'Outlook.NotificationMessages#removeAsync:member(2)': + - >- + var id = $("#nofiticationId").val(); + + Office.context.mailbox.item.notificationMessages.removeAsync(id, + handleResult); +'Outlook.AppointmentCompose#addFileAttachmentAsync:member(1)': + - |- + var attachmentUrl = $("#attachmentUrl").val(); + Office.context.mailbox.item.addFileAttachmentAsync( + attachmentUrl, + getFileName(attachmentUrl), + { "asyncContext" : { var1: 1, var2: true } }, + function(result) { console.log(result); }); +'Outlook.MessageCompose#addFileAttachmentAsync:member(1)': + - |- + var attachmentUrl = $("#attachmentUrl").val(); + Office.context.mailbox.item.addFileAttachmentAsync( + attachmentUrl, + getFileName(attachmentUrl), + { "asyncContext" : { var1: 1, var2: true } }, + function(result) { console.log(result); }); +'Outlook.AppointmentCompose#addItemAttachmentAsync:member(1)': + - |- + var attachmentItemId = $("#attachmentItemId").val(); + Office.context.mailbox.item.addItemAttachmentAsync( + attachmentItemId, + "My attachment", + { "asyncContext" : { var3: 3, var4: false } }, + function(result) { console.log(result); }); +'Outlook.MessageCompose#addItemAttachmentAsync:member(1)': + - |- + var attachmentItemId = $("#attachmentItemId").val(); + Office.context.mailbox.item.addItemAttachmentAsync( + attachmentItemId, + "My attachment", + { "asyncContext" : { var3: 3, var4: false } }, + function(result) { console.log(result); }); +'Outlook.AppointmentCompose#addFileAttachmentFromBase64Async: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); }); +'Outlook.MessageCompose#addFileAttachmentFromBase64Async: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); }); +'Outlook.AppointmentCompose#getAttachmentsAsync:member(2)': + - |- + 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."); + } + } + }); +'Outlook.MessageCompose#getAttachmentsAsync:member(2)': + - |- + 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."); + } + } + }); +'Outlook.AppointmentCompose#removeAttachmentAsync: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.`); + } + } + ); +'Outlook.MessageCompose#removeAttachmentAsync: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.`); + } + } + ); +'Outlook.AppointmentCompose#getAttachmentContentAsync:member(2)': + - |- + var item = Office.context.mailbox.item; + var options = {asyncContext: {currentItem: item}}; + item.getAttachmentsAsync(options, callback); + + 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. + } + } +'Outlook.AppointmentRead#getAttachmentContentAsync:member(2)': + - |- + var item = Office.context.mailbox.item; + var options = {asyncContext: {currentItem: item}}; + item.getAttachmentsAsync(options, callback); + + 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. + } + } +'Outlook.MessageCompose#getAttachmentContentAsync:member(2)': + - |- + var item = Office.context.mailbox.item; + var options = {asyncContext: {currentItem: item}}; + item.getAttachmentsAsync(options, callback); + + 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. + } + } +'Outlook.MessageRead#getAttachmentContentAsync:member(2)': + - |- + var item = Office.context.mailbox.item; + var options = {asyncContext: {currentItem: item}}; + item.getAttachmentsAsync(options, callback); + + 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. + } + } +'Outlook.AppointmentRead#attachments:member': + - |- + var attachments = Office.context.mailbox.item.attachments; + console.log(attachments); +'Outlook.MessageRead#attachments:member': + - |- + var attachments = Office.context.mailbox.item.attachments; + console.log(attachments); +'Outlook.AppointmentCompose#categories:member': + - |- + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var categories = asyncResult.value; + if (categories) { + console.log(categories); + } else { + console.log("There are no categories."); + } + } else { + console.error(asyncResult.error); + } + }); +'Outlook.AppointmentRead#categories:member': + - |- + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var categories = asyncResult.value; + if (categories) { + console.log(categories); + } else { + console.log("There are no categories."); + } + } else { + console.error(asyncResult.error); + } + }); +'Outlook.MessageCompose#categories:member': + - |- + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var categories = asyncResult.value; + if (categories) { + console.log(categories); + } else { + console.log("There are no categories."); + } + } else { + console.error(asyncResult.error); + } + }); +'Outlook.MessageRead#categories:member': + - |- + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var categories = asyncResult.value; + if (categories) { + console.log(categories); + } else { + console.log("There are no categories."); + } + } else { + console.error(asyncResult.error); + } + }); +'Outlook.Categories#getAsync:member(2)': + - |- + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var categories = asyncResult.value; + if (categories) { + console.log(categories); + } else { + console.log("There are no categories."); + } + } else { + console.error(asyncResult.error); + } + }); +'Outlook.Mailbox#masterCategories:member': + - |- + Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var categories = asyncResult.value; + if (categories) { + console.log(categories); + } else { + console.log("There are no categories in the master list."); + } + } else { + console.error(asyncResult.error); + } + }); +'Outlook.MasterCategories#getAsync:member(2)': + - |- + Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var categories = asyncResult.value; + if (categories) { + console.log(categories); + } else { + console.log("There are no categories in the master list."); + } + } else { + console.error(asyncResult.error); + } + }); +'Outlook.AppointmentCompose#recurrence:member': + - |- + 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); + } + } else { + console.error(asyncResult.error); + } + }); +'Outlook.Recurrence#getAsync:member(2)': + - |- + 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); + } + } else { + console.error(asyncResult.error); + } + }); +'Outlook.AppointmentRead#recurrence:member': + - |- + 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(recurrence); + } +'Outlook.MessageRead#recurrence:member': + - |- + 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(recurrence); + } +'Outlook.AppointmentCompose#seriesId:member': + - |- + 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); + } +'Outlook.AppointmentRead#seriesId:member': + - |- + 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); + } +'Outlook.MessageCompose#seriesId:member': + - |- + 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); + } +'Outlook.MessageRead#seriesId:member': + - |- + 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); + } +'Outlook.Mailbox#displayAppointmentForm:member(1)': + - |- + var itemId = $("#itemId").val(); + Office.context.mailbox.displayAppointmentForm(itemId); +'Outlook.Mailbox#displayMessageForm:member(1)': + - |- + var itemId = $("#itemId").val(); + Office.context.mailbox.displayMessageForm(itemId); +'Outlook.Mailbox#displayNewAppointmentForm:member(1)': + - |- + var start = new Date(); + var 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!' + }); +'Outlook.Mailbox#displayNewMessageForm:member(1)': + - |- + 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 + } + ] + }); +'Outlook.AppointmentRead#displayReplyForm:member(1)': + - |- + Office.context.mailbox.item.displayReplyForm( + "This is a reply with some text in italics." + ); + - |- + 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}`); + } + } + }); +'Outlook.MessageRead#displayReplyForm:member(1)': + - |- + Office.context.mailbox.item.displayReplyForm( + "This is a reply with some text in italics." + ); + - |- + 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}`); + } + } + }); +'Outlook.AppointmentRead#displayReplyAllForm:member(1)': + - |- + Office.context.mailbox.item.displayReplyAllForm( + "This is a reply ALL with some bold text." + ); +'Outlook.MessageRead#displayReplyAllForm:member(1)': + - |- + Office.context.mailbox.item.displayReplyAllForm( + "This is a reply ALL with some bold text." + ); +'Outlook.AppointmentCompose#getSharedPropertiesAsync:member(2)': + - |- + if (!Office.context.mailbox.item.getSharedPropertiesAsync) { + console.error("Try this sample on a message from a shared folder."); + return; + } + + Office.context.mailbox.item.getSharedPropertiesAsync(function(result) { + console.log(result.value); + }); +'Outlook.AppointmentRead#getSharedPropertiesAsync:member(2)': + - |- + if (!Office.context.mailbox.item.getSharedPropertiesAsync) { + console.error("Try this sample on a message from a shared folder."); + return; + } + + Office.context.mailbox.item.getSharedPropertiesAsync(function(result) { + console.log(result.value); + }); +'Outlook.MessageCompose#getSharedPropertiesAsync:member(2)': + - |- + if (!Office.context.mailbox.item.getSharedPropertiesAsync) { + console.error("Try this sample on a message from a shared folder."); + return; + } + + Office.context.mailbox.item.getSharedPropertiesAsync(function(result) { + console.log(result.value); + }); +'Outlook.MessageRead#getSharedPropertiesAsync:member(2)': + - |- + if (!Office.context.mailbox.item.getSharedPropertiesAsync) { + console.error("Try this sample on a message from a shared folder."); + return; + } + + Office.context.mailbox.item.getSharedPropertiesAsync(function(result) { + console.log(result.value); + }); +'Outlook.AppointmentCompose#getSharedPropertiesAsync:member(1)': + - >- + 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 can do the expected operation, e.g., do they have Write permission? + 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); + }); + } + } + ); + } + }); +'Outlook.AppointmentRead#getSharedPropertiesAsync:member(1)': + - >- + 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 can do the expected operation, e.g., do they have Write permission? + 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); + }); + } + } + ); + } + }); +'Outlook.MessageCompose#getSharedPropertiesAsync:member(1)': + - >- + 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 can do the expected operation, e.g., do they have Write permission? + 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); + }); + } + } + ); + } + }); +'Outlook.MessageRead#getSharedPropertiesAsync:member(1)': + - >- + 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 can do the expected operation, e.g., do they have Write permission? + 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); + }); + } + } + ); + } + }); +'Outlook.AppointmentRead#getEntities:member(1)': + - |- + var entities = Office.context.mailbox.item.getEntities(); + 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.log("No entities found on this item."); + } +'Outlook.MessageRead#getEntities:member(1)': + - |- + var entities = Office.context.mailbox.item.getEntities(); + 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.log("No entities found on this item."); + } +'Outlook.AppointmentRead#getEntitiesByType:member(1)': + - >- + console.log(Office.context.mailbox.item.getEntitiesByType(Office.MailboxEnums.EntityType.Address)); +'Outlook.MessageRead#getEntitiesByType:member(1)': + - >- + console.log(Office.context.mailbox.item.getEntitiesByType(Office.MailboxEnums.EntityType.Address)); +'Outlook.AppointmentRead#getFilteredEntitiesByName: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")); +'Outlook.MessageRead#getFilteredEntitiesByName: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")); +'Outlook.AppointmentRead#getRegExMatches:member(1)': + - |- + // This API would only work when you click on highlighted word "ScriptLab". + console.log(Office.context.mailbox.item.getRegExMatches()); +'Outlook.MessageRead#getRegExMatches:member(1)': + - |- + // This API would only work when you click on highlighted word "ScriptLab". + console.log(Office.context.mailbox.item.getRegExMatches()); +'Outlook.AppointmentRead#getRegExMatchesByName:member(1)': + - >- + // This API would only work when you click on highlighted word "ScriptLab". + + console.log(Office.context.mailbox.item.getRegExMatchesByName("sampleRegexName")); +'Outlook.MessageRead#getRegExMatchesByName:member(1)': + - >- + // This API would only work when you click on highlighted word "ScriptLab". + + console.log(Office.context.mailbox.item.getRegExMatchesByName("sampleRegexName")); +'Outlook.AppointmentRead#getSelectedEntities:member(1)': + - |- + 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++; + } + 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."); + } +'Outlook.MessageRead#getSelectedEntities:member(1)': + - |- + 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++; + } + 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."); + } +'Outlook.AppointmentRead#getSelectedRegExMatches: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."); + } +'Outlook.MessageRead#getSelectedRegExMatches: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."); + } +'Outlook.Mailbox#convertToRestId: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(); + }); + - >- + 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); + + var 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); + + console.log("EWS ID (from REST ID): " + ewsId2); +'Outlook.Mailbox#restUrl: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(); + }); + - >- + 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); + + var 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); + + console.log("EWS ID (from REST ID): " + ewsId2); +'Outlook.Mailbox#getCallbackTokenAsync: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(); + }); +'Outlook.Mailbox#ewsUrl:member': + - >- + 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); + + var 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); + + console.log("EWS ID (from REST ID): " + ewsId2); +'Outlook.Mailbox#convertToEwsId:member(1)': + - >- + 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); + + var 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); + + console.log("EWS ID (from REST ID): " + ewsId2); +'Outlook.AppointmentCompose#getItemIdAsync:member(2)': + - |- + 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); + } + }); +'Outlook.MessageCompose#getItemIdAsync:member(2)': + - |- + 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); + } + }); +'Outlook.Mailbox#makeEwsRequestAsync:member(1)': + - >- + var ewsId = Office.context.mailbox.item.itemId; + + var request = '' + + ' ' + + ' ' + + ' ' + + ' ' + + ' IdOnly' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ''; + + Office.context.mailbox.makeEwsRequestAsync(request, function (result) { + console.log(result); + }); + - >- + 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.makeEwsRequestAsync(request, function (result) { + console.log(result); + }); +'Outlook.Mailbox#getCallbackTokenAsync:member(2)': + - |- + 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); + } + }); +'Outlook.Mailbox#getUserIdentityTokenAsync:member(1)': + - |- + 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); + } + }); 'Word.Body#search:member(1)': - |- await Word.run(async (context) => { From d2b09d6d9f351e61adfaa9cccde16a5ec39b7e0d Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 10 Feb 2020 14:29:25 -0800 Subject: [PATCH 234/660] [Outlook] Fix namespace for snippets (#392) --- config/helpers.ts | 2 +- snippet-extractor-output/snippets.yaml | 226 ++++++++++++------------- 2 files changed, 114 insertions(+), 114 deletions(-) diff --git a/config/helpers.ts b/config/helpers.ts index 91e755800..e297ae06d 100644 --- a/config/helpers.ts +++ b/config/helpers.ts @@ -11,7 +11,7 @@ export const officeHostsToAppNames = { 'ACCESS': 'Access', 'EXCEL': 'Excel', 'ONENOTE': 'OneNote', - 'OUTLOOK': 'Outlook', + 'OUTLOOK': 'Office', 'POWERPOINT': 'PowerPoint', 'PROJECT': 'Project', 'WORD': 'Word' diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 045fa427d..82a351118 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -3691,19 +3691,19 @@ sheet.getRange("A1:E1").moveTo("G12"); await context.sync(); }); -'Outlook.RoamingSettings#get:member(1)': +'Office.RoamingSettings#get: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}".`); -'Outlook.RoamingSettings#set:member(1)': +'Office.RoamingSettings#set:member(1)': - |- var settingName = $("#settingName").val(); var settingValue = $("#settingValue").val(); Office.context.roamingSettings.set(settingName, settingValue); console.log(`Setting "${settingName}" set to value "${settingValue}".`); -'Outlook.RoamingSettings#saveAsync:member(1)': +'Office.RoamingSettings#saveAsync:member(1)': - |- // Save settings in the mailbox to make it available in future sessions. Office.context.roamingSettings.saveAsync(function(result) { @@ -3713,7 +3713,7 @@ console.log(`Settings saved with status: ${result.status}`); } }); -'Outlook.CustomProperties#get:member(1)': +'Office.CustomProperties#get:member(1)': - >- var propertyName = $("#propertyName").val(); @@ -3723,7 +3723,7 @@ console.log(`The value of custom property "${propertyName}" is "${propertyValue}".`); -'Outlook.CustomProperties#set:member(1)': +'Office.CustomProperties#set:member(1)': - >- var propertyName = $("#propertyName").val(); @@ -3733,12 +3733,12 @@ console.log(`Custom property "${propertyName}" set to value "${propertyValue}".`); -'Outlook.CustomProperties#remove:member(1)': +'Office.CustomProperties#remove:member(1)': - |- var propertyName = $("#propertyName").val(); customProps.remove(propertyName); console.log(`Custom property "${propertyName}" removed.`); -'Outlook.AppointmentCompose#loadCustomPropertiesAsync:member(1)': +'Office.AppointmentCompose#loadCustomPropertiesAsync:member(1)': - |- Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { if (result.status === Office.AsyncResultStatus.Succeeded) { @@ -3756,7 +3756,7 @@ console.error(`loadCustomPropertiesAsync failed with message ${result.error.message}`); } }); -'Outlook.AppointmentRead#loadCustomPropertiesAsync:member(1)': +'Office.AppointmentRead#loadCustomPropertiesAsync:member(1)': - |- Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { if (result.status === Office.AsyncResultStatus.Succeeded) { @@ -3774,7 +3774,7 @@ console.error(`loadCustomPropertiesAsync failed with message ${result.error.message}`); } }); -'Outlook.MessageCompose#loadCustomPropertiesAsync:member(1)': +'Office.MessageCompose#loadCustomPropertiesAsync:member(1)': - |- Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { if (result.status === Office.AsyncResultStatus.Succeeded) { @@ -3792,7 +3792,7 @@ console.error(`loadCustomPropertiesAsync failed with message ${result.error.message}`); } }); -'Outlook.MessageRead#loadCustomPropertiesAsync:member(1)': +'Office.MessageRead#loadCustomPropertiesAsync:member(1)': - |- Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { if (result.status === Office.AsyncResultStatus.Succeeded) { @@ -3810,7 +3810,7 @@ console.error(`loadCustomPropertiesAsync failed with message ${result.error.message}`); } }); -'Outlook.AppointmentCompose#getSelectedDataAsync:member(2)': +'Office.AppointmentCompose#getSelectedDataAsync:member(2)': - >- Office.context.mailbox.item.getSelectedDataAsync(Office.CoercionType.Text, function(asyncResult) { @@ -3822,7 +3822,7 @@ console.error(asyncResult.error); } }); -'Outlook.MessageCompose#getSelectedDataAsync:member(2)': +'Office.MessageCompose#getSelectedDataAsync:member(2)': - >- Office.context.mailbox.item.getSelectedDataAsync(Office.CoercionType.Text, function(asyncResult) { @@ -3834,7 +3834,7 @@ console.error(asyncResult.error); } }); -'Outlook.AppointmentCompose#setSelectedDataAsync:member(2)': +'Office.AppointmentCompose#setSelectedDataAsync:member(2)': - >- Office.context.mailbox.item.setSelectedDataAsync("Replaced", function(asyncResult) { @@ -3844,7 +3844,7 @@ console.error(asyncResult.error); } }); -'Outlook.MessageCompose#setSelectedDataAsync:member(2)': +'Office.MessageCompose#setSelectedDataAsync:member(2)': - >- Office.context.mailbox.item.setSelectedDataAsync("Replaced", function(asyncResult) { @@ -3854,11 +3854,11 @@ console.error(asyncResult.error); } }); -'Outlook.AppointmentCompose#close:member(1)': +'Office.AppointmentCompose#close:member(1)': - Office.context.mailbox.item.close(); -'Outlook.MessageCompose#close:member(1)': +'Office.MessageCompose#close:member(1)': - Office.context.mailbox.item.close(); -'Outlook.AppointmentCompose#saveAsync:member(1)': +'Office.AppointmentCompose#saveAsync:member(1)': - |- Office.context.mailbox.item.saveAsync(function (result) { if (result.status === Office.AsyncResultStatus.Succeeded) { @@ -3868,7 +3868,7 @@ console.error(`saveAsync failed with message ${result.error.message}`); } }); -'Outlook.MessageCompose#bcc:member': +'Office.MessageCompose#bcc:member': - |- Office.context.mailbox.item.bcc.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -3881,7 +3881,7 @@ console.error(asyncResult.error); } }); -'Outlook.Recipients#getAsync:member(2)': +'Office.Recipients#getAsync:member(2)': - |- Office.context.mailbox.item.bcc.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -3956,7 +3956,7 @@ console.error(asyncResult.error); } }); -'Outlook.MessageCompose#cc:member': +'Office.MessageCompose#cc:member': - |- Office.context.mailbox.item.cc.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -3969,14 +3969,14 @@ console.error(asyncResult.error); } }); -'Outlook.MessageRead#cc:member': +'Office.MessageRead#cc:member': - |- var msgCc = Office.context.mailbox.item.cc; console.log("Message copied to:"); for (var i = 0; i < msgCc.length; i++) { console.log(msgCc[i].displayName + " (" + msgCc[i].emailAddress + ")"); } -'Outlook.MessageCompose#from:member': +'Office.MessageCompose#from:member': - |- Office.context.mailbox.item.from.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -3986,7 +3986,7 @@ console.error(asyncResult.error); } }); -'Outlook.From#getAsync:member(2)': +'Office.From#getAsync:member(2)': - |- Office.context.mailbox.item.from.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -3996,13 +3996,13 @@ console.error(asyncResult.error); } }); -'Outlook.MessageRead#from:member': +'Office.MessageRead#from:member': - >- var msgFrom = Office.context.mailbox.item.from; console.log("Message received from: " + msgFrom.displayName + " (" + msgFrom.emailAddress + ")"); -'Outlook.AppointmentRead#optionalAttendees:member': +'Office.AppointmentRead#optionalAttendees:member': - |- var apptOptionalAttendees = Office.context.mailbox.item.optionalAttendees; console.log("Optional attendees:"); @@ -4015,7 +4015,7 @@ apptOptionalAttendees[i].appointmentResponse ); } -'Outlook.AppointmentCompose#optionalAttendees:member': +'Office.AppointmentCompose#optionalAttendees:member': - >- Office.context.mailbox.item.optionalAttendees.getAsync(function(asyncResult) { @@ -4035,13 +4035,13 @@ console.error(asyncResult.error); } }); -'Outlook.AppointmentRead#organizer:member': +'Office.AppointmentRead#organizer:member': - >- var apptOrganizer = Office.context.mailbox.item.organizer; console.log("Organizer: " + apptOrganizer.displayName + " (" + apptOrganizer.emailAddress + ")"); -'Outlook.AppointmentCompose#organizer:member': +'Office.AppointmentCompose#organizer:member': - |- Office.context.mailbox.item.organizer.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -4051,7 +4051,7 @@ console.error(asyncResult.error); } }); -'Outlook.Organizer#getAsync:member(2)': +'Office.Organizer#getAsync:member(2)': - |- Office.context.mailbox.item.organizer.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -4061,7 +4061,7 @@ console.error(asyncResult.error); } }); -'Outlook.AppointmentRead#requiredAttendees:member': +'Office.AppointmentRead#requiredAttendees:member': - |- var apptRequiredAttendees = Office.context.mailbox.item.requiredAttendees; console.log("Required attendees:"); @@ -4074,7 +4074,7 @@ apptRequiredAttendees[i].appointmentResponse ); } -'Outlook.AppointmentCompose#requiredAttendees:member': +'Office.AppointmentCompose#requiredAttendees:member': - >- Office.context.mailbox.item.requiredAttendees.getAsync(function(asyncResult) { @@ -4094,13 +4094,13 @@ console.error(asyncResult.error); } }); -'Outlook.MessageRead#sender:member': +'Office.MessageRead#sender:member': - >- var msgSender = Office.context.mailbox.item.sender; console.log("Sender: " + msgSender.displayName + " (" + msgSender.emailAddress + ")"); -'Outlook.MessageCompose#to:member': +'Office.MessageCompose#to:member': - |- Office.context.mailbox.item.to.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -4113,14 +4113,14 @@ console.error(asyncResult.error); } }); -'Outlook.MessageRead#to:member': +'Office.MessageRead#to:member': - |- var msgTo = Office.context.mailbox.item.to; console.log("Message sent to:"); for (var i = 0; i < msgTo.length; i++) { console.log(msgTo[i].displayName + " (" + msgTo[i].emailAddress + ")"); } -'Outlook.AppointmentCompose#notificationMessages:member': +'Office.AppointmentCompose#notificationMessages:member': - >- var id = $("#nofiticationId").val(); @@ -4173,7 +4173,7 @@ Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); -'Outlook.AppointmentRead#notificationMessages:member': +'Office.AppointmentRead#notificationMessages:member': - >- var id = $("#nofiticationId").val(); @@ -4226,7 +4226,7 @@ Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); -'Outlook.MessageCompose#notificationMessages:member': +'Office.MessageCompose#notificationMessages:member': - >- var id = $("#nofiticationId").val(); @@ -4279,7 +4279,7 @@ Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); -'Outlook.MessageRead#notificationMessages:member': +'Office.MessageRead#notificationMessages:member': - >- var id = $("#nofiticationId").val(); @@ -4332,7 +4332,7 @@ Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); -'Outlook.NotificationMessages#addAsync:member(2)': +'Office.NotificationMessages#addAsync:member(2)': - >- var id = $("#nofiticationId").val(); @@ -4377,10 +4377,10 @@ }; Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); -'Outlook.NotificationMessages#getAllAsync:member(2)': +'Office.NotificationMessages#getAllAsync:member(2)': - >- Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); -'Outlook.NotificationMessages#replaceAsync:member(2)': +'Office.NotificationMessages#replaceAsync:member(2)': - |- var id = $("#nofiticationId").val(); Office.context.mailbox.item.notificationMessages.replaceAsync( @@ -4392,13 +4392,13 @@ persistent: false }, handleResult); -'Outlook.NotificationMessages#removeAsync:member(2)': +'Office.NotificationMessages#removeAsync:member(2)': - >- var id = $("#nofiticationId").val(); Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); -'Outlook.AppointmentCompose#addFileAttachmentAsync:member(1)': +'Office.AppointmentCompose#addFileAttachmentAsync:member(1)': - |- var attachmentUrl = $("#attachmentUrl").val(); Office.context.mailbox.item.addFileAttachmentAsync( @@ -4406,7 +4406,7 @@ getFileName(attachmentUrl), { "asyncContext" : { var1: 1, var2: true } }, function(result) { console.log(result); }); -'Outlook.MessageCompose#addFileAttachmentAsync:member(1)': +'Office.MessageCompose#addFileAttachmentAsync:member(1)': - |- var attachmentUrl = $("#attachmentUrl").val(); Office.context.mailbox.item.addFileAttachmentAsync( @@ -4414,7 +4414,7 @@ getFileName(attachmentUrl), { "asyncContext" : { var1: 1, var2: true } }, function(result) { console.log(result); }); -'Outlook.AppointmentCompose#addItemAttachmentAsync:member(1)': +'Office.AppointmentCompose#addItemAttachmentAsync:member(1)': - |- var attachmentItemId = $("#attachmentItemId").val(); Office.context.mailbox.item.addItemAttachmentAsync( @@ -4422,7 +4422,7 @@ "My attachment", { "asyncContext" : { var3: 3, var4: false } }, function(result) { console.log(result); }); -'Outlook.MessageCompose#addItemAttachmentAsync:member(1)': +'Office.MessageCompose#addItemAttachmentAsync:member(1)': - |- var attachmentItemId = $("#attachmentItemId").val(); Office.context.mailbox.item.addItemAttachmentAsync( @@ -4430,7 +4430,7 @@ "My attachment", { "asyncContext" : { var3: 3, var4: false } }, function(result) { console.log(result); }); -'Outlook.AppointmentCompose#addFileAttachmentFromBase64Async:member(1)': +'Office.AppointmentCompose#addFileAttachmentFromBase64Async:member(1)': - >- base64String = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsSAAALEgHS3X78AAACRUlEQVRYw82XzXHbMBCFP2F8tzsQc8Ixyh0zoiuIXIGdCsxUYKqC0B04FdiuwMoM7mGOOIXqQGoAymXhgSX+itJM9kIRFLAP+3YXD5Pdbscx5oxaAIW8Ztr6l2PWmQwF4IyaieP53qdfAqQ8CwBn1JU4vpWhrbxXQA5MZfynANmcDIAzKgcy4FKGXsVJFf3nLgKyBQptfT4KQMRz2N0fcbxqmRMDWXflx0VPnrdArq0vekQ1Dv0UeHZGNebHhwjU8AzwKM43RyZnbAf58Q6ghudeWd0Aus0+5EcMIIRi3beua0D3Nm39BEAx3i7HTK4DEBJn5YxKOnaRA5+ErpMBWMpzDvx1RuXCcxOISlufAjfC7zgAsqsvUvMAD0ApPaEtGi9AIlUzKgJo60tt/SyKRkzLrAXERluf7W1gOICWaMyB386oooOWsIHvXbSoHuUSFovtHqicUVnH3EJoeT0aQEf5/XBGlc6otIOWBXAtPeZkAIJ9Bt6cUU9tZautX2nrk3MACHYr1ZKProKRtDw4o8pzAPjWo+NtpXTTvoteDDg8noDAcwbcRedAkGdFXyk2GEDcegVAFp2gyVDHjRQ4o6q2smoqtR5Hd+qMqtoALCWUUymr1m43QMZfOaMK4C0SrMsDANJ2E5FNcbdbjHC+ENl+H0myJFbLtaq4Rt8dyPBYRQV1E40nMv9rl7xrOw3DGb+Whcqu3i/OM6CUOWvgRlufNmnLYy4m77uJI7AXtdNcTDrU71LEyv7v01/N/ovL6bmu5/8A1tNWZldH0W4AAAAASUVORK5CYII="; @@ -4440,7 +4440,7 @@ "logo.png", { isInline: false }, function(result) { console.log(result); }); -'Outlook.MessageCompose#addFileAttachmentFromBase64Async:member(1)': +'Office.MessageCompose#addFileAttachmentFromBase64Async:member(1)': - >- base64String = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsSAAALEgHS3X78AAACRUlEQVRYw82XzXHbMBCFP2F8tzsQc8Ixyh0zoiuIXIGdCsxUYKqC0B04FdiuwMoM7mGOOIXqQGoAymXhgSX+itJM9kIRFLAP+3YXD5Pdbscx5oxaAIW8Ztr6l2PWmQwF4IyaieP53qdfAqQ8CwBn1JU4vpWhrbxXQA5MZfynANmcDIAzKgcy4FKGXsVJFf3nLgKyBQptfT4KQMRz2N0fcbxqmRMDWXflx0VPnrdArq0vekQ1Dv0UeHZGNebHhwjU8AzwKM43RyZnbAf58Q6ghudeWd0Aus0+5EcMIIRi3beua0D3Nm39BEAx3i7HTK4DEBJn5YxKOnaRA5+ErpMBWMpzDvx1RuXCcxOISlufAjfC7zgAsqsvUvMAD0ApPaEtGi9AIlUzKgJo60tt/SyKRkzLrAXERluf7W1gOICWaMyB386oooOWsIHvXbSoHuUSFovtHqicUVnH3EJoeT0aQEf5/XBGlc6otIOWBXAtPeZkAIJ9Bt6cUU9tZautX2nrk3MACHYr1ZKProKRtDw4o8pzAPjWo+NtpXTTvoteDDg8noDAcwbcRedAkGdFXyk2GEDcegVAFp2gyVDHjRQ4o6q2smoqtR5Hd+qMqtoALCWUUymr1m43QMZfOaMK4C0SrMsDANJ2E5FNcbdbjHC+ENl+H0myJFbLtaq4Rt8dyPBYRQV1E40nMv9rl7xrOw3DGb+Whcqu3i/OM6CUOWvgRlufNmnLYy4m77uJI7AXtdNcTDrU71LEyv7v01/N/ovL6bmu5/8A1tNWZldH0W4AAAAASUVORK5CYII="; @@ -4450,7 +4450,7 @@ "logo.png", { isInline: false }, function(result) { console.log(result); }); -'Outlook.AppointmentCompose#getAttachmentsAsync:member(2)': +'Office.AppointmentCompose#getAttachmentsAsync:member(2)': - |- Office.context.mailbox.item.getAttachmentsAsync(function (result) { if (result.status !== Office.AsyncResultStatus.Succeeded) { @@ -4467,7 +4467,7 @@ } } }); -'Outlook.MessageCompose#getAttachmentsAsync:member(2)': +'Office.MessageCompose#getAttachmentsAsync:member(2)': - |- Office.context.mailbox.item.getAttachmentsAsync(function (result) { if (result.status !== Office.AsyncResultStatus.Succeeded) { @@ -4484,7 +4484,7 @@ } } }); -'Outlook.AppointmentCompose#removeAttachmentAsync:member(1)': +'Office.AppointmentCompose#removeAttachmentAsync:member(1)': - |- Office.context.mailbox.item.removeAttachmentAsync( $("#attachmentId").val(), @@ -4498,7 +4498,7 @@ } } ); -'Outlook.MessageCompose#removeAttachmentAsync:member(1)': +'Office.MessageCompose#removeAttachmentAsync:member(1)': - |- Office.context.mailbox.item.removeAttachmentAsync( $("#attachmentId").val(), @@ -4512,7 +4512,7 @@ } } ); -'Outlook.AppointmentCompose#getAttachmentContentAsync:member(2)': +'Office.AppointmentCompose#getAttachmentContentAsync:member(2)': - |- var item = Office.context.mailbox.item; var options = {asyncContext: {currentItem: item}}; @@ -4549,7 +4549,7 @@ // Handle attachment formats that are not supported. } } -'Outlook.AppointmentRead#getAttachmentContentAsync:member(2)': +'Office.AppointmentRead#getAttachmentContentAsync:member(2)': - |- var item = Office.context.mailbox.item; var options = {asyncContext: {currentItem: item}}; @@ -4586,7 +4586,7 @@ // Handle attachment formats that are not supported. } } -'Outlook.MessageCompose#getAttachmentContentAsync:member(2)': +'Office.MessageCompose#getAttachmentContentAsync:member(2)': - |- var item = Office.context.mailbox.item; var options = {asyncContext: {currentItem: item}}; @@ -4623,7 +4623,7 @@ // Handle attachment formats that are not supported. } } -'Outlook.MessageRead#getAttachmentContentAsync:member(2)': +'Office.MessageRead#getAttachmentContentAsync:member(2)': - |- var item = Office.context.mailbox.item; var options = {asyncContext: {currentItem: item}}; @@ -4660,15 +4660,15 @@ // Handle attachment formats that are not supported. } } -'Outlook.AppointmentRead#attachments:member': +'Office.AppointmentRead#attachments:member': - |- var attachments = Office.context.mailbox.item.attachments; console.log(attachments); -'Outlook.MessageRead#attachments:member': +'Office.MessageRead#attachments:member': - |- var attachments = Office.context.mailbox.item.attachments; console.log(attachments); -'Outlook.AppointmentCompose#categories:member': +'Office.AppointmentCompose#categories:member': - |- Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -4682,7 +4682,7 @@ console.error(asyncResult.error); } }); -'Outlook.AppointmentRead#categories:member': +'Office.AppointmentRead#categories:member': - |- Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -4696,7 +4696,7 @@ console.error(asyncResult.error); } }); -'Outlook.MessageCompose#categories:member': +'Office.MessageCompose#categories:member': - |- Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -4710,7 +4710,7 @@ console.error(asyncResult.error); } }); -'Outlook.MessageRead#categories:member': +'Office.MessageRead#categories:member': - |- Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -4724,7 +4724,7 @@ console.error(asyncResult.error); } }); -'Outlook.Categories#getAsync:member(2)': +'Office.Categories#getAsync:member(2)': - |- Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -4738,7 +4738,7 @@ console.error(asyncResult.error); } }); -'Outlook.Mailbox#masterCategories:member': +'Office.Mailbox#masterCategories:member': - |- Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -4752,7 +4752,7 @@ console.error(asyncResult.error); } }); -'Outlook.MasterCategories#getAsync:member(2)': +'Office.MasterCategories#getAsync:member(2)': - |- Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -4766,7 +4766,7 @@ console.error(asyncResult.error); } }); -'Outlook.AppointmentCompose#recurrence:member': +'Office.AppointmentCompose#recurrence:member': - |- Office.context.mailbox.item.recurrence.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -4780,7 +4780,7 @@ console.error(asyncResult.error); } }); -'Outlook.Recurrence#getAsync:member(2)': +'Office.Recurrence#getAsync:member(2)': - |- Office.context.mailbox.item.recurrence.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -4794,7 +4794,7 @@ console.error(asyncResult.error); } }); -'Outlook.AppointmentRead#recurrence:member': +'Office.AppointmentRead#recurrence:member': - |- var recurrence = Office.context.mailbox.item.recurrence; @@ -4805,7 +4805,7 @@ } else { console.log(recurrence); } -'Outlook.MessageRead#recurrence:member': +'Office.MessageRead#recurrence:member': - |- var recurrence = Office.context.mailbox.item.recurrence; @@ -4816,7 +4816,7 @@ } else { console.log(recurrence); } -'Outlook.AppointmentCompose#seriesId:member': +'Office.AppointmentCompose#seriesId:member': - |- var seriesId = Office.context.mailbox.item.seriesId; @@ -4827,7 +4827,7 @@ } else { console.log("This is an instance belonging to series with ID " + seriesId); } -'Outlook.AppointmentRead#seriesId:member': +'Office.AppointmentRead#seriesId:member': - |- var seriesId = Office.context.mailbox.item.seriesId; @@ -4838,7 +4838,7 @@ } else { console.log("This is an instance belonging to series with ID " + seriesId); } -'Outlook.MessageCompose#seriesId:member': +'Office.MessageCompose#seriesId:member': - |- var seriesId = Office.context.mailbox.item.seriesId; @@ -4849,7 +4849,7 @@ } else { console.log("This is an instance belonging to series with ID " + seriesId); } -'Outlook.MessageRead#seriesId:member': +'Office.MessageRead#seriesId:member': - |- var seriesId = Office.context.mailbox.item.seriesId; @@ -4860,15 +4860,15 @@ } else { console.log("This is an instance belonging to series with ID " + seriesId); } -'Outlook.Mailbox#displayAppointmentForm:member(1)': +'Office.Mailbox#displayAppointmentForm:member(1)': - |- var itemId = $("#itemId").val(); Office.context.mailbox.displayAppointmentForm(itemId); -'Outlook.Mailbox#displayMessageForm:member(1)': +'Office.Mailbox#displayMessageForm:member(1)': - |- var itemId = $("#itemId").val(); Office.context.mailbox.displayMessageForm(itemId); -'Outlook.Mailbox#displayNewAppointmentForm:member(1)': +'Office.Mailbox#displayNewAppointmentForm:member(1)': - |- var start = new Date(); var end = new Date(); @@ -4885,7 +4885,7 @@ resources: ['projector@contoso.com'], body: 'Hello World!' }); -'Outlook.Mailbox#displayNewMessageForm:member(1)': +'Office.Mailbox#displayNewMessageForm:member(1)': - |- Office.context.mailbox.displayNewMessageForm( { @@ -4903,7 +4903,7 @@ } ] }); -'Outlook.AppointmentRead#displayReplyForm:member(1)': +'Office.AppointmentRead#displayReplyForm:member(1)': - |- Office.context.mailbox.item.displayReplyForm( "This is a reply with some text in italics." @@ -4926,7 +4926,7 @@ } } }); -'Outlook.MessageRead#displayReplyForm:member(1)': +'Office.MessageRead#displayReplyForm:member(1)': - |- Office.context.mailbox.item.displayReplyForm( "This is a reply with some text in italics." @@ -4949,17 +4949,17 @@ } } }); -'Outlook.AppointmentRead#displayReplyAllForm:member(1)': +'Office.AppointmentRead#displayReplyAllForm:member(1)': - |- Office.context.mailbox.item.displayReplyAllForm( "This is a reply ALL with some bold text." ); -'Outlook.MessageRead#displayReplyAllForm:member(1)': +'Office.MessageRead#displayReplyAllForm:member(1)': - |- Office.context.mailbox.item.displayReplyAllForm( "This is a reply ALL with some bold text." ); -'Outlook.AppointmentCompose#getSharedPropertiesAsync:member(2)': +'Office.AppointmentCompose#getSharedPropertiesAsync:member(2)': - |- if (!Office.context.mailbox.item.getSharedPropertiesAsync) { console.error("Try this sample on a message from a shared folder."); @@ -4969,7 +4969,7 @@ Office.context.mailbox.item.getSharedPropertiesAsync(function(result) { console.log(result.value); }); -'Outlook.AppointmentRead#getSharedPropertiesAsync:member(2)': +'Office.AppointmentRead#getSharedPropertiesAsync:member(2)': - |- if (!Office.context.mailbox.item.getSharedPropertiesAsync) { console.error("Try this sample on a message from a shared folder."); @@ -4979,7 +4979,7 @@ Office.context.mailbox.item.getSharedPropertiesAsync(function(result) { console.log(result.value); }); -'Outlook.MessageCompose#getSharedPropertiesAsync:member(2)': +'Office.MessageCompose#getSharedPropertiesAsync:member(2)': - |- if (!Office.context.mailbox.item.getSharedPropertiesAsync) { console.error("Try this sample on a message from a shared folder."); @@ -4989,7 +4989,7 @@ Office.context.mailbox.item.getSharedPropertiesAsync(function(result) { console.log(result.value); }); -'Outlook.MessageRead#getSharedPropertiesAsync:member(2)': +'Office.MessageRead#getSharedPropertiesAsync:member(2)': - |- if (!Office.context.mailbox.item.getSharedPropertiesAsync) { console.error("Try this sample on a message from a shared folder."); @@ -4999,7 +4999,7 @@ Office.context.mailbox.item.getSharedPropertiesAsync(function(result) { console.log(result.value); }); -'Outlook.AppointmentCompose#getSharedPropertiesAsync:member(1)': +'Office.AppointmentCompose#getSharedPropertiesAsync:member(1)': - >- if (!Office.context.mailbox.item.getSharedPropertiesAsync) { console.error("Try this sample on a message from a shared folder."); @@ -5042,7 +5042,7 @@ ); } }); -'Outlook.AppointmentRead#getSharedPropertiesAsync:member(1)': +'Office.AppointmentRead#getSharedPropertiesAsync:member(1)': - >- if (!Office.context.mailbox.item.getSharedPropertiesAsync) { console.error("Try this sample on a message from a shared folder."); @@ -5085,7 +5085,7 @@ ); } }); -'Outlook.MessageCompose#getSharedPropertiesAsync:member(1)': +'Office.MessageCompose#getSharedPropertiesAsync:member(1)': - >- if (!Office.context.mailbox.item.getSharedPropertiesAsync) { console.error("Try this sample on a message from a shared folder."); @@ -5128,7 +5128,7 @@ ); } }); -'Outlook.MessageRead#getSharedPropertiesAsync:member(1)': +'Office.MessageRead#getSharedPropertiesAsync:member(1)': - >- if (!Office.context.mailbox.item.getSharedPropertiesAsync) { console.error("Try this sample on a message from a shared folder."); @@ -5171,7 +5171,7 @@ ); } }); -'Outlook.AppointmentRead#getEntities:member(1)': +'Office.AppointmentRead#getEntities:member(1)': - |- var entities = Office.context.mailbox.item.getEntities(); var entityTypesFound = 0; @@ -5214,7 +5214,7 @@ { console.log("No entities found on this item."); } -'Outlook.MessageRead#getEntities:member(1)': +'Office.MessageRead#getEntities:member(1)': - |- var entities = Office.context.mailbox.item.getEntities(); var entityTypesFound = 0; @@ -5257,43 +5257,43 @@ { console.log("No entities found on this item."); } -'Outlook.AppointmentRead#getEntitiesByType:member(1)': +'Office.AppointmentRead#getEntitiesByType:member(1)': - >- console.log(Office.context.mailbox.item.getEntitiesByType(Office.MailboxEnums.EntityType.Address)); -'Outlook.MessageRead#getEntitiesByType:member(1)': +'Office.MessageRead#getEntitiesByType:member(1)': - >- console.log(Office.context.mailbox.item.getEntitiesByType(Office.MailboxEnums.EntityType.Address)); -'Outlook.AppointmentRead#getFilteredEntitiesByName:member(1)': +'Office.AppointmentRead#getFilteredEntitiesByName: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")); -'Outlook.MessageRead#getFilteredEntitiesByName:member(1)': +'Office.MessageRead#getFilteredEntitiesByName: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")); -'Outlook.AppointmentRead#getRegExMatches:member(1)': +'Office.AppointmentRead#getRegExMatches:member(1)': - |- // This API would only work when you click on highlighted word "ScriptLab". console.log(Office.context.mailbox.item.getRegExMatches()); -'Outlook.MessageRead#getRegExMatches:member(1)': +'Office.MessageRead#getRegExMatches:member(1)': - |- // This API would only work when you click on highlighted word "ScriptLab". console.log(Office.context.mailbox.item.getRegExMatches()); -'Outlook.AppointmentRead#getRegExMatchesByName:member(1)': +'Office.AppointmentRead#getRegExMatchesByName:member(1)': - >- // This API would only work when you click on highlighted word "ScriptLab". console.log(Office.context.mailbox.item.getRegExMatchesByName("sampleRegexName")); -'Outlook.MessageRead#getRegExMatchesByName:member(1)': +'Office.MessageRead#getRegExMatchesByName:member(1)': - >- // This API would only work when you click on highlighted word "ScriptLab". console.log(Office.context.mailbox.item.getRegExMatchesByName("sampleRegexName")); -'Outlook.AppointmentRead#getSelectedEntities:member(1)': +'Office.AppointmentRead#getSelectedEntities:member(1)': - |- var entities = Office.context.mailbox.item.getSelectedEntities(); var entityTypesFound = 0; @@ -5336,7 +5336,7 @@ { console.error("Open add-in by clicking on a highlighted entity, for this API to return something useful."); } -'Outlook.MessageRead#getSelectedEntities:member(1)': +'Office.MessageRead#getSelectedEntities:member(1)': - |- var entities = Office.context.mailbox.item.getSelectedEntities(); var entityTypesFound = 0; @@ -5379,7 +5379,7 @@ { console.error("Open add-in by clicking on a highlighted entity, for this API to return something useful."); } -'Outlook.AppointmentRead#getSelectedRegExMatches:member(1)': +'Office.AppointmentRead#getSelectedRegExMatches:member(1)': - |- var matches = Office.context.mailbox.item.getSelectedRegExMatches(); if (matches) { @@ -5388,7 +5388,7 @@ else { console.error("Open add-in by clicking on a highlighted regex match, for this API to return something useful."); } -'Outlook.MessageRead#getSelectedRegExMatches:member(1)': +'Office.MessageRead#getSelectedRegExMatches:member(1)': - |- var matches = Office.context.mailbox.item.getSelectedRegExMatches(); if (matches) { @@ -5397,7 +5397,7 @@ else { console.error("Open add-in by clicking on a highlighted regex match, for this API to return something useful."); } -'Outlook.Mailbox#convertToRestId:member(1)': +'Office.Mailbox#convertToRestId:member(1)': - >- Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function (result) { @@ -5434,7 +5434,7 @@ Office.MailboxEnums.RestVersion.v2_0); console.log("EWS ID (from REST ID): " + ewsId2); -'Outlook.Mailbox#restUrl:member': +'Office.Mailbox#restUrl:member': - >- Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function (result) { @@ -5471,7 +5471,7 @@ Office.MailboxEnums.RestVersion.v2_0); console.log("EWS ID (from REST ID): " + ewsId2); -'Outlook.Mailbox#getCallbackTokenAsync:member(1)': +'Office.Mailbox#getCallbackTokenAsync:member(1)': - >- Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function (result) { @@ -5488,7 +5488,7 @@ } xhr.send(); }); -'Outlook.Mailbox#ewsUrl:member': +'Office.Mailbox#ewsUrl:member': - >- console.log("EWS URL: " + Office.context.mailbox.ewsUrl); @@ -5509,7 +5509,7 @@ Office.MailboxEnums.RestVersion.v2_0); console.log("EWS ID (from REST ID): " + ewsId2); -'Outlook.Mailbox#convertToEwsId:member(1)': +'Office.Mailbox#convertToEwsId:member(1)': - >- console.log("EWS URL: " + Office.context.mailbox.ewsUrl); @@ -5530,7 +5530,7 @@ Office.MailboxEnums.RestVersion.v2_0); console.log("EWS ID (from REST ID): " + ewsId2); -'Outlook.AppointmentCompose#getItemIdAsync:member(2)': +'Office.AppointmentCompose#getItemIdAsync:member(2)': - |- Office.context.mailbox.item.getItemIdAsync(function (result) { if (result.status !== Office.AsyncResultStatus.Succeeded) { @@ -5539,7 +5539,7 @@ console.log(result.value); } }); -'Outlook.MessageCompose#getItemIdAsync:member(2)': +'Office.MessageCompose#getItemIdAsync:member(2)': - |- Office.context.mailbox.item.getItemIdAsync(function (result) { if (result.status !== Office.AsyncResultStatus.Succeeded) { @@ -5548,7 +5548,7 @@ console.log(result.value); } }); -'Outlook.Mailbox#makeEwsRequestAsync:member(1)': +'Office.Mailbox#makeEwsRequestAsync:member(1)': - >- var ewsId = Office.context.mailbox.item.itemId; @@ -5599,7 +5599,7 @@ Office.context.mailbox.makeEwsRequestAsync(request, function (result) { console.log(result); }); -'Outlook.Mailbox#getCallbackTokenAsync:member(2)': +'Office.Mailbox#getCallbackTokenAsync:member(2)': - |- Office.context.mailbox.getCallbackTokenAsync(function (result) { if (result.status !== Office.AsyncResultStatus.Succeeded) { @@ -5608,7 +5608,7 @@ console.log(result.value); } }); -'Outlook.Mailbox#getUserIdentityTokenAsync:member(1)': +'Office.Mailbox#getUserIdentityTokenAsync:member(1)': - |- Office.context.mailbox.getUserIdentityTokenAsync(function (result) { if (result.status !== Office.AsyncResultStatus.Succeeded) { From 5051f4adcb4da5c3e78cf75ba5a6a0435052cc79 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 10 Feb 2020 15:39:01 -0800 Subject: [PATCH 235/660] [Outlook] (typo) Fix typo (#394) --- .../35-notifications/add-getall-remove.yaml | 14 ++--- snippet-extractor-output/snippets.yaml | 52 +++++++++---------- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/samples/outlook/35-notifications/add-getall-remove.yaml b/samples/outlook/35-notifications/add-getall-remove.yaml index 53282fc55..813f4a12a 100644 --- a/samples/outlook/35-notifications/add-getall-remove.yaml +++ b/samples/outlook/35-notifications/add-getall-remove.yaml @@ -15,7 +15,7 @@ script: $("#remove").click(remove); function addProgress() { - var id = $("#nofiticationId").val(); + var id = $("#notificationId").val(); var details = { type: "progressIndicator", @@ -25,7 +25,7 @@ script: } function addInformational() { - var id = $("#nofiticationId").val(); + var id = $("#notificationId").val(); var details = { type: "informationalMessage", @@ -37,7 +37,7 @@ script: } function addInformationalPersisted() { - var id = $("#nofiticationId").val(); + var id = $("#notificationId").val(); var details = { type: "informationalMessage", @@ -49,7 +49,7 @@ script: } function addError() { - var id = $("#nofiticationId").val(); + var id = $("#notificationId").val(); var details = { type: "errorMessage", @@ -63,7 +63,7 @@ script: } function replace() { - var id = $("#nofiticationId").val(); + var id = $("#notificationId").val(); Office.context.mailbox.item.notificationMessages.replaceAsync( id, { @@ -76,7 +76,7 @@ script: } function remove() { - var id = $("#nofiticationId").val(); + var id = $("#notificationId").val(); Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); } @@ -94,7 +94,7 @@ template:

    Try it out

    - +
    - language: html -style: - content: | - /* Your style goes here */ - 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/01-compose-basics/get-selected-text.yaml b/samples/outlook/01-compose-basics/get-selected-text.yaml deleted file mode 100644 index 74d1babd6..000000000 --- a/samples/outlook/01-compose-basics/get-selected-text.yaml +++ /dev/null @@ -1,43 +0,0 @@ -id: outlook-compose-basics-get-selected-text -name: Get Selected Text -description: Outputs the text selected from either the body or subject. -host: OUTLOOK -api_set: {} -script: - content: | - $("#run").click(run); - - function run() { - let item = Office.context.mailbox.item as Office.ItemCompose; - item.getSelectedDataAsync(Office.CoercionType.Text, (result: Office.AsyncResult) => { - if (result.status === Office.AsyncResultStatus.Failed) { - console.error(`Action failed with error: ${result.error.message}`); - return; - } - console.log(`Selected Text: ${result.value.data}`); - }) - } - language: typescript -template: - content: | - - - language: html -style: - content: | - /* Your style goes here */ - 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/01-compose-basics/set-selected-text.yaml b/samples/outlook/01-compose-basics/set-selected-text.yaml deleted file mode 100644 index 62d6e5641..000000000 --- a/samples/outlook/01-compose-basics/set-selected-text.yaml +++ /dev/null @@ -1,41 +0,0 @@ -id: outlook-compose-basics-set-selected-text -name: Set Selected Text -description: Changes the value of selected text in body or subject. -host: OUTLOOK -api_set: {} -script: - content: | - $("#run").click(run); - - function run() { - let item = Office.context.mailbox.item as Office.ItemCompose; - item.setSelectedDataAsync("Hello World!", (result: Office.AsyncResult) => { - if (result.status === Office.AsyncResultStatus.Failed) { - console.error(`Action failed with error: ${result.error.message}`) - } - }) - } - language: typescript -template: - content: | - - - language: html -style: - content: | - /* Your style goes here */ - 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-set-item-subject.yaml b/samples/outlook/90-other-item-apis/get-set-item-subject.yaml new file mode 100644 index 000000000..5b051468a --- /dev/null +++ b/samples/outlook/90-other-item-apis/get-set-item-subject.yaml @@ -0,0 +1,73 @@ +id: outlook-other-item-apis-get-set-item-subject +name: Get and set the subject (Compose) +description: Gets and sets the subject of an item in compose mode +host: OUTLOOK +api_set: {} +script: + content: | + $("#get").click(get); + $("#set").click(set); + + function get() { + let item = Office.context.mailbox.item as Office.ItemCompose; + item.subject.getAsync((result: Office.AsyncResult) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Action failed with message ${result.error.message}`); + return; + } + console.log(`Subject is ${result.value}`); + }) + } + + function set() { + let item = Office.context.mailbox.item as Office.ItemCompose; + let subject = 'Hello World!'; + item.subject.setAsync(subject, (result: Office.AsyncResult) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Action failed with message ${result.error.message}`); + return; + } + console.log(`Subject is ${subject}`); + }); + } + language: typescript +template: + content: | +
    +

    This sample shows how to set and get the subject of a compose item.

    +
    +
    +

    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/outlook.json b/view/outlook.json index e67576062..415b912d1 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -1,7 +1,4 @@ { - "outlook-compose-basics-get-item-subject": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/01-compose-basics/get-item-subject.yaml", - "outlook-compose-basics-get-selected-text": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/01-compose-basics/get-selected-text.yaml", - "outlook-compose-basics-set-selected-text": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/01-compose-basics/set-selected-text.yaml", "outlook-roaming-settings-roaming-settings": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/10-roaming-settings/roaming-settings.yaml", "outlook-item-custom-properties-load-set-get-save": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/15-item-custom-properties/load-set-get-save.yaml", "outlook-item-body-get-selected-data": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/20-item-body/get-selected-data.yaml", @@ -47,5 +44,6 @@ "outlook-tokens-and-service-calls-basic-rest-cors": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml", "outlook-tokens-and-service-calls-make-ews-request-async": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml" + "outlook-tokens-and-service-calls-item-id-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml", + "outlook-other-item-apis-get-set-item-subject": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-set-item-subject.yaml" } \ No newline at end of file From f02a5a75ab930371aafe474bddd320ab93a5a4bf Mon Sep 17 00:00:00 2001 From: Riwut Libinuko Date: Tue, 25 Feb 2020 02:45:53 +0800 Subject: [PATCH 239/660] Search Wiki snippet for PowerPoint (#365) * Search Wiki snippet * Update playlist * Update yaml indent * Update description, Move to scenarios instead of custom-function * Rename folder * Rename file and folder * Update powerpoint playlist ref * Update to standard TS , use let or const * Add comments to the function * Expand error log, and update description * Update instruction * Update text * Add copyright --- playlists/powerpoint.yaml | 8 + .../scenarios/searches-wikipedia-api.yaml | 237 ++++++++++++++++++ 2 files changed, 245 insertions(+) create mode 100644 samples/powerpoint/scenarios/searches-wikipedia-api.yaml diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index e3a97d4f5..afc4e6faa 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -44,3 +44,11 @@ https://raw.githubusercontent.com////samples/powerpoint/basics/insert-svg.yaml group: Basics api_set: {} +- id: powerpoint-scenarios-searches-wikipedia-api + name: Searches Wikipedia + fileName: searches-wikipedia-api.yaml + description: Searches Wikipedia based on the selected text in the presentation. + rawUrl: >- + https://raw.githubusercontent.com////samples/powerpoint/scenarios/searches-wikipedia-api.yaml + group: Scenarios + api_set: {} \ No newline at end of file diff --git a/samples/powerpoint/scenarios/searches-wikipedia-api.yaml b/samples/powerpoint/scenarios/searches-wikipedia-api.yaml new file mode 100644 index 000000000..fa1b00259 --- /dev/null +++ b/samples/powerpoint/scenarios/searches-wikipedia-api.yaml @@ -0,0 +1,237 @@ +order: 1 +id: powerpoint-scenarios-searches-wikipedia-api +name: Searches Wikipedia +description: Searches Wikipedia based on the selected text in the presentation. +author: cakriwut +host: POWERPOINT +api_set: {} +script: + content: | + /* + * Copyright (c) Riwut Libinuko. All rights reserved. Licensed under the MIT license. + */ + + declare let moment: any; + $("#search").click(run); + + async function run() { + Office.context.document.getSelectedDataAsync(Office.CoercionType.Text, {}, getSelectedText); + } + + /* Extract selected text and call SearchWiki */ + function getSelectedText(result) { + $("#result").empty(); + $("#result").append('
      '); + if (result.status === Office.AsyncResultStatus.Succeeded) { + searchWiki(result.value); + } else { + console.error(result.error.message); + } + } + + /* Searching Wiki */ + + function searchWiki(pattern) { + let url = build_wiki_search_url(http://github.com/pattern); + + fetch(url) + .then((response) => { + return 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); + }); + 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)); + } + }); + }); + } + + // 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); + fetch(pageinfo) + .then((response) => { + return 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); + } + }) + .then((data) => { + getWikiImages(pageid, itemHTML); + }); + } + + // 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); + fetch(pageInfo) + .then((response) => { + return 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; + } else { + let img = $(itemHTML) + .find(".ms-ListItem-image") + .data("image"); + pageInfo = build_wiki_file_search(img); + let pageInfoResult = await fetch(pageInfo); + 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(''); + } + } + }); + } + + /* Wikipedia API query */ + function wiki_base(pattern) { + const base_url = "https://en.wikipedia.org/w/api.php"; + const base_query = "?origin=*&action=query&format=json&prop="; + return base_url + base_query + pattern; + } + + /* Wikipedia Search Query pattern */ + function build_wiki_search_url(http://github.com/pattern) { + let 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="; + return wiki_base(qry + pattern); + } + + /* Wikipedia File Query pattern */ + function build_wiki_file_search(pattern) { + let 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="; + return wiki_base(qry + pattern); + } + + /* Render */ + function build_list_item(title, pageid, summary, ts) { + return ( + '
    • ' + + '
      ' + + '' + + title + + "" + + "" + + summary + + "" + + '
      ' + + '
      ' + + '
      ' + + ' ' + + "
      " + + '
      ' + + ' ' + + "
      " + + "
      " + + "
    • " + ); + } + language: typescript +template: + content: |- +
      +

      Search Wikipedia

      +
      + +
      +

      This sample shows how to query external API (Wikipedia) with the text currently selected in the presentation.

      +
      + +
      +

      Try it out

      +

      Select any text in the presentation and press Search to see related Wikipedia entries.

      +

      The search result will be provided by Wikipedia API.

      +
        +
      1. Click Search button:

        + +
      2. +
      +
      + +
      +

      Result

      +
      +
      +
      + 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 + + https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js \ No newline at end of file From 8753c224ddd3485bf11968b663e861467e8a1978 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Mon, 24 Feb 2020 11:58:31 -0800 Subject: [PATCH 240/660] Fix snippet title grammar (#401) --- playlists/powerpoint.yaml | 4 ++-- samples/powerpoint/scenarios/searches-wikipedia-api.yaml | 2 +- view/powerpoint.json | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index afc4e6faa..11420003b 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -45,10 +45,10 @@ group: Basics api_set: {} - id: powerpoint-scenarios-searches-wikipedia-api - name: Searches Wikipedia + name: Search Wikipedia fileName: searches-wikipedia-api.yaml description: Searches Wikipedia based on the selected text in the presentation. rawUrl: >- https://raw.githubusercontent.com////samples/powerpoint/scenarios/searches-wikipedia-api.yaml group: Scenarios - api_set: {} \ No newline at end of file + api_set: {} diff --git a/samples/powerpoint/scenarios/searches-wikipedia-api.yaml b/samples/powerpoint/scenarios/searches-wikipedia-api.yaml index fa1b00259..6930599d1 100644 --- a/samples/powerpoint/scenarios/searches-wikipedia-api.yaml +++ b/samples/powerpoint/scenarios/searches-wikipedia-api.yaml @@ -1,6 +1,6 @@ order: 1 id: powerpoint-scenarios-searches-wikipedia-api -name: Searches Wikipedia +name: Search Wikipedia description: Searches Wikipedia based on the selected text in the presentation. author: cakriwut host: POWERPOINT diff --git a/view/powerpoint.json b/view/powerpoint.json index 6933adf99..5f0e6cb1f 100644 --- a/view/powerpoint.json +++ b/view/powerpoint.json @@ -3,5 +3,6 @@ "powerpoint-create-presentation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/powerpoint/basics/create-presentation.yaml", "powerpoint-basics-get-slide-metadata": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/powerpoint/basics/get-slide-metadata.yaml", "powerpoint-basics-insert-image": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/powerpoint/basics/insert-image.yaml", - "powerpoint-basics-insert-svg": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/powerpoint/basics/insert-svg.yaml" + "powerpoint-basics-insert-svg": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/powerpoint/basics/insert-svg.yaml", + "powerpoint-scenarios-searches-wikipedia-api": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/powerpoint/scenarios/searches-wikipedia-api.yaml" } \ No newline at end of file From 565a39ac3333a2ec30166376a3eec3e4b43c76d2 Mon Sep 17 00:00:00 2001 From: Riwut Libinuko Date: Tue, 3 Mar 2020 05:19:18 +0800 Subject: [PATCH 241/660] Excel scenarios currency converter (#400) * Add new scenarios Currency Converter for Excel * Update the logic, and instruction * Remove package log * Update description, calling autofitColumns * Update Trx to Transaction, and other text * Rename salesTable to transactionTable * update script * Update text * update text * Update text * Validated * Use for let x of arr instead * Simplify context.sync() * Implement promise.all * update info * Fix typo * Remove await in fetch * Add explicit await context.sync() in the last ops --- playlists/excel.yaml | 11 + .../90-scenarios/currency-converter.yaml | 194 ++++++++++++++++++ view/excel.json | 1 + 3 files changed, 206 insertions(+) create mode 100644 samples/excel/90-scenarios/currency-converter.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 175111ee4..177094b9c 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -951,6 +951,17 @@ 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////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 diff --git a/samples/excel/90-scenarios/currency-converter.yaml b/samples/excel/90-scenarios/currency-converter.yaml new file mode 100644 index 000000000..7e57e9818 --- /dev/null +++ b/samples/excel/90-scenarios/currency-converter.yaml @@ -0,0 +1,194 @@ +order: 5 +id: excel-scenarios-currency-converter +name: Currency Converter +description: Uses an exchange rate API to convert currency values based on their original transaction times. +author: cakriwut +host: EXCEL +api_set: + ExcelApi: '1.4' +script: + content: | + /* + * Copyright (c) Riwut Libinuko. All rights reserved. Licensed under the MIT license. + */ + + declare let moment: any; + const tableName = "TransactionTable"; + + let tableSetup: Record = {}; + + $("#convert").click(() => tryCatch(convert)); + $("#setup").click(() => tryCatch(setupSample)); + + /** Main converting function **/ + async function convert() { + await Excel.run(async (context) => { + const table = context.workbook.tables.getItem(tableName); + table.columns.load("items"); + table.rows.load("items,value"); + await context.sync(); + + if (!isTableValid(table.columns.items)) { + console.error( + 'Error: Some of default table header is missing. Required headers: \r\n"Currency","Price (Currency)","Transaction Date","Base","Price in Base"' + ); + return; + } + + const convertedCurrency = await Promise.all( + table.rows.items.map( (row,idx) => { + const priceInBase = row.values[0][tableSetup["Price in Base"]]; + const priceInCurrency = row.values[0][tableSetup["Price (Currency)"]]; + const transactionDate = row.values[0][tableSetup["Transaction Date"]]; + const currency = row.values[0][tableSetup["Currency"]]; + const baseCurrency = row.values[0][tableSetup["Base"]]; + + if (priceInBase === "") { + const dateMoment = moment.fromOADate(transactionDate); + const period = dateMoment.format("YYYY-MM-DD"); + const queryUrl = convertValue(currency, baseCurrency, period, period); + + const result = fetch(queryUrl).then(response => response.json()); + return result; + } else { + return -1; + } + }) + ); + + let index =0; + let skippedRows = []; + for (let row of table.rows.items) { + const priceBaseRange = row.getRange().getCell(0, tableSetup["Price in Base"]); + const priceInCurrency = row.values[0][tableSetup["Price (Currency)"]]; + const baseCurrency = row.values[0][tableSetup["Base"]]; + + if (convertedCurrency[index] == -1) { + skippedRows.push(index+1); + } else { + const converted = convertedCurrency[index].rates[baseCurrency] * priceInCurrency; + priceBaseRange.values = [[converted]]; + } + index++; + } + + if(skippedRows.length > 0) { + if(skippedRows.length == 1) { + console.info(`Row: ${skippedRows.join(',')} has been converted. Skipped.`); + } else { + console.info(`Rows: ${skippedRows.join(',')} have been converted. Skipped.`); + } + } + + await context.sync(); + }); + } + + /** Check if the table contains the necessary columns. + *** These columns can be in any order within the + **/ + function isTableValid(items: Excel.TableColumn[]) { + // Build the column index, search table header + // Currency - origin currency + // Price (Currency) - price in origin currency + // Transaction Date - transaction date + // Base - home currency + // Price in Base - price in base currency + items.forEach((col, idx, arr) => { + tableSetup[col.name] = idx; + }); + if (tableSetup['Currency'] === undefined || tableSetup['Price (Currency)'] === undefined || tableSetup['Transaction Date'] === undefined || tableSetup['Base'] === undefined || tableSetup['Price in Base'] === undefined) { + return false; + } + return true; + } + + /** Request currency exchange on specific date **/ + function convertValue(currencyOrig, currencyBase, start, end) { + // GET https://api.exchangeratesapi.io/latest?symbols=SGD,USD&base=SGD&start_at=2019-10-05&end_at=2019-10-05 + const baseUrl = "https://api.exchangeratesapi.io/latest"; + const query = + "?base=" + currencyOrig + "&symbols=" + currencyBase + "," + currencyOrig + "&start_at=" + start + "&end_at=" + end; + return baseUrl + query; + } + + /** 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); + } + } + /* Create sample data */ + /* Default header */ + /* "Currency","Price (Currency)","Transaction Date","Base","Price in Base" */ + async function setupSample() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + const transactionTable = sheet.tables.add("A1:F1", true); + transactionTable.name = tableName; + transactionTable.getHeaderRowRange().values = [["Product", "Currency", "Price (Currency)", "Transaction Date", "Base", "Price in Base"]]; + transactionTable.rows.add(null, [ + ["Frames", "MYR", 5000, "2019-10-05", "SGD", null], + ["Chains", "CNY", 12000, "2019-10-04", "SGD", null] + ]); + transactionTable.getRange().format.autofitColumns(); + sheet.activate(); + }); + } + language: typescript +template: + 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 + exchange rate data published by the European Central Bank. Click "Convert"

      + +
      + 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 + moment@2.18.1 + moment-msdate@0.2.2 \ No newline at end of file diff --git a/view/excel.json b/view/excel.json index c118237da..086a4e1da 100644 --- a/view/excel.json +++ b/view/excel.json @@ -101,6 +101,7 @@ "excel-scenarios-report-generation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/multiple-property-set.yaml", "excel-scenarios-working-with-dates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/working-with-dates.yaml", + "excel-scenarios-currency-converter": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/currency-converter.yaml", "excel-just-for-fun-patterns": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/99-just-for-fun/patterns.yaml", "excel-just-for-fun-gradient": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/99-just-for-fun/gradient.yaml", "excel-just-for-fun-path-finder-game": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/99-just-for-fun/path-finder-game.yaml", From 07ef05f119d26d6b31db6555195bb8e73801ef6e Mon Sep 17 00:00:00 2001 From: AlexJerabek Date: Thu, 12 Mar 2020 16:27:39 -0700 Subject: [PATCH 242/660] Workbook calculation snippet --- playlists/excel.yaml | 11 ++ .../85-preview-apis/comment-mentions.yaml | 2 +- .../85-preview-apis/comment-resolution.yaml | 2 +- .../85-preview-apis/workbook-calculation.yaml | 180 ++++++++++++++++++ .../workbook-insert-external-worksheets.yaml | 2 +- .../workbook-save-and-close.yaml | 2 +- view/excel.json | 1 + 7 files changed, 196 insertions(+), 4 deletions(-) create mode 100644 samples/excel/85-preview-apis/workbook-calculation.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 177094b9c..ebc7156b7 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -875,6 +875,17 @@ group: Worksheet api_set: ExcelApi: '1.1' +- id: excel-workbook-calculation + name: Calculations + fileName: workbook-calculation.yaml + description: >- + Demonstrates the calculation APIs of the workbook: worksheet-level + calulcation events and application-level calculation controls. + rawUrl: >- + https://raw.githubusercontent.com////samples/excel/85-preview-apis/workbook-calculation.yaml + group: Preview APIs + api_set: + ExcelApi: '1.11' - id: excel-comment-mentions name: Comment mentions fileName: comment-mentions.yaml diff --git a/samples/excel/85-preview-apis/comment-mentions.yaml b/samples/excel/85-preview-apis/comment-mentions.yaml index 5739d5e47..981d1d668 100644 --- a/samples/excel/85-preview-apis/comment-mentions.yaml +++ b/samples/excel/85-preview-apis/comment-mentions.yaml @@ -1,4 +1,4 @@ -order: 1 +order: 2 id: excel-comment-mentions name: Comment mentions description: Mentions someone in a comment. diff --git a/samples/excel/85-preview-apis/comment-resolution.yaml b/samples/excel/85-preview-apis/comment-resolution.yaml index e85757218..178b12386 100644 --- a/samples/excel/85-preview-apis/comment-resolution.yaml +++ b/samples/excel/85-preview-apis/comment-resolution.yaml @@ -1,4 +1,4 @@ -order: 2 +order: 3 id: excel-comment-resolution name: Comment resolution description: Resolves and reopens a comment thread. diff --git a/samples/excel/85-preview-apis/workbook-calculation.yaml b/samples/excel/85-preview-apis/workbook-calculation.yaml new file mode 100644 index 000000000..e9320c38f --- /dev/null +++ b/samples/excel/85-preview-apis/workbook-calculation.yaml @@ -0,0 +1,180 @@ +order: 1 +id: excel-workbook-calculation +name: Calculations +description: 'Demonstrates the calculation APIs of the workbook: worksheet-level calulcation events and application-level calculation controls.' +host: EXCEL +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)); + async function registerOnCalculatedHandler() { + await Excel.run(async (context) => { + let sheet = context.workbook.worksheets.getItem("Sample"); + sheet.onCalculated.add(onCalculated); + await context.sync(); + console.log("Added worksheet selection changed event handler."); + }); + } + async function onCalculated(event: Excel.WorksheetCalculatedEventArgs) { + await Excel.run(async (context) => { + console.log(`The Range ${event.address} has recalculated.`); + }); + } + async function recalculateSingle() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const randomRow = Math.floor(Math.random() * 6); + const randomColumn = Math.floor(Math.random() * 4); + const randomResult = Math.floor(Math.random() * 10000); + + const cellToChange = sheet.getRange("B2:E7").getCell(randomRow, randomColumn); + + cellToChange.load("address"); + await context.sync(); + console.log(`Changing cell ${cellToChange.address}`); + + cellToChange.values = [[randomResult]]; + }); + } + async function recalculateColumn() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + const columnToChange = sheet.getRange("B2:B7"); + + columnToChange.load("address"); + await context.sync(); + console.log(`Changing Range ${columnToChange.address}`); + + columnToChange.values = [ + [Math.floor(Math.random() * 10000)], + [Math.floor(Math.random() * 10000)], + [Math.floor(Math.random() * 10000)], + [Math.floor(Math.random() * 10000)], + [Math.floor(Math.random() * 10000)], + [Math.floor(Math.random() * 10000)] + ]; + }); + } + async function switchToManualCalculations(event: Excel.WorksheetCalculatedEventArgs) { + 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); + }); + } + async function switchToAutomaticCalculations(event: Excel.WorksheetCalculatedEventArgs) { + await Excel.run(async (context) => { + context.application.calculationMode = Excel.CalculationMode.automatic; + context.application.load("calculationMode"); + await context.sync(); + console.log("Current calculation mode: " + context.application.calculationMode); + }); + } + async function forceCalculation(event: Excel.WorksheetCalculatedEventArgs) { + await Excel.run(async (context) => { + context.application.calculate(Excel.CalculationType.recalculate); + 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 salesTable = sheet.tables.add("A1:F1", true); + salesTable.name = "SalesTable"; + + salesTable.getHeaderRowRange().values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4", "Total"]]; + + salesTable.rows.add(null, [ + ["Frames", 5000, 7000, 6544, 4377, "=SUM(B2:E2)"], + ["Saddles", 400, 323, 276, 651, "=SUM(B3:E3)"], + ["Brake levers", 12000, 8766, 8456, 9812, "=SUM(B4:E4)"], + ["Chains", 1550, 1088, 692, 853, "=SUM(B5:E5)"], + ["Mirrors", 225, 600, 923, 544, "=SUM(B6:E6)"], + ["Spokes", 6005, 7634, 4589, 8765, "=SUM(B7:E7)"] + ]); + + 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 the calculation APIs.

      +
      + +
      +

      Set up

      + +
      + +
      +

      Try it out

      + +

      Calculation events

      + +

      Use these buttons to change data in the table or manually edit the worksheet.

      + + + +

      Manual calculations

      +

      Try switching to manual calculation, then editing the workbook.

      + + + +
      + 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/workbook-insert-external-worksheets.yaml b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml index dccebf63b..cb8cece62 100644 --- a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml +++ b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml @@ -1,4 +1,4 @@ -order: 3 +order: 4 id: excel-workbook-insert-external-worksheets name: Insert external worksheets description: Inserts worksheets from another workbook into the current workbook. diff --git a/samples/excel/85-preview-apis/workbook-save-and-close.yaml b/samples/excel/85-preview-apis/workbook-save-and-close.yaml index 3347a8c1a..662415e09 100644 --- a/samples/excel/85-preview-apis/workbook-save-and-close.yaml +++ b/samples/excel/85-preview-apis/workbook-save-and-close.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 5 id: excel-workbook-save-and-close name: Save and close description: Saves and closes a workbook. diff --git a/view/excel.json b/view/excel.json index 086a4e1da..4e6cbb9f0 100644 --- a/view/excel.json +++ b/view/excel.json @@ -93,6 +93,7 @@ "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-visibility.yaml", + "excel-workbook-calculation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-calculation.yaml", "excel-comment-mentions": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/comment-mentions.yaml", "excel-comment-resolution": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/comment-resolution.yaml", "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", From 1334a4bcbd5643170594834d0701b50e14a3aa09 Mon Sep 17 00:00:00 2001 From: AlexJerabek Date: Fri, 13 Mar 2020 09:16:36 -0700 Subject: [PATCH 243/660] Applying feedback --- playlists/excel.yaml | 2 +- .../85-preview-apis/workbook-calculation.yaml | 23 +++++++++++++++---- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index ebc7156b7..a8d597422 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -880,7 +880,7 @@ fileName: workbook-calculation.yaml description: >- Demonstrates the calculation APIs of the workbook: worksheet-level - calulcation events and application-level calculation controls. + calculation events and application-level calculation controls. rawUrl: >- https://raw.githubusercontent.com////samples/excel/85-preview-apis/workbook-calculation.yaml group: Preview APIs diff --git a/samples/excel/85-preview-apis/workbook-calculation.yaml b/samples/excel/85-preview-apis/workbook-calculation.yaml index e9320c38f..8447289f6 100644 --- a/samples/excel/85-preview-apis/workbook-calculation.yaml +++ b/samples/excel/85-preview-apis/workbook-calculation.yaml @@ -1,7 +1,7 @@ order: 1 id: excel-workbook-calculation name: Calculations -description: 'Demonstrates the calculation APIs of the workbook: worksheet-level calulcation events and application-level calculation controls.' +description: 'Demonstrates the calculation APIs of the workbook: worksheet-level calculation events and application-level calculation controls.' host: EXCEL api_set: ExcelApi: '1.11' @@ -13,14 +13,19 @@ script: let sheet = context.workbook.worksheets.getItem("Sample"); sheet.onCalculated.add(onCalculated); await context.sync(); + console.log("Added worksheet selection changed event handler."); }); } + async function onCalculated(event: Excel.WorksheetCalculatedEventArgs) { await Excel.run(async (context) => { + // `event.address` returns the address of the range that completed calculation. + // If multiple ranges completed calculation, the string is a comma-separated list of those range addresses. console.log(`The Range ${event.address} has recalculated.`); }); } + async function recalculateSingle() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -35,16 +40,17 @@ script: console.log(`Changing cell ${cellToChange.address}`); cellToChange.values = [[randomResult]]; + await context.sync(); }); } + async function recalculateColumn() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - const columnToChange = sheet.getRange("B2:B7"); - columnToChange.load("address"); await context.sync(); + console.log(`Changing Range ${columnToChange.address}`); columnToChange.values = [ @@ -55,30 +61,36 @@ script: [Math.floor(Math.random() * 10000)], [Math.floor(Math.random() * 10000)] ]; + await context.sync(); }); } + async function switchToManualCalculations(event: Excel.WorksheetCalculatedEventArgs) { 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); }); } + async function switchToAutomaticCalculations(event: Excel.WorksheetCalculatedEventArgs) { await Excel.run(async (context) => { context.application.calculationMode = Excel.CalculationMode.automatic; context.application.load("calculationMode"); await context.sync(); + console.log("Current calculation mode: " + context.application.calculationMode); }); } + async function forceCalculation(event: Excel.WorksheetCalculatedEventArgs) { await Excel.run(async (context) => { context.application.calculate(Excel.CalculationType.recalculate); await context.sync(); }); - } + }\ async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -103,7 +115,8 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ async function tryCatch(callback) { + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); } catch (error) { From e040615de6315e59c152c7465a3afab6a6e1a723 Mon Sep 17 00:00:00 2001 From: AlexJerabek Date: Fri, 13 Mar 2020 09:19:17 -0700 Subject: [PATCH 244/660] Removing errant backslash --- samples/excel/85-preview-apis/workbook-calculation.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/samples/excel/85-preview-apis/workbook-calculation.yaml b/samples/excel/85-preview-apis/workbook-calculation.yaml index 8447289f6..5db092311 100644 --- a/samples/excel/85-preview-apis/workbook-calculation.yaml +++ b/samples/excel/85-preview-apis/workbook-calculation.yaml @@ -90,7 +90,8 @@ script: context.application.calculate(Excel.CalculationType.recalculate); await context.sync(); }); - }\ + } + async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); From 534b2c119e0040d7f994e7cbc8035bb568b58b3f Mon Sep 17 00:00:00 2001 From: Emily Tencza <51380256+emtencza@users.noreply.github.com> Date: Fri, 13 Mar 2020 10:24:09 -0700 Subject: [PATCH 245/660] Adding Signature API Samples (#403) * Adding Signature API samples * Feedback changes Co-authored-by: Elizabeth Samuel --- playlists/outlook.yaml | 11 ++ .../work-with-client-signatures.yaml | 120 ++++++++++++++++++ view/outlook.json | 3 +- 3 files changed, 133 insertions(+), 1 deletion(-) create mode 100644 samples/outlook/99-preview-apis/work-with-client-signatures.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 62ed151a3..4387ebb84 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -439,3 +439,14 @@ https://raw.githubusercontent.com////samples/outlook/90-other-item-apis/get-set-item-subject.yaml group: Other Item APIs api_set: {} +- 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////samples/outlook/99-preview-apis/work-with-client-signatures.yaml + group: Preview APIs + api_set: + Mailbox: preview diff --git a/samples/outlook/99-preview-apis/work-with-client-signatures.yaml b/samples/outlook/99-preview-apis/work-with-client-signatures.yaml new file mode 100644 index 000000000..753e72a67 --- /dev/null +++ b/samples/outlook/99-preview-apis/work-with-client-signatures.yaml @@ -0,0 +1,120 @@ +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 +script: + content: | + $("#isClientSignatureEnabled").click(isClientSignatureEnabled); + $("#disableClientSignature").click(disableClientSignature); + $("#getComposeType").click(getComposeType); + $("#setSignature").click(setSignature); + + function isClientSignatureEnabled() { + // Check if the client signature is currently enabled. + 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); + } + }); + } + + function disableClientSignature() { + // 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); + } + }); + } + + function getComposeType() { + // Get the compose type of the current item (mail only). + 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); + } + }); + } + + function setSignature() { + // 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); + } + }); + } + language: typescript +template: + content: |- +
      +

      This sample shows how to check if the client signature is enabled, disable the client signature, get the compose + type, and set the signature. +

      + 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 \ No newline at end of file diff --git a/view/outlook.json b/view/outlook.json index 415b912d1..b8e4b4fe8 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -45,5 +45,6 @@ "outlook-tokens-and-service-calls-make-ews-request-async": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml", - "outlook-other-item-apis-get-set-item-subject": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-set-item-subject.yaml" + "outlook-other-item-apis-get-set-item-subject": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-set-item-subject.yaml", + "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/work-with-client-signatures.yaml" } \ No newline at end of file From 4a6b2b5c519dafb0c49bc9e1c73c2c7a7b84ffd1 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 13 Mar 2020 15:58:20 -0700 Subject: [PATCH 246/660] [Admin] (Outlook) Map Signature APIs (#406) --- snippet-extractor-metadata/outlook.xlsx | Bin 16963 -> 17252 bytes snippet-extractor-output/snippets.yaml | 79 ++++++++++++++++++++++++ 2 files changed, 79 insertions(+) diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 81d110c687eee9229e0e9829107f0e831bce6c55..96b6f64ca124a8ffa281032f1329ed94aad7f7b2 100644 GIT binary patch delta 8660 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 yo- + // 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.AppointmentCompose#disableClientSignatureAsync:member(2)': + - >- + // 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#disableClientSignatureAsync:member(2)': + - >- + // 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.AppointmentCompose#isClientSignatureEnabledAsync:member(2)': + - >- + // Check if the client signature is currently enabled. + + 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#isClientSignatureEnabledAsync:member(2)': + - >- + // Check if the client signature is currently enabled. + + 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); + } + }); 'Word.Body#search:member(1)': - |- await Word.run(async (context) => { From 59e2e24de762cec93cc050539dce8bbe4065c7fc Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Tue, 17 Mar 2020 16:29:16 -0700 Subject: [PATCH 247/660] Removing autofitColumns calls from copy and move snippets (#409) --- samples/excel/42-range/range-copyfrom.yaml | 23 +++++++++++----------- snippet-extractor-output/snippets.yaml | 8 ++++---- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/samples/excel/42-range/range-copyfrom.yaml b/samples/excel/42-range/range-copyfrom.yaml index fee1d352d..0db6cc1ac 100644 --- a/samples/excel/42-range/range-copyfrom.yaml +++ b/samples/excel/42-range/range-copyfrom.yaml @@ -20,8 +20,8 @@ script: async function copyAll() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); + // Place a label in front of the copied data. sheet.getRange("F1").values = [["Copied Range"]]; - sheet.getRange("F1").format.autofitColumns(); // Copy a range starting at a single cell destination. sheet.getRange("G1").copyFrom("A1:E1"); @@ -32,8 +32,8 @@ script: async function copyFormula() { 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"]]; - sheet.getRange("F2").format.autofitColumns(); // Copy a range preserving the formulas. // Note: non-formula values are copied over as is. @@ -45,8 +45,8 @@ script: async function copyFormulaResult() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); + // Place a label in front of the copied data. sheet.getRange("F3").values = [["Copied Formula Result"]]; - sheet.getRange("F3").format.autofitColumns(); // Copy the resulting value of a formula. sheet.getRange("G3").copyFrom("E1", Excel.RangeCopyType.values); @@ -57,8 +57,8 @@ script: async function copySingleAcrossRange() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); + // Place a label in front of the copied data. sheet.getRange("F4").values = [["Single Source"]]; - sheet.getRange("F4").format.autofitColumns(); // Copy a single cell across an entire range. sheet.getRange("G4:K4").copyFrom("A1", Excel.RangeCopyType.values); @@ -69,8 +69,8 @@ script: async function copyOnlyFormat() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); + // Place a label in front of the copied data. sheet.getRange("F5").values = [["Copied Formatting"]]; - sheet.getRange("F5").format.autofitColumns(); // Copy only the formatting of the cells. sheet.getRange("G5").copyFrom("A1:E1", Excel.RangeCopyType.formats); @@ -81,8 +81,8 @@ script: async function skipBlanks() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); + // Place a label in front of the copied data. sheet.getRange("F6").values = [["Copied Without Blanks"]]; - sheet.getRange("F6").format.autofitColumns(); // Fill the destination range so we can see the blank being skipped. sheet.getRange("G6:K6").values = [["Old Data", "Old Data", "Old Data", "Old Data", "Old Data"]] @@ -99,8 +99,8 @@ script: async function transpose() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); + // Place a label in front of the transposed data. sheet.getRange("F7").values = [["Transpose"]]; - sheet.getRange("F7").format.autofitColumns(); // Transpose a horizontal range of data into a vertical range. sheet.getRange("G7").copyFrom("A1:E1", @@ -114,10 +114,10 @@ script: async function move() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - sheet.getRange("F12").values = [["Moved Range"]]; - sheet.getRange("F12").format.autofitColumns(); + // Place a label in front of the moved data. + sheet.getRange("F12").values = [["Moved Range:"]]; - // Move a range to the specified location. + // Move the range from A1:E1 to G12:K12. sheet.getRange("A1:E1").moveTo("G12"); await context.sync(); }); @@ -134,7 +134,8 @@ script: sheet.getRange("E1").formulas = [["=SUM(A1:D1)"]]; sheet.getRange("E1").format.font.bold = true; sheet.getRange("E1").format.fill.color = "LightGreen"; - + sheet.getRange("F1").format.columnWidth = 120; + sheet.activate(); await context.sync(); }); diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 3fbde6ff2..2f5ecd7cc 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -2075,8 +2075,8 @@ - |- 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"]]; - sheet.getRange("F2").format.autofitColumns(); // Copy a range preserving the formulas. // Note: non-formula values are copied over as is. @@ -2362,10 +2362,10 @@ - |- await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - sheet.getRange("F12").values = [["Moved Range"]]; - sheet.getRange("F12").format.autofitColumns(); + // Place a label in front of the moved data. + sheet.getRange("F12").values = [["Moved Range:"]]; - // Move a range to the specified location. + // Move the range from A1:E1 to G12:K12. sheet.getRange("A1:E1").moveTo("G12"); await context.sync(); }); From 872db30c593c79f0517e715577cc358334a05d55 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 18 Mar 2020 13:46:27 -0700 Subject: [PATCH 248/660] [excel] (CultureInfo) Adding culture info snippet (#407) * Adding culture info snippet * Clarifying local versus system * Adding another ref doc link --- playlists/excel.yaml | 11 ++ .../excel/85-preview-apis/culture-info.yaml | 159 ++++++++++++++++++ .../workbook-insert-external-worksheets.yaml | 2 +- .../workbook-save-and-close.yaml | 2 +- snippet-extractor-metadata/excel.xlsx | Bin 21378 -> 21539 bytes snippet-extractor-output/snippets.yaml | 85 ++++++++++ view/excel.json | 1 + 7 files changed, 258 insertions(+), 2 deletions(-) create mode 100644 samples/excel/85-preview-apis/culture-info.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index a8d597422..2b511256a 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -904,6 +904,17 @@ group: Preview APIs api_set: ExcelApi: '1.11' +- 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////samples/excel/85-preview-apis/culture-info.yaml + group: Preview APIs + api_set: + ExcelApi: '1.11' - id: excel-workbook-insert-external-worksheets name: Insert external worksheets fileName: workbook-insert-external-worksheets.yaml diff --git a/samples/excel/85-preview-apis/culture-info.yaml b/samples/excel/85-preview-apis/culture-info.yaml new file mode 100644 index 000000000..59fa86b89 --- /dev/null +++ b/samples/excel/85-preview-apis/culture-info.yaml @@ -0,0 +1,159 @@ +order: 4 +id: excel-culture-info +name: Culture info +description: This sample shows how to apply the cultural settings APIs to help normalize data. +host: EXCEL +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)); + + async function displayCultureInfo() { + 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(); + }); + } + + async function writeDecimal() { + // This will convert a number like "14,37" to "14.37" + // (assuming the system decimal separator is "."). + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const decimalSource = sheet.getRange("B2"); + decimalSource.load("values"); + context.application.cultureInfo.numberFormat.load("numberDecimalSeparator"); + await context.sync(); + + const systemDecimalSeparator = context.application.cultureInfo.numberFormat.numberDecimalSeparator; + const oldDecimalString: string = decimalSource.values[0][0]; + + // This assumes the input column is standardized to use "," as the decimal separator. + const newDecimalString = oldDecimalString.replace(",", systemDecimalSeparator); + + const resultRange = sheet.getRange("C2"); + resultRange.values = [[newDecimalString]]; + resultRange.format.autofitColumns(); + await context.sync(); + }); + } + + async function writeBigNumber() { + await Excel.run(async (context) => { + // This will convert a number like "123-456-789" to "123,456,789" + // (assuming the system thousands separator is ","). + const sheet = context.workbook.worksheets.getItem("Sample"); + const bigNumberSource = sheet.getRange("B3"); + bigNumberSource.load("values"); + context.application.cultureInfo.numberFormat.load("numberGroupSeparator"); + await context.sync(); + + const systemThousandsSeparator = context.application.cultureInfo.numberFormat.numberGroupSeparator; + const oldBigNumberString: string = bigNumberSource.values[0][0]; + + // This assumes the input column is standardized to use "-" as the number group separator. + const newBigNumberString = oldBigNumberString.replace(/-/g, systemThousandsSeparator); + + const resultRange = sheet.getRange("C3"); + resultRange.values = [[newBigNumberString]]; + resultRange.format.autofitColumns(); + 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 range = sheet.getRange("A1:C3"); + range.values = [["", "Stored", "Converted"], ["Decimal", "14,37", ""], ["Large Number", "123-456-789", ""]]; + range.format.autofitColumns(); + 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 apply the cultural settings APIs to help normalize data.

      +
      + +
      +

      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/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/workbook-insert-external-worksheets.yaml b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml index cb8cece62..446d4e508 100644 --- a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml +++ b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 5 id: excel-workbook-insert-external-worksheets name: Insert external worksheets description: Inserts worksheets from another workbook into the current workbook. diff --git a/samples/excel/85-preview-apis/workbook-save-and-close.yaml b/samples/excel/85-preview-apis/workbook-save-and-close.yaml index 662415e09..91e69c45a 100644 --- a/samples/excel/85-preview-apis/workbook-save-and-close.yaml +++ b/samples/excel/85-preview-apis/workbook-save-and-close.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 6 id: excel-workbook-save-and-close name: Save and close description: Saves and closes a workbook. diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 775626aa54caa34497b4a802b0d3967ab6289117..975cd1ffaaed3ac990419b99b8f386aafd8bede8 100644 GIT binary patch delta 12326 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 delta 12200 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 G%>Mz3g~l}i diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 2f5ecd7cc..e78e7ae9e 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -26,6 +26,31 @@ console.log(`Ending. Adding ${rowCount * columnCount} cells took ${Date.now() - startTime} milliseconds`); }); +'Excel.Application#decimalSeparator:member': + - |- + 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.AutoFilter#apply:member(1)': - |- await Excel.run(async (context) => { @@ -1100,6 +1125,66 @@ await context.sync(); }); +'Excel.CultureInfo#decimalSeparator:member': + - >- + // This will convert a number like "14,37" to "14.37" + + // (assuming the system decimal separator is "."). + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + const decimalSource = sheet.getRange("B2"); + + decimalSource.load("values"); + + context.application.cultureInfo.numberFormat.load("numberDecimalSeparator"); + + await context.sync(); + + + const systemDecimalSeparator = + context.application.cultureInfo.numberFormat.numberDecimalSeparator; + + const oldDecimalString: string = decimalSource.values[0][0]; + + + // This assumes the input column is standardized to use "," as the decimal + separator. + + const newDecimalString = oldDecimalString.replace(",", + systemDecimalSeparator); + + + const resultRange = sheet.getRange("C2"); + + resultRange.values = [[newDecimalString]]; + + resultRange.format.autofitColumns(); + + await context.sync(); + }); +'Excel.CultureInfo#numberGroupSeparator:member': + - |- + await Excel.run(async (context) => { + // This will convert a number like "123-456-789" to "123,456,789" + // (assuming the system thousands separator is ","). + const sheet = context.workbook.worksheets.getItem("Sample"); + const bigNumberSource = sheet.getRange("B3"); + bigNumberSource.load("values"); + context.application.cultureInfo.numberFormat.load("numberGroupSeparator"); + await context.sync(); + + const systemThousandsSeparator = context.application.cultureInfo.numberFormat.numberGroupSeparator; + const oldBigNumberString: string = bigNumberSource.values[0][0]; + + // This assumes the input column is standardized to use "-" as the number group separator. + const newBigNumberString = oldBigNumberString.replace(/-/g, systemThousandsSeparator); + + const resultRange = sheet.getRange("C3"); + resultRange.values = [[newBigNumberString]]; + resultRange.format.autofitColumns(); + await context.sync(); + }); 'Excel.CustomConditionalFormat#format:member': - |- await Excel.run(async (context) => { diff --git a/view/excel.json b/view/excel.json index 4e6cbb9f0..aad7216ce 100644 --- a/view/excel.json +++ b/view/excel.json @@ -96,6 +96,7 @@ "excel-workbook-calculation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-calculation.yaml", "excel-comment-mentions": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/comment-mentions.yaml", "excel-comment-resolution": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/comment-resolution.yaml", + "excel-culture-info": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/culture-info.yaml", "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", "excel-workbook-save-and-close": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-save-and-close.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/performance-optimization.yaml", From ad204965604ae2f98a3d5d5317955d2c7b24f9d9 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 19 Mar 2020 07:42:10 -0700 Subject: [PATCH 249/660] [excel] (Calculation APIs) Remove unnecessary event args parameters (#410) * Adding culture info snippet * Removing extra function arguments * Feedback about consistency * Updating snippet table --- playlists/excel.yaml | 4 +- samples/excel/30-events/events-worksheet.yaml | 9 +- .../85-preview-apis/workbook-calculation.yaml | 10 +- snippet-extractor-metadata/excel.xlsx | Bin 21539 -> 21555 bytes snippet-extractor-output/snippets.yaml | 124 +++++++++--------- 5 files changed, 75 insertions(+), 72 deletions(-) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 2b511256a..0d1ac6034 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -879,8 +879,8 @@ name: Calculations fileName: workbook-calculation.yaml description: >- - Demonstrates the calculation APIs of the workbook: worksheet-level - calculation events and application-level calculation controls. + Demonstrates the calculation APIs of the workbook: events for when the + worksheet recalculates and application-level calculation controls. rawUrl: >- https://raw.githubusercontent.com////samples/excel/85-preview-apis/workbook-calculation.yaml group: Preview APIs diff --git a/samples/excel/30-events/events-worksheet.yaml b/samples/excel/30-events/events-worksheet.yaml index 2fae9d362..ae3a29b86 100644 --- a/samples/excel/30-events/events-worksheet.yaml +++ b/samples/excel/30-events/events-worksheet.yaml @@ -22,6 +22,8 @@ script: let sheet = context.workbook.worksheets.getItem("Sample"); sheet.onSelectionChanged.add(onSelectionChange); await context.sync(); + + console.log("Added a worksheet-level selection change event handler."); }); } @@ -46,7 +48,8 @@ script: let sheet = context.workbook.worksheets.getItem("Sample"); sheet.onCalculated.add(onCalculated); await context.sync(); - console.log("Added worksheet selection changed event handler."); + + console.log("Added a worksheet-level on-calculated event handler."); }); } @@ -74,9 +77,9 @@ script: await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); sheet.onChanged.add(onChange); - await context.sync(); - console.log("A handler has been registered for the onChanged event."); + + console.log("Added a worksheet-level data-changed event handler."); }); } diff --git a/samples/excel/85-preview-apis/workbook-calculation.yaml b/samples/excel/85-preview-apis/workbook-calculation.yaml index 5db092311..3b9bc5ff1 100644 --- a/samples/excel/85-preview-apis/workbook-calculation.yaml +++ b/samples/excel/85-preview-apis/workbook-calculation.yaml @@ -1,7 +1,7 @@ order: 1 id: excel-workbook-calculation name: Calculations -description: 'Demonstrates the calculation APIs of the workbook: worksheet-level calculation events and application-level calculation controls.' +description: 'Demonstrates the calculation APIs of the workbook: events for when the worksheet recalculates and application-level calculation controls.' host: EXCEL api_set: ExcelApi: '1.11' @@ -14,7 +14,7 @@ script: sheet.onCalculated.add(onCalculated); await context.sync(); - console.log("Added worksheet selection changed event handler."); + console.log("Added a worksheet-level on-calculated event handler."); }); } @@ -65,7 +65,7 @@ script: }); } - async function switchToManualCalculations(event: Excel.WorksheetCalculatedEventArgs) { + async function switchToManualCalculations() { await Excel.run(async (context) => { context.application.calculationMode = Excel.CalculationMode.manual; context.application.load("calculationMode"); @@ -75,7 +75,7 @@ script: }); } - async function switchToAutomaticCalculations(event: Excel.WorksheetCalculatedEventArgs) { + async function switchToAutomaticCalculations() { await Excel.run(async (context) => { context.application.calculationMode = Excel.CalculationMode.automatic; context.application.load("calculationMode"); @@ -85,7 +85,7 @@ script: }); } - async function forceCalculation(event: Excel.WorksheetCalculatedEventArgs) { + async function forceCalculation() { await Excel.run(async (context) => { context.application.calculate(Excel.CalculationType.recalculate); await context.sync(); diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 975cd1ffaaed3ac990419b99b8f386aafd8bede8..409432d6f720733531d8b28319fc5aaa7a17b329 100644 GIT binary patch delta 11360 zcmYj%1yCHovMuiJPO#t(!Civ;;vU>}3A(sT@ZhcsEMWt|U4py22X_embMLGA?@iTI zO?CAdIX%;3T~Y}Pt%R*tK}Ib3FwlpQs)Xpa0bVaeKGHZZIK;Nf^$#8{6?A#--#Tfh55^8>#QDWv#w1|q+R`50 z&62#fs*b~u))srKDQiNx{cPBUa{}IhtwbJ=O#L%3!L5`f5n8HN2F^|9gwE=+eGXF~ z0%={H9xZVLXFAgHRm3mVEbK!~V&LL-d82RzsxX?^P+K-!1HB)H&QkQORd7#dp#o>Y zy4FM803D9D!70v%tozt`c%kJ+DA*c@+t-9rjFoD9{w%(^XBnNnj1 zHaYy^_84ZYMsFqMTS^qp@0$Ml!$(4U5`+378mQwz670d8A3KSpPx&F-epv(I;q+IkOK0CXA}wNVm%J3X zVk-pc-@I0Cer(_#w;|)4*p{5r1!>=uTc9a*WjZj*xQ{4o(oTBTI5$Lwk+Snf|Hyx` z3ts|CcZ505P3qo3rxmdfemJTJig>B|i_?~q!}N4h3LT88e(-t|%^H#g4Sjy-`UCQU z{Y|e@T=c^s1D$2QwsaY9<%*xxaz$F&856GaVt9}~`Yah}6{~%wx*Gpwl3y_;F*+%A zIk(i+s_}7v*paLLX*RxEt#=4U;o(Ff=}4`Wn8>JyLkoGFtyS%5XF30Eb&$Ni)9SN} z+C}1;U|V~0#~;sKZTOlEv>w0H*?6@6xeLS&e?r_oxRum*7mw>;hEA! z)oDsufVDdA48C;(0TSd>!BOMqSJzJ4ecSAx?tOgPa?U^wpqp2V=dZ%#LQWR~j92e} zogcgce%!m=5P4$f^igjXY^N(zC?`$9RLCmNhqQ*1*W1c7HoLo5G zM1Q{nuDhQ0xzD=5jAExQSkJp}=eMS8W_f`N+mnz3y_}qhl*D&c8!b=orMIPhq*GPE zd#H-BrwYr?)6`1aD``%8ap zX79$Y(KP<>-RJRW_e{-D@Uyr3(uRpykQ(&@Ae{pu9_ZvhB>`M57~1LLRLkM)a=rK^ zP*E$&U}Cz5^<>@kPKW-+^3I2sqn^s|bSHwYpE#>$?-R5%tPv>x%|e93pIpF!AVnko!X>P~`>K+`PWw z+__os=J|fJ+0+KvY)~J6c3|UVeQ3h|1*&ZtB0oCVd3mQ^sptpb~TFiTS z>tv_&{Yh!xE&Fk3=*wdbS5O<6c3E8YEkL)9@#5sMrm6x$)*{^1-ej+vGkY*Q)c1B6 z5ijf;_t{=9t8WJRVSm(UvY|jue`S{mly@{#F+BvPp6M2tTq^F*j-6sCM)lTXP+Ds3 zuU5NITD!3P*5vPxLAy4fp-L7DH_cry*c?-0`ls(Z7)M(cJ?^e`ClxU((Kcvnj`r zxj2ih9qG?1Xc&AC+tGwrdued;m}q3+AzO>JU!-#xUK`$wC}6J$EsR#P6Qld`tJifw&Sk{(o3Y_sc@Qle+Xz*L|1KiME$r6@Cyt+YC z3Yr;JS}_9TZta~6LI-tUs3gdZ8rx-4I>0dIHn3FHL(Kt}PMt5RLOm$+2{qXo(MkVm zgUEbi4$V$eJbO;F8{g4(*(8F5Pnp;??_dwHmmjf(R=)#SIupcZA%N;`jrdcSIV$-s ztq+AY3KvKe1&AhqdObv<=Zm@4!0u!0plR+q+xzZ#MG4DB8?>skt9~Vy=W=z1ad9wh zNNM67pQn)?n~}kSF9ThTD5lj~pnOW;+Dg`DG}4T+<59+rfQ>P0%pyLcK!&JySK=az zLkrw2ycT|VHK-jev=Wp0nwgTatsWk*$rorg&FLsD<6Zk1Mr)j;+#I9Y{)RbtG?j#w zq<>66>SYu*Y8UQrFlhZ_CmM)XgCuB`nT54bxIQ-#U>0TfNg0GKgppf`)I1I~hfZ5` z(^YKrlkF_Gmi8J_62jK_C3R>bQqsj<$EYSF_iR(rZmuXSR)?oB_kU*1(~xM#Ty0-8 zF=~oSBa9>}K5C_(6{1$49TDP@1Snx^aK0~v+X*ZCgh>mb|B072fUVAzGht+%3TF~l zen9^)BEtrgcLfTEuLKe`^yWipXkC=FC|GT2prZlktt$po-XGIH_BR>$ZH;IA$<^yE z1m_`|*wVU6zhspm=dw>*j)+lz466eYdF74g89ztoe(2MzI!0osR%6>&JP6^=t-m%D zZ(B^Vv)!Ez|IVw7-F}G&h#{Vu=cMowvz2*SN^>e3G6BV0`*|S#x4Dc^)o3K>ZFdg) zbXGRKl8y*^>qIOB71t<(%B@KjV2J3|2$js*7>LCAk)Uiz?umt>VakANhbc0pN%P@Y zWn>p;-TLS)5RBs{GlH(G`6-M%15D8D4U9&jm2-nN|moK_lqRj30vNmFI>p@r@5u;-V+n$C8n}0G+GAu!(Vux4M ze|@b#6(Zm1;jT~jgECa-v1^{O{Sk)V3HFEmhb*`eWV`=zbuk|K)eXbA97#Wh$iCqw z1pEipW3E{tcr9e_~Hm#3B zNMQC`;JwqKg(v^|*@j9l0H_EVV}hi}E}rt4YYo6u@|LMc^ZjR-b)dvz7(n3Q27Rbn zvZUB%ru>{^B#w}p651?{`E@$vU}YJ=RrRHNuR1Uy5N~IUO>7F|8**7<6M+eo)#5ts z+`A7x4&ClsP;Pi7pRy14WmzL)A>nk7mIiO+OsNa<*Fxw`RyfHgW$bJJ1l%EdB2rXZKyMUTSG= zD<_%HLGp|0@~Uf#?a>>iV-!vD2qRKy&5PWsDKVD&9|Dk|&T|~s1-pWgQ2ffoxg{Cx z7~6W+mi#yl45P56SrJeRtEA~6Qsz{UeYkoC3qDteSYBT!zJ4)6Mn^E>Ckw;{7LXZ) z1JEYZ2R2SOMk4pQA->8M>+# zn0or{VKn*4;nOM^>$ZIdI&5Epcw{S}DOVsJ6oyKkhr;Sg0!>?2E_81DjPpakCm@OB z#yW~!=h=+8mMeL4;}&wjI*m)7wfz%HibS=czVva)om%C))qMT>C8f-46R*&?jLMo) z7g07tznKxcNYPs#V0TrMFx!5$MV}Y@3iz*9R?`x8n1edT!uh-3^aA)jrtlF<0U#`= ziPc|-z3uq=xHS~=yA#r0RK;iiOaMIN>W+c-R*s8=@RL4JU|ro%G;4{(b8%j37>UFy z+S*D9W8=DKQ2F(t;Fod8t)8wFmhE1~_x}7J@jtRmNn)Bvk?oHDQ3q|wi&|<@GRx6%MtxG(dCughf`?)Ah0B-$}nO*C}h+tC^FuBlf7@KUZWwa`0GjT z*FkIL+=y_WZjw}^QW+<&pGe`=d~R7qnEEpm>}mIkHZ6by~8bee_ncc8g~pP+;0L;OK{@?|F^o? zWa@>!)>)WStW_N33Qfgm{4?(E+&DVtGj6BG^*21rRlb?riq43}aIy__PXDUnj|oj1 zmCg;$8_OIOn$ce;K|4A$s=t(*6h~uzP*HGd-Q!GuA`41&9L+1=qPJ|t5vWMscp+1* zig4(xWL15nwT^N)ZAj3FDhMw^I$^TD3Ubjsi{Sz#)~kf(gcNP$N(7Jl4ScDfn%;|* z3n|v9{p)BlhvV?qOABsPeWLvI(sW8Zy1dwhV?Tq9*)<4b0c7GZV1~&L;b>MOV#LnS_{3LQhSn}hqR#<2ZyKtdPDlP_v8`+6~whEn|{{vK$+6*Z@zwr#rJLSNSV`KvlTxIT4SWySy&u7Y1XxsOw>qU3VSrVH$o>VuDK^)B>iD%9<{3N>HT=djrgBV1WQ z3MDW#3&e0a7#I#uPH+}JZ!z4QX@xssRxzb(FyPv6g}@K>&KxXo`4ZGJ;DIxOy&7XZ zmYKs~RQnGK^f20H#x%yH9AT{@DwcdXV1+vo-!mSkpvUqs9Sxri@ye=M;;(l5z!H)N zY3C}3>I|3QlP{(rXNd^@Hg%Nra+~fT@Oi?yz9txiA5W+i9ZN$K& zY3+;I=6Kgbctmbm()sIXY@hoJ46(!6CM#Q2r zVl48r8aAU2IVoPgrQCwXZ@N}ddrX@D#24{RhAS=vFMssSOA&u!U# zu#mWuoVicjSWzhkx_rN&5e`&~n8`zN zx?hmGItWnhr9hk86wNv~-U(i@CTDARqp`y0>dGB|cmYdwjQftkL_|9S=N{$XfcMF`>t=_v8%U+0-1Q z>io;?0OOiDgMZ#K31Aj7JDfR@Mp^yI!pmYbZ>JEGF+*SO=Ul93rPrf_g<@5Jwe4`? zT(d(3GWaOr7hC+is&eh$lVq}oy}!yi8~=b7y(sf3*Vp1LiH7DI5e<$FXossv(O`mB zZD00~Yyiwxa0ZybY*Z^He$qIlC-aJFs6 z;y1skE`bvQLuGwsRWs_|Ln1v7JC`_iiNZp|8D+`tyMP0FqWb6@T=ZO#=B^eJaBD{4 zX*MA`J<@IbelDyzzW^PHV5U!4OuCt}23GCN!zUPZ<3aC;rx-8 zi)^*aSajo&*uEgc|6}x@B_W>xFjdwUO(14M?{~Z-hm8k!FfBpioaj4F^z&hqOG!;L zeM9?y4U|QFsJj;l_ixWRDVFm?+1tZ}C>uxenF)sQIK`akD0d;f?)VXPoGf)x$5kcF z4Fv}qmEfYxU6Q%`@C~AXh*+!LCrqFCaY{SoBbvFRK1lhC?C7gDAz05hug18TS@DK2rBK zX(LgsampEk+vi7m<-Lu*`RvC!v*>F&^DyD&Isda;1x0QlWt%@2GWqLdQsc^;R zcvYl7?oGiNXSCGUbe^#R<7O~+)1%kq+rUUCL*=tgM5I@B z&Zy#Os)=`LbhAIZ;G$!kmw2h7_Z{+R*A>m37SqI0z_*OUaueH*ofPQ9Xf(4fTpi)X zL)V~2?``YK_~`B_s3_decn-b5s7>J9v#L>Hwfl_!?ahHE5S!z@YIvC$Im(aF7PZuQ zs_t`Q3yBdu*&6nZx*&bc*{8*6!OvHPwsK*UcXc)c)q@O`7<#16@FGTUh3bO|&@b|B z@~ed=nW2`W!N%RS64$)NA+@!*2~Z5lHhI3k#+(e4VA9MQP`0y!B{cl6z(QsRv!@}K zbLD9p^L}me7ydmhR<(y5@5+UT!($u>@4wT@@>G$b*2aM-F$jH(y7n))i0mY`l&P6_ z9>U6Y(pneEygx|1I{3@_)HFfewwJuFnz7?vt~z>BO9vHg^xq~X#DU>y-=grG9zW?# zM2w0yPby*y>Sk4ggBWbm)#@|1&Bb=DFbPFTN#Q}MU}2^`r-sx$PQ^scqO&b z4-Ns#9}AGG)D=XuY5`)SObE#utYMg?3hRV$ck zei@iSZ+WA5;1ydovi&PuPh3^}14Hg@S&Y;sBTWPzG^k6XQ8!`7rXT*t2)5WofQZ9X zCkUU4^(Oi?U5^l)vKad;hP@rj>Bq+Ff+*u>T;x6u%!Agk=!!xJsnL)cu3o$!(dJp} zXgJjTpSX;z(kW?jbpw7MUGo%HBj-1sA;Iu(pzg@Tec_9x|H)VBk=IeAprj8Nn_L0X z7nak3V3)Fzz{ZppXK}&00Ze$m<#qU46hBMna$fVE-@j?hbcMG15aQp$xd-YJnRkTM6$O%F+befzaFf*k=?C>l1XS+S%^zdJ{Jegy2+acJO!wY+j#qH zNr|mkkLV;dLscM_^CyN^A?Af66cu-w2CMOi^K%F>^#U-KWhd2a;slDQ;Luou)kK6j zFM61^R92LL zu1>Z1xXB`=UA1yjI645)U<8@LGrQmdfRNiJhaCQ{ZRM?v9DLOAOM3e)pU6qUdxxDT z9a(qW#U67uiK`5=AS>DL3F1vviODgwm=?4%vgtyTBpXYH1C~lyMrFx`?G;Wk({i8o?PzZy7O*|24huXx|@Bxniq-7Ts7iH*ebSL#aLmV9G#?!^7W zc)LjG+oL;>@7uh<3euVIGCXrRRV)(g)R7%bWFH7e94@aAJ3Dlq=&(ICrkOf>tTihT?KwA3pnfnG$=y zuPEyoJXI5CcD<}ozuD0}-M*(zaS=jIK1QRViYOpvwqnA-OzuKk{76KS(YuC zw&Qy`bo_HR$+>#Gr}%4P>1qAQXEVUxulQu9PNgHr$FHlMZ6i0oS#6#bux!{RvTpD5 zbo1Qxepc(bj(V_gz79GnKgkB=<+XT}{2B@TLT>V9Z@S57etQ!bc#y3NPG7ZKcLqZ* zx?b-qptU@AM~e2(t^Phw2jfWYH8O2d}H=ukBhB9bzXNU1BBJ z+q=b|R7={x^MG~dTae8^`c%ubtCLz+m*yE8=k@M9N_I=rK*wuyKeun8wVXN?2jl?A z9Sh|gXIUNEYw5`ZA?p-jnaa{}qkEnU_Se8*an|*6HpQ`dK*cXlBS7n^8$EN3A-B|^ z0rQ!XUh5Y!RFB1~WXD4hQMaa~al z1gwj`5FZvybkWJENLX%k%(6;+;%{;E@dV9GX{?$w0iQ>kj)2N{-L9C!T76a~T)oUq zJ$?s7dv!N8%c^2&T3BL4B=WUOb3A=~3qfZUz zN~@>$UOxjhb0B-klU=v8#FuVz@I{|Rf+Z1`;Y>>HP?+sUxL7VUkbAFE4C=Es7FCqc z4GI^%iY?yYJm9S>SL+dl5?ymhw6!FRMLXCPb-4N zWpmh#4e=taRSI8q=nU>3M(?dhDr=hGezg>-AVStL2S{%A`UGmE`gb|R6b?H0}vRNtcc6O)JsdfA<429%)LZX_#?s0Mk)w4_w zfOdD=Jl7M!U90@3i5faudDedVJ8)F%mWMHaY{(h+LaYk=5C7=)TEbHgd-PhH4_1JW z1pu1TL3=65rKc_!(ES|#c&hXuag76n&l8W7`0L1Xy9X!3R1*jja zDYQ?=gi|%uW!P0;9GR!Btb?nrYK|jMAo4(&>#f)oP`g~rYIJWT+uTNT$rJb# z@JO4oFCdq)_7kZFr}EK6Y>qOS=#x4+u^KTjbhTs?M<9zY55-GCGa@gFyZ=`Z$cVQw zyhr4jE$gI_{gtXh36A7KGQ;5~1pZ;ohXnFfr?Xz4w!@(3d^_1=|Htamp_$Qc)%U-U ztWsL9;~wOfTmNdkDVlUiq!hfFX*nw8XQ{5}HPg`#R>p7dul^U@VSqgMhieds(gTE&pQPp~wSGsPq4pZsBSmbN%vTip5(9 z+fcx;cc{$9^r^G*m`0s$cf2dig2$>y{XrB(ttmEYLmXc?x?myNi|K13&a1o5p1z+E^BBF_VE7G0EnACN=_YJU#k2ftyw#d?g;>1yTQo3krh597}=+q1x2(`1z+O^xFd2k-gb zqwihlYcP6om4%=mBj9`rD(AU(aGl8-wz{U@Ep~ivI57h5IZu9g19eW+h+b z`h|6()t#cfMK$?3sV6@L;asvF(LF#iZ1zB2gOWIUI35?%hkJ?vvgEx?GzLcoy1Lw% zdlonS{E(m`o2i1Lv z^i9=-5Q^Jx3M&&{gKAd%?#=y6VOBLHYqx53Ol;1xE)vC)RYG`yCynM69ig`VDNK>)KPh;$*pi^ zCx)~2CRNDfnLs+ym?meq1^okF&4bw*_vL>NDK6vpaUlvhgXF7G)4aZu7Cw2oJ76d& zJ+zTjG|1?PETOGNn_U=E_{-jxuf~`lz-cb?eD24`7G0U=Sd`0w2hS?U^|S9QGr!fk zpknGdn!<9Ipw0+wqI$d%S(peix;Rv`gxKJQc0*AWxW1SXzkv}XVCNRJhG+>`lYUG~ zn$&wieEtlPgMvm{%j0$_G4OZ28P^1h;}hJM8>~M;Tp>Tffz0Q-oj$DGx>O-1aBhUc z%o-Pid|4)^tK26P@i?V!^+>s3Z^V_2PIRF;Hj(4^a&m0%uA_d_lVXsY39G2&*9e5E zy`|=F7c(hL4ehFq+Z3q29Rp5VTo*R!A(Y(o}6OLyw=oi#76D=%O+@fmVXy0 z+G#7^Qc_F23hD*6dq(K;;mUZX1+?;S1JO_@4<1ipAi@XaCJjna(QYb3e?QFkDkB#O zM#@8)P?Xoa03;s}71T>CVPJM52{zD?zv`cdKz~c^j&WzEGM#}* z()4K8h-61PTILycXz5_0F!M;h0a;Lu3f=M492c-)+vXfjER7~3%cb0lV{-1ayIV62 zpf?qa$hW!IRc?>RN+#d%Ld_VFz^?j9wrTIVtu9-1yhmz*pTUBPJ{I3vf_Cnua_%CX zFNh9(u;ShVYS@-OHy~-FdF6%wB>Dle`W?u_qp;UVC#`?w(X0I;56Sw#P0hIB5vjb) zyeJ$4kAD)dmgy(V46AKy#T6Dg^CL!F7u2s1;kSKhIP?$+77up{;)U;#1B$kzw)R1_ zwb6-(t18B{ORoO?g{#kvjtI-El@}&=S0z#5LUh4WgN7 zobnba4m9(^M%%VnjpyMu)eo^XiLpa^DS$RPY!Z&AauwCxDl170l9f)7zv84hq}O(mq^ zn^cY{{yQ+CrRg*qJuQ$dY2jo31TvlhHF9CWO|Cxut(oujA2W%O+*hoAki1qT)o|V- zqtU>lR_X`Je4VM2{IQ=n5{$^!iUD~F+!FsD+MX0Sm_kNSdamR4zv5pfNrX>!e$BvU z(Z#Ivt!V4tqq|N3T*Id#Kt7it`AgFfl;`e{b%c|r8Ndw=5x+R>ph~xw-zwbS+F)-h)q*^XZ%9M5+L5X zx%@)>Y^<<%i-9Qv>OXOE##^YeSCm2U3z z7lGqaK`{0`7X@oE1Nir#@`vFe`zj_BGMO1xF(O(Lb^b&Lef#epKnH?e2^{=Mj8BNJ zGrC#J1Wa3X)xJ&kImxx*Z`yhV#(wrl_5X6u%G$IV7~zTL(m zU@L~V`APWX+^`k~lV6=lMLPJH6>q5^r_$0xr@?Gc^r~peEIp+OE5t$%?~cmiFOFm? z4cGx8bEOk&dPA)qRWSnhNp(>9Dh%z~zhzJveD2YtEIKp&{*>%~r!aD5 z3|&1%3wmoYh{|9|*f+_#`A+@c;J0v19O$gLG76&K zgs`O=ls+a#|tJd#~CO0z5(J*xN`S^I1r&AN6T(AeB`)-?B`Mfx`ySP zYGj3wA~?hq0~OlP_jauK24c?Jk^U+rAG;Top=RwSf-u2WkdqMEYE!~WY0~x${!3F( z!1-rP<@GZqm=SH}@9Us|P&eP$iUwz&6Jq+gUfXhnsGH1xATsBM#hlI-~JWtS{jlsjIEoD^!# zIB6OF4l384_&enz=YQ|b#fk<<{}XMSqM-%rld7%3PX3?JLN`(vnBF=V7!sKOo2pZD zG~{44QnxiEF(%nzV7@wWdV2XfS*N;c5|aP_+qV!548i|J!7QbkXiCBLi>FSDe@N}t zWP!Vq_*cYFeb*F$vy@78m10P3*1}2km&U>PUtECne{~AAq~XG3QoqSCr($Zez~RcK zQppmfs%ztr|929=!oWDd!NB1DFYaH7I@M2G9JVyIMOzHkGW9|GBT|U^e-!>7Ehr1= delta 11320 zcmYjX1x($+lYY1rcQ004iWhe+?k>e$9xgxJrSNcfcZ!sUOL2-8r${O8?$`h2a(A0- zvb&j?on$B9&g_286)?pWFb$uP5GXJY5z!!ONMyjO@(u@9fQjuJ)umrl?vL-$Az8-X z>f zl$cja)GizDP5sQex}t2U2RB&E5Vql2Fv2u5SNmF)`@oM6D0oi5 zGAgq8(z0fY!`6BH!P!D8rqHf_;mV_SzG(D{HY#kRz%l z8XMGAuWFCI4#G@hF?C^f*pp)i(ROb@A7ml{_a$tF)L8ObNSPsipSHoQ&E5|_0y|i$ zotuo724}{U`|zIM8QEhUF3O`>%LBisR?5g7U8Scvi*{f~v+=vMk;UNPpKBxy?Gn{5 zTpkNi$euLKq0ZMoWxSdfm|)HzC4;d zi*|q*qNm%PYa(_-7=?9Mj3flRw|x3Zu;$s`Z$70tNDRPZex|mzuxdgvR}lLQ<|LgC z`usyfz>m(p|7XuVqGY+?WTq4TGZE;(i9Fl2wT&X~VXC2i9%@DK`*X)|v*1fxd>d9k zU*eh&RM2hb{?ILO*>-0Rl*87CY;|n0b#3|Sso4cp4i_PoUG;nm5PS69D)hsE26OXvL8 z8xxV&HOg1-*Vc6k_QC$0tDD`nor{Bkg@vohwv&Os4==B_PYfgLujdV)#!N6x>htn3 zRwo^+uU!DGco|4_(5jn-oX1~L^%dcEsGko^>`d0l1 zxOw<^(o;<@eC&krwD+=p(WToh@K7_5Z!%fW%a=<>{+2ya^7pXerEwg6DZA?RQ~GQ> z(5!Xy;}Do#D&a~qS=<`9TR*wkeVdZG@)6dr+X$$uI)GYr=yyLoKe%5xHD;8K?%mjR z5&e8SyPO+d&Hd(*aJb#j1?_&$5vi$WGBOT$T)Hg)j$1|ZW8b>@ow}d9yMAwwwOyuw zeUb$C(_dZ_S?;T!=j0qj94XoeftOc+c5-cu>`vvayGxL*?e6Xp9>vGqeeGrG^@I6h zy2MYwe@ObjoxMt+7$9rk_f@vK9U+poj zt)E=1-dOVZh~}x#@5u9BSw8tc@6yd@pZ&y{1oBH(7MJvr+6|a5_kI#G&zd@G5{zo= zy|Sbr<^Aep7|CZx-D!g|C7;aw`AN9zd)b}$Gt2j}Dye#I+&H^ zyJx9oaMyj@?DqFL(z|U&R`dge6s;dGY_Bg4Be~Bf(OMZA%c#N8HWKSv(KxMaja73{ zoI5B{$;k#qD6-c_O-MwM7&vaf$&SYQOx$|vwRk9+JQ!TiCi^v9h30;ZKmdbvj{Bu~ z^_O9u<>mC)B(y1|>>l-3#6&wLah9~e!)oYQKar+zuG)?+r@LKI^Jn0+XiYUuWY~I? zKmNnO?#V^8%i@V$O!Z)eWSv4>$4e~f1k%Fu|iSVi6pBO$LUZSxUhYE~?#q|`(Qf^$zOOuarVRJG|Ke1%R5Z21$DbQHu zD_5XRs8;WhWm3(@bxxa)2PbD+Gkp+a%+O+*L188Q6*To2WlACkxxnHDT#5zY`p3+| z$g32oM5boD2GF@+`-f2XzJYO;^i98}#lYo#x;6HXYKF+&9W5ut6o+X@R_Ef|lt(-+ zXPMU9N8a;CgJ(3nLu7RwY07T>WV1WVie-Jx!ie~zuT_aad`t#Vi8t)IM6p&UpH(%k%+b{F-n4X8%d+Al^&68> z;nXVRaczT0=8Z^OQU{RlG=vj|u%iD88Hf@vFK8&}PLfv`Ug3NNOxbU6smD>58n(Mw zdpj%fr;Gf#D~p5Ze@!((Q9s(Gv26%Uj-rLxqq<2q_@2m>zUcNl;cSng+SICJ&>S&F zVryg29J63lV=-DCoT3v7`K{=}jS&yx7mcmXUJf2$ctl|}gY)&X&UxcZH&#Gv^PLuS zj@DV#l3^L8kz|N~!cHoL!C(N(fyAtrrd+wT2xG<~jRF-8r^k+qedQB|aej~*4Tis! z=vM!J&6fj<+}TpCTArv;OMJhoUT}w z9Kb~9Bb9uO5#FtAl?~dm(xB>%FV33c!%;>4<{Gq4F5ZzNZM?HBOobMx7c&a<^O(*9 zyk{PZX(!Z{;f3Kg9c-iEDWv2mw}f}9sk3nN!G@K}^&q0@D(`N$nxH|E zyD>`Wf7WuNJ5esI(GVH;FCVa&UYH80YyJ+gr%b}N;AhfWFOXV@E)^OT;)uZ2 zHXgUWd&E9*5X!=Gw>k(WG%jMgfbDn;53T#R9YC3#TnpA=Q!`en6Vnky>zGn+K$$U3 zqwsE~6VQN2McY}6FX~MHN>WeNsnteO_4)(lC2 z30^8!-iNFR%Cg?$j1TK1=hMeDW`z}slyg4#hkQ6eQYfPosfc0blTxDM3{NNs_74gc zK*4_}pb`p%P2R5`*Dg={uw>Ij)Hqa5G>Kw+4_hyr6#OBECIy;n=}%hzbkI0#}=;iRI?Ma zFVuNlVL?;(6}YMkL(@&ol-XfR9~JMSc|3SO-IpxhW5{gQa@D?-9j(e#jc_vh4d#MYMxqE7cZk6*Sj1u#KAMg5>ex z{+gdiz0yiG>UH>S9fGh`7p#vzv+U#9o~0f9it?SrqTY~~PZS8lsl}&SS`6vlyu+}C<}g;_rlI zTCj~uY`zwI7j&tt0-huii(ZAH+;5SL@-C;lIP?Ui41e3t`WTcP1Eb0wfkmmJ_#^kc zkE}q$%{siJGegFRUQ_@b+d1tNiT$^x-us$UJlvXR>7A)6E};DOHv0j}Xa{r984EpGG{KR9lhS}Xh?67N&{!f7Y;SHU% zN-7F`=&T7__(hb$tjt$G+S&}s55H$syvyd~`Gv)nj8x7p0N z(&z;O&f=O~XR|Ki_M1mSgC%+$`A4HVARjN9f}2)x`ioV>Z%p?vlE|({oqv91EeFCh zp!RQACChiCDgX^!n3Iwv*`-exJ1}4i>BP*ba$%R`# zAWY=YsIkd*4N6OZix*fe`6p~(TlHF4Jo-Vtq8;o~1guV}zg>u`R$>e{9Zm{Tb>|KQ zst3r(a+Lcc@RB0M&u*GP)YucS4yMeqM?cLV^x1)nd7Yc&ppoLs9lpGmh`dToZHlGU+uk~1o`nbc?Q>fvw3c#B7-)Hr?3pwjtBuIKO8X#48AnP=N$bZRD`a0%lEgRiAmRDX9tWStHP6et2y*Cx@xr`1(jhl7GrInj;(dbz z$cV~W*8a_OJ_`lYER^?S6_QX2=pNH&AW0b+X(;Bd!4!{jZ3Jv?jd0mR=)8f9cwW>? z((>7%61FruE{&1zuE~0{qe)XK#yH{|=n%?^WdMjdG7Q)*4P5;Yjcyg@7K>L*mS+iq zLcAOTVDNL|R876=wN;87BVp}i7=ru?|ClQUyTY{Of*C-IpOeOE+lkQ*E+%(@8lAr+ zxzCnk9(mM#y=6w|ZWSb@b_y++M``NuO!}eTOxi>IY3{7$Q9s))_YlZ5BdYihvfx{P zi|X#aED9XqU!}DTjL?-(7n)Ltg@?%QF!V>9USUN7#ek18rDY3 z{WicII@J9aerra5oJoln$>DEW7NZ2y-PG%t@H2iIxK8<3eE<1%+j9N#+9KyCx-gBJ z>Eq_El=)C~NubRP)1w2dSxYw-uw-GXI%kcG482l`^C^VKr=(@a>9u2~tsqBs$c~K( zVn@OBuUOqPhuSenT1vq}&AVlC#h{#qh#rf(M3aA+)Ymt84I?Jme}liG9!{+y@pwGK zVtS~wyERsf1PxEt>UW5rFnZv#qd0ica*VfxhB3NSpT?i+s#U|clrwoayk)s|*GRSB zW*z(GGHS0giAOVy+b z-7uVKo2Q{{M$%Mcym^#!bZ6ofW2oU8{i;UiSS@D$eckOBghm|AmZlZZ)#CGmA0&vJ z0Ps3G!YDAgN@S?P-P#af*QQ|>FJvCKZ!i2o3Ui=_fgif=TY@o)>}9t&n#eNvLv}Px zo7)A5_Zq^9zk(pEnvKUGo(+BX$11jEXttErz;T*fgry~ktmv!5M_;+o_HX1gM6t8g zn@P#hC$t`5PtOqheMxd1E4a>Ic$ zJd~9G8VvKZ-`4GGfY<6_(s~YZU7@Zc(s|NuICP#{uKXvHI*>Gt(v$U3pW z*$4gcG(1~(<{P}$1WP^DO#$GneSMOrai}-b3nS)A7x}k!=@PCgceF?kJ(LrnV2_Kw z5u{zKySdi)GC8D6-U1&!U!(i}V?iCVK+F7e4gR~FacJKlY872gX4#n|D6c*42=xY6 z$Hau|Gyo_dU@lB6DABX@MyEf*^>Br|X02EIJs$9v(?Ei{k9ZVJRJpk5%VUvY6%ZMG59(^pU1w58}(V zFM%?ovB(w$Ejzw_8fp8N4LmGQr_9<3)yI&bZEGN>IXw^^epHiA7~bUzhIq)W=iv7; zJqzwMso{0)97Nrp@9Aoo1d>{x^1jfb@=U)=RBW9S4aHcA81C(@8*bcjV+hecGDO)r zRK)F@lzw-3pyFW!vs-TG=X`qq6Z=DjNRnj+Uz&Lu?r8{1 zx?(Ih;cThGxa3XCAR`;fnEW^-PvE`uS{DHs^U(*qo3XFK*8-I4iriDLgo;qtxw?z* zEqCKljM{6p_-A)LKUDj#J60wIZ`P-s9Hl}5&n}kFbz=kvwl040Jw5s(4I$%zottM> zXQA6MZ;23X{V+mT}SwXCu^bws;F>l#Y-Uc54 zI!bf3N;uoUbxm%|K1c94RvbeacWaZ}<6Fh}9EMEL7am^?$+tbqj#XJn1vC}MR&$0? zCrh>eWh?O>((24*Q<^<>4K+s{BxNb2CJsh3X^nn7BDpBe?Nxc#E6tkN`K1*&cxjkJ zwQf0I+-$$g>4e9%QzW)yQ7vktpe}0xIq=3bY_TkR#cjHb(D|626^6(0cA0!9kFpq< zk9aqel;e@qS7Pxv2IhZAybOsY_~HqwKFu)Xp0a2SS~DKX42{}pphhj^ zlxlnMmp*E#->6s~&_2@pVRColF zwopAjB`RXm#k0o)>H>3}46Cx=BZr}d5eZd}w*Sb%C1*huOK!^vB8Z0#FAkG6VTK`j zdbVK9<2Hht(M-!v*nTxBC@TSgH?4Rj}pL&LL&TLAyl3 z%k?2uKKQuTu&x1`;*W2!wcic4J_pg5cY`}G7y3doI6g}gksHAZePr~~Y}?>IgwlMJY6Y~|vIm3n)%FEvsbL^vcE=t!(szIo&$y;U;WfECVx$(W)v@aLk-Rg9?jUdj17^ zAZ-Nv=2mifTP-d4{>Y9J{OZp-mKP#~)d>nHdyjXsOc*f5Mp|wwZL!U^HTQ<8LrBFi zhNWap-Rqnc!#X7g-+^$Wm=7`os{2ZI8ncf1sIIA|Bkknq=WR2*QGQp>Z0iKNnqsAV z%q0Apd-Z=x%a_wHu6hU^ouuHrFLH%il;YY7@pACdE%sv1%2e_LG?k;jKc5ZE6c{C1 zxv90ut(xBE_6*lG$mEPYTCbhjn(A1lE!UAM#T_)Fk`cbs8v*KP(ep+u))EkvapP>J z>ja(56+tYb)>2$KH}yHN;D_JiMW&rwGKQBjQxSsN!FBzpU;&a|y2eQN4bG!%$52m? z)vrc-0}D*rA*Zy;(Xy|4S>beaS{+&zdo}*)#~&xFCyH5zV2p)h9 zx1zj}_0ZwHSm5a-7whkS*Sq$xoHO!*rU#1$2<+4w^gDoP1yt9T7M2$Tjn z;~)o2+*f&VfS$}J3<}Y8;RYu`$8vW_3C+0cHZlFJuAAQ?Uq%R>AwvkA-0E2QnKR7S z$u4v!zdoK=AP)2BIHqjXQp!<*H)r(Mg7ql15!LzjAL z?Z0`hXL(Q8)1K%C|6;DG^T|e@Q%BvyPhdHdna{U+&8u~WN1MVCszv_lxM*Ex+oJzH z{?~e|z|+Ok8SrV9Nh3cmrL`W~R^Idacy%CelHKDgjA;`1_%J-@<(%VlSLVl8pW^O3 z)#2qlwJ&+!UZFI%e`@EUykYm#CYEkJ}VlQKW1LbDaef{>NFlu;6 z%3*`*3>w+6D1>5Mjy4bd!XC6N0eFz9V8)TDB}UU-gNgV!oNA#AkJK)mMDHzvExy8` zN57W6tm!OF4!lvlf#1j(%^$I!PIHYPS}G@vpxJ)%p^}bX%PS{Oj&mnzhrvB0MWqpA z9R*<;Hleo@ti48iYR&1sa%KuIonE=?uU-c0Ar+neeKTNsk$}VMDely6z|qWYWy{+f8|0_Zk(C#i^O+(B)pnMR+iV_?`cd z9~AFRZ|%A>ruCbpY<<}VUcUC)ocV^G@p-gB!Z^0GI&U4T^W#pIn~@{#eF~6%+^Myl zcXbf;eBU;UJWD-%H{tdrH_2bZwoO$^_{_lJY#-&FEZah?OYYCd@UF6`o!M_wU+yi8 zyvh|f;SvOioNrxN4L_(AGjWh71STUGwwT1`;nUtoskH={yzZ!f~9v?uNG-Mz5Fyp{ys)^P0ND!23McGO;5RNUr zM4(I%9&wUM=EvJUgP5)8w|nfWU)p7_{Tar#3sX#gug33R_yO^3vct`q5UNSoaF@T` zwKAy7@ku?s%8frU3_QBHm3-*{Gd+wFPeng7LybzK4rlOWy4bVU?<)OfNuAc?wsRM+ z&>hR?>x)Zi_;HgMhVQoMs(or#ZN4Ldu&fRg1RruJj^SHn0jfGqTYl_KtRhrCO#5@^ zmsTqWlvuA@JwScY-r!MCxfEV?1BPYS#sum3`%(jI2* zg=*aMqMSO8z|AIk;G^&^^Cp(UdsulGc`)|yY~VaQb?YMcNDR5M6i?wvj8l8_b+SxE zNr@QjGLQKto`2pkLJ09|%>D{e$d>=7&IDXF@3INwcK}e>9g-xx2&M04)P?^8Gf_j4 zToiWI%SSD_LegY45YJp`$Sv{hOkdc>DoAoUOf_~qaU{>O1x-QqfQMT&9NFnr*Em zz5)?78n786a%Am_a(VYVI`;ur!Y*f^G1%iR=A|l2%gP86ik+7&Y6U-%FTLf$f)FvL z9TN+~Axx}b!pB&pRrY9kv}`womggs=JLN#mwa6?JQ7fAt_wr0as9(7K5T@zAjp$b( zbTZsHK`nulkKT^CU-y7B>!w?8X{1LOe(5D;@6^cFkz+cQ{+0+60m&3itDr5j02chD^n0A z06D__G0isy<@#ol2d>UNaq8(pAQS``-cQ)>q?>CCkol=WE7Vx#NEd~VUBa^X7Wwpdi9l&a)^p(NmHNy= zdX7f&ZDbiURm}O(fx7jgy$aoIGZ_5`g^4JMX4;Ay&EU@9akOPc2pKQUyi_U}SRz)q zIoO&fO365N{^(>Wp((hJ3XKvy(>L^!x-MIdHh>2uEpy7;Z|f+vYuCSe7saSlF!iAP^{CC|C?u!7s#erLukfrO0{P7|}QE%}YaOn&-v*s-NHSX`tQL0mm%23zuJ1e@! zF&fKs)ppceyaul?Sre?cCm9}faaa{D(}*Jr9k7nhzr)Gg(#UUsx!B0g-(d54j~UVS zI($SdV=Y)4cL&1}XIptJJ;SX4zl`WZoQcpJCyifWiz=z;E!)Lt_28fkV4qH^c3N2W z&XtMlAhH>62a%X5s!4VndJdGSx)`RSNHg6g_(jg7Ec6qSp4onY5$cKT)|tmKI6mZD z56&YSOC?pG1V_6`=VuLV2x>5x&^{7;l}Z0Q^Jn^9sc9uiTS0AA5s{t<#mzT+D57AM zURP0n5no^km0G7?aE2-vSnS(jomr~dDphY~;T22uYEUi4Tyf%=@47DdoZ2;De z`TP0)lF+YYp~X4|?R0e=Oe|P%B{LQKLEs}a`FXEa^v^vHzTcwa0juV*B^B9iQ8LCX z5($#WrpZ&abE)8N5RE(?>jci{Lbqk}_Y+v%Jh!?DIk zvSojFwr87OKZ7HTfx|%0xX&V-3a3;yTK&qu*^jxVHDUkq<1SY&%Jw6SD{BRjf+LL+Ene}of(edQKvHD2mF7zZn!KUrB9kzf!asv zA~OpF<8rg~z2%gJEoI_=@JYNEQDtX7BI2k`zKJMM6YK3HbJv+=ON?n{4Z8|`k^lDr`Ek<%ZkwrDCOle0h|`^}^f>zswv)Vo;blfB*9Si5sjmRMjy<%WKOY5&0) zwoS60#WShORPmBV`oOjtAeNdzJknjZeNj?)3yNEHEgqf-RYIXhaG&)`6b(i4Frt54 z(N)ZPM@};_tDv>jNQ5ub#tAonzJ!fcycMH9qABK@2|Q@WK`qk?(-#+Y&jr9ZNH@lCx5Pzh)rf7%-$vL)c~Lv;Nt)5oSUDkGsGrlr-WWac&)8jjf03 zL?1ti_a5!L4McX^dNIRxJny^MO8LicydMQ9#Vi8J@LqC;2ZajX#zJL9Ul_jJ@?nw6 z6MMsZx`HO8ssjm zw@@*;E%0|&ZE!`dRCQ-6yk~JF@91;apYVhuqyR!Aw;b0SVJ=abRtJ&S)hcrH_7eog zS79U5(RQ!SzYsnd%57ewXHL!L6{Gaxd$#k393Z@J)=4~iUa<*(BoR58y6d>($ix+~ zwfmDJ*E1BYs6$BqCQ*ve1Gv!>&>X)h|AySnsjFl0M-=Fg5EOCd*^%uw%yOn??9B3X z%mZur`-BrEwVcpVwO&K5D~CB=p|`%m2L0(E(=pE|xX#xvWmUlk-c_(+dKWYtwKAME z+$gtO1LW^BWMwmFwD;Ra!I<#g6~-i-aZg;>Ls&5xZlP4FjJkzS^4g4P1vGGOs>q1j z*eSREsO@1jgKrq7Ol(ERR-@a*k7NDZe?)|BDohp<-}#4E?Q3hH#c$c#z6xwGzGsLF z>LavegU!0$T=7y3*vuC0I}_zQns&78Gs#fRR^;O!IAi+#0&zjbhoq=sHE)Y3A|t#X zbYfF#=9J}v0ZMWOBvymR^2m_2@qU}TwP|I4qs?4@?Xra~U_>~7zsvFebe9Zn)X_SJ z`;pc%g%yvCDi*7s<_jrYG$)=?GbLY4)@g}&N8Vc`9T<=r6A``A+gwS?Q3p@zo!t7F zn|MWFkt42lDP)`X660jZ!x7J`o11jaAC+P*#Ve?B z17hURED#fnwUxTaUkp~e-3~X-E z51en9U$28N5K0YMUf&}`PA~V?zi;N~HF88WV|kWgc3K}}2aG~GMZI4nRAK@XU|>1V zN0&H;1>}7cDJWv;#=c0LNhl0>YY(Eto-Iv27mvGn_9zN)&tGf-(H~Ldab|t6ae0g5 zrco~7iQMwv5}pbFyHIYD*F*dtPA!(II*cde%fDB#|8NOih(VzKIuM8m^#5BWq*_%P zMg?-AD)w%Q6$J8jV0Q=mI9NgeHGI- - // This will convert a number like "14,37" to "14.37" - - // (assuming the system decimal separator is "."). - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - const decimalSource = sheet.getRange("B2"); - - decimalSource.load("values"); - - context.application.cultureInfo.numberFormat.load("numberDecimalSeparator"); - - await context.sync(); - - - const systemDecimalSeparator = - context.application.cultureInfo.numberFormat.numberDecimalSeparator; - - const oldDecimalString: string = decimalSource.values[0][0]; - - - // This assumes the input column is standardized to use "," as the decimal - separator. - - const newDecimalString = oldDecimalString.replace(",", - systemDecimalSeparator); - - - const resultRange = sheet.getRange("C2"); - - resultRange.values = [[newDecimalString]]; - - resultRange.format.autofitColumns(); - - await context.sync(); - }); -'Excel.CultureInfo#numberGroupSeparator:member': - - |- - await Excel.run(async (context) => { - // This will convert a number like "123-456-789" to "123,456,789" - // (assuming the system thousands separator is ","). - const sheet = context.workbook.worksheets.getItem("Sample"); - const bigNumberSource = sheet.getRange("B3"); - bigNumberSource.load("values"); - context.application.cultureInfo.numberFormat.load("numberGroupSeparator"); - await context.sync(); - - const systemThousandsSeparator = context.application.cultureInfo.numberFormat.numberGroupSeparator; - const oldBigNumberString: string = bigNumberSource.values[0][0]; - - // This assumes the input column is standardized to use "-" as the number group separator. - const newBigNumberString = oldBigNumberString.replace(/-/g, systemThousandsSeparator); - - const resultRange = sheet.getRange("C3"); - resultRange.values = [[newBigNumberString]]; - resultRange.format.autofitColumns(); - await context.sync(); - }); 'Excel.CustomConditionalFormat#format:member': - |- await Excel.run(async (context) => { @@ -1810,6 +1750,66 @@ await context.sync(); }); +'Excel.NumberFormatInfo#decimalSeparator:member': + - >- + // This will convert a number like "14,37" to "14.37" + + // (assuming the system decimal separator is "."). + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + const decimalSource = sheet.getRange("B2"); + + decimalSource.load("values"); + + context.application.cultureInfo.numberFormat.load("numberDecimalSeparator"); + + await context.sync(); + + + const systemDecimalSeparator = + context.application.cultureInfo.numberFormat.numberDecimalSeparator; + + const oldDecimalString: string = decimalSource.values[0][0]; + + + // This assumes the input column is standardized to use "," as the decimal + separator. + + const newDecimalString = oldDecimalString.replace(",", + systemDecimalSeparator); + + + const resultRange = sheet.getRange("C2"); + + resultRange.values = [[newDecimalString]]; + + resultRange.format.autofitColumns(); + + await context.sync(); + }); +'Excel.NumberFormatInfo#numberGroupSeparator:member': + - |- + await Excel.run(async (context) => { + // This will convert a number like "123-456-789" to "123,456,789" + // (assuming the system thousands separator is ","). + const sheet = context.workbook.worksheets.getItem("Sample"); + const bigNumberSource = sheet.getRange("B3"); + bigNumberSource.load("values"); + context.application.cultureInfo.numberFormat.load("numberGroupSeparator"); + await context.sync(); + + const systemThousandsSeparator = context.application.cultureInfo.numberFormat.numberGroupSeparator; + const oldBigNumberString: string = bigNumberSource.values[0][0]; + + // This assumes the input column is standardized to use "-" as the number group separator. + const newBigNumberString = oldBigNumberString.replace(/-/g, systemThousandsSeparator); + + const resultRange = sheet.getRange("C3"); + resultRange.values = [[newBigNumberString]]; + resultRange.format.autofitColumns(); + await context.sync(); + }); 'Excel.PageBreakCollection#add:member(1)': - |- await Excel.run(async (context) => { @@ -3411,9 +3411,9 @@ await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); sheet.onChanged.add(onChange); - await context.sync(); - console.log("A handler has been registered for the onChanged event."); + + console.log("Added a worksheet-level data-changed event handler."); }); 'Excel.Worksheet#onSingleClicked:member': - |- From df4aee200a128521f179116be319c3faa5dc0a12 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 19 Mar 2020 09:35:20 -0700 Subject: [PATCH 250/660] Fixing culture info snippet mapping (#412) --- snippet-extractor-metadata/excel.xlsx | Bin 21555 -> 21585 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 409432d6f720733531d8b28319fc5aaa7a17b329..0a7bdec19563e000943822675966ebe427908387 100644 GIT binary patch delta 11164 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 915c03efe..77a8c99ec 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -1750,7 +1750,7 @@ await context.sync(); }); -'Excel.NumberFormatInfo#decimalSeparator:member': +'Excel.NumberFormatInfo#numberDecimalSeparator:member': - >- // This will convert a number like "14,37" to "14.37" From 53482922d438fcbe90af612480a9983266808d39 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 20 Mar 2020 13:59:35 -0700 Subject: [PATCH 251/660] Update dependencies (#414) --- yarn.lock | 163 ++++++++++++++++++++++++++---------------------------- 1 file changed, 79 insertions(+), 84 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3c56548a1..4c70dc5fb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,19 +3,24 @@ "@babel/code-frame@^7.0.0": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" - integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" + integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== dependencies: - "@babel/highlight" "^7.0.0" + "@babel/highlight" "^7.8.3" -"@babel/highlight@^7.0.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" - integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== +"@babel/helper-validator-identifier@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz#ad53562a7fc29b3b9a91bbf7d10397fd146346ed" + integrity sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw== + +"@babel/highlight@^7.8.3": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" + integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ== dependencies: + "@babel/helper-validator-identifier" "^7.9.0" chalk "^2.0.0" - esutils "^2.0.2" js-tokens "^4.0.0" "@types/chalk@0.4.31": @@ -45,14 +50,14 @@ "@types/node" "*" "@types/js-yaml@^3.12.0": - version "3.12.1" - resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.1.tgz#5c6f4a1eabca84792fbd916f0cb40847f123c656" - integrity sha512-SGGAhXLHDx+PK4YLNcNGa6goPf9XRWQNAUUbffkwVGGXIxmDKWyGGL4inzq2sPmExu431Ekb9aEMn9BkPqEYFA== + version "3.12.2" + resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.2.tgz#a35a1809c33a68200fb6403d1ad708363c56470a" + integrity sha512-0CFu/g4mDSNkodVwWijdlr8jH7RoplRWNgovjFLEZeT+QEbbZXjBmCe3HwaWheAlCbHwomTwzZoSedeOycABug== "@types/lodash@^4.14.122": - version "4.14.136" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.136.tgz#413e85089046b865d960c9ff1d400e04c31ab60f" - integrity sha512-0GJhzBdvsW2RUccNHOBkabI8HZVdOXmXbXhuKlDEd5Vv12P7oAVGfomGp3Ne21o5D/qu1WmthlNKFaoZJJeErA== + version "4.14.149" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.149.tgz#1342d63d948c6062838fbf961012f74d4e638440" + integrity sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ== "@types/minimatch@*": version "3.0.3" @@ -60,19 +65,19 @@ integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/node@*": - version "12.6.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.8.tgz#e469b4bf9d1c9832aee4907ba8a051494357c12c" - integrity sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg== + version "13.9.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.9.2.tgz#ace1880c03594cc3e80206d96847157d8e7fa349" + integrity sha512-bnoqK579sAYrQbp73wwglccjJ4sfRdKU7WNEZ5FW4K2U6Kc0/eZ5kvXG0JKsEKFB50zrFmfFt52/cvBbZa7eXg== "@types/node@^11.10.5": - version "11.13.18" - resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.18.tgz#758ec2bf26339d3cc83da22676b64777d0c2befe" - integrity sha512-sMHdXLccscaxI+Hlzz58yLQue3lQyXP+6aQniDRi5oju3n0123kcjhicVGF20WF7cHiwJ2vxMbXc4skOclosoA== + version "11.15.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.15.7.tgz#97559c6d7f8b15dcf275365512799f405c20cd4e" + integrity sha512-3c3Kc7VIdE5UpqpmztRy7FU+turZgIurGnwpGFy/fRFOirfPc7ZnoFL83qVoqEDENJENqDhtGyQZ5fkXNQ6Qkw== "@types/shelljs@^0.8.3": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.8.5.tgz#1e507b2f6d1f893269bd3e851ec24419ef9beeea" - integrity sha512-bZgjwIWu9gHCjirKJoOlLzGi5N0QgZ5t7EXEuoqyWCHTuSddURXo3FOBYDyRPNOWzZ6NbkLvZnVkn483Y/tvcQ== + version "0.8.6" + resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.8.6.tgz#45193a51df99e0f00513c39a2152832399783221" + integrity sha512-svx2eQS268awlppL/P8wgDLBrsDXdKznABHJcuqXyWpSKJgE1s2clXlBvAwbO/lehTmG06NtEWJRkAk4tAgenA== dependencies: "@types/glob" "*" "@types/node" "*" @@ -107,9 +112,9 @@ balanced-match@^1.0.0: integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= big-integer@^1.6.17: - version "1.6.44" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.44.tgz#4ee9ae5f5839fc11ade338fea216b4513454a539" - integrity sha512-7MzElZPTyJ2fNvBkPxtFQ2fWIkVmuzw41+BZHSzpEq3ymB2MfeKp1+yXl/tS75xCx+WnyV+yb0kp+K1C3UNwmQ== + version "1.6.48" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e" + integrity sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w== binary@~0.3.0: version "0.3.0" @@ -216,9 +221,9 @@ colors@1.1.2: integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= commander@^2.12.1: - version "2.20.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" - integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + 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== concat-map@0.0.1: version "0.0.1" @@ -230,10 +235,10 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -diff@^3.2.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== +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" @@ -257,11 +262,6 @@ esprima@^4.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= - excel@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/excel/-/excel-1.0.1.tgz#d6cf6a912cd3517a8b78861770a8e4d9be0919f2" @@ -301,9 +301,9 @@ fstream@~1.0.10: rimraf "2" glob@^7.0.0, glob@^7.1.1, glob@^7.1.3: - version "7.1.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -312,12 +312,7 @@ 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: - version "4.2.1" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.1.tgz#1c1f0c364882c868f5bff6512146328336a11b1d" - integrity sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw== - -graceful-fs@^4.1.6: +graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== @@ -394,17 +389,17 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= +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== "mkdirp@>=0.5 0", mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.3.tgz#5a514b7179259287952881e94410ec5465659f8c" + integrity sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg== dependencies: - minimist "0.0.8" + minimist "^1.2.5" node-status@^1.0.0: version "1.0.0" @@ -449,9 +444,9 @@ process-nextick-args@~2.0.0: integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== readable-stream@^2.0.2: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + 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" @@ -482,9 +477,9 @@ rechoir@^0.6.2: resolve "^1.1.6" resolve@^1.1.6, resolve@^1.3.2: - version "1.11.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" - integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== + version "1.15.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" + integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== dependencies: path-parse "^1.0.6" @@ -497,16 +492,16 @@ restore-cursor@^1.0.1: onetime "^1.0.0" rimraf@2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + 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.0" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.0.tgz#614176d4b3010b75e5c390eb0ee96f6dc0cebb9b" - integrity sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg== + 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" @@ -516,9 +511,9 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== semver@^5.3.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" - integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== setimmediate@~1.0.4: version "1.0.5" @@ -576,20 +571,20 @@ supports-color@^5.3.0: integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= tslib@^1.8.0, tslib@^1.8.1: - version "1.10.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" - integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== + version "1.11.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" + integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== tslint@^5.13.1: - version "5.18.0" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.18.0.tgz#f61a6ddcf372344ac5e41708095bbf043a147ac6" - integrity sha512-Q3kXkuDEijQ37nXZZLKErssQVnwCV/+23gFEMROi8IlbaBG6tXqLPQJ5Wjcyt/yHPKBC+hD5SzuGaMora+ZS6w== + version "5.20.1" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d" + integrity sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg== dependencies: "@babel/code-frame" "^7.0.0" builtin-modules "^1.1.1" chalk "^2.3.0" commander "^2.12.1" - diff "^3.2.0" + diff "^4.0.1" glob "^7.1.1" js-yaml "^3.13.1" minimatch "^3.0.4" @@ -607,9 +602,9 @@ tsutils@^2.29.0: tslib "^1.8.1" typescript@^3.3.3333: - version "3.5.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" - integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== + version "3.8.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" + integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== universalify@^0.1.0: version "0.1.2" @@ -642,9 +637,9 @@ wrappy@1: integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= xmldom@^0.1.27: - version "0.1.27" - resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" - integrity sha1-1QH5ezvbQDr4757MIFcxh6rawOk= + version "0.1.31" + resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.31.tgz#b76c9a1bd9f0a9737e5a72dc37231cf38375e2ff" + integrity sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ== xpath@0.0.27: version "0.0.27" From 9d29c78112259f4f125b0be52a4dae09500403de Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 27 Mar 2020 11:02:05 -0700 Subject: [PATCH 252/660] Adding performance note above suspendScreenUpdatingUntilNextSync (#415) --- samples/excel/90-scenarios/performance-optimization.yaml | 2 ++ snippet-extractor-output/snippets.yaml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/samples/excel/90-scenarios/performance-optimization.yaml b/samples/excel/90-scenarios/performance-optimization.yaml index 08b21139e..bb59e688d 100644 --- a/samples/excel/90-scenarios/performance-optimization.yaml +++ b/samples/excel/90-scenarios/performance-optimization.yaml @@ -25,6 +25,8 @@ script: 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(); } diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 77a8c99ec..4c3bc18fa 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -9,6 +9,8 @@ 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(); } From faebafec7592733c688aebb0e608b68ce563b05d Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 30 Mar 2020 11:41:13 -0700 Subject: [PATCH 253/660] [Outlook] (to) Add how to set (Msg compose) (#417) * [Outlook] (to) Add how to set * Update file name --- playlists/outlook.yaml | 10 +++--- ...e.yaml => get-set-to-message-compose.yaml} | 32 +++++++++++++++--- snippet-extractor-metadata/outlook.xlsx | Bin 17252 -> 17329 bytes snippet-extractor-output/snippets.yaml | 25 ++++++++++++++ view/outlook.json | 2 +- 5 files changed, 58 insertions(+), 11 deletions(-) rename samples/outlook/30-recipients-and-attendees/{get-to-message-compose.yaml => get-set-to-message-compose.yaml} (56%) diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 4387ebb84..b152f3d21 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -82,12 +82,12 @@ group: Recipients And Attendees api_set: Mailbox: '1.1' -- id: outlook-recipients-and-attendees-get-to-message-compose - name: Get to (Message Compose) - fileName: get-to-message-compose.yaml - description: Gets the To line recipients of the message in Compose mode. +- 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////samples/outlook/30-recipients-and-attendees/get-to-message-compose.yaml + https://raw.githubusercontent.com////samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml group: Recipients And Attendees api_set: Mailbox: '1.1' diff --git a/samples/outlook/30-recipients-and-attendees/get-to-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml similarity index 56% rename from samples/outlook/30-recipients-and-attendees/get-to-message-compose.yaml rename to samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml index f1a38fe2a..e233625a8 100644 --- a/samples/outlook/30-recipients-and-attendees/get-to-message-compose.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml @@ -1,13 +1,14 @@ order: 4 -id: outlook-recipients-and-attendees-get-to-message-compose -name: Get to (Message Compose) -description: Gets the To line recipients of the message in Compose mode. +id: outlook-recipients-and-attendees-get-set-to-message-compose +name: Get and set to (Message Compose) +description: Gets and sets the To line recipients of the message in Compose mode. host: OUTLOOK api_set: Mailbox: '1.1' script: content: | $("#get-to").click(getTo); + $("#set-to").click(setTo); function getTo() { Office.context.mailbox.item.to.getAsync(function(asyncResult) { @@ -22,18 +23,39 @@ script: } }); } + + function setTo() { + 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); + } + }); + } language: typescript template: content: |-
        -

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

        +

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

        Required mode: Message Compose

        Try it out

        +
        + + +
        +
        language: html diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 96b6f64ca124a8ffa281032f1329ed94aad7f7b2..927a5066960faeaae74e3ba2029ebab536ecab04 100644 GIT binary patch delta 8051 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 DhNwiF delta 7935 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 4c3bc18fa..7aae7d552 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -4199,6 +4199,31 @@ console.error(asyncResult.error); } }); + - |- + 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.Recipients#setAsync:member(2)': + - |- + 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.MessageRead#to:member': - |- var msgTo = Office.context.mailbox.item.to; diff --git a/view/outlook.json b/view/outlook.json index b8e4b4fe8..289fa905a 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -8,7 +8,7 @@ "outlook-recipients-and-attendees-get-from-message-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml", "outlook-recipients-and-attendees-get-from-message-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml", "outlook-recipients-and-attendees-get-to-message-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml", - "outlook-recipients-and-attendees-get-to-message-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-to-message-compose.yaml", + "outlook-recipients-and-attendees-get-set-to-message-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml", "outlook-recipients-and-attendees-get-cc-message-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml", "outlook-recipients-and-attendees-get-cc-message-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-cc-message-compose.yaml", "outlook-recipients-and-attendees-get-bcc-message-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-bcc-message-compose.yaml", From 070c665aafca68bde7b11e4d2ece98c33bf5d2ac Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 30 Mar 2020 13:35:17 -0700 Subject: [PATCH 254/660] [Outlook] (cc) Add how to set cc (msg compose) (#418) --- playlists/outlook.yaml | 10 ++-- ...e.yaml => get-set-cc-message-compose.yaml} | 34 +++++++++--- snippet-extractor-metadata/outlook.xlsx | Bin 17329 -> 17366 bytes snippet-extractor-output/snippets.yaml | 50 +++++++++++++----- view/outlook.json | 2 +- 5 files changed, 71 insertions(+), 25 deletions(-) rename samples/outlook/30-recipients-and-attendees/{get-cc-message-compose.yaml => get-set-cc-message-compose.yaml} (54%) diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index b152f3d21..a906a55a4 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -100,12 +100,12 @@ group: Recipients And Attendees api_set: Mailbox: '1.1' -- id: outlook-recipients-and-attendees-get-cc-message-compose - name: Get cc (Message Compose) - fileName: get-cc-message-compose.yaml - description: Gets the Cc line recipients of the message in Compose mode. +- 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////samples/outlook/30-recipients-and-attendees/get-cc-message-compose.yaml + https://raw.githubusercontent.com////samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml group: Recipients And Attendees api_set: Mailbox: '1.1' diff --git a/samples/outlook/30-recipients-and-attendees/get-cc-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml similarity index 54% rename from samples/outlook/30-recipients-and-attendees/get-cc-message-compose.yaml rename to samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml index 759b8938b..1d1f1c87c 100644 --- a/samples/outlook/30-recipients-and-attendees/get-cc-message-compose.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml @@ -1,13 +1,14 @@ order: 6 -id: outlook-recipients-and-attendees-get-cc-message-compose -name: Get cc (Message Compose) -description: Gets the Cc line recipients of the message in Compose mode. +id: outlook-recipients-and-attendees-get-set-cc-message-compose +name: Get and set cc (Message Compose) +description: Gets and sets the Cc line recipients of the message in Compose mode. host: OUTLOOK api_set: Mailbox: '1.1' script: content: | $("#get-cc").click(getCc); + $("#set-cc").click(setCc); function getCc() { Office.context.mailbox.item.cc.getAsync(function(asyncResult) { @@ -22,18 +23,39 @@ script: } }); } + + function setCc() { + var email = $("#emailCc") + .val() + .toString(); + var 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); + } + }); + } language: typescript template: content: |-
        -

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

        +

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

        Required mode: Message Compose

        Try it out

        - +
        language: html diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 927a5066960faeaae74e3ba2029ebab536ecab04..ef8e38a4849777797cb4db630a0514bd1858180e 100644 GIT binary patch delta 7952 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

        }eqXNJ6cP8aDW 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 Date: Mon, 30 Mar 2020 13:56:15 -0700 Subject: [PATCH 255/660] [Outlook] (bcc) Add how to set bcc (Message Compose) (#419) --- playlists/outlook.yaml | 10 ++-- ....yaml => get-set-bcc-message-compose.yaml} | 36 ++++++++--- snippet-extractor-metadata/outlook.xlsx | Bin 17366 -> 17486 bytes snippet-extractor-output/snippets.yaml | 56 +++++++++++++----- view/outlook.json | 2 +- 5 files changed, 75 insertions(+), 29 deletions(-) rename samples/outlook/30-recipients-and-attendees/{get-bcc-message-compose.yaml => get-set-bcc-message-compose.yaml} (52%) diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index a906a55a4..f5b036724 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -109,12 +109,12 @@ group: Recipients And Attendees api_set: Mailbox: '1.1' -- id: outlook-recipients-and-attendees-get-bcc-message-compose - name: Get bcc (Message Compose) - fileName: get-bcc-message-compose.yaml - description: Gets the Bcc line recipients of the message in Compose mode. +- 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////samples/outlook/30-recipients-and-attendees/get-bcc-message-compose.yaml + https://raw.githubusercontent.com////samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml group: Recipients And Attendees api_set: Mailbox: '1.1' diff --git a/samples/outlook/30-recipients-and-attendees/get-bcc-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml similarity index 52% rename from samples/outlook/30-recipients-and-attendees/get-bcc-message-compose.yaml rename to samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml index 58bbe1251..7ba66d7bf 100644 --- a/samples/outlook/30-recipients-and-attendees/get-bcc-message-compose.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml @@ -1,19 +1,20 @@ order: 7 -id: outlook-recipients-and-attendees-get-bcc-message-compose -name: Get bcc (Message Compose) -description: Gets the Bcc line recipients of the message in Compose mode. +id: outlook-recipients-and-attendees-get-set-bcc-message-compose +name: Get and set bcc (Message Compose) +description: Gets and sets the Bcc line recipients of the message in Compose mode. host: OUTLOOK api_set: Mailbox: '1.1' script: content: | $("#get-bcc").click(getBcc); + $("#set-bcc").click(setBcc); function getBcc() { Office.context.mailbox.item.bcc.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var msgBcc = asyncResult.value; - console.log("Message being bcc'd to:"); + console.log("Message being blind-copied to:"); for (var i = 0; i < msgBcc.length; i++) { console.log(msgBcc[i].displayName + " (" + msgBcc[i].emailAddress + ")"); } @@ -22,18 +23,39 @@ script: } }); } + + function setBcc() { + var email = $("#emailBcc") + .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); + } + }); + } language: typescript template: content: |-

        -

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

        +

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

        Required mode: Message Compose

        Try it out

        - +
        language: html diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index ef8e38a4849777797cb4db630a0514bd1858180e..e38773adb10d225bae292def9fd9ed9749690691 100644 GIT binary patch delta 8163 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 delta 8004 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 Date: Mon, 30 Mar 2020 14:29:46 -0700 Subject: [PATCH 256/660] [Outlook] (requiredAttendees) Add how to set in Appointment Organizer mode (#420) * [Outlook] (requiredAttendees) Add how to set (Appointment compose) * Fix typo --- playlists/outlook.yaml | 10 +++--- ...ired-attendees-appointment-organizer.yaml} | 32 +++++++++++++++--- snippet-extractor-metadata/outlook.xlsx | Bin 17486 -> 17522 bytes snippet-extractor-output/snippets.yaml | 28 +++++++++++++++ view/outlook.json | 2 +- 5 files changed, 61 insertions(+), 11 deletions(-) rename samples/outlook/30-recipients-and-attendees/{get-required-attendees-appointment-organizer.yaml => get-set-required-attendees-appointment-organizer.yaml} (57%) diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index f5b036724..b0a715488 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -137,12 +137,12 @@ api_set: Mailbox: '1.1' - id: >- - outlook-recipients-and-attendees-get-required-attendees-appointment-organizer - name: Get required attendees (Appointment Organizer) - fileName: get-required-attendees-appointment-organizer.yaml - description: Gets the required attendees in Appointment Organizer mode. + 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////samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-organizer.yaml + https://raw.githubusercontent.com////samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml group: Recipients And Attendees api_set: Mailbox: '1.1' diff --git a/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-organizer.yaml b/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml similarity index 57% rename from samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-organizer.yaml rename to samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml index 6b6b262dd..45e5dc787 100644 --- a/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-organizer.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml @@ -1,13 +1,14 @@ order: 10 -id: outlook-recipients-and-attendees-get-required-attendees-appointment-organizer -name: Get required attendees (Appointment Organizer) -description: Gets the required attendees in Appointment Organizer mode. +id: outlook-recipients-and-attendees-get-set-required-attendees-appointment-organizer +name: Get and set required attendees (Appointment Organizer) +description: Gets and sets the required attendees in Appointment Organizer mode. host: OUTLOOK api_set: Mailbox: '1.1' script: content: | $("#get-required-attendees").click(getRequiredAttendees); + $("#set-required-attendees").click(setRequiredAttendees); function getRequiredAttendees() { Office.context.mailbox.item.requiredAttendees.getAsync(function(asyncResult) { @@ -28,18 +29,39 @@ script: } }); } + + function setRequiredAttendees() { + 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.error(asyncResult.error); + } + }); + } language: typescript template: content: |-

        -

        This sample shows how to get the required attendees.

        +

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

        Required mode: Appointment Organizer

        Try it out

        +
        + + +
        +
        language: html diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index e38773adb10d225bae292def9fd9ed9749690691..c7e37cd4f47bb8d9f240aea72ef8df60ff486736 100644 GIT binary patch delta 8138 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 delta 8133 zcmZ8mWl$V#mmS>Qf0W1r($UH)%z* zjjCH^={_!}dx5reN}Q$82?!d>UU|LUDL?|b3yR5CWe$B=vL9xhry350t}_>wr-hbz zJ1>0#zN9qCkGpFMa0~>hbEy`vix*;d$4k+2XOC1?cvUsgM5ZbrJbEx^c!*ZiNvyLJ zQ?(9^o6mvz+L=OrU*-;#*TF9HQX*GVaj!E}?5ftuyW)&rt!&Uc`+X?KPfx63yTlU} z{5(y)`DTH3I}7nJj*KF7TQKq?8n{=OmB=>%(5xLqH|$1zvf_m=nuE$AZu;THoV2u9 zd+UcMuGz~&O%+|oS-@rZx(s$#LL?b`1cW^r)whDd2N}%-3|s$Xc3EFRgV7;hVle&bDTZ}%5EHm^=9fVwvUia0UBqE@ z6$(zb>YH=J~n&lz?*DNPiiCqE?5vWZzWT?L0&8eYFzuAE>1c$h=IWQCMoHR z^SeVdey3Mg#|UXx$`vQ-{+dz68)PT`PJAo~bVTXuvo=Z!D&w_WW){e@@8U!#&4N}T zy4}z_tBU)QIc7M-h&U@+s{41@KC{=-qR!hs)mgV?f+ZV5S%b6mL%dxupdk?0=gO6o zu;OD&RoJ)duakxirnZIaVh}ZAq26{dkk6<_3)5`}u|;Pr#BOyp+59}UmYFtJBB?P~ zyzM7>yD_xy=~^s^K)}lN$;DJEhJ|NI55cp7(47`O& z2ng0Pu-A#gv(>c-*_nH@RdU4APcVo*3C|@lT$N!+H+GFL&F{0!?=SB=s`bYKcRviT zI(SxD8Y}LMYOy zp*7o^GcJunzD`-!K8O9s6FKjfS082~y#S1U->Lf_1<%}fsW}`o{v6c}h8%#$^5gYi zXNhc-!8C?PZxx)~sQNd<&n)lrUL9q;{k0H4qP_SBgE@MBV%*gI*l{gI z+4J!^Hq1Q>=gkZbj;@v;Q~CaOZ*Q-}*~ZxyijlBIx9bn(&(O~2+lE5o*h=r#-M`h( zxQBmTA%3raD9$S zj<1`n|MDc0PD>f?WftE&LbYu@Z7xMkCP>0|Qg=yMJfP1F!W2IaVGWc7D0i^0O^?d; zHo>+vl)W(`kkhGQu0-8We67!(znGtte37lh_y4?c`PfJYOEvgY_BFc`sKN%8{U2TH zA0F@#I2_T-7Z>=PaypbVAA<%E@mhxqmis-VL}1VDSKP4<2h$f$#}hTbN_u}8d}MX{ zRFF@hUEu#mz5e6Fr6F2WlknLC6r$qg>Fy>DX;OmiwSt8@%gR~ax`dIGL+3Fbg+jzT zJ@iv_ejs07tmd*f_S9Yj`bjcBL|}W&m*>Sy;#_R?)LLEZI_VA)ihE&y9|u>j?czSM z%^hTuec$bLmN%UJk^3oJirTcK?eI_8vR@0eKZS4JykVOe1jvSPnSu!`@G^^aMD0^d z7fH!gw)alWjN0D$viM+go!-Kk2P)L1aNoP3Gp61y{mdYJqVYNac(hTJEsodKIjxd& zDj>mvRIMl2;w7=Z?l6scY)VlopS%HVMxkp$wkr{d)rW(HvLlA;psTN-uQ{Y;kl^9) zE6-kP4c~p#?2)DJ5}KMDwHV5kvjulgT<;y!tdXTW1TULyk99>BJ`c_f2>BDuZF6*+ zM}A&i>N@MZ4QLzS+0ntGQt&!u_Ufj&UcwVhZtojsJd_4~J!&KqOgmjrp9~kC40`eo z%>kix31H5nTc4V&FxZN zGRuIzf2J2A`yPlK6=ND1Nrv)ScMG$_jjGZGT1|YZrN!Sxr@HrZbATt?e6CjzJD8n} zYHUn^k7V+@@?k(IUJi8XmU{#;E_{%&QLX8AL6`!p>ZfX7GRqc`Xa-C6M)aoG;vtBA>+ULmJVHes)hjH9_BCih3>kEk#)A7rg`@ zNzRvMlQXlJAtg=VthdyfUdb58?zNZ($p9vc@7<6Pb3)eRfAaEsUA_&g*P427d_U-s z^y1$~f%0P@k@p5>#I`c^UabKa(gR@w7m#{!RO$%dr3OC@e=Sgd9@5ErzwV{wETbAF zu`$)DvoQZrRQe%}SoMoK)0GhS{HGAGGuZ0@?CS*-=l!sUP6<3@zo4&H$<^Hi1TbRZ@FfwqQk79-TNH;;c+5(O^vCS+!aF z$c%39*}4E8%_$32`M=jl(H3LH16s9oacl!Udy77OPOoW3oY3&g74fb64#`!(LDKBf zwVw$IK}1;y(Nca0dSuI~3DWFlCilc2^0{>;g;ndBZIKUE`&CO=;90^byMQ`Nb*N=6 z)fss=rKHFaNHa(=#-jEgn}kL@88ECqAkw5{&0jJ#-?flK5uK`$+`XJKzwS-RKwXD= z125G$`PW$v;*(b%0VBqObJ+TsFY(4^ZyoDAA(UTkD>WjRy`;1hBQS@p!l1K&7%75b zYvmR^UEl$!t?~#zHvyzei#@FSm_fF4p8Kk;I?ciGxj{W=q*VTdF&s!Cvlce?PV#Zc z13lMMDEX$G@NAaYqVi^{M&7)f#6PUCB`s>pAeh9wlj!pWfeh9(oyu^f6w#nx#$pIn z#=>Me9*)N^DIrA=`Vr5Lzu0&%pc0eVi^_Y@^U!K!@eA+)xCVNJLS#BYBWUQWWT*pm zu3fPc%}5&m-2ZP@CeX6L^`8wvSJuX8WK5w3H?cS`O$b6J>(-*eiVisrRuSE)MbJUS zDAlY_mOeH$`Fspw@2_9_xs)d_;+iX8(IITB{ZGyE-ypCZlIxQj$&?D&l3*>Gt z%A!*A{x$<)GV77Zvlf;X<^mT8`XgG+pRxw2++#zI>1ae*JGy8zC^6R6gd&hdVgzT*;sgeJuGL6Y zWH(C3A84=*ID$NxwoloeJQ3EaH zufLG=g^ji-t3S~CYLY9*8`LO%RqBkzGWrJs$0DKVU{T6!8*-q!{8QZlj`Cu!9d~EK zht{@o!Zxn*WfV2w|Di(4C>^*L#)Mg6-RtDZd~s`IoLL{Cv;}kB`cxN_d(C zBPUFs{pXj+$S~qzttv-Od_oW()3-e7`=#k?7W9n_Wf#od)!^<=&!`e{(~U)M8^;Ct zd-9j)D(3_*SRxAV^fD!d1YU(YpO0w##WN||RX@y#*(I%ihj3kL@~Wpm$d^S@2kk?n z766aDfVn^yVS<`5bYp`GwXaU+PSaJ#Dj7fgrPA*UFA>KPs7nLw(uacN#^KRHA-nHR0<1o+3hfGdgaUSOH&eS9)$Ka^a#To z?8TLgR=;J$ZWk=1jIEW~hbRQKq6=~pMkiR%#QvMe760OUe4F|sf7K#`C%w6k5PXNq zCFM1Qv(w{aNDb*Q@pwp4Z;)p^>U&!r@U{iV@&?b9u!}eEEJ3{aH%o0MB_PKUPJUA* zFo?nzY4Sh)C*c2dfu5cDx$%r&VrbZ!I_%Y%Ecc#@0d(#OwjXEVXv}YQc zsjuG?69H^{1|v6jjqzu=sIla`sQeG!5!$g{gddoT;BNKR-I0dIzFq=x7x2Z0WBhWBipP4kG+j;828piy_D*+e| z^Sc!UkETJ?kVXley!^FshhW%&@j8_3iYqIw0B{%KAmVh7@99$kd@SFPGqhI@_Z3~m z)5wrAdr@nR8ktwy3hz=T22(kMBjoqFF5)SeaxdjFU&-M(+7OK<{|oPNu_mO2<6+xR zi0yM=Wm$P_-VR?z9d4%K4{@peOr|==m>Nl_i9&ZmTlXr6;9?nTvUZz}u|1|kwaRDhZq%J&X>oDZ*66-?Y7 zzprG;G1H7f5ob9F7ca_duZqz)&%rBWnN6FuCS%B?HCifJ+Q-WJW z;()xY4@iT*82w2}Qcoo0-V_;#<`8j&o|qLg6&bK~4)rH5M*LQt`RWP39v{)juwmQE zDF_LLThY_~c`kx9G)_Np$lODC%ZEuDLxx`)4i+XlcPch>aSR2*dh0u9HgKvR_`% zJgzzLhZwW;+=W$3@2udbBi#of{uU**66%XdT1W0L`>viTrCrmKvW#~Uiz`aN_lE$Z z7q={0jHKySQK_#iR<;BZS=|mY=e{{h+Zp%A)t72;)55Zhpqbd1ocp$tH2k}+qXh-A z8gYeG#1~39QiA?Tp&?1?LG&CK-yhQV^TMjvKAZj3w@o(YQIv}wZy{#_pD{LLr<~s+ z;0f8*+(aYq8hiKUc)%={IR!XX`I;KVCP^oG*`Utcp3F;K2W2k$^r@}`mq(4?+lXzf z?%jFx&p7Fvwxka*+Zqb_eT_y|*>XMR!)p%(#hqL-c^-W66unfTs3NaZn7*7|sy1=HteD%HI&)Upri4kk!La#(o_WLYPk&&cc#7dqyUT0g zvIrjW%O_REsSH7;n=ZHqq4Y_WR8IXU`e0gg`s zYkr1~*X=~@qwhO7Q*G@$eM=ng1=|IiACp2S&WbuqIt^h+^H>aBF*OUv!cI+LGt`$I ztFRmB?&)*oHS+kyx(BqTZ%(pmhAs& z`#L#&uO81al%rn5^JP}5i4pGfy?=TJ{rh*Piz*x)0PUp;B_e@9Yos6$AqWKWvVZGp zZQ^2KuI}by<7nl|;pJf8Mrz=+{O;7R>nV7n^vatMWR07Se3e0J|Cy@gk*uqR%nG|==u z^{D0y7!s&<;b;s3pCKRJZtd4}Dpa}C^=V$4w|P`Q_;5oO$3yB3XK01l&t_hO4ra zR`%UCaSnRz7)J0{gmPG$LV=0urxrr|I~8qUeO};s6eF!7laE)%j|rn1FlU+jn3%DL z#|VUbS*m>&k2giL+-8Wdz|_7_E?A4Csiw4Hc;9)mL7YJXOR;mt2BeU6`{iIGvQ>Z5 z%eY7nNL30DyzQV4R(8tS_|1sgNjPpk-^lxBDZ4JN+|9^ALWufh)mVEGSmYt24ci0EFqH}m|I*|!LVdH1pJL}Rnf zo}7nGme50sdbh`SbSq9OX06L=v*vD3bRCr=Ku_m9w`R#3at|nsY8+pu7zb(h9ER)m zSnfa8${$#+e`dhkcDk^a-`UAFc))y;J+1=UAe}i|^JMO)?O~(xT+SKcXPE%(RF{8n zUyM}5?#+qhz~jAxt+K|Kuh}@nbBHO6AR?n;f>vmNJqc<@txULA5?Q} zgC%Z^{IqQ#H247|1F#`?riJvR!gp7iIq`vN=a@3lyBwd+^uVu5bDU_;xX$d4ePYB~ zP08%LCd;!r2}r3T)USKq?Sp`iPFKQAL8BcD9f{vvF$RI+*-EDf&fmkP1fQ_x$$!M( z%n_Rw6A|k!B~jKF$*Do>I;@WT)f=(b&?_5AVG5qO?sLkoX;N4hPDD?Pg?@kH}(*=A^i)vExPD;tUimFqML*`lg2+uq11DuuXs(Jw}2LBh51B zGHVpON>ZUn)I=9BBF56Wbp^@OJdVji7ZWaO2LZYPhViblNyprD>SQ*%&UG|(##m1S zjB94zT16=@gt+20#mQ&PI43o!?k%1MQH~m|KG#?CCV@nz61t@jljgzv3m3Y(yE>B& z3dS(wrCz?x0_Q`=ck;j|v~e3&1&OOZQz*r<@HPwNqHHi_*ZRFVfz6{p?s4(8Mnsm0 zQSJ8PV@wB1GW<^!CCr$owBugCR}jp~^@t5BR8NT%_7);iJ2+Ia&r5rmnTn)Elph(; zBKGmmDQOy2ZPqRWn9^(Hm8&-san0Z=qDm_CUnwUI|)XUfu-I+0Mb zuRptW3Zu69jl5La#kgY+#%S;m=vQP?RZ}g28`}(HqzmxH?)61?0fW-#IQsO6HsU;P z?#%|x?ac(4b!)pdnz69ubzZa1GW_O_+&33NYY25$VC)0I1w2MwFEY&IAa>8(o)2?0 z6ub%4dOxr=J0Aw6OrJ;Jp6c}!3K@WU=Ek08-fWmxm9AkVmp}whzRF*YO5o>30LXPa8$KwPy0NMgvxDHGr}|?Ou8{KQnLH9bm%?ITPM-SI?b9G8hF@n zTelfS;(Si7j>8^5Ag;B%6Cbt+cQk(GyjZR@RAOeVmvL1c!%+(OO-{yOb` zu6B!CT?n3f85Rql1=;h58ic9STT}^BPkw3bC+Gq<=w#hKz>JNKanLk#S*3#Sd|xK|F1Yqr+beIC($39Ga|IUL6z zM9q4z>OINPy-wI&3vn8wF1`H-NhJNXkDqne*gG4Q1w5o%GK^V^iAm8S(Z3~#Pep>) z%~Am}cIcy2?dN{-;QKBrJ4j1^W}30SFn+fT3u~*Xn)in z;Mn*r)!oRdd4D``HskF6%R`ILv{oMlx@VQ(uFBXD#ARKMj)1R@iN4eaO4c-(Lo2q9 z$?3Irw@dnQlcMYYsV9nT0*k^e?72R~rcer4_8jFtLi9;d8&=Xuov3W-G8E&L*U3U| z)aZ3gVzi!9S^{rufpQLj^YDqluDX%UeDU1jFL0;|tnmqm@M>11uhDE-!gobS0!ed1 z2|OH`&R!eh-%`QSjSYHU_oEG!yJMjSJ)yk=L2Z&NxfBlS($P+CZ(%NH{6LC{%zZ!>o%SPNAJrBd=nqt7w8uu+%&{9_(JcsL|b;ux#kgsN(XWt#ec8`lg7l z)3&}*$Z->y$Wdvf3nU(eyp6b%%W}{bZW5%L-bS&j*p%>N&nT)j&Jnf7AiuMPJ~i4R zGV1#-Zf=_mg_%L1P#|L8x8e^agnVjTZO;2ue+?bCB_<}8-FEP(tYAHb{3TzVaDoMY zXzs-d-yZJjv~6WA#FVwNt)}palfTdO-;TZCwWD6FNL-Vx=nHynh1+DEHD3hO8+*;9&h>Pa5Z!U1qSo-o_`e;_aYaahOZNH}<%{ znf9nKsJk6#-#h(sg0=5!l-!N;>hmm%#1}~wklbvYN+xD|HSq=}()<^Ouez*5lW=Sq zdr4?e(XLZk@i+|bG^ik4^$qw<5wE_e16)jm-{{O_FeQ=ypk5L$z{swsK^qV z)y;CDUx9$g!`p)}ZCh>;+-+se^K(_E8(97oW de;onvu!IO)Cm2;y7|sv;NsmX!bi diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 25716f576..ad7efbbf4 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -4079,6 +4079,20 @@ console.error(asyncResult.error); } }); + - >- + 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.error(asyncResult.error); + } + }); - |- var email = $("#emailTo") .val() @@ -4241,6 +4255,20 @@ console.error(asyncResult.error); } }); + - >- + 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.error(asyncResult.error); + } + }); 'Office.MessageRead#sender:member': - >- var msgSender = Office.context.mailbox.item.sender; diff --git a/view/outlook.json b/view/outlook.json index 6b9c029bd..4f9a24312 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -14,7 +14,7 @@ "outlook-recipients-and-attendees-get-set-bcc-message-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml", "outlook-recipients-and-attendees-get-sender-message-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml", "outlook-recipients-and-attendees-get-required-attendees-appointment-attendee": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml", - "outlook-recipients-and-attendees-get-required-attendees-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-organizer.yaml", + "outlook-recipients-and-attendees-get-set-required-attendees-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml", "outlook-recipients-and-attendees-get-optional-attendees-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-organizer.yaml", "outlook-recipients-and-attendees-get-organizer-appointment-attendee": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml", From 7123bf91121f28122f4449f99d14fca18273aa63 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 30 Mar 2020 14:46:42 -0700 Subject: [PATCH 257/660] [Outlook] (optionalAttendees) Add how to set in Appointment Organizer mode (#421) --- playlists/outlook.yaml | 10 +++--- ...onal-attendees-appointment-organizer.yaml} | 34 ++++++++++++++---- snippet-extractor-metadata/outlook.xlsx | Bin 17522 -> 17564 bytes snippet-extractor-output/snippets.yaml | 28 +++++++++++++++ view/outlook.json | 2 +- 5 files changed, 62 insertions(+), 12 deletions(-) rename samples/outlook/30-recipients-and-attendees/{get-optional-attendees-appointment-organizer.yaml => get-set-optional-attendees-appointment-organizer.yaml} (55%) diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index b0a715488..bcaa1abc0 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -156,12 +156,12 @@ api_set: Mailbox: '1.1' - id: >- - outlook-recipients-and-attendees-get-optional-attendees-appointment-organizer - name: Get optional attendees (Appointment Organizer) - fileName: get-optional-attendees-appointment-organizer.yaml - description: Gets the optional attendees in Appointment Organizer mode. + 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////samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-organizer.yaml + https://raw.githubusercontent.com////samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml group: Recipients And Attendees api_set: Mailbox: '1.1' diff --git a/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-organizer.yaml b/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml similarity index 55% rename from samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-organizer.yaml rename to samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml index c72eb794a..3e7686dca 100644 --- a/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-organizer.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml @@ -1,13 +1,14 @@ order: 12 -id: outlook-recipients-and-attendees-get-optional-attendees-appointment-organizer -name: Get optional attendees (Appointment Organizer) -description: Gets the optional attendees in Appointment Organizer mode. +id: outlook-recipients-and-attendees-get-set-optional-attendees-appointment-organizer +name: Get and set optional attendees (Appointment Organizer) +description: Gets and sets the optional attendees in Appointment Organizer mode. host: OUTLOOK api_set: Mailbox: '1.1' script: content: | $("#get-optional-attendees").click(getOptionalAttendees); + $("#set-optional-attendees").click(setOptionalAttendees); function getOptionalAttendees() { Office.context.mailbox.item.optionalAttendees.getAsync(function(asyncResult) { @@ -28,18 +29,39 @@ script: } }); } + + function setOptionalAttendees() { + 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.error(asyncResult.error); + } + }); + } language: typescript template: content: |-
        -

        This sample shows how to get the optional attendees.

        +

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

        Required mode: Appointment Organizer

        Try it out

        - +
        language: html diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index c7e37cd4f47bb8d9f240aea72ef8df60ff486736..b09f3891236440bc107b59ecf24e9c22128e87bb 100644 GIT binary patch delta 8058 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 delta 8038 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index ad7efbbf4..04878a10f 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -4079,6 +4079,20 @@ console.error(asyncResult.error); } }); + - >- + 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.error(asyncResult.error); + } + }); - >- var email = $("#emailRequired") .val() @@ -4196,6 +4210,20 @@ console.error(asyncResult.error); } }); + - >- + 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.error(asyncResult.error); + } + }); 'Office.AppointmentRead#organizer:member': - >- var apptOrganizer = Office.context.mailbox.item.organizer; diff --git a/view/outlook.json b/view/outlook.json index 4f9a24312..df974f298 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -16,7 +16,7 @@ "outlook-recipients-and-attendees-get-required-attendees-appointment-attendee": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml", - "outlook-recipients-and-attendees-get-optional-attendees-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-organizer.yaml", + "outlook-recipients-and-attendees-get-set-optional-attendees-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml", "outlook-recipients-and-attendees-get-organizer-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml", "outlook-notifications-add-getall-remove": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/35-notifications/add-getall-remove.yaml", From 8af798441fa13359fdfeeea220a689d061eff8e5 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 30 Mar 2020 15:46:58 -0700 Subject: [PATCH 258/660] [Outlook] (master categories) Add how to add and remove (#422) --- playlists/outlook.yaml | 10 +- .../45-categories/get-master-categories.yaml | 64 ----------- .../work-with-master-categories.yaml | 102 ++++++++++++++++++ snippet-extractor-metadata/outlook.xlsx | Bin 17564 -> 17704 bytes snippet-extractor-output/snippets.yaml | 66 +++++++++++- view/outlook.json | 2 +- 6 files changed, 172 insertions(+), 72 deletions(-) delete mode 100644 samples/outlook/45-categories/get-master-categories.yaml create mode 100644 samples/outlook/45-categories/work-with-master-categories.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index bcaa1abc0..2fadf8495 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -232,12 +232,12 @@ group: Categories api_set: Mailbox: '1.8' -- id: outlook-categories-get-master-categories - name: Get categories master list - fileName: get-master-categories.yaml - description: Gets the categories master list for the mailbox. +- 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////samples/outlook/45-categories/get-master-categories.yaml + https://raw.githubusercontent.com////samples/outlook/45-categories/work-with-master-categories.yaml group: Categories api_set: Mailbox: '1.8' diff --git a/samples/outlook/45-categories/get-master-categories.yaml b/samples/outlook/45-categories/get-master-categories.yaml deleted file mode 100644 index 0d652a583..000000000 --- a/samples/outlook/45-categories/get-master-categories.yaml +++ /dev/null @@ -1,64 +0,0 @@ -order: 2 -id: outlook-categories-get-master-categories -name: Get categories master list -description: Gets the categories master list for the mailbox. -host: OUTLOOK -api_set: - Mailbox: '1.8' -script: - content: | - $("#get-master-categories").click(getMasterCategories); - - function getMasterCategories() { - Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var categories = asyncResult.value; - if (categories) { - console.log(categories); - } else { - console.log("There are no categories in the master list."); - } - } else { - console.error(asyncResult.error); - } - }); - } - language: typescript -template: - content: |- -
        -

        This sample shows how to get the master categories for the mailbox.

        -
        - -
        -

        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/45-categories/work-with-master-categories.yaml b/samples/outlook/45-categories/work-with-master-categories.yaml new file mode 100644 index 000000000..f751482cd --- /dev/null +++ b/samples/outlook/45-categories/work-with-master-categories.yaml @@ -0,0 +1,102 @@ +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.' +host: OUTLOOK +api_set: + Mailbox: '1.8' +script: + content: | + $("#get-master-categories").click(getMasterCategories); + $("#add-master-categories").click(addMasterCategories); + $("#remove-master-categories").click(removeMasterCategories); + + function getMasterCategories() { + Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var categories = asyncResult.value; + if (categories) { + 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); + } + }); + } + + function addMasterCategories() { + 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); + } + }); + } + + function removeMasterCategories() { + var 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); + } + }); + } + language: typescript +template: + content: |- +
        +

        This sample shows how to get, add, and remove master categories on the mailbox.

        +
        + +
        +

        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/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index b09f3891236440bc107b59ecf24e9c22128e87bb..4e918af713b75bac8e8afd2201faaf347c69c9c6 100644 GIT binary patch delta 8319 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 + 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); + } + }); + - >- + var 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.MasterCategories#getAsync:member(2)': - |- Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var categories = asyncResult.value; if (categories) { - console.log(categories); + console.log("Master categories:"); + console.log(JSON.stringify(categories)); } else { console.log("There are no categories in the master list."); } @@ -4981,6 +5012,37 @@ console.error(asyncResult.error); } }); +'Office.MasterCategories#addAsync:member(2)': + - >- + 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.MasterCategories#removeAsync:member(2)': + - >- + var 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.AppointmentCompose#recurrence:member': - |- Office.context.mailbox.item.recurrence.getAsync(function(asyncResult) { diff --git a/view/outlook.json b/view/outlook.json index df974f298..1e0dd7f24 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -24,7 +24,7 @@ "outlook-attachments-get-attachment-content": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/40-attachments/get-attachment-content.yaml", "outlook-attachments-get-attachments-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/40-attachments/get-attachments-read.yaml", "outlook-categories-get-categories": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/45-categories/get-categories.yaml", - "outlook-categories-get-master-categories": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/45-categories/get-master-categories.yaml", + "outlook-categories-work-with-master-categories": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/45-categories/work-with-master-categories.yaml", "outlook-recurrence-get-series-id": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/50-recurrence/get-series-id.yaml", "outlook-recurrence-get-recurrence-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/50-recurrence/get-recurrence-read.yaml", "outlook-recurrence-get-recurrence-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/50-recurrence/get-recurrence-appointment-organizer.yaml", From d54c7b38737eaab8e33a59c1ca1e2d6debdebed0 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 30 Mar 2020 16:41:28 -0700 Subject: [PATCH 259/660] [Outlook] (categories) Add how to add and remove categories from item (#423) --- playlists/outlook.yaml | 10 +- .../outlook/45-categories/get-categories.yaml | 64 ----- .../45-categories/work-with-categories.yaml | 122 ++++++++ .../work-with-master-categories.yaml | 2 +- snippet-extractor-metadata/outlook.xlsx | Bin 17704 -> 17917 bytes snippet-extractor-output/snippets.yaml | 266 ++++++++++++++++-- view/outlook.json | 2 +- 7 files changed, 378 insertions(+), 88 deletions(-) delete mode 100644 samples/outlook/45-categories/get-categories.yaml create mode 100644 samples/outlook/45-categories/work-with-categories.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 2fadf8495..66ee75906 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -223,12 +223,12 @@ group: Attachments api_set: Mailbox: '1.1' -- id: outlook-categories-get-categories - name: Get categories - fileName: get-categories.yaml - description: Gets the categories assigned to the item. +- 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////samples/outlook/45-categories/get-categories.yaml + https://raw.githubusercontent.com////samples/outlook/45-categories/work-with-categories.yaml group: Categories api_set: Mailbox: '1.8' diff --git a/samples/outlook/45-categories/get-categories.yaml b/samples/outlook/45-categories/get-categories.yaml deleted file mode 100644 index 277399308..000000000 --- a/samples/outlook/45-categories/get-categories.yaml +++ /dev/null @@ -1,64 +0,0 @@ -order: 1 -id: outlook-categories-get-categories -name: Get categories -description: Gets the categories assigned to the item. -host: OUTLOOK -api_set: - Mailbox: '1.8' -script: - content: | - $("#get-categories").click(getCategories); - - function getCategories() { - Office.context.mailbox.item.categories.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var categories = asyncResult.value; - if (categories) { - console.log(categories); - } else { - console.log("There are no categories."); - } - } else { - console.error(asyncResult.error); - } - }); - } - language: typescript -template: - content: |- -
        -

        This sample shows how to get the categories assigned to the item.

        -
        - -
        -

        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/45-categories/work-with-categories.yaml b/samples/outlook/45-categories/work-with-categories.yaml new file mode 100644 index 000000000..c28c5abda --- /dev/null +++ b/samples/outlook/45-categories/work-with-categories.yaml @@ -0,0 +1,122 @@ +order: 1 +id: outlook-categories-work-with-categories +name: Work with item categories +description: 'Gets, adds, and removes categories assigned to the item.' +host: OUTLOOK +api_set: + Mailbox: '1.8' +script: + content: | + $("#get-categories").click(getCategories); + $("#add-categories").click(addCategories); + $("#remove-categories").click(removeCategories); + + function getCategories() { + 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); + } + }); + } + + function addCategories() { + // 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("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); + } + }); + } + + function removeCategories() { + 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); + } + }); + } + language: typescript +template: + content: |- +
        +

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

        +
        + +
        +

        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/45-categories/work-with-master-categories.yaml b/samples/outlook/45-categories/work-with-master-categories.yaml index f751482cd..92d7a9805 100644 --- a/samples/outlook/45-categories/work-with-master-categories.yaml +++ b/samples/outlook/45-categories/work-with-master-categories.yaml @@ -15,7 +15,7 @@ script: Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var categories = asyncResult.value; - if (categories) { + if (categories && categories.length > 0) { console.log("Master categories:"); console.log(JSON.stringify(categories)); } else { diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 4e918af713b75bac8e8afd2201faaf347c69c9c6..15a021f5278af3fa0cd497e6efc2deec620e7931 100644 GIT binary patch delta 8190 zcmY*;by(ET*Y>iMG)qV=-616*T}yX&BPAk8Bk%#Fkz7)`OAzS}QIPHiK~iEtI#%H2 z`~AJo@424&Yvx?{+~>@hIWu#eQyznI7mHG>hKY`EFYFD0Yh!W&rA_5dRCrEwXw(5P z7I%|arg&&%lkDHCoaxf=kkS}D()O-;TB)m*8&UDKl<<=gyFPhA+3OJnj4GX^6K4_G z?x)cdbVb??Lyq(uLb9fF`DZ6rZ~7V&H4|jTDL`6+j14-K@my8PhM$T@Gs}(9bIpDv za~KVk%+4fFelq5R|HZ@x8swt3*vT2j{f6urUaJ~ZP)FIJ>q~bVpS0~w4xN*J?w6bww3J|{@5W>{}h+8Dh^iTC-6t?zp^Q)=% z2u^I5zh38{WhGE%M{JoSOL*k;p>pm8CZ+oHoW@%%+&c*1mdwrqDrg&lkT__Ih@<$3 zU+5c|H6D4FZ5eB+OL^x-)TDBTKKxvDfUNY9u@T0v(B_t5j6Da0UK?_ zSwG(+%C{Gj`eQpEo?rYOm_S-IlHBUAxi`7SSN<;f(z>h9GRJ6VL)G@R$+C^UBiw7Z zeK*r2q!Kk!`sC0>irlg$nAbb%GpCB^$Au@IYPPbn{AcQ90HGRLA8)U&izpNMH)1Fe z06sybKfo)h2?W)<3RQA%HZ&I_Q$eCPIl}4)I38yQ9s-(Qjrs&Fz<_1 z*|!$zJY!M^^73idYQ;j`YOYj)JeB$4ksJ)!Ru2h-Zx{zh$cG z8}Gh;f?6duTJFsJmlCw+O1;OoXiCr@;IQDZZ!R3`YHxCNx7Yo;Bm6gx_r}iF(YLti zs^RZ14XN@lth~SnUpR59G>5N+K_Jk>11d;M6%~yHZYF_MAC3JSj8Ev;<}FSP0_{eD zK;$5Jfea;(ZNBVEH3$hLNCfDvU6a)D--K@WFf{%EW7YoHIaSkTjICwj*t)L6Iz6tS zF|o-L)wi7kFD~rtRaQ(lPp?jMb=^%j4@CY<_Xie^a%*n)Y!;4ZHM3R`mwTJ~546C; z-e|{~n7~2V@EW0ao4sChyp9~Uem+`nvqrafz#ra_!yC+fp?F` z{4n=`Rp!VWIpD?kumV7#xmOprO@jUbE)?A-H~)kB}iRdWyeT+D%t%zK+!@=wB_b2A={U3CN( z<}I6AQ8a55x_OEP{4NAVMW`M$9HtE&TH7wu^O~Ct?;ge?W54^hn05L|QI7u9tDij` zMP40O3D3`;2?PT5ZLPUn_w&Hjr8nm@Alvxj@?us0A+W7Ox!wu*bM$)o{e5e7H%(0U z)yIoS%Y#V&>6z1%nd5EzTkB?I3eG(jE#CLtv)hWJyUT-m0T0vCMTv)!u2*RneecDs z>8)#oM=w?HVpH1pfd#?QBR(?60cl3sRfNw&McxwKlEe0&I$f>+&$s7oCR>nm;5hC5 z-@CV|IzyN54WDkWS(4w);AdH0b}rw#-rW@3EFT@@9UumfP;W17Wv`ukUq9q>rKF1; z-ILB(cklK^i70}bho7551de+H2X6*$7k&y|8Qx8v+wfPEo-G!yA+=~f=5-l<-#L@{ zaerV`9`|Q9+B1AE`tQv}RKfsRJ+SCv7Kdt4{MMA`bk~Q6@#fWlZTQPqbU=`BhCZ27 zOO&{tQj_G?c=|*cnSN^JFVFKnY;q`P{p<4CHskJh?Q4OELEcmo38kvx;&krsv5QZq zp0xgc$Ie;pkvMj>z4`~S9@}uaBj#;xRHLg&Au;V!X(2B}g)wwOMm-pkZs+|)OR z6D6N$MT12zhdxlNc^)#qXheSSJgc`&uPa;NoZUs43ADHA$7dm)U84rHPNt>*=*$sx zp?P&`jxO}(#IJf|7L0=nRE+^CPmpHZ3Vz4-$iF=CQcol~*ILhtQzX!(baODIC3MF| z*Lz`@mZ7Y;HkN2M|M1V+1>)t$2U&Kan#(-SL)R#T7_;iriCB{7>ZVcEX;#Aim6dHI$kf`D5iQ5+p4&9 zmCASh_qnu7c+`2R4!$2RstQT`zH0UVOb8}cVtJgv;l^IN97Wf!+dQph@_eA|d8110yMLRah6PnkRz*eV?cd#{+^+n~**UFlxCO=(zL z)Lb-C^YlEe3c8MkaC!ZG6hcx(v+7QAI0-~Kx=Ko)2$D^F$(=({Ctix_3%V2-`jVwM z;}zC!u)o7RvbvIHcs|Ial4qL$gIS&xXe-90v(3LavaRTcTo%SD?L8?@X%}(TsK}z7 zO%cU6f#8KnP(oy=L-O}8B=XJnN~&u@s2VP8;v9FMgvIal5>Z#7FJQY2_?Lv2*8@|O z@_PJalIljcA@iWKC~;Tw3ZLL6B1~y&{LLueov&pm6-bPHy|t+Qm!yRjpB|s_zEYh$ zVvy*ZVpp(1rR6H!K9@>ABzz?N?u=Yo#DGM$a|v~G2uH|s42QK|U_4GWL$oe`4jcQ! zRG3nVq&X2J5bARziLyI&6?h?*?6rEs&v(Xy+F)@IRy|9_`%{JK*^){b~sU~m~CbqhLnVHVw33KY>tToZX`4W1nK-EE>;viXO5zceZ zIAy&3bzoVU=SqQSJV}9`rl~1@2Qz!=<1+eMwtotPib=0K7oMqaQH4IO%N`xEb{Vlc zgUUx7q)H4Mf(<3taZzywQlJb|_V}e+>wgo&hKcirkKIVR(~1#@5n+EBhrf-Y4s~%F z5yUAcbAj=)x;0d`bLA`4mhfTzD|yOV!lf}YbWN!pcp;~yx;z;riYY!(M5sNCb%;0* zLeV~gmhjCB=a{y{(gvLd! zp~Y)DE&QqhlAW8vME*6UP6*{!p*1EOo*43)#C)n2H61_P35IxUZHXW(vBu<`70%an zpx}!uH|IVi5QB*vJJKm^3xGqJBaCDSQzHj~5GV|JG<;;TI>c(^u3aEkH1^gB zhU)PvJ`+_dS432h(5$^zLBI{0vfPp$?2Oy5frs{wehdwrtSG&MHFA*bKz$U(&e!`|xs>;a zm6MP!R4y=7hx`!#1(cyjP|f00tX{GBAG9t&Pa z*XtqN;ZaM2WCZOI=FLkXd_MTR-d#b@V;{Y>!gtvA=nD}e-pkOq^3_ke2#}!v+p?vC zFJvwN3}K(+j9CtG`DaXgC|>B@S}S!3%GsAM&7Z54OZVRa3HXsPI13*?I<<`BV@dv; zx}CsOdJv(P_rlq~#=oMI&J4YyRuN#pt`$3HgQd9R^PHY9Li3-OWU0!G8i3@Pu$e_Y zygARJEFN$4YOO-G-g^b+mTV$)H(*aYs{D7ySs2MgrbP#~a}!vJN1JUjv)(sHQBQ#E z$T6JgCHAF{SPyeExaE<%!3!U(WLp4p@PEeGv{P(C$%pQnKcB=9BX+E3_Kz7VkPjJP z=(0ZvgQ$39mB`Ga=4ne0B2y2p9#?ojSbQR>NgkH-xD8w&6%w>YfGrr(2+q$HUACIP^Qf*~< zh>{-7o+2rM4e_$@JhDgGHmKF~?ER6iB{}&RBD?72^+Ci0ztu(!Ibjv!>A9U+j2s;x z(z)XW(6$yJqs2Z$bRip8jwsZ9jgqs6v~V=d217mKK;k|YnvJdR#zw6YaePLYnTL8q zpJAGQb*+Vjn5i=QLv_xz)Z!3@^^riQPB~^XYRKXdD6G01}PGVkZi5A%P8Ue59g;L{TFtKU?M1Ju4pL)O=bH zg1o<+3ti39(Zc@KJG~7^O)lX{#b6mxQoq3Aj6zr({(H<;DE~%$MwzwU=3?3rWm*nV z#U~)nI+}7n0-B_(EIi-Xrm#@H?OFmm6S$C#-#!cZD=N-~vXjW?Loi?Wbv04W21~@> z*9ffUFe_3}D8j{emLP+E`8fy?IYY#MFf!Zxm5D-|-N(aAmZ_Cq8}A~$Dz)`2Ug$f~ zmGn+->k@;?x00pF)d$?=)C7h>wVvu>redHVQFEXise=~RrWm&s1-W`^D1ttIGuTXL zouGa5Cs+5)8rv=u;8aKuWYn-e?(9tc@%$cwEgGyUkF=TX3UgWwtibjeofD zP2O%3U$&jb8dK|Jiz;(*wUp8l>L0T_X{NA?E{onVv62+sO|<>4nf~yfAx&c%0H@#* z-C+G;uBCs@b4aiRgNVe~4UBg_Uh-BsqdU@>W64sNXi zxuD^SX$h|!3o>+uZM?}nzFkVdDS}Hds5&9&2 z))DZ+lNP;x^#6#2`5*wn)i0g(55Xuq!6@FS_!W#>8`fTEz6EQ>%pujnk~e45nVYig zDI+uv&>yAQXsi>BGW=kAe^y zj?!Tl*UM)w6&0y#EK_j>i@zi$MGF7Q!2YqmQCy<$J%ZlU5N`RMnW;MiCu$k}@{?R+ zS*rJ!H+g>e+`TgqS0*OO(n z{Vrl{;C;LEl4{Focn`rQw--UQL$z^)&iW05)WPS2YoywCHjd`0g47I0j$y8eL)p^v z@`dKy25McA-3{HL#b7WsE`G7ouUO?+T#m6W<3&DFBYaqj56b=KK(*AlV)-MHmUdCqPf%IHe=;){l782irU-*E4d?`Ksl zVNDkqV$sX!@|mqKkp60gcISNKpErnf-l@5LLxfhUA(i-=m(dY3l8Qkiz5n31y2QMa zi%U3|1^CDud_Es$#O@m23CRD>hr(I4fp)s=-?(aS_2wzm?(TOS-1OfgS5!J|duLQJ z$P`afsXapO0)H90V>wBdT5NcS1p2yr{Jmb*P8R#=MAl%-o%?ti8oH0imQ#4$;l1Cr z178l9SpmnZHR)?YQNJa(tTxVg!-#VlgT@bwcTV-GU|$T2`wZqkJEu?J)AGNd05;Jt z9v9M<5M6M7th>q-p7)o7yFeny=e8`Y*0uR%Kf({!D`y$q{dm@7?6>Fr5>dTe(vht{ z+xyreGQxJ zM9e(A7vt|avJDc0-$5czm6(5A0^ht6GK(Y5CFR}fk0#>}Xx!43l@{qqQ+m-ze2bUt zQ+e@bqf)?b!W)S}a!qWEHWS82&oW|%qOP+${WQ)zgB~J^wG_VPmx}9rUpac_IN$}0 z{Sv@~F2IyHRTcfJHQ)S508sFxP;onx zjjt;@BkD0{p%08W)Cq_P&#b~_8KdZ^vt`-sa3LtER!KA)B4^DnyiG@J?f!v!^?Mrq z^>7Jpe@!%H|3myGuS{IY6@!gyf^Y3~Hy2Ac!Y5v6mrFkcvQ|BsaXO?Wx(l)>8Dbd4 zSa}8468eO;Ska;mN^5TP2RhFs7@v-s55>FAgO2#IoV>GSaXjp)q&hOpE59w>IxwZ} z&8CWEQ4l0wk=$<0aBT-TiHGw$Q>(rrs&uMB=y<-EkrYAJRqO~x1rg~ssj>!%V>Val z551%`vD+FklXBH9O1vLrq$uYpaVd=;C{nN1`8hnA-Oo8u+Imi~oPslWVD-__Qe{yM zj}}9>D#c#(#bX+&-bDDo=S|)`?Ll|V6>YO-+pJ#53g_J}p&9f~4MxHVPZ-)BCoWR&)@k7k(R6Rr2MezI)~6Jn1y8MnIXZudjBKyMk2x3>^Ax+cEXN(E+r+rCCelNEr5hi5a>WRPOQ zjX9Z3_?YA@$@}KX!wK&UU)$)my*KehoWz4f@d==!yUpjTTawvv05(S{zz7Yg_K_^W_dXJ&7m zEXcyC8a!WMMP{tvtZVLt<;2FH3yRiW3un`KMTC0c5l7xHrYTfobG1YYSH_Dlczs7b z2v^FkBNL)R{hK|TCj+s|jYXWEFbligzEd0BPkXXi#KmHx_og!lM+C5>rn6VEsVG!m zq&L6ayQm{0LPPV9mXnVU!Vl8u(Y>FFNsG^UKa5O(F^%yoDKfBhP|0OW$J2>t60~$|jAO<8^Ie56G=>ZD2YFQ4`MuxV6I= zGEiU{$;@&j@v>kk;-2PJ??K$}sr%ek4$_=Ijs%8Lrq;p;CgM0EsO(&ZMy2vPVi!;NF+7>8e*;;s_^^=gq@)~;`r>~j zqmt1^RJTB|UV)y-P%Wh++XErR)WYB>+-aI(MQLaAiHgDka5iWO#4a7dD{@@Szj)}+$t6ygGnac#1 zY6^bgiuuYx4-il*_|0iEiS2ok0Yi!?&I@Xi)+Hh==xfAnnjhdp>2Ns53wH4EKODJX zq%##}%YdooBPX>Us?OWcn1w^WR-D7 z{Njx>?Kt6kXJ7lmQn}}SOO`zJZ8ks1a5-i^t`AR0Qvt^hy!-(Ui=^@y#yd}$n{A%8 zJ`*%k?izCYfbcjn*i+o`05*~`ooe5gCrlm>xksDU9c3Q z#JcvKx%$i~v+%V)Tu&IhR@u1f{KTG1{FiLzTnhB>B|FTcj*hl7C#+fz6@;MxI+Pd& z#zGn6`vZZWgIYeAf9;G7ePvjAxg592`fEQ8@yYp{RV#kY_&CEsVR3ONmSZIc#tV8r zHYGSn&%jH6IwRlfFI1t*w5Xx8dF1rDPDlA>YsmYfjRzNNN~g(7>Uu8kPzluvJJwIb z4s&MTEMx>!jdCy=_4-^>SR7|HfF<~^O;FxGaH=#G(o;8-Tqv7AxCyq(Fre!r0h>8c zd?gVig?Z3z_k7Uo!x9rFc?aRa3LrRFtL3&%>L;YfCLf>VU!Y(H@(>PE?gDpT%;<+Fs4ad!%?4aWuizVXYd5&yc0 zYn~ynD{zdkb{lBgU-^Q`2dqM4eL9HS`MlCgmg^K8H|?hrR@~PD5RC8iPsN-XGg{hZ zR$s3_h*E#7B9k@f{&y46Ys6_&)aqGZ@S_0f#rnds%OOL#&?g!sYc_A2^|J(+GFR_A zo!V#dBi^)LWe12{CA)MP>Yt;|r8bU1atKL6o;Gq_uqb}6k{6dtIx|zXn5BH{35wkL zexc8TOWYXlU`kcng+_*+?5&moecdUHYs=b{-;#wEiNDd-6ob@S!V@wJIKx{HOB4e> z^>_?Q3_Rl%LWNK#>EJ5W*Xv^@g5}V$8+i z$1-C3vufg1WWMEZ<;l@WIcWuYii2Iz7wm8L`Zk?IV!|ez)SR+cJ|(9x>w1eJ9qY4K z-@q^NyaKK*ZDehd``MkM*{uaAAezCFS2xFOK`8%*Lz$>C#{aK@qs!=^1i+1Co>BeZ z;@@L|@W1UdJYPm0Oiu^jm5~DHKPF&hX`%o9u~33QB>zSJ)2ZNq+saCVQ+VM?&xzrO zJa}+nSwi?VFCp&#!g~4OC$bt~{^xKRIZd#dz$26s-YLfc))j>B$%#9Jf-6`EI%_RgbNI!h* zt@nHH`)j^4`|LSu&zxB^bMB+SMUmht4Rlmpt-))2m<~D@z-l}#R30jXkAy}SubMvV zK&Tv}V8ZZlJEp2 zP*y3=E@?vkmE#v^nVc=`WKC04zJl(v5fw;V*s4~yB!;V0)v)aQXhhL#)J)TX1P-I2 z{F&*5iL%%Husd{2V44YXMvfi7D`g#_vXr1-f*xO%jkzbv`9>7k_!}*

        Ct|dqEOw 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 7fc4ce923..143fc3acb 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -4888,10 +4888,56 @@ Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var categories = asyncResult.value; - if (categories) { - console.log(categories); + 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); + } + }); + - |- + // 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("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.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."); + console.log("There are no categories assigned to this item."); } } else { console.error(asyncResult.error); @@ -4902,10 +4948,56 @@ Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var categories = asyncResult.value; - if (categories) { - console.log(categories); + 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); + } + }); + - |- + // 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("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.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."); + console.log("There are no categories assigned to this item."); } } else { console.error(asyncResult.error); @@ -4916,10 +5008,56 @@ Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var categories = asyncResult.value; - if (categories) { - console.log(categories); + 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); + } + }); + - |- + // 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("There are no categories."); + 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.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); @@ -4930,10 +5068,56 @@ Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var categories = asyncResult.value; - if (categories) { - console.log(categories); + 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); + } + }); + - |- + // 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("There are no categories."); + 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.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); @@ -4944,10 +5128,58 @@ Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var categories = asyncResult.value; - if (categories) { - console.log(categories); + 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(2)': + - |- + // 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("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(2)': + - |- + 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."); + console.log("There are no categories assigned to this item."); } } else { console.error(asyncResult.error); @@ -4958,7 +5190,7 @@ Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var categories = asyncResult.value; - if (categories) { + if (categories && categories.length > 0) { console.log("Master categories:"); console.log(JSON.stringify(categories)); } else { @@ -5002,7 +5234,7 @@ Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var categories = asyncResult.value; - if (categories) { + if (categories && categories.length > 0) { console.log("Master categories:"); console.log(JSON.stringify(categories)); } else { diff --git a/view/outlook.json b/view/outlook.json index 1e0dd7f24..36d354c14 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -23,7 +23,7 @@ "outlook-attachments-attachments-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/40-attachments/attachments-compose.yaml", "outlook-attachments-get-attachment-content": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/40-attachments/get-attachment-content.yaml", "outlook-attachments-get-attachments-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/40-attachments/get-attachments-read.yaml", - "outlook-categories-get-categories": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/45-categories/get-categories.yaml", + "outlook-categories-work-with-categories": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/45-categories/work-with-categories.yaml", "outlook-categories-work-with-master-categories": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/45-categories/work-with-master-categories.yaml", "outlook-recurrence-get-series-id": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/50-recurrence/get-series-id.yaml", "outlook-recurrence-get-recurrence-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/50-recurrence/get-recurrence-read.yaml", From 57d483c5e324dd15822a2e636304f8ae42c06c2a Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 31 Mar 2020 14:31:27 -0700 Subject: [PATCH 260/660] [Outlook] (attachments) Reference correct method overload (#425) --- snippet-extractor-metadata/outlook.xlsx | Bin 17917 -> 17906 bytes snippet-extractor-output/snippets.yaml | 8 ++++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 15a021f5278af3fa0cd497e6efc2deec620e7931..300b22f53c7321a902b362b65a79a49b9fc06bcd 100644 GIT binary patch delta 6287 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 a=CFG5Qb2PoR$dawf*p`&CyT delta 6311 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 Date: Tue, 31 Mar 2020 15:27:06 -0700 Subject: [PATCH 261/660] Adding sample showcasing behavior differences between different onSelectionChanged events (#424) --- package.json | 2 +- playlists/excel.yaml | 33 ++-- .../event-worksheet-single-click.yaml | 2 +- .../excel/30-events/events-table-changed.yaml | 2 +- ...nts-workbook-and-worksheet-collection.yaml | 4 +- samples/excel/30-events/events-worksheet.yaml | 4 +- .../30-events/selection-changed-events.yaml | 160 ++++++++++++++++++ view/excel.json | 3 +- yarn.lock | 12 +- 9 files changed, 197 insertions(+), 25 deletions(-) create mode 100644 samples/excel/30-events/selection-changed-events.yaml diff --git a/package.json b/package.json index 4bc655412..a650b73ad 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "@types/lodash": "^4.14.122", "@types/node": "^11.10.5", "@types/shelljs": "^0.8.3", - "tslint": "^5.13.1", + "tslint": "^6.1.0", "typescript": "^3.3.3333" } } diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 0d1ac6034..6cd25d8eb 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -319,6 +319,17 @@ 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////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 @@ -330,15 +341,6 @@ group: Events api_set: ExcelApi: '1.10' -- 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////samples/excel/30-events/events-table-changed.yaml - group: Events - api_set: - ExcelApi: '1.7' - id: excel-events-tablecollection-changed name: Table collection events fileName: events-tablecollection-changed.yaml @@ -348,6 +350,15 @@ 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////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 @@ -358,7 +369,7 @@ https://raw.githubusercontent.com////samples/excel/30-events/events-workbook-and-worksheet-collection.yaml group: Events api_set: - ExcelApi: '1.4' + ExcelApi: '1.7' - id: excel-events-worksheet name: Worksheet events fileName: events-worksheet.yaml @@ -369,7 +380,7 @@ https://raw.githubusercontent.com////samples/excel/30-events/events-worksheet.yaml group: Events api_set: - ExcelApi: '1.4' + ExcelApi: '1.7' - 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/event-worksheet-single-click.yaml b/samples/excel/30-events/event-worksheet-single-click.yaml index 615d2c471..756fbc40d 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: 7 +order: 8 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-table-changed.yaml b/samples/excel/30-events/events-table-changed.yaml index fc236ac86..bbbe20fc2 100644 --- a/samples/excel/30-events/events-table-changed.yaml +++ b/samples/excel/30-events/events-table-changed.yaml @@ -1,4 +1,4 @@ -order: 8 +order: 10 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-workbook-and-worksheet-collection.yaml b/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml index 01d55ba2e..06010812d 100644 --- a/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml +++ b/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml @@ -1,11 +1,11 @@ -order: 10 +order: 11 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.' author: OfficeDev host: EXCEL api_set: - ExcelApi: '1.4' + ExcelApi: '1.7' script: content: |- $("#register-on-add-handler").click(() => tryCatch(registerOnAddHandler)); diff --git a/samples/excel/30-events/events-worksheet.yaml b/samples/excel/30-events/events-worksheet.yaml index ae3a29b86..cc075a288 100644 --- a/samples/excel/30-events/events-worksheet.yaml +++ b/samples/excel/30-events/events-worksheet.yaml @@ -1,11 +1,11 @@ -order: 11 +order: 12 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.' author: OfficeDev host: EXCEL api_set: - ExcelApi: '1.4' + ExcelApi: '1.7' script: content: |- $("#setup").click(() => tryCatch(setup)); diff --git a/samples/excel/30-events/selection-changed-events.yaml b/samples/excel/30-events/selection-changed-events.yaml new file mode 100644 index 000000000..3a3a96e4c --- /dev/null +++ b/samples/excel/30-events/selection-changed-events.yaml @@ -0,0 +1,160 @@ +order: 7 +id: excel-selection-changed-events +name: Selection change events +description: Registers handlers all the different `onSelectionChanged` events and displays how each event reports the selected addresses. +author: OfficeDev +host: EXCEL +api_set: + ExcelApi: '1.7' +script: + content: | + $("#setup").click(() => tryCatch(setup)); + $("#register-event-handlers").click(() => tryCatch(registerEventHandlers)); + + async function registerEventHandlers() { + await Excel.run(async (context) => { + // Add a selection changed event handler for the binding. + let binding = context.workbook.bindings.getItemAt(0); + binding.onSelectionChanged.add(onBindingSelectionChange); + + // Add a selection changed event handler for the table. + let table = context.workbook.tables.getItemAt(0); + table.onSelectionChanged.add(onTableSelectionChange); + + // Add a selection changed event handler for the worksheet. + let sheet = context.workbook.worksheets.getItem("Sample"); + sheet.onSelectionChanged.add(onWorksheetSelectionChange); + + // Add a selection changed event handler for the worksheet collection. + context.workbook.worksheets.onSelectionChanged.add(onWorksheetCollectionSelectionChange); + + await context.sync(); + }); + } + + async function onBindingSelectionChange(args: Excel.BindingSelectionChangedEventArgs) { + await Excel.run(async (context) => { + console.log(`Binding event: The new selection is\nStarting Column: ${args.startColumn}\nStarting Row: ${args.startRow}\nColumn Count: ${args.columnCount}\nRow Count: ${args.rowCount}`); + }); + } + + async function onTableSelectionChange(args: Excel.TableSelectionChangedEventArgs) { + await Excel.run(async (context) => { + console.log(`Table event: The address of new selection is: ${args.address}`); + }); + } + + async function onWorksheetSelectionChange(args: Excel.WorksheetSelectionChangedEventArgs) { + await Excel.run(async (context) => { + console.log(`Worksheet event: The address of new selection is: ${args.address}`); + }); + } + + async function onWorksheetCollectionSelectionChange(args: Excel.WorksheetSelectionChangedEventArgs) { + await Excel.run(async (context) => { + console.log(`WorksheetCollection event: The address of new selection is: ${args.address}`); + }); + } + + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + + // Highlight an area and create a binding there. + let bindingRange = sheet.getRange("A15:D20"); + bindingRange.format.fill.color = "yellow"; + sheet.getRange("A15").values = [["Binding range"]]; + context.workbook.bindings.add(bindingRange, Excel.BindingType.range, "YellowBinding"); + + // Create a table. + let salesTable = sheet.tables.add("A1:E1", true); + salesTable.name = "SalesTable"; + + salesTable.getHeaderRowRange().values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4"]]; + + salesTable.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 register and use event handlers for table onChanged and onSelectionChanged events.

        +
        + +
        +

        Set up

        + + +

        The onSelectionChanged events being listened for are:

        +
          +
        • Binding
        • +
        • Table
        • +
        • Worksheet
        • +
        • WorksheetCollection
        • +
        +
        + +
        +

        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: | + 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/excel.json b/view/excel.json index aad7216ce..29126c0e2 100644 --- a/view/excel.json +++ b/view/excel.json @@ -34,9 +34,10 @@ "excel-events-data-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/data-changed.yaml", "excel-data-change-event-details": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/data-change-event-details.yaml", "excel-events-disable-events": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-disable-events.yaml", + "excel-selection-changed-events": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/selection-changed-events.yaml", "excel-event-worksheet-single-click": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/event-worksheet-single-click.yaml", - "excel-events-table-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-table-changed.yaml", "excel-events-tablecollection-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-tablecollection-changed.yaml", + "excel-events-table-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-table-changed.yaml", "excel-events-workbook-and-worksheet-collection": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml", "excel-events-worksheet": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-worksheet.yaml", "excel-named-item-create-and-remove-named-item": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/34-named-item/create-and-remove-named-item.yaml", diff --git a/yarn.lock b/yarn.lock index 4c70dc5fb..82465938a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -570,15 +570,15 @@ supports-color@^5.3.0: resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= -tslib@^1.8.0, tslib@^1.8.1: +tslib@^1.10.0, tslib@^1.8.1: version "1.11.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== -tslint@^5.13.1: - version "5.20.1" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d" - integrity sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg== +tslint@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.0.tgz#c6c611b8ba0eed1549bf5a59ba05a7732133d851" + integrity sha512-fXjYd/61vU6da04E505OZQGb2VCN2Mq3doeWcOIryuG+eqdmFUXTYVwdhnbEu2k46LNLgUYt9bI5icQze/j0bQ== dependencies: "@babel/code-frame" "^7.0.0" builtin-modules "^1.1.1" @@ -591,7 +591,7 @@ tslint@^5.13.1: mkdirp "^0.5.1" resolve "^1.3.2" semver "^5.3.0" - tslib "^1.8.0" + tslib "^1.10.0" tsutils "^2.29.0" tsutils@^2.29.0: From 99e52a5909ca2aee1db75319924862e9adcf6aa6 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 1 Apr 2020 09:11:08 -0700 Subject: [PATCH 262/660] [Outlook] (subject) Clean up sample (Compose mode) (#426) --- playlists/outlook.yaml | 8 +- .../get-set-item-subject.yaml | 73 ------------------- .../get-set-subject-compose.yaml | 72 ++++++++++++++++++ view/outlook.json | 2 +- 4 files changed, 77 insertions(+), 78 deletions(-) delete mode 100644 samples/outlook/90-other-item-apis/get-set-item-subject.yaml create mode 100644 samples/outlook/90-other-item-apis/get-set-subject-compose.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 66ee75906..30a0ce84f 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -431,12 +431,12 @@ group: Tokens And Service Calls api_set: Mailbox: '1.8' -- id: outlook-other-item-apis-get-set-item-subject +- id: outlook-other-item-apis-get-set-subject-compose name: Get and set the subject (Compose) - fileName: get-set-item-subject.yaml - description: Gets and sets the subject of an item in compose mode + fileName: get-set-subject-compose.yaml + description: Gets and sets the subject of an item in Compose mode. rawUrl: >- - https://raw.githubusercontent.com////samples/outlook/90-other-item-apis/get-set-item-subject.yaml + https://raw.githubusercontent.com////samples/outlook/90-other-item-apis/get-set-subject-compose.yaml group: Other Item APIs api_set: {} - id: outlook-work-with-client-signatures diff --git a/samples/outlook/90-other-item-apis/get-set-item-subject.yaml b/samples/outlook/90-other-item-apis/get-set-item-subject.yaml deleted file mode 100644 index 5b051468a..000000000 --- a/samples/outlook/90-other-item-apis/get-set-item-subject.yaml +++ /dev/null @@ -1,73 +0,0 @@ -id: outlook-other-item-apis-get-set-item-subject -name: Get and set the subject (Compose) -description: Gets and sets the subject of an item in compose mode -host: OUTLOOK -api_set: {} -script: - content: | - $("#get").click(get); - $("#set").click(set); - - function get() { - let item = Office.context.mailbox.item as Office.ItemCompose; - item.subject.getAsync((result: Office.AsyncResult) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Action failed with message ${result.error.message}`); - return; - } - console.log(`Subject is ${result.value}`); - }) - } - - function set() { - let item = Office.context.mailbox.item as Office.ItemCompose; - let subject = 'Hello World!'; - item.subject.setAsync(subject, (result: Office.AsyncResult) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Action failed with message ${result.error.message}`); - return; - } - console.log(`Subject is ${subject}`); - }); - } - language: typescript -template: - content: | -
        -

        This sample shows how to set and get the subject of a compose item.

        -
        -
        -

        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-set-subject-compose.yaml b/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml new file mode 100644 index 000000000..7eaf79c26 --- /dev/null +++ b/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml @@ -0,0 +1,72 @@ +id: outlook-other-item-apis-get-set-subject-compose +name: Get and set the subject (Compose) +description: Gets and sets the subject of an item in Compose mode. +host: OUTLOOK +api_set: {} +script: + content: | + $("#get").click(get); + $("#set").click(set); + + function get() { + 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 is ${result.value}`); + }); + } + + function set() { + 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}`); + }); + } + language: typescript +template: + content: |- +
        +

        This sample shows how to set and get the subject of an item in Compose mode.

        +

        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/outlook.json b/view/outlook.json index 36d354c14..f6eb31ac5 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -45,6 +45,6 @@ "outlook-tokens-and-service-calls-make-ews-request-async": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml", - "outlook-other-item-apis-get-set-item-subject": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-set-item-subject.yaml", + "outlook-other-item-apis-get-set-subject-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml", "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/work-with-client-signatures.yaml" } \ No newline at end of file From 81284e703af3542574454868c39a855dd85b82f9 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 1 Apr 2020 09:30:20 -0700 Subject: [PATCH 263/660] [Outlook] (subject) Add snippet (Read mode) (#427) --- playlists/outlook.yaml | 12 ++++- .../get-set-subject-compose.yaml | 12 +++-- .../90-other-item-apis/get-subject-read.yaml | 53 +++++++++++++++++++ view/outlook.json | 1 + 4 files changed, 72 insertions(+), 6 deletions(-) create mode 100644 samples/outlook/90-other-item-apis/get-subject-read.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 30a0ce84f..983055741 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -431,6 +431,15 @@ 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////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 @@ -438,7 +447,8 @@ rawUrl: >- https://raw.githubusercontent.com////samples/outlook/90-other-item-apis/get-set-subject-compose.yaml group: Other Item APIs - api_set: {} + api_set: + Mailbox: '1.1' - id: outlook-work-with-client-signatures name: Work With Client Signatures (Compose) fileName: work-with-client-signatures.yaml 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 7eaf79c26..b305987cc 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 @@ -1,8 +1,10 @@ +order: 2 id: outlook-other-item-apis-get-set-subject-compose name: Get and set the subject (Compose) description: Gets and sets the subject of an item in Compose mode. host: OUTLOOK -api_set: {} +api_set: + Mailbox: '1.1' script: content: | $("#get").click(get); @@ -14,7 +16,7 @@ script: console.error(`Action failed with message ${result.error.message}`); return; } - console.log(`Subject is ${result.value}`); + console.log(`Subject: ${result.value}`); }); } @@ -32,16 +34,16 @@ script: template: content: |-
        -

        This sample shows how to set and get the subject of an item in Compose mode.

        +

        This sample shows how to set and get the subject of an item in Compose mode.

        Required mode: Compose

        Try it out

        language: html diff --git a/samples/outlook/90-other-item-apis/get-subject-read.yaml b/samples/outlook/90-other-item-apis/get-subject-read.yaml new file mode 100644 index 000000000..55bd28c6d --- /dev/null +++ b/samples/outlook/90-other-item-apis/get-subject-read.yaml @@ -0,0 +1,53 @@ +order: 1 +id: outlook-other-item-apis-get-subject-read +name: Get the subject (Read) +description: Gets the subject of an item in Read mode. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#get").click(get); + + function get() { + console.log(`Subject: ${Office.context.mailbox.item.subject}`); + } + language: typescript +template: + content: |- +
        +

        This sample shows how to get the subject of an item in Read mode.

        +

        Required mode: 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/view/outlook.json b/view/outlook.json index f6eb31ac5..9d1e1547f 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -45,6 +45,7 @@ "outlook-tokens-and-service-calls-make-ews-request-async": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml", + "outlook-other-item-apis-get-subject-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-subject-read.yaml", "outlook-other-item-apis-get-set-subject-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml", "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/work-with-client-signatures.yaml" } \ No newline at end of file From ae38b71bffc75ed4b159828f22097651e86aeff5 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 1 Apr 2020 09:55:48 -0700 Subject: [PATCH 264/660] [Outlook] (internetMessageId) Add sample (Message Read) (#428) --- playlists/outlook.yaml | 9 ++++ .../get-internet-message-id-read.yaml | 53 +++++++++++++++++++ view/outlook.json | 1 + 3 files changed, 63 insertions(+) create mode 100644 samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 983055741..2f9f9c583 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -449,6 +449,15 @@ 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////samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' - id: outlook-work-with-client-signatures name: Work With Client Signatures (Compose) fileName: work-with-client-signatures.yaml 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 new file mode 100644 index 000000000..1bc713903 --- /dev/null +++ b/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml @@ -0,0 +1,53 @@ +order: 3 +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. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#get").click(get); + + function get() { + console.log(`Internet message ID: ${Office.context.mailbox.item.internetMessageId}`); + } + language: typescript +template: + content: |- +
        +

        This sample shows how to get the internet message ID 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/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/outlook.json b/view/outlook.json index 9d1e1547f..dcfe93733 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -47,5 +47,6 @@ "outlook-tokens-and-service-calls-item-id-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml", "outlook-other-item-apis-get-subject-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-subject-read.yaml", "outlook-other-item-apis-get-set-subject-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml", + "outlook-other-item-apis-get-internet-message-id-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml", "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/work-with-client-signatures.yaml" } \ No newline at end of file From 4dfd97e7fd2fb7ccf0e168dbfae9df25dd1b6f93 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 1 Apr 2020 10:07:05 -0700 Subject: [PATCH 265/660] [Outlook] (itemClass) Add snippet (Read) (#429) --- playlists/outlook.yaml | 9 ++++ .../get-item-class-read.yaml | 53 +++++++++++++++++++ view/outlook.json | 1 + 3 files changed, 63 insertions(+) create mode 100644 samples/outlook/90-other-item-apis/get-item-class-read.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 2f9f9c583..6b6a6d4ac 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -458,6 +458,15 @@ 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////samples/outlook/90-other-item-apis/get-item-class-read.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' - id: outlook-work-with-client-signatures name: Work With Client Signatures (Compose) fileName: work-with-client-signatures.yaml 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 new file mode 100644 index 000000000..5b4c6aed7 --- /dev/null +++ b/samples/outlook/90-other-item-apis/get-item-class-read.yaml @@ -0,0 +1,53 @@ +order: 4 +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. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#get").click(get); + + function get() { + console.log(`Item class: ${Office.context.mailbox.item.itemClass}`); + } + language: typescript +template: + content: |- +
        +

        This sample shows how to get the item class of an item in Read mode.

        +

        Required mode: 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/view/outlook.json b/view/outlook.json index dcfe93733..edffe8398 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -48,5 +48,6 @@ "outlook-other-item-apis-get-subject-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-subject-read.yaml", "outlook-other-item-apis-get-set-subject-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml", "outlook-other-item-apis-get-internet-message-id-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml", + "outlook-other-item-apis-get-item-class-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-item-class-read.yaml", "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/work-with-client-signatures.yaml" } \ No newline at end of file From 9699a98758aeab5a76ba15348d199ada31dc4f89 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 1 Apr 2020 10:14:28 -0700 Subject: [PATCH 266/660] [Outlook] (itemType) Add snippet (#430) --- playlists/outlook.yaml | 9 ++++ .../90-other-item-apis/get-item-type.yaml | 52 +++++++++++++++++++ view/outlook.json | 1 + 3 files changed, 62 insertions(+) create mode 100644 samples/outlook/90-other-item-apis/get-item-type.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 6b6a6d4ac..373ed327f 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -467,6 +467,15 @@ 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////samples/outlook/90-other-item-apis/get-item-type.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' - id: outlook-work-with-client-signatures name: Work With Client Signatures (Compose) fileName: work-with-client-signatures.yaml diff --git a/samples/outlook/90-other-item-apis/get-item-type.yaml b/samples/outlook/90-other-item-apis/get-item-type.yaml new file mode 100644 index 000000000..8e5d6ce28 --- /dev/null +++ b/samples/outlook/90-other-item-apis/get-item-type.yaml @@ -0,0 +1,52 @@ +order: 5 +id: outlook-other-item-apis-get-item-type +name: Get the item type +description: Gets the item type. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#get").click(get); + + function get() { + console.log(`Item type: ${Office.context.mailbox.item.itemType}`); + } + language: typescript +template: + content: |- +
        +

        This sample shows how to get the item type.

        +
        +
        +

        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/outlook.json b/view/outlook.json index edffe8398..b8eedace0 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -49,5 +49,6 @@ "outlook-other-item-apis-get-set-subject-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml", "outlook-other-item-apis-get-internet-message-id-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml", "outlook-other-item-apis-get-item-class-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-item-class-read.yaml", + "outlook-other-item-apis-get-item-type": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-item-type.yaml", "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/work-with-client-signatures.yaml" } \ No newline at end of file From 2004182b70a2110b07a372cfdc9961705b069e0d Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 1 Apr 2020 10:42:42 -0700 Subject: [PATCH 267/660] [Outlook] (start) Add snippet (Read) (#431) --- playlists/outlook.yaml | 9 ++++ .../90-other-item-apis/get-start-read.yaml | 53 +++++++++++++++++++ view/outlook.json | 1 + 3 files changed, 63 insertions(+) create mode 100644 samples/outlook/90-other-item-apis/get-start-read.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 373ed327f..a77ca4797 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -476,6 +476,15 @@ 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////samples/outlook/90-other-item-apis/get-start-read.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' - id: outlook-work-with-client-signatures name: Work With Client Signatures (Compose) fileName: work-with-client-signatures.yaml diff --git a/samples/outlook/90-other-item-apis/get-start-read.yaml b/samples/outlook/90-other-item-apis/get-start-read.yaml new file mode 100644 index 000000000..04ee845e0 --- /dev/null +++ b/samples/outlook/90-other-item-apis/get-start-read.yaml @@ -0,0 +1,53 @@ +order: 6 +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. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#get").click(get); + + function get() { + console.log(`Appointment starts: ${Office.context.mailbox.item.start}`); + } + language: typescript +template: + content: |- +
        +

        This sample shows how to get the start date and time of an item in Read mode.

        +

        Required modes: Appointment Attendee, Message Read (meeting request)

        +
        +
        +

        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/outlook.json b/view/outlook.json index b8eedace0..ef9c39533 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -50,5 +50,6 @@ "outlook-other-item-apis-get-internet-message-id-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml", "outlook-other-item-apis-get-item-class-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-item-class-read.yaml", "outlook-other-item-apis-get-item-type": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-item-type.yaml", + "outlook-other-item-apis-get-start-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-start-read.yaml", "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/work-with-client-signatures.yaml" } \ No newline at end of file From c10663c77b11912ef375d464547f6efd2e89ab7f Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 1 Apr 2020 12:07:17 -0700 Subject: [PATCH 268/660] [Outlook] (start) Show how to get and set (Appointment Organizer) (#432) --- playlists/outlook.yaml | 9 +++ .../get-set-start-appointment-organizer.yaml | 69 +++++++++++++++++++ view/outlook.json | 1 + 3 files changed, 79 insertions(+) create mode 100644 samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index a77ca4797..9912886d9 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -485,6 +485,15 @@ 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////samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' - id: outlook-work-with-client-signatures name: Work With Client Signatures (Compose) fileName: work-with-client-signatures.yaml 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 new file mode 100644 index 000000000..3b29fa906 --- /dev/null +++ b/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml @@ -0,0 +1,69 @@ +order: 7 +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. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#get").click(get); + $("#set").click(set); + + function get() { + console.log(`Appointment starts: ${Office.context.mailbox.item.start}`); + } + + function set() { + var 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) { + console.error(`Action failed with message ${result.error.message}`); + return; + } + console.log(`Successfully set start date and time to ${start}`); + }); + } + 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

        + + +
        + 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/outlook.json b/view/outlook.json index ef9c39533..9fe1f394e 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -51,5 +51,6 @@ "outlook-other-item-apis-get-item-class-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-item-class-read.yaml", "outlook-other-item-apis-get-item-type": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-item-type.yaml", "outlook-other-item-apis-get-start-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-start-read.yaml", + "outlook-other-item-apis-get-set-start-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml", "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/work-with-client-signatures.yaml" } \ No newline at end of file From 427eb3a0749d0a533bc295864570d4709a95cc97 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 1 Apr 2020 14:21:24 -0700 Subject: [PATCH 269/660] [Outlook] (start) Update to use getAsync (Appointment Compose) (#433) --- .../get-set-start-appointment-organizer.yaml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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 3b29fa906..122238177 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 @@ -11,7 +11,13 @@ script: $("#set").click(set); function get() { - console.log(`Appointment starts: ${Office.context.mailbox.item.start}`); + 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}`); + }); } function set() { From 39a70a1cb4c2660f98db96bdae469fcf6f3669d7 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 1 Apr 2020 14:41:43 -0700 Subject: [PATCH 270/660] [Outlook] (mapping) Include new snippets (#434) --- snippet-extractor-metadata/outlook.xlsx | Bin 17906 -> 18519 bytes snippet-extractor-output/snippets.yaml | 99 ++++++++++++++++++++++++ 2 files changed, 99 insertions(+) diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 300b22f53c7321a902b362b65a79a49b9fc06bcd..2b1a930e97dfda9e9ed951c5751bd54f9da96e8a 100644 GIT binary patch delta 9199 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 136936fd9..d8c4e4774 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -6205,6 +6205,105 @@ console.error(asyncResult.error); } }); +'Office.AppointmentRead#subject:member': + - 'console.log(`Subject: ${Office.context.mailbox.item.subject}`);' +'Office.MessageRead#subject:member': + - 'console.log(`Subject: ${Office.context.mailbox.item.subject}`);' +'Office.AppointmentCompose#subject:member': + - |- + 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}`); + }); + - |- + 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#subject:member': + - |- + 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}`); + }); + - |- + 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.MessageRead#internetMessageId:member': + - >- + console.log(`Internet message ID: + ${Office.context.mailbox.item.internetMessageId}`); +'Office.AppointmentRead#itemClass:member': + - 'console.log(`Item class: ${Office.context.mailbox.item.itemClass}`);' +'Office.MessageRead#itemClass:member': + - 'console.log(`Item class: ${Office.context.mailbox.item.itemClass}`);' +'Office.AppointmentCompose#itemType:member': + - 'console.log(`Item type: ${Office.context.mailbox.item.itemType}`);' +'Office.AppointmentRead#itemType:member': + - 'console.log(`Item type: ${Office.context.mailbox.item.itemType}`);' +'Office.MessageCompose#itemType:member': + - 'console.log(`Item type: ${Office.context.mailbox.item.itemType}`);' +'Office.MessageRead#itemType:member': + - 'console.log(`Item type: ${Office.context.mailbox.item.itemType}`);' +'Office.AppointmentRead#start:member': + - 'console.log(`Appointment starts: ${Office.context.mailbox.item.start}`);' +'Office.MessageRead#start:member': + - 'console.log(`Appointment starts: ${Office.context.mailbox.item.start}`);' +'Office.AppointmentCompose#start: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}`); + }); + - |- + var 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) { + 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)': + - |- + 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(2)': + - |- + var 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) { + console.error(`Action failed with message ${result.error.message}`); + return; + } + console.log(`Successfully set start date and time to ${start}`); + }); 'Word.Body#search:member(1)': - |- await Word.run(async (context) => { From 69ef34aa5fc69d85719a585fee24e08c74b9e7be Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 2 Apr 2020 10:30:39 -0700 Subject: [PATCH 271/660] [Outlook] (end) Get in Read mode (#435) --- playlists/outlook.yaml | 9 ++++ .../90-other-item-apis/get-end-read.yaml | 53 +++++++++++++++++++ view/outlook.json | 1 + 3 files changed, 63 insertions(+) create mode 100644 samples/outlook/90-other-item-apis/get-end-read.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 9912886d9..11d4ed452 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -494,6 +494,15 @@ 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////samples/outlook/90-other-item-apis/get-end-read.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' - id: outlook-work-with-client-signatures name: Work With Client Signatures (Compose) fileName: work-with-client-signatures.yaml diff --git a/samples/outlook/90-other-item-apis/get-end-read.yaml b/samples/outlook/90-other-item-apis/get-end-read.yaml new file mode 100644 index 000000000..6064b48d8 --- /dev/null +++ b/samples/outlook/90-other-item-apis/get-end-read.yaml @@ -0,0 +1,53 @@ +order: 8 +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. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#get").click(get); + + function get() { + console.log(`Appointment ends: ${Office.context.mailbox.item.end}`); + } + language: typescript +template: + content: |- +
        +

        This sample shows how to get the end date and time of an item in Read mode.

        +

        Required modes: Appointment Attendee, Message Read (meeting request)

        +
        +
        +

        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/outlook.json b/view/outlook.json index 9fe1f394e..e42e32193 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -52,5 +52,6 @@ "outlook-other-item-apis-get-item-type": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-item-type.yaml", "outlook-other-item-apis-get-start-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-start-read.yaml", "outlook-other-item-apis-get-set-start-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml", + "outlook-other-item-apis-get-end-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-end-read.yaml", "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/work-with-client-signatures.yaml" } \ No newline at end of file From 69192fef5b5b0f7c5ace16618a096266a8ea5b05 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 2 Apr 2020 11:04:52 -0700 Subject: [PATCH 272/660] [OUtlook] (end) How to get and set (Appointment Organizer) (#436) * [OUtlook] (end) How to get and set (Appointment Organizer) * Tweak error messages for set --- playlists/outlook.yaml | 9 ++ .../get-set-end-appointment-organizer.yaml | 82 +++++++++++++++++++ view/outlook.json | 1 + 3 files changed, 92 insertions(+) create mode 100644 samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 11d4ed452..f6fd56c05 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -503,6 +503,15 @@ 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////samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' - id: outlook-work-with-client-signatures name: Work With Client Signatures (Compose) fileName: work-with-client-signatures.yaml 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 new file mode 100644 index 000000000..21bfe1be4 --- /dev/null +++ b/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml @@ -0,0 +1,82 @@ +order: 9 +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. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#get").click(get); + $("#set").click(set); + + function get() { + 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}`); + }); + } + + function set() { + 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}`); + }); + }); + } + language: typescript +template: + content: |- +
        +

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

        +

        Required mode: Appointment Organizer

        +
        +
        +

        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/outlook.json b/view/outlook.json index e42e32193..858725cd6 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -53,5 +53,6 @@ "outlook-other-item-apis-get-start-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-start-read.yaml", "outlook-other-item-apis-get-set-start-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml", "outlook-other-item-apis-get-end-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-end-read.yaml", + "outlook-other-item-apis-get-set-end-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml", "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/work-with-client-signatures.yaml" } \ No newline at end of file From 6aaaab809ce3551d8101e023a421911267f4424e Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 2 Apr 2020 11:27:31 -0700 Subject: [PATCH 273/660] [Outlook] (location) How to get (Read) (#437) --- playlists/outlook.yaml | 9 ++++ .../90-other-item-apis/get-location-read.yaml | 53 +++++++++++++++++++ view/outlook.json | 1 + 3 files changed, 63 insertions(+) create mode 100644 samples/outlook/90-other-item-apis/get-location-read.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index f6fd56c05..e6a6a0d23 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -512,6 +512,15 @@ 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////samples/outlook/90-other-item-apis/get-location-read.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' - id: outlook-work-with-client-signatures name: Work With Client Signatures (Compose) fileName: work-with-client-signatures.yaml diff --git a/samples/outlook/90-other-item-apis/get-location-read.yaml b/samples/outlook/90-other-item-apis/get-location-read.yaml new file mode 100644 index 000000000..5aa48107f --- /dev/null +++ b/samples/outlook/90-other-item-apis/get-location-read.yaml @@ -0,0 +1,53 @@ +order: 10 +id: outlook-other-item-apis-get-location-read +name: Get the location (Read) +description: Gets the location of an item in Read mode. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#get").click(get); + + function get() { + console.log(`Appointment location: ${Office.context.mailbox.item.location}`); + } + language: typescript +template: + content: |- +
        +

        This sample shows how to get the location of an item in Read mode.

        +

        Required modes: Appointment Attendee, Message Read (meeting request)

        +
        +
        +

        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/outlook.json b/view/outlook.json index 858725cd6..afcca6d02 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -54,5 +54,6 @@ "outlook-other-item-apis-get-set-start-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml", "outlook-other-item-apis-get-end-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-end-read.yaml", "outlook-other-item-apis-get-set-end-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml", + "outlook-other-item-apis-get-location-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-location-read.yaml", "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/work-with-client-signatures.yaml" } \ No newline at end of file From 5664c712bc1d01655c8c3a6a5cc354b10908e6eb Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 2 Apr 2020 11:45:55 -0700 Subject: [PATCH 274/660] [Outlook] (location) How to get and set (Appointment Organizer) (#438) --- playlists/outlook.yaml | 9 +++ ...et-set-location-appointment-organizer.yaml | 74 +++++++++++++++++++ view/outlook.json | 1 + 3 files changed, 84 insertions(+) create mode 100644 samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index e6a6a0d23..4b68815a6 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -521,6 +521,15 @@ 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////samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' - id: outlook-work-with-client-signatures name: Work With Client Signatures (Compose) fileName: work-with-client-signatures.yaml 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 new file mode 100644 index 000000000..2ee241201 --- /dev/null +++ b/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml @@ -0,0 +1,74 @@ +order: 11 +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. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#get").click(get); + $("#set").click(set); + + function get() { + 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}`); + }); + } + + function set() { + 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}`); + }); + } + language: typescript +template: + content: |- +
        +

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

        +

        Required mode: Appointment Organizer

        +
        +
        +

        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/outlook.json b/view/outlook.json index afcca6d02..2328c3393 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -55,5 +55,6 @@ "outlook-other-item-apis-get-end-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-end-read.yaml", "outlook-other-item-apis-get-set-end-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml", "outlook-other-item-apis-get-location-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-location-read.yaml", + "outlook-other-item-apis-get-set-location-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml", "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/work-with-client-signatures.yaml" } \ No newline at end of file From 53717cb296fadf40a44218ee731e17c7811b13e1 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 2 Apr 2020 15:51:16 -0700 Subject: [PATCH 275/660] [Outlook] (enhancedLocation) How to get, add, and remove locations on appointments (#439) --- playlists/outlook.yaml | 9 ++ ...d-remove-enhancedlocation-appointment.yaml | 115 ++++++++++++++++++ view/outlook.json | 1 + 3 files changed, 125 insertions(+) create mode 100644 samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 4b68815a6..0fe4e52ca 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -530,6 +530,15 @@ 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////samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml + group: Other Item APIs + api_set: + Mailbox: '1.8' - id: outlook-work-with-client-signatures name: Work With Client Signatures (Compose) fileName: work-with-client-signatures.yaml 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 new file mode 100644 index 000000000..ee6b849de --- /dev/null +++ b/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml @@ -0,0 +1,115 @@ +order: 12 +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).' +host: OUTLOOK +api_set: + Mailbox: '1.8' +script: + content: | + $("#get").click(get); + $("#add").click(add); + $("#remove").click(remove); + + function get() { + 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; + } + 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); + } + }); + }); + } + + function add() { + 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}`); + } + }); + } + + function remove() { + var 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}`); + } + }); + } + language: typescript +template: + content: |- +
        +

        This sample shows how to get and set the location of an appointment.

        +

        Required modes: Appointment Organizer, Appointment Attendee

        +
        +
        +

        Try it out

        + +

        + Note: Can add or remove locations in Organizer mode only + + +

        +
        + 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/outlook.json b/view/outlook.json index 2328c3393..028d95d32 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -56,5 +56,6 @@ "outlook-other-item-apis-get-set-end-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml", "outlook-other-item-apis-get-location-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-location-read.yaml", "outlook-other-item-apis-get-set-location-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml", "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/work-with-client-signatures.yaml" } \ No newline at end of file From 662f3fb9f2facc7390f88dab05076901a7000e9d Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 2 Apr 2020 16:11:30 -0700 Subject: [PATCH 276/660] [Outlook] (enhancedLocation) Add check for locations (#440) --- ...d-remove-enhancedlocation-appointment.yaml | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) 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 ee6b849de..595c17a5a 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,12 +17,17 @@ script: console.error(`Failed to get locations. Error message: ${result.error.message}`); return; } - 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 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."); + } }); } @@ -78,7 +83,7 @@ template:
        Get locations

        - Note: Can add or remove locations in Organizer mode only + Note: Can add or remove locations in Organizer mode only. From 0c699e3977711aa0eb4f9334b3f583f8edd62131 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 3 Apr 2020 10:22:02 -0700 Subject: [PATCH 277/660] [Outlook] (normalizedSubject) How to get (Read) (#442) --- playlists/outlook.yaml | 9 ++++ .../get-normalized-subject-read.yaml | 53 +++++++++++++++++++ view/outlook.json | 1 + 3 files changed, 63 insertions(+) create mode 100644 samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 0fe4e52ca..919ee7c0b 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -539,6 +539,15 @@ 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////samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' - id: outlook-work-with-client-signatures name: Work With Client Signatures (Compose) fileName: work-with-client-signatures.yaml 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 new file mode 100644 index 000000000..de776f395 --- /dev/null +++ b/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml @@ -0,0 +1,53 @@ +order: 13 +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. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#get").click(get); + + function get() { + console.log(`Normalized subject: ${Office.context.mailbox.item.normalizedSubject}`); + } + language: typescript +template: + content: |- +

        +

        This sample shows how to get the normalized subject of an item in Read mode.

        +

        Required modes: Appointment Attendee, 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/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/outlook.json b/view/outlook.json index 028d95d32..d3b988bcf 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -57,5 +57,6 @@ "outlook-other-item-apis-get-location-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-location-read.yaml", "outlook-other-item-apis-get-set-location-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml", + "outlook-other-item-apis-get-normalized-subject-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml", "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/work-with-client-signatures.yaml" } \ No newline at end of file From 257afa0ebb45eba27e1fa82b5dac33b7c1d9aeb5 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 3 Apr 2020 10:28:38 -0700 Subject: [PATCH 278/660] [Outlook] (conversationId) How to get (Message) (#443) --- playlists/outlook.yaml | 9 ++++ .../get-conversation-id-message.yaml | 53 +++++++++++++++++++ view/outlook.json | 1 + 3 files changed, 63 insertions(+) create mode 100644 samples/outlook/90-other-item-apis/get-conversation-id-message.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 919ee7c0b..61ac7b045 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -548,6 +548,15 @@ 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////samples/outlook/90-other-item-apis/get-conversation-id-message.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' - id: outlook-work-with-client-signatures name: Work With Client Signatures (Compose) fileName: work-with-client-signatures.yaml 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 new file mode 100644 index 000000000..23969360c --- /dev/null +++ b/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml @@ -0,0 +1,53 @@ +order: 14 +id: outlook-other-item-apis-get-conversation-id-message +name: Get the conversation ID (Message) +description: Gets the conversation ID of a message. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#get").click(get); + + function get() { + console.log(`Conversation ID: ${Office.context.mailbox.item.conversationId}`); + } + language: typescript +template: + content: |- +
        +

        This sample shows how to get the conversation ID of a message.

        +

        Required modes: Message Compose, 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/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/outlook.json b/view/outlook.json index d3b988bcf..d927a39b8 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -58,5 +58,6 @@ "outlook-other-item-apis-get-set-location-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml", "outlook-other-item-apis-get-normalized-subject-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml", + "outlook-other-item-apis-get-conversation-id-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml", "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/work-with-client-signatures.yaml" } \ No newline at end of file From e197218c01cc82d2153e75d85670fd8831c51cef Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 3 Apr 2020 10:42:31 -0700 Subject: [PATCH 279/660] [Outlook] (dateTimeCreated) How to get (Read) (#444) --- playlists/outlook.yaml | 9 ++++ .../get-date-time-created-read.yaml | 53 +++++++++++++++++++ view/outlook.json | 1 + 3 files changed, 63 insertions(+) create mode 100644 samples/outlook/90-other-item-apis/get-date-time-created-read.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 61ac7b045..47047d5f5 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -557,6 +557,15 @@ 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////samples/outlook/90-other-item-apis/get-date-time-created-read.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' - id: outlook-work-with-client-signatures name: Work With Client Signatures (Compose) fileName: work-with-client-signatures.yaml 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 new file mode 100644 index 000000000..9b49d4624 --- /dev/null +++ b/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml @@ -0,0 +1,53 @@ +order: 15 +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. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#get").click(get); + + function get() { + console.log(`Creation date and time: ${Office.context.mailbox.item.dateTimeCreated}`); + } + language: typescript +template: + content: |- +
        +

        This sample shows how to get the creation date and time of an item in Read mode.

        +

        Required modes: Appointment Attendee, 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/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/outlook.json b/view/outlook.json index d927a39b8..3f65a61a9 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -59,5 +59,6 @@ "outlook-other-item-apis-get-add-remove-enhancedlocation-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml", "outlook-other-item-apis-get-normalized-subject-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml", "outlook-other-item-apis-get-conversation-id-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml", + "outlook-other-item-apis-get-date-time-created-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml", "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/work-with-client-signatures.yaml" } \ No newline at end of file From 3d7785ed16e64601d3a540c257b874e2349a5931 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 3 Apr 2020 10:48:48 -0700 Subject: [PATCH 280/660] [Outlook] (dateTimeModified) How to get (Read) (#445) --- playlists/outlook.yaml | 9 ++++ .../get-date-time-modified-read.yaml | 53 +++++++++++++++++++ view/outlook.json | 1 + 3 files changed, 63 insertions(+) create mode 100644 samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 47047d5f5..0e7b8c29b 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -566,6 +566,15 @@ 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////samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' - id: outlook-work-with-client-signatures name: Work With Client Signatures (Compose) fileName: work-with-client-signatures.yaml 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 new file mode 100644 index 000000000..3be000758 --- /dev/null +++ b/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml @@ -0,0 +1,53 @@ +order: 16 +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. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#get").click(get); + + function get() { + console.log(`Date and time item last modified: ${Office.context.mailbox.item.dateTimeModified}`); + } + language: typescript +template: + content: |- +
        +

        This sample shows how to get the last-modified date and time of an item in Read mode.

        +

        Required modes: Appointment Attendee, 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/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/outlook.json b/view/outlook.json index 3f65a61a9..3ac643a79 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -60,5 +60,6 @@ "outlook-other-item-apis-get-normalized-subject-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml", "outlook-other-item-apis-get-conversation-id-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml", "outlook-other-item-apis-get-date-time-created-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml", "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/work-with-client-signatures.yaml" } \ No newline at end of file From 1ed52d5fd7f84613d1e4458bec1407cfb70cecd3 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 3 Apr 2020 11:50:16 -0700 Subject: [PATCH 281/660] [Outlook] (recurrence) Clean up snippet (Read) (#446) --- playlists/outlook.yaml | 2 +- .../50-recurrence/get-recurrence-read.yaml | 16 ++++++++-------- snippet-extractor-metadata/outlook.xlsx | Bin 18519 -> 18532 bytes snippet-extractor-output/snippets.yaml | 4 ++-- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 0e7b8c29b..a682f8085 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -253,7 +253,7 @@ - id: outlook-recurrence-get-recurrence-read name: Get recurrence (Read) fileName: get-recurrence-read.yaml - description: Gets the recurrence pattern in Read mode. + description: Gets the recurrence pattern of an item in Read mode. rawUrl: >- https://raw.githubusercontent.com////samples/outlook/50-recurrence/get-recurrence-read.yaml group: Recurrence diff --git a/samples/outlook/50-recurrence/get-recurrence-read.yaml b/samples/outlook/50-recurrence/get-recurrence-read.yaml index cb2e92534..c2862943e 100644 --- a/samples/outlook/50-recurrence/get-recurrence-read.yaml +++ b/samples/outlook/50-recurrence/get-recurrence-read.yaml @@ -1,15 +1,15 @@ order: 2 id: outlook-recurrence-get-recurrence-read name: Get recurrence (Read) -description: Gets the recurrence pattern in Read mode. +description: Gets the recurrence pattern of an item in Read mode. host: OUTLOOK api_set: Mailbox: '1.7' script: content: | - $("#get-recurrence").click(getRecurrence); + $("#get").click(get); - function getRecurrence() { + function get() { var recurrence = Office.context.mailbox.item.recurrence; if (recurrence === undefined) { @@ -17,20 +17,20 @@ script: } else if (recurrence === null) { console.log("This is a single appointment."); } else { - console.log(recurrence); + console.log(JSON.stringify(recurrence)); } } language: typescript template: content: |-
        -

        This sample shows how to get the item's recurrence pattern, if any.

        -

        Required mode: Read

        +

        This sample shows how to get the item's recurrence pattern, if any.

        +

        Required modes: Appointment Attendee, Message Read

        Try it out

        -
        @@ -59,4 +59,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 2b1a930e97dfda9e9ed951c5751bd54f9da96e8a..b97c495707354a36647b1f9e4d7f951eaa71a737 100644 GIT binary patch delta 6363 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 delta 6361 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 Date: Fri, 3 Apr 2020 15:22:42 -0700 Subject: [PATCH 282/660] [Outlook] (recurrence) Add how to set (Appointment Organizer) (#447) --- playlists/outlook.yaml | 10 +- .../get-recurrence-appointment-organizer.yaml | 65 ----------- ...-set-recurrence-appointment-organizer.yaml | 109 ++++++++++++++++++ snippet-extractor-metadata/outlook.xlsx | Bin 18532 -> 18851 bytes snippet-extractor-output/snippets.yaml | 109 +++++++++++++++++- view/outlook.json | 2 +- 6 files changed, 222 insertions(+), 73 deletions(-) delete mode 100644 samples/outlook/50-recurrence/get-recurrence-appointment-organizer.yaml create mode 100644 samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index a682f8085..491e70c1e 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -259,12 +259,12 @@ group: Recurrence api_set: Mailbox: '1.7' -- id: outlook-recurrence-get-recurrence-appointment-organizer - name: Get recurrence (Appointment Organizer) - fileName: get-recurrence-appointment-organizer.yaml - description: Gets the recurrence pattern in Appointment Organizer mode. +- 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////samples/outlook/50-recurrence/get-recurrence-appointment-organizer.yaml + https://raw.githubusercontent.com////samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml group: Recurrence api_set: Mailbox: '1.7' diff --git a/samples/outlook/50-recurrence/get-recurrence-appointment-organizer.yaml b/samples/outlook/50-recurrence/get-recurrence-appointment-organizer.yaml deleted file mode 100644 index 1c3aabcf7..000000000 --- a/samples/outlook/50-recurrence/get-recurrence-appointment-organizer.yaml +++ /dev/null @@ -1,65 +0,0 @@ -order: 3 -id: outlook-recurrence-get-recurrence-appointment-organizer -name: Get recurrence (Appointment Organizer) -description: Gets the recurrence pattern in Appointment Organizer mode. -host: OUTLOOK -api_set: - Mailbox: '1.7' -script: - content: | - $("#get-recurrence").click(getRecurrence); - - function getRecurrence() { - 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); - } - } else { - console.error(asyncResult.error); - } - }); - } - language: typescript -template: - content: |- -
        -

        This sample shows how to get the item's recurrence pattern, if any.

        -

        Required mode: Appointment Organizer

        -
        - -
        -

        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/50-recurrence/get-set-recurrence-appointment-organizer.yaml b/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml new file mode 100644 index 000000000..ae4252b08 --- /dev/null +++ b/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml @@ -0,0 +1,109 @@ +order: 3 +id: outlook-recurrence-get-set-recurrence-appointment-organizer +name: Get and set recurrence (Appointment Organizer) +description: Gets and sets the recurrence pattern in Appointment Organizer mode. +host: OUTLOOK +api_set: + Mailbox: '1.7' +script: + content: | + $("#get").click(get); + $("#set").click(set); + + function get() { + 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); + } + }); + } + + function set() { + // 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. + 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)}`); + }); + } + language: typescript +template: + content: |- +
        +

        This sample shows how to get and set the item's recurrence pattern, if any.

        +

        Required mode: Appointment Organizer

        +
        + +
        +

        Try it out

        + +

        Note: You can only set the recurrence pattern on a series. + +

        +
        + 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 b97c495707354a36647b1f9e4d7f951eaa71a737..ed4a507bcabdbb43fca263a6fd58904103a3fc83 100644 GIT binary patch delta 9210 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 Xf}IwBZ*Q#_HdsXt1O8I#AM^hJN;AA! delta 8873 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 JYQ_JN`F}SkDBu79 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index b4d73be15..fec1691c9 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -5283,12 +5283,48 @@ if (recurrence === null) { console.log("This is a single appointment."); } else { - console.log(recurrence); + console.log(`Recurrence pattern: ${JSON.stringify(recurrence)}`); } } else { console.error(asyncResult.error); } }); + - |- + // 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. + 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.Recurrence#getAsync:member(2)': - |- Office.context.mailbox.item.recurrence.getAsync(function(asyncResult) { @@ -5297,12 +5333,49 @@ if (recurrence === null) { console.log("This is a single appointment."); } else { - console.log(recurrence); + console.log(`Recurrence pattern: ${JSON.stringify(recurrence)}`); } } else { console.error(asyncResult.error); } }); +'Office.Recurrence#setAsync:member(2)': + - |- + // 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. + 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.AppointmentRead#recurrence:member': - |- var recurrence = Office.context.mailbox.item.recurrence; @@ -6304,6 +6377,38 @@ } console.log(`Successfully set start date and time to ${start}`); }); +'Office.AppointmentRead#normalizedSubject:member': + - >- + console.log(`Normalized subject: + ${Office.context.mailbox.item.normalizedSubject}`); +'Office.MessageRead#normalizedSubject:member': + - >- + console.log(`Normalized subject: + ${Office.context.mailbox.item.normalizedSubject}`); +'Office.MessageCompose#conversationId:member': + - >- + console.log(`Conversation ID: + ${Office.context.mailbox.item.conversationId}`); +'Office.MessageRead#conversationId:member': + - >- + console.log(`Conversation ID: + ${Office.context.mailbox.item.conversationId}`); +'Office.AppointmentRead#dateTimeCreated:member': + - >- + console.log(`Creation date and time: + ${Office.context.mailbox.item.dateTimeCreated}`); +'Office.MessageRead#dateTimeCreated:member': + - >- + console.log(`Creation date and time: + ${Office.context.mailbox.item.dateTimeCreated}`); +'Office.AppointmentRead#dateTimeModified:member': + - >- + console.log(`Date and time item last modified: + ${Office.context.mailbox.item.dateTimeModified}`); +'Office.MessageRead#dateTimeModified:member': + - >- + console.log(`Date and time item last modified: + ${Office.context.mailbox.item.dateTimeModified}`); 'Word.Body#search:member(1)': - |- await Word.run(async (context) => { diff --git a/view/outlook.json b/view/outlook.json index 3ac643a79..dde366742 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -27,7 +27,7 @@ "outlook-categories-work-with-master-categories": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/45-categories/work-with-master-categories.yaml", "outlook-recurrence-get-series-id": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/50-recurrence/get-series-id.yaml", "outlook-recurrence-get-recurrence-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/50-recurrence/get-recurrence-read.yaml", - "outlook-recurrence-get-recurrence-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/50-recurrence/get-recurrence-appointment-organizer.yaml", + "outlook-recurrence-get-set-recurrence-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml", "outlook-display-items-display-existing-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-existing-appointment.yaml", "outlook-display-items-display-existing-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-existing-message.yaml", "outlook-display-items-display-new-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-new-appointment.yaml", From 04821d052a416799f3b92d1f58b80fddcd78a9b5 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 3 Apr 2020 16:11:58 -0700 Subject: [PATCH 283/660] [Outlook] (mappings) Include missing mappings (#449) --- snippet-extractor-metadata/outlook.xlsx | Bin 18851 -> 19412 bytes snippet-extractor-output/snippets.yaml | 231 ++++++++++++++++++++++++ 2 files changed, 231 insertions(+) diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index ed4a507bcabdbb43fca263a6fd58904103a3fc83..0eb75237327eb5ee505bdce66543e5448561c100 100644 GIT binary patch delta 10010 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 delta 9449 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 LJ>t3aKj!}fz5y { + 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}`); + }); + }); 'Office.AppointmentRead#normalizedSubject:member': - >- console.log(`Normalized subject: @@ -6409,6 +6426,220 @@ - >- console.log(`Date and time item last modified: ${Office.context.mailbox.item.dateTimeModified}`); +'Office.AppointmentRead#end:member': + - 'console.log(`Appointment ends: ${Office.context.mailbox.item.end}`);' +'Office.MessageRead#end:member': + - 'console.log(`Appointment ends: ${Office.context.mailbox.item.end}`);' +'Office.AppointmentCompose#end:member': + - |- + 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}`); + }); + - |- + 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}`); + }); + }); +'Office.AppointmentRead#location:member': + - >- + console.log(`Appointment location: + ${Office.context.mailbox.item.location}`); +'Office.MessageRead#location:member': + - >- + console.log(`Appointment location: + ${Office.context.mailbox.item.location}`); +'Office.AppointmentCompose#location:member': + - |- + 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}`); + }); + - |- + 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.Location#getAsync:member(2)': + - |- + 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(2)': + - |- + 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.AppointmentCompose#enhancedLocation: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."); + } + }); + - >- + 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}`); + } + }); + - >- + var 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.AppointmentRead#enhancedLocation: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."); + } + }); +'Office.EnhancedLocation#getAsync:member(2)': + - |- + 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."); + } + }); +'Office.EnhancedLocation#addAsync:member(2)': + - >- + 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.EnhancedLocation#removeAsync:member(2)': + - >- + var 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}`); + } + }); 'Word.Body#search:member(1)': - |- await Word.run(async (context) => { From f46f21c05c8f2ba75634b2612b037610c824ff32 Mon Sep 17 00:00:00 2001 From: danielebercovici Date: Mon, 6 Apr 2020 13:56:08 -0700 Subject: [PATCH 284/660] Adding Calendar Properties APIs Samples (#450) * shows how to use calendar properties APIs * shows how to use calendar properties APIs * Update samples/outlook/99-preview-apis/calendar-properties-apis.yaml Co-Authored-By: Elizabeth Samuel * Update samples/outlook/99-preview-apis/calendar-properties-apis.yaml Co-Authored-By: Elizabeth Samuel * Update samples/outlook/99-preview-apis/calendar-properties-apis.yaml Co-Authored-By: Elizabeth Samuel * Update samples/outlook/99-preview-apis/calendar-properties-apis.yaml Co-Authored-By: Elizabeth Samuel * Update samples/outlook/99-preview-apis/calendar-properties-apis.yaml Co-Authored-By: Elizabeth Samuel * no console.log Co-authored-by: Daniele Bercovici Co-authored-by: Elizabeth Samuel --- playlists/outlook.yaml | 12 ++ .../calendar-properties-apis.yaml | 106 ++++++++++++++++++ view/outlook.json | 2 + 3 files changed, 120 insertions(+) create mode 100644 samples/outlook/99-preview-apis/calendar-properties-apis.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 491e70c1e..24e736080 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -537,6 +537,18 @@ rawUrl: >- https://raw.githubusercontent.com////samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml group: Other Item APIs + api_set: {} +- id: outlook-calendar-properties-apis + name: Calendar Properties APIs (Compose) + fileName: calendar-properties-apis.yaml + description: >- + Get/sets isAllDayEvent and get/sets sensitivity on an appointment in Compose + mode. + rawUrl: >- + https://raw.githubusercontent.com////samples/outlook/99-preview-apis/calendar-properties-apis.yaml + group: Preview APIs + api_set: + Mailbox: preview api_set: Mailbox: '1.8' - id: outlook-other-item-apis-get-normalized-subject-read diff --git a/samples/outlook/99-preview-apis/calendar-properties-apis.yaml b/samples/outlook/99-preview-apis/calendar-properties-apis.yaml new file mode 100644 index 000000000..22aff8892 --- /dev/null +++ b/samples/outlook/99-preview-apis/calendar-properties-apis.yaml @@ -0,0 +1,106 @@ +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. +host: OUTLOOK +api_set: + Mailbox: preview +script: + content: | + $("#getIsAllDayEvent").click(getIsAllDayEvent); + $("#setIsAllDayEventTrue").click(setIsAllDayEventTrue); + $("#getSensitivity").click(getSensitivity); + $("#setSensitivityConfidential").click(setSensitivityConfidential); + + function getIsAllDayEvent() { + 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)); + } + }); + } + + function setIsAllDayEventTrue() { + 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."); + } + }); + } + + 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. +

        + 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/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/outlook.json b/view/outlook.json index dde366742..74ac952ad 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -45,6 +45,8 @@ "outlook-tokens-and-service-calls-make-ews-request-async": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml", + "outlook-other-item-apis-get-set-item-subject": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-set-item-subject.yaml", + "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", "outlook-other-item-apis-get-subject-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-subject-read.yaml", "outlook-other-item-apis-get-set-subject-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml", "outlook-other-item-apis-get-internet-message-id-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml", From 245d9872b04b19db8c3227afd6310bb13de421a1 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 6 Apr 2020 14:23:25 -0700 Subject: [PATCH 285/660] [Outlook] (preview) Add mappings for new calendar properties (Compose) (#451) --- playlists/outlook.yaml | 23 ++++--- snippet-extractor-metadata/outlook.xlsx | Bin 19412 -> 19714 bytes snippet-extractor-output/snippets.yaml | 78 ++++++++++++++++++++++++ view/outlook.json | 3 +- 4 files changed, 90 insertions(+), 14 deletions(-) diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 24e736080..4296e928b 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -537,18 +537,6 @@ rawUrl: >- https://raw.githubusercontent.com////samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml group: Other Item APIs - api_set: {} -- id: outlook-calendar-properties-apis - name: Calendar Properties APIs (Compose) - fileName: calendar-properties-apis.yaml - description: >- - Get/sets isAllDayEvent and get/sets sensitivity on an appointment in Compose - mode. - rawUrl: >- - https://raw.githubusercontent.com////samples/outlook/99-preview-apis/calendar-properties-apis.yaml - group: Preview APIs - api_set: - Mailbox: preview api_set: Mailbox: '1.8' - id: outlook-other-item-apis-get-normalized-subject-read @@ -587,6 +575,17 @@ 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////samples/outlook/99-preview-apis/calendar-properties-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 diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 0eb75237327eb5ee505bdce66543e5448561c100..e0d324ddc6d0bd112a35545e1e3b57fc14a7fa58 100644 GIT binary patch delta 9868 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 JRh9jR{9h4i-pl|1 delta 9505 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 UT}c=gP8vF|^Z}7t?jOwm0Q+oaTmS$7 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 642046dfd..6c74f79b2 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -6640,6 +6640,84 @@ console.error(`Failed to remove locations. Error message: ${result.error.message}`); } }); +'Office.AppointmentCompose#isAllDayEvent:member': + - |- + 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.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.IsAllDayEvent#getAsync:member(2)': + - |- + 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(2)': + - >- + 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': + - |- + 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)); + } + }); + - |- + 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)': + - |- + 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)); + } + }); +'Office.Sensitivity#setAsync:member(2)': + - |- + 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."); + } + } + ); 'Word.Body#search:member(1)': - |- await Word.run(async (context) => { diff --git a/view/outlook.json b/view/outlook.json index 74ac952ad..e922b5c7d 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -45,8 +45,6 @@ "outlook-tokens-and-service-calls-make-ews-request-async": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml", - "outlook-other-item-apis-get-set-item-subject": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-set-item-subject.yaml", - "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", "outlook-other-item-apis-get-subject-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-subject-read.yaml", "outlook-other-item-apis-get-set-subject-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml", "outlook-other-item-apis-get-internet-message-id-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml", @@ -63,5 +61,6 @@ "outlook-other-item-apis-get-conversation-id-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml", "outlook-other-item-apis-get-date-time-created-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml", + "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/work-with-client-signatures.yaml" } \ No newline at end of file From 9e8d14e1e9db02bd0b72ebbcc9d1a95831eebf0a Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 17 Apr 2020 14:38:16 -0700 Subject: [PATCH 286/660] [Admin] Each snippet includes a link to its yaml (#454) * [Admin] Each snippet includes a link to its yaml * Update text --- config/build.documentation.ts | 6 +- snippet-extractor-output/snippets.yaml | 2415 ++++++++++++++++++++---- 2 files changed, 2030 insertions(+), 391 deletions(-) diff --git a/config/build.documentation.ts b/config/build.documentation.ts index f324eaf8d..1ff06d382 100644 --- a/config/build.documentation.ts +++ b/config/build.documentation.ts @@ -144,7 +144,11 @@ function getExtractedDataFromSnippet( const indented = fullSnippetTextArray.slice(0, closingIndex + (functionHasNoParams ? 0 : 1)); const whitespaceCountOnFirstLine = spaceFollowedByWordsRegex.exec(fullSnippetTextArray[0])[1].length; - text = indented + // Place snippet location as comment. + const editedFilename = filename.substr(filename.indexOf('samples')).replace(/\\/g, '/'); + text = '// Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/' + editedFilename + '\n'; + + text += indented .map(line => { if (line.substr(0, whitespaceCountOnFirstLine).trim().length === 0) { return line.substr(whitespaceCountOnFirstLine); diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 6c74f79b2..33f043ed1 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -1,5 +1,8 @@ '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); const rowCount = 500; @@ -29,7 +32,10 @@ console.log(`Ending. Adding ${rowCount * columnCount} cells took ${Date.now() - startTime} milliseconds`); }); 'Excel.Application#decimalSeparator:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/culture-info.yaml + await Excel.run(async (context) => { context.application.load("decimalSeparator,thousandsSeparator"); context.application.cultureInfo.numberFormat.load("numberDecimalSeparator,numberGroupSeparator"); @@ -54,7 +60,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); const farmData = sheet.getUsedRange(); @@ -64,7 +73,10 @@ await context.sync(); }); 'Excel.Binding#onDataChanged:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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"); @@ -76,7 +88,10 @@ await context.sync(); }); 'Excel.CellPropertiesFill#color:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/cell-properties.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -149,7 +164,10 @@ await context.sync(); }); 'Excel.CellPropertiesFillLoadOptions#color:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/cell-properties.yaml + await Excel.run(async (context) => { const cell = context.workbook.getActiveCell(); @@ -174,7 +192,10 @@ `Address: ${cellProperties.address}\nStyle: ${cellProperties.style}\nFill Color: ${cellProperties.format.fill.color}\nFont Color: ${cellProperties.format.font.color}`); }); 'Excel.CellPropertiesFont#color:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/cell-properties.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -247,7 +268,10 @@ await context.sync(); }); 'Excel.CellPropertiesFontLoadOptions#color:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/cell-properties.yaml + await Excel.run(async (context) => { const cell = context.workbook.getActiveCell(); @@ -272,7 +296,10 @@ `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/master/samples/excel/42-range/cell-properties.yaml + await Excel.run(async (context) => { const cell = context.workbook.getActiveCell(); @@ -297,7 +324,10 @@ `Address: ${cellProperties.address}\nStyle: ${cellProperties.style}\nFill Color: ${cellProperties.format.fill.color}\nFont Color: ${cellProperties.format.font.color}`); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B21:E23"); @@ -309,7 +339,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B21:E23"); @@ -321,7 +354,10 @@ await context.sync(); }); 'Excel.ChartAxis#displayUnit:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-axis.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -337,7 +373,10 @@ console.log("The vertical axis display unit is: " + valueAxis.displayUnit); }); 'Excel.ChartAxis#showDisplayUnitLabel:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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); @@ -349,7 +388,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -362,7 +404,10 @@ await context.sync(); }); 'Excel.ChartLegendFormat#font:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-legend.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -381,7 +426,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const seriesCollection = sheet.charts.getItemAt(0).series; @@ -398,7 +446,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -414,7 +465,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); let salesTable = sheet.tables.getItem("SalesTable"); @@ -443,7 +497,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); let salesTable = sheet.tables.getItem("SalesTable"); @@ -472,7 +529,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); let salesTable = sheet.tables.getItem("SalesTable"); @@ -501,7 +561,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); let salesTable = sheet.tables.getItem("SalesTable"); @@ -530,7 +593,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); let chart = sheet.charts.getItemAt(0); @@ -540,7 +606,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const title = sheet.charts.getItemAt(0).title; @@ -549,7 +618,10 @@ await context.sync(); }); 'Excel.ChartTrendline#type:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-trendlines.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -564,7 +636,10 @@ console.log("The trendline type is:" + trendline.type); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -576,7 +651,10 @@ await context.sync(); }); 'Excel.ChartTrendlineFormat#line:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-trendlines.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -591,7 +669,10 @@ console.log("The trendline color is:" + line.color); }); - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-trendlines.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -607,7 +688,10 @@ console.log("The trendline color has been set to:" + line.color); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B2:M5"); @@ -623,7 +707,10 @@ await context.sync(); }); 'Excel.Comment#content:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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); @@ -631,13 +718,19 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { context.workbook.comments.getItemByCell("Comments!A2").delete(); await context.sync(); }); '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 + await Excel.run(async (context) => { const comment = context.workbook.comments.getItemByCell("Comments!A2"); comment.load(["authorEmail", "authorName", "creationDate"]); @@ -647,14 +740,20 @@ await context.sync(); }); 'Excel.Comment#resolved:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/comment-resolution.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Comments"); sheet.comments.getItemAt(0).resolved = true; await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Comments"); @@ -663,7 +762,10 @@ await context.sync(); }); 'Excel.CommentReply#content:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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); @@ -677,7 +779,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { // Remove the first comment reply from this worksheet's first comment. const sheet = context.workbook.worksheets.getItem("Comments"); @@ -686,7 +791,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { // Adds a reply to the first comment in this worksheet. const sheet = context.workbook.worksheets.getItem("Comments"); @@ -695,7 +803,10 @@ await context.sync(); }); 'Excel.CommentRichContent#mentions:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/comment-mentions.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Comments"); const mention = { @@ -716,7 +827,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B21:E23"); @@ -728,7 +842,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B21:E23"); @@ -740,7 +857,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B21:E23"); @@ -752,7 +872,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B2:M5"); @@ -768,7 +891,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B8:E13"); @@ -779,7 +905,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B8:E13"); @@ -790,7 +919,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const worksheetRange = sheet.getRange(); @@ -817,7 +949,10 @@ } }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B8:E13"); @@ -857,7 +992,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B2:M5"); @@ -869,7 +1007,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B16:D18"); @@ -881,7 +1022,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const worksheetRange = sheet.getRange(); @@ -908,7 +1052,10 @@ } }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B2:M5"); @@ -924,7 +1071,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange(); @@ -935,7 +1085,10 @@ $(".conditional-formats").hide(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const worksheetRange = sheet.getRange(); @@ -962,7 +1115,10 @@ } }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B8:E13"); @@ -973,7 +1129,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B8:E13"); @@ -1013,7 +1172,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B8:E13"); @@ -1052,7 +1214,10 @@ await context.sync(); }); - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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"); @@ -1064,7 +1229,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B8:E13"); @@ -1104,7 +1272,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B2:M5"); @@ -1116,7 +1287,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B16:D18"); @@ -1128,7 +1302,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B8:E13"); @@ -1139,7 +1316,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const settings = context.workbook.settings; const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); @@ -1168,7 +1348,10 @@ } }); '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 + await Excel.run(async (context) => { // You must have the xmlns attribute to populate the // CustomXml.namespaceUri property. @@ -1189,7 +1372,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { // You must have the xmlns attribute to populate the // CustomXml.namespaceUri property. @@ -1210,7 +1396,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const settings = context.workbook.settings; const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); @@ -1231,7 +1420,10 @@ } }); '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 + await Excel.run(async (context) => { // You must have the xmlns attribute to populate the // CustomXml.namespaceUri property. @@ -1252,7 +1444,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const settings = context.workbook.settings; const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); @@ -1273,7 +1468,10 @@ } }); '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 + await Excel.run(async (context) => { $("#display-xml").text(""); const contosoNamespace = "http://schemas.contoso.com/review/1.0"; @@ -1302,7 +1500,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const settings = context.workbook.settings; const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); @@ -1331,7 +1532,10 @@ } }); '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 + await Excel.run(async (context) => { $("#display-xml").text(""); const contosoNamespace = "http://schemas.contoso.com/review/1.0"; @@ -1360,7 +1564,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { $("#display-xml").text(""); const contosoNamespace = "http://schemas.contoso.com/review/1.0"; @@ -1389,7 +1596,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B8:E13"); @@ -1400,7 +1610,10 @@ await context.sync(); }); 'Excel.DataPivotHierarchy#showAs:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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"); @@ -1423,7 +1636,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const dataHierarchies = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales").dataHierarchies dataHierarchies.load("no-properties-needed"); @@ -1434,7 +1650,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Decision"); const rankingRange = sheet.tables.getItem("NameOptionsTable").columns.getItem("Ranking").getDataBodyRange(); @@ -1467,7 +1686,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Decision"); const nameRange = @@ -1490,7 +1712,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Decision"); const commentsRange = @@ -1519,7 +1744,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Decision"); const nameRange = @@ -1542,7 +1770,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Decision"); const rankingRange = sheet.tables.getItem("NameOptionsTable").columns.getItem("Ranking").getDataBodyRange(); @@ -1575,7 +1806,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B8:E13"); @@ -1615,7 +1849,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B8:E13"); @@ -1655,7 +1892,10 @@ await context.sync(); }); 'Excel.Image#format:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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; @@ -1666,7 +1906,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; const line = shapes.getItem("StraightLine").line; @@ -1675,7 +1918,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; const line = shapes.getItem("StraightLine").line; @@ -1684,7 +1930,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; const line = shapes.getItem("StraightLine").line; @@ -1693,7 +1942,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; const line = shapes.getItem("StraightLine").line; @@ -1702,7 +1954,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const totalName = sheet.names.getItemOrNullObject("TotalAmount"); @@ -1721,7 +1976,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1742,7 +2000,10 @@ } }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const headerRange = sheet.getRange("A1:D1"); @@ -1754,6 +2015,9 @@ }); 'Excel.NumberFormatInfo#numberDecimalSeparator:member': - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/culture-info.yaml + // This will convert a number like "14,37" to "14.37" // (assuming the system decimal separator is "."). @@ -1791,7 +2055,10 @@ await context.sync(); }); 'Excel.NumberFormatInfo#numberGroupSeparator:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/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 ","). @@ -1813,14 +2080,20 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); farmSheet.horizontalPageBreaks.add("A21:E21"); await context.sync(); }); '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 + await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); farmSheet.pageLayout.centerHorizontally = true; @@ -1828,7 +2101,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); farmSheet.pageLayout.centerHorizontally = true; @@ -1836,35 +2112,50 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); farmSheet.pageLayout.orientation = Excel.PageOrientation.landscape; await context.sync(); }); '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 + 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/master/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#zoom:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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 }; await context.sync(); }); '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 + await Excel.run(async (context) => { const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); @@ -1882,7 +2173,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); @@ -1901,7 +2195,10 @@ await context.sync(); }); '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 + 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")); @@ -1910,14 +2207,20 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { context.workbook.worksheets.getItem("Pivot").pivotTables.getItem("Farm Sales").delete(); await context.sync(); }); '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 + await Excel.run(async (context) => { const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); pivotTable.layout.load("layoutType"); @@ -1935,7 +2238,10 @@ 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/master/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"); @@ -1952,7 +2258,10 @@ }); } '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 + await Excel.run(async (context) => { const rangeToAnalyze = context.workbook.worksheets.getItem("Data").getRange("A1:E21"); const rangeToPlacePivot = context.workbook.worksheets.getItem("Pivot").getRange("A2"); @@ -1961,7 +2270,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B2:M5"); @@ -1972,7 +2284,10 @@ await context.sync(); }); - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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"); @@ -1983,7 +2298,10 @@ await context.sync(); }); '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 + async function sortTopToBottom(criteria: string) { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -2009,7 +2327,10 @@ }); } 'Excel.Range#group:member(1)': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/outline.yaml + Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -2024,7 +2345,10 @@ await context.sync(); }); 'Excel.Range#ungroup:member(1)': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/outline.yaml + Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -2037,7 +2361,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -2050,7 +2377,10 @@ return context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); const sumCell = sheet.getRange("P4"); @@ -2061,7 +2391,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -2134,7 +2467,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const cell = context.workbook.getActiveCell(); @@ -2159,7 +2495,10 @@ `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/master/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. @@ -2171,7 +2510,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const table = sheet.tables.getItem("ExpensesTable"); @@ -2192,7 +2534,10 @@ console.log(foundRange.address); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const table = sheet.tables.getItem("ExpensesTable"); @@ -2213,7 +2558,10 @@ } }); 'Excel.Range#hyperlink:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-hyperlink.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Orders"); @@ -2239,7 +2587,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const salesTable = sheet.tables.getItem("SalesTable"); @@ -2295,7 +2646,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const salesTable = sheet.tables.getItem("SalesTable"); @@ -2351,7 +2705,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B2:D11"); @@ -2364,7 +2721,10 @@ 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/master/samples/excel/42-range/style.yaml + await Excel.run(async (context) => { let worksheet = context.workbook.worksheets.getItem("Sample"); let range = worksheet.getRange("A1:E1"); @@ -2377,7 +2737,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const salesTable = sheet.tables.getItem("SalesTable"); @@ -2411,7 +2774,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -2430,7 +2796,10 @@ range.format.autofitColumns(); await context.sync(); }); - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/90-scenarios/multiple-property-set.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -2446,7 +2815,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); // Place a label in front of the moved data. @@ -2457,7 +2829,10 @@ await context.sync(); }); 'Excel.RangeAreas#format:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-areas.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -2470,7 +2845,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B2:E2"); @@ -2482,7 +2860,10 @@ await context.sync(); }); 'Excel.RangeHyperlink#address:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-hyperlink.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Orders"); @@ -2508,7 +2889,10 @@ await context.sync(); }); 'Excel.RangeHyperlink#documentReference:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-hyperlink.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Orders"); @@ -2534,8 +2918,11 @@ await context.sync(); }); 'Excel.RangeHyperlink#screenTip:member': - - |- - await Excel.run(async (context) => { + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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"); @@ -2560,7 +2947,10 @@ await context.sync(); }); 'Excel.RangeHyperlink#textToDisplay:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-hyperlink.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Orders"); @@ -2586,7 +2976,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B2:D11"); @@ -2599,7 +2992,10 @@ console.log(deleteResult.uniqueRemaining + " entries with unique names remain in the range."); }); '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 + await Excel.run(async (context) => { context.runtime.load("enableEvents"); await context.sync(); @@ -2616,7 +3012,10 @@ await context.sync(); }); 'Excel.SettableCellProperties#style:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/cell-properties.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -2689,7 +3088,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const settings = context.workbook.settings; let needsReview = settings.getItem("NeedsReview"); @@ -2707,7 +3109,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const settings = context.workbook.settings; settings.onSettingsChanged.add(onChangedSetting); @@ -2716,7 +3121,10 @@ console.log("Settings changed handler registered."); }); '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 + await Excel.run(async (context) => { const settings = context.workbook.settings; settings.onSettingsChanged.add(onChangedSetting); @@ -2725,7 +3133,10 @@ console.log("Settings changed handler registered."); }); '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 + await Excel.run(async (context) => { const settings = context.workbook.settings; let needsReview = settings.getItem("NeedsReview"); @@ -2743,7 +3154,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Shapes").delete(); const sheet = context.workbook.worksheets.add("Shapes"); @@ -2758,7 +3172,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.smileyFace); @@ -2770,7 +3187,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.triangle); @@ -2783,7 +3203,10 @@ await context.sync(); }); 'Excel.Shape#group:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-groups.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); @@ -2794,7 +3217,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.getItem("Image"); @@ -2806,7 +3232,10 @@ console.log("The image's base64-encoded string: " + imageString); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.getItem("Image"); @@ -2814,7 +3243,10 @@ await context.sync(); }); 'Excel.Shape#line:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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; @@ -2829,7 +3261,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.getItem("Square") @@ -2837,7 +3272,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.getItem("Pentagon") @@ -2845,7 +3283,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.getItem("Octagon") @@ -2854,7 +3295,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.getItem("Octagon") @@ -2863,7 +3307,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.getItem("Octagon") @@ -2871,7 +3318,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.hexagon); @@ -2882,7 +3332,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const square = sheet.shapes.getItem("Square"); @@ -2896,10 +3349,15 @@ await context.sync(); }); '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 + const myFile = document.getElementById("selectedFile"); + const reader = new FileReader(); + reader.onload = (event) => { Excel.run((context) => { const startIndex = reader.result.toString().indexOf("base64,"); @@ -2911,10 +3369,15 @@ }); }; + // Read in the image file as a data URL. + reader.readAsDataURL(myFile.files[0]); '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 + await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; const line = shapes.addLine(200, 50, 300, 150, Excel.ConnectorType.straight); @@ -2922,7 +3385,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; const textbox = shapes.addTextBox("A box with text"); @@ -2934,7 +3400,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); @@ -2945,7 +3414,10 @@ await context.sync(); }); 'Excel.ShowAsRule#baseItem:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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"); @@ -2971,35 +3443,50 @@ await context.sync(); }); 'Excel.Slicer#style:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-slicer.yaml + await Excel.run(async (context) => { const slicer = context.workbook.slicers.getItem("Fruit Slicer"); slicer.style = "SlicerStyleLight6"; await context.sync(); }); '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 + await Excel.run(async (context) => { const slicer = context.workbook.slicers.getItem("Fruit Slicer"); slicer.selectItems(["Lemon", "Lime", "Orange"]); await context.sync(); }); '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 + await Excel.run(async (context) => { const slicer = context.workbook.slicers.getItem("Fruit Slicer"); slicer.clearFilters(); await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); sheet.slicers.getItemAt(0).delete(); await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Pivot"); const slicer = sheet.slicers.add( @@ -3010,7 +3497,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const slicer = context.workbook.slicers.getItem("Fruit Slicer"); slicer.caption = "Fruit Types"; @@ -3021,7 +3511,10 @@ await context.sync(); }); 'Excel.Style#delete:member(1)': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/style.yaml + await Excel.run(async (context) => { let style = context.workbook.styles.getItem("Diagonal Orientation Style"); @@ -3034,7 +3527,10 @@ console.log("Successfully deleted the diagonal orientation style from the Home tab ribbon."); }); 'Excel.Style#font:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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"); @@ -3050,7 +3546,10 @@ console.log("Fill color: " + style.fill.color); }); 'Excel.Style#horizontalAlignment:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/style.yaml + await Excel.run(async (context) => { let worksheet = context.workbook.worksheets.getItem("Sample"); let range = worksheet.getRange("A1:E1"); @@ -3063,7 +3562,10 @@ await context.sync(); }); 'Excel.Style#load:member(1)': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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"); @@ -3080,7 +3582,10 @@ console.log("Style locked: " + style.locked); }); 'Excel.StyleCollection#add:member(1)': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/style.yaml + await Excel.run(async (context) => { let styles = context.workbook.styles; @@ -3102,7 +3607,10 @@ console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); 'Excel.StyleCollection#getItem:member(1)': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/style.yaml + await Excel.run(async (context) => { let styles = context.workbook.styles; @@ -3124,7 +3632,10 @@ console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); '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 + await Excel.run(async (context) => { let table = context.workbook.tables.getItemAt(0); table.onChanged.add(onChange); @@ -3133,7 +3644,10 @@ console.log("A handler has been registered for the onChanged event"); }); '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 + await Excel.run(async (context) => { let table = context.workbook.tables.getItemAt(0); table.onSelectionChanged.add(onSelectionChange); @@ -3142,7 +3656,10 @@ console.log("A handler has been registered for table onSelectionChanged event"); }); '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 + async function onTableChanged(eventArgs: Excel.TableChangedEventArgs) { await Excel.run(async (context) => { const details = eventArgs.details; @@ -3153,7 +3670,10 @@ }); } '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 + async function onChange(event) { await Excel.run(async (context) => { let table = context.workbook.tables.getItem(event.tableId); @@ -3168,7 +3688,10 @@ }); } '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 + async function onChange(event) { await Excel.run(async (context) => { let table = context.workbook.tables.getItem(event.tableId); @@ -3183,7 +3706,10 @@ }); } '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 + await Excel.run(async (context) => { let tables = context.workbook.tables; tables.onChanged.add(onChange); @@ -3192,14 +3718,20 @@ console.log("A handler has been registered for the table collection onChanged event"); }); '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 + 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); }); } '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B16:D18"); @@ -3211,7 +3743,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B16:D18"); @@ -3223,7 +3758,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; const textbox = shapes.getItem("Textbox"); @@ -3231,7 +3769,10 @@ await context.sync(); }); 'Excel.Workbook#properties:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/26-document/properties.yaml + await Excel.run(async (context) => { let titleValue = "Excel document properties API"; let subjectValue = "Set and get document properties"; @@ -3257,7 +3798,10 @@ console.log("Set the following document properties: title, subject, keywords, comments, category, manager, company."); }); '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 + await Excel.run(async (context) => { const selectedRanges = context.workbook.getSelectedRanges(); @@ -3266,7 +3810,10 @@ await context.sync(); }) 'Excel.Workbook#styles:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/style.yaml + await Excel.run(async (context) => { let styles = context.workbook.styles; @@ -3288,7 +3835,10 @@ 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/master/samples/excel/50-workbook/workbook-get-active-cell.yaml + await Excel.run(async (context) => { let myWorkbook = context.workbook; @@ -3300,17 +3850,26 @@ 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/master/samples/excel/85-preview-apis/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/master/samples/excel/85-preview-apis/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: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/data-protection.yaml + await Excel.run(async (context) => { let workbook = context.workbook; workbook.load("protection/protected"); @@ -3321,9 +3880,14 @@ workbook.protection.protect(); } }); - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/data-protection.yaml + let password = await passwordHandler(); + passwordHelper(password); + await Excel.run(async (context) => { let workbook = context.workbook; workbook.load("protection/protected"); @@ -3335,20 +3899,31 @@ } }); '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 + await Excel.run(async (context) => { let workbook = context.workbook; workbook.protection.unprotect(); }); - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/data-protection.yaml + let password = await passwordHandler(); + passwordHelper(password); + await Excel.run(async (context) => { let workbook = context.workbook; workbook.protection.unprotect(password); }); 'Excel.Worksheet#showOutlineLevels:member(1)': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/outline.yaml + Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -3356,7 +3931,10 @@ sheet.showOutlineLevels(1, 1); await context.sync(); }); - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/outline.yaml + Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -3365,7 +3943,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { console.log("Adding row handler"); const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -3387,7 +3968,10 @@ }); }); '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 + await Excel.run(async (context) => { console.log("Adding column handler"); const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -3409,7 +3993,10 @@ }); }); 'Excel.Worksheet#onChanged:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-worksheet.yaml + await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); sheet.onChanged.add(onChange); @@ -3418,7 +4005,10 @@ console.log("Added a worksheet-level data-changed event handler."); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); sheet.onSingleClicked.add((event) => { @@ -3433,7 +4023,10 @@ await context.sync(); }); 'Excel.Worksheet#slicers:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-slicer.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Pivot"); const slicer = sheet.slicers.add( @@ -3444,7 +4037,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -3454,7 +4050,10 @@ await context.sync(); }) '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); const farmData = sheet.getUsedRange(); @@ -3464,7 +4063,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { let myWorkbook = context.workbook; @@ -3479,7 +4081,10 @@ 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/master/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", { @@ -3496,7 +4101,10 @@ } }); 'Excel.Worksheet#showGridlines:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/gridlines.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); sheet.showGridlines = true; @@ -3504,7 +4112,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheets = context.workbook.worksheets; @@ -3530,7 +4141,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheets = context.workbook.worksheets; const currentSheet = sheets.getActiveWorksheet(); @@ -3552,7 +4166,10 @@ await context.sync(); }); 'Excel.Worksheet#tabColor:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/tab-color.yaml + await Excel.run(async (context) => { const activeSheet = context.workbook.worksheets.getActiveWorksheet(); activeSheet.tabColor = "#FF0000"; @@ -3560,7 +4177,10 @@ await context.sync(); }); '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 + async function onWorksheetAdd(event) { await Excel.run(async (context) => { console.log( @@ -3570,7 +4190,10 @@ }); } '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 + await Excel.run(async (context) => { let sheets = context.workbook.worksheets; sheets.onActivated.add(onActivate); @@ -3579,7 +4202,10 @@ 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/master/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + await Excel.run(async (context) => { let sheet = context.workbook.worksheets; sheet.onAdded.add(onWorksheetAdd); @@ -3588,7 +4214,10 @@ 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/master/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + await Excel.run(async (context) => { let sheets = context.workbook.worksheets; sheets.onDeactivated.add(onDeactivate); @@ -3597,10 +4226,15 @@ 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/master/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 @@ -3617,10 +4251,15 @@ }); }; + // 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: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml + await Excel.run(async (context) => { const sheets = context.workbook.worksheets; @@ -3646,7 +4285,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheets = context.workbook.worksheets; @@ -3672,7 +4314,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -3682,7 +4327,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -3692,7 +4340,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -3702,7 +4353,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const frozenRange = sheet.freezePanes.getLocationOrNullObject(); @@ -3717,7 +4371,10 @@ } }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); sheet.freezePanes.unfreeze(); @@ -3725,7 +4382,10 @@ await context.sync(); }); '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 + await Excel.run(async (context) => { let activeSheet = context.workbook.worksheets.getActiveWorksheet(); activeSheet.load("protection/protected"); @@ -3736,9 +4396,14 @@ activeSheet.protection.protect(); } }); - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/data-protection.yaml + let password = await passwordHandler(); + passwordHelper(password); + await Excel.run(async (context) => { let activeSheet = context.workbook.worksheets.getActiveWorksheet(); activeSheet.load("protection/protected"); @@ -3750,20 +4415,31 @@ } }); '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 + 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/master/samples/excel/50-workbook/data-protection.yaml + let password = await passwordHandler(); + passwordHelper(password); + await Excel.run(async (context) => { let activeSheet = context.workbook.worksheets.getActiveWorksheet(); activeSheet.protection.unprotect(password); }); '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 + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); sheet.onSingleClicked.add((event) => { @@ -3778,20 +4454,36 @@ await context.sync(); }); '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 + 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/master/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/master/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}`); @@ -3801,6 +4493,9 @@ }); '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 + var propertyName = $("#propertyName").val(); var propertyValue = customProps.get(propertyName); @@ -3811,6 +4506,9 @@ "${propertyValue}".`); '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 + var propertyName = $("#propertyName").val(); var propertyValue = $("#propertyValue").val(); @@ -3820,12 +4518,20 @@ 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/master/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: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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:"); @@ -3843,7 +4549,10 @@ } }); '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 + Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { if (result.status === Office.AsyncResultStatus.Succeeded) { console.log("Loaded following custom properties:"); @@ -3861,7 +4570,10 @@ } }); '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 + Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { if (result.status === Office.AsyncResultStatus.Succeeded) { console.log("Loaded following custom properties:"); @@ -3879,7 +4591,10 @@ } }); '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 + Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { if (result.status === Office.AsyncResultStatus.Succeeded) { console.log("Loaded following custom properties:"); @@ -3898,6 +4613,9 @@ }); '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 + Office.context.mailbox.item.getSelectedDataAsync(Office.CoercionType.Text, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -3910,6 +4628,9 @@ }); '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 + Office.context.mailbox.item.getSelectedDataAsync(Office.CoercionType.Text, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -3922,6 +4643,9 @@ }); 'Office.AppointmentCompose#setSelectedDataAsync:member(2)': - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/20-item-body/set-selected-data.yaml + Office.context.mailbox.item.setSelectedDataAsync("Replaced", function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -3932,6 +4656,9 @@ }); 'Office.MessageCompose#setSelectedDataAsync:member(2)': - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/20-item-body/set-selected-data.yaml + Office.context.mailbox.item.setSelectedDataAsync("Replaced", function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -3941,11 +4668,22 @@ } }); 'Office.AppointmentCompose#close:member(1)': - - Office.context.mailbox.item.close(); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/25-item-save-and-close/close.yaml + + Office.context.mailbox.item.close(); 'Office.MessageCompose#close:member(1)': - - Office.context.mailbox.item.close(); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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 + Office.context.mailbox.item.saveAsync(function (result) { if (result.status === Office.AsyncResultStatus.Succeeded) { console.log(`saveAsync succeeded, itemId is ${result.value}`); @@ -3955,7 +4693,10 @@ } }); '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 + Office.context.mailbox.item.bcc.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var msgBcc = asyncResult.value; @@ -3967,11 +4708,15 @@ console.error(asyncResult.error); } }); - - |- + - >- + // 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 + var email = $("#emailBcc") .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."); @@ -3980,7 +4725,10 @@ } }); '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 + Office.context.mailbox.item.bcc.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var msgBcc = asyncResult.value; @@ -3992,7 +4740,10 @@ console.error(asyncResult.error); } }); - - |- + - >- + // 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 + Office.context.mailbox.item.cc.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var msgCc = asyncResult.value; @@ -4005,6 +4756,9 @@ } }); - >- + // 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 + Office.context.mailbox.item.optionalAttendees.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -4024,6 +4778,9 @@ } }); - >- + // 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 + Office.context.mailbox.item.requiredAttendees.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -4042,7 +4799,10 @@ console.error(asyncResult.error); } }); - - |- + - >- + // 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 + Office.context.mailbox.item.to.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var msgTo = asyncResult.value; @@ -4055,11 +4815,15 @@ } }); '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 + var email = $("#emailBcc") .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."); @@ -4067,11 +4831,15 @@ console.error(asyncResult.error); } }); - - |- + - >- + // 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 + var email = $("#emailCc") .val() .toString(); var emailArray = [email]; + Office.context.mailbox.item.cc.setAsync(emailArray, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log("Succeeded in setting Cc field."); @@ -4080,6 +4848,9 @@ } }); - >- + // 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 + var email = $("#emailOptional") .val() .toString(); @@ -4094,6 +4865,9 @@ } }); - >- + // 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 + var email = $("#emailRequired") .val() .toString(); @@ -4107,11 +4881,15 @@ console.error(asyncResult.error); } }); - - |- + - >- + // 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 + 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."); @@ -4120,7 +4898,10 @@ } }); '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 + Office.context.mailbox.item.cc.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var msgCc = asyncResult.value; @@ -4132,11 +4913,15 @@ console.error(asyncResult.error); } }); - - |- + - >- + // 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 + var email = $("#emailCc") .val() .toString(); var emailArray = [email]; + Office.context.mailbox.item.cc.setAsync(emailArray, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log("Succeeded in setting Cc field."); @@ -4145,14 +4930,22 @@ } }); '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 + var msgCc = Office.context.mailbox.item.cc; + console.log("Message copied to:"); + for (var i = 0; i < msgCc.length; i++) { console.log(msgCc[i].displayName + " (" + msgCc[i].emailAddress + ")"); } '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 + Office.context.mailbox.item.from.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var msgFrom = asyncResult.value; @@ -4162,7 +4955,10 @@ } }); 'Office.From#getAsync:member(2)': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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) { var msgFrom = asyncResult.value; @@ -4173,14 +4969,22 @@ }); '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 + var msgFrom = Office.context.mailbox.item.from; console.log("Message received from: " + msgFrom.displayName + " (" + msgFrom.emailAddress + ")"); '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 + var apptOptionalAttendees = Office.context.mailbox.item.optionalAttendees; + console.log("Optional attendees:"); + for (var i = 0; i < apptOptionalAttendees.length; i++) { console.log( apptOptionalAttendees[i].displayName + @@ -4192,6 +4996,9 @@ } '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 + Office.context.mailbox.item.optionalAttendees.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -4211,6 +5018,9 @@ } }); - >- + // 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 + var email = $("#emailOptional") .val() .toString(); @@ -4226,12 +5036,18 @@ }); '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 + var apptOrganizer = Office.context.mailbox.item.organizer; console.log("Organizer: " + apptOrganizer.displayName + " (" + apptOrganizer.emailAddress + ")"); '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 + Office.context.mailbox.item.organizer.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var apptOrganizer = asyncResult.value; @@ -4241,7 +5057,10 @@ } }); 'Office.Organizer#getAsync:member(2)': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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; @@ -4251,9 +5070,14 @@ } }); '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 + var apptRequiredAttendees = Office.context.mailbox.item.requiredAttendees; + console.log("Required attendees:"); + for (var i = 0; i < apptRequiredAttendees.length; i++) { console.log( apptRequiredAttendees[i].displayName + @@ -4265,6 +5089,9 @@ } '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 + Office.context.mailbox.item.requiredAttendees.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -4284,6 +5111,9 @@ } }); - >- + // 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 + var email = $("#emailRequired") .val() .toString(); @@ -4299,12 +5129,18 @@ }); '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 + 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/master/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) { var msgTo = asyncResult.value; @@ -4316,11 +5152,15 @@ console.error(asyncResult.error); } }); - - |- + - >- + // 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 + 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."); @@ -4329,14 +5169,22 @@ } }); '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 + var msgTo = Office.context.mailbox.item.to; + console.log("Message sent to:"); + 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/master/samples/outlook/35-notifications/add-getall-remove.yaml + var id = $("#notificationId").val(); var details = @@ -4347,6 +5195,9 @@ Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + var id = $("#notificationId").val(); var details = @@ -4359,6 +5210,9 @@ Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + var id = $("#notificationId").val(); var details = @@ -4371,9 +5225,16 @@ Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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 + var id = $("#notificationId").val(); + Office.context.mailbox.item.notificationMessages.replaceAsync( id, { @@ -4384,12 +5245,18 @@ }, handleResult); - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + var id = $("#notificationId").val(); Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); '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 + var id = $("#notificationId").val(); var details = @@ -4400,6 +5267,9 @@ Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + var id = $("#notificationId").val(); var details = @@ -4412,6 +5282,9 @@ Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + var id = $("#notificationId").val(); var details = @@ -4424,9 +5297,16 @@ Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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 + var id = $("#notificationId").val(); + Office.context.mailbox.item.notificationMessages.replaceAsync( id, { @@ -4437,12 +5317,18 @@ }, handleResult); - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + var id = $("#notificationId").val(); Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); '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 + var id = $("#notificationId").val(); var details = @@ -4453,6 +5339,9 @@ Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + var id = $("#notificationId").val(); var details = @@ -4465,6 +5354,9 @@ Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + var id = $("#notificationId").val(); var details = @@ -4477,9 +5369,16 @@ Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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 + var id = $("#notificationId").val(); + Office.context.mailbox.item.notificationMessages.replaceAsync( id, { @@ -4490,12 +5389,18 @@ }, handleResult); - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + var id = $("#notificationId").val(); Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); '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 + var id = $("#notificationId").val(); var details = @@ -4506,6 +5411,9 @@ Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + var id = $("#notificationId").val(); var details = @@ -4518,6 +5426,9 @@ Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + var id = $("#notificationId").val(); var details = @@ -4530,9 +5441,16 @@ Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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 + var id = $("#notificationId").val(); + Office.context.mailbox.item.notificationMessages.replaceAsync( id, { @@ -4543,12 +5461,18 @@ }, handleResult); - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + var id = $("#notificationId").val(); Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); 'Office.NotificationMessages#addAsync:member(2)': - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + var id = $("#notificationId").val(); var details = @@ -4559,6 +5483,9 @@ Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + var id = $("#notificationId").val(); var details = @@ -4571,6 +5498,9 @@ Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + var id = $("#notificationId").val(); var details = @@ -4583,6 +5513,9 @@ Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + var id = $("#notificationId").val(); var details = @@ -4594,10 +5527,17 @@ handleResult); 'Office.NotificationMessages#getAllAsync:member(2)': - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); 'Office.NotificationMessages#replaceAsync:member(2)': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + var id = $("#notificationId").val(); + Office.context.mailbox.item.notificationMessages.replaceAsync( id, { @@ -4609,37 +5549,56 @@ handleResult); 'Office.NotificationMessages#removeAsync:member(2)': - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + var 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/master/samples/outlook/40-attachments/attachments-compose.yaml + var attachmentUrl = $("#attachmentUrl").val(); + 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/master/samples/outlook/40-attachments/attachments-compose.yaml + var 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/master/samples/outlook/40-attachments/attachments-compose.yaml + var attachmentItemId = $("#attachmentItemId").val(); + Office.context.mailbox.item.addItemAttachmentAsync( attachmentItemId, "My attachment", { "asyncContext" : { var3: 3, var4: false } }, function(result) { console.log(result); }); '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 + var attachmentItemId = $("#attachmentItemId").val(); + Office.context.mailbox.item.addItemAttachmentAsync( attachmentItemId, "My attachment", @@ -4647,6 +5606,9 @@ function(result) { console.log(result); }); '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 + base64String = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsSAAALEgHS3X78AAACRUlEQVRYw82XzXHbMBCFP2F8tzsQc8Ixyh0zoiuIXIGdCsxUYKqC0B04FdiuwMoM7mGOOIXqQGoAymXhgSX+itJM9kIRFLAP+3YXD5Pdbscx5oxaAIW8Ztr6l2PWmQwF4IyaieP53qdfAqQ8CwBn1JU4vpWhrbxXQA5MZfynANmcDIAzKgcy4FKGXsVJFf3nLgKyBQptfT4KQMRz2N0fcbxqmRMDWXflx0VPnrdArq0vekQ1Dv0UeHZGNebHhwjU8AzwKM43RyZnbAf58Q6ghudeWd0Aus0+5EcMIIRi3beua0D3Nm39BEAx3i7HTK4DEBJn5YxKOnaRA5+ErpMBWMpzDvx1RuXCcxOISlufAjfC7zgAsqsvUvMAD0ApPaEtGi9AIlUzKgJo60tt/SyKRkzLrAXERluf7W1gOICWaMyB386oooOWsIHvXbSoHuUSFovtHqicUVnH3EJoeT0aQEf5/XBGlc6otIOWBXAtPeZkAIJ9Bt6cUU9tZautX2nrk3MACHYr1ZKProKRtDw4o8pzAPjWo+NtpXTTvoteDDg8noDAcwbcRedAkGdFXyk2GEDcegVAFp2gyVDHjRQ4o6q2smoqtR5Hd+qMqtoALCWUUymr1m43QMZfOaMK4C0SrMsDANJ2E5FNcbdbjHC+ENl+H0myJFbLtaq4Rt8dyPBYRQV1E40nMv9rl7xrOw3DGb+Whcqu3i/OM6CUOWvgRlufNmnLYy4m77uJI7AXtdNcTDrU71LEyv7v01/N/ovL6bmu5/8A1tNWZldH0W4AAAAASUVORK5CYII="; @@ -4657,6 +5619,9 @@ function(result) { console.log(result); }); '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 + base64String = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsSAAALEgHS3X78AAACRUlEQVRYw82XzXHbMBCFP2F8tzsQc8Ixyh0zoiuIXIGdCsxUYKqC0B04FdiuwMoM7mGOOIXqQGoAymXhgSX+itJM9kIRFLAP+3YXD5Pdbscx5oxaAIW8Ztr6l2PWmQwF4IyaieP53qdfAqQ8CwBn1JU4vpWhrbxXQA5MZfynANmcDIAzKgcy4FKGXsVJFf3nLgKyBQptfT4KQMRz2N0fcbxqmRMDWXflx0VPnrdArq0vekQ1Dv0UeHZGNebHhwjU8AzwKM43RyZnbAf58Q6ghudeWd0Aus0+5EcMIIRi3beua0D3Nm39BEAx3i7HTK4DEBJn5YxKOnaRA5+ErpMBWMpzDvx1RuXCcxOISlufAjfC7zgAsqsvUvMAD0ApPaEtGi9AIlUzKgJo60tt/SyKRkzLrAXERluf7W1gOICWaMyB386oooOWsIHvXbSoHuUSFovtHqicUVnH3EJoeT0aQEf5/XBGlc6otIOWBXAtPeZkAIJ9Bt6cUU9tZautX2nrk3MACHYr1ZKProKRtDw4o8pzAPjWo+NtpXTTvoteDDg8noDAcwbcRedAkGdFXyk2GEDcegVAFp2gyVDHjRQ4o6q2smoqtR5Hd+qMqtoALCWUUymr1m43QMZfOaMK4C0SrMsDANJ2E5FNcbdbjHC+ENl+H0myJFbLtaq4Rt8dyPBYRQV1E40nMv9rl7xrOw3DGb+Whcqu3i/OM6CUOWvgRlufNmnLYy4m77uJI7AXtdNcTDrU71LEyv7v01/N/ovL6bmu5/8A1tNWZldH0W4AAAAASUVORK5CYII="; @@ -4666,7 +5631,10 @@ { isInline: false }, function(result) { console.log(result); }); 'Office.AppointmentCompose#getAttachmentsAsync:member(2)': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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); @@ -4683,7 +5651,10 @@ } }); 'Office.MessageCompose#getAttachmentsAsync:member(2)': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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); @@ -4700,7 +5671,10 @@ } }); '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 + Office.context.mailbox.item.removeAttachmentAsync( $("#attachmentId").val(), { asyncContext : null }, @@ -4714,7 +5688,10 @@ } ); '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 + Office.context.mailbox.item.removeAttachmentAsync( $("#attachmentId").val(), { asyncContext : null }, @@ -4728,11 +5705,17 @@ } ); '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 + var item = Office.context.mailbox.item; + var options = {asyncContext: {currentItem: item}}; + item.getAttachmentsAsync(options, callback); + function callback(result) { if (result.value.length > 0) { for (i = 0 ; i < result.value.length ; i++) { @@ -4741,6 +5724,7 @@ } } + function handleAttachmentsCallback(result) { // Parse string to be a url, an .eml file, a base64-encoded string, or an .icalendar file. switch (result.value.format) { @@ -4765,11 +5749,17 @@ } } '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 + var item = Office.context.mailbox.item; + var options = {asyncContext: {currentItem: item}}; + item.getAttachmentsAsync(options, callback); + function callback(result) { if (result.value.length > 0) { for (i = 0 ; i < result.value.length ; i++) { @@ -4778,6 +5768,7 @@ } } + function handleAttachmentsCallback(result) { // Parse string to be a url, an .eml file, a base64-encoded string, or an .icalendar file. switch (result.value.format) { @@ -4802,11 +5793,17 @@ } } '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 + var item = Office.context.mailbox.item; + var options = {asyncContext: {currentItem: item}}; + item.getAttachmentsAsync(options, callback); + function callback(result) { if (result.value.length > 0) { for (i = 0 ; i < result.value.length ; i++) { @@ -4815,6 +5812,7 @@ } } + function handleAttachmentsCallback(result) { // Parse string to be a url, an .eml file, a base64-encoded string, or an .icalendar file. switch (result.value.format) { @@ -4839,11 +5837,17 @@ } } '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 + var item = Office.context.mailbox.item; + var options = {asyncContext: {currentItem: item}}; + item.getAttachmentsAsync(options, callback); + function callback(result) { if (result.value.length > 0) { for (i = 0 ; i < result.value.length ; i++) { @@ -4852,6 +5856,7 @@ } } + function handleAttachmentsCallback(result) { // Parse string to be a url, an .eml file, a base64-encoded string, or an .icalendar file. switch (result.value.format) { @@ -4876,15 +5881,26 @@ } } '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 + var attachments = Office.context.mailbox.item.attachments; + console.log(attachments); '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 + var attachments = Office.context.mailbox.item.attachments; + console.log(attachments); '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 + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var categories = asyncResult.value; @@ -4898,10 +5914,15 @@ console.error(asyncResult.error); } }); - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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) { var masterCategories = asyncResult.value; @@ -4922,7 +5943,10 @@ console.error(asyncResult.error); } }); - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-categories.yaml + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var categories = asyncResult.value; @@ -4944,7 +5968,10 @@ } }); '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 + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var categories = asyncResult.value; @@ -4958,10 +5985,15 @@ console.error(asyncResult.error); } }); - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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) { var masterCategories = asyncResult.value; @@ -4982,7 +6014,10 @@ console.error(asyncResult.error); } }); - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-categories.yaml + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var categories = asyncResult.value; @@ -5004,7 +6039,10 @@ } }); '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 + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var categories = asyncResult.value; @@ -5018,10 +6056,15 @@ console.error(asyncResult.error); } }); - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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) { var masterCategories = asyncResult.value; @@ -5042,7 +6085,10 @@ console.error(asyncResult.error); } }); - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-categories.yaml + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var categories = asyncResult.value; @@ -5064,7 +6110,10 @@ } }); '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 + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var categories = asyncResult.value; @@ -5078,10 +6127,15 @@ console.error(asyncResult.error); } }); - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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) { var masterCategories = asyncResult.value; @@ -5102,7 +6156,10 @@ console.error(asyncResult.error); } }); - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-categories.yaml + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var categories = asyncResult.value; @@ -5124,7 +6181,10 @@ } }); '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 + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var categories = asyncResult.value; @@ -5139,10 +6199,15 @@ } }); 'Office.Categories#addAsync:member(2)': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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) { var masterCategories = asyncResult.value; @@ -5164,7 +6229,10 @@ } }); 'Office.Categories#removeAsync:member(2)': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-categories.yaml + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var categories = asyncResult.value; @@ -5186,7 +6254,10 @@ } }); '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 + Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var categories = asyncResult.value; @@ -5201,6 +6272,9 @@ } }); - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-master-categories.yaml + var masterCategoriesToAdd = [ { displayName: "TestCategory", @@ -5218,6 +6292,9 @@ } }); - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-master-categories.yaml + var masterCategoriesToRemove = ["TestCategory"]; @@ -5230,7 +6307,10 @@ } }); '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 + Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var categories = asyncResult.value; @@ -5246,6 +6326,9 @@ }); 'Office.MasterCategories#addAsync:member(2)': - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-master-categories.yaml + var masterCategoriesToAdd = [ { displayName: "TestCategory", @@ -5264,6 +6347,9 @@ }); 'Office.MasterCategories#removeAsync:member(2)': - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-master-categories.yaml + var masterCategoriesToRemove = ["TestCategory"]; @@ -5276,7 +6362,10 @@ } }); '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 + Office.context.mailbox.item.recurrence.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var recurrence = asyncResult.value; @@ -5289,28 +6378,42 @@ console.error(asyncResult.error); } }); - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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. + seriesTimeObject.setDuration(30); + let pattern : Office.Recurrence = { seriesTime: seriesTimeObject, recurrenceType: "weekly", @@ -5318,6 +6421,7 @@ 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}`); @@ -5326,7 +6430,10 @@ console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); }); 'Office.Recurrence#getAsync:member(2)': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml + Office.context.mailbox.item.recurrence.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { var recurrence = asyncResult.value; @@ -5340,28 +6447,42 @@ } }); 'Office.Recurrence#setAsync:member(2)': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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. + seriesTimeObject.setDuration(30); + let pattern : Office.Recurrence = { seriesTime: seriesTimeObject, recurrenceType: "weekly", @@ -5369,6 +6490,7 @@ 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}`); @@ -5377,9 +6499,13 @@ console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); }); '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 + 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) { @@ -5388,9 +6514,13 @@ console.log(JSON.stringify(recurrence)); } '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 + 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) { @@ -5399,9 +6529,13 @@ console.log(JSON.stringify(recurrence)); } '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 + 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) { @@ -5410,9 +6544,13 @@ 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/master/samples/outlook/50-recurrence/get-series-id.yaml + 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) { @@ -5421,9 +6559,13 @@ 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/master/samples/outlook/50-recurrence/get-series-id.yaml + 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) { @@ -5432,9 +6574,13 @@ console.log("This is an instance belonging to series with ID " + seriesId); } '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 + 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) { @@ -5443,20 +6589,35 @@ console.log("This is an instance belonging to series with ID " + seriesId); } '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 + 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/master/samples/outlook/55-display-items/display-existing-message.yaml + var itemId = $("#itemId").val(); + Office.context.mailbox.displayMessageForm(itemId); '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 + var start = new Date(); + var end = new Date(); + end.setHours(start.getHours() + 1); + Office.context.mailbox.displayNewAppointmentForm( + { requiredAttendees: ['bob@contoso.com'], optionalAttendees: ['sam@contoso.com'], @@ -5468,8 +6629,12 @@ body: 'Hello World!' }); '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 + Office.context.mailbox.displayNewMessageForm( + { toRecipients: Office.context.mailbox.item.to, // Copies the To line from current item ccRecipients: ['sam@contoso.com'], @@ -5486,12 +6651,19 @@ ] }); '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 + 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 + Office.context.mailbox.item.displayReplyForm( + { htmlBody : "This is a reply with a couple of attachments - an inline image and an item
        ", attachments : @@ -5509,12 +6681,19 @@ } }); '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 + 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 + Office.context.mailbox.item.displayReplyForm( + { htmlBody : "This is a reply with a couple of attachments - an inline image and an item
        ", attachments : @@ -5532,57 +6711,82 @@ } }); '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 + 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 + Office.context.mailbox.item.displayReplyAllForm( "This is a reply ALL with some bold text." ); '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 + if (!Office.context.mailbox.item.getSharedPropertiesAsync) { console.error("Try this sample on a message from a shared folder."); return; } + Office.context.mailbox.item.getSharedPropertiesAsync(function(result) { console.log(result.value); }); '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 + if (!Office.context.mailbox.item.getSharedPropertiesAsync) { console.error("Try this sample on a message from a shared folder."); return; } + Office.context.mailbox.item.getSharedPropertiesAsync(function(result) { console.log(result.value); }); '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 + if (!Office.context.mailbox.item.getSharedPropertiesAsync) { console.error("Try this sample on a message from a shared folder."); return; } + Office.context.mailbox.item.getSharedPropertiesAsync(function(result) { console.log(result.value); }); '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 + if (!Office.context.mailbox.item.getSharedPropertiesAsync) { console.error("Try this sample on a message 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/master/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; @@ -5626,6 +6830,9 @@ }); '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 + if (!Office.context.mailbox.item.getSharedPropertiesAsync) { console.error("Try this sample on a message from a shared folder."); return; @@ -5669,6 +6876,9 @@ }); '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 + if (!Office.context.mailbox.item.getSharedPropertiesAsync) { console.error("Try this sample on a message from a shared folder."); return; @@ -5712,6 +6922,9 @@ }); '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 + if (!Office.context.mailbox.item.getSharedPropertiesAsync) { console.error("Try this sample on a message from a shared folder."); return; @@ -5754,233 +6967,324 @@ } }); '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 + var entities = Office.context.mailbox.item.getEntities(); + 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.log("No entities found on this item."); } '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 + var entities = Office.context.mailbox.item.getEntities(); + 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.log("No entities found on this item."); } '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 + 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 + 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 + // 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#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 + // 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/master/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()); '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 + // 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/master/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")); '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 + // 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/master/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++; } + 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#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 + 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++; } + 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/master/samples/outlook/75-entities-and-regex-matches/selected.yaml + 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#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 + 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.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 + Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function (result) { var ewsId = Office.context.mailbox.item.itemId; @@ -5997,6 +7301,9 @@ xhr.send(); }); - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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; @@ -6018,6 +7325,9 @@ console.log("EWS ID (from REST ID): " + ewsId2); '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 + Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function (result) { var ewsId = Office.context.mailbox.item.itemId; @@ -6034,6 +7344,9 @@ xhr.send(); }); - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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; @@ -6055,6 +7368,9 @@ 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/master/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; @@ -6072,6 +7388,9 @@ }); '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 + console.log("EWS URL: " + Office.context.mailbox.ewsUrl); var ewsId = Office.context.mailbox.item.itemId; @@ -6093,6 +7412,9 @@ 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/master/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; @@ -6113,7 +7435,10 @@ console.log("EWS ID (from REST ID): " + ewsId2); '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 + Office.context.mailbox.item.getItemIdAsync(function (result) { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`getItemIdAsync failed with message: ${result.error.message}`); @@ -6122,7 +7447,10 @@ } }); '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 + Office.context.mailbox.item.getItemIdAsync(function (result) { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`getItemIdAsync failed with message: ${result.error.message}`); @@ -6132,6 +7460,9 @@ }); '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 + var ewsId = Office.context.mailbox.item.itemId; var request = '- + // 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 + 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 + Office.context.mailbox.getCallbackTokenAsync(function (result) { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Token retrieval failed with message: ${result.error.message}`); @@ -6191,7 +7528,10 @@ } }); '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 + Office.context.mailbox.getUserIdentityTokenAsync(function (result) { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Token retrieval failed with message: ${result.error.message}`); @@ -6200,8 +7540,12 @@ } }); '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 + // Get the compose type of the current item (mail only). + Office.context.mailbox.item.getComposeTypeAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log( @@ -6216,6 +7560,9 @@ }); 'Office.Body#setSignatureAsync: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 + // Set the signature for the current item. var signature = $("#signature").val(); @@ -6232,6 +7579,9 @@ }); 'Office.AppointmentCompose#disableClientSignatureAsync: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 + // Disable the client signature. Office.context.mailbox.item.disableClientSignatureAsync(function(asyncResult) @@ -6244,6 +7594,9 @@ }); 'Office.MessageCompose#disableClientSignatureAsync: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 + // Disable the client signature. Office.context.mailbox.item.disableClientSignatureAsync(function(asyncResult) @@ -6256,6 +7609,9 @@ }); 'Office.AppointmentCompose#isClientSignatureEnabledAsync: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 + // Check if the client signature is currently enabled. Office.context.mailbox.item.isClientSignatureEnabledAsync(function(asyncResult) @@ -6268,6 +7624,9 @@ }); 'Office.MessageCompose#isClientSignatureEnabledAsync: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 + // Check if the client signature is currently enabled. Office.context.mailbox.item.isClientSignatureEnabledAsync(function(asyncResult) @@ -6279,11 +7638,22 @@ } }); 'Office.AppointmentRead#subject:member': - - 'console.log(`Subject: ${Office.context.mailbox.item.subject}`);' + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-subject-read.yaml + + console.log(`Subject: ${Office.context.mailbox.item.subject}`); 'Office.MessageRead#subject:member': - - 'console.log(`Subject: ${Office.context.mailbox.item.subject}`);' + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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 + Office.context.mailbox.item.subject.getAsync((result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Action failed with message ${result.error.message}`); @@ -6291,8 +7661,12 @@ } console.log(`Subject: ${result.value}`); }); - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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}`); @@ -6301,7 +7675,10 @@ console.log(`Successfully set subject to ${subject}`); }); '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 + Office.context.mailbox.item.subject.getAsync((result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Action failed with message ${result.error.message}`); @@ -6309,8 +7686,12 @@ } console.log(`Subject: ${result.value}`); }); - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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}`); @@ -6320,26 +7701,64 @@ }); '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 + console.log(`Internet message ID: ${Office.context.mailbox.item.internetMessageId}`); 'Office.AppointmentRead#itemClass:member': - - 'console.log(`Item class: ${Office.context.mailbox.item.itemClass}`);' + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-item-class-read.yaml + + console.log(`Item class: ${Office.context.mailbox.item.itemClass}`); 'Office.MessageRead#itemClass:member': - - 'console.log(`Item class: ${Office.context.mailbox.item.itemClass}`);' + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-item-class-read.yaml + + console.log(`Item class: ${Office.context.mailbox.item.itemClass}`); 'Office.AppointmentCompose#itemType:member': - - 'console.log(`Item type: ${Office.context.mailbox.item.itemType}`);' + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-item-type.yaml + + console.log(`Item type: ${Office.context.mailbox.item.itemType}`); 'Office.AppointmentRead#itemType:member': - - 'console.log(`Item type: ${Office.context.mailbox.item.itemType}`);' + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-item-type.yaml + + console.log(`Item type: ${Office.context.mailbox.item.itemType}`); 'Office.MessageCompose#itemType:member': - - 'console.log(`Item type: ${Office.context.mailbox.item.itemType}`);' + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-item-type.yaml + + console.log(`Item type: ${Office.context.mailbox.item.itemType}`); 'Office.MessageRead#itemType:member': - - 'console.log(`Item type: ${Office.context.mailbox.item.itemType}`);' + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-item-type.yaml + + console.log(`Item type: ${Office.context.mailbox.item.itemType}`); 'Office.AppointmentRead#start:member': - - 'console.log(`Appointment starts: ${Office.context.mailbox.item.start}`);' + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-start-read.yaml + + console.log(`Appointment starts: ${Office.context.mailbox.item.start}`); 'Office.MessageRead#start:member': - - 'console.log(`Appointment starts: ${Office.context.mailbox.item.start}`);' + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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 + Office.context.mailbox.item.start.getAsync((result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Action failed with message ${result.error.message}`); @@ -6347,9 +7766,14 @@ } console.log(`Appointment starts: ${result.value}`); }); - - |- + - >- + // 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 + var 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) { console.error(`Action failed with message ${result.error.message}`); @@ -6358,7 +7782,10 @@ console.log(`Successfully set start date and time to ${start}`); }); '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 + Office.context.mailbox.item.start.getAsync((result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Action failed with message ${result.error.message}`); @@ -6367,9 +7794,14 @@ console.log(`Appointment starts: ${result.value}`); }); 'Office.Time#setAsync: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 + var 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) { console.error(`Action failed with message ${result.error.message}`); @@ -6377,7 +7809,10 @@ } console.log(`Successfully set start date and time to ${start}`); }); - - |- + - >- + // 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 + Office.context.mailbox.item.start.getAsync((result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Get start date failed with message ${result.error.message}`); @@ -6396,42 +7831,77 @@ }); '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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + console.log(`Date and time item last modified: ${Office.context.mailbox.item.dateTimeModified}`); 'Office.AppointmentRead#end:member': - - 'console.log(`Appointment ends: ${Office.context.mailbox.item.end}`);' + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-end-read.yaml + + console.log(`Appointment ends: ${Office.context.mailbox.item.end}`); 'Office.MessageRead#end:member': - - 'console.log(`Appointment ends: ${Office.context.mailbox.item.end}`);' + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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 + Office.context.mailbox.item.end.getAsync((result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Action failed with message ${result.error.message}`); @@ -6439,7 +7909,10 @@ } console.log(`Appointment ends: ${result.value}`); }); - - |- + - >- + // 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 + Office.context.mailbox.item.start.getAsync((result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Get start date failed with message ${result.error.message}`); @@ -6458,14 +7931,23 @@ }); '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 + 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 + 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 + Office.context.mailbox.item.location.getAsync((result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Action failed with message ${result.error.message}`); @@ -6473,8 +7955,12 @@ } console.log(`Appointment location: ${result.value}`); }); - - |- + - >- + // 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 + 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}`); @@ -6483,7 +7969,10 @@ console.log(`Successfully set location to ${location}`); }); '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 + Office.context.mailbox.item.location.getAsync((result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Action failed with message ${result.error.message}`); @@ -6492,8 +7981,12 @@ console.log(`Appointment location: ${result.value}`); }); 'Office.Location#setAsync: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 + 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}`); @@ -6502,7 +7995,10 @@ console.log(`Successfully set location to ${location}`); }); '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 + Office.context.mailbox.item.enhancedLocation.getAsync((result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Failed to get locations. Error message: ${result.error.message}`); @@ -6521,6 +8017,9 @@ } }); - >- + // 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 + var locations = [ { id: "Contoso", @@ -6541,6 +8040,9 @@ } }); - >- + // 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 + var locations = [ { id: "Contoso", @@ -6561,7 +8063,10 @@ } }); '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 + Office.context.mailbox.item.enhancedLocation.getAsync((result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Failed to get locations. Error message: ${result.error.message}`); @@ -6580,7 +8085,10 @@ } }); 'Office.EnhancedLocation#getAsync:member(2)': - - |- + - >- + // 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 + Office.context.mailbox.item.enhancedLocation.getAsync((result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Failed to get locations. Error message: ${result.error.message}`); @@ -6600,6 +8108,9 @@ }); 'Office.EnhancedLocation#addAsync:member(2)': - >- + // 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 + var locations = [ { id: "Contoso", @@ -6621,6 +8132,9 @@ }); 'Office.EnhancedLocation#removeAsync:member(2)': - >- + // 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 + var locations = [ { id: "Contoso", @@ -6641,7 +8155,10 @@ } }); '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 + Office.context.mailbox.item.isAllDayEvent.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log("Is this an all-day event? " + asyncResult.value); @@ -6650,6 +8167,9 @@ } }); - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + Office.context.mailbox.item.isAllDayEvent.setAsync(true, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Failed) { @@ -6659,7 +8179,10 @@ } }); '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 + Office.context.mailbox.item.isAllDayEvent.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log("Is this an all-day event? " + asyncResult.value); @@ -6669,6 +8192,9 @@ }); 'Office.IsAllDayEvent#setAsync:member(2)': - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + Office.context.mailbox.item.isAllDayEvent.setAsync(true, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Failed) { @@ -6678,7 +8204,10 @@ } }); '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 + Office.context.mailbox.item.sensitivity.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log("Sensitivity: " + asyncResult.value); @@ -6686,7 +8215,10 @@ console.log("Failed to get sensitivity: " + JSON.stringify(asyncResult.error)); } }); - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + Office.context.mailbox.item.sensitivity.setAsync( Office.MailboxEnums.AppointmentSensitivityType.Confidential, function callback(asyncResult) { @@ -6698,7 +8230,10 @@ } ); '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 + Office.context.mailbox.item.sensitivity.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log("Sensitivity: " + asyncResult.value); @@ -6707,7 +8242,10 @@ } }); 'Office.Sensitivity#setAsync:member(2)': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + Office.context.mailbox.item.sensitivity.setAsync( Office.MailboxEnums.AppointmentSensitivityType.Confidential, function callback(asyncResult) { @@ -6719,7 +8257,10 @@ } ); 'Word.Body#search:member(1)': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/search.yaml + await Word.run(async (context) => { let results = context.document.body.search("Online"); results.load("length"); @@ -6733,7 +8274,10 @@ await context.sync(); }); - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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 // (i.e. use wildcards). @@ -6750,7 +8294,10 @@ await context.sync(); }); - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/get-word-count.yaml + await Word.run(async (context) => { let paragraphs = context.document.body.paragraphs; paragraphs.load("text"); @@ -6796,7 +8343,10 @@ }); }); '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 + await Word.run(async (context) => { // Use a two-dimensional array to hold the initial table values. let data = [ @@ -6810,7 +8360,10 @@ await context.sync(); }); '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 + await Word.run(async (context) => { let paragraphs = context.document.body.paragraphs; paragraphs.load("text"); @@ -6857,6 +8410,9 @@ }); '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 + // Traverses each paragraph of the document and wraps a content control on each with either a even or odd tags. @@ -6881,6 +8437,9 @@ }); '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 + // Adds title and colors to odd and even content controls and changes their appearance. @@ -6916,7 +8475,10 @@ await context.sync(); }); '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 + await Word.run(async (context) => { let contentControls = context.document.contentControls.getByTag("customer"); contentControls.load("text"); @@ -6930,14 +8492,20 @@ await context.sync(); }); '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 + await Word.run(async (context) => { context.document.properties.customProperties.add("Numeric Property", 1234); await context.sync(); console.log("Property added"); }); - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/30-properties/read-write-custom-document-properties.yaml + await Word.run(async (context) => { context.document.properties.customProperties.add("String Property", "Hello World!"); @@ -6945,7 +8513,10 @@ console.log("Property added"); }); '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 + await Word.run(async (context) => { let properties = context.document.properties.customProperties; properties.load("key,type,value"); @@ -6955,7 +8526,10 @@ console.log("Property Name:" + properties.items[i].key + "; Type=" + properties.items[i].type + "; Property Value=" + properties.items[i].value); }); '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 + await Word.run(async (context) => { let builtInProperties = context.document.properties; builtInProperties.load("*"); // Let's get all! @@ -6964,7 +8538,10 @@ console.log(JSON.stringify(builtInProperties, null, 4)); }); '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 + await Word.run(async (context) => { const firstPicture = context.document.body.inlinePictures.getFirst(); firstPicture.load("width, height"); @@ -6978,7 +8555,10 @@ console.log(base64.value); }); '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 + Word.run(async (context) => { context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.line, "After"); @@ -6986,7 +8566,10 @@ console.log("success"); }); '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 + 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( @@ -7004,7 +8587,10 @@ await context.sync(); }); '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 + 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(); @@ -7014,7 +8600,10 @@ console.log(paragraph.text); }); 'Word.Paragraph#leftIndent:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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 @@ -7022,7 +8611,10 @@ return context.sync(); }); 'Word.Paragraph#lineSpacing:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/paragraph-properties.yaml + await Word.run(async (context) => { // Adjusts line spacing. context.document.body.paragraphs.getFirst().lineSpacing = 20; @@ -7030,7 +8622,10 @@ await context.sync(); }); 'Word.Paragraph#spaceAfter:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/paragraph-properties.yaml + await Word.run(async (context) => { // Adjust space between paragraphs. context.document.body.paragraphs.getFirst().spaceAfter = 20; @@ -7038,7 +8633,10 @@ await context.sync(); }); 'Word.Paragraph#alignment:member': - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/paragraph-properties.yaml + await Word.run(async (context) => { // Centers last paragraph alignment. context.document.body.paragraphs.getLast().alignment = "Centered"; @@ -7046,7 +8644,10 @@ await context.sync(); }); '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 + await Word.run(async (context) => { // Replace the last paragraph. let range = context.document.body.paragraphs.getLast().insertText("Just replaced the last paragraph!", "Replace"); @@ -7056,14 +8657,20 @@ await context.sync(); }); '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 + await Word.run(async (context) => { // If select is called with no parameters, it selects the object. context.document.body.paragraphs.getLast().select(); await context.sync(); }); - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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("End"); @@ -7071,7 +8678,10 @@ await context.sync(); }); '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 + await Word.run(async (context) => { let paragraph = context.document.body.paragraphs.getFirst(); let words = paragraph.split([" "], true /* trimDelimiters*/, true /* trimSpaces */); @@ -7090,8 +8700,12 @@ } }); '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 + // This example starts a new list stating with the second paragraph. + await Word.run(async (context) => { let paragraphs = context.document.body.paragraphs; paragraphs.load("$none"); // No properties needed. @@ -7113,7 +8727,10 @@ await context.sync(); }); '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 + await Word.run(async (context) => { const paragraph = context.document.body.paragraphs.getFirst(); paragraph.set({ @@ -7126,7 +8743,10 @@ await context.sync(); }); - - |- + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/90-scenarios/multiple-property-set.yaml + await Word.run(async (context) => { const firstParagraph = context.document.body.paragraphs.getFirst(); const secondParagraph = firstParagraph.getNext(); @@ -7139,7 +8759,10 @@ await context.sync(); }); '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 + await Word.run(async (context) => { let results = context.document.body.search("Contractor"); results.load("font/bold"); @@ -7160,7 +8783,10 @@ await context.sync(); }); '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 + await Word.run(async (context) => { // Gets the complete sentence (as range) associated with the insertion point. let sentences = context.document @@ -7187,7 +8813,10 @@ } }); '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 + await Word.run(async (context) => { context.document.sections.getFirst().getHeader("Primary") .insertParagraph("This is a header", "End"); @@ -7195,7 +8824,10 @@ await context.sync(); }); '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 + await Word.run(async (context) => { context.document.sections.getFirst().getFooter("Primary") .insertParagraph("This is a footer", "End"); @@ -7203,7 +8835,10 @@ await context.sync(); }); '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 + await Word.run(async (context) => { let firstCell = context.document.body.tables.getFirst().getCell(0, 0).body; firstCell.load("text"); From 4ac70749da25e8397f94b41a0234c76718cfc796 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 6 May 2020 09:38:24 -0700 Subject: [PATCH 287/660] Promoting ExcelApi 1.11 snippets to release (#455) --- playlists/excel.yaml | 98 +++++++++---------- .../comment-mentions.yaml | 4 +- samples/excel/12-comment/comment-replies.yaml | 2 +- .../comment-resolution.yaml | 8 +- .../excel/50-workbook/create-workbook.yaml | 2 +- .../culture-info.yaml | 6 +- .../excel/50-workbook/data-protection.yaml | 2 +- .../workbook-calculation.yaml | 6 +- .../workbook-save-and-close.yaml | 6 +- snippet-extractor-output/snippets.yaml | 14 +-- view/excel.json | 10 +- 11 files changed, 79 insertions(+), 79 deletions(-) rename samples/excel/{85-preview-apis => 12-comment}/comment-mentions.yaml (97%) rename samples/excel/{85-preview-apis => 12-comment}/comment-resolution.yaml (96%) rename samples/excel/{85-preview-apis => 50-workbook}/culture-info.yaml (98%) rename samples/excel/{85-preview-apis => 50-workbook}/workbook-calculation.yaml (98%) rename samples/excel/{85-preview-apis => 50-workbook}/workbook-save-and-close.yaml (96%) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 6cd25d8eb..78c65b884 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -146,6 +146,15 @@ 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////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 @@ -155,6 +164,15 @@ 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////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 @@ -745,6 +763,17 @@ 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////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 @@ -756,6 +785,17 @@ 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////samples/excel/50-workbook/culture-info.yaml + group: Workbook + api_set: + ExcelApi: '1.11' - id: excel-workbook-data-protection name: Data protection fileName: data-protection.yaml @@ -765,6 +805,15 @@ 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////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 @@ -886,46 +935,6 @@ group: Worksheet api_set: ExcelApi: '1.1' -- 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////samples/excel/85-preview-apis/workbook-calculation.yaml - group: Preview APIs - api_set: - ExcelApi: '1.11' -- id: excel-comment-mentions - name: Comment mentions - fileName: comment-mentions.yaml - description: Mentions someone in a comment. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/85-preview-apis/comment-mentions.yaml - group: Preview APIs - api_set: - ExcelApi: '1.11' -- id: excel-comment-resolution - name: Comment resolution - fileName: comment-resolution.yaml - description: Resolves and reopens a comment thread. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/85-preview-apis/comment-resolution.yaml - group: Preview APIs - api_set: - ExcelApi: '1.11' -- 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////samples/excel/85-preview-apis/culture-info.yaml - group: Preview APIs - api_set: - ExcelApi: '1.11' - id: excel-workbook-insert-external-worksheets name: Insert external worksheets fileName: workbook-insert-external-worksheets.yaml @@ -935,15 +944,6 @@ group: Preview APIs api_set: ExcelAPI: '1.11' -- 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////samples/excel/85-preview-apis/workbook-save-and-close.yaml - group: Preview APIs - api_set: - ExcelAPI: '1.11' - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/samples/excel/85-preview-apis/comment-mentions.yaml b/samples/excel/12-comment/comment-mentions.yaml similarity index 97% rename from samples/excel/85-preview-apis/comment-mentions.yaml rename to samples/excel/12-comment/comment-mentions.yaml index 981d1d668..d52360be8 100644 --- a/samples/excel/85-preview-apis/comment-mentions.yaml +++ b/samples/excel/12-comment/comment-mentions.yaml @@ -89,8 +89,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/12-comment/comment-replies.yaml b/samples/excel/12-comment/comment-replies.yaml index 6f93aff49..acade0f0a 100644 --- a/samples/excel/12-comment/comment-replies.yaml +++ b/samples/excel/12-comment/comment-replies.yaml @@ -1,4 +1,4 @@ -order: 2 +order: 3 id: excel-comment-replies name: Comment replies description: 'Adds, edits, and removes comment replies.' diff --git a/samples/excel/85-preview-apis/comment-resolution.yaml b/samples/excel/12-comment/comment-resolution.yaml similarity index 96% rename from samples/excel/85-preview-apis/comment-resolution.yaml rename to samples/excel/12-comment/comment-resolution.yaml index 178b12386..b2e4e9511 100644 --- a/samples/excel/85-preview-apis/comment-resolution.yaml +++ b/samples/excel/12-comment/comment-resolution.yaml @@ -1,10 +1,10 @@ -order: 3 +order: 4 id: excel-comment-resolution name: Comment resolution description: Resolves and reopens a comment thread. host: EXCEL api_set: - ExcelApi: '1.11' + ExcelApi: '1.10' script: content: | $("#setup").click(() => tryCatch(setup)); @@ -100,8 +100,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/50-workbook/create-workbook.yaml b/samples/excel/50-workbook/create-workbook.yaml index e5b1ea75c..289d412d0 100644 --- a/samples/excel/50-workbook/create-workbook.yaml +++ b/samples/excel/50-workbook/create-workbook.yaml @@ -1,4 +1,4 @@ -order: 3 +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.' diff --git a/samples/excel/85-preview-apis/culture-info.yaml b/samples/excel/50-workbook/culture-info.yaml similarity index 98% rename from samples/excel/85-preview-apis/culture-info.yaml rename to samples/excel/50-workbook/culture-info.yaml index 59fa86b89..b7aaaa803 100644 --- a/samples/excel/85-preview-apis/culture-info.yaml +++ b/samples/excel/50-workbook/culture-info.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 5 id: excel-culture-info name: Culture info description: This sample shows how to apply the cultural settings APIs to help normalize data. @@ -146,8 +146,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/50-workbook/data-protection.yaml b/samples/excel/50-workbook/data-protection.yaml index 5dc58c574..52c5c3e38 100644 --- a/samples/excel/50-workbook/data-protection.yaml +++ b/samples/excel/50-workbook/data-protection.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 6 id: excel-workbook-data-protection name: Data protection description: Protects data in a worksheet and the workbook structure. diff --git a/samples/excel/85-preview-apis/workbook-calculation.yaml b/samples/excel/50-workbook/workbook-calculation.yaml similarity index 98% rename from samples/excel/85-preview-apis/workbook-calculation.yaml rename to samples/excel/50-workbook/workbook-calculation.yaml index 3b9bc5ff1..8a5c101cc 100644 --- a/samples/excel/85-preview-apis/workbook-calculation.yaml +++ b/samples/excel/50-workbook/workbook-calculation.yaml @@ -1,4 +1,4 @@ -order: 1 +order: 3 id: excel-workbook-calculation name: Calculations description: 'Demonstrates the calculation APIs of the workbook: events for when the worksheet recalculates and application-level calculation controls.' @@ -181,8 +181,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/workbook-save-and-close.yaml b/samples/excel/50-workbook/workbook-save-and-close.yaml similarity index 96% rename from samples/excel/85-preview-apis/workbook-save-and-close.yaml rename to samples/excel/50-workbook/workbook-save-and-close.yaml index 91e69c45a..807e2c31d 100644 --- a/samples/excel/85-preview-apis/workbook-save-and-close.yaml +++ b/samples/excel/50-workbook/workbook-save-and-close.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 7 id: excel-workbook-save-and-close name: Save and close description: Saves and closes a workbook. @@ -82,8 +82,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 33f043ed1..74bb085d4 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -34,7 +34,7 @@ 'Excel.Application#decimalSeparator:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/culture-info.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/culture-info.yaml await Excel.run(async (context) => { context.application.load("decimalSeparator,thousandsSeparator"); @@ -742,7 +742,7 @@ 'Excel.Comment#resolved:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/comment-resolution.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/12-comment/comment-resolution.yaml await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Comments"); @@ -805,7 +805,7 @@ 'Excel.CommentRichContent#mentions:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/comment-mentions.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/12-comment/comment-mentions.yaml await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Comments"); @@ -2016,7 +2016,7 @@ 'Excel.NumberFormatInfo#numberDecimalSeparator:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/culture-info.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/culture-info.yaml // This will convert a number like "14,37" to "14.37" @@ -2057,7 +2057,7 @@ 'Excel.NumberFormatInfo#numberGroupSeparator:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/culture-info.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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" @@ -3852,7 +3852,7 @@ 'Excel.Workbook#close:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/workbook-save-and-close.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/workbook-save-and-close.yaml await Excel.run(async (context) => { context.workbook.close(Excel.CloseBehavior.save); @@ -3860,7 +3860,7 @@ 'Excel.Workbook#save:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/workbook-save-and-close.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/workbook-save-and-close.yaml await Excel.run(async (context) => { context.workbook.save(Excel.SaveBehavior.save); diff --git a/view/excel.json b/view/excel.json index 29126c0e2..8ccd0a8b9 100644 --- a/view/excel.json +++ b/view/excel.json @@ -15,7 +15,9 @@ "excel-chart-title-format": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-title-format.yaml", "excel-chart-trendlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-trendlines.yaml", "excel-comment-basics": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/12-comment/comment-basics.yaml", + "excel-comment-mentions": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/12-comment/comment-mentions.yaml", "excel-comment-replies": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/12-comment/comment-replies.yaml", + "excel-comment-resolution": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/12-comment/comment-resolution.yaml", "excel-range-conditional-formatting-basic": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml", "excel-range-conditional-formatting-advanced": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml", "excel-custom-functions-basic": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/16-custom-functions/basic-function.yaml", @@ -79,8 +81,11 @@ "excel-table-sort-data": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/sort-data.yaml", "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/workbook-get-active-cell.yaml", "excel-settings-create-get-change-delete-settings": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/create-get-change-delete-settings.yaml", + "excel-workbook-calculation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/workbook-calculation.yaml", "excel-workbook-create-workbook": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/create-workbook.yaml", + "excel-culture-info": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/culture-info.yaml", "excel-workbook-data-protection": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/data-protection.yaml", + "excel-workbook-save-and-close": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/workbook-save-and-close.yaml", "excel-worksheet-active-worksheet": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/active-worksheet.yaml", "excel-worksheet-add-delete-rename-move-worksheet": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml", "excel-worksheet-auto-filter": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-auto-filter.yaml", @@ -94,12 +99,7 @@ "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-visibility.yaml", - "excel-workbook-calculation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-calculation.yaml", - "excel-comment-mentions": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/comment-mentions.yaml", - "excel-comment-resolution": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/comment-resolution.yaml", - "excel-culture-info": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/culture-info.yaml", "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", - "excel-workbook-save-and-close": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-save-and-close.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/multiple-property-set.yaml", From 9c8f1b26e0f456577db7ef70be210f5eeceeb4de Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 21 May 2020 10:51:07 -0700 Subject: [PATCH 288/660] [Outlook] Shows how to inline base64 image (#457) * [Outlook] Shows how to inline base64 image * Add comment based on feedback --- playlists/outlook.yaml | 2 +- .../work-with-client-signatures.yaml | 34 ++++++- snippet-extractor-metadata/outlook.xlsx | Bin 19714 -> 19839 bytes snippet-extractor-output/snippets.yaml | 91 ++++++++++++++++++ 4 files changed, 124 insertions(+), 3 deletions(-) diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 4296e928b..a45c39a44 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -587,7 +587,7 @@ api_set: Mailbox: preview - id: outlook-work-with-client-signatures - name: Work With Client Signatures (Compose) + 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 diff --git a/samples/outlook/99-preview-apis/work-with-client-signatures.yaml b/samples/outlook/99-preview-apis/work-with-client-signatures.yaml index 753e72a67..526158f73 100644 --- a/samples/outlook/99-preview-apis/work-with-client-signatures.yaml +++ b/samples/outlook/99-preview-apis/work-with-client-signatures.yaml @@ -1,5 +1,5 @@ id: outlook-work-with-client-signatures -name: Work With Client Signatures (Compose) +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: @@ -10,6 +10,7 @@ script: $("#disableClientSignature").click(disableClientSignature); $("#getComposeType").click(getComposeType); $("#setSignature").click(setSignature); + $("#setSignatureWithInlineImage").click(setSignatureWithInlineImage); function isClientSignatureEnabled() { // Check if the client signature is currently enabled. @@ -61,6 +62,32 @@ 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"; + 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}".`); + // Important: setSignatureAsync is currently in preview. + Office.context.mailbox.item.body.setSignatureAsync( + signature, + { coercionType: "html" }, + function(asyncResult) { + console.log(`setSignatureAsync: ${asyncResult.status}`); + } + ); + } else { + console.error(`addFileAttachmentFromBase64Async: ${result.error}`); + } + } + ); + } language: typescript template: content: |- @@ -88,9 +115,12 @@ template: - +
      language: html style: @@ -47,14 +61,14 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js + 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-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 + core-js@2.4.1/client/core.min.js + @types/core-js - jquery@3.1.1 - @types/jquery@3.3.1 + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/outlook/55-display-items/display-existing-message.yaml b/samples/outlook/99-preview-apis/display-existing-message.yaml similarity index 60% rename from samples/outlook/55-display-items/display-existing-message.yaml rename to samples/outlook/99-preview-apis/display-existing-message.yaml index d2e4d5880..dc5d36b76 100644 --- a/samples/outlook/55-display-items/display-existing-message.yaml +++ b/samples/outlook/99-preview-apis/display-existing-message.yaml @@ -3,18 +3,28 @@ name: Open a message description: Displays an existing message in a separate window host: OUTLOOK api_set: - Mailbox: '1.1' + Mailbox: preview script: content: | // Pre-populate with current item ID. $("#itemId").val(Office.context.mailbox.item.itemId); $("#run").click(run); + $("#run-async").click(runAsync); function run() { var itemId = $("#itemId").val(); Office.context.mailbox.displayMessageForm(itemId); } + + // The async version will return error 9049 if the item is not found. + // The async version is only available in preview. + function runAsync() { + var itemId = $("#itemId").val(); + Office.context.mailbox.displayAppointmentFormAsync(itemId, function (asyncResult) { + console.log("Result: " + JSON.stringify(asyncResult)); + }); + } language: typescript template: content: | @@ -31,6 +41,9 @@ template: +
      language: html style: @@ -47,14 +60,14 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js + 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-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 + core-js@2.4.1/client/core.min.js + @types/core-js - jquery@3.1.1 - @types/jquery@3.3.1 + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/outlook/99-preview-apis/display-new-appointment.yaml b/samples/outlook/99-preview-apis/display-new-appointment.yaml new file mode 100644 index 000000000..9d7a2f685 --- /dev/null +++ b/samples/outlook/99-preview-apis/display-new-appointment.yaml @@ -0,0 +1,93 @@ +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. +host: OUTLOOK +api_set: + Mailbox: preview +script: + content: | + $("#run").click(run); + $("#run-async").click(runAsync); + + function run() { + var start = new Date(); + var 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!" + }); + } + + function runAsync() { + var start = new Date(); + var end = new Date(); + end.setHours(start.getHours() + 1); + + // The async version is only available in preview, 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)); + } + ); + } + language: typescript +template: + content: |- +
      +

      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: | + 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/outlook/99-preview-apis/display-new-message.yaml b/samples/outlook/99-preview-apis/display-new-message.yaml new file mode 100644 index 000000000..a13abca75 --- /dev/null +++ b/samples/outlook/99-preview-apis/display-new-message.yaml @@ -0,0 +1,92 @@ +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' +host: OUTLOOK +api_set: + Mailbox: preview +script: + content: | + $("#run").click(run); + $("#run-async").click(runAsync); + + function run() { + 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 + } + ] + }); + } + + // The async version is only available in preview, and provides a callback when the new message form has been created. + function runAsync() { + 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)); + } + ); + } + language: typescript +template: + 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: | + 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/outlook/99-preview-apis/display-reply-forms.yaml b/samples/outlook/99-preview-apis/display-reply-forms.yaml new file mode 100644 index 000000000..4d2904a06 --- /dev/null +++ b/samples/outlook/99-preview-apis/display-reply-forms.yaml @@ -0,0 +1,86 @@ +id: outlook-display-items-display-reply-forms +name: Create replies +description: Opens reply and reply-all message forms with sample reply content. +host: OUTLOOK +api_set: + Mailbox: preview +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); + + // Async functions are only currently available in preview. + function displayReplyForm() { + Office.context.mailbox.item.displayReplyForm("This is a reply with some text in italics."); + } + + function displayReplyFormAsync() { + Office.context.mailbox.item.displayReplyFormAsync("This is a reply with some text in italics.", function( + asyncResult + ) { + console.log(JSON.stringify(asyncResult)); + }); + } + + function displayReplyAllForm() { + Office.context.mailbox.item.displayReplyAllForm("This is a reply ALL with some bold text."); + } + + function displayReplyAllFormAsync() { + Office.context.mailbox.item.displayReplyAllFormAsync("This is a reply ALL with some bold text.", function( + asyncResult + ) { + console.log(JSON.stringify(asyncResult)); + }); + } + language: typescript +template: + content: |- +
      +

      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: | + 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/outlook/99-preview-apis/display-reply-with-attachments.yaml b/samples/outlook/99-preview-apis/display-reply-with-attachments.yaml new file mode 100644 index 000000000..58cae9380 --- /dev/null +++ b/samples/outlook/99-preview-apis/display-reply-with-attachments.yaml @@ -0,0 +1,84 @@ +id: outlook-display-items-display-reply-with-attachments +name: 'Create a reply, with attachments' +description: Opens a reply message forms and adds sample attachments. +host: OUTLOOK +api_set: + Mailbox: preview +script: + content: | + $("#run").click(run); + $("#run-async").click(runAsync); + + function run() { + 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}`); + } + } + }); + } + + // The async version is only available in preview, and provides a callback when the new appointment form has been created. + function runAsync() { + 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)); + } + ); + } + language: typescript +template: + content: |- +
      +

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

      +
      + +
      +

      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-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 74db54cd4..b3ca61720 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -6651,7 +6651,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/master/samples/outlook/99-preview-apis/display-existing-appointment.yaml var itemId = $("#itemId").val(); @@ -6659,7 +6659,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/master/samples/outlook/99-preview-apis/display-existing-message.yaml var itemId = $("#itemId").val(); @@ -6667,7 +6667,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/master/samples/outlook/99-preview-apis/display-new-appointment.yaml var start = new Date(); @@ -6676,116 +6676,97 @@ 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.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)': - >- // 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/master/samples/outlook/99-preview-apis/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.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.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/master/samples/outlook/99-preview-apis/display-reply-forms.yaml - Office.context.mailbox.item.displayReplyForm( - "This is a reply with some text in italics." - ); + 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 - - Office.context.mailbox.item.displayReplyForm( + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/display-reply-with-attachments.yaml - { - 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.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/master/samples/outlook/55-display-items/display-reply-forms.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/display-reply-forms.yaml - Office.context.mailbox.item.displayReplyForm( - "This is a reply with some text in italics." - ); + 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/master/samples/outlook/99-preview-apis/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.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/master/samples/outlook/55-display-items/display-reply-forms.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/display-reply-forms.yaml - Office.context.mailbox.item.displayReplyAllForm( - "This is a reply ALL with some bold text." - ); + 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/master/samples/outlook/99-preview-apis/display-reply-forms.yaml - Office.context.mailbox.item.displayReplyAllForm( - "This is a reply ALL with some bold text." - ); + Office.context.mailbox.item.displayReplyAllForm("This is a reply ALL with + some bold text."); 'Office.AppointmentCompose#getSharedPropertiesAsync:member(2)': - >- // Link to full sample: diff --git a/view/outlook.json b/view/outlook.json index e922b5c7d..3babf5480 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -28,12 +28,6 @@ "outlook-recurrence-get-series-id": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/50-recurrence/get-series-id.yaml", "outlook-recurrence-get-recurrence-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/50-recurrence/get-recurrence-read.yaml", "outlook-recurrence-get-set-recurrence-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml", - "outlook-display-items-display-existing-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-existing-appointment.yaml", - "outlook-display-items-display-existing-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-existing-message.yaml", - "outlook-display-items-display-new-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-new-appointment.yaml", - "outlook-display-items-display-new-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-new-message.yaml", - "outlook-display-items-display-reply-forms": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-reply-forms.yaml", - "outlook-display-items-display-reply-with-attachments": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-reply-with-attachments.yaml", "outlook-delegates-and-shared-folders-get-shared-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml", "outlook-entities-and-regex-matches-basic-entities": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml", "outlook-entities-and-regex-matches-contextual": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/75-entities-and-regex-matches/contextual.yaml", @@ -62,5 +56,11 @@ "outlook-other-item-apis-get-date-time-created-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml", "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", + "outlook-display-items-display-existing-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/display-existing-appointment.yaml", + "outlook-display-items-display-existing-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/display-existing-message.yaml", + "outlook-display-items-display-new-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/display-new-appointment.yaml", + "outlook-display-items-display-new-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/display-new-message.yaml", + "outlook-display-items-display-reply-forms": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/display-reply-forms.yaml", + "outlook-display-items-display-reply-with-attachments": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/display-reply-with-attachments.yaml", "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/work-with-client-signatures.yaml" } \ No newline at end of file From ea1f49d02ab2be215e3888ed1168fc1f828744c2 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 13 Jul 2020 13:51:09 -0700 Subject: [PATCH 291/660] [Outlook] (display) Map async snippets (#462) --- .../display-existing-appointment.yaml | 6 +- .../display-existing-message.yaml | 5 +- .../display-new-appointment.yaml | 3 +- .../99-preview-apis/display-new-message.yaml | 3 +- .../display-reply-with-attachments.yaml | 3 +- snippet-extractor-metadata/outlook.xlsx | Bin 19839 -> 20153 bytes snippet-extractor-output/snippets.yaml | 175 ++++++++++++++++++ 7 files changed, 187 insertions(+), 8 deletions(-) diff --git a/samples/outlook/99-preview-apis/display-existing-appointment.yaml b/samples/outlook/99-preview-apis/display-existing-appointment.yaml index b1880d63b..a09e2ae32 100644 --- a/samples/outlook/99-preview-apis/display-existing-appointment.yaml +++ b/samples/outlook/99-preview-apis/display-existing-appointment.yaml @@ -10,7 +10,6 @@ script: $("#itemId").val(Office.context.mailbox.item.itemId); $("#run").click(run); - $("#run-async").click(runAsync); function run() { @@ -18,10 +17,11 @@ script: Office.context.mailbox.displayAppointmentForm(itemId); } - // The async version will return error 9049 if the item is not found. - // The async version is only available in preview. function runAsync() { var itemId = $("#itemId").val(); + + // The async version will return error 9049 if the item is not found. + // The async version is only available in preview. Office.context.mailbox.displayAppointmentFormAsync(itemId, function(asyncResult) { console.log("Result: " + JSON.stringify(asyncResult)); }); diff --git a/samples/outlook/99-preview-apis/display-existing-message.yaml b/samples/outlook/99-preview-apis/display-existing-message.yaml index dc5d36b76..914e7a86d 100644 --- a/samples/outlook/99-preview-apis/display-existing-message.yaml +++ b/samples/outlook/99-preview-apis/display-existing-message.yaml @@ -17,10 +17,11 @@ script: Office.context.mailbox.displayMessageForm(itemId); } - // The async version will return error 9049 if the item is not found. - // The async version is only available in preview. function runAsync() { var itemId = $("#itemId").val(); + + // The async version will return error 9049 if the item is not found. + // The async version is only available in preview. Office.context.mailbox.displayAppointmentFormAsync(itemId, function (asyncResult) { console.log("Result: " + JSON.stringify(asyncResult)); }); diff --git a/samples/outlook/99-preview-apis/display-new-appointment.yaml b/samples/outlook/99-preview-apis/display-new-appointment.yaml index 9d7a2f685..16cd0a84c 100644 --- a/samples/outlook/99-preview-apis/display-new-appointment.yaml +++ b/samples/outlook/99-preview-apis/display-new-appointment.yaml @@ -31,7 +31,8 @@ script: var end = new Date(); end.setHours(start.getHours() + 1); - // The async version is only available in preview, and provides a callback when the new appointment form has been created. + // The async version is only available in preview, and provides + // a callback when the new appointment form has been created. Office.context.mailbox.displayNewAppointmentFormAsync( { requiredAttendees: ["bob@contoso.com"], diff --git a/samples/outlook/99-preview-apis/display-new-message.yaml b/samples/outlook/99-preview-apis/display-new-message.yaml index a13abca75..2ac06ca7e 100644 --- a/samples/outlook/99-preview-apis/display-new-message.yaml +++ b/samples/outlook/99-preview-apis/display-new-message.yaml @@ -26,8 +26,9 @@ script: }); } - // The async version is only available in preview, and provides a callback when the new message form has been created. function runAsync() { + // The async version is only available in preview, and + // provides a callback when the new message form has been created. Office.context.mailbox.displayNewMessageFormAsync( { toRecipients: Office.context.mailbox.item.to, // Copies the To line from current item diff --git a/samples/outlook/99-preview-apis/display-reply-with-attachments.yaml b/samples/outlook/99-preview-apis/display-reply-with-attachments.yaml index 58cae9380..7be9be7af 100644 --- a/samples/outlook/99-preview-apis/display-reply-with-attachments.yaml +++ b/samples/outlook/99-preview-apis/display-reply-with-attachments.yaml @@ -25,8 +25,9 @@ script: }); } - // The async version is only available in preview, and provides a callback when the new appointment form has been created. function runAsync() { + // The async version is only available in preview, 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
      ", diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 54b101561cb7ee6e9b83df9cce5e016c6aab40bc..725eb7056c0dc344bcdd0912ff517f12691c80be 100644 GIT binary patch delta 10496 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 g4}fBc`7SJHcH81b24}&Vk^;FVFMdyYBtI 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 bold text
      ."); +'Office.Mailbox#displayAppointmentFormAsync:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/display-existing-appointment.yaml + + var itemId = $("#itemId").val(); + + + // The async version will return error 9049 if the item is not found. + + // The async version is only available in preview. + + 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/master/samples/outlook/99-preview-apis/display-existing-message.yaml + + var itemId = $("#itemId").val(); + + + // The async version will return error 9049 if the item is not found. + + // The async version is only available in preview. + + Office.context.mailbox.displayAppointmentFormAsync(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/master/samples/outlook/99-preview-apis/display-new-appointment.yaml + + var start = new Date(); + + var end = new Date(); + + end.setHours(start.getHours() + 1); + + + // The async version is only available in preview, 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.Mailbox#displayNewMessageFormAsync:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/display-new-message.yaml + + // The async version is only available in preview, and + + // provides a callback when the new message form has been created. + + 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.AppointmentRead#displayReplyFormAsync:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/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/master/samples/outlook/99-preview-apis/display-reply-with-attachments.yaml + + // The async version is only available in preview, 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#displayReplyFormAsync:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/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/master/samples/outlook/99-preview-apis/display-reply-with-attachments.yaml + + // The async version is only available in preview, 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/master/samples/outlook/99-preview-apis/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#displayReplyAllFormAsync:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/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#getSharedPropertiesAsync:member(2)': - >- // Link to full sample: From c5f84e928848d8cce28cd2c57cebd76f02705291 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 17 Jul 2020 13:38:09 -0700 Subject: [PATCH 292/660] [Admin] Update npm and yarn settings (#465) * [Admin] Update npm and yarn settings * Tweak * tweak * Tweak travis config * Tweak readme --- .nvmrc | 2 +- .travis.yml | 5 +- README.md | 2 +- package-lock.json | 3593 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 3 +- yarn.lock | 2951 ++++++++++++++++++++++++++++++++++++- 6 files changed, 6538 insertions(+), 18 deletions(-) create mode 100644 package-lock.json diff --git a/.nvmrc b/.nvmrc index 6f4f7b895..11946a9fd 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -6.9.4 \ No newline at end of file +6.10.0 \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 9be1eebd3..b4c84ccd2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,7 +8,10 @@ git: depth: 3 node_js: -- 6.9.4 +- 6.10.0 + +before_install: +- npm i -g npm@6.10.0 install: - npm install diff --git a/README.md b/README.md index ae3d4d5ca..5e731800e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[![Build Status](https://travis-ci.com/OfficeDev/office-js-snippets.svg?token=paK2s5RGiCpVHK6bYoFs&branch=master)](https://travis-ci.org/OfficeDev/office-js-snippets) +[![Build Status](https://travis-ci.org/OfficeDev/office-js-snippets.svg?branch=master)](https://travis-ci.org/OfficeDev/office-js-snippets) # Office JS Snippets diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..45ff45f13 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3593 @@ +{ + "name": "office-js-snippets", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/chalk": { + "version": "0.4.31", + "dev": true + }, + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", + "dev": true + }, + "@types/fs-extra": { + "version": "3.0.1", + "dev": true, + "requires": { + "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "12.6.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.6.8.tgz", + "integrity": "sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg==", + "dev": true + } + } + }, + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "dev": true, + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/js-yaml": { + "version": "3.12.1", + "dev": true + }, + "@types/lodash": { + "version": "4.14.136", + "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.13.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.18.tgz", + "integrity": "sha512-sMHdXLccscaxI+Hlzz58yLQue3lQyXP+6aQniDRi5oju3n0123kcjhicVGF20WF7cHiwJ2vxMbXc4skOclosoA==", + "dev": true + }, + "@types/shelljs": { + "version": "0.8.5", + "dev": true, + "requires": { + "@types/glob": "*", + "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "12.6.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.6.8.tgz", + "integrity": "sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg==", + "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=" + }, + "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.1", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz", + "integrity": "sha1-qfuAbOgUXVQoUQznLyeLs2OmOL8=" + }, + "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=" + }, + "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", + "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=" + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" + }, + "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=" + }, + "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" + }, + "excel": { + "version": "1.0.1", + "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", + "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" + } + } + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "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.1", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.1.tgz", + "integrity": "sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw==" + }, + "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" + } + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "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.15" + }, + "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", + "requires": { + "charm": "1.0.1", + "cli-cursor": "^1.0.2", + "cli-spinners": "0.2.0", + "colors": "1.1.2" + } + }, + "npm": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/npm/-/npm-6.10.0.tgz", + "integrity": "sha512-pOMc81mT4fHXv/iMbw4T4GQVZzlzx/Vf5bta+JgMWVR+qqBeNI0mAbKrQ15vZf3eMJ+DaJj6+XgD7650JQs+rg==", + "requires": { + "JSONStream": "^1.3.5", + "abbrev": "~1.1.1", + "ansicolors": "~0.3.2", + "ansistyles": "~0.1.3", + "aproba": "^2.0.0", + "archy": "~1.0.0", + "bin-links": "^1.1.2", + "bluebird": "^3.5.5", + "byte-size": "^5.0.1", + "cacache": "^11.3.3", + "call-limit": "~1.1.0", + "chownr": "^1.1.1", + "ci-info": "^2.0.0", + "cli-columns": "^3.1.2", + "cli-table3": "^0.5.1", + "cmd-shim": "~2.0.2", + "columnify": "~1.5.4", + "config-chain": "^1.1.12", + "debuglog": "*", + "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.0.1", + "glob": "^7.1.3", + "graceful-fs": "^4.2.0", + "has-unicode": "~2.0.1", + "hosted-git-info": "^2.7.1", + "iferr": "^1.0.2", + "imurmurhash": "*", + "inflight": "~1.0.6", + "inherits": "~2.0.3", + "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": "^3.0.3", + "libnpm": "^2.0.1", + "libnpmaccess": "*", + "libnpmhook": "^5.0.2", + "libnpmorg": "*", + "libnpmsearch": "*", + "libnpmteam": "*", + "libnpx": "^10.2.0", + "lock-verify": "^2.1.0", + "lockfile": "^1.0.4", + "lodash._baseindexof": "*", + "lodash._baseuniq": "~4.6.0", + "lodash._bindcallback": "*", + "lodash._cacheindexof": "*", + "lodash._createcache": "*", + "lodash._getnative": "*", + "lodash.clonedeep": "~4.5.0", + "lodash.restparam": "*", + "lodash.union": "~4.6.0", + "lodash.uniq": "~4.5.0", + "lodash.without": "~4.4.0", + "lru-cache": "^4.1.5", + "meant": "~1.0.1", + "mississippi": "^3.0.0", + "mkdirp": "~0.5.1", + "move-concurrently": "^1.0.1", + "node-gyp": "^3.8.0", + "nopt": "~4.0.1", + "normalize-package-data": "^2.5.0", + "npm-audit-report": "^1.3.2", + "npm-cache-filename": "~1.0.2", + "npm-install-checks": "~3.0.0", + "npm-lifecycle": "^2.1.0", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.4.4", + "npm-pick-manifest": "^2.2.3", + "npm-profile": "*", + "npm-registry-fetch": "^3.9.0", + "npm-user-validate": "~1.0.0", + "npmlog": "~4.1.2", + "once": "~1.4.0", + "opener": "^1.5.1", + "osenv": "^0.1.5", + "pacote": "^9.5.1", + "path-is-inside": "~1.0.2", + "promise-inflight": "~1.0.1", + "qrcode-terminal": "^0.12.0", + "query-string": "^6.4.0", + "qw": "~1.0.1", + "read": "~1.0.7", + "read-cmd-shim": "~1.0.1", + "read-installed": "~4.0.3", + "read-package-json": "^2.0.13", + "read-package-tree": "^5.3.1", + "readable-stream": "^3.3.0", + "readdir-scoped-modules": "^1.1.0", + "request": "^2.88.0", + "retry": "^0.12.0", + "rimraf": "^2.6.3", + "safe-buffer": "^5.1.2", + "semver": "^5.6.0", + "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.0", + "tar": "^4.4.10", + "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.2", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "~3.0.0", + "which": "^1.3.1", + "worker-farm": "^1.6.0", + "write-file-atomic": "^2.4.3" + }, + "dependencies": { + "JSONStream": { + "version": "1.3.5", + "bundled": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "abbrev": { + "version": "1.1.1", + "bundled": true + }, + "agent-base": { + "version": "4.2.1", + "bundled": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "agentkeepalive": { + "version": "3.4.1", + "bundled": true, + "requires": { + "humanize-ms": "^1.2.1" + } + }, + "ajv": { + "version": "5.5.2", + "bundled": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "ansi-align": { + "version": "2.0.0", + "bundled": true, + "requires": { + "string-width": "^2.0.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "ansi-styles": { + "version": "3.2.1", + "bundled": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "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.4", + "bundled": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "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" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "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.8.0", + "bundled": true + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bin-links": { + "version": "1.1.2", + "bundled": true, + "requires": { + "bluebird": "^3.5.0", + "cmd-shim": "^2.0.2", + "gentle-fs": "^2.0.0", + "graceful-fs": "^4.1.11", + "write-file-atomic": "^2.3.0" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "requires": { + "inherits": "~2.0.0" + } + }, + "bluebird": { + "version": "3.5.5", + "bundled": true + }, + "boxen": { + "version": "1.3.0", + "bundled": true, + "requires": { + "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": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-from": { + "version": "1.0.0", + "bundled": true + }, + "builtins": { + "version": "1.0.3", + "bundled": true + }, + "byline": { + "version": "5.0.0", + "bundled": true + }, + "byte-size": { + "version": "5.0.1", + "bundled": true + }, + "cacache": { + "version": "11.3.3", + "bundled": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + }, + "dependencies": { + "glob": { + "version": "7.1.4", + "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" + } + }, + "lru-cache": { + "version": "5.1.1", + "bundled": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.0.3", + "bundled": true + } + } + }, + "call-limit": { + "version": "1.1.0", + "bundled": true + }, + "camelcase": { + "version": "4.1.0", + "bundled": true + }, + "capture-stack-trace": { + "version": "1.0.0", + "bundled": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true + }, + "chalk": { + "version": "2.4.1", + "bundled": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true + }, + "ci-info": { + "version": "2.0.0", + "bundled": true + }, + "cidr-regex": { + "version": "2.0.10", + "bundled": true, + "requires": { + "ip-regex": "^2.1.0" + } + }, + "cli-boxes": { + "version": "1.0.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.5.1", + "bundled": true, + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + } + }, + "cliui": { + "version": "4.1.0", + "bundled": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.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" + } + } + } + }, + "clone": { + "version": "1.0.4", + "bundled": true + }, + "cmd-shim": { + "version": "2.0.2", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "mkdirp": "~0.5.0" + } + }, + "co": { + "version": "4.6.0", + "bundled": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "color-convert": { + "version": "1.9.1", + "bundled": true, + "requires": { + "color-name": "^1.1.1" + } + }, + "color-name": { + "version": "1.1.3", + "bundled": true + }, + "colors": { + "version": "1.3.3", + "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.6", + "bundled": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "concat-stream": { + "version": "1.6.2", + "bundled": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "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" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "config-chain": { + "version": "1.1.12", + "bundled": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "configstore": { + "version": "3.1.2", + "bundled": true, + "requires": { + "dot-prop": "^4.1.0", + "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": { + "version": "1.1.0", + "bundled": true + }, + "copy-concurrently": { + "version": "1.0.5", + "bundled": true, + "requires": { + "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" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true + }, + "iferr": { + "version": "0.1.5", + "bundled": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "create-error-class": { + "version": "3.0.2", + "bundled": true, + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "bundled": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "crypto-random-string": { + "version": "1.0.0", + "bundled": true + }, + "cyclist": { + "version": "0.2.2", + "bundled": true + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "3.1.0", + "bundled": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "bundled": true + } + } + }, + "debuglog": { + "version": "1.0.1", + "bundled": true + }, + "decamelize": { + "version": "1.2.0", + "bundled": true + }, + "decode-uri-component": { + "version": "0.2.0", + "bundled": true + }, + "deep-extend": { + "version": "0.5.1", + "bundled": true + }, + "defaults": { + "version": "1.0.3", + "bundled": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-properties": { + "version": "1.1.3", + "bundled": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true + }, + "detect-indent": { + "version": "5.0.0", + "bundled": true + }, + "detect-newline": { + "version": "2.1.0", + "bundled": true + }, + "dezalgo": { + "version": "1.0.3", + "bundled": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "dot-prop": { + "version": "4.2.0", + "bundled": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "dotenv": { + "version": "5.0.1", + "bundled": true + }, + "duplexer3": { + "version": "0.1.4", + "bundled": true + }, + "duplexify": { + "version": "3.6.0", + "bundled": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "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" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "editor": { + "version": "1.0.0", + "bundled": true + }, + "encoding": { + "version": "0.1.12", + "bundled": true, + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "end-of-stream": { + "version": "1.4.1", + "bundled": true, + "requires": { + "once": "^1.4.0" + } + }, + "err-code": { + "version": "1.1.2", + "bundled": true + }, + "errno": { + "version": "0.1.7", + "bundled": true, + "requires": { + "prr": "~1.0.1" + } + }, + "es-abstract": { + "version": "1.12.0", + "bundled": true, + "requires": { + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "bundled": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-promise": { + "version": "4.2.6", + "bundled": true + }, + "es6-promisify": { + "version": "5.0.0", + "bundled": true, + "requires": { + "es6-promise": "^4.0.3" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "bundled": true + }, + "execa": { + "version": "0.7.0", + "bundled": true, + "requires": { + "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" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "bundled": true + } + } + }, + "extend": { + "version": "3.0.2", + "bundled": true + }, + "extsprintf": { + "version": "1.3.0", + "bundled": true + }, + "fast-deep-equal": { + "version": "1.1.0", + "bundled": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "bundled": true + }, + "figgy-pudding": { + "version": "3.5.1", + "bundled": true + }, + "find-npm-prefix": { + "version": "1.0.2", + "bundled": true + }, + "find-up": { + "version": "2.1.0", + "bundled": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flush-write-stream": { + "version": "1.0.3", + "bundled": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "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" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true + }, + "form-data": { + "version": "2.3.2", + "bundled": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + } + }, + "from2": { + "version": "2.3.0", + "bundled": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "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" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "fs-minipass": { + "version": "1.2.6", + "bundled": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs-vacuum": { + "version": "1.2.10", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "path-is-inside": "^1.0.1", + "rimraf": "^2.5.2" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + }, + "dependencies": { + "iferr": { + "version": "0.1.5", + "bundled": true + }, + "readable-stream": { + "version": "2.3.6", + "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" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "fstream": { + "version": "1.0.12", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "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 + }, + "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" + } + } + } + }, + "genfun": { + "version": "5.0.0", + "bundled": true + }, + "gentle-fs": { + "version": "2.0.1", + "bundled": true, + "requires": { + "aproba": "^1.1.2", + "fs-vacuum": "^1.2.10", + "graceful-fs": "^4.1.11", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "path-is-inside": "^1.0.2", + "read-cmd-shim": "^1.0.1", + "slide": "^1.1.6" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true + }, + "iferr": { + "version": "0.1.5", + "bundled": true + } + } + }, + "get-caller-file": { + "version": "1.0.2", + "bundled": true + }, + "get-stream": { + "version": "4.1.0", + "bundled": true, + "requires": { + "pump": "^3.0.0" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.3", + "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" + } + }, + "global-dirs": { + "version": "0.1.1", + "bundled": true, + "requires": { + "ini": "^1.3.4" + } + }, + "got": { + "version": "6.7.1", + "bundled": true, + "requires": { + "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" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "bundled": true + } + } + }, + "graceful-fs": { + "version": "4.2.0", + "bundled": true + }, + "har-schema": { + "version": "2.0.0", + "bundled": true + }, + "har-validator": { + "version": "5.1.0", + "bundled": true, + "requires": { + "ajv": "^5.3.0", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "bundled": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "bundled": true + }, + "has-symbols": { + "version": "1.0.0", + "bundled": true + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true + }, + "hosted-git-info": { + "version": "2.7.1", + "bundled": true + }, + "http-cache-semantics": { + "version": "3.8.1", + "bundled": true + }, + "http-proxy-agent": { + "version": "2.1.0", + "bundled": true, + "requires": { + "agent-base": "4", + "debug": "3.1.0" + } + }, + "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": "2.2.1", + "bundled": true, + "requires": { + "agent-base": "^4.1.0", + "debug": "^3.1.0" + } + }, + "humanize-ms": { + "version": "1.2.1", + "bundled": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.23", + "bundled": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "iferr": { + "version": "1.0.2", + "bundled": true + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "import-lazy": { + "version": "2.1.0", + "bundled": true + }, + "imurmurhash": { + "version": "0.1.4", + "bundled": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "ini": { + "version": "1.3.5", + "bundled": true + }, + "init-package-json": { + "version": "1.10.3", + "bundled": true, + "requires": { + "glob": "^7.1.1", + "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.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", + "validate-npm-package-name": "^3.0.0" + } + }, + "invert-kv": { + "version": "1.0.0", + "bundled": true + }, + "ip": { + "version": "1.1.5", + "bundled": true + }, + "ip-regex": { + "version": "2.1.0", + "bundled": true + }, + "is-callable": { + "version": "1.1.4", + "bundled": true + }, + "is-ci": { + "version": "1.1.0", + "bundled": true, + "requires": { + "ci-info": "^1.0.0" + }, + "dependencies": { + "ci-info": { + "version": "1.6.0", + "bundled": true + } + } + }, + "is-cidr": { + "version": "3.0.0", + "bundled": true, + "requires": { + "cidr-regex": "^2.0.10" + } + }, + "is-date-object": { + "version": "1.0.1", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-installed-globally": { + "version": "0.1.0", + "bundled": true, + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-npm": { + "version": "1.0.0", + "bundled": true + }, + "is-obj": { + "version": "1.0.1", + "bundled": true + }, + "is-path-inside": { + "version": "1.0.1", + "bundled": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-redirect": { + "version": "1.0.0", + "bundled": true + }, + "is-regex": { + "version": "1.0.4", + "bundled": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-retry-allowed": { + "version": "1.1.0", + "bundled": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true + }, + "is-symbol": { + "version": "1.0.2", + "bundled": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "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, + "optional": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "bundled": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true + }, + "json-schema-traverse": { + "version": "0.3.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" + } + }, + "latest-version": { + "version": "3.1.0", + "bundled": true, + "requires": { + "package-json": "^4.0.0" + } + }, + "lazy-property": { + "version": "1.0.0", + "bundled": true + }, + "lcid": { + "version": "1.0.0", + "bundled": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "libcipm": { + "version": "3.0.3", + "bundled": true, + "requires": { + "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.0.2", + "mkdirp": "^0.5.1", + "npm-lifecycle": "^2.0.3", + "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": { + "version": "2.0.1", + "bundled": true, + "requires": { + "bin-links": "^1.1.2", + "bluebird": "^3.5.3", + "find-npm-prefix": "^1.0.2", + "libnpmaccess": "^3.0.1", + "libnpmconfig": "^1.2.1", + "libnpmhook": "^5.0.2", + "libnpmorg": "^1.0.0", + "libnpmpublish": "^1.1.0", + "libnpmsearch": "^2.0.0", + "libnpmteam": "^1.0.1", + "lock-verify": "^2.0.2", + "npm-lifecycle": "^2.1.0", + "npm-logical-tree": "^1.2.1", + "npm-package-arg": "^6.1.0", + "npm-profile": "^4.0.1", + "npm-registry-fetch": "^3.8.0", + "npmlog": "^4.1.2", + "pacote": "^9.2.3", + "read-package-json": "^2.0.13", + "stringify-package": "^1.0.0" + } + }, + "libnpmaccess": { + "version": "3.0.1", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "get-stream": "^4.0.0", + "npm-package-arg": "^6.1.0", + "npm-registry-fetch": "^3.8.0" + }, + "dependencies": { + "aproba": { + "version": "2.0.0", + "bundled": true + } + } + }, + "libnpmconfig": { + "version": "1.2.1", + "bundled": true, + "requires": { + "figgy-pudding": "^3.5.1", + "find-up": "^3.0.0", + "ini": "^1.3.5" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "bundled": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "bundled": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.1.0", + "bundled": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "bundled": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "bundled": true + } + } + }, + "libnpmhook": { + "version": "5.0.2", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "figgy-pudding": "^3.4.1", + "get-stream": "^4.0.0", + "npm-registry-fetch": "^3.8.0" + } + }, + "libnpmorg": { + "version": "1.0.0", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "figgy-pudding": "^3.4.1", + "get-stream": "^4.0.0", + "npm-registry-fetch": "^3.8.0" + }, + "dependencies": { + "aproba": { + "version": "2.0.0", + "bundled": true + } + } + }, + "libnpmpublish": { + "version": "1.1.1", + "bundled": true, + "requires": { + "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": "^3.8.0", + "semver": "^5.5.1", + "ssri": "^6.0.1" + } + }, + "libnpmsearch": { + "version": "2.0.0", + "bundled": true, + "requires": { + "figgy-pudding": "^3.5.1", + "get-stream": "^4.0.0", + "npm-registry-fetch": "^3.8.0" + } + }, + "libnpmteam": { + "version": "1.0.1", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "figgy-pudding": "^3.4.1", + "get-stream": "^4.0.0", + "npm-registry-fetch": "^3.8.0" + }, + "dependencies": { + "aproba": { + "version": "2.0.0", + "bundled": true + } + } + }, + "libnpx": { + "version": "10.2.0", + "bundled": true, + "requires": { + "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": "^11.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "bundled": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lock-verify": { + "version": "2.1.0", + "bundled": true, + "requires": { + "npm-package-arg": "^6.1.0", + "semver": "^5.4.1" + } + }, + "lockfile": { + "version": "1.0.4", + "bundled": true, + "requires": { + "signal-exit": "^3.0.2" + } + }, + "lodash._baseindexof": { + "version": "3.1.0", + "bundled": true + }, + "lodash._baseuniq": { + "version": "4.6.0", + "bundled": true, + "requires": { + "lodash._createset": "~4.0.0", + "lodash._root": "~3.0.0" + } + }, + "lodash._bindcallback": { + "version": "3.0.1", + "bundled": true + }, + "lodash._cacheindexof": { + "version": "3.0.2", + "bundled": true + }, + "lodash._createcache": { + "version": "3.1.2", + "bundled": true, + "requires": { + "lodash._getnative": "^3.0.0" + } + }, + "lodash._createset": { + "version": "4.0.3", + "bundled": true + }, + "lodash._getnative": { + "version": "3.9.1", + "bundled": true + }, + "lodash._root": { + "version": "3.0.1", + "bundled": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "bundled": true + }, + "lodash.restparam": { + "version": "3.6.1", + "bundled": true + }, + "lodash.union": { + "version": "4.6.0", + "bundled": true + }, + "lodash.uniq": { + "version": "4.5.0", + "bundled": true + }, + "lodash.without": { + "version": "4.4.0", + "bundled": true + }, + "lowercase-keys": { + "version": "1.0.1", + "bundled": true + }, + "lru-cache": { + "version": "4.1.5", + "bundled": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "make-dir": { + "version": "1.3.0", + "bundled": true, + "requires": { + "pify": "^3.0.0" + } + }, + "make-fetch-happen": { + "version": "4.0.1", + "bundled": true, + "requires": { + "agentkeepalive": "^3.4.1", + "cacache": "^11.0.1", + "http-cache-semantics": "^3.8.1", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.1", + "lru-cache": "^4.1.2", + "mississippi": "^3.0.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^4.0.0", + "ssri": "^6.0.0" + } + }, + "meant": { + "version": "1.0.1", + "bundled": true + }, + "mem": { + "version": "1.1.0", + "bundled": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "mime-db": { + "version": "1.35.0", + "bundled": true + }, + "mime-types": { + "version": "2.1.19", + "bundled": true, + "requires": { + "mime-db": "~1.35.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "bundled": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true + }, + "minipass": { + "version": "2.3.3", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + }, + "dependencies": { + "yallist": { + "version": "3.0.2", + "bundled": true + } + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mississippi": { + "version": "3.0.0", + "bundled": true, + "requires": { + "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": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + } + }, + "move-concurrently": { + "version": "1.0.1", + "bundled": true, + "requires": { + "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" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true + } + } + }, + "ms": { + "version": "2.1.1", + "bundled": true + }, + "mute-stream": { + "version": "0.0.7", + "bundled": true + }, + "node-fetch-npm": { + "version": "2.0.2", + "bundled": true, + "requires": { + "encoding": "^0.1.11", + "json-parse-better-errors": "^1.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node-gyp": { + "version": "3.8.0", + "bundled": true, + "requires": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "dependencies": { + "nopt": { + "version": "3.0.6", + "bundled": true, + "requires": { + "abbrev": "1" + } + }, + "semver": { + "version": "5.3.0", + "bundled": true + }, + "tar": { + "version": "2.2.2", + "bundled": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.12", + "inherits": "2" + } + } + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "bundled": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "resolve": { + "version": "1.10.0", + "bundled": true, + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "npm-audit-report": { + "version": "1.3.2", + "bundled": true, + "requires": { + "cli-table3": "^0.5.0", + "console-control-strings": "^1.1.0" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true + }, + "npm-cache-filename": { + "version": "1.0.2", + "bundled": true + }, + "npm-install-checks": { + "version": "3.0.0", + "bundled": true, + "requires": { + "semver": "^2.3.0 || 3.x || 4 || 5" + } + }, + "npm-lifecycle": { + "version": "2.1.0", + "bundled": true, + "requires": { + "byline": "^5.0.0", + "graceful-fs": "^4.1.11", + "node-gyp": "^3.8.0", + "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": { + "version": "1.2.1", + "bundled": true + }, + "npm-package-arg": { + "version": "6.1.0", + "bundled": true, + "requires": { + "hosted-git-info": "^2.6.0", + "osenv": "^0.1.5", + "semver": "^5.5.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-packlist": { + "version": "1.4.4", + "bundled": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "2.2.3", + "bundled": true, + "requires": { + "figgy-pudding": "^3.5.1", + "npm-package-arg": "^6.0.0", + "semver": "^5.4.1" + } + }, + "npm-profile": { + "version": "4.0.1", + "bundled": true, + "requires": { + "aproba": "^1.1.2 || 2", + "figgy-pudding": "^3.4.1", + "npm-registry-fetch": "^3.8.0" + } + }, + "npm-registry-fetch": { + "version": "3.9.0", + "bundled": true, + "requires": { + "JSONStream": "^1.3.4", + "bluebird": "^3.5.1", + "figgy-pudding": "^3.4.1", + "lru-cache": "^4.1.3", + "make-fetch-happen": "^4.0.1", + "npm-package-arg": "^6.1.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "bundled": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "npm-user-validate": { + "version": "1.0.0", + "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 + }, + "object-keys": { + "version": "1.0.12", + "bundled": true + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "bundled": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1" + } + }, + "opener": { + "version": "1.5.1", + "bundled": true + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true + }, + "os-locale": { + "version": "2.1.0", + "bundled": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "bundled": true + }, + "p-limit": { + "version": "1.2.0", + "bundled": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "bundled": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "bundled": true + }, + "package-json": { + "version": "4.0.1", + "bundled": true, + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + } + }, + "pacote": { + "version": "9.5.1", + "bundled": true, + "requires": { + "bluebird": "^3.5.3", + "cacache": "^11.3.2", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.1.0", + "glob": "^7.1.3", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^4.0.1", + "minimatch": "^3.0.4", + "minipass": "^2.3.5", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "normalize-package-data": "^2.4.0", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.1.12", + "npm-pick-manifest": "^2.2.3", + "npm-registry-fetch": "^3.8.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.8", + "unique-filename": "^1.1.1", + "which": "^1.3.1" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "bundled": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "yallist": { + "version": "3.0.3", + "bundled": true + } + } + }, + "parallel-transform": { + "version": "1.1.0", + "bundled": true, + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "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" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "path-exists": { + "version": "3.0.0", + "bundled": true + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "path-is-inside": { + "version": "1.0.2", + "bundled": true + }, + "path-key": { + "version": "2.0.1", + "bundled": true + }, + "path-parse": { + "version": "1.0.6", + "bundled": true + }, + "performance-now": { + "version": "2.1.0", + "bundled": true + }, + "pify": { + "version": "3.0.0", + "bundled": true + }, + "prepend-http": { + "version": "1.0.4", + "bundled": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true + }, + "promise-inflight": { + "version": "1.0.1", + "bundled": true + }, + "promise-retry": { + "version": "1.1.1", + "bundled": true, + "requires": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + }, + "dependencies": { + "retry": { + "version": "0.10.1", + "bundled": true + } + } + }, + "promzard": { + "version": "0.3.0", + "bundled": true, + "requires": { + "read": "1" + } + }, + "proto-list": { + "version": "1.2.4", + "bundled": true + }, + "protoduck": { + "version": "5.0.1", + "bundled": true, + "requires": { + "genfun": "^5.0.0" + } + }, + "prr": { + "version": "1.0.1", + "bundled": true + }, + "pseudomap": { + "version": "1.0.2", + "bundled": true + }, + "psl": { + "version": "1.1.29", + "bundled": true + }, + "pump": { + "version": "3.0.0", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "bundled": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "1.4.1", + "bundled": true + }, + "qrcode-terminal": { + "version": "0.12.0", + "bundled": true + }, + "qs": { + "version": "6.5.2", + "bundled": true + }, + "query-string": { + "version": "6.4.0", + "bundled": true, + "requires": { + "decode-uri-component": "^0.2.0", + "strict-uri-encode": "^2.0.0" + } + }, + "qw": { + "version": "1.0.1", + "bundled": true + }, + "rc": { + "version": "1.2.7", + "bundled": true, + "requires": { + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true + } + } + }, + "read": { + "version": "1.0.7", + "bundled": true, + "requires": { + "mute-stream": "~0.0.4" + } + }, + "read-cmd-shim": { + "version": "1.0.1", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2" + } + }, + "read-installed": { + "version": "4.0.3", + "bundled": true, + "requires": { + "debuglog": "^1.0.1", + "graceful-fs": "^4.1.2", + "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" + } + }, + "read-package-json": { + "version": "2.0.13", + "bundled": true, + "requires": { + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "json-parse-better-errors": "^1.0.1", + "normalize-package-data": "^2.0.0", + "slash": "^1.0.0" + } + }, + "read-package-tree": { + "version": "5.3.1", + "bundled": true, + "requires": { + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "util-promisify": "^2.1.0" + } + }, + "readable-stream": { + "version": "3.3.0", + "bundled": true, + "requires": { + "inherits": "^2.0.3", + "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" + } + }, + "registry-auth-token": { + "version": "3.3.2", + "bundled": true, + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "bundled": true, + "requires": { + "rc": "^1.0.1" + } + }, + "request": { + "version": "2.88.0", + "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.0", + "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.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "require-directory": { + "version": "2.1.1", + "bundled": true + }, + "require-main-filename": { + "version": "1.0.1", + "bundled": true + }, + "resolve-from": { + "version": "4.0.0", + "bundled": true + }, + "retry": { + "version": "0.12.0", + "bundled": true + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-queue": { + "version": "1.0.3", + "bundled": true, + "requires": { + "aproba": "^1.1.1" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true + } + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true + }, + "semver": { + "version": "5.6.0", + "bundled": true + }, + "semver-diff": { + "version": "2.1.0", + "bundled": true, + "requires": { + "semver": "^5.0.3" + } + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true + }, + "sha": { + "version": "3.0.0", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "bundled": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "bundled": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true + }, + "slash": { + "version": "1.0.0", + "bundled": true + }, + "slide": { + "version": "1.1.6", + "bundled": true + }, + "smart-buffer": { + "version": "4.0.1", + "bundled": true + }, + "socks": { + "version": "2.2.0", + "bundled": true, + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.0.1" + } + }, + "socks-proxy-agent": { + "version": "4.0.1", + "bundled": true, + "requires": { + "agent-base": "~4.2.0", + "socks": "~2.2.0" + } + }, + "sorted-object": { + "version": "2.0.1", + "bundled": true + }, + "sorted-union-stream": { + "version": "2.1.3", + "bundled": true, + "requires": { + "from2": "^1.3.0", + "stream-iterate": "^1.1.0" + }, + "dependencies": { + "from2": { + "version": "1.3.0", + "bundled": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "~1.1.10" + } + }, + "isarray": { + "version": "0.0.1", + "bundled": true + }, + "readable-stream": { + "version": "1.1.14", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "bundled": true + } + } + }, + "spdx-correct": { + "version": "3.0.0", + "bundled": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "bundled": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "bundled": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.3", + "bundled": true + }, + "sshpk": { + "version": "1.14.2", + "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": "6.0.1", + "bundled": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "stream-each": { + "version": "1.2.2", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-iterate": { + "version": "1.2.0", + "bundled": true, + "requires": { + "readable-stream": "^2.1.5", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "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" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "stream-shift": { + "version": "1.0.0", + "bundled": true + }, + "strict-uri-encode": { + "version": "2.0.0", + "bundled": true + }, + "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 + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string_decoder": { + "version": "1.2.0", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "stringify-package": { + "version": "1.0.0", + "bundled": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "bundled": true + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true + }, + "supports-color": { + "version": "5.4.0", + "bundled": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tar": { + "version": "4.4.10", + "bundled": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.5", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + }, + "dependencies": { + "minipass": { + "version": "2.3.5", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "yallist": { + "version": "3.0.3", + "bundled": true + } + } + }, + "term-size": { + "version": "1.2.0", + "bundled": true, + "requires": { + "execa": "^0.7.0" + } + }, + "text-table": { + "version": "0.2.0", + "bundled": true + }, + "through": { + "version": "2.3.8", + "bundled": true + }, + "through2": { + "version": "2.0.3", + "bundled": true, + "requires": { + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "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" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "timed-out": { + "version": "4.0.1", + "bundled": true + }, + "tiny-relative-date": { + "version": "1.3.0", + "bundled": true + }, + "tough-cookie": { + "version": "2.4.3", + "bundled": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "optional": true + }, + "typedarray": { + "version": "0.0.6", + "bundled": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true + }, + "umask": { + "version": "1.1.0", + "bundled": true + }, + "unique-filename": { + "version": "1.1.1", + "bundled": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.0", + "bundled": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unique-string": { + "version": "1.0.0", + "bundled": true, + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "bundled": true + }, + "unzip-response": { + "version": "2.0.1", + "bundled": true + }, + "update-notifier": { + "version": "2.5.0", + "bundled": true, + "requires": { + "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" + } + }, + "url-parse-lax": { + "version": "1.0.0", + "bundled": true, + "requires": { + "prepend-http": "^1.0.1" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "util-extend": { + "version": "1.0.3", + "bundled": true + }, + "util-promisify": { + "version": "2.1.0", + "bundled": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "uuid": { + "version": "3.3.2", + "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" + } + }, + "wcwidth": { + "version": "1.0.1", + "bundled": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "which": { + "version": "1.3.1", + "bundled": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "bundled": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "requires": { + "string-width": "^1.0.2" + }, + "dependencies": { + "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" + } + } + } + }, + "widest-line": { + "version": "2.0.0", + "bundled": true, + "requires": { + "string-width": "^2.1.1" + } + }, + "worker-farm": { + "version": "1.6.0", + "bundled": true, + "requires": { + "errno": "~0.1.7" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "bundled": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "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" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + }, + "write-file-atomic": { + "version": "2.4.3", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "bundled": true + }, + "xtend": { + "version": "4.0.1", + "bundled": true + }, + "y18n": { + "version": "4.0.0", + "bundled": true + }, + "yallist": { + "version": "2.1.2", + "bundled": true + }, + "yargs": { + "version": "11.0.0", + "bundled": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^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": "^9.0.2" + }, + "dependencies": { + "y18n": { + "version": "3.2.1", + "bundled": true + } + } + }, + "yargs-parser": { + "version": "9.0.2", + "bundled": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "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.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "requires": { + "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.0", + "requires": { + "glob": "^7.1.3" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "shelljs": { + "version": "0.8.3", + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "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=" + }, + "typescript": { + "version": "3.5.3", + "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.27", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", + "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=" + }, + "xpath": { + "version": "0.0.27", + "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.27.tgz", + "integrity": "sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ==" + } + } +} diff --git a/package.json b/package.json index a650b73ad..05a24dd96 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "A collection of samples using the Office JavaScript API", "main": "config/compile.js", "engines": { - "node": ">=6.9.4" + "node": ">=6.10.0" }, "scripts": { "start": "npm run tsc && npm run build && npm run lint", @@ -31,6 +31,7 @@ "js-yaml": "^3.13.1", "lodash": "^4.17.15", "node-status": "^1.0.0", + "npm": "^6.10.0", "rimraf": "^3.0.0", "shelljs": "^0.8.3" }, diff --git a/yarn.lock b/yarn.lock index 82465938a..753c275df 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23,6 +23,15 @@ 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== + dependencies: + signal-exit "^3.0.2" + update-notifier "^2.2.0" + yargs "^8.0.2" + "@types/chalk@0.4.31": version "0.4.31" resolved "https://registry.yarnpkg.com/@types/chalk/-/chalk-0.4.31.tgz#a31d74241a6b1edbb973cf36d97a2896834a51f9" @@ -82,11 +91,67 @@ "@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== + dependencies: + es6-promisify "^5.0.0" + +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== + dependencies: + es6-promisify "^5.0.0" + +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== + dependencies: + humanize-ms "^1.2.1" + +ajv@^6.5.5: + version "6.12.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" + integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== + 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" 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-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -99,6 +164,39 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +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, aproba@^1.1.1, aproba@^1.1.2: + 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: + 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" @@ -106,16 +204,67 @@ 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.10.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" + integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== + 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" + 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@^1.1.2, bin-links@^1.1.7: + 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== + dependencies: + bluebird "^3.5.3" + cmd-shim "^3.0.0" + gentle-fs "^2.3.0" + graceful-fs "^4.1.15" + npm-normalize-package-bin "^1.0.0" + write-file-atomic "^2.3.0" + binary@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" @@ -124,11 +273,29 @@ 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" @@ -137,6 +304,11 @@ 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.1" resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz#a9fb806ce8145d5428510ce72f278bb363a638bf" @@ -157,6 +329,62 @@ 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= + +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== + +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== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + 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" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + 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= + +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" + 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" @@ -175,7 +403,7 @@ chalk@1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.3.0: +chalk@^2.0.0, chalk@^2.0.1, 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== @@ -191,6 +419,41 @@ 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: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +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== + dependencies: + ip-regex "^2.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= + +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" @@ -203,6 +466,52 @@ 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== + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" + 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@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.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== + dependencies: + graceful-fs "^4.1.2" + mkdirp "~0.5.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" @@ -220,6 +529,26 @@ colors@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" @@ -230,16 +559,195 @@ concat-map@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: +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.2" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" + integrity sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw== + dependencies: + dot-prop "^4.1.0" + 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: + 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" + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + 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" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + 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== + dependencies: + ms "^2.1.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= + +decamelize@^1.1.1: + 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" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + +define-properties@^1.1.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" + 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= + +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= + +dezalgo@^1.0.0, dezalgo@~1.0.3: + 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== +dot-prop@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== + 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== + duplexer2@~0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" @@ -247,6 +755,110 @@ 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" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + 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= + +encoding@^0.1.11: + 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" + 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= + +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-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" + 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" @@ -271,11 +883,124 @@ 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" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.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" 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== + +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, find-up@^2.1.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" + 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" + +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" @@ -285,6 +1010,32 @@ 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= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -300,7 +1051,72 @@ fstream@~1.0.10: mkdirp ">=0.5 0" rimraf "2" -glob@^7.0.0, glob@^7.1.1, glob@^7.1.3: +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== + +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" + +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: + 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-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" + 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== @@ -312,11 +1128,53 @@ glob@^7.0.0, glob@^7.1.1, glob@^7.1.3: 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.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: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== +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.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + dependencies: + ajv "^6.5.5" + 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" @@ -329,7 +1187,105 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= -inflight@^1.0.4: +has-symbols@^1.0.0, 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-unicode@^2.0.0, has-unicode@~2.0.1: + 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" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + 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== + +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-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== + dependencies: + agent-base "4" + debug "3.1.0" + +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@^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== + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + +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" + +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: + 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: + 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: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= @@ -337,21 +1293,175 @@ 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.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== -interpret@^1.0.0: - version "1.2.0" +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== + +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== + dependencies: + glob "^7.1.1" + npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.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" + validate-npm-package-name "^3.0.0" + +interpret@^1.0.0: + version "1.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== +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= + +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + +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@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.0" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" + integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== + +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== + dependencies: + ci-info "^1.5.0" + +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== + 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== + +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-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-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: + 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" + +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: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz#ece38e389e490df0dc21caea2bd596f987f767ff" + integrity sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw== + 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: + 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" 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" @@ -365,6 +1475,31 @@ 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-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, 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-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-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" @@ -372,16 +1507,365 @@ jsonfile@^3.0.0: optionalDependencies: graceful-fs "^4.1.6" +jsonparse@^1.2.0: + 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" + +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" + +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + +libcipm@^4.0.7: + 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" + +libnpmaccess@^3.0.2: + 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" + +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" + +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== + dependencies: + aproba "^2.0.0" + figgy-pudding "^3.4.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.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== + dependencies: + aproba "^2.0.0" + figgy-pudding "^3.4.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.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== + 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" + +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== + dependencies: + aproba "^2.0.0" + figgy-pudding "^3.4.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" + +libnpx@^10.2.2: + version "10.2.3" + resolved "https://registry.yarnpkg.com/libnpx/-/libnpx-10.2.3.tgz#d5e01f12d383ffca9a947807ca6a8f587d38fe2c" + integrity sha512-bCvdARu55fLQBhMfcYGF0GznF1kB2sqxq/9zKZ3652M8DDFWpVpCnpgzjzn0yWMDMez5ZGMBiX24yR11uEYZVQ== + 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 "^11.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: + 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= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +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== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +lock-verify@^2.0.2, lock-verify@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/lock-verify/-/lock-verify-2.2.0.tgz#12432feb68bb647071c78c44bde16029a0f7d935" + integrity sha512-BhM1Vqsu7x0s+EalTifNjdDPks+ZjdAhComvnA6VcCIlDOI5ouELXqAe1BYuEIP4zGN0W08xVm6byJV1LnCiJg== + dependencies: + "@iarna/cli" "^1.2.0" + npm-package-arg "^6.1.0" + semver "^5.4.1" + +lockfile@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609" + integrity sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA== + dependencies: + signal-exit "^3.0.2" + +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= + 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= + +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= + lodash@^4.17.15: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +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" + promise-retry "^1.1.1" + socks-proxy-agent "^4.0.0" + ssri "^6.0.0" + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +meant@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.1.tgz#66044fea2f23230ec806fb515efea29c44d2115d" + integrity sha512-UakVLFjKkbbUwNWJ2frVLnnAtbb7D7DsloxRd3s/gDpI8rdv8W5Hp3NaDb+POBI1fQdeussER6NB8vpcRURvlg== + +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" + +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.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-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== + 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== + +mimic-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -389,11 +1873,42 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.5: +minimist@^1.2.0, 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== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +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.1: version "0.5.3" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.3.tgz#5a514b7179259287952881e94410ec5465659f8c" @@ -401,6 +1916,71 @@ minimist@^1.2.5: dependencies: minimist "^1.2.5" +mkdirp@^0.5.0, 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== + dependencies: + minimist "^1.2.5" + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + 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" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.0.0, ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +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== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +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== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.2" + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.1.2" + request "^2.88.0" + rimraf "^2.6.3" + semver "^5.7.1" + tar "^4.4.12" + which "^1.3.1" + node-status@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-status/-/node-status-1.0.0.tgz#7906a7c47a6587d03496bf74ec634abaa03f8e80" @@ -411,7 +1991,312 @@ node-status@^1.0.0: cli-spinners "0.2.0" colors "1.1.2" -once@^1.3.0: +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== + 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== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +npm-audit-report@^1.3.2: + 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== + dependencies: + cli-table3 "^0.5.0" + console-control-strings "^1.1.0" + +npm-bundled@^1.0.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== + dependencies: + semver "^2.3.0 || 3.x || 4 || 5" + +npm-lifecycle@^3.0.0, npm-lifecycle@^3.1.4: + 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== + +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== + dependencies: + hosted-git-info "^2.7.1" + osenv "^0.1.5" + semver "^5.6.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== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.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.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-4.0.5.tgz#cb87cf7f25bfb048d6c3ee19d115bebf93ea5bfa" + integrity sha512-yQ0/U4fYpCCqmueB2g8sc+89ckQ3eXpmU4+Yi2j5o/r0WkKvE2+Y0tK3DEILAtn2UaQTkjTHxIXe2/CSdit+/Q== + 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= + dependencies: + 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= + +npm@^6.10.0: + version "6.14.6" + resolved "https://registry.yarnpkg.com/npm/-/npm-6.14.6.tgz#1a81ce1fac2bf5457dbf6342ceed503627ff228f" + integrity sha512-axnz6iHFK6WPE0js/+mRp+4IOwpHn5tJEw5KB6FiCU764zmffrhsYHbSHi2kKqNkRBt53XasXjngZfBD3FQzrQ== + dependencies: + JSONStream "^1.3.5" + abbrev "~1.1.1" + ansicolors "~0.3.2" + ansistyles "~0.1.3" + aproba "^2.0.0" + archy "~1.0.0" + bin-links "^1.1.7" + 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" + cli-columns "^3.1.2" + cli-table3 "^0.5.1" + cmd-shim "^3.0.3" + 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.0" + 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.7" + 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.2" + 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.1" + 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.2" + npm-cache-filename "~1.0.2" + npm-install-checks "^3.0.2" + npm-lifecycle "^3.1.4" + 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.5" + npm-user-validate "~1.0.0" + 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" + 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" + 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" + 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" + validate-npm-package-name "~3.0.0" + which "^1.3.1" + worker-farm "^1.7.0" + write-file-atomic "^2.4.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= + +object-inspect@^1.7.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.11, 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.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +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: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -423,16 +2308,214 @@ onetime@^1.0.0: resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= +opener@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed" + integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA== + +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-locale@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.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-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +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-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +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" + 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= + 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= + 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, path-key@^2.0.1: + 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" @@ -443,7 +2526,184 @@ 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== -readable-stream@^2.0.2: +promise-inflight@^1.0.1, 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" + +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" + +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" + +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== + +query-string@^6.8.2: + version "6.13.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.13.1.tgz#d913ccfce3b4b3a713989fe6d39466d92e71ccad" + integrity sha512-RfoButmcK+yCta1+FuU8REvisx1oEzhMKwhLUNcepQTPGcNMp1sIqjnfCtfnvGSQZQEhaBHvccujtWoUV3TTbA== + 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-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= + 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" + +"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.1" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.1.tgz#16aa66c59e7d4dad6288f179dd9295fd59bb98f1" + integrity sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+A== + dependencies: + glob "^7.1.1" + json-parse-better-errors "^1.0.1" + normalize-package-data "^2.0.0" + npm-normalize-package-bin "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.2" + +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" + integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= + 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: 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== @@ -456,6 +2716,25 @@ readable-stream@^2.0.2: 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" @@ -469,6 +2748,16 @@ 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: + 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" @@ -476,6 +2765,62 @@ 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: + 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" + +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= + +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.3.2: version "1.15.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" @@ -483,6 +2828,13 @@ resolve@^1.1.6, resolve@^1.3.2: dependencies: path-parse "^1.0.6" +resolve@^1.10.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + 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" @@ -491,7 +2843,17 @@ restore-cursor@^1.0.1: exit-hook "^1.0.0" onetime "^1.0.0" -rimraf@2: +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, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -505,21 +2867,69 @@ rimraf@^3.0.0: 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: + 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== -semver@^5.3.0: +"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-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.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: 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: + 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" 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.3" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097" @@ -529,11 +2939,174 @@ 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== + +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== + dependencies: + agent-base "~4.2.1" + socks "~2.3.2" + +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== + dependencies: + 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" + 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.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + +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== + 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@^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== + 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= + +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, string-width@^2.1.1: + 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.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== + 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" + string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" @@ -546,13 +3119,40 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@^3.0.0: +stringify-package@^1.0.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: 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-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= + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -565,6 +3165,62 @@ 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== + 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" + +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= + dependencies: + execa "^0.7.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" + 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" @@ -601,16 +3257,74 @@ 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@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + typescript@^3.3.3333: version "3.8.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== +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= + +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" + +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" @@ -626,16 +3340,149 @@ unzipper@^0.8.11: readable-stream "~2.1.5" setimmediate "~1.0.4" -util-deprecate@~1.0.1: +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.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + 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: 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: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +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" + +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-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== + 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" + +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" + 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== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + 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= + xmldom@^0.1.27: version "0.1.31" resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.31.tgz#b76c9a1bd9f0a9737e5a72dc37231cf38375e2ff" @@ -645,3 +3492,79 @@ 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== + +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: + 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@^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-parser@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" + integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= + dependencies: + camelcase "^4.1.0" + +yargs@^11.0.0: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.1.tgz#5052efe3446a4df5ed669c995886cc0f13702766" + integrity sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw== + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^3.1.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 "^9.0.2" + +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" From bde77e52f991c2b442afd2ef4915cd505ebc0076 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Jul 2020 14:10:04 -0700 Subject: [PATCH 293/660] Bump npm from 6.10.0 to 6.14.6 (#468) * Bump npm from 6.10.0 to 6.14.6 Bumps [npm](https://github.com/npm/cli) from 6.10.0 to 6.14.6. - [Release notes](https://github.com/npm/cli/releases) - [Changelog](https://github.com/npm/cli/blob/latest/CHANGELOG.md) - [Commits](https://github.com/npm/cli/compare/v6.10.0...v6.14.6) Signed-off-by: dependabot[bot] * Update travis * Undo node updates * Update Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Elizabeth Samuel --- .travis.yml | 2 +- package-lock.json | 884 ++++++++++++++++++++++++++++++---------------- package.json | 2 +- yarn.lock | 62 +++- 4 files changed, 620 insertions(+), 330 deletions(-) diff --git a/.travis.yml b/.travis.yml index b4c84ccd2..bddd72420 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,7 @@ node_js: - 6.10.0 before_install: -- npm i -g npm@6.10.0 +- npm i -g npm@6.14.6 install: - npm install diff --git a/package-lock.json b/package-lock.json index 45ff45f13..6d850d0d1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,8 +4,73 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "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/events": { @@ -16,6 +81,8 @@ }, "@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": "*" @@ -42,10 +109,14 @@ }, "@types/js-yaml": { "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.1.tgz", + "integrity": "sha512-SGGAhXLHDx+PK4YLNcNGa6goPf9XRWQNAUUbffkwVGGXIxmDKWyGGL4inzq2sPmExu431Ekb9aEMn9BkPqEYFA==", "dev": true }, "@types/lodash": { "version": "4.14.136", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.136.tgz", + "integrity": "sha512-0GJhzBdvsW2RUccNHOBkabI8HZVdOXmXbXhuKlDEd5Vv12P7oAVGfomGp3Ne21o5D/qu1WmthlNKFaoZJJeErA==", "dev": true }, "@types/minimatch": { @@ -62,6 +133,8 @@ }, "@types/shelljs": { "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-bZgjwIWu9gHCjirKJoOlLzGi5N0QgZ5t7EXEuoqyWCHTuSddURXo3FOBYDyRPNOWzZ6NbkLvZnVkn483Y/tvcQ==", "dev": true, "requires": { "@types/glob": "*", @@ -86,6 +159,14 @@ "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", @@ -134,6 +215,12 @@ "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", @@ -144,6 +231,8 @@ }, "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", @@ -180,11 +269,32 @@ "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", @@ -195,6 +305,12 @@ "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", @@ -204,10 +320,19 @@ } }, "escape-string-regexp": { - "version": "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": { + "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", @@ -221,6 +346,8 @@ }, "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", @@ -279,6 +406,12 @@ "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", @@ -303,6 +436,21 @@ "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.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "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", @@ -317,7 +465,9 @@ "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=" }, "lodash": { - "version": "4.17.15" + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, "minimatch": { "version": "3.0.4", @@ -342,6 +492,8 @@ }, "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", @@ -350,9 +502,9 @@ } }, "npm": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/npm/-/npm-6.10.0.tgz", - "integrity": "sha512-pOMc81mT4fHXv/iMbw4T4GQVZzlzx/Vf5bta+JgMWVR+qqBeNI0mAbKrQ15vZf3eMJ+DaJj6+XgD7650JQs+rg==", + "version": "6.14.6", + "resolved": "https://registry.npmjs.org/npm/-/npm-6.14.6.tgz", + "integrity": "sha512-axnz6iHFK6WPE0js/+mRp+4IOwpHn5tJEw5KB6FiCU764zmffrhsYHbSHi2kKqNkRBt53XasXjngZfBD3FQzrQ==", "requires": { "JSONStream": "^1.3.5", "abbrev": "~1.1.1", @@ -360,16 +512,16 @@ "ansistyles": "~0.1.3", "aproba": "^2.0.0", "archy": "~1.0.0", - "bin-links": "^1.1.2", + "bin-links": "^1.1.7", "bluebird": "^3.5.5", "byte-size": "^5.0.1", - "cacache": "^11.3.3", - "call-limit": "~1.1.0", - "chownr": "^1.1.1", + "cacache": "^12.0.3", + "call-limit": "^1.1.1", + "chownr": "^1.1.4", "ci-info": "^2.0.0", "cli-columns": "^3.1.2", "cli-table3": "^0.5.1", - "cmd-shim": "~2.0.2", + "cmd-shim": "^3.0.3", "columnify": "~1.5.4", "config-chain": "^1.1.12", "debuglog": "*", @@ -381,28 +533,29 @@ "find-npm-prefix": "^1.0.2", "fs-vacuum": "~1.2.10", "fs-write-stream-atomic": "~1.0.10", - "gentle-fs": "^2.0.1", - "glob": "^7.1.3", - "graceful-fs": "^4.2.0", + "gentle-fs": "^2.3.0", + "glob": "^7.1.6", + "graceful-fs": "^4.2.4", "has-unicode": "~2.0.1", - "hosted-git-info": "^2.7.1", + "hosted-git-info": "^2.8.8", "iferr": "^1.0.2", "imurmurhash": "*", + "infer-owner": "^1.0.4", "inflight": "~1.0.6", - "inherits": "~2.0.3", + "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": "^3.0.3", - "libnpm": "^2.0.1", - "libnpmaccess": "*", - "libnpmhook": "^5.0.2", - "libnpmorg": "*", - "libnpmsearch": "*", - "libnpmteam": "*", - "libnpx": "^10.2.0", + "libcipm": "^4.0.7", + "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.2", "lock-verify": "^2.1.0", "lockfile": "^1.0.4", "lodash._baseindexof": "*", @@ -416,53 +569,53 @@ "lodash.union": "~4.6.0", "lodash.uniq": "~4.5.0", "lodash.without": "~4.4.0", - "lru-cache": "^4.1.5", + "lru-cache": "^5.1.1", "meant": "~1.0.1", "mississippi": "^3.0.0", - "mkdirp": "~0.5.1", + "mkdirp": "^0.5.5", "move-concurrently": "^1.0.1", - "node-gyp": "^3.8.0", - "nopt": "~4.0.1", + "node-gyp": "^5.1.0", + "nopt": "^4.0.3", "normalize-package-data": "^2.5.0", "npm-audit-report": "^1.3.2", "npm-cache-filename": "~1.0.2", - "npm-install-checks": "~3.0.0", - "npm-lifecycle": "^2.1.0", - "npm-package-arg": "^6.1.0", - "npm-packlist": "^1.4.4", - "npm-pick-manifest": "^2.2.3", - "npm-profile": "*", - "npm-registry-fetch": "^3.9.0", + "npm-install-checks": "^3.0.2", + "npm-lifecycle": "^3.1.4", + "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.5", "npm-user-validate": "~1.0.0", "npmlog": "~4.1.2", "once": "~1.4.0", "opener": "^1.5.1", "osenv": "^0.1.5", - "pacote": "^9.5.1", + "pacote": "^9.5.12", "path-is-inside": "~1.0.2", "promise-inflight": "~1.0.1", "qrcode-terminal": "^0.12.0", - "query-string": "^6.4.0", + "query-string": "^6.8.2", "qw": "~1.0.1", "read": "~1.0.7", - "read-cmd-shim": "~1.0.1", + "read-cmd-shim": "^1.0.5", "read-installed": "~4.0.3", - "read-package-json": "^2.0.13", + "read-package-json": "^2.1.1", "read-package-tree": "^5.3.1", - "readable-stream": "^3.3.0", + "readable-stream": "^3.6.0", "readdir-scoped-modules": "^1.1.0", "request": "^2.88.0", "retry": "^0.12.0", - "rimraf": "^2.6.3", + "rimraf": "^2.7.1", "safe-buffer": "^5.1.2", - "semver": "^5.6.0", + "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.0", - "tar": "^4.4.10", + "stringify-package": "^1.0.1", + "tar": "^4.4.13", "text-table": "~0.2.0", "tiny-relative-date": "^1.3.0", "uid-number": "0.0.6", @@ -470,11 +623,11 @@ "unique-filename": "^1.1.1", "unpipe": "~1.0.0", "update-notifier": "^2.5.0", - "uuid": "^3.3.2", + "uuid": "^3.3.3", "validate-npm-package-license": "^3.0.4", "validate-npm-package-name": "~3.0.0", "which": "^1.3.1", - "worker-farm": "^1.6.0", + "worker-farm": "^1.7.0", "write-file-atomic": "^2.4.3" }, "dependencies": { @@ -491,14 +644,14 @@ "bundled": true }, "agent-base": { - "version": "4.2.1", + "version": "4.3.0", "bundled": true, "requires": { "es6-promisify": "^5.0.0" } }, "agentkeepalive": { - "version": "3.4.1", + "version": "3.5.2", "bundled": true, "requires": { "humanize-ms": "^1.2.1" @@ -618,23 +771,17 @@ } }, "bin-links": { - "version": "1.1.2", + "version": "1.1.7", "bundled": true, "requires": { - "bluebird": "^3.5.0", - "cmd-shim": "^2.0.2", - "gentle-fs": "^2.0.0", - "graceful-fs": "^4.1.11", + "bluebird": "^3.5.3", + "cmd-shim": "^3.0.0", + "gentle-fs": "^2.3.0", + "graceful-fs": "^4.1.15", + "npm-normalize-package-bin": "^1.0.0", "write-file-atomic": "^2.3.0" } }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "requires": { - "inherits": "~2.0.0" - } - }, "bluebird": { "version": "3.5.5", "bundled": true @@ -677,7 +824,7 @@ "bundled": true }, "cacache": { - "version": "11.3.3", + "version": "12.0.3", "bundled": true, "requires": { "bluebird": "^3.5.5", @@ -685,6 +832,7 @@ "figgy-pudding": "^3.5.1", "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", @@ -694,35 +842,10 @@ "ssri": "^6.0.1", "unique-filename": "^1.1.1", "y18n": "^4.0.0" - }, - "dependencies": { - "glob": { - "version": "7.1.4", - "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" - } - }, - "lru-cache": { - "version": "5.1.1", - "bundled": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.0.3", - "bundled": true - } } }, "call-limit": { - "version": "1.1.0", + "version": "1.1.1", "bundled": true }, "camelcase": { @@ -747,7 +870,7 @@ } }, "chownr": { - "version": "1.1.1", + "version": "1.1.4", "bundled": true }, "ci-info": { @@ -809,7 +932,7 @@ "bundled": true }, "cmd-shim": { - "version": "2.0.2", + "version": "3.0.3", "bundled": true, "requires": { "graceful-fs": "^4.1.2", @@ -955,6 +1078,20 @@ "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", "which": "^1.2.9" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "bundled": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "bundled": true + } } }, "crypto-random-string": { @@ -998,7 +1135,7 @@ "bundled": true }, "deep-extend": { - "version": "0.5.1", + "version": "0.6.0", "bundled": true }, "defaults": { @@ -1113,6 +1250,10 @@ "once": "^1.4.0" } }, + "env-paths": { + "version": "2.2.0", + "bundled": true + }, "err-code": { "version": "1.1.2", "bundled": true @@ -1145,7 +1286,7 @@ } }, "es6-promise": { - "version": "4.2.6", + "version": "4.2.8", "bundled": true }, "es6-promisify": { @@ -1283,10 +1424,20 @@ } }, "fs-minipass": { - "version": "1.2.6", + "version": "1.2.7", "bundled": true, "requires": { - "minipass": "^2.2.1" + "minipass": "^2.6.0" + }, + "dependencies": { + "minipass": { + "version": "2.9.0", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + } } }, "fs-vacuum": { @@ -1338,16 +1489,6 @@ "version": "1.0.0", "bundled": true }, - "fstream": { - "version": "1.0.12", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - } - }, "function-bind": { "version": "1.1.1", "bundled": true @@ -1386,13 +1527,16 @@ "bundled": true }, "gentle-fs": { - "version": "2.0.1", + "version": "2.3.0", "bundled": true, "requires": { "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", @@ -1410,7 +1554,7 @@ } }, "get-caller-file": { - "version": "1.0.2", + "version": "1.0.3", "bundled": true }, "get-stream": { @@ -1428,7 +1572,7 @@ } }, "glob": { - "version": "7.1.3", + "version": "7.1.6", "bundled": true, "requires": { "fs.realpath": "^1.0.0", @@ -1470,7 +1614,7 @@ } }, "graceful-fs": { - "version": "4.2.0", + "version": "4.2.4", "bundled": true }, "har-schema": { @@ -1505,7 +1649,7 @@ "bundled": true }, "hosted-git-info": { - "version": "2.7.1", + "version": "2.8.8", "bundled": true }, "http-cache-semantics": { @@ -1530,10 +1674,10 @@ } }, "https-proxy-agent": { - "version": "2.2.1", + "version": "2.2.4", "bundled": true, "requires": { - "agent-base": "^4.1.0", + "agent-base": "^4.3.0", "debug": "^3.1.0" } }, @@ -1556,7 +1700,7 @@ "bundled": true }, "ignore-walk": { - "version": "3.0.1", + "version": "3.0.3", "bundled": true, "requires": { "minimatch": "^3.0.4" @@ -1570,6 +1714,10 @@ "version": "0.1.4", "bundled": true }, + "infer-owner": { + "version": "1.0.4", + "bundled": true + }, "inflight": { "version": "1.0.6", "bundled": true, @@ -1579,7 +1727,7 @@ } }, "inherits": { - "version": "2.0.3", + "version": "2.0.4", "bundled": true }, "ini": { @@ -1601,7 +1749,7 @@ } }, "invert-kv": { - "version": "1.0.0", + "version": "2.0.0", "bundled": true }, "ip": { @@ -1617,10 +1765,10 @@ "bundled": true }, "is-ci": { - "version": "1.1.0", + "version": "1.2.1", "bundled": true, "requires": { - "ci-info": "^1.0.0" + "ci-info": "^1.5.0" }, "dependencies": { "ci-info": { @@ -1682,7 +1830,7 @@ } }, "is-retry-allowed": { - "version": "1.1.0", + "version": "1.2.0", "bundled": true }, "is-stream": { @@ -1759,14 +1907,14 @@ "bundled": true }, "lcid": { - "version": "1.0.0", + "version": "2.0.0", "bundled": true, "requires": { - "invert-kv": "^1.0.0" + "invert-kv": "^2.0.0" } }, "libcipm": { - "version": "3.0.3", + "version": "4.0.7", "bundled": true, "requires": { "bin-links": "^1.1.2", @@ -1777,7 +1925,7 @@ "ini": "^1.3.5", "lock-verify": "^2.0.2", "mkdirp": "^0.5.1", - "npm-lifecycle": "^2.0.3", + "npm-lifecycle": "^3.0.0", "npm-logical-tree": "^1.2.1", "npm-package-arg": "^6.1.0", "pacote": "^9.1.0", @@ -1787,45 +1935,39 @@ } }, "libnpm": { - "version": "2.0.1", + "version": "3.0.1", "bundled": true, "requires": { "bin-links": "^1.1.2", "bluebird": "^3.5.3", "find-npm-prefix": "^1.0.2", - "libnpmaccess": "^3.0.1", + "libnpmaccess": "^3.0.2", "libnpmconfig": "^1.2.1", - "libnpmhook": "^5.0.2", - "libnpmorg": "^1.0.0", - "libnpmpublish": "^1.1.0", - "libnpmsearch": "^2.0.0", - "libnpmteam": "^1.0.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": "^2.1.0", + "npm-lifecycle": "^3.0.0", "npm-logical-tree": "^1.2.1", "npm-package-arg": "^6.1.0", - "npm-profile": "^4.0.1", - "npm-registry-fetch": "^3.8.0", + "npm-profile": "^4.0.2", + "npm-registry-fetch": "^4.0.0", "npmlog": "^4.1.2", - "pacote": "^9.2.3", + "pacote": "^9.5.3", "read-package-json": "^2.0.13", "stringify-package": "^1.0.0" } }, "libnpmaccess": { - "version": "3.0.1", + "version": "3.0.2", "bundled": true, "requires": { "aproba": "^2.0.0", "get-stream": "^4.0.0", "npm-package-arg": "^6.1.0", - "npm-registry-fetch": "^3.8.0" - }, - "dependencies": { - "aproba": { - "version": "2.0.0", - "bundled": true - } + "npm-registry-fetch": "^4.0.0" } }, "libnpmconfig": { @@ -1853,7 +1995,7 @@ } }, "p-limit": { - "version": "2.1.0", + "version": "2.2.0", "bundled": true, "requires": { "p-try": "^2.0.0" @@ -1867,39 +2009,33 @@ } }, "p-try": { - "version": "2.0.0", + "version": "2.2.0", "bundled": true } } }, "libnpmhook": { - "version": "5.0.2", + "version": "5.0.3", "bundled": true, "requires": { "aproba": "^2.0.0", "figgy-pudding": "^3.4.1", "get-stream": "^4.0.0", - "npm-registry-fetch": "^3.8.0" + "npm-registry-fetch": "^4.0.0" } }, "libnpmorg": { - "version": "1.0.0", + "version": "1.0.1", "bundled": true, "requires": { "aproba": "^2.0.0", "figgy-pudding": "^3.4.1", "get-stream": "^4.0.0", - "npm-registry-fetch": "^3.8.0" - }, - "dependencies": { - "aproba": { - "version": "2.0.0", - "bundled": true - } + "npm-registry-fetch": "^4.0.0" } }, "libnpmpublish": { - "version": "1.1.1", + "version": "1.1.2", "bundled": true, "requires": { "aproba": "^2.0.0", @@ -1908,38 +2044,32 @@ "lodash.clonedeep": "^4.5.0", "normalize-package-data": "^2.4.0", "npm-package-arg": "^6.1.0", - "npm-registry-fetch": "^3.8.0", + "npm-registry-fetch": "^4.0.0", "semver": "^5.5.1", "ssri": "^6.0.1" } }, "libnpmsearch": { - "version": "2.0.0", + "version": "2.0.2", "bundled": true, "requires": { "figgy-pudding": "^3.5.1", "get-stream": "^4.0.0", - "npm-registry-fetch": "^3.8.0" + "npm-registry-fetch": "^4.0.0" } }, "libnpmteam": { - "version": "1.0.1", + "version": "1.0.2", "bundled": true, "requires": { "aproba": "^2.0.0", "figgy-pudding": "^3.4.1", "get-stream": "^4.0.0", - "npm-registry-fetch": "^3.8.0" - }, - "dependencies": { - "aproba": { - "version": "2.0.0", - "bundled": true - } + "npm-registry-fetch": "^4.0.0" } }, "libnpx": { - "version": "10.2.0", + "version": "10.2.2", "bundled": true, "requires": { "dotenv": "^5.0.1", @@ -2039,11 +2169,10 @@ "bundled": true }, "lru-cache": { - "version": "4.1.5", + "version": "5.1.1", "bundled": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "yallist": "^3.0.2" } }, "make-dir": { @@ -2054,15 +2183,15 @@ } }, "make-fetch-happen": { - "version": "4.0.1", + "version": "5.0.2", "bundled": true, "requires": { "agentkeepalive": "^3.4.1", - "cacache": "^11.0.1", + "cacache": "^12.0.0", "http-cache-semantics": "^3.8.1", "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.1", - "lru-cache": "^4.1.2", + "https-proxy-agent": "^2.2.3", + "lru-cache": "^5.1.1", "mississippi": "^3.0.0", "node-fetch-npm": "^2.0.2", "promise-retry": "^1.1.1", @@ -2070,15 +2199,30 @@ "ssri": "^6.0.0" } }, + "map-age-cleaner": { + "version": "0.1.3", + "bundled": true, + "requires": { + "p-defer": "^1.0.0" + } + }, "meant": { "version": "1.0.1", "bundled": true }, "mem": { - "version": "1.1.0", + "version": "4.3.0", "bundled": true, "requires": { - "mimic-fn": "^1.0.0" + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "bundled": true + } } }, "mime-db": { @@ -2092,10 +2236,6 @@ "mime-db": "~1.35.0" } }, - "mimic-fn": { - "version": "1.2.0", - "bundled": true - }, "minimatch": { "version": "3.0.4", "bundled": true, @@ -2103,31 +2243,23 @@ "brace-expansion": "^1.1.7" } }, - "minimist": { - "version": "0.0.8", - "bundled": true - }, - "minipass": { - "version": "2.3.3", + "minizlib": { + "version": "1.3.3", "bundled": true, "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" + "minipass": "^2.9.0" }, "dependencies": { - "yallist": { - "version": "3.0.2", - "bundled": true + "minipass": { + "version": "2.9.0", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } } } }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "requires": { - "minipass": "^2.2.1" - } - }, "mississippi": { "version": "3.0.0", "bundled": true, @@ -2145,10 +2277,16 @@ } }, "mkdirp": { - "version": "0.5.1", + "version": "0.5.5", "bundled": true, "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" + }, + "dependencies": { + "minimist": { + "version": "1.2.5", + "bundled": true + } } }, "move-concurrently": { @@ -2177,6 +2315,10 @@ "version": "0.0.7", "bundled": true }, + "nice-try": { + "version": "1.0.5", + "bundled": true + }, "node-fetch-npm": { "version": "2.0.2", "bundled": true, @@ -2187,47 +2329,24 @@ } }, "node-gyp": { - "version": "3.8.0", + "version": "5.1.0", "bundled": true, "requires": { - "fstream": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", - "request": "^2.87.0", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^2.0.0", - "which": "1" - }, - "dependencies": { - "nopt": { - "version": "3.0.6", - "bundled": true, - "requires": { - "abbrev": "1" - } - }, - "semver": { - "version": "5.3.0", - "bundled": true - }, - "tar": { - "version": "2.2.2", - "bundled": true, - "requires": { - "block-stream": "*", - "fstream": "^1.0.12", - "inherits": "2" - } - } + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.1.2", + "request": "^2.88.0", + "rimraf": "^2.6.3", + "semver": "^5.7.1", + "tar": "^4.4.12", + "which": "^1.3.1" } }, "nopt": { - "version": "4.0.1", + "version": "4.0.3", "bundled": true, "requires": { "abbrev": "1", @@ -2262,27 +2381,30 @@ } }, "npm-bundled": { - "version": "1.0.6", - "bundled": true + "version": "1.1.1", + "bundled": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } }, "npm-cache-filename": { "version": "1.0.2", "bundled": true }, "npm-install-checks": { - "version": "3.0.0", + "version": "3.0.2", "bundled": true, "requires": { "semver": "^2.3.0 || 3.x || 4 || 5" } }, "npm-lifecycle": { - "version": "2.1.0", + "version": "3.1.4", "bundled": true, "requires": { "byline": "^5.0.0", - "graceful-fs": "^4.1.11", - "node-gyp": "^3.8.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", @@ -2294,26 +2416,31 @@ "version": "1.2.1", "bundled": true }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "bundled": true + }, "npm-package-arg": { - "version": "6.1.0", + "version": "6.1.1", "bundled": true, "requires": { - "hosted-git-info": "^2.6.0", + "hosted-git-info": "^2.7.1", "osenv": "^0.1.5", - "semver": "^5.5.0", + "semver": "^5.6.0", "validate-npm-package-name": "^3.0.0" } }, "npm-packlist": { - "version": "1.4.4", + "version": "1.4.8", "bundled": true, "requires": { "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" } }, "npm-pick-manifest": { - "version": "2.2.3", + "version": "3.0.2", "bundled": true, "requires": { "figgy-pudding": "^3.5.1", @@ -2322,24 +2449,31 @@ } }, "npm-profile": { - "version": "4.0.1", + "version": "4.0.4", "bundled": true, "requires": { "aproba": "^1.1.2 || 2", "figgy-pudding": "^3.4.1", - "npm-registry-fetch": "^3.8.0" + "npm-registry-fetch": "^4.0.0" } }, "npm-registry-fetch": { - "version": "3.9.0", + "version": "4.0.5", "bundled": true, "requires": { "JSONStream": "^1.3.4", "bluebird": "^3.5.1", "figgy-pudding": "^3.4.1", - "lru-cache": "^4.1.3", - "make-fetch-happen": "^4.0.1", - "npm-package-arg": "^6.1.0" + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "npm-package-arg": "^6.1.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "bundled": true + } } }, "npm-run-path": { @@ -2403,12 +2537,38 @@ "bundled": true }, "os-locale": { - "version": "2.1.0", + "version": "3.1.0", "bundled": true, "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "bundled": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "bundled": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.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" + } + } } }, "os-tmpdir": { @@ -2423,10 +2583,18 @@ "os-tmpdir": "^1.0.0" } }, + "p-defer": { + "version": "1.0.0", + "bundled": true + }, "p-finally": { "version": "1.0.0", "bundled": true }, + "p-is-promise": { + "version": "2.1.0", + "bundled": true + }, "p-limit": { "version": "1.2.0", "bundled": true, @@ -2456,25 +2624,28 @@ } }, "pacote": { - "version": "9.5.1", + "version": "9.5.12", "bundled": true, "requires": { "bluebird": "^3.5.3", - "cacache": "^11.3.2", + "cacache": "^12.0.2", + "chownr": "^1.1.2", "figgy-pudding": "^3.5.1", "get-stream": "^4.1.0", "glob": "^7.1.3", + "infer-owner": "^1.0.4", "lru-cache": "^5.1.1", - "make-fetch-happen": "^4.0.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": "^2.2.3", - "npm-registry-fetch": "^3.8.0", + "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", @@ -2483,29 +2654,18 @@ "safe-buffer": "^5.1.2", "semver": "^5.6.0", "ssri": "^6.0.1", - "tar": "^4.4.8", + "tar": "^4.4.10", "unique-filename": "^1.1.1", "which": "^1.3.1" }, "dependencies": { - "lru-cache": { - "version": "5.1.1", - "bundled": true, - "requires": { - "yallist": "^3.0.2" - } - }, "minipass": { - "version": "2.3.5", + "version": "2.9.0", "bundled": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" } - }, - "yallist": { - "version": "3.0.3", - "bundled": true } } }, @@ -2664,10 +2824,11 @@ "bundled": true }, "query-string": { - "version": "6.4.0", + "version": "6.8.2", "bundled": true, "requires": { "decode-uri-component": "^0.2.0", + "split-on-first": "^1.0.0", "strict-uri-encode": "^2.0.0" } }, @@ -2676,17 +2837,17 @@ "bundled": true }, "rc": { - "version": "1.2.7", + "version": "1.2.8", "bundled": true, "requires": { - "deep-extend": "^0.5.1", + "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { - "version": "1.2.0", + "version": "1.2.5", "bundled": true } } @@ -2699,7 +2860,7 @@ } }, "read-cmd-shim": { - "version": "1.0.1", + "version": "1.0.5", "bundled": true, "requires": { "graceful-fs": "^4.1.2" @@ -2719,14 +2880,14 @@ } }, "read-package-json": { - "version": "2.0.13", + "version": "2.1.1", "bundled": true, "requires": { "glob": "^7.1.1", "graceful-fs": "^4.1.2", "json-parse-better-errors": "^1.0.1", "normalize-package-data": "^2.0.0", - "slash": "^1.0.0" + "npm-normalize-package-bin": "^1.0.0" } }, "read-package-tree": { @@ -2739,7 +2900,7 @@ } }, "readable-stream": { - "version": "3.3.0", + "version": "3.6.0", "bundled": true, "requires": { "inherits": "^2.0.3", @@ -2758,7 +2919,7 @@ } }, "registry-auth-token": { - "version": "3.3.2", + "version": "3.4.0", "bundled": true, "requires": { "rc": "^1.1.6", @@ -2815,7 +2976,7 @@ "bundled": true }, "rimraf": { - "version": "2.6.3", + "version": "2.7.1", "bundled": true, "requires": { "glob": "^7.1.3" @@ -2843,7 +3004,7 @@ "bundled": true }, "semver": { - "version": "5.6.0", + "version": "5.7.1", "bundled": true }, "semver-diff": { @@ -2879,32 +3040,37 @@ "version": "3.0.2", "bundled": true }, - "slash": { - "version": "1.0.0", - "bundled": true - }, "slide": { "version": "1.1.6", "bundled": true }, "smart-buffer": { - "version": "4.0.1", + "version": "4.1.0", "bundled": true }, "socks": { - "version": "2.2.0", + "version": "2.3.3", "bundled": true, "requires": { - "ip": "^1.1.5", - "smart-buffer": "^4.0.1" + "ip": "1.1.5", + "smart-buffer": "^4.1.0" } }, "socks-proxy-agent": { - "version": "4.0.1", + "version": "4.0.2", "bundled": true, "requires": { - "agent-base": "~4.2.0", - "socks": "~2.2.0" + "agent-base": "~4.2.1", + "socks": "~2.3.2" + }, + "dependencies": { + "agent-base": { + "version": "4.2.1", + "bundled": true, + "requires": { + "es6-promisify": "^5.0.0" + } + } } }, "sorted-object": { @@ -2968,7 +3134,11 @@ } }, "spdx-license-ids": { - "version": "3.0.3", + "version": "3.0.5", + "bundled": true + }, + "split-on-first": { + "version": "1.1.0", "bundled": true }, "sshpk": { @@ -3065,14 +3235,20 @@ } }, "string_decoder": { - "version": "1.2.0", + "version": "1.3.0", "bundled": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "bundled": true + } } }, "stringify-package": { - "version": "1.0.0", + "version": "1.0.1", "bundled": true }, "strip-ansi": { @@ -3098,12 +3274,12 @@ } }, "tar": { - "version": "4.4.10", + "version": "4.4.13", "bundled": true, "requires": { "chownr": "^1.1.1", "fs-minipass": "^1.2.5", - "minipass": "^2.3.5", + "minipass": "^2.8.6", "minizlib": "^1.2.1", "mkdirp": "^0.5.0", "safe-buffer": "^5.1.2", @@ -3111,16 +3287,12 @@ }, "dependencies": { "minipass": { - "version": "2.3.5", + "version": "2.9.0", "bundled": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" } - }, - "yallist": { - "version": "3.0.3", - "bundled": true } } }, @@ -3277,7 +3449,7 @@ } }, "uuid": { - "version": "3.3.2", + "version": "3.3.3", "bundled": true }, "validate-npm-package-license": { @@ -3341,14 +3513,14 @@ } }, "widest-line": { - "version": "2.0.0", + "version": "2.0.1", "bundled": true, "requires": { "string-width": "^2.1.1" } }, "worker-farm": { - "version": "1.6.0", + "version": "1.7.0", "bundled": true, "requires": { "errno": "~0.1.7" @@ -3399,18 +3571,18 @@ "bundled": true }, "yallist": { - "version": "2.1.2", + "version": "3.0.3", "bundled": true }, "yargs": { - "version": "11.0.0", + "version": "11.1.1", "bundled": true, "requires": { "cliui": "^4.0.0", "decamelize": "^1.1.1", "find-up": "^2.1.0", "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", + "os-locale": "^3.1.0", "require-directory": "^2.1.1", "require-main-filename": "^1.0.1", "set-blocking": "^2.0.0", @@ -3504,10 +3676,18 @@ }, "rimraf": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.0.tgz", + "integrity": "sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==", "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", @@ -3515,12 +3695,19 @@ }, "shelljs": { "version": "0.8.3", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", + "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", "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", @@ -3544,8 +3731,83 @@ "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=" }, + "tslib": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", + "dev": true + }, + "tslint": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.2.tgz", + "integrity": "sha512-UyNrLdK3E0fQG/xWNqAFAC5ugtFyPO4JJR1KyyfQAyzR8W0fTRrC91A8Wej4BntFzcvETdCSDa/4PnNYJQLYiA==", + "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.10.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.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz", + "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==", "dev": true }, "universalify": { diff --git a/package.json b/package.json index 05a24dd96..f4eaadcf2 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "js-yaml": "^3.13.1", "lodash": "^4.17.15", "node-status": "^1.0.0", - "npm": "^6.10.0", + "npm": "^6.14.6", "rimraf": "^3.0.0", "shelljs": "^0.8.3" }, diff --git a/yarn.lock b/yarn.lock index 753c275df..19a58c1e5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -669,7 +669,7 @@ debug@^3.1.0: dependencies: ms "^2.1.1" -debuglog@^1.0.1: +debuglog@*, 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= @@ -1152,16 +1152,11 @@ got@^6.7.1: unzip-response "^2.0.1" url-parse-lax "^1.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.2.2, graceful-fs@^4.2.4: +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: - version "4.2.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" - integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== - har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" @@ -1275,7 +1270,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@^0.1.4: +imurmurhash@*, imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= @@ -1729,6 +1724,11 @@ 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" @@ -1737,11 +1737,33 @@ 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" @@ -1752,6 +1774,11 @@ 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" @@ -1909,14 +1936,7 @@ mississippi@^3.0.0: stream-each "^1.1.0" through2 "^2.0.0" -"mkdirp@>=0.5 0", mkdirp@^0.5.1: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.3.tgz#5a514b7179259287952881e94410ec5465659f8c" - integrity sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg== - dependencies: - minimist "^1.2.5" - -mkdirp@^0.5.0, mkdirp@^0.5.5, mkdirp@~0.5.0: +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, 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== @@ -2122,7 +2142,7 @@ npm-user-validate@~1.0.0: resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.0.tgz#8ceca0f5cea04d4e93519ef72d0557a75122e951" integrity sha1-jOyg9c6gTU6TUZ73LQVXp1Ei6VE= -npm@^6.10.0: +npm@^6.14.6: version "6.14.6" resolved "https://registry.yarnpkg.com/npm/-/npm-6.14.6.tgz#1a81ce1fac2bf5457dbf6342ceed503627ff228f" integrity sha512-axnz6iHFK6WPE0js/+mRp+4IOwpHn5tJEw5KB6FiCU764zmffrhsYHbSHi2kKqNkRBt53XasXjngZfBD3FQzrQ== @@ -2145,6 +2165,7 @@ npm@^6.10.0: cmd-shim "^3.0.3" columnify "~1.5.4" config-chain "^1.1.12" + debuglog "*" detect-indent "~5.0.0" detect-newline "^2.1.0" dezalgo "~1.0.3" @@ -2159,6 +2180,7 @@ npm@^6.10.0: has-unicode "~2.0.1" hosted-git-info "^2.8.8" iferr "^1.0.2" + imurmurhash "*" infer-owner "^1.0.4" inflight "~1.0.6" inherits "^2.0.4" @@ -2177,8 +2199,14 @@ npm@^6.10.0: libnpx "^10.2.2" lock-verify "^2.1.0" lockfile "^1.0.4" + lodash._baseindexof "*" lodash._baseuniq "~4.6.0" + lodash._bindcallback "*" + lodash._cacheindexof "*" + lodash._createcache "*" + lodash._getnative "*" lodash.clonedeep "~4.5.0" + lodash.restparam "*" lodash.union "~4.6.0" lodash.uniq "~4.5.0" lodash.without "~4.4.0" From 33d380699e2cabf34941cdd432aadeef4a0905c3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Jul 2020 16:13:47 -0700 Subject: [PATCH 294/660] Bump lodash from 4.17.15 to 4.17.19 (#464) Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.19) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 6 +++--- package.json | 2 +- yarn.lock | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6d850d0d1..51aa8a94a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -465,9 +465,9 @@ "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=" }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" }, "minimatch": { "version": "3.0.4", diff --git a/package.json b/package.json index f4eaadcf2..a3dd39282 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "excel": "^1.0.1", "fs-extra": "3.0.1", "js-yaml": "^3.13.1", - "lodash": "^4.17.15", + "lodash": "^4.17.19", "node-status": "^1.0.0", "npm": "^6.14.6", "rimraf": "^3.0.0", diff --git a/yarn.lock b/yarn.lock index 19a58c1e5..2b8de2d19 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1794,10 +1794,10 @@ lodash.without@~4.4.0: resolved "https://registry.yarnpkg.com/lodash.without/-/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" integrity sha1-PNRXSgC2e643OpS3SHcmQFB7eqw= -lodash@^4.17.15: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +lodash@^4.17.19: + version "4.17.19" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" + integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== lowercase-keys@^1.0.0: version "1.0.1" From ae84a6324f9619edbc1c3d76ee7970dd29992350 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 31 Jul 2020 11:40:48 -0700 Subject: [PATCH 295/660] Clean up (#469) * Test * Update * Remove package-lock * Tweak * Tweak * Cleanup * Clean up --- config/deploy.ts | 2 +- package-lock.json | 3855 --------------------------------------------- 2 files changed, 1 insertion(+), 3856 deletions(-) delete mode 100644 package-lock.json diff --git a/config/deploy.ts b/config/deploy.ts index fd97e7a45..82bcf41d4 100644 --- a/config/deploy.ts +++ b/config/deploy.ts @@ -88,7 +88,7 @@ function precheck() { } /** - * Execute a shall command. + * Execute a shell command. * @param originalSanitizedCommand - The command to execute. Note that if it contains something secret, put it in triple <<>> syntax, as the command itself will get echo-ed. * @param secretSubstitutions - key-value pairs to substitute into the command when executing. Having any secret substitutions will automatically make the command run silently. */ diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 51aa8a94a..000000000 --- a/package-lock.json +++ /dev/null @@ -1,3855 +0,0 @@ -{ - "name": "office-js-snippets", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "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/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", - "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": "12.6.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.6.8.tgz", - "integrity": "sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg==", - "dev": true - } - } - }, - "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "dev": true, - "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/js-yaml": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.1.tgz", - "integrity": "sha512-SGGAhXLHDx+PK4YLNcNGa6goPf9XRWQNAUUbffkwVGGXIxmDKWyGGL4inzq2sPmExu431Ekb9aEMn9BkPqEYFA==", - "dev": true - }, - "@types/lodash": { - "version": "4.14.136", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.136.tgz", - "integrity": "sha512-0GJhzBdvsW2RUccNHOBkabI8HZVdOXmXbXhuKlDEd5Vv12P7oAVGfomGp3Ne21o5D/qu1WmthlNKFaoZJJeErA==", - "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.13.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.18.tgz", - "integrity": "sha512-sMHdXLccscaxI+Hlzz58yLQue3lQyXP+6aQniDRi5oju3n0123kcjhicVGF20WF7cHiwJ2vxMbXc4skOclosoA==", - "dev": true - }, - "@types/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-bZgjwIWu9gHCjirKJoOlLzGi5N0QgZ5t7EXEuoqyWCHTuSddURXo3FOBYDyRPNOWzZ6NbkLvZnVkn483Y/tvcQ==", - "dev": true, - "requires": { - "@types/glob": "*", - "@types/node": "*" - }, - "dependencies": { - "@types/node": { - "version": "12.6.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.6.8.tgz", - "integrity": "sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg==", - "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=" - }, - "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.1", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz", - "integrity": "sha1-qfuAbOgUXVQoUQznLyeLs2OmOL8=" - }, - "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" - } - } - } - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "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.1", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.1.tgz", - "integrity": "sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw==" - }, - "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.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==" - }, - "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.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "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.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" - }, - "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": "6.14.6", - "resolved": "https://registry.npmjs.org/npm/-/npm-6.14.6.tgz", - "integrity": "sha512-axnz6iHFK6WPE0js/+mRp+4IOwpHn5tJEw5KB6FiCU764zmffrhsYHbSHi2kKqNkRBt53XasXjngZfBD3FQzrQ==", - "requires": { - "JSONStream": "^1.3.5", - "abbrev": "~1.1.1", - "ansicolors": "~0.3.2", - "ansistyles": "~0.1.3", - "aproba": "^2.0.0", - "archy": "~1.0.0", - "bin-links": "^1.1.7", - "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", - "cli-columns": "^3.1.2", - "cli-table3": "^0.5.1", - "cmd-shim": "^3.0.3", - "columnify": "~1.5.4", - "config-chain": "^1.1.12", - "debuglog": "*", - "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.0", - "glob": "^7.1.6", - "graceful-fs": "^4.2.4", - "has-unicode": "~2.0.1", - "hosted-git-info": "^2.8.8", - "iferr": "^1.0.2", - "imurmurhash": "*", - "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.7", - "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.2", - "lock-verify": "^2.1.0", - "lockfile": "^1.0.4", - "lodash._baseindexof": "*", - "lodash._baseuniq": "~4.6.0", - "lodash._bindcallback": "*", - "lodash._cacheindexof": "*", - "lodash._createcache": "*", - "lodash._getnative": "*", - "lodash.clonedeep": "~4.5.0", - "lodash.restparam": "*", - "lodash.union": "~4.6.0", - "lodash.uniq": "~4.5.0", - "lodash.without": "~4.4.0", - "lru-cache": "^5.1.1", - "meant": "~1.0.1", - "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.2", - "npm-cache-filename": "~1.0.2", - "npm-install-checks": "^3.0.2", - "npm-lifecycle": "^3.1.4", - "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.5", - "npm-user-validate": "~1.0.0", - "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", - "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", - "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", - "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", - "validate-npm-package-name": "~3.0.0", - "which": "^1.3.1", - "worker-farm": "^1.7.0", - "write-file-atomic": "^2.4.3" - }, - "dependencies": { - "JSONStream": { - "version": "1.3.5", - "bundled": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "abbrev": { - "version": "1.1.1", - "bundled": true - }, - "agent-base": { - "version": "4.3.0", - "bundled": true, - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "agentkeepalive": { - "version": "3.5.2", - "bundled": true, - "requires": { - "humanize-ms": "^1.2.1" - } - }, - "ajv": { - "version": "5.5.2", - "bundled": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "ansi-align": { - "version": "2.0.0", - "bundled": true, - "requires": { - "string-width": "^2.0.0" - } - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true - }, - "ansi-styles": { - "version": "3.2.1", - "bundled": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "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.4", - "bundled": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "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" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "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.8.0", - "bundled": true - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "bundled": true, - "optional": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bin-links": { - "version": "1.1.7", - "bundled": true, - "requires": { - "bluebird": "^3.5.3", - "cmd-shim": "^3.0.0", - "gentle-fs": "^2.3.0", - "graceful-fs": "^4.1.15", - "npm-normalize-package-bin": "^1.0.0", - "write-file-atomic": "^2.3.0" - } - }, - "bluebird": { - "version": "3.5.5", - "bundled": true - }, - "boxen": { - "version": "1.3.0", - "bundled": true, - "requires": { - "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": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer-from": { - "version": "1.0.0", - "bundled": true - }, - "builtins": { - "version": "1.0.3", - "bundled": true - }, - "byline": { - "version": "5.0.0", - "bundled": true - }, - "byte-size": { - "version": "5.0.1", - "bundled": true - }, - "cacache": { - "version": "12.0.3", - "bundled": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "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", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "call-limit": { - "version": "1.1.1", - "bundled": true - }, - "camelcase": { - "version": "4.1.0", - "bundled": true - }, - "capture-stack-trace": { - "version": "1.0.0", - "bundled": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true - }, - "chalk": { - "version": "2.4.1", - "bundled": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chownr": { - "version": "1.1.4", - "bundled": true - }, - "ci-info": { - "version": "2.0.0", - "bundled": true - }, - "cidr-regex": { - "version": "2.0.10", - "bundled": true, - "requires": { - "ip-regex": "^2.1.0" - } - }, - "cli-boxes": { - "version": "1.0.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.5.1", - "bundled": true, - "requires": { - "colors": "^1.1.2", - "object-assign": "^4.1.0", - "string-width": "^2.1.1" - } - }, - "cliui": { - "version": "4.1.0", - "bundled": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.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" - } - } - } - }, - "clone": { - "version": "1.0.4", - "bundled": true - }, - "cmd-shim": { - "version": "3.0.3", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.2", - "mkdirp": "~0.5.0" - } - }, - "co": { - "version": "4.6.0", - "bundled": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true - }, - "color-convert": { - "version": "1.9.1", - "bundled": true, - "requires": { - "color-name": "^1.1.1" - } - }, - "color-name": { - "version": "1.1.3", - "bundled": true - }, - "colors": { - "version": "1.3.3", - "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.6", - "bundled": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "concat-stream": { - "version": "1.6.2", - "bundled": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "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" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "config-chain": { - "version": "1.1.12", - "bundled": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "configstore": { - "version": "3.1.2", - "bundled": true, - "requires": { - "dot-prop": "^4.1.0", - "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": { - "version": "1.1.0", - "bundled": true - }, - "copy-concurrently": { - "version": "1.0.5", - "bundled": true, - "requires": { - "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" - }, - "dependencies": { - "aproba": { - "version": "1.2.0", - "bundled": true - }, - "iferr": { - "version": "0.1.5", - "bundled": true - } - } - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true - }, - "create-error-class": { - "version": "3.0.2", - "bundled": true, - "requires": { - "capture-stack-trace": "^1.0.0" - } - }, - "cross-spawn": { - "version": "5.1.0", - "bundled": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "lru-cache": { - "version": "4.1.5", - "bundled": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "bundled": true - } - } - }, - "crypto-random-string": { - "version": "1.0.0", - "bundled": true - }, - "cyclist": { - "version": "0.2.2", - "bundled": true - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "3.1.0", - "bundled": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "bundled": true - } - } - }, - "debuglog": { - "version": "1.0.1", - "bundled": true - }, - "decamelize": { - "version": "1.2.0", - "bundled": true - }, - "decode-uri-component": { - "version": "0.2.0", - "bundled": true - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true - }, - "defaults": { - "version": "1.0.3", - "bundled": true, - "requires": { - "clone": "^1.0.2" - } - }, - "define-properties": { - "version": "1.1.3", - "bundled": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true - }, - "detect-indent": { - "version": "5.0.0", - "bundled": true - }, - "detect-newline": { - "version": "2.1.0", - "bundled": true - }, - "dezalgo": { - "version": "1.0.3", - "bundled": true, - "requires": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "dot-prop": { - "version": "4.2.0", - "bundled": true, - "requires": { - "is-obj": "^1.0.0" - } - }, - "dotenv": { - "version": "5.0.1", - "bundled": true - }, - "duplexer3": { - "version": "0.1.4", - "bundled": true - }, - "duplexify": { - "version": "3.6.0", - "bundled": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "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" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "bundled": true, - "optional": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "editor": { - "version": "1.0.0", - "bundled": true - }, - "encoding": { - "version": "0.1.12", - "bundled": true, - "requires": { - "iconv-lite": "~0.4.13" - } - }, - "end-of-stream": { - "version": "1.4.1", - "bundled": true, - "requires": { - "once": "^1.4.0" - } - }, - "env-paths": { - "version": "2.2.0", - "bundled": true - }, - "err-code": { - "version": "1.1.2", - "bundled": true - }, - "errno": { - "version": "0.1.7", - "bundled": true, - "requires": { - "prr": "~1.0.1" - } - }, - "es-abstract": { - "version": "1.12.0", - "bundled": true, - "requires": { - "es-to-primitive": "^1.1.1", - "function-bind": "^1.1.1", - "has": "^1.0.1", - "is-callable": "^1.1.3", - "is-regex": "^1.0.4" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "bundled": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es6-promise": { - "version": "4.2.8", - "bundled": true - }, - "es6-promisify": { - "version": "5.0.0", - "bundled": true, - "requires": { - "es6-promise": "^4.0.3" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "bundled": true - }, - "execa": { - "version": "0.7.0", - "bundled": true, - "requires": { - "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" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "bundled": true - } - } - }, - "extend": { - "version": "3.0.2", - "bundled": true - }, - "extsprintf": { - "version": "1.3.0", - "bundled": true - }, - "fast-deep-equal": { - "version": "1.1.0", - "bundled": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "bundled": true - }, - "figgy-pudding": { - "version": "3.5.1", - "bundled": true - }, - "find-npm-prefix": { - "version": "1.0.2", - "bundled": true - }, - "find-up": { - "version": "2.1.0", - "bundled": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "flush-write-stream": { - "version": "1.0.3", - "bundled": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "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" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true - }, - "form-data": { - "version": "2.3.2", - "bundled": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "1.0.6", - "mime-types": "^2.1.12" - } - }, - "from2": { - "version": "2.3.0", - "bundled": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "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" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "fs-minipass": { - "version": "1.2.7", - "bundled": true, - "requires": { - "minipass": "^2.6.0" - }, - "dependencies": { - "minipass": { - "version": "2.9.0", - "bundled": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - } - } - }, - "fs-vacuum": { - "version": "1.2.10", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.2", - "path-is-inside": "^1.0.1", - "rimraf": "^2.5.2" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - }, - "dependencies": { - "iferr": { - "version": "0.1.5", - "bundled": true - }, - "readable-stream": { - "version": "2.3.6", - "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" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.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 - }, - "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" - } - } - } - }, - "genfun": { - "version": "5.0.0", - "bundled": true - }, - "gentle-fs": { - "version": "2.3.0", - "bundled": true, - "requires": { - "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" - }, - "dependencies": { - "aproba": { - "version": "1.2.0", - "bundled": true - }, - "iferr": { - "version": "0.1.5", - "bundled": true - } - } - }, - "get-caller-file": { - "version": "1.0.3", - "bundled": true - }, - "get-stream": { - "version": "4.1.0", - "bundled": true, - "requires": { - "pump": "^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" - } - }, - "global-dirs": { - "version": "0.1.1", - "bundled": true, - "requires": { - "ini": "^1.3.4" - } - }, - "got": { - "version": "6.7.1", - "bundled": true, - "requires": { - "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" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "bundled": true - } - } - }, - "graceful-fs": { - "version": "4.2.4", - "bundled": true - }, - "har-schema": { - "version": "2.0.0", - "bundled": true - }, - "har-validator": { - "version": "5.1.0", - "bundled": true, - "requires": { - "ajv": "^5.3.0", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "bundled": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "bundled": true - }, - "has-symbols": { - "version": "1.0.0", - "bundled": true - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true - }, - "hosted-git-info": { - "version": "2.8.8", - "bundled": true - }, - "http-cache-semantics": { - "version": "3.8.1", - "bundled": true - }, - "http-proxy-agent": { - "version": "2.1.0", - "bundled": true, - "requires": { - "agent-base": "4", - "debug": "3.1.0" - } - }, - "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": "2.2.4", - "bundled": true, - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - } - }, - "humanize-ms": { - "version": "1.2.1", - "bundled": true, - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.23", - "bundled": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "iferr": { - "version": "1.0.2", - "bundled": true - }, - "ignore-walk": { - "version": "3.0.3", - "bundled": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "import-lazy": { - "version": "2.1.0", - "bundled": true - }, - "imurmurhash": { - "version": "0.1.4", - "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": "1.3.5", - "bundled": true - }, - "init-package-json": { - "version": "1.10.3", - "bundled": true, - "requires": { - "glob": "^7.1.1", - "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.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", - "validate-npm-package-name": "^3.0.0" - } - }, - "invert-kv": { - "version": "2.0.0", - "bundled": true - }, - "ip": { - "version": "1.1.5", - "bundled": true - }, - "ip-regex": { - "version": "2.1.0", - "bundled": true - }, - "is-callable": { - "version": "1.1.4", - "bundled": true - }, - "is-ci": { - "version": "1.2.1", - "bundled": true, - "requires": { - "ci-info": "^1.5.0" - }, - "dependencies": { - "ci-info": { - "version": "1.6.0", - "bundled": true - } - } - }, - "is-cidr": { - "version": "3.0.0", - "bundled": true, - "requires": { - "cidr-regex": "^2.0.10" - } - }, - "is-date-object": { - "version": "1.0.1", - "bundled": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-installed-globally": { - "version": "0.1.0", - "bundled": true, - "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" - } - }, - "is-npm": { - "version": "1.0.0", - "bundled": true - }, - "is-obj": { - "version": "1.0.1", - "bundled": true - }, - "is-path-inside": { - "version": "1.0.1", - "bundled": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-redirect": { - "version": "1.0.0", - "bundled": true - }, - "is-regex": { - "version": "1.0.4", - "bundled": true, - "requires": { - "has": "^1.0.1" - } - }, - "is-retry-allowed": { - "version": "1.2.0", - "bundled": true - }, - "is-stream": { - "version": "1.1.0", - "bundled": true - }, - "is-symbol": { - "version": "1.0.2", - "bundled": true, - "requires": { - "has-symbols": "^1.0.0" - } - }, - "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, - "optional": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "bundled": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true - }, - "json-schema-traverse": { - "version": "0.3.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" - } - }, - "latest-version": { - "version": "3.1.0", - "bundled": true, - "requires": { - "package-json": "^4.0.0" - } - }, - "lazy-property": { - "version": "1.0.0", - "bundled": true - }, - "lcid": { - "version": "2.0.0", - "bundled": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "libcipm": { - "version": "4.0.7", - "bundled": true, - "requires": { - "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.0.2", - "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": { - "version": "3.0.1", - "bundled": true, - "requires": { - "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" - } - }, - "libnpmaccess": { - "version": "3.0.2", - "bundled": true, - "requires": { - "aproba": "^2.0.0", - "get-stream": "^4.0.0", - "npm-package-arg": "^6.1.0", - "npm-registry-fetch": "^4.0.0" - } - }, - "libnpmconfig": { - "version": "1.2.1", - "bundled": true, - "requires": { - "figgy-pudding": "^3.5.1", - "find-up": "^3.0.0", - "ini": "^1.3.5" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "bundled": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "bundled": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.2.0", - "bundled": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "bundled": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "bundled": true - } - } - }, - "libnpmhook": { - "version": "5.0.3", - "bundled": true, - "requires": { - "aproba": "^2.0.0", - "figgy-pudding": "^3.4.1", - "get-stream": "^4.0.0", - "npm-registry-fetch": "^4.0.0" - } - }, - "libnpmorg": { - "version": "1.0.1", - "bundled": true, - "requires": { - "aproba": "^2.0.0", - "figgy-pudding": "^3.4.1", - "get-stream": "^4.0.0", - "npm-registry-fetch": "^4.0.0" - } - }, - "libnpmpublish": { - "version": "1.1.2", - "bundled": true, - "requires": { - "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": { - "version": "2.0.2", - "bundled": true, - "requires": { - "figgy-pudding": "^3.5.1", - "get-stream": "^4.0.0", - "npm-registry-fetch": "^4.0.0" - } - }, - "libnpmteam": { - "version": "1.0.2", - "bundled": true, - "requires": { - "aproba": "^2.0.0", - "figgy-pudding": "^3.4.1", - "get-stream": "^4.0.0", - "npm-registry-fetch": "^4.0.0" - } - }, - "libnpx": { - "version": "10.2.2", - "bundled": true, - "requires": { - "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": "^11.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "bundled": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lock-verify": { - "version": "2.1.0", - "bundled": true, - "requires": { - "npm-package-arg": "^6.1.0", - "semver": "^5.4.1" - } - }, - "lockfile": { - "version": "1.0.4", - "bundled": true, - "requires": { - "signal-exit": "^3.0.2" - } - }, - "lodash._baseindexof": { - "version": "3.1.0", - "bundled": true - }, - "lodash._baseuniq": { - "version": "4.6.0", - "bundled": true, - "requires": { - "lodash._createset": "~4.0.0", - "lodash._root": "~3.0.0" - } - }, - "lodash._bindcallback": { - "version": "3.0.1", - "bundled": true - }, - "lodash._cacheindexof": { - "version": "3.0.2", - "bundled": true - }, - "lodash._createcache": { - "version": "3.1.2", - "bundled": true, - "requires": { - "lodash._getnative": "^3.0.0" - } - }, - "lodash._createset": { - "version": "4.0.3", - "bundled": true - }, - "lodash._getnative": { - "version": "3.9.1", - "bundled": true - }, - "lodash._root": { - "version": "3.0.1", - "bundled": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "bundled": true - }, - "lodash.restparam": { - "version": "3.6.1", - "bundled": true - }, - "lodash.union": { - "version": "4.6.0", - "bundled": true - }, - "lodash.uniq": { - "version": "4.5.0", - "bundled": true - }, - "lodash.without": { - "version": "4.4.0", - "bundled": true - }, - "lowercase-keys": { - "version": "1.0.1", - "bundled": true - }, - "lru-cache": { - "version": "5.1.1", - "bundled": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "make-dir": { - "version": "1.3.0", - "bundled": true, - "requires": { - "pify": "^3.0.0" - } - }, - "make-fetch-happen": { - "version": "5.0.2", - "bundled": true, - "requires": { - "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", - "promise-retry": "^1.1.1", - "socks-proxy-agent": "^4.0.0", - "ssri": "^6.0.0" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "bundled": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "meant": { - "version": "1.0.1", - "bundled": true - }, - "mem": { - "version": "4.3.0", - "bundled": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - }, - "dependencies": { - "mimic-fn": { - "version": "2.1.0", - "bundled": true - } - } - }, - "mime-db": { - "version": "1.35.0", - "bundled": true - }, - "mime-types": { - "version": "2.1.19", - "bundled": true, - "requires": { - "mime-db": "~1.35.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minizlib": { - "version": "1.3.3", - "bundled": true, - "requires": { - "minipass": "^2.9.0" - }, - "dependencies": { - "minipass": { - "version": "2.9.0", - "bundled": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - } - } - }, - "mississippi": { - "version": "3.0.0", - "bundled": true, - "requires": { - "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": { - "version": "0.5.5", - "bundled": true, - "requires": { - "minimist": "^1.2.5" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "bundled": true - } - } - }, - "move-concurrently": { - "version": "1.0.1", - "bundled": true, - "requires": { - "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" - }, - "dependencies": { - "aproba": { - "version": "1.2.0", - "bundled": true - } - } - }, - "ms": { - "version": "2.1.1", - "bundled": true - }, - "mute-stream": { - "version": "0.0.7", - "bundled": true - }, - "nice-try": { - "version": "1.0.5", - "bundled": true - }, - "node-fetch-npm": { - "version": "2.0.2", - "bundled": true, - "requires": { - "encoding": "^0.1.11", - "json-parse-better-errors": "^1.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node-gyp": { - "version": "5.1.0", - "bundled": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.2", - "mkdirp": "^0.5.1", - "nopt": "^4.0.1", - "npmlog": "^4.1.2", - "request": "^2.88.0", - "rimraf": "^2.6.3", - "semver": "^5.7.1", - "tar": "^4.4.12", - "which": "^1.3.1" - } - }, - "nopt": { - "version": "4.0.3", - "bundled": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "bundled": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "resolve": { - "version": "1.10.0", - "bundled": true, - "requires": { - "path-parse": "^1.0.6" - } - } - } - }, - "npm-audit-report": { - "version": "1.3.2", - "bundled": true, - "requires": { - "cli-table3": "^0.5.0", - "console-control-strings": "^1.1.0" - } - }, - "npm-bundled": { - "version": "1.1.1", - "bundled": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-cache-filename": { - "version": "1.0.2", - "bundled": true - }, - "npm-install-checks": { - "version": "3.0.2", - "bundled": true, - "requires": { - "semver": "^2.3.0 || 3.x || 4 || 5" - } - }, - "npm-lifecycle": { - "version": "3.1.4", - "bundled": true, - "requires": { - "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": { - "version": "1.2.1", - "bundled": true - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "bundled": true - }, - "npm-package-arg": { - "version": "6.1.1", - "bundled": true, - "requires": { - "hosted-git-info": "^2.7.1", - "osenv": "^0.1.5", - "semver": "^5.6.0", - "validate-npm-package-name": "^3.0.0" - } - }, - "npm-packlist": { - "version": "1.4.8", - "bundled": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-pick-manifest": { - "version": "3.0.2", - "bundled": true, - "requires": { - "figgy-pudding": "^3.5.1", - "npm-package-arg": "^6.0.0", - "semver": "^5.4.1" - } - }, - "npm-profile": { - "version": "4.0.4", - "bundled": true, - "requires": { - "aproba": "^1.1.2 || 2", - "figgy-pudding": "^3.4.1", - "npm-registry-fetch": "^4.0.0" - } - }, - "npm-registry-fetch": { - "version": "4.0.5", - "bundled": true, - "requires": { - "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" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "bundled": true - } - } - }, - "npm-run-path": { - "version": "2.0.2", - "bundled": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "npm-user-validate": { - "version": "1.0.0", - "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 - }, - "object-keys": { - "version": "1.0.12", - "bundled": true - }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "bundled": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" - } - }, - "once": { - "version": "1.4.0", - "bundled": true, - "requires": { - "wrappy": "1" - } - }, - "opener": { - "version": "1.5.1", - "bundled": true - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true - }, - "os-locale": { - "version": "3.1.0", - "bundled": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "bundled": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "1.0.0", - "bundled": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.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" - } - } - } - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "p-defer": { - "version": "1.0.0", - "bundled": true - }, - "p-finally": { - "version": "1.0.0", - "bundled": true - }, - "p-is-promise": { - "version": "2.1.0", - "bundled": true - }, - "p-limit": { - "version": "1.2.0", - "bundled": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "bundled": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "bundled": true - }, - "package-json": { - "version": "4.0.1", - "bundled": true, - "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - } - }, - "pacote": { - "version": "9.5.12", - "bundled": true, - "requires": { - "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", - "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" - }, - "dependencies": { - "minipass": { - "version": "2.9.0", - "bundled": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - } - } - }, - "parallel-transform": { - "version": "1.1.0", - "bundled": true, - "requires": { - "cyclist": "~0.2.2", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "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" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "path-exists": { - "version": "3.0.0", - "bundled": true - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true - }, - "path-is-inside": { - "version": "1.0.2", - "bundled": true - }, - "path-key": { - "version": "2.0.1", - "bundled": true - }, - "path-parse": { - "version": "1.0.6", - "bundled": true - }, - "performance-now": { - "version": "2.1.0", - "bundled": true - }, - "pify": { - "version": "3.0.0", - "bundled": true - }, - "prepend-http": { - "version": "1.0.4", - "bundled": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true - }, - "promise-inflight": { - "version": "1.0.1", - "bundled": true - }, - "promise-retry": { - "version": "1.1.1", - "bundled": true, - "requires": { - "err-code": "^1.0.0", - "retry": "^0.10.0" - }, - "dependencies": { - "retry": { - "version": "0.10.1", - "bundled": true - } - } - }, - "promzard": { - "version": "0.3.0", - "bundled": true, - "requires": { - "read": "1" - } - }, - "proto-list": { - "version": "1.2.4", - "bundled": true - }, - "protoduck": { - "version": "5.0.1", - "bundled": true, - "requires": { - "genfun": "^5.0.0" - } - }, - "prr": { - "version": "1.0.1", - "bundled": true - }, - "pseudomap": { - "version": "1.0.2", - "bundled": true - }, - "psl": { - "version": "1.1.29", - "bundled": true - }, - "pump": { - "version": "3.0.0", - "bundled": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "bundled": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "bundled": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "1.4.1", - "bundled": true - }, - "qrcode-terminal": { - "version": "0.12.0", - "bundled": true - }, - "qs": { - "version": "6.5.2", - "bundled": true - }, - "query-string": { - "version": "6.8.2", - "bundled": true, - "requires": { - "decode-uri-component": "^0.2.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" - } - }, - "qw": { - "version": "1.0.1", - "bundled": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "bundled": true - } - } - }, - "read": { - "version": "1.0.7", - "bundled": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, - "read-cmd-shim": { - "version": "1.0.5", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.2" - } - }, - "read-installed": { - "version": "4.0.3", - "bundled": true, - "requires": { - "debuglog": "^1.0.1", - "graceful-fs": "^4.1.2", - "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" - } - }, - "read-package-json": { - "version": "2.1.1", - "bundled": true, - "requires": { - "glob": "^7.1.1", - "graceful-fs": "^4.1.2", - "json-parse-better-errors": "^1.0.1", - "normalize-package-data": "^2.0.0", - "npm-normalize-package-bin": "^1.0.0" - } - }, - "read-package-tree": { - "version": "5.3.1", - "bundled": true, - "requires": { - "read-package-json": "^2.0.0", - "readdir-scoped-modules": "^1.0.0", - "util-promisify": "^2.1.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "bundled": true, - "requires": { - "inherits": "^2.0.3", - "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" - } - }, - "registry-auth-token": { - "version": "3.4.0", - "bundled": true, - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "registry-url": { - "version": "3.1.0", - "bundled": true, - "requires": { - "rc": "^1.0.1" - } - }, - "request": { - "version": "2.88.0", - "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.0", - "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.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "require-directory": { - "version": "2.1.1", - "bundled": true - }, - "require-main-filename": { - "version": "1.0.1", - "bundled": true - }, - "resolve-from": { - "version": "4.0.0", - "bundled": true - }, - "retry": { - "version": "0.12.0", - "bundled": true - }, - "rimraf": { - "version": "2.7.1", - "bundled": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-queue": { - "version": "1.0.3", - "bundled": true, - "requires": { - "aproba": "^1.1.1" - }, - "dependencies": { - "aproba": { - "version": "1.2.0", - "bundled": true - } - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true - }, - "semver": { - "version": "5.7.1", - "bundled": true - }, - "semver-diff": { - "version": "2.1.0", - "bundled": true, - "requires": { - "semver": "^5.0.3" - } - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true - }, - "sha": { - "version": "3.0.0", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.2" - } - }, - "shebang-command": { - "version": "1.2.0", - "bundled": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "bundled": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true - }, - "slide": { - "version": "1.1.6", - "bundled": true - }, - "smart-buffer": { - "version": "4.1.0", - "bundled": true - }, - "socks": { - "version": "2.3.3", - "bundled": true, - "requires": { - "ip": "1.1.5", - "smart-buffer": "^4.1.0" - } - }, - "socks-proxy-agent": { - "version": "4.0.2", - "bundled": true, - "requires": { - "agent-base": "~4.2.1", - "socks": "~2.3.2" - }, - "dependencies": { - "agent-base": { - "version": "4.2.1", - "bundled": true, - "requires": { - "es6-promisify": "^5.0.0" - } - } - } - }, - "sorted-object": { - "version": "2.0.1", - "bundled": true - }, - "sorted-union-stream": { - "version": "2.1.3", - "bundled": true, - "requires": { - "from2": "^1.3.0", - "stream-iterate": "^1.1.0" - }, - "dependencies": { - "from2": { - "version": "1.3.0", - "bundled": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "~1.1.10" - } - }, - "isarray": { - "version": "0.0.1", - "bundled": true - }, - "readable-stream": { - "version": "1.1.14", - "bundled": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "bundled": true - } - } - }, - "spdx-correct": { - "version": "3.0.0", - "bundled": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.1.0", - "bundled": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "bundled": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.5", - "bundled": true - }, - "split-on-first": { - "version": "1.1.0", - "bundled": true - }, - "sshpk": { - "version": "1.14.2", - "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": "6.0.1", - "bundled": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "stream-each": { - "version": "1.2.2", - "bundled": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-iterate": { - "version": "1.2.0", - "bundled": true, - "requires": { - "readable-stream": "^2.1.5", - "stream-shift": "^1.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "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" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "stream-shift": { - "version": "1.0.0", - "bundled": true - }, - "strict-uri-encode": { - "version": "2.0.0", - "bundled": true - }, - "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 - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "bundled": true - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string_decoder": { - "version": "1.3.0", - "bundled": true, - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.0", - "bundled": true - } - } - }, - "stringify-package": { - "version": "1.0.1", - "bundled": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "bundled": true - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true - }, - "supports-color": { - "version": "5.4.0", - "bundled": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "tar": { - "version": "4.4.13", - "bundled": true, - "requires": { - "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" - }, - "dependencies": { - "minipass": { - "version": "2.9.0", - "bundled": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - } - } - }, - "term-size": { - "version": "1.2.0", - "bundled": true, - "requires": { - "execa": "^0.7.0" - } - }, - "text-table": { - "version": "0.2.0", - "bundled": true - }, - "through": { - "version": "2.3.8", - "bundled": true - }, - "through2": { - "version": "2.0.3", - "bundled": true, - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "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" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "timed-out": { - "version": "4.0.1", - "bundled": true - }, - "tiny-relative-date": { - "version": "1.3.0", - "bundled": true - }, - "tough-cookie": { - "version": "2.4.3", - "bundled": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "optional": true - }, - "typedarray": { - "version": "0.0.6", - "bundled": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true - }, - "umask": { - "version": "1.1.0", - "bundled": true - }, - "unique-filename": { - "version": "1.1.1", - "bundled": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.0", - "bundled": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unique-string": { - "version": "1.0.0", - "bundled": true, - "requires": { - "crypto-random-string": "^1.0.0" - } - }, - "unpipe": { - "version": "1.0.0", - "bundled": true - }, - "unzip-response": { - "version": "2.0.1", - "bundled": true - }, - "update-notifier": { - "version": "2.5.0", - "bundled": true, - "requires": { - "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" - } - }, - "url-parse-lax": { - "version": "1.0.0", - "bundled": true, - "requires": { - "prepend-http": "^1.0.1" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true - }, - "util-extend": { - "version": "1.0.3", - "bundled": true - }, - "util-promisify": { - "version": "2.1.0", - "bundled": true, - "requires": { - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "uuid": { - "version": "3.3.3", - "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" - } - }, - "wcwidth": { - "version": "1.0.1", - "bundled": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "which": { - "version": "1.3.1", - "bundled": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "bundled": true - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "requires": { - "string-width": "^1.0.2" - }, - "dependencies": { - "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" - } - } - } - }, - "widest-line": { - "version": "2.0.1", - "bundled": true, - "requires": { - "string-width": "^2.1.1" - } - }, - "worker-farm": { - "version": "1.7.0", - "bundled": true, - "requires": { - "errno": "~0.1.7" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "bundled": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "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" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true - }, - "write-file-atomic": { - "version": "2.4.3", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "xdg-basedir": { - "version": "3.0.0", - "bundled": true - }, - "xtend": { - "version": "4.0.1", - "bundled": true - }, - "y18n": { - "version": "4.0.0", - "bundled": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true - }, - "yargs": { - "version": "11.1.1", - "bundled": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.1.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": "^9.0.2" - }, - "dependencies": { - "y18n": { - "version": "3.2.1", - "bundled": true - } - } - }, - "yargs-parser": { - "version": "9.0.2", - "bundled": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, - "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.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "requires": { - "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.0", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.0.tgz", - "integrity": "sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==", - "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.3", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", - "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", - "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.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", - "dev": true - }, - "tslint": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.2.tgz", - "integrity": "sha512-UyNrLdK3E0fQG/xWNqAFAC5ugtFyPO4JJR1KyyfQAyzR8W0fTRrC91A8Wej4BntFzcvETdCSDa/4PnNYJQLYiA==", - "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.10.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.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz", - "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==", - "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.27", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", - "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=" - }, - "xpath": { - "version": "0.0.27", - "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.27.tgz", - "integrity": "sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ==" - } - } -} From 8928cb77132df4cbb64d5cfb167e61473d9c6a81 Mon Sep 17 00:00:00 2001 From: danielebercovici Date: Thu, 6 Aug 2020 09:19:59 -0700 Subject: [PATCH 296/660] [Outlook] Add Samples for sessionData APIs (#470) * sessionData APIs * Update samples/outlook/99-preview-apis/session-data-apis.yaml Co-authored-by: Elizabeth Samuel * Update samples/outlook/99-preview-apis/session-data-apis.yaml Co-authored-by: Elizabeth Samuel * Update samples/outlook/99-preview-apis/session-data-apis.yaml Co-authored-by: Elizabeth Samuel Co-authored-by: Daniele Bercovici Co-authored-by: Elizabeth Samuel --- playlists/outlook.yaml | 7 ++ .../99-preview-apis/session-data-apis.yaml | 116 ++++++++++++++++++ 2 files changed, 123 insertions(+) create mode 100644 samples/outlook/99-preview-apis/session-data-apis.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 07830e4fe..a41af5c3f 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -597,3 +597,10 @@ group: Preview APIs api_set: Mailbox: preview +- id: outlook-session-data-apis + name: Session Data APIs (Compose) + fileName: outlook-session-data-apis.yaml + description: >- + Set, get, get all, remove and clear session data in Compose mode. + rawUrl: >- + https://raw.githubusercontent.com////samples/outlook/99-preview-apis/outlook-session-data-apis.yaml diff --git a/samples/outlook/99-preview-apis/session-data-apis.yaml b/samples/outlook/99-preview-apis/session-data-apis.yaml new file mode 100644 index 000000000..c695796de --- /dev/null +++ b/samples/outlook/99-preview-apis/session-data-apis.yaml @@ -0,0 +1,116 @@ +id: outlook-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 +script: + content: | + $("#setSessionData").click(setSessionData); + $("#getSessionData").click(getSessionData); + $("#getAllSessionData").click(getAllSessionData); + $("#removeSessionData").click(removeSessionData); + $("#clearSessionData").click(clearSessionData); + function setSessionData() { + Office.context.mailbox.item.sessionData.setAsync( + "Date", + "7/24/2020", + function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("sessionData.setAsync succeeded"); + } else { + console.log("Failed to set sessionData. Error: " + JSON.stringify(asyncResult.error)); + } + }); + } + function getSessionData() { + 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)); + } + }); + } + function getAllSessionData() { + 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)); + } + }); + } + function removeSessionData() { + Office.context.mailbox.item.sessionData.removeAsync( + "Date", + function callback(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("sessionData.removeAsync succeeded"); + } else { + console.log("Failed to remove sessionData. Error: " + JSON.stringify(asyncResult.error)); + } + } + ); + } + function clearSessionData() { + Office.context.mailbox.item.sessionData.clearAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("sessionData.clearAsync succeeded"); + } else { + console.log("Failed to clear sessionData. Error: " + JSON.stringify(asyncResult.error)); + } + }); + } + language: typescript +template: + content: |- +
      +

      This sample shows how to set, get, get all, remove, and clear session data in compose mode. +

      + Required mode: Compose +

      +

      +
      +
      + + + + + + +
      + 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 From beecd32482f9030f4a67f67ddf202c1c6a603a33 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 6 Aug 2020 14:50:48 -0700 Subject: [PATCH 297/660] [Outlook] Map sessionData snippets (#475) --- playlists/outlook.yaml | 16 +-- .../display-existing-message.yaml | 2 +- .../99-preview-apis/session-data-apis.yaml | 4 +- snippet-extractor-metadata/outlook.xlsx | Bin 20153 -> 20399 bytes snippet-extractor-output/snippets.yaml | 94 +++++++++++++++++- view/outlook.json | 1 + 6 files changed, 106 insertions(+), 11 deletions(-) diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index a41af5c3f..1c3fc523c 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -586,6 +586,15 @@ 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////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 @@ -597,10 +606,3 @@ group: Preview APIs api_set: Mailbox: preview -- id: outlook-session-data-apis - name: Session Data APIs (Compose) - fileName: outlook-session-data-apis.yaml - description: >- - Set, get, get all, remove and clear session data in Compose mode. - rawUrl: >- - https://raw.githubusercontent.com////samples/outlook/99-preview-apis/outlook-session-data-apis.yaml diff --git a/samples/outlook/99-preview-apis/display-existing-message.yaml b/samples/outlook/99-preview-apis/display-existing-message.yaml index 914e7a86d..02ac7fadf 100644 --- a/samples/outlook/99-preview-apis/display-existing-message.yaml +++ b/samples/outlook/99-preview-apis/display-existing-message.yaml @@ -22,7 +22,7 @@ script: // The async version will return error 9049 if the item is not found. // The async version is only available in preview. - Office.context.mailbox.displayAppointmentFormAsync(itemId, function (asyncResult) { + Office.context.mailbox.displayMessageFormAsync(itemId, function (asyncResult) { console.log("Result: " + JSON.stringify(asyncResult)); }); } diff --git a/samples/outlook/99-preview-apis/session-data-apis.yaml b/samples/outlook/99-preview-apis/session-data-apis.yaml index c695796de..758ba3cf7 100644 --- a/samples/outlook/99-preview-apis/session-data-apis.yaml +++ b/samples/outlook/99-preview-apis/session-data-apis.yaml @@ -1,6 +1,6 @@ id: outlook-session-data-apis name: Work with session data APIs (Compose) -description: Set, get, get all, remove, and clear session data in Compose mode. +description: 'Set, get, get all, remove, and clear session data in Compose mode.' host: OUTLOOK api_set: Mailbox: preview @@ -113,4 +113,4 @@ libraries: | 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/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 725eb7056c0dc344bcdd0912ff517f12691c80be..96e5543f9750031dab981267386c5ab30b027b1a 100644 GIT binary patch delta 10968 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 delta 10728 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
      ;OJB8-x^Z<5L2&S zO80q06};!9OI_Q03QB+2KP@-_5T;=`tX&1kZ5Th|m*yYigJ0k(d?P+3b_2P-wZbWt z+>#;r7np>!p#9bmlgW1pKs)$m2Gt`MM%UMg5d8ZybSXT-#lX?@G;|V^9erHJ01N^c zJxEehS|@RTif7gd<`$$8(naGb}F3pRniSl=_Mij^vE zNpO#%f0VV4;-m$MDYUF977JMzmr@xFtbCRqcy+%BFgo> zu#96oFDs~Om;W%$LIy&sYp2O$IWEkpfc@F3v-v^Lv^SDq;gZB^CEbthM&#o-7{`7H zI(Jm#BnbEk%In)b`yY6YRP~K0L-cQh(Zc}St56qK@_ZO&Y1|+D%cRb$s=c}|J1Q-* zy0stMs`9F*ls_n+vA5_#!IBlnuFhXFC+l}Bb3J9uRO^OVUG$4#sotEaJh1f{T2~|~ zj4SvWojYVjduN2)fzDV{TEwbFh#CkiiSsu#&hZ|Oah7CyZKJx5`^9h`Fz9R`^=x>J zT7oKYu$s`ctB^8LO7NKT8arke{-G$MU^9XYjr6hEAiAaS`hPge+#WIE|mHlWXiG`-LA?)sVPgms3iI9ktC-i*9#^^RNF_2s3J&Rf9!% zN+2Ow8u59s6ZpPP#SW-J(h?J*U%@taZ)&V99fX7TDi%vHN)Vr&3nq!EOh2w{@?ep5&MY}xWAoo3W~!R3<&j0fXh zXmaVwG3B$!HO z;&J@jof;j{ufvnSH}$?ZGig1a{kWQQ^_uY3<}t4`M94U>N%m6z*c8TLTY(INt$~WX zItZ1fWwd})Y8wy!G;_R4?{vZ3_%|*hC&e!${QMG}zz&XYvVBg_`a@)ClK|r{Pk2ekQX*x3lIMTKsf?8P<7%fOXT&;eRD=Q>5g@+v%xW%}$yu}= z)7U%ub+H8Hj?3c9HdUDbEWHcSu&xe;Dg`u00fY7=gS0ZLiRY2QP2>8{=iI#3qe5BV z@#)x)6Dt$I0D|@UYC+Z0O%uN1ZI+8cXQd6Rqn0YH)i%ecpQQH_OCt4rw7n4R*yv8; z`3?Bj+PQ-ECyAfOeE;@_u$@icZyIYP=%B&siUaJppSIxMBu4_WdA$TB)fNf5Ph zx6IvJwX(TszHGd9+jTCWe|BlV{~9Q8pW;}b;dKe~Lpy#{9eao#YKU09Tsgsb%!*$& z)Jq9Tn-AID6Dk&O=vM0o&t80}&73WJ4S?7;r6Ki%#3^SE*J7-d;!Av&q@UXc!N^xI z+XTGBkKPq{_UIi0=IzvCj^QCSJY*go7`v*&JcB5t-LA2?9Gd_F!ZA?K;mY-K|K_7k?u`~DGb{R3ex z-s?CT`%Ifiks%rs6{o<&FqVj!pBxEpA5HgecK8X23;$1Ejc zx0Hr~*2k0g?XcnN#zhJ`nqT09303sKvgBOKVCp!-7v(6rzNF{BKDfRAZMa#b_2B>K z5M-Pp2s!|=rN~13|DXGMKl=4QR}F+tNgCin2XR&s1)Q@&YL&=I{@->T3JUjs1OIF9 zIUt*ycqz(^0A&FPv$6ufUl5W6q=9^W_nZJB(89Ekv-ev#VF- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-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)); + } 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/master/samples/outlook/99-preview-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)); + } else { + console.log("Failed to get all sessionData. Error: " + JSON.stringify(asyncResult.error)); + } + }); +'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 + + Office.context.mailbox.item.sessionData.setAsync( + "Date", + "7/24/2020", + function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("sessionData.setAsync succeeded"); + } else { + console.log("Failed to set sessionData. Error: " + JSON.stringify(asyncResult.error)); + } + }); +'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 + + 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#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 + + 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#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 + + Office.context.mailbox.item.sessionData.removeAsync( + "Date", + function callback(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("sessionData.removeAsync succeeded"); + } else { + console.log("Failed to remove sessionData. Error: " + JSON.stringify(asyncResult.error)); + } + } + ); +'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 + + Office.context.mailbox.item.sessionData.clearAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("sessionData.clearAsync succeeded"); + } else { + console.log("Failed to clear sessionData. Error: " + JSON.stringify(asyncResult.error)); + } + }); 'Word.Body#search:member(1)': - >- // Link to full sample: diff --git a/view/outlook.json b/view/outlook.json index 3babf5480..f4b2ce723 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -62,5 +62,6 @@ "outlook-display-items-display-new-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/display-new-message.yaml", "outlook-display-items-display-reply-forms": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/display-reply-forms.yaml", "outlook-display-items-display-reply-with-attachments": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/display-reply-with-attachments.yaml", + "outlook-session-data-apis": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/session-data-apis.yaml", "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/work-with-client-signatures.yaml" } \ No newline at end of file From 0636a42fba7862e2f99bab97cdce75fe657d5299 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 6 Aug 2020 15:39:53 -0700 Subject: [PATCH 298/660] [excel] (PivotTables) Adding getPivotTables sample (#472) * Adding getPivotTables sample * Apply suggestions from code review Co-authored-by: Alison McKay * Adding multi-selection note Co-authored-by: Alison McKay --- playlists/excel.yaml | 13 +- .../pivottable-get-pivottables.yaml | 195 ++++++++++++++++++ .../workbook-insert-external-worksheets.yaml | 4 +- snippet-extractor-metadata/excel.xlsx | Bin 21585 -> 21720 bytes snippet-extractor-output/snippets.yaml | 61 ++++++ view/excel.json | 1 + 6 files changed, 271 insertions(+), 3 deletions(-) create mode 100644 samples/excel/85-preview-apis/pivottable-get-pivottables.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 78c65b884..93105f5f1 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -935,6 +935,17 @@ group: Worksheet api_set: ExcelApi: '1.1' +- 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////samples/excel/85-preview-apis/pivottable-get-pivottables.yaml + group: Preview APIs + api_set: + ExcelAPI: '1.12' - id: excel-workbook-insert-external-worksheets name: Insert external worksheets fileName: workbook-insert-external-worksheets.yaml @@ -943,7 +954,7 @@ https://raw.githubusercontent.com////samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml group: Preview APIs api_set: - ExcelAPI: '1.11' + ExcelAPI: '1.13' - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/samples/excel/85-preview-apis/pivottable-get-pivottables.yaml b/samples/excel/85-preview-apis/pivottable-get-pivottables.yaml new file mode 100644 index 000000000..9560ac850 --- /dev/null +++ b/samples/excel/85-preview-apis/pivottable-get-pivottables.yaml @@ -0,0 +1,195 @@ +order: 1 +id: excel-pivottables-get-pivottables +name: Get PivotTables +description: Get existing PivotTables in the workbook through their collections and through the ranges they occupy. +host: EXCEL +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)); + async function getPivotTablesInWorkbook() { + 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}`); + }); + }); + } + + async function getPivotTablesInWorksheet() { + await Excel.run(async (context) => { + // Get the names of all the PivotTables in the current worksheet. + const pivotTables = context.workbook.worksheets.getActiveWorksheet().pivotTables; + pivotTables.load("name"); + await context.sync(); + + // Display the names in the console. + console.log("PivotTables in the current worksheet:") + pivotTables.items.forEach((pivotTable) => { + console.log(`\t${pivotTable.name}`); + }); + }); + } + + async function getPivotTablesInSelectedRange() { + 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}`); + }); + }); + } + + 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(); + context.workbook.worksheets.getItemOrNullObject("FilteredPivot").delete(); + const totalPivot = context.workbook.worksheets.add("TotalPivot"); + const filteredPivot = context.workbook.worksheets.add("FilteredPivot"); + + // 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 first 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")); + + // Create the second PivotTable. + const pivotTable2 = filteredPivot.pivotTables.add("Filtered Wholesale", "Data!A1:E21", "FilteredPivot!A2"); + pivotTable2.rowHierarchies.add(pivotTable2.hierarchies.getItem("Farm")); + pivotTable2.rowHierarchies.add(pivotTable2.hierarchies.getItem("Type")); + pivotTable2.dataHierarchies.add(pivotTable2.hierarchies.getItem("Crates Sold Wholesale")); + pivotTable2.filterHierarchies.add(pivotTable2.hierarchies.getItem("Classification")); + + // Switch to one of the worksheets 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 PivotTables in the workbook. You can get them through PivotTableCollection objects + or by querying a Range object containing PivotTable data.

      +
      + +
      +

      Set up

      +

      This creates a data sheet and two PivotTables in two different worksheets. + +

      + +
      +

      Try it out

      +
      + +
      + +

      + +

      + +

      Note that this button only works with a single selected range. + Multi-range selections aren't supported by `getPivotTables` at this time.

      +
      + 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/excel/85-preview-apis/workbook-insert-external-worksheets.yaml b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml index 446d4e508..7e0a7d013 100644 --- a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml +++ b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml @@ -1,10 +1,10 @@ -order: 5 +order: 2 id: excel-workbook-insert-external-worksheets name: Insert external worksheets description: Inserts worksheets from another workbook into the current workbook. host: EXCEL api_set: - ExcelAPI: '1.11' + ExcelAPI: '1.13' script: content: | $("#file").change(() => tryCatch(insertSheets)); diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 0a7bdec19563e000943822675966ebe427908387..c1b70eaf4c801b9b5028e8b57a087e3fc4610c79 100644 GIT binary patch delta 12389 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 fKmNnXo&-2k&1L`a>NoI$nYR{;{}FAI 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
      0ig zzE(?rZ&Cp^S#f*rRIOe>Q1G>jURonMCaBH6+8dV&9K$v)SNIdIT1unHu=WEyR~`f1 z<7WsFIJh9_&l4J-3&DOi+MnUCT=_1Z1(s*Z= znO#o`t^MzxI%~?_c*>)O_u{Ka zO#dT4%uCu{H&yoAV4UpRBY5}NodV$f$$2ez+9I;RIGU6Ke{h}`V0>p$@Z(-U;G^Q^ zkyO~jLKEk#s>_RJIykDJO`d$&szN?*m^Bg@UJM32_CoBSvBBAFVj-Zg!=CTU zhJXjr>MSWS#qXjj<%n_89}5Ser$yB*EMFQLVKRfso9Fi=s0y8mz9!z1D8o2bcJ;<8 zv56(Gc#-Ta$uLcSzUTh5cCH|@^PoQ9WwZH&DQIF_R%p5 zTuDarL3FZj3Iix7s+S5_0Z}OZU`oOeMYV-1j&tl1?6*(;#VsKvskB4tR{Kn2SqfPK zGZI@rYOebQQKAl!9PT=&qa#XX%~}1k0+a_^ZynS#S1fhTuf|3MYc!L6HV7AmkiO8C zk?$hxhxESP6*5cXf@8MOL_2-n0GR(e_~HcALDeCm!UzZty0kvaaf4DUfVZiXdY(wc z{EsrszhYC8ab&msa$lu1sStiTIxs)3DK3`S(hDm4+%a$Px~{YML?=P2maGbMg#Ji)9dTeYSrGi_op@7N0s$%`qHsB-XfeX zg>A|}rOGm3@%6z_QRlm;HN zabzy^A#bcjV|hb1cP(gx4M5xjRYHc!^cJ6zZq329wbf*4I* z0Dm|4WX{PaOF}o`r?6_V1$~)|HQ4CBB0bDH_D|#YTFoxAcslDD@kPa{J&?&^yHKc= zhN&I|3Z@+2Zh(O=!0VTTgDtK`i-qUGlL}|p`5WQhEuR{!&=N8SKcCtLvRBm2F& zEr%5!7wte?7cBqD5+rZLi`wyyJTskd^@up--ktk81u+{iPqpHPWuP?>3)vdHbU+?t zE@c=tl_1_*BB@BW)IoTQSiUXc`u4NyU?|PKwO|G zOpwj|m#HS*?{}?7Zj-mqYnvN^sGAN+R#0K z;v^OF#;ehX#rL-b+jo<;98mZ0Cddt7guybyM43wdzaU4T^WMx-sa}+&hXqu-C~$wQ zDL-SPpRxQnbUR?`_>Xhn}Jz_?RSgV16)| zW|X7}1H&jxSE;3+` zyxKQs{J4;H(ckYh7QzVxA=_mr?&E$1pO-ld!i-6ly$#TM3v6=e4$SYL;oI3Vjhnz- z61C0P{+F64mhPD*6owg_(2cQ9828$PAKB-`ERC*;?a!{Tm#^zLs4~I~O#)s>{eS5{ zzmU-Huy}eHvZ$$i=0rzEJ{Sq3i%?lOInEt%c57E&6Mo|)wbxw9z-I= zQuP20;s&y3f5dTkSe65-~tXmusn1%TNZU%<=|2)NUYG7$to47=<7~DQf z+&q|^WWn1_uN48{z*yC0pEy20iirLID;A#`Yfu>;Ez-9LJ_9 Z0@o=Y=cFkF=dTo3u1SlSsrnz}{{bJT_(T8z diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 64d043b30..ade4f599d 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -2297,6 +2297,33 @@ await context.sync(); }); +'Excel.Range#getPivotTables:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/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#sort:member': - >- // Link to full sample: @@ -3768,6 +3795,23 @@ textbox.textFrame.deleteText(); await context.sync(); }); +'Excel.Workbook#pivotTables:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/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: @@ -3919,6 +3963,23 @@ let workbook = context.workbook; workbook.protection.unprotect(password); }); +'Excel.Worksheet#pivotTables:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/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; + pivotTables.load("name"); + await context.sync(); + + // Display the names in the console. + console.log("PivotTables in the current worksheet:") + pivotTables.items.forEach((pivotTable) => { + console.log(`\t${pivotTable.name}`); + }); + }); 'Excel.Worksheet#showOutlineLevels:member(1)': - >- // Link to full sample: diff --git a/view/excel.json b/view/excel.json index 8ccd0a8b9..1e68195cb 100644 --- a/view/excel.json +++ b/view/excel.json @@ -99,6 +99,7 @@ "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-visibility.yaml", + "excel-pivottables-get-pivottables": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/pivottable-get-pivottables.yaml", "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/report-generation.yaml", From 9c59cb42f5bfa826a4663b7280a04970e417c359 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 6 Aug 2020 15:52:24 -0700 Subject: [PATCH 299/660] [excel] (Range) Dynamic array sample (#473) * Dynamic array sample * Apply suggestions from code review Co-authored-by: Alison McKay * Clarify range spill info button * Clarify console logs with regards to single cell behavior Co-authored-by: Alison McKay --- playlists/excel.yaml | 11 ++ .../excel/85-preview-apis/dynamic-arrays.yaml | 185 ++++++++++++++++++ .../pivottable-get-pivottables.yaml | 2 +- .../workbook-insert-external-worksheets.yaml | 2 +- snippet-extractor-metadata/excel.xlsx | Bin 21720 -> 21774 bytes snippet-extractor-output/snippets.yaml | 22 +++ view/excel.json | 1 + 7 files changed, 221 insertions(+), 2 deletions(-) create mode 100644 samples/excel/85-preview-apis/dynamic-arrays.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 93105f5f1..8b74bf354 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -935,6 +935,17 @@ group: Worksheet api_set: ExcelApi: '1.1' +- 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////samples/excel/85-preview-apis/dynamic-arrays.yaml + group: Preview APIs + api_set: + ExcelAPI: '1.12' - id: excel-pivottables-get-pivottables name: Get PivotTables fileName: pivottable-get-pivottables.yaml diff --git a/samples/excel/85-preview-apis/dynamic-arrays.yaml b/samples/excel/85-preview-apis/dynamic-arrays.yaml new file mode 100644 index 000000000..daadbbba8 --- /dev/null +++ b/samples/excel/85-preview-apis/dynamic-arrays.yaml @@ -0,0 +1,185 @@ +order: 1 +id: excel-range-dynamic-arrays +name: Dynamic arrays +description: Applies formulas that use dynamic arrays and displays information about the ranges used to display the data. +host: EXCEL +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)); + + async function copyTableHeaders() { + 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}.`); + }); + } + + async function applyFilterFunction() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + /* Set G5 to a formula that returns a dynamic array. + * The FILTER formula filters the data in A5:D11 based on the values in the "C" column. + * The parameter for the filter is "H2". + */ + const targetCell = sheet.getRange("G5"); + targetCell.formulas = [['=FILTER(A5:D11,C5:C11=H2,"")']]; + + // 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(`Applying the FILTER formula spilled into ${spillRange.address}.`); + }); + } + + async function displaySpillInformation() { + await Excel.run(async (context) => { + // Check the current cell for any spill parents or spilling-to ranges. + const currentRange = context.workbook.getSelectedRange(); + + // Spill parent shows the ranges that are causing data to spill into the current cell. + const spillParent = currentRange.getSpillParentOrNullObject(); + spillParent.load("address"); + + // Spilling-to range shows the ranges to which this cell is applying the results of a dynamic array. + const spillRange = currentRange.getSpillingToRangeOrNullObject(); + spillRange.load("address"); + await context.sync(); + + // Log the dynamic array information contained within the selected cell. + if (!spillParent.isNullObject) { + console.log(`The selected cell has a spill parent at ${spillParent.address}`); + } + if (!spillRange.isNullObject) { + console.log(`The selected cell is spilling into ${spillRange.address}`); + } + + if (spillParent.isNullObject && spillRange.isNullObject) { + console.log("The selected cell is not involved with any dynamic arrays (or you have multiple cells selected)."); + } + }); + } + + /** Create a new table with sample data */ + 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("A4:D4", true /*hasHeaders*/); + expensesTable.name = "ExpensesTable"; + + expensesTable.getHeaderRowRange().values = [["Date", "Merchant", "Category", "Amount"]]; + + expensesTable.rows.add(null /*add at the end*/, [ + ["1/1/2020", "The Phone Company", "Communications", "$120"], + ["1/2/2020", "Northwind Electric Cars", "Transportation", "$142"], + ["1/5/2020", "Best For You Organics Company", "Groceries", "$27"], + ["1/10/2020", "Coho Vineyard", "Restaurant", "$33"], + ["1/11/2020", "Bellows College", "Education", "$350"], + ["1/15/2020", "Trey Research", "Other", "$135"], + ["1/15/2020", "Best For You Organics Company", "Groceries", "$97"] + ]); + + sheet.getRange("A2:H2").values = [["Transactions", , , , , , "Category", "Groceries"]]; + sheet.getRange("A2").style = "Heading1"; + sheet.getRange("G2").style = "Heading2"; + sheet.getRange("H2").format.fill.color = "#EEEE99"; + + 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 apply formulas that return dynamic arrays and how to get the relevant information + about range spilling from the used ranges.

      +
      + +
      +

      Set up

      + +
      + +
      +

      Try it out

      + +

      + +

      +

      Select a spilled cell and press the following button to see information for that cell related to dynamic + arrays.

      + +
      + 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/excel/85-preview-apis/pivottable-get-pivottables.yaml b/samples/excel/85-preview-apis/pivottable-get-pivottables.yaml index 9560ac850..37bdc400d 100644 --- a/samples/excel/85-preview-apis/pivottable-get-pivottables.yaml +++ b/samples/excel/85-preview-apis/pivottable-get-pivottables.yaml @@ -1,4 +1,4 @@ -order: 1 +order: 2 id: excel-pivottables-get-pivottables name: Get PivotTables description: Get existing PivotTables in the workbook through their collections and through the ranges they occupy. 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 7e0a7d013..b1efc53f8 100644 --- a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml +++ b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml @@ -1,4 +1,4 @@ -order: 2 +order: 3 id: excel-workbook-insert-external-worksheets name: Insert external worksheets description: Inserts worksheets from another workbook into the current workbook. diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index c1b70eaf4c801b9b5028e8b57a087e3fc4610c79..cf5062932cb9ae9cba8dbc47bcd5d6dce594f3c5 100644 GIT binary patch delta 11507 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 D);Upm diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index ade4f599d..50c452dcc 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -4514,6 +4514,28 @@ await context.sync(); }); +'Excel.Range#getSpillingToRange:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/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}.`); + }); 'Office.RoamingSettings#get:member(1)': - >- // Link to full sample: diff --git a/view/excel.json b/view/excel.json index 1e68195cb..64f24eff0 100644 --- a/view/excel.json +++ b/view/excel.json @@ -99,6 +99,7 @@ "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-visibility.yaml", + "excel-range-dynamic-arrays": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/dynamic-arrays.yaml", "excel-pivottables-get-pivottables": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/pivottable-get-pivottables.yaml", "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/performance-optimization.yaml", From e09a022586951e1d90bb61a62430294e07effb22 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Tue, 11 Aug 2020 10:15:33 -0700 Subject: [PATCH 300/660] Custom properties snippet for documents and worksheets (#477) --- playlists/excel.yaml | 9 ++ samples/excel/26-document/properties.yaml | 4 +- .../85-preview-apis/custom-properties.yaml | 141 ++++++++++++++++++ .../excel/85-preview-apis/dynamic-arrays.yaml | 2 +- .../pivottable-get-pivottables.yaml | 2 +- .../workbook-insert-external-worksheets.yaml | 2 +- snippet-extractor-metadata/excel.xlsx | Bin 21774 -> 21935 bytes snippet-extractor-output/snippets.yaml | 114 +++++++++++--- view/excel.json | 1 + 9 files changed, 248 insertions(+), 27 deletions(-) create mode 100644 samples/excel/85-preview-apis/custom-properties.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 8b74bf354..36dd49126 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -935,6 +935,15 @@ group: Worksheet api_set: ExcelApi: '1.1' +- 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////samples/excel/85-preview-apis/custom-properties.yaml + group: Preview APIs + api_set: + ExcelAPI: '1.12' - id: excel-range-dynamic-arrays name: Dynamic arrays fileName: dynamic-arrays.yaml diff --git a/samples/excel/26-document/properties.yaml b/samples/excel/26-document/properties.yaml index 58cbe430d..3e34550fb 100644 --- a/samples/excel/26-document/properties.yaml +++ b/samples/excel/26-document/properties.yaml @@ -52,7 +52,7 @@ script: // Write the document properties to the console. // To learn how to view document properties in the UI, - // see https://support.office.com/en-us/article/View-or-change-the-properties-for-an-Office-file-21D604C2-481E-4379-8E54-1DD4622C6B75 + // see https://support.office.com/article/View-or-change-the-properties-for-an-Office-file-21D604C2-481E-4379-8E54-1DD4622C6B75 console.log("Author: " + docProperties.author); console.log("Last author : " + docProperties.lastAuthor); console.log("Revision number: " + docProperties.revisionNumber); @@ -91,7 +91,7 @@ script: // Write the custom document properties to the console. // To learn how to view document properties in the UI, - // see https://support.office.com/en-us/article/View-or-change-the-properties-for-an-Office-file-21D604C2-481E-4379-8E54-1DD4622C6B75 + // see https://support.office.com/article/View-or-change-the-properties-for-an-Office-file-21D604C2-481E-4379-8E54-1DD4622C6B75 console.log("Custom key : " + customProperty.key); console.log("Custom value : " + customProperty.value); diff --git a/samples/excel/85-preview-apis/custom-properties.yaml b/samples/excel/85-preview-apis/custom-properties.yaml new file mode 100644 index 000000000..bd8bb0685 --- /dev/null +++ b/samples/excel/85-preview-apis/custom-properties.yaml @@ -0,0 +1,141 @@ +order: 1 +id: excel-document-custom-properties +name: Custom properties +description: Gets and sets custom properties at the document and worksheet levels. +host: EXCEL +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)); + + /* 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 + */ + + 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(); + + // Add the custom property. + const customDocProperties = context.workbook.properties.custom; + customDocProperties.add(userKey, userValue); + + await context.sync(); + + console.log(`Successfully set custom document property ${userKey}:${userValue}.`); + }); + } + + async function getCustomDocProperties() { + await Excel.run(async (context) => { + // Load the keys and values of all custom properties. + const customDocProperties = context.workbook.properties.custom; + customDocProperties.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. + customDocProperties.items.forEach((property) => { + console.log(`${property.key}:${property.value}`); + }); + }); + } + + 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(); + + // Add the custom property. + const customWorksheetProperties = context.workbook.worksheets.getActiveWorksheet().customProperties; + customWorksheetProperties.add(userKey, userValue); + + await context.sync(); + + console.log(`Successfully set custom worksheet property ${userKey}:${userValue}.`); + }); + } + + async function getCustomWorksheetProperties() { + 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}`); + }); + }); + } + + /** 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 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: | + 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/dynamic-arrays.yaml b/samples/excel/85-preview-apis/dynamic-arrays.yaml index daadbbba8..4982f859e 100644 --- a/samples/excel/85-preview-apis/dynamic-arrays.yaml +++ b/samples/excel/85-preview-apis/dynamic-arrays.yaml @@ -1,4 +1,4 @@ -order: 1 +order: 2 id: excel-range-dynamic-arrays name: Dynamic arrays description: Applies formulas that use dynamic arrays and displays information about the ranges used to display the data. diff --git a/samples/excel/85-preview-apis/pivottable-get-pivottables.yaml b/samples/excel/85-preview-apis/pivottable-get-pivottables.yaml index 37bdc400d..33b739091 100644 --- a/samples/excel/85-preview-apis/pivottable-get-pivottables.yaml +++ b/samples/excel/85-preview-apis/pivottable-get-pivottables.yaml @@ -1,4 +1,4 @@ -order: 2 +order: 3 id: excel-pivottables-get-pivottables name: Get PivotTables description: Get existing PivotTables in the workbook through their collections and through the ranges they occupy. 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 b1efc53f8..bc544d2e8 100644 --- a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml +++ b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml @@ -1,4 +1,4 @@ -order: 3 +order: 4 id: excel-workbook-insert-external-worksheets name: Insert external worksheets description: Inserts worksheets from another workbook into the current workbook. diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index cf5062932cb9ae9cba8dbc47bcd5d6dce594f3c5..282b8655bbe017fabf33701a051c867d111b1e69 100644 GIT binary patch delta 12590 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
      +

      This sample shows how to use the read-only cultural settings APIs to retrieve system date and time settings.

      +
      +
      +

      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/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/direct-precedents.yaml b/samples/excel/85-preview-apis/direct-precedents.yaml new file mode 100644 index 000000000..bdb2ecc8f --- /dev/null +++ b/samples/excel/85-preview-apis/direct-precedents.yaml @@ -0,0 +1,177 @@ +order: 6 +id: excel-direct-precedents +name: Direct 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' +script: + content: | + $("#setup").click(() => tryCatch(setup)); + $("#select-first-cell").click(() => tryCatch(selectFirstCell)); + $("#select-second-cell").click(() => tryCatch(selectSecondCell)); + $("#get-direct-precedents").click(() => tryCatch(getDirectPrecedents)); + $("#clear-highlighting").click(() => tryCatch(clearFormatting)); + + /** Select a cell with direct precedents on one worksheet. */ + async function selectFirstCell() { + await Excel.run(async (context) => { + // Ensure correct worksheet is active. + const sheet = context.workbook.worksheets.getItem("Sample2020Data"); + sheet.activate(); + + // Select cell E4. + const range = sheet.getRange("E4"); + range.select(); + await context.sync(); + }); + } + + /** Select a cell with direct precedents on both worksheets. */ + async function selectSecondCell() { + await Excel.run(async (context) => { + // Ensure correct worksheet is active. + const sheet = context.workbook.worksheets.getItem("Sample2020Data"); + sheet.activate(); + + // Select cell F5. + const range = sheet.getRange("F5"); + range.select(); + await context.sync(); + }); + } + + async function getDirectPrecedents() { + await Excel.run(async (context) => { + // Precedents are cells referenced by the formula in a cell. + let range = context.workbook.getActiveCell(); + let directPredecents = range.getDirectPrecedents(); + range.load("address"); + directPredecents.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 < directPredecents.areas.items.length; i++) { + // Highlight and console the address of each precedent cell. + directPredecents.areas.items[i].format.fill.color = "Yellow"; + console.log(` ${directPredecents.areas.items[i].address}`); + } + await context.sync(); + }); + } + + /** Remove highlighting from precedent cells. */ + async function clearFormatting() { + await Excel.run(async (context) => { + const sheet1 = context.workbook.worksheets.getItem("Sample2019Data"); + let range1 = sheet1.getRange("B3:F5"); + range1.format.fill.clear(); + + const sheet2 = context.workbook.worksheets.getItem("Sample2020Data"); + let range2 = sheet2.getRange("B3:E5"); + range2.format.fill.clear(); + + await context.sync(); + }); + } + + /** Create two sample tables 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 precedents of the currently selected cell. Precedents are cells referenced by the formula in a cell.

      +
      +
      +

      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 282b8655bbe017fabf33701a051c867d111b1e69..07ab48c1b031d1bb6e0dbd1d4483909f84d40ec5 100644 GIT binary patch delta 12130 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 z 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 delta 12042 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 z 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 AKL7v# diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 728a13de9..be8951d57 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -1301,25 +1301,21 @@ await context.sync(); }); -'Excel.CustomPropertyCollection#add:member(1)': +'Excel.CustomConditionalFormat#format:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/custom-properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml await Excel.run(async (context) => { - // Get the key/value pair from the task pane. - const userKey = $("#key").text(); - const userValue = $("#value").text(); - - // Add the custom property. - const customDocProperties = context.workbook.properties.custom; - customDocProperties.add(userKey, userValue); - - await context.sync(); + 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"; - console.log(`Successfully set custom document property ${userKey}:${userValue}.`); + await context.sync(); }); -'Excel.WorksheetCustomPropertyCollection#add:member(1)': +'Excel.CustomPropertyCollection#add:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/custom-properties.yaml @@ -1330,26 +1326,12 @@ const userValue = $("#value").text(); // Add the custom property. - const customWorksheetProperties = context.workbook.worksheets.getActiveWorksheet().customProperties; - customWorksheetProperties.add(userKey, userValue); + const customDocProperties = context.workbook.properties.custom; + customDocProperties.add(userKey, userValue); await context.sync(); - console.log(`Successfully set custom worksheet property ${userKey}:${userValue}.`); - }); -'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 - - 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(); + console.log(`Successfully set custom document property ${userKey}:${userValue}.`); }); 'Excel.CustomXmlPart#delete:member(1)': - >- @@ -1841,23 +1823,6 @@ await context.sync(); }); -'Excel.Worksheet#customProperties:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/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.DocumentProperties#custom:member': - >- // Link to full sample: @@ -4055,6 +4020,23 @@ let workbook = context.workbook; workbook.protection.unprotect(password); }); +'Excel.Worksheet#customProperties:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/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#pivotTables:member': - >- // Link to full sample: @@ -4466,6 +4448,24 @@ await context.sync(); }); +'Excel.WorksheetCustomPropertyCollection#add:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/custom-properties.yaml + + await Excel.run(async (context) => { + // Get the key/value pair from the task pane. + const userKey = $("#key").text(); + const userValue = $("#value").text(); + + // Add the custom property. + const customWorksheetProperties = context.workbook.worksheets.getActiveWorksheet().customProperties; + customWorksheetProperties.add(userKey, userValue); + + await context.sync(); + + console.log(`Successfully set custom worksheet property ${userKey}:${userValue}.`); + }); 'Excel.WorksheetFreezePanes#freezeAt:member(1)': - >- // Link to full sample: @@ -4606,6 +4606,92 @@ await context.sync(); }); +'Excel.CultureInfo#datetimeFormat:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/culture-info-date-time.yaml + + await Excel.run(async (context) => { + context.application.cultureInfo.datetimeFormat.load([ + "longDatePattern", + "shortDatePattern", + "dateSeparator", + "longTimePattern", + "timeSeparator" + ]); + await context.sync(); + + // Use the cultural settings API to retrieve the user's system date and time settings. + const systemLongDatePattern = context.application.cultureInfo.datetimeFormat.longDatePattern; + const systemShortDatePattern = context.application.cultureInfo.datetimeFormat.shortDatePattern; + const systemDateSeparator = context.application.cultureInfo.datetimeFormat.dateSeparator; + const systemLongTimePattern = context.application.cultureInfo.datetimeFormat.longTimePattern; + const systemTimeSeparator = context.application.cultureInfo.datetimeFormat.timeSeparator; + + // Write the date and time settings in your table. + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const dateTimeData = sheet.getRange("A2:B6"); + dateTimeData.values = [ + ["Long date", systemLongDatePattern], + ["Short date", systemShortDatePattern], + ["Date separator", systemDateSeparator], + ["Long time format", systemLongTimePattern], + ["Time separator", systemTimeSeparator] + ]; + + sheet.tables + .getItemAt(0) + .getRange() + .format.autofitColumns(); + + await context.sync(); + }); +'Excel.Range#getDirectPrecedents:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/direct-precedents.yaml + + await Excel.run(async (context) => { + // Precedents are cells referenced by the formula in a cell. + let range = context.workbook.getActiveCell(); + let directPredecents = range.getDirectPrecedents(); + range.load("address"); + directPredecents.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 < directPredecents.areas.items.length; i++) { + // Highlight and console the address of each precedent cell. + directPredecents.areas.items[i].format.fill.color = "Yellow"; + console.log(` ${directPredecents.areas.items[i].address}`); + } + await context.sync(); + }); +'Excel.Range#workbookRangeAreas:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/direct-precedents.yaml + + await Excel.run(async (context) => { + // Precedents are cells referenced by the formula in a cell. + let range = context.workbook.getActiveCell(); + let directPredecents = range.getDirectPrecedents(); + range.load("address"); + directPredecents.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 < directPredecents.areas.items.length; i++) { + // Highlight and console the address of each precedent cell. + directPredecents.areas.items[i].format.fill.color = "Yellow"; + console.log(` ${directPredecents.areas.items[i].address}`); + } + await context.sync(); + }); 'Office.RoamingSettings#get:member(1)': - >- // Link to full sample: diff --git a/view/excel.json b/view/excel.json index 3283ac7b6..f592df02c 100644 --- a/view/excel.json +++ b/view/excel.json @@ -103,6 +103,8 @@ "excel-range-dynamic-arrays": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/dynamic-arrays.yaml", "excel-pivottables-get-pivottables": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/pivottable-get-pivottables.yaml", "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", + "excel-culture-info-date-time": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/culture-info-date-time.yaml", + "excel-direct-precedents": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/direct-precedents.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/multiple-property-set.yaml", From 000abc9c084f4ea0342f7e326a2e653325226697 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Wed, 26 Aug 2020 17:13:57 -0700 Subject: [PATCH 303/660] Fixing typo in direct precedents sample, updating excel.xlsx to resolve unused snippet issue (#485) * fix typo in direct-precedents.yaml * adjust Class and Member Name in excel.xlsx * commit file changes made by running yarn start --- .../85-preview-apis/direct-precedents.yaml | 10 ++++---- snippet-extractor-metadata/excel.xlsx | Bin 22079 -> 22079 bytes snippet-extractor-output/snippets.yaml | 22 +++++++++--------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/samples/excel/85-preview-apis/direct-precedents.yaml b/samples/excel/85-preview-apis/direct-precedents.yaml index bdb2ecc8f..f6139a75a 100644 --- a/samples/excel/85-preview-apis/direct-precedents.yaml +++ b/samples/excel/85-preview-apis/direct-precedents.yaml @@ -45,18 +45,18 @@ script: await Excel.run(async (context) => { // Precedents are cells referenced by the formula in a cell. let range = context.workbook.getActiveCell(); - let directPredecents = range.getDirectPrecedents(); + let directPrecedents = range.getDirectPrecedents(); range.load("address"); - directPredecents.areas.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 < directPredecents.areas.items.length; i++) { + for (var i = 0; i < directPrecedents.areas.items.length; i++) { // Highlight and console the address of each precedent cell. - directPredecents.areas.items[i].format.fill.color = "Yellow"; - console.log(` ${directPredecents.areas.items[i].address}`); + directPrecedents.areas.items[i].format.fill.color = "Yellow"; + console.log(` ${directPrecedents.areas.items[i].address}`); } await context.sync(); }); diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 07ab48c1b031d1bb6e0dbd1d4483909f84d40ec5..2f8de358ad8b72c1fed983bcf728bd900c6ff54e 100644 GIT binary patch delta 11051 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
        _TYV(GvajL(>7ev= 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 M#(`pnq-$6H4>x;6k^lez delta 11003 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index be8951d57..b41808fc3 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -4654,22 +4654,22 @@ await Excel.run(async (context) => { // Precedents are cells referenced by the formula in a cell. let range = context.workbook.getActiveCell(); - let directPredecents = range.getDirectPrecedents(); + let directPrecedents = range.getDirectPrecedents(); range.load("address"); - directPredecents.areas.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 < directPredecents.areas.items.length; i++) { + for (var i = 0; i < directPrecedents.areas.items.length; i++) { // Highlight and console the address of each precedent cell. - directPredecents.areas.items[i].format.fill.color = "Yellow"; - console.log(` ${directPredecents.areas.items[i].address}`); + directPrecedents.areas.items[i].format.fill.color = "Yellow"; + console.log(` ${directPrecedents.areas.items[i].address}`); } await context.sync(); }); -'Excel.Range#workbookRangeAreas:member(1)': +'Excel.WorkbookRangeAreas#areas:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/direct-precedents.yaml @@ -4677,18 +4677,18 @@ await Excel.run(async (context) => { // Precedents are cells referenced by the formula in a cell. let range = context.workbook.getActiveCell(); - let directPredecents = range.getDirectPrecedents(); + let directPrecedents = range.getDirectPrecedents(); range.load("address"); - directPredecents.areas.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 < directPredecents.areas.items.length; i++) { + for (var i = 0; i < directPrecedents.areas.items.length; i++) { // Highlight and console the address of each precedent cell. - directPredecents.areas.items[i].format.fill.color = "Yellow"; - console.log(` ${directPredecents.areas.items[i].address}`); + directPrecedents.areas.items[i].format.fill.color = "Yellow"; + console.log(` ${directPrecedents.areas.items[i].address}`); } await context.sync(); }); From 20ba1f85e4da9fa28c4939a13e8221c882239b54 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Tue, 15 Sep 2020 14:37:58 -0700 Subject: [PATCH 304/660] [excel] (PivotTable) Add PivotFilter sample (#482) * Add PivotFilter sample * Running yarn * Apply suggestions from code review Co-authored-by: Alison McKay * Fixing filename typo * Re-adding sample map * Fix date filter and update values for current filter behavior * Be consistent about filters * Update samples/excel/85-preview-apis/pivottable-pivotfilters.yaml Co-authored-by: Alison McKay * Fix build * Merge * Fix build Co-authored-by: Alison McKay --- config/build.ts | 2 +- playlists/excel.yaml | 9 + .../pivottable-pivotfilters.yaml | 330 ++++++++++++++++ snippet-extractor-metadata/excel.xlsx | Bin 22079 -> 22343 bytes snippet-extractor-output/snippets.yaml | 353 +++++++++++++----- view/excel.json | 1 + 6 files changed, 608 insertions(+), 87 deletions(-) create mode 100644 samples/excel/85-preview-apis/pivottable-pivotfilters.yaml diff --git a/config/build.ts b/config/build.ts index 500880f80..304f96a29 100644 --- a/config/build.ts +++ b/config/build.ts @@ -84,7 +84,7 @@ async function processSnippets(processedSnippets: Dictionary- + https://raw.githubusercontent.com////samples/excel/85-preview-apis/pivottable-pivotfilters.yaml + group: Preview APIs + api_set: + ExcelAPI: '1.12' - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/samples/excel/85-preview-apis/pivottable-pivotfilters.yaml b/samples/excel/85-preview-apis/pivottable-pivotfilters.yaml new file mode 100644 index 000000000..f640e16e9 --- /dev/null +++ b/samples/excel/85-preview-apis/pivottable-pivotfilters.yaml @@ -0,0 +1,330 @@ +order: 10 +id: excel-pivottables-pivotfilters +name: PivotFilters +description: Applies PivotFilters to a PivotTable. +host: EXCEL +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)); + + async function manualFilter() { + await Excel.run(async (context) => { + // Add a PivotFilter to filter on manually-selected items. + + // 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 "Classification" to the hierarchies. + let classHierarchy = pivotTable.filterHierarchies.getItemOrNullObject("Classification"); + await context.sync(); + if (classHierarchy.isNullObject) { + classHierarchy = pivotTable.filterHierarchies.add(pivotTable.hierarchies.getItem("Classification")); + } + + // Apply a manual filter to include only a specific PivotItem (the string "Organic"). + const filterField = classHierarchy.fields.getItem("Classification"); + const manualFilter = { selectedItems: ["Organic"]}; + filterField.applyFilter({ manualFilter: manualFilter }); + + await context.sync(); + }); + } + + async function dateFilter() { + 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(); + }); + } + + async function valueFilter() { + 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"); + + // See if any value filter is currently applied to this field, if not, create a new one and apply it to the field. + if (field.isFiltered(Excel.PivotFilterType.value)) { + // 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" + }; + field.applyFilter({ valueFilter: filter }); + } + + await context.sync(); + }); + } + + async function labelFilter() { + 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"); + + // See if any label filter is currently applied to this field, if not, create a new one and apply it to the field. + if (field.isFiltered(Excel.PivotFilterType.label)) { + // 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 + }; + field.applyFilter({ labelFilter: filter }); + } + + await context.sync(); + }); + } + + async function clearFilters() { + await Excel.run(async (context) => { + // Clear all the PivotFilters. + + // Get the PivotTable. + const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); + pivotTable.hierarchies.load("name"); + await context.sync(); + + // Clear the filters on each PivotField. + pivotTable.hierarchies.items.forEach((hierarchy) => { + hierarchy.fields.getItem(hierarchy.name).clearAllFilters(); + }); + await context.sync(); + }); + } + + async function getCrateTotal() { + await Excel.run(async (context) => { + // Get the total amounts from the PivotTable. + + // Get the PivotTable. + 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"); + + // Use the wholesale and farm sale totals to make a final sum. + const sumResult = context.workbook.functions.sum(grandTotalRange); + sumResult.load("value"); + await context.sync(); + + console.log(`Total crate count: ${sumResult.value}`); + await context.sync(); + }); + } + + async function logFilters() { + await Excel.run(async (context) => { + // Display all the active PivotFilters. + + // Get the PivotTable. + const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); + + // Get the number of PivotHierarchies. + pivotTable.hierarchies.load("name"); + let hierarchyCount = pivotTable.hierarchies.getCount(); + await context.sync(); + + // Iterate over all the hierarchies looking for filters on the PivotFields. + for (let i = 0; i < hierarchyCount.value; i++) { + let filters = pivotTable.hierarchies.items[i].fields.getItem(pivotTable.hierarchies.items[i].name).getFilters(); + await context.sync(); + + if ( + filters.value.dateFilter || + filters.value.labelFilter || + filters.value.manualFilter || + filters.value.valueFilter + ) { + console.log(`Filters found on "${pivotTable.hierarchies.items[i].name}" field:`); + console.log(filters.value); + } + } + + await context.sync(); + }); + } + + 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("Pivot").delete(); + const pivotSheet = context.workbook.worksheets.add("Pivot"); + + // Create farm data. + const data = [ + ["Farm", "Type", "Classification", "Date Updated", "Crates Sold at Farm", "Crates Sold Wholesale"], + ["A Farms", "Lime", "Organic", "8/12/2020", 300, 2000], + ["A Farms", "Lemon", "Organic", "8/11/2020", 250, 1800], + ["A Farms", "Orange", "Organic", "8/1/2020", 200, 2200], + ["B Farms", "Lime", "Conventional", "8/2/2020", 80, 1000], + ["B Farms", "Lemon", "Conventional", "7/29/2020", 75, 1230], + ["B Farms", "Orange", "Conventional", "7/15/2020", 25, 800], + ["B Farms", "Orange", "Organic", "8/1/2020", 20, 500], + ["B Farms", "Lemon", "Organic", "8/5/2020", 10, 770], + ["B Farms", "Kiwi", "Conventional", "7/25/2020", 30, 300], + ["B Farms", "Lime", "Organic", "7/15/2020", 50, 600], + ["C Farms", "Apple", "Organic", "8/1/2020", 275, 220], + ["C Farms", "Kiwi", "Organic", "8/1/2020", 200, 120], + ["D Farms", "Apple", "Conventional", "7/23/2020", 100, 3000], + ["D Farms", "Apple", "Organic", "7/26/2020", 80, 2800], + ["E Farms", "Lime", "Conventional", "8/1/2020", 160, 2700], + ["E Farms", "Orange", "Conventional", "8/7/2020", 180, 2000], + ["E Farms", "Apple", "Conventional", "8/10/2020", 245, 2200], + ["E Farms", "Kiwi", "Conventional", "8/11/2020", 200, 1500], + ["F Farms", "Kiwi", "Organic", "7/30/2020", 100, 150], + ["F Farms", "Lemon", "Conventional", "7/14/2020", 150, 270] + ]; + + const range = dataSheet.getRange("A1:F21"); + range.values = data; + range.format.autofitColumns(); + pivotSheet.activate(); + + // Create the PivotTable. + context.workbook.worksheets.getActiveWorksheet().pivotTables.add("Farm Sales", "Data!A1:F21", "A2"); + const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); + 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")); + + 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 filter PivotTables with the different PivotFilters.

        +
        + +
        +

        Set up

        + +
        + +
        +

        Try it out

        +
        + +
        +

        Filters

        +

        Manual filter

        + +

        +

        Date filter

        + +

        +

        Value filter

        + +

        +

        Label filter

        + + +

        PivotTable Status

        +

        +

        +

        +

        + 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 2f8de358ad8b72c1fed983bcf728bd900c6ff54e..46d52577ba510eecee65e10a3602f508aebd5c01 100644 GIT binary patch delta 13318 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 NYEr_asQ%~s{{e9P8Danc delta 13119 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 F{{ytHT;Biy diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index b41808fc3..d3dee593c 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -1301,6 +1301,46 @@ await context.sync(); }); +'Excel.CultureInfo#datetimeFormat:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/culture-info-date-time.yaml + + await Excel.run(async (context) => { + context.application.cultureInfo.datetimeFormat.load([ + "longDatePattern", + "shortDatePattern", + "dateSeparator", + "longTimePattern", + "timeSeparator" + ]); + await context.sync(); + + // Use the cultural settings API to retrieve the user's system date and time settings. + const systemLongDatePattern = context.application.cultureInfo.datetimeFormat.longDatePattern; + const systemShortDatePattern = context.application.cultureInfo.datetimeFormat.shortDatePattern; + const systemDateSeparator = context.application.cultureInfo.datetimeFormat.dateSeparator; + const systemLongTimePattern = context.application.cultureInfo.datetimeFormat.longTimePattern; + const systemTimeSeparator = context.application.cultureInfo.datetimeFormat.timeSeparator; + + // Write the date and time settings in your table. + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const dateTimeData = sheet.getRange("A2:B6"); + dateTimeData.values = [ + ["Long date", systemLongDatePattern], + ["Short date", systemShortDatePattern], + ["Date separator", systemDateSeparator], + ["Long time format", systemLongTimePattern], + ["Time separator", systemTimeSeparator] + ]; + + sheet.tables + .getItemAt(0) + .getRange() + .format.autofitColumns(); + + await context.sync(); + }); 'Excel.CustomConditionalFormat#format:member': - >- // Link to full sample: @@ -2186,6 +2226,164 @@ farmSheet.pageLayout.zoom = { scale: 200 }; await context.sync(); }); +'Excel.PivotField#clearAllFilters:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/pivottable-pivotfilters.yaml + + await Excel.run(async (context) => { + // Clear all the PivotFilters. + + // Get the PivotTable. + const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); + pivotTable.hierarchies.load("name"); + await context.sync(); + + // Clear the filters on each PivotField. + pivotTable.hierarchies.items.forEach((hierarchy) => { + hierarchy.fields.getItem(hierarchy.name).clearAllFilters(); + }); + await context.sync(); + }); +'Excel.PivotFilters#dateFilter:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/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.PivotFilters#labelFilter:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/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"); + + // See if any label filter is currently applied to this field, if not, create a new one and apply it to the field. + if (field.isFiltered(Excel.PivotFilterType.label)) { + // 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 + }; + field.applyFilter({ labelFilter: filter }); + } + + await context.sync(); + }); +'Excel.PivotFilters#manualFilter:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/pivottable-pivotfilters.yaml + + await Excel.run(async (context) => { + // Add a PivotFilter to filter on manually-selected items. + + // 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 "Classification" to the hierarchies. + let classHierarchy = pivotTable.filterHierarchies.getItemOrNullObject("Classification"); + await context.sync(); + if (classHierarchy.isNullObject) { + classHierarchy = pivotTable.filterHierarchies.add(pivotTable.hierarchies.getItem("Classification")); + } + + // Apply a manual filter to include only a specific PivotItem (the string "Organic"). + const filterField = classHierarchy.fields.getItem("Classification"); + const manualFilter = { selectedItems: ["Organic"]}; + filterField.applyFilter({ manualFilter: manualFilter }); + + await context.sync(); + }); +'Excel.PivotFilters#valueFilter:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/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"); + + // See if any value filter is currently applied to this field, if not, create a new one and apply it to the field. + if (field.isFiltered(Excel.PivotFilterType.value)) { + // 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" + }; + field.applyFilter({ valueFilter: filter }); + } + + await context.sync(); + }); +'Excel.PivotHierarchy#fields:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/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"); + + // See if any value filter is currently applied to this field, if not, create a new one and apply it to the field. + if (field.isFiltered(Excel.PivotFilterType.value)) { + // 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" + }; + field.applyFilter({ valueFilter: filter }); + } + + await context.sync(); + }); 'Excel.PivotLayout#getDataBodyRange:member(1)': - >- // Link to full sample: @@ -2912,6 +3110,52 @@ console.log(`Copying the table headers spilled into ${spillRange.address}.`); }); +'Excel.Range#getDirectPrecedents:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/direct-precedents.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}`); + } + await context.sync(); + }); +'Excel.Range#workbookRangeAreas:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/direct-precedents.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}`); + } + await context.sync(); + }); 'Excel.RangeAreas#format:member': - >- // Link to full sample: @@ -4020,6 +4264,29 @@ let workbook = context.workbook; workbook.protection.unprotect(password); }); +'Excel.WorkbookRangeAreas#areas:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/direct-precedents.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}`); + } + await context.sync(); + }); 'Excel.Worksheet#customProperties:member': - >- // Link to full sample: @@ -4606,92 +4873,6 @@ await context.sync(); }); -'Excel.CultureInfo#datetimeFormat:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/culture-info-date-time.yaml - - await Excel.run(async (context) => { - context.application.cultureInfo.datetimeFormat.load([ - "longDatePattern", - "shortDatePattern", - "dateSeparator", - "longTimePattern", - "timeSeparator" - ]); - await context.sync(); - - // Use the cultural settings API to retrieve the user's system date and time settings. - const systemLongDatePattern = context.application.cultureInfo.datetimeFormat.longDatePattern; - const systemShortDatePattern = context.application.cultureInfo.datetimeFormat.shortDatePattern; - const systemDateSeparator = context.application.cultureInfo.datetimeFormat.dateSeparator; - const systemLongTimePattern = context.application.cultureInfo.datetimeFormat.longTimePattern; - const systemTimeSeparator = context.application.cultureInfo.datetimeFormat.timeSeparator; - - // Write the date and time settings in your table. - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const dateTimeData = sheet.getRange("A2:B6"); - dateTimeData.values = [ - ["Long date", systemLongDatePattern], - ["Short date", systemShortDatePattern], - ["Date separator", systemDateSeparator], - ["Long time format", systemLongTimePattern], - ["Time separator", systemTimeSeparator] - ]; - - sheet.tables - .getItemAt(0) - .getRange() - .format.autofitColumns(); - - await context.sync(); - }); -'Excel.Range#getDirectPrecedents:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/direct-precedents.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}`); - } - await context.sync(); - }); -'Excel.WorkbookRangeAreas#areas:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/direct-precedents.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}`); - } - await context.sync(); - }); 'Office.RoamingSettings#get:member(1)': - >- // Link to full sample: diff --git a/view/excel.json b/view/excel.json index f592df02c..b1e025cc0 100644 --- a/view/excel.json +++ b/view/excel.json @@ -105,6 +105,7 @@ "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", "excel-culture-info-date-time": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/culture-info-date-time.yaml", "excel-direct-precedents": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/direct-precedents.yaml", + "excel-pivottables-pivotfilters": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/pivottable-pivotfilters.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/multiple-property-set.yaml", From 5a5154994f5e52d4d77e7c9a2f61080276f80ee7 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Fri, 18 Sep 2020 15:12:56 -0700 Subject: [PATCH 305/660] promoting ExcelApi 1.12 samples from preview to GA (#489) * promote ExcelApi 1.12 samples from preview to GA * update libraries of promoted snippets * run yarn start, update excel.yaml, snippets.yaml, excel.json --- playlists/excel.yaml | 124 +++++++++--------- .../custom-properties.yaml | 6 +- .../pivottable-get-pivottables.yaml | 6 +- .../pivottable-pivotfilters.yaml | 6 +- .../38-pivottable/pivottable-slicer.yaml | 2 +- .../direct-precedents.yaml | 6 +- .../dynamic-arrays.yaml | 6 +- .../42-range/range-text-orientation.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 +- .../culture-info-date-time.yaml | 6 +- .../excel/50-workbook/data-protection.yaml | 2 +- .../50-workbook/workbook-save-and-close.yaml | 2 +- .../workbook-insert-external-worksheets.yaml | 2 +- snippet-extractor-output/snippets.yaml | 36 ++--- view/excel.json | 12 +- 17 files changed, 112 insertions(+), 112 deletions(-) rename samples/excel/{85-preview-apis => 26-document}/custom-properties.yaml (98%) rename samples/excel/{85-preview-apis => 38-pivottable}/pivottable-get-pivottables.yaml (98%) rename samples/excel/{85-preview-apis => 38-pivottable}/pivottable-pivotfilters.yaml (99%) rename samples/excel/{85-preview-apis => 42-range}/direct-precedents.yaml (98%) rename samples/excel/{85-preview-apis => 42-range}/dynamic-arrays.yaml (98%) rename samples/excel/{85-preview-apis => 50-workbook}/culture-info-date-time.yaml (98%) diff --git a/playlists/excel.yaml b/playlists/excel.yaml index e0dbcaa33..6b4d77711 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -276,6 +276,15 @@ 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////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 @@ -444,6 +453,17 @@ 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////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 @@ -453,6 +473,15 @@ 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////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 @@ -566,6 +595,17 @@ 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////samples/excel/42-range/direct-precedents.yaml + group: Range + api_set: + ExcelAPI: '1.12' - id: excel-range-style name: Style fileName: style.yaml @@ -586,6 +626,17 @@ 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////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 @@ -796,6 +847,17 @@ 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////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 @@ -935,37 +997,6 @@ group: Worksheet api_set: ExcelApi: '1.1' -- 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////samples/excel/85-preview-apis/custom-properties.yaml - group: Preview APIs - api_set: - ExcelAPI: '1.12' -- 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////samples/excel/85-preview-apis/dynamic-arrays.yaml - group: Preview APIs - api_set: - ExcelAPI: '1.12' -- 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////samples/excel/85-preview-apis/pivottable-get-pivottables.yaml - group: Preview APIs - api_set: - ExcelAPI: '1.12' - id: excel-workbook-insert-external-worksheets name: Insert external worksheets fileName: workbook-insert-external-worksheets.yaml @@ -975,37 +1006,6 @@ group: Preview APIs api_set: ExcelAPI: '1.13' -- 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////samples/excel/85-preview-apis/culture-info-date-time.yaml - group: Preview APIs - api_set: - ExcelAPI: '1.12' -- 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////samples/excel/85-preview-apis/direct-precedents.yaml - group: Preview APIs - api_set: - ExcelAPI: '1.12' -- id: excel-pivottables-pivotfilters - name: PivotFilters - fileName: pivottable-pivotfilters.yaml - description: Applies PivotFilters to a PivotTable. - rawUrl: >- - https://raw.githubusercontent.com////samples/excel/85-preview-apis/pivottable-pivotfilters.yaml - group: Preview APIs - api_set: - ExcelAPI: '1.12' - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/samples/excel/85-preview-apis/custom-properties.yaml b/samples/excel/26-document/custom-properties.yaml similarity index 98% rename from samples/excel/85-preview-apis/custom-properties.yaml rename to samples/excel/26-document/custom-properties.yaml index bd8bb0685..a18cec122 100644 --- a/samples/excel/85-preview-apis/custom-properties.yaml +++ b/samples/excel/26-document/custom-properties.yaml @@ -1,4 +1,4 @@ -order: 1 +order: 3 id: excel-document-custom-properties name: Custom properties description: Gets and sets custom properties at the document and worksheet levels. @@ -128,8 +128,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-get-pivottables.yaml b/samples/excel/38-pivottable/pivottable-get-pivottables.yaml similarity index 98% rename from samples/excel/85-preview-apis/pivottable-get-pivottables.yaml rename to samples/excel/38-pivottable/pivottable-get-pivottables.yaml index 33b739091..39205809e 100644 --- a/samples/excel/85-preview-apis/pivottable-get-pivottables.yaml +++ b/samples/excel/38-pivottable/pivottable-get-pivottables.yaml @@ -1,4 +1,4 @@ -order: 3 +order: 4 id: excel-pivottables-get-pivottables name: Get PivotTables description: Get existing PivotTables in the workbook through their collections and through the ranges they occupy. @@ -182,8 +182,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-pivotfilters.yaml b/samples/excel/38-pivottable/pivottable-pivotfilters.yaml similarity index 99% rename from samples/excel/85-preview-apis/pivottable-pivotfilters.yaml rename to samples/excel/38-pivottable/pivottable-pivotfilters.yaml index f640e16e9..25a06f473 100644 --- a/samples/excel/85-preview-apis/pivottable-pivotfilters.yaml +++ b/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -1,4 +1,4 @@ -order: 10 +order: 6 id: excel-pivottables-pivotfilters name: PivotFilters description: Applies PivotFilters to a PivotTable. @@ -317,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/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/38-pivottable/pivottable-slicer.yaml b/samples/excel/38-pivottable/pivottable-slicer.yaml index 88a4cf56d..36ca4db7b 100644 --- a/samples/excel/38-pivottable/pivottable-slicer.yaml +++ b/samples/excel/38-pivottable/pivottable-slicer.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 5 id: excel-pivottable-slicer name: Slicer description: Adds a slicer to a PivotTable. diff --git a/samples/excel/85-preview-apis/direct-precedents.yaml b/samples/excel/42-range/direct-precedents.yaml similarity index 98% rename from samples/excel/85-preview-apis/direct-precedents.yaml rename to samples/excel/42-range/direct-precedents.yaml index f6139a75a..81424ac14 100644 --- a/samples/excel/85-preview-apis/direct-precedents.yaml +++ b/samples/excel/42-range/direct-precedents.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 13 id: excel-direct-precedents name: Direct 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. @@ -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/samples/excel/85-preview-apis/dynamic-arrays.yaml b/samples/excel/42-range/dynamic-arrays.yaml similarity index 98% rename from samples/excel/85-preview-apis/dynamic-arrays.yaml rename to samples/excel/42-range/dynamic-arrays.yaml index 4982f859e..8411cc596 100644 --- a/samples/excel/85-preview-apis/dynamic-arrays.yaml +++ b/samples/excel/42-range/dynamic-arrays.yaml @@ -1,4 +1,4 @@ -order: 2 +order: 16 id: excel-range-dynamic-arrays name: Dynamic arrays description: Applies formulas that use dynamic arrays and displays information about the ranges used to display the data. @@ -172,8 +172,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/42-range/range-text-orientation.yaml b/samples/excel/42-range/range-text-orientation.yaml index 77422984d..7211ee30b 100644 --- a/samples/excel/42-range/range-text-orientation.yaml +++ b/samples/excel/42-range/range-text-orientation.yaml @@ -1,4 +1,4 @@ -order: 14 +order: 15 id: excel-range-text-orientation name: Text orientation description: Gets and sets the text orientation within a range. diff --git a/samples/excel/42-range/set-get-values.yaml b/samples/excel/42-range/set-get-values.yaml index 3d044a086..b9c1d91fc 100644 --- a/samples/excel/42-range/set-get-values.yaml +++ b/samples/excel/42-range/set-get-values.yaml @@ -1,4 +1,4 @@ -order: 16 +order: 18 id: excel-range-values-and-formulas name: Values and formulas description: Gets and sets values and formulas for a range. diff --git a/samples/excel/42-range/style.yaml b/samples/excel/42-range/style.yaml index 9524314c0..2ad8bcd6c 100644 --- a/samples/excel/42-range/style.yaml +++ b/samples/excel/42-range/style.yaml @@ -1,4 +1,4 @@ -order: 13 +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.' diff --git a/samples/excel/42-range/used-range.yaml b/samples/excel/42-range/used-range.yaml index 7ab7073b1..ceb41f352 100644 --- a/samples/excel/42-range/used-range.yaml +++ b/samples/excel/42-range/used-range.yaml @@ -1,4 +1,4 @@ -order: 15 +order: 17 id: excel-range-used-range name: Used range description: Tests for a used range and creates a chart from a table only if there's data in the table. diff --git a/samples/excel/85-preview-apis/culture-info-date-time.yaml b/samples/excel/50-workbook/culture-info-date-time.yaml similarity index 98% rename from samples/excel/85-preview-apis/culture-info-date-time.yaml rename to samples/excel/50-workbook/culture-info-date-time.yaml index 8ce6a2d4a..e370c1793 100644 --- a/samples/excel/85-preview-apis/culture-info-date-time.yaml +++ b/samples/excel/50-workbook/culture-info-date-time.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 6 id: excel-culture-info-date-time name: 'Culture info: date and time' description: This sample shows how to use the read-only cultural settings APIs to retrieve system date and time settings. @@ -132,8 +132,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/50-workbook/data-protection.yaml b/samples/excel/50-workbook/data-protection.yaml index 52c5c3e38..07123e44a 100644 --- a/samples/excel/50-workbook/data-protection.yaml +++ b/samples/excel/50-workbook/data-protection.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 7 id: excel-workbook-data-protection name: Data protection description: Protects data in a worksheet and the workbook structure. diff --git a/samples/excel/50-workbook/workbook-save-and-close.yaml b/samples/excel/50-workbook/workbook-save-and-close.yaml index 807e2c31d..c93326fad 100644 --- a/samples/excel/50-workbook/workbook-save-and-close.yaml +++ b/samples/excel/50-workbook/workbook-save-and-close.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 8 id: excel-workbook-save-and-close name: Save and close description: Saves and closes a workbook. 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 bc544d2e8..c6000cd21 100644 --- a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml +++ b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 1 id: excel-workbook-insert-external-worksheets name: Insert external worksheets description: Inserts worksheets from another workbook into the current workbook. diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index d3dee593c..c7c281a44 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -1304,7 +1304,7 @@ 'Excel.CultureInfo#datetimeFormat:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/culture-info-date-time.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/culture-info-date-time.yaml await Excel.run(async (context) => { context.application.cultureInfo.datetimeFormat.load([ @@ -1358,7 +1358,7 @@ 'Excel.CustomPropertyCollection#add:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/custom-properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/26-document/custom-properties.yaml await Excel.run(async (context) => { // Get the key/value pair from the task pane. @@ -1866,7 +1866,7 @@ 'Excel.DocumentProperties#custom:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/custom-properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/26-document/custom-properties.yaml await Excel.run(async (context) => { // Load the keys and values of all custom properties. @@ -2229,7 +2229,7 @@ 'Excel.PivotField#clearAllFilters:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/pivottable-pivotfilters.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-pivotfilters.yaml await Excel.run(async (context) => { // Clear all the PivotFilters. @@ -2248,7 +2248,7 @@ 'Excel.PivotFilters#dateFilter:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/pivottable-pivotfilters.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-pivotfilters.yaml await Excel.run(async (context) => { // Add a date-based PivotFilter. @@ -2280,7 +2280,7 @@ 'Excel.PivotFilters#labelFilter:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/pivottable-pivotfilters.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-pivotfilters.yaml await Excel.run(async (context) => { // Add a PivotFilter to filter based on the strings of item labels. @@ -2307,7 +2307,7 @@ 'Excel.PivotFilters#manualFilter:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/pivottable-pivotfilters.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-pivotfilters.yaml await Excel.run(async (context) => { // Add a PivotFilter to filter on manually-selected items. @@ -2333,7 +2333,7 @@ 'Excel.PivotFilters#valueFilter:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/pivottable-pivotfilters.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-pivotfilters.yaml await Excel.run(async (context) => { // Add a PivotFilter to filter on the values correlated with a row. @@ -2360,7 +2360,7 @@ 'Excel.PivotHierarchy#fields:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/pivottable-pivotfilters.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-pivotfilters.yaml await Excel.run(async (context) => { // Add a PivotFilter to filter on the values correlated with a row. @@ -2533,7 +2533,7 @@ 'Excel.Range#getPivotTables:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/pivottable-get-pivottables.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-get-pivottables.yaml await Excel.run(async (context) => { const activeRange = context.workbook.getSelectedRange(); @@ -3091,7 +3091,7 @@ 'Excel.Range#getSpillingToRange:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/dynamic-arrays.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/dynamic-arrays.yaml await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -3113,7 +3113,7 @@ 'Excel.Range#getDirectPrecedents:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/direct-precedents.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/direct-precedents.yaml await Excel.run(async (context) => { // Precedents are cells referenced by the formula in a cell. @@ -3136,7 +3136,7 @@ 'Excel.Range#workbookRangeAreas:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/direct-precedents.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/direct-precedents.yaml await Excel.run(async (context) => { // Precedents are cells referenced by the formula in a cell. @@ -4099,7 +4099,7 @@ 'Excel.Workbook#pivotTables:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/pivottable-get-pivottables.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-get-pivottables.yaml await Excel.run(async (context) => { // Get the names of all the PivotTables in the workbook. @@ -4267,7 +4267,7 @@ 'Excel.WorkbookRangeAreas#areas:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/direct-precedents.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/direct-precedents.yaml await Excel.run(async (context) => { // Precedents are cells referenced by the formula in a cell. @@ -4290,7 +4290,7 @@ 'Excel.Worksheet#customProperties:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/custom-properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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. @@ -4307,7 +4307,7 @@ 'Excel.Worksheet#pivotTables:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/pivottable-get-pivottables.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-get-pivottables.yaml await Excel.run(async (context) => { // Get the names of all the PivotTables in the current worksheet. @@ -4718,7 +4718,7 @@ 'Excel.WorksheetCustomPropertyCollection#add:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/custom-properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/26-document/custom-properties.yaml await Excel.run(async (context) => { // Get the key/value pair from the task pane. diff --git a/view/excel.json b/view/excel.json index b1e025cc0..f121396da 100644 --- a/view/excel.json +++ b/view/excel.json @@ -30,6 +30,7 @@ "excel-data-validation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/22-data-validation/data-validation.yaml", "excel-document-get-file-in-slices-async": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/26-document/get-file-in-slices-async.yaml", "excel-document-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/26-document/properties.yaml", + "excel-document-custom-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/26-document/custom-properties.yaml", "excel-events-chartcollection-added-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-chartcollection-added-activated.yaml", "excel-events-chart-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-chart-activated.yaml", "excel-event-column-and-row-sort": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/event-column-and-row-sort.yaml", @@ -47,7 +48,9 @@ "excel-pivottable-calculations": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/38-pivottable/pivottable-calculations.yaml", "excel-pivottable-create-and-modify": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/38-pivottable/pivottable-create-and-modify.yaml", "excel-pivottable-filters-and-summaries": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml", + "excel-pivottables-get-pivottables": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/38-pivottable/pivottable-get-pivottables.yaml", "excel-pivottable-slicer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/38-pivottable/pivottable-slicer.yaml", + "excel-pivottables-pivotfilters": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/38-pivottable/pivottable-pivotfilters.yaml", "excel-range-auto-fill": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-auto-fill.yaml", "excel-range-copyfrom": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-copyfrom.yaml", "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-areas.yaml", @@ -60,8 +63,10 @@ "excel-range-range-relationships": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-relationships.yaml", "excel-range-remove-duplicates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-remove-duplicates.yaml", "excel-range-selected-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/selected-range.yaml", + "excel-direct-precedents": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/direct-precedents.yaml", "excel-range-style": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/style.yaml", "excel-range-text-orientation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-text-orientation.yaml", + "excel-range-dynamic-arrays": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/dynamic-arrays.yaml", "excel-range-used-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/used-range.yaml", "excel-range-values-and-formulas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/set-get-values.yaml", "excel-shape-create-and-delete": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/44-shape/shape-create-and-delete.yaml", @@ -84,6 +89,7 @@ "excel-workbook-calculation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/workbook-calculation.yaml", "excel-workbook-create-workbook": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/create-workbook.yaml", "excel-culture-info": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/culture-info.yaml", + "excel-culture-info-date-time": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/culture-info-date-time.yaml", "excel-workbook-data-protection": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/data-protection.yaml", "excel-workbook-save-and-close": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/workbook-save-and-close.yaml", "excel-worksheet-active-worksheet": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/active-worksheet.yaml", @@ -99,13 +105,7 @@ "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-visibility.yaml", - "excel-document-custom-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/custom-properties.yaml", - "excel-range-dynamic-arrays": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/dynamic-arrays.yaml", - "excel-pivottables-get-pivottables": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/pivottable-get-pivottables.yaml", "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", - "excel-culture-info-date-time": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/culture-info-date-time.yaml", - "excel-direct-precedents": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/direct-precedents.yaml", - "excel-pivottables-pivotfilters": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/pivottable-pivotfilters.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/multiple-property-set.yaml", From eaa57586fb03bba327887e7b3e91dfdd5ea9153c Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Fri, 18 Sep 2020 17:50:37 -0700 Subject: [PATCH 306/660] [excel] (Events) add ExcelApi 1.12 comment event handler sample (#488) * add ExcelApi 1.12 comment event handler sample * run yarn start, fix errors * update snippet-extractor-metadata/excel.xlsx to map new comment event sample * code review changes: adjust descriptions, button #ID, and variable declarations * code review changes: simplify sample, remove unnecessecary buttons and methods * make snippet ID more consistent with other samples Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * code review updates: adjust comments, add specificity * code review changes: add clarifying comments * update snippet-extractor-metadata/excel.xlsx with new comment events sample ID * run yarn start, commit updated files Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists/excel.yaml | 11 + .../events-comment-event-handler.yaml | 181 + snippet-extractor-metadata/excel.xlsx | Bin 22343 -> 22500 bytes snippet-extractor-output/snippets.yaml | 6109 +++++++++-------- view/excel.json | 1 + 5 files changed, 3302 insertions(+), 3000 deletions(-) create mode 100644 samples/excel/30-events/events-comment-event-handler.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 6b4d77711..f3a1230e2 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -408,6 +408,17 @@ 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////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 diff --git a/samples/excel/30-events/events-comment-event-handler.yaml b/samples/excel/30-events/events-comment-event-handler.yaml new file mode 100644 index 000000000..a49008cf6 --- /dev/null +++ b/samples/excel/30-events/events-comment-event-handler.yaml @@ -0,0 +1,181 @@ +order: 13 +id: excel-events-comments +name: Comment events +description: 'Registers event handlers to listen for comment additions, changes, and deletions.' +host: EXCEL +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)); + + async function registerEventHandlers() { + await Excel.run(async (context) => { + const comments = context.workbook.worksheets.getActiveWorksheet().comments; + + // Register the onAdded, onChanged, and onDeleted comment event handlers. + comments.onAdded.add(commentAdded); + comments.onChanged.add(commentChanged); + comments.onDeleted.add(commentDeleted); + + await context.sync(); + + console.log("Added event handlers for when comments are added, changed, or deleted."); + }); + } + + async function commentAdded(event: Excel.CommentAddedEventArgs) { + 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. + addedComment.load(["content", "authorName", "creationDate"]); + + await context.sync(); + + // Print out the added comment's data. + console.log(`A comment was added:`); + console.log(` ID: ${event.commentDetails[0].commentId}`); + console.log(` Comment content:${addedComment.content}`); + console.log(` Comment author:${addedComment.authorName}`); + console.log(` Creation date:${addedComment.creationDate}`); + }); + } + + async function commentChanged(event: Excel.CommentChangedEventArgs) { + 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. + changedComment.load(["content", "authorName", "creationDate"]); + + await context.sync(); + + // Print out the changed comment's data. + console.log(`A comment was changed:`); + console.log(` ID: ${event.commentDetails[0].commentId}`); + console.log(` Updated comment content: ${changedComment.content}`); + console.log(` Comment author: ${changedComment.authorName}`); + console.log(` Creation date: ${changedComment.creationDate}`); + }); + } + + async function commentDeleted(event: Excel.CommentDeletedEventArgs) { + 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}`); + }); + } + + async function addComment() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Comments"); + + // Note that an InvalidArgument error will be thrown if multiple cells are passed to `comment.add`. + sheet.comments.add("A1", "To do: add data."); + await context.sync(); + }); + } + + async function editComment() { + 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(); + }); + } + + async function deleteComment() { + await Excel.run(async (context) => { + context.workbook.comments.getItemByCell("Comments!A1").delete(); + await context.sync(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Comments").delete(); + const sheet = context.workbook.worksheets.add("Comments"); + + 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 event handlers to listen for comment additions, changes, and deletions.

        +
        +
        +

        Setup

        + +

        + +
        +
        +

        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.

        + +

        + +

        + +
        + 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/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 46d52577ba510eecee65e10a3602f508aebd5c01..164c0b2070f6cc7204ff7c1b28987f8b35715f54 100644 GIT binary patch delta 13073 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 U*Af87P>Cnhri5lw{}1H<0KffQm;e9( delta 12995 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index c7c281a44..67967eca5 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -1,1671 +1,1760 @@ -'Excel.Application#suspendScreenUpdatingUntilNextSync:member(1)': +'Excel.ChartAxis#displayUnit:member': - >- // 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/master/samples/excel/10-chart/chart-axis.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const rowCount = 500; - const columnCount = 20; - - const startTime = Date.now(); - console.log("Starting..."); + const sheet = context.workbook.worksheets.getItem("Sample"); - 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(); - } + let chart = sheet.charts.getItemAt(0); + let categoryAxis = chart.axes.categoryAxis; + let valueAxis = chart.axes.valueAxis; - 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(); - } - } - } + // Load to get display unit. + valueAxis.load("displayUnit"); await context.sync(); - console.log(`Ending. Adding ${rowCount * columnCount} cells took ${Date.now() - startTime} milliseconds`); + console.log("The vertical axis display unit is: " + valueAxis.displayUnit); }); -'Excel.Application#decimalSeparator:member': +'Excel.ChartAxis#showDisplayUnitLabel: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/master/samples/excel/10-chart/chart-axis.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}`); + const sheet = context.workbook.worksheets.getItem("Sample"); + let chart = sheet.charts.getItemAt(0); + let axis = chart.axes.valueAxis; - console.log("System culture settings: "); - console.log(` System decimal separator: ${systemDecimalSeparator}`); - console.log(` System thousands separator: ${systemThousandsSeparator}`); - console.log(` `); + // Remove display unit. + axis.showDisplayUnitLabel = false; - await context.sync(); + await context.sync(); }); -'Excel.AutoFilter#apply:member(1)': +'Excel.ChartLegendFormat#font: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/master/samples/excel/10-chart/chart-legend.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const farmData = sheet.getUsedRange(); + const sheet = context.workbook.worksheets.getItem("Sample"); + + let chart = sheet.charts.getItemAt(0); + chart.legend.visible = true; + + // Format the legend font. + let font = chart.legend.format.font; + font.bold = true; + font.color = "red"; + font.italic = true; + font.size = 15; + font.name = "Calibri"; + font.underline = "Single"; - // 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.Binding#onDataChanged:member': +'Excel.ChartFill#setSolidColor:member(1)': - >- // 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/master/samples/excel/10-chart/chart-point.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const salesTable = sheet.tables.getItem("SalesTable"); - const salesByQuarterBinding = context.workbook.bindings.add(salesTable.getRange(), "Table", "SalesByQuarter"); - salesByQuarterBinding.onDataChanged.add(onSalesDataChanged); + const sheet = context.workbook.worksheets.getItem("Sample"); - console.log("The data changed handler is registered."); + let pointsCollection = sheet.charts.getItemAt(0).series.getItemAt(0).points; + let point = pointsCollection.getItemAt(2); - await context.sync(); + // Set color for chart point. + point.format.fill.setSolidColor('red'); + + await context.sync(); }); -'Excel.CellPropertiesFill#color:member': +'Excel.ChartSeries#delete: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/master/samples/excel/10-chart/chart-series.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); + const sheet = context.workbook.worksheets.getItem("Sample"); + const seriesCollection = sheet.charts.getItemAt(0).series; + seriesCollection.load("count"); + await context.sync(); - // 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" - }; + if (seriesCollection.count > 0) { + const series = seriesCollection.getItemAt(0); - 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 - } - } - }; + // Delete the first series. + series.delete(); + } - const nonApplicableProps: Excel.SettableCellProperties = { - format: { - fill: { - pattern: Excel.FillPattern.gray25 - }, - font: { - color: "Gray", - italic: true - } - } - }; + await context.sync(); + }); +'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 - 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 - } - } - } - }; + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); - const range = sheet.getRange("A1:E5"); + let seriesCollection = sheet.charts.getItemAt(0); + let rangeSelection = sheet.getRange("C2:C7"); + let xRangeSelection = sheet.getRange("A1:A7"); - // 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] - ]); + // Add a series. + let newSeries = seriesCollection.series.add("Qtr2"); + newSeries.setValues(rangeSelection); + newSeries.setXAxisValues(xRangeSelection); - sheet.getUsedRange().format.autofitColumns(); - await context.sync(); + await context.sync(); }); -'Excel.CellPropertiesFillLoadOptions#color:member': +'Excel.ChartSeries#markerBackgroundColor: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/master/samples/excel/10-chart/chart-series-markers.yaml await Excel.run(async (context) => { - const cell = context.workbook.getActiveCell(); + let sheet = context.workbook.worksheets.getItem("Sample"); + let salesTable = sheet.tables.getItem("SalesTable"); + let dataRange = sheet.getRange("A1:E7"); - // 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 - }); + // 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"; + series0.markerForegroundColor = "black"; + series1.markerStyle = "Star"; + series1.markerForegroundColor = "black"; + series2.markerStyle = "X"; + series2.markerSize = 12; + series3.markerStyle = "Triangle"; + series3.markerBackgroundColor = "purple"; - // 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.CellPropertiesFont#color:member': +'Excel.ChartSeries#markerForegroundColor: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/master/samples/excel/10-chart/chart-series-markers.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" - }; + let sheet = context.workbook.worksheets.getItem("Sample"); + let salesTable = sheet.tables.getItem("SalesTable"); + let dataRange = sheet.getRange("A1:E7"); - 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"); + // 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); - // 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] - ]); + // Set markers. + series0.markerStyle = "Dash"; + series0.markerForegroundColor = "black"; + series1.markerStyle = "Star"; + series1.markerForegroundColor = "black"; + series2.markerStyle = "X"; + series2.markerSize = 12; + series3.markerStyle = "Triangle"; + series3.markerBackgroundColor = "purple"; - sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); -'Excel.CellPropertiesFontLoadOptions#color:member': +'Excel.ChartSeries#markerSize: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/master/samples/excel/10-chart/chart-series-markers.yaml await Excel.run(async (context) => { - const cell = context.workbook.getActiveCell(); + let sheet = context.workbook.worksheets.getItem("Sample"); + let salesTable = sheet.tables.getItem("SalesTable"); + let dataRange = sheet.getRange("A1:E7"); - // 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 - }); + // 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"; + series0.markerForegroundColor = "black"; + series1.markerStyle = "Star"; + series1.markerForegroundColor = "black"; + series2.markerStyle = "X"; + series2.markerSize = 12; + series3.markerStyle = "Triangle"; + series3.markerBackgroundColor = "purple"; - // 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': +'Excel.ChartSeries#markerStyle: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/master/samples/excel/10-chart/chart-series-markers.yaml await Excel.run(async (context) => { - const cell = context.workbook.getActiveCell(); + let sheet = context.workbook.worksheets.getItem("Sample"); + let salesTable = sheet.tables.getItem("SalesTable"); + let dataRange = sheet.getRange("A1:E7"); - // 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 - }); + // 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"; + series0.markerForegroundColor = "black"; + series1.markerStyle = "Star"; + series1.markerForegroundColor = "black"; + series2.markerStyle = "X"; + series2.markerSize = 12; + series3.markerStyle = "Triangle"; + series3.markerBackgroundColor = "purple"; - // 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.CellValueConditionalFormat#format:member': +'Excel.ChartTitle#getSubstring: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/master/samples/excel/10-chart/chart-title-format.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" }; + let sheet = context.workbook.worksheets.getItem("Sample"); + let chart = sheet.charts.getItemAt(0); + // Get first seven characters of the title and color them green. + chart.title.getSubstring(0, 7).font.color = "Yellow"; await context.sync(); }); -'Excel.CellValueConditionalFormat#rule:member': +'Excel.ChartTitle#textOrientation: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/master/samples/excel/10-chart/chart-title-format.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" }; + const title = sheet.charts.getItemAt(0).title; + title.textOrientation = -45; await context.sync(); }); -'Excel.ChartAxis#displayUnit:member': +'Excel.ChartTrendline#type: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/master/samples/excel/10-chart/chart-trendlines.yaml await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - let chart = sheet.charts.getItemAt(0); - let categoryAxis = chart.axes.categoryAxis; - let valueAxis = chart.axes.valueAxis; + let seriesCollection = sheet.charts.getItemAt(0).series; - // Load to get display unit. - valueAxis.load("displayUnit"); + // Get the trendline for series 1 and load its type property. + let trendline = seriesCollection.getItemAt(0).trendlines.getItem(0); + trendline.load("type"); await context.sync(); - console.log("The vertical axis display unit is: " + valueAxis.displayUnit); + console.log("The trendline type is:" + trendline.type); }); -'Excel.ChartAxis#showDisplayUnitLabel:member': +'Excel.ChartTrendlineCollection#add:member(1)': - >- // 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/master/samples/excel/10-chart/chart-trendlines.yaml await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - let chart = sheet.charts.getItemAt(0); - let axis = chart.axes.valueAxis; - // Remove display unit. - axis.showDisplayUnitLabel = false; + let seriesCollection = sheet.charts.getItemAt(0).series; + + // Add a trendline. + seriesCollection.getItemAt(0).trendlines.add("Linear"); await context.sync(); }); -'Excel.ChartFill#setSolidColor:member(1)': +'Excel.ChartTrendlineFormat#line:member': - >- // 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/master/samples/excel/10-chart/chart-trendlines.yaml await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - let pointsCollection = sheet.charts.getItemAt(0).series.getItemAt(0).points; - let point = pointsCollection.getItemAt(2); + let seriesCollection = sheet.charts.getItemAt(0).series; - // Set color for chart point. - point.format.fill.setSolidColor('red'); + // 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(); + await context.sync(); + + console.log("The trendline color is:" + line.color); }); -'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/master/samples/excel/10-chart/chart-trendlines.yaml await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - let chart = sheet.charts.getItemAt(0); - chart.legend.visible = true; + let seriesCollection = sheet.charts.getItemAt(0).series; + let trendline = seriesCollection.getItemAt(0).trendlines.getItem(0); - // Format the legend font. - let font = chart.legend.format.font; - font.bold = true; - font.color = "red"; - font.italic = true; - font.size = 15; - font.name = "Calibri"; - font.underline = "Single"; + // Set format of the trendline to a solid, red line. + let line = trendline.format.line; + line.color = '#FF0000'; await context.sync(); + + console.log("The trendline color has been set to:" + line.color); }); -'Excel.ChartSeries#delete:member(1)': +'Excel.Comment#content:member': - >- // 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/master/samples/excel/12-comment/comment-basics.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(); + const sheet = context.workbook.worksheets.getItem("Comments"); + const comment = sheet.comments.getItemAt(0); + comment.content = "PLEASE add headers here."; + await context.sync(); }); -'Excel.ChartSeries#setValues:member(1)': +'Excel.Comment#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/master/samples/excel/12-comment/comment-basics.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(); + context.workbook.comments.getItemByCell("Comments!A2").delete(); + await context.sync(); }); -'Excel.ChartSeries#markerBackgroundColor:member': +'Excel.Comment#load:member(2)': - >- // 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/master/samples/excel/12-comment/comment-basics.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); - - // Set markers. - series0.markerStyle = "Dash"; - series0.markerForegroundColor = "black"; - series1.markerStyle = "Star"; - series1.markerForegroundColor = "black"; - series2.markerStyle = "X"; - series2.markerSize = 12; - series3.markerStyle = "Triangle"; - series3.markerBackgroundColor = "purple"; + const comment = context.workbook.comments.getItemByCell("Comments!A2"); + comment.load(["authorEmail", "authorName", "creationDate"]); + await context.sync(); + console.log(`${comment.creationDate.toDateString()}: ${comment.authorName} (${comment.authorEmail})`); await context.sync(); }); -'Excel.ChartSeries#markerForegroundColor:member': +'Excel.CommentCollection#add:member(1)': - >- // 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/master/samples/excel/12-comment/comment-basics.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); - - // Set markers. - series0.markerStyle = "Dash"; - series0.markerForegroundColor = "black"; - series1.markerStyle = "Star"; - series1.markerForegroundColor = "black"; - series2.markerStyle = "X"; - series2.markerSize = 12; - series3.markerStyle = "Triangle"; - series3.markerBackgroundColor = "purple"; + const sheet = context.workbook.worksheets.getItem("Comments"); + // Note that an InvalidArgument error will be thrown if multiple cells passed to `comment.add`. + sheet.comments.add("A2", "TODO: add data."); await context.sync(); }); -'Excel.ChartSeries#markerSize:member': +'Excel.CommentRichContent#mentions: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/master/samples/excel/12-comment/comment-mentions.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); + const sheet = context.workbook.worksheets.getItem("Comments"); + const mention = { + email: "kakri@contoso.com", + id: 0, + name: "Kate Kristensen" + }; - // Set markers. - series0.markerStyle = "Dash"; - series0.markerForegroundColor = "black"; - series1.markerStyle = "Star"; - series1.markerForegroundColor = "black"; - series2.markerStyle = "X"; - series2.markerSize = 12; - series3.markerStyle = "Triangle"; - series3.markerBackgroundColor = "purple"; + // 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.ChartSeries#markerStyle:member': +'Excel.CommentReply#content: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/master/samples/excel/12-comment/comment-replies.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); - - // Set markers. - series0.markerStyle = "Dash"; - series0.markerForegroundColor = "black"; - series1.markerStyle = "Star"; - series1.markerForegroundColor = "black"; - series2.markerStyle = "X"; - series2.markerSize = 12; - series3.markerStyle = "Triangle"; - series3.markerBackgroundColor = "purple"; + 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!"; await context.sync(); }); -'Excel.ChartTitle#getSubstring:member(1)': +'Excel.CommentReply#delete: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/master/samples/excel/12-comment/comment-replies.yaml await Excel.run(async (context) => { - let sheet = context.workbook.worksheets.getItem("Sample"); - let chart = sheet.charts.getItemAt(0); - - // Get first seven characters of the title and color them green. - chart.title.getSubstring(0, 7).font.color = "Yellow"; + // 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(); await context.sync(); }); -'Excel.ChartTitle#textOrientation:member': +'Excel.CommentReplyCollection#add: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/master/samples/excel/12-comment/comment-replies.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const title = sheet.charts.getItemAt(0).title; - title.textOrientation = -45; - + // Adds a reply to the first comment in this worksheet. + const sheet = context.workbook.worksheets.getItem("Comments"); + const comment = sheet.comments.getItemAt(0); + comment.replies.add("Add content to this worksheet."); await context.sync(); }); -'Excel.ChartTrendline#type:member': +'Excel.Comment#resolved: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/master/samples/excel/12-comment/comment-resolution.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - let seriesCollection = sheet.charts.getItemAt(0).series; - - // Get the trendline for series 1 and load its type property. - let trendline = seriesCollection.getItemAt(0).trendlines.getItem(0); - trendline.load("type"); - + const sheet = context.workbook.worksheets.getItem("Comments"); + sheet.comments.getItemAt(0).resolved = true; await context.sync(); - - console.log("The trendline type is:" + trendline.type); }); -'Excel.ChartTrendlineCollection#add:member(1)': +'Excel.Application#decimalSeparator: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/master/samples/excel/50-workbook/culture-info.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + context.application.load("decimalSeparator,thousandsSeparator"); + context.application.cultureInfo.numberFormat.load("numberDecimalSeparator,numberGroupSeparator"); + await context.sync(); - let seriesCollection = sheet.charts.getItemAt(0).series; + // Local settings are set under the "Options > Advanced" menu. + const localDecimalSeparator = context.application.decimalSeparator; + const localThousandsSeparator = context.application.thousandsSeparator; - // Add a trendline. - seriesCollection.getItemAt(0).trendlines.add("Linear"); + const systemDecimalSeparator = context.application.cultureInfo.numberFormat.numberDecimalSeparator; + const systemThousandsSeparator = context.application.cultureInfo.numberFormat.numberGroupSeparator; - await context.sync(); + 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.ChartTrendlineFormat#line:member': +'Excel.NumberFormatInfo#numberDecimalSeparator: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/master/samples/excel/50-workbook/culture-info.yaml - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + // This will convert a number like "14,37" to "14.37" - let seriesCollection = sheet.charts.getItemAt(0).series; + // (assuming the system decimal separator is "."). + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); - // Get the color of the chart trendline. - let trendline = seriesCollection.getItemAt(0).trendlines.getItem(0); - let line = trendline.format.line; - line.load("color"); + const decimalSource = sheet.getRange("B2"); - await context.sync(); + decimalSource.load("values"); - console.log("The trendline color is:" + line.color); - }); - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-trendlines.yaml + context.application.cultureInfo.numberFormat.load("numberDecimalSeparator"); - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + await context.sync(); - let seriesCollection = sheet.charts.getItemAt(0).series; - let trendline = seriesCollection.getItemAt(0).trendlines.getItem(0); - // Set format of the trendline to a solid, red line. - let line = trendline.format.line; - line.color = '#FF0000'; + const systemDecimalSeparator = + context.application.cultureInfo.numberFormat.numberDecimalSeparator; - await context.sync(); + const oldDecimalString: string = decimalSource.values[0][0]; - console.log("The trendline color has been set to:" + line.color); - }); -'Excel.ColorScaleConditionalFormat#criteria:member': + + // This assumes the input column is standardized to use "," as the decimal + separator. + + const newDecimalString = oldDecimalString.replace(",", + systemDecimalSeparator); + + + const resultRange = sheet.getRange("C2"); + + resultRange.values = [[newDecimalString]]; + + resultRange.format.autofitColumns(); + + await context.sync(); + }); +'Excel.NumberFormatInfo#numberGroupSeparator: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/master/samples/excel/50-workbook/culture-info.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; + // This will convert a number like "123-456-789" to "123,456,789" + // (assuming the system thousands separator is ","). + const sheet = context.workbook.worksheets.getItem("Sample"); + const bigNumberSource = sheet.getRange("B3"); + bigNumberSource.load("values"); + context.application.cultureInfo.numberFormat.load("numberGroupSeparator"); + await context.sync(); - await context.sync(); + const systemThousandsSeparator = context.application.cultureInfo.numberFormat.numberGroupSeparator; + const oldBigNumberString: string = bigNumberSource.values[0][0]; + + // This assumes the input column is standardized to use "-" as the number group separator. + const newBigNumberString = oldBigNumberString.replace(/-/g, systemThousandsSeparator); + + const resultRange = sheet.getRange("C3"); + resultRange.values = [[newBigNumberString]]; + resultRange.format.autofitColumns(); + await context.sync(); }); -'Excel.Comment#content:member': +'Excel.CultureInfo#datetimeFormat: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/master/samples/excel/50-workbook/culture-info-date-time.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(); + context.application.cultureInfo.datetimeFormat.load([ + "longDatePattern", + "shortDatePattern", + "dateSeparator", + "longTimePattern", + "timeSeparator" + ]); + await context.sync(); + + // Use the cultural settings API to retrieve the user's system date and time settings. + const systemLongDatePattern = context.application.cultureInfo.datetimeFormat.longDatePattern; + const systemShortDatePattern = context.application.cultureInfo.datetimeFormat.shortDatePattern; + const systemDateSeparator = context.application.cultureInfo.datetimeFormat.dateSeparator; + const systemLongTimePattern = context.application.cultureInfo.datetimeFormat.longTimePattern; + const systemTimeSeparator = context.application.cultureInfo.datetimeFormat.timeSeparator; + + // Write the date and time settings in your table. + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const dateTimeData = sheet.getRange("A2:B6"); + dateTimeData.values = [ + ["Long date", systemLongDatePattern], + ["Short date", systemShortDatePattern], + ["Date separator", systemDateSeparator], + ["Long time format", systemLongTimePattern], + ["Time separator", systemTimeSeparator] + ]; + + sheet.tables + .getItemAt(0) + .getRange() + .format.autofitColumns(); + + await context.sync(); }); -'Excel.Comment#delete:member(1)': +'Excel.CustomXmlPart#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/master/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml await Excel.run(async (context) => { - context.workbook.comments.getItemByCell("Comments!A2").delete(); + const settings = context.workbook.settings; + const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); await context.sync(); + + if (xmlPartIDSetting.value) { + let customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); + const xmlBlob = customXmlPart.getXml(); + customXmlPart.delete(); + customXmlPart = context.workbook.customXmlParts.getItemOrNullObject(xmlPartIDSetting.value); + + await context.sync(); + + if (customXmlPart.isNullObject) { + $("#display-xml").text(`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); + } + + await context.sync(); + } }); -'Excel.Comment#load:member(2)': +'Excel.CustomXmlPart#getXml: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/master/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml await Excel.run(async (context) => { - const comment = context.workbook.comments.getItemByCell("Comments!A2"); - comment.load(["authorEmail", "authorName", "creationDate"]); + // 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(); - console.log(`${comment.creationDate.toDateString()}: ${comment.authorName} (${comment.authorEmail})`); + 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.Comment#resolved:member': +'Excel.CustomXmlPart#id: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/master/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Comments"); - sheet.comments.getItemAt(0).resolved = true; + // 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.CommentCollection#add:member(1)': +'Excel.CustomXmlPart#setXml: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/master/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Comments"); - - // Note that an InvalidArgument error will be thrown if multiple cells passed to `comment.add`. - sheet.comments.add("A2", "TODO: add data."); + 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. + customXmlPart.setXml("JohnHitomi"); + const xmlBlob = customXmlPart.getXml(); + await context.sync(); + + const readableXml = addLineBreaksToXML(xmlBlob.value); + $("#display-xml").text(readableXml); + await context.sync(); + } }); -'Excel.CommentReply#content:member': +'Excel.CustomXmlPartCollection#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/master/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml await Excel.run(async (context) => { - 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. + // 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(); - // Append "Please!" to the end of the comment reply. - reply.content += " Please!"; + 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.CommentReply#delete:member(1)': +'Excel.CustomXmlPartCollection#getItem: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/master/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.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 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. + customXmlPart.setXml("JohnHitomi"); + const xmlBlob = customXmlPart.getXml(); + await context.sync(); + + const readableXml = addLineBreaksToXML(xmlBlob.value); + $("#display-xml").text(readableXml); + await context.sync(); + } }); -'Excel.CommentReplyCollection#add:member(1)': +'Excel.CustomXmlPartScopedCollection#getItemOrNullObject: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/master/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml await Excel.run(async (context) => { - // Adds a reply to the first comment in this worksheet. - const sheet = context.workbook.worksheets.getItem("Comments"); - const comment = sheet.comments.getItemAt(0); - comment.replies.add("Add content to this worksheet."); + const settings = context.workbook.settings; + const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); await context.sync(); + + if (xmlPartIDSetting.value) { + let customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); + const xmlBlob = customXmlPart.getXml(); + customXmlPart.delete(); + customXmlPart = context.workbook.customXmlParts.getItemOrNullObject(xmlPartIDSetting.value); + + await context.sync(); + + if (customXmlPart.isNullObject) { + $("#display-xml").text(`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); + } + + await context.sync(); + } }); -'Excel.CommentRichContent#mentions:member': +'Excel.CustomXmlPartCollection#getByNamespace:member(1)': - >- // 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/master/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Comments"); - const mention = { - email: "kakri@contoso.com", - id: 0, - name: "Kate Kristensen" - }; + $("#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(); - // 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?" - }; + 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.`); + } - // 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.ConditionalCellValueRule#formula1:member': +'Excel.CustomXmlPartScopedCollection#getCount: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/master/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("B21:E23"); - const conditionalFormat = range.conditionalFormats - .add(Excel.ConditionalFormatType.cellValue); - conditionalFormat.cellValue.format.font.color = "red"; - conditionalFormat.cellValue.rule = { formula1: "=0", operator: "LessThan" }; + $("#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(); - }); -'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 - 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" }; + 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.ConditionalFormat#cellValue:member': +'Excel.CustomXmlPartScopedCollection#getOnlyItem: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/master/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("B21:E23"); - const conditionalFormat = range.conditionalFormats - .add(Excel.ConditionalFormatType.cellValue); - conditionalFormat.cellValue.format.font.color = "red"; - conditionalFormat.cellValue.rule = { formula1: "=0", operator: "LessThan" }; + $("#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(); - }); -'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 - 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; + 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.ConditionalFormat#custom:member': +'Excel.TableChangedEventArgs#details: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/master/samples/excel/30-events/data-change-event-details.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"; + async function onTableChanged(eventArgs: Excel.TableChangedEventArgs) { + await Excel.run(async (context) => { + const details = eventArgs.details; + const address = eventArgs.address; - await context.sync(); - }); -'Excel.ConditionalFormat#dataBar:member': + console.log(`Change at ${address}: was ${details.valueBefore}(${details.valueTypeBefore}),` + + ` now is ${details.valueAfter}(${details.valueTypeAfter})`); + }); + } +'Excel.DataValidation#prompt: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/master/samples/excel/22-data-validation/data-validation.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; + 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.ConditionalFormat#getRange:member(1)': +'Excel.DataValidation#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/master/samples/excel/22-data-validation/data-validation.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const worksheetRange = sheet.getRange(); - worksheetRange.conditionalFormats.load("type"); + const sheet = context.workbook.worksheets.getItem("Decision"); + const nameRange = + sheet.tables.getItem("NameOptionsTable").columns.getItem("Baby Name").getDataBodyRange(); - await context.sync(); + // When you are developing, it is a good practice to + // clear the dataValidation object with each run of your code. + nameRange.dataValidation.clear(); - let cfRangePairs: { cf: Excel.ConditionalFormat, range: Excel.Range }[] = []; - worksheetRange.conditionalFormats.items.forEach(item => { - cfRangePairs.push({ - cf: item, - range: item.getRange().load("address") - }); - }); + const nameSourceRange = context.workbook.worksheets.getItem("Names").getRange("A1:A3"); - await context.sync(); + let approvedListRule = { + list: { + inCellDropDown: true, + source: nameSourceRange + } + }; + nameRange.dataValidation.rule = approvedListRule; - if (cfRangePairs.length > 0) { - cfRangePairs.forEach(item => { - console.log(item.cf.type); - }); - } else { - console.log("No conditional formats applied."); - } + await context.sync(); }); -'Excel.ConditionalFormat#iconSet:member': +'Excel.DataValidation#errorAlert: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/master/samples/excel/22-data-validation/data-validation.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; + const sheet = context.workbook.worksheets.getItem("Decision"); + const commentsRange = + sheet.tables.getItem("NameOptionsTable").columns.getItem("Comments").getDataBodyRange(); - /* - 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. + // When you are developing, it is a good practice to + // clear the dataValidation object with each run of your code. + commentsRange.dataValidation.clear(); - 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 - 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", + // 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.ConditionalFormat#preset:member': +'Excel.DataValidationRule#list: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/master/samples/excel/22-data-validation/data-validation.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.presetCriteria); - conditionalFormat.preset.format.font.color = "white"; - conditionalFormat.preset.rule = { criterion: Excel.ConditionalFormatPresetCriterion.oneStdDevAboveAverage }; + const sheet = context.workbook.worksheets.getItem("Decision"); + const nameRange = + sheet.tables.getItem("NameOptionsTable").columns.getItem("Baby Name").getDataBodyRange(); + + // When you are developing, it is a good practice to + // clear the dataValidation object with each run of your code. + nameRange.dataValidation.clear(); + + const nameSourceRange = context.workbook.worksheets.getItem("Names").getRange("A1:A3"); + + let approvedListRule = { + list: { + inCellDropDown: true, + source: nameSourceRange + } + }; + nameRange.dataValidation.rule = approvedListRule; await context.sync(); }); -'Excel.ConditionalFormat#textComparison:member': +'Excel.DataValidationRule#wholeNumber: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/master/samples/excel/22-data-validation/data-validation.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" }; + 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.ConditionalFormat#type:member': +'Excel.Range#getDirectPrecedents: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/master/samples/excel/42-range/direct-precedents.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") - }); - }); + // 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(); - await context.sync(); + console.log(`Direct precedent cells of ${range.address}:`); - if (cfRangePairs.length > 0) { - cfRangePairs.forEach(item => { - console.log(item.cf.type); - }); - } else { - console.log("No conditional formats applied."); - } + // 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.ConditionalFormatCollection#add:member(1)': +'Excel.Range#workbookRangeAreas: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/master/samples/excel/42-range/direct-precedents.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; + // 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(); - 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}`); + } + await context.sync(); }); -'Excel.ConditionalFormatCollection#clearAll:member(1)': +'Excel.WorkbookRangeAreas#areas: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/master/samples/excel/42-range/direct-precedents.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const range = sheet.getRange(); - range.conditionalFormats.clearAll(); + // 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(); - await context.sync(); + console.log(`Direct precedent cells of ${range.address}:`); - $(".conditional-formats").hide(); + // 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.ConditionalFormatCollection#getItemAt:member(1)': +'Excel.CustomPropertyCollection#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/master/samples/excel/26-document/custom-properties.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const worksheetRange = sheet.getRange(); - worksheetRange.conditionalFormats.load("type"); - - await context.sync(); + // Get the key/value pair from the task pane. + const userKey = $("#key").text(); + const userValue = $("#value").text(); - let cfRangePairs: { cf: Excel.ConditionalFormat, range: Excel.Range }[] = []; - worksheetRange.conditionalFormats.items.forEach(item => { - cfRangePairs.push({ - cf: item, - range: item.getRange().load("address") - }); - }); + // Add the custom property. + const customDocProperties = context.workbook.properties.custom; + customDocProperties.add(userKey, userValue); - await context.sync(); + await context.sync(); - if (cfRangePairs.length > 0) { - cfRangePairs.forEach(item => { - console.log(item.cf.type); - }); - } else { - console.log("No conditional formats applied."); - } + console.log(`Successfully set custom document property ${userKey}:${userValue}.`); }); -'Excel.ConditionalFormatRule#formula:member': +'Excel.DocumentProperties#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/master/samples/excel/26-document/custom-properties.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"; + // Load the keys and values of all custom properties. + const customDocProperties = context.workbook.properties.custom; + customDocProperties.load(["key", "value"]); + await context.sync(); - 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. + customDocProperties.items.forEach((property) => { + console.log(`${property.key}:${property.value}`); + }); }); -'Excel.ConditionalIconCriterion#formula:member': +'Excel.Worksheet#customProperties: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/master/samples/excel/26-document/custom-properties.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; + // 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(); - /* - 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. + // 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.WorksheetCustomPropertyCollection#add:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/26-document/custom-properties.yaml - 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 - 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 Excel.run(async (context) => { + // Get the key/value pair from the task pane. + const userKey = $("#key").text(); + const userValue = $("#value").text(); - await context.sync(); + // Add the custom property. + const customWorksheetProperties = context.workbook.worksheets.getActiveWorksheet().customProperties; + customWorksheetProperties.add(userKey, userValue); + + await context.sync(); + + console.log(`Successfully set custom worksheet property ${userKey}:${userValue}.`); }); -'Excel.ConditionalIconCriterion#operator:member': +'Excel.Workbook#properties: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/master/samples/excel/26-document/properties.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; + 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"; - /* - 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. + let docProperties = context.workbook.properties; - 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 - 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", - } - ]; + // 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.Range#sort: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/master/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.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 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" }; + console.log("Adding row handler"); + const sheet = context.workbook.worksheets.getActiveWorksheet(); - 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.ConditionalIconCriterion#type:member': +'Excel.Worksheet#onColumnSorted: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/master/samples/excel/30-events/event-column-and-row-sort.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; + console.log("Adding column handler"); + const sheet = context.workbook.worksheets.getActiveWorksheet(); - /* - 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. + // 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(); - 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 - 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", - } - ]; + // 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(); + }); + }); }); -'Excel.ConditionalPresetCriteriaRule#criterion:member': +'Excel.Binding#onDataChanged: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/master/samples/excel/30-events/data-changed.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.presetCriteria); - conditionalFormat.preset.format.font.color = "white"; - conditionalFormat.preset.rule = { criterion: Excel.ConditionalFormatPresetCriterion.oneStdDevAboveAverage }; + const sheet = context.workbook.worksheets.getItem("Sample"); + const salesTable = sheet.tables.getItem("SalesTable"); + const salesByQuarterBinding = context.workbook.bindings.add(salesTable.getRange(), "Table", "SalesByQuarter"); + salesByQuarterBinding.onDataChanged.add(onSalesDataChanged); + + console.log("The data changed handler is registered."); await context.sync(); }); -'Excel.ConditionalTextComparisonRule#text:member': +'Excel.CommentCollection#onAdded: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/master/samples/excel/30-events/events-comment-event-handler.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" }; + const comments = context.workbook.worksheets.getActiveWorksheet().comments; + + // Register the onAdded, onChanged, and onDeleted comment event handlers. + comments.onAdded.add(commentAdded); + comments.onChanged.add(commentChanged); + comments.onDeleted.add(commentDeleted); await context.sync(); + + console.log("Added event handlers for when comments are added, changed, or deleted."); }); -'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/master/samples/excel/30-events/events-comment-event-handler.yaml - await Excel.run(async (context) => { - context.application.cultureInfo.datetimeFormat.load([ - "longDatePattern", - "shortDatePattern", - "dateSeparator", - "longTimePattern", - "timeSeparator" - ]); - await context.sync(); - - // Use the cultural settings API to retrieve the user's system date and time settings. - const systemLongDatePattern = context.application.cultureInfo.datetimeFormat.longDatePattern; - const systemShortDatePattern = context.application.cultureInfo.datetimeFormat.shortDatePattern; - const systemDateSeparator = context.application.cultureInfo.datetimeFormat.dateSeparator; - const systemLongTimePattern = context.application.cultureInfo.datetimeFormat.longTimePattern; - const systemTimeSeparator = context.application.cultureInfo.datetimeFormat.timeSeparator; + async function commentAdded(event: Excel.CommentAddedEventArgs) { + 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); - // Write the date and time settings in your table. - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const dateTimeData = sheet.getRange("A2:B6"); - dateTimeData.values = [ - ["Long date", systemLongDatePattern], - ["Short date", systemShortDatePattern], - ["Date separator", systemDateSeparator], - ["Long time format", systemLongTimePattern], - ["Time separator", systemTimeSeparator] - ]; + // Load the added comment's data. + addedComment.load(["content", "authorName", "creationDate"]); - sheet.tables - .getItemAt(0) - .getRange() - .format.autofitColumns(); + await context.sync(); - await context.sync(); - }); -'Excel.CustomConditionalFormat#format:member': + // Print out the added comment's data. + console.log(`A comment was added:`); + console.log(` ID: ${event.commentDetails[0].commentId}`); + console.log(` Comment content:${addedComment.content}`); + console.log(` Comment author:${addedComment.authorName}`); + console.log(` Creation date:${addedComment.creationDate}`); + }); + } +'Excel.CommentCollection#onChanged: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/master/samples/excel/30-events/events-comment-event-handler.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"; + const comments = context.workbook.worksheets.getActiveWorksheet().comments; + + // Register the onAdded, onChanged, and onDeleted comment event handlers. + comments.onAdded.add(commentAdded); + comments.onChanged.add(commentChanged); + comments.onDeleted.add(commentDeleted); await context.sync(); + + console.log("Added event handlers for when comments are added, changed, or deleted."); }); -'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/master/samples/excel/30-events/events-comment-event-handler.yaml - await Excel.run(async (context) => { - // Get the key/value pair from the task pane. - const userKey = $("#key").text(); - const userValue = $("#value").text(); + async function commentChanged(event: Excel.CommentChangedEventArgs) { + 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); - // Add the custom property. - const customDocProperties = context.workbook.properties.custom; - customDocProperties.add(userKey, userValue); + // Load the changed comment's data. + changedComment.load(["content", "authorName", "creationDate"]); - await context.sync(); + await context.sync(); - console.log(`Successfully set custom document property ${userKey}:${userValue}.`); - }); -'Excel.CustomXmlPart#delete:member(1)': + // Print out the changed comment's data. + console.log(`A comment was changed:`); + console.log(` ID: ${event.commentDetails[0].commentId}`); + console.log(` Updated comment content: ${changedComment.content}`); + console.log(` Comment author: ${changedComment.authorName}`); + console.log(` Creation date: ${changedComment.creationDate}`); + }); + } +'Excel.CommentCollection#onDeleted: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/master/samples/excel/30-events/events-comment-event-handler.yaml await Excel.run(async (context) => { - const settings = context.workbook.settings; - const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); - await context.sync(); - - if (xmlPartIDSetting.value) { - let customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); - const xmlBlob = customXmlPart.getXml(); - customXmlPart.delete(); - customXmlPart = context.workbook.customXmlParts.getItemOrNullObject(xmlPartIDSetting.value); + const comments = context.workbook.worksheets.getActiveWorksheet().comments; - await context.sync(); - - if (customXmlPart.isNullObject) { - $("#display-xml").text(`The XML part with the id ${xmlPartIDSetting.value} has been deleted.`); + // Register the onAdded, onChanged, and onDeleted comment event handlers. + comments.onAdded.add(commentAdded); + comments.onChanged.add(commentChanged); + comments.onDeleted.add(commentDeleted); - // 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); - } + await context.sync(); - await context.sync(); - } + console.log("Added event handlers for when comments are added, changed, or deleted."); }); -'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/master/samples/excel/30-events/events-comment-event-handler.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(); + async function commentDeleted(event: Excel.CommentDeletedEventArgs) { + 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}`); + }); + } +'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 + await Excel.run(async (context) => { + context.runtime.load("enableEvents"); 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); + // check if events are enabled and toggle accordingly + const eventBoolean = !context.runtime.enableEvents + context.runtime.enableEvents = eventBoolean; + if (eventBoolean) { + console.log("Events are currently on."); + } else { + console.log("Events are currently off."); + } await context.sync(); }); -'Excel.CustomXmlPart#id:member': +'Excel.Table#onChanged: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/master/samples/excel/30-events/events-table-changed.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(); + let table = context.workbook.tables.getItemAt(0); + table.onChanged.add(onChange); await context.sync(); + console.log("A handler has been registered for the onChanged event"); + }); +'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 - 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 Excel.run(async (context) => { + let table = context.workbook.tables.getItemAt(0); + table.onSelectionChanged.add(onSelectionChange); await context.sync(); + console.log("A handler has been registered for table onSelectionChanged event"); }); -'Excel.CustomXmlPart#setXml:member(1)': +'Excel.TableSelectionChangedEventArgs#address: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/master/samples/excel/30-events/events-table-changed.yaml - await Excel.run(async (context) => { - const settings = context.workbook.settings; - const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); - await context.sync(); + 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); + }); + } +'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 - if (xmlPartIDSetting.value) { - const customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); + async function onChange(event) { + await Excel.run(async (context) => { + let table = context.workbook.tables.getItem(event.tableId); + let worksheet = context.workbook.worksheets.getItem(event.worksheetId); + worksheet.load("name"); - // The setXml method does a whole-for-whole replacement - // of the entire XML. - customXmlPart.setXml("JohnHitomi"); - const xmlBlob = customXmlPart.getXml(); await context.sync(); - const readableXml = addLineBreaksToXML(xmlBlob.value); - $("#display-xml").text(readableXml); - await context.sync(); - } - }); -'Excel.CustomXmlPartCollection#add:member(1)': + console.log("Handler for table collection onChanged event has been triggered. Data changed address: " + event.address); + console.log("Table Id : " + event.tableId); + console.log("Worksheet Id : " + worksheet.name); + }); + } +'Excel.TableChangedEventArgs#worksheetId: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/master/samples/excel/30-events/events-tablecollection-changed.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(); + async function onChange(event) { + await Excel.run(async (context) => { + let table = context.workbook.tables.getItem(event.tableId); + let worksheet = context.workbook.worksheets.getItem(event.worksheetId); + worksheet.load("name"); - await context.sync(); + await context.sync(); - const readableXml = addLineBreaksToXML(xmlBlob.value); - $("#display-xml").text(readableXml); + console.log("Handler for table collection onChanged event has been triggered. Data changed address: " + event.address); + console.log("Table Id : " + event.tableId); + console.log("Worksheet Id : " + worksheet.name); + }); + } +'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 - // Store the XML part's ID in a setting. - const settings = context.workbook.settings; - settings.add("ContosoReviewXmlPartId", customXmlPart.id); + await Excel.run(async (context) => { + let tables = context.workbook.tables; + tables.onChanged.add(onChange); await context.sync(); + console.log("A handler has been registered for the table collection onChanged event"); }); -'Excel.CustomXmlPartCollection#getItem:member(1)': +'Excel.SettingCollection#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/master/samples/excel/30-events/events-workbook-and-worksheet-collection.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. - customXmlPart.setXml("JohnHitomi"); - const xmlBlob = customXmlPart.getXml(); - await context.sync(); + const settings = context.workbook.settings; + settings.onSettingsChanged.add(onChangedSetting); - const readableXml = addLineBreaksToXML(xmlBlob.value); - $("#display-xml").text(readableXml); - await context.sync(); - } + await context.sync(); + console.log("Settings changed handler registered."); }); -'Excel.CustomXmlPartCollection#getByNamespace:member(1)': +'Excel.SettingCollection#onSettingsChanged:member': - >- // 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/master/samples/excel/30-events/events-workbook-and-worksheet-collection.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(); + const settings = context.workbook.settings; + settings.onSettingsChanged.add(onChangedSetting); await context.sync(); + console.log("Settings changed handler registered."); + }); +'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 - if (numberOfPartsInNamespace.value == 1) { - const onlyXmlPartInNamespace = filteredXmlParts.getOnlyItem(); - const xmlBlob = onlyXmlPartInNamespace.getXml(); - - await context.sync(); + 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: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml - // Make it a bit more readable. - const readableXml = xmlBlob.value.replace(/>\n<"); + await Excel.run(async (context) => { + let sheets = context.workbook.worksheets; + sheets.onActivated.add(onActivate); - $("#display-xml").text(`The only XML part in the namespace ${contosoNamespace} is: - ${readableXml}`); + 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/master/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml - } else { - console.log(`There are ${numberOfPartsInNamespace.value} XML parts with namespace ${contosoNamespace}. There should be exactly 1.`); - } + 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.CustomXmlPartScopedCollection#getItemOrNullObject:member(1)': +'Excel.WorksheetCollection#onDeactivated: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/master/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml await Excel.run(async (context) => { - const settings = context.workbook.settings; - const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); + let sheets = context.workbook.worksheets; + sheets.onDeactivated.add(onDeactivate); + await context.sync(); + console.log("A handler has been registered for the OnDeactivate event."); + }); +'Excel.Worksheet#onChanged:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-worksheet.yaml - if (xmlPartIDSetting.value) { - let customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); - const xmlBlob = customXmlPart.getXml(); - customXmlPart.delete(); - customXmlPart = context.workbook.customXmlParts.getItemOrNullObject(xmlPartIDSetting.value); + await Excel.run(async (context) => { + let sheet = context.workbook.worksheets.getItem("Sample"); + sheet.onChanged.add(onChange); + await context.sync(); - await context.sync(); + console.log("Added a worksheet-level data-changed event handler."); + }); +'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 - if (customXmlPart.isNullObject) { - $("#display-xml").text(`The XML part with the id ${xmlPartIDSetting.value} has been deleted.`); + 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(); + }); + }); - // 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); - } + console.log("The worksheet click handler is registered."); - await context.sync(); - } + await context.sync(); }); -'Excel.CustomXmlPartScopedCollection#getCount:member(1)': +'Excel.WorksheetSingleClickedEventArgs#address:member': - >- // 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/master/samples/excel/30-events/event-worksheet-single-click.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(); + 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(); + }); + }); - if (numberOfPartsInNamespace.value == 1) { - const onlyXmlPartInNamespace = filteredXmlParts.getOnlyItem(); - const xmlBlob = onlyXmlPartInNamespace.getXml(); + console.log("The worksheet click handler is registered."); - await context.sync(); + await context.sync(); + }); +'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 - // Make it a bit more readable. - const readableXml = xmlBlob.value.replace(/>\n<"); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const totalName = sheet.names.getItemOrNullObject("TotalAmount"); + totalName.load(); + await context.sync(); - $("#display-xml").text(`The only XML part in the namespace ${contosoNamespace} is: - ${readableXml}`); + if (totalName.value) { + totalName.delete(); + // Replace the named item (TotalAmount) with the actual formula for TotalAmount to avoid displaying #NAME in the cell. + sheet.getRange("D11").values = [["=SUM(ExpensesTable[AMOUNT])"]]; } else { - console.log(`There are ${numberOfPartsInNamespace.value} XML parts with namespace ${contosoNamespace}. There should be exactly 1.`); - } + console.log("No named item created for the formula."); + } await context.sync(); }); -'Excel.CustomXmlPartScopedCollection#getOnlyItem:member(1)': +'Excel.NamedItemCollection#add: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/master/samples/excel/34-named-item/create-and-remove-named-item.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(); + const sheet = context.workbook.worksheets.getItem("Sample"); + const headerRange = sheet.getRange("A1:D1"); + + sheet.names.add("ExpensesHeader", headerRange); + const namedItems = sheet.names.load("name, type"); await context.sync(); + }); +'Excel.Range#group:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/outline.yaml - if (numberOfPartsInNamespace.value == 1) { - const onlyXmlPartInNamespace = filteredXmlParts.getOnlyItem(); - const xmlBlob = onlyXmlPartInNamespace.getXml(); + 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); - await context.sync(); + // 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/master/samples/excel/42-range/outline.yaml - // Make it a bit more readable. - const readableXml = xmlBlob.value.replace(/>\n<"); + 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.Worksheet#showOutlineLevels:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/outline.yaml - $("#display-xml").text(`The only XML part in the namespace ${contosoNamespace} is: - ${readableXml}`); + Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); - } else { - console.log(`There are ${numberOfPartsInNamespace.value} XML parts with namespace ${contosoNamespace}. There should be exactly 1.`); - } + // This collapses the entire outline. + sheet.showOutlineLevels(1, 1); + await context.sync(); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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.DataBarConditionalFormat#barDirection:member': +'Excel.Application#suspendScreenUpdatingUntilNextSync: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/master/samples/excel/90-scenarios/performance-optimization.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; + 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(); + } + + 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(); + } + } + } await context.sync(); + + console.log(`Ending. Adding ${rowCount * columnCount} cells took ${Date.now() - startTime} milliseconds`); }); 'Excel.DataPivotHierarchy#showAs:member': - >- @@ -1693,562 +1782,333 @@ wholesaleDataHierarchy.showAs = wholesaleShowAs; await context.sync(); }); -'Excel.DataPivotHierarchy#name:member': +'Excel.ShowAsRule#baseItem: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/master/samples/excel/38-pivottable/pivottable-calculations.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 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"); - dataHierarchies.items[0].name = "Farm Sales"; - dataHierarchies.items[1].name = "Wholesale"; + farmDataHierarchy.load("showAs"); + wholesaleDataHierarchy.load("showAs"); await context.sync(); - }); -'Excel.DataValidation#prompt:member': + + // 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"); + farmShowAs.baseItem = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm").items.getItem("A Farms"); + farmDataHierarchy.showAs = farmShowAs; + + let wholesaleShowAs = wholesaleDataHierarchy.showAs; + wholesaleShowAs.calculation = Excel.ShowAsCalculation.differenceFrom; + wholesaleShowAs.baseField = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm"); + wholesaleShowAs.baseItem = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm").items.getItem("A Farms"); + wholesaleDataHierarchy.showAs = wholesaleShowAs; + await context.sync(); + }); +'Excel.DataPivotHierarchy#name: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/master/samples/excel/38-pivottable/pivottable-create-and-modify.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" - }; + 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#rule:member': +'Excel.PivotTable#columnHierarchies: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/master/samples/excel/38-pivottable/pivottable-create-and-modify.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Decision"); - const nameRange = - sheet.tables.getItem("NameOptionsTable").columns.getItem("Baby Name").getDataBodyRange(); - - // When you are developing, it is a good practice to - // clear the dataValidation object with each run of your code. - nameRange.dataValidation.clear(); + const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); - const nameSourceRange = context.workbook.worksheets.getItem("Names").getRange("A1:A3"); + // check if the PivotTable already has a column + const column = pivotTable.columnHierarchies.getItemOrNullObject("Farm"); + column.load("id"); + await context.sync(); - let approvedListRule = { - list: { - inCellDropDown: true, - source: nameSourceRange - } - }; - nameRange.dataValidation.rule = approvedListRule; + if (column.isNullObject) { + // ading 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.DataValidation#errorAlert:member': +'Excel.PivotTable#dataHierarchies: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/master/samples/excel/38-pivottable/pivottable-create-and-modify.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" - }; + 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.DataValidationRule#list:member': +'Excel.PivotTable#delete:member(1)': - >- // 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/master/samples/excel/38-pivottable/pivottable-create-and-modify.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Decision"); - const nameRange = - sheet.tables.getItem("NameOptionsTable").columns.getItem("Baby Name").getDataBodyRange(); - - // When you are developing, it is a good practice to - // clear the dataValidation object with each run of your code. - nameRange.dataValidation.clear(); - - const nameSourceRange = context.workbook.worksheets.getItem("Names").getRange("A1:A3"); - - let approvedListRule = { - list: { - inCellDropDown: true, - source: nameSourceRange - } - }; - nameRange.dataValidation.rule = approvedListRule; + context.workbook.worksheets.getItem("Pivot").pivotTables.getItem("Farm Sales").delete(); await context.sync(); }); -'Excel.DataValidationRule#wholeNumber:member': +'Excel.PivotTable#layout: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/master/samples/excel/38-pivottable/pivottable-create-and-modify.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" - }; + 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.DocumentProperties#custom:member': +'Excel.PivotTableCollection#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/master/samples/excel/38-pivottable/pivottable-create-and-modify.yaml await Excel.run(async (context) => { - // Load the keys and values of all custom properties. - const customDocProperties = context.workbook.properties.custom; - customDocProperties.load(["key", "value"]); - await context.sync(); + const rangeToAnalyze = context.workbook.worksheets.getItem("Data").getRange("A1:E21"); + const rangeToPlacePivot = context.workbook.worksheets.getItem("Pivot").getRange("A2"); + context.workbook.worksheets.getItem("Pivot").pivotTables.add("Farm Sales", rangeToAnalyze, rangeToPlacePivot); - // Log each custom property to the console. - // Note that your document may have more properties than those you have set using this snippet. - customDocProperties.items.forEach((property) => { - console.log(`${property.key}:${property.value}`); - }); + await context.sync(); }); -'Excel.IconSetConditionalFormat#criteria:member': +'Excel.PivotLayout#getDataBodyRange: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/master/samples/excel/38-pivottable/pivottable-filters-and-summaries.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. + const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); - 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 - 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", - } - ]; + // 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.IconSetConditionalFormat#style:member': +'Excel.PivotTable#filterHierarchies:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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; + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml - /* - 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. + 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(); - 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 - 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", + // 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.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 - await context.sync(); + 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.Image#format:member': +'Excel.Workbook#pivotTables: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/master/samples/excel/38-pivottable/pivottable-get-pivottables.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Shapes"); - const image = sheet.shapes.getItem("Image").image; - image.load("format"); - await context.sync(); + // Get the names of all the PivotTables in the workbook. + const pivotTables = context.workbook.pivotTables; + pivotTables.load("name"); + await context.sync(); - console.log("The image's format is: " + image.format); - 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.Line#connectBeginShape:member(1)': +'Excel.Worksheet#pivotTables: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/master/samples/excel/38-pivottable/pivottable-get-pivottables.yaml await Excel.run(async (context) => { - const shapes = context.workbook.worksheets.getItem("Shapes").shapes; - const line = shapes.getItem("StraightLine").line; - line.connectBeginShape(shapes.getItem("Left"), 2); - line.connectEndShape(shapes.getItem("Right"), 0); - await context.sync(); + // Get the names of all the PivotTables in the current worksheet. + const pivotTables = context.workbook.worksheets.getActiveWorksheet().pivotTables; + pivotTables.load("name"); + await context.sync(); + + // Display the names in the console. + console.log("PivotTables in the current worksheet:") + pivotTables.items.forEach((pivotTable) => { + console.log(`\t${pivotTable.name}`); + }); }); -'Excel.Line#connectEndShape:member(1)': +'Excel.Slicer#style: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/master/samples/excel/38-pivottable/pivottable-slicer.yaml await Excel.run(async (context) => { - const shapes = context.workbook.worksheets.getItem("Shapes").shapes; - const line = shapes.getItem("StraightLine").line; - line.connectBeginShape(shapes.getItem("Left"), 2); - line.connectEndShape(shapes.getItem("Right"), 0); + const slicer = context.workbook.slicers.getItem("Fruit Slicer"); + slicer.style = "SlicerStyleLight6"; await context.sync(); }); -'Excel.Line#disconnectBeginShape:member(1)': +'Excel.Slicer#selectItems: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/master/samples/excel/38-pivottable/pivottable-slicer.yaml await Excel.run(async (context) => { - const shapes = context.workbook.worksheets.getItem("Shapes").shapes; - const line = shapes.getItem("StraightLine").line; - line.disconnectBeginShape(); - line.disconnectEndShape(); + const slicer = context.workbook.slicers.getItem("Fruit Slicer"); + slicer.selectItems(["Lemon", "Lime", "Orange"]); await context.sync(); }); -'Excel.Line#disconnectEndShape:member(1)': +'Excel.Slicer#clearFilters: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/master/samples/excel/38-pivottable/pivottable-slicer.yaml await Excel.run(async (context) => { - const shapes = context.workbook.worksheets.getItem("Shapes").shapes; - const line = shapes.getItem("StraightLine").line; - line.disconnectBeginShape(); - line.disconnectEndShape(); + const slicer = context.workbook.slicers.getItem("Fruit Slicer"); + slicer.clearFilters(); await context.sync(); }); -'Excel.NamedItem#delete:member(1)': +'Excel.Slicer#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/master/samples/excel/38-pivottable/pivottable-slicer.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const totalName = sheet.names.getItemOrNullObject("TotalAmount"); - totalName.load(); + const sheet = context.workbook.worksheets.getActiveWorksheet(); + sheet.slicers.getItemAt(0).delete(); await context.sync(); + }); +'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 - if (totalName.value) { - totalName.delete(); - - // Replace the named item (TotalAmount) with the actual formula for TotalAmount to avoid displaying #NAME in the cell. - sheet.getRange("D11").values = [["=SUM(ExpensesTable[AMOUNT])"]]; - } else { - console.log("No named item created for the formula."); - } - + 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.NamedItem#formula:member': +'Excel.SlicerCollection#getItem:member(1)': - >- // 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/master/samples/excel/38-pivottable/pivottable-slicer.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - // Get the named item - const myNamedItem = sheet.names.getItemOrNullObject("MyRange"); - myNamedItem.load("name, formula"); + const slicer = context.workbook.slicers.getItem("Fruit Slicer"); + slicer.caption = "Fruit Types"; + slicer.left = 395; + slicer.top = 15; + slicer.height = 135; + slicer.width = 150; await context.sync(); - - if (myNamedItem.isNullObject) { - console.log(`There is no named item. Create it with "Add named item for a range" first.`); - } else { - // Update named item to point to the second range - myNamedItem.formula = "=Sample!$B$10:$D$14"; - sheet.getRange("B10:D14").select(); - await context.sync(); - - console.log(`Just updated the named item "${myNamedItem.name}" -- it's now located here: ${myNamedItem.formula}`); - } }); -'Excel.NamedItemCollection#add:member(1)': +'Excel.Worksheet#slicers:member': - >- // 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/master/samples/excel/38-pivottable/pivottable-slicer.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const headerRange = sheet.getRange("A1:D1"); - - sheet.names.add("ExpensesHeader", headerRange); - const namedItems = sheet.names.load("name, type"); - + 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.NumberFormatInfo#numberDecimalSeparator:member': +'Excel.PivotField#clearAllFilters:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/culture-info.yaml - - // This will convert a number like "14,37" to "14.37" - - // (assuming the system decimal separator is "."). - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - const decimalSource = sheet.getRange("B2"); - - decimalSource.load("values"); - - context.application.cultureInfo.numberFormat.load("numberDecimalSeparator"); - - await context.sync(); - - - const systemDecimalSeparator = - context.application.cultureInfo.numberFormat.numberDecimalSeparator; - - const oldDecimalString: string = decimalSource.values[0][0]; - - - // This assumes the input column is standardized to use "," as the decimal - separator. - - const newDecimalString = oldDecimalString.replace(",", - systemDecimalSeparator); - - - const resultRange = sheet.getRange("C2"); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-pivotfilters.yaml - resultRange.values = [[newDecimalString]]; + await Excel.run(async (context) => { + // Clear all the PivotFilters. - resultRange.format.autofitColumns(); + // Get the PivotTable. + const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); + pivotTable.hierarchies.load("name"); + await context.sync(); - await context.sync(); + // Clear the filters on each PivotField. + pivotTable.hierarchies.items.forEach((hierarchy) => { + hierarchy.fields.getItem(hierarchy.name).clearAllFilters(); }); -'Excel.NumberFormatInfo#numberGroupSeparator:member': + await context.sync(); + }); +'Excel.PivotFilters#dateFilter:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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 ","). - const sheet = context.workbook.worksheets.getItem("Sample"); - const bigNumberSource = sheet.getRange("B3"); - bigNumberSource.load("values"); - context.application.cultureInfo.numberFormat.load("numberGroupSeparator"); - await context.sync(); - - const systemThousandsSeparator = context.application.cultureInfo.numberFormat.numberGroupSeparator; - const oldBigNumberString: string = bigNumberSource.values[0][0]; - - // This assumes the input column is standardized to use "-" as the number group separator. - const newBigNumberString = oldBigNumberString.replace(/-/g, systemThousandsSeparator); - - const resultRange = sheet.getRange("C3"); - resultRange.values = [[newBigNumberString]]; - resultRange.format.autofitColumns(); - await context.sync(); - }); -'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 - - await Excel.run(async (context) => { - const farmSheet = context.workbook.worksheets.getItem("Print"); - farmSheet.horizontalPageBreaks.add("A21:E21"); - await context.sync(); - }); -'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 - - await Excel.run(async (context) => { - const farmSheet = context.workbook.worksheets.getItem("Print"); - farmSheet.pageLayout.centerHorizontally = true; - farmSheet.pageLayout.centerVertically = true; - await context.sync(); - }); -'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 - - await Excel.run(async (context) => { - const farmSheet = context.workbook.worksheets.getItem("Print"); - farmSheet.pageLayout.centerHorizontally = true; - farmSheet.pageLayout.centerVertically = true; - await context.sync(); - }); -'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 - - await Excel.run(async (context) => { - const farmSheet = context.workbook.worksheets.getItem("Print"); - farmSheet.pageLayout.orientation = Excel.PageOrientation.landscape; - await context.sync(); - }); -'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 - - 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/master/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#zoom:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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 }; - await context.sync(); - }); -'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 - - await Excel.run(async (context) => { - // Clear all the PivotFilters. - - // Get the PivotTable. - const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); - pivotTable.hierarchies.load("name"); - await context.sync(); - - // Clear the filters on each PivotField. - pivotTable.hierarchies.items.forEach((hierarchy) => { - hierarchy.fields.getItem(hierarchy.name).clearAllFilters(); - }); - await context.sync(); - }); -'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/master/samples/excel/38-pivottable/pivottable-pivotfilters.yaml await Excel.run(async (context) => { // Add a date-based PivotFilter. @@ -2384,271 +2244,312 @@ await context.sync(); }); -'Excel.PivotLayout#getDataBodyRange:member(1)': +'Excel.Range#getSpecialCells: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/master/samples/excel/42-range/range-areas.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(); + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const usedRange = sheet.getUsedRange(); - // 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(); + // 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.PivotTable#columnHierarchies:member': +'Excel.RangeAreas#format: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/master/samples/excel/42-range/range-areas.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(); + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const usedRange = sheet.getUsedRange(); - if (column.isNullObject) { - // ading 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); - } + // Find the ranges with formulas. + const formulaRanges = usedRange.getSpecialCells("Formulas"); + formulaRanges.format.fill.color = "lightgreen"; await context.sync(); }); -'Excel.PivotTable#dataHierarchies:member': +'Excel.Workbook#getSelectedRanges: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/master/samples/excel/42-range/range-areas.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 selectedRanges = context.workbook.getSelectedRanges(); + selectedRanges.format.fill.color = "lightblue"; await context.sync(); - }); -'Excel.PivotTable#delete:member(1)': + }) +'Excel.Worksheet#getRanges: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/master/samples/excel/42-range/range-areas.yaml await Excel.run(async (context) => { - context.workbook.worksheets.getItem("Pivot").pivotTables.getItem("Farm Sales").delete(); + + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const specifiedRanges = sheet.getRanges("D3:D5, G3:G5"); + specifiedRanges.format.fill.color = "pink"; await context.sync(); - }); -'Excel.PivotTable#layout:member': + }) +'Excel.Range#autoFill: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/master/samples/excel/42-range/range-auto-fill.yaml await Excel.run(async (context) => { - 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); + 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.PivotTable#filterHierarchies:member': +'Excel.CellPropertiesFill#color: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/master/samples/excel/42-range/cell-properties.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 sheet = context.workbook.worksheets.getActiveWorksheet(); - // 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(); + // 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 + } } - }); - } -'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 + }; - await Excel.run(async (context) => { - const rangeToAnalyze = context.workbook.worksheets.getItem("Data").getRange("A1:E21"); - const rangeToPlacePivot = context.workbook.worksheets.getItem("Pivot").getRange("A2"); - context.workbook.worksheets.getItem("Pivot").pivotTables.add("Farm Sales", rangeToAnalyze, rangeToPlacePivot); + const nonApplicableProps: Excel.SettableCellProperties = { + format: { + fill: { + pattern: Excel.FillPattern.gray25 + }, + font: { + color: "Gray", + italic: true + } + } + }; - await context.sync(); - }); -'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 + 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 + } + } + } + }; - 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.presetCriteria); - conditionalFormat.preset.format.font.color = "white"; - conditionalFormat.preset.rule = { criterion: Excel.ConditionalFormatPresetCriterion.oneStdDevAboveAverage }; + 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.CellPropertiesFillLoadOptions#color: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/master/samples/excel/42-range/cell-properties.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"; + 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#getPivotTables:member(1)': +'Excel.CellPropertiesFont#color: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/master/samples/excel/42-range/cell-properties.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(); + const sheet = context.workbook.worksheets.getActiveWorksheet(); - // 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#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 + // 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" + }; - async function sortTopToBottom(criteria: string) { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const range = sheet.getRange("A1:E5"); + 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 + } + } + }; - // Find the column header that provides the sort criteria. - const header = range.find(criteria, {}); - header.load("columnIndex"); - await context.sync(); + const nonApplicableProps: Excel.SettableCellProperties = { + format: { + fill: { + pattern: Excel.FillPattern.gray25 + }, + font: { + color: "Gray", + italic: true + } + } + }; - range.sort.apply( - [ - { - key: header.columnIndex, - sortOn: Excel.SortOn.value + 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 } - ], - 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/master/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); + const range = sheet.getRange("A1:E5"); - // 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/master/samples/excel/42-range/outline.yaml + // 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] + ]); - 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); + sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); -'Excel.Range#getSpecialCells:member(1)': +'Excel.CellPropertiesFontLoadOptions#color: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/master/samples/excel/42-range/cell-properties.yaml await Excel.run(async (context) => { + const cell = context.workbook.getActiveCell(); - 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"; + // 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 + }); - return context.sync(); + // 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#autoFill:member(1)': +'Excel.CellPropertiesLoadOptions#address:member': - >- // 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/master/samples/excel/42-range/cell-properties.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(); + 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)': - >- @@ -2748,1094 +2649,1192 @@ style: true }); - // Sync to get the data from the workbook. + // 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.SettableCellProperties#style:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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.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 + + 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.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 + + 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.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 + + 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.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 + + 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(); - 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)': +'Excel.ConditionalCellValueRule#operator:member': - >- // 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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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"]]; + 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" }; - // 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)': +'Excel.ConditionalFormat#cellValue:member': - >- // 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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - const table = sheet.tables.getItem("ExpensesTable"); - const searchRange = table.getRange(); + 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" }; - // 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)': +'Excel.ConditionalFormat#colorScale:member': - >- // 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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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(); + 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; - if (foundRange.isNullObject) { - console.log("Text not found"); - } else { - console.log(foundRange.address); - } + await context.sync(); }); -'Excel.Range#hyperlink:member': +'Excel.ConditionalFormat#custom: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Orders"); - - let productsRange = sheet.getRange("A3:A5"); - productsRange.load("values"); + 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.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 - // 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 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; await context.sync(); }); -'Excel.Range#getIntersectionOrNullObject:member(1)': +'Excel.ConditionalFormat#getRange: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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(); + const worksheetRange = sheet.getRange(); + worksheetRange.conditionalFormats.load("type"); - // Asian and European teams have separate contests. - const asianSalesRange = sheet.getRange("A2:E4"); - const europeanSalesRange = sheet.getRange("A5:E7"); + await context.sync(); - // 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); + let cfRangePairs: { cf: Excel.ConditionalFormat, range: Excel.Range }[] = []; + worksheetRange.conditionalFormats.items.forEach(item => { + cfRangePairs.push({ + cf: item, + range: item.getRange().load("address") + }); + }); - // 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"); + if (cfRangePairs.length > 0) { + cfRangePairs.forEach(item => { + console.log(item.cf.type); + }); } else { - createContinentChart( - sheet, - "European", - europeanContestRange, - "A25", - "F40" - ); + console.log("No conditional formats applied."); } - - await context.sync(); }); -'Excel.Range#getUsedRange:member(1)': +'Excel.ConditionalFormat#iconSet:member': - >- // 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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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(); + const range = sheet.getRange("B8:E13"); + const conditionalFormat = range.conditionalFormats + .add(Excel.ConditionalFormatType.iconSet); + const iconSetCF = conditionalFormat.iconSet; + iconSetCF.style = Excel.IconSet.threeTriangles; - 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" - ); - } + /* + 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. - 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" - ); - } + 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 + 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.Range#removeDuplicates:member(1)': +'Excel.ConditionalFormat#preset: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/master/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:D11"); + const range = sheet.getRange("B2:M5"); + const conditionalFormat = range.conditionalFormats + .add(Excel.ConditionalFormatType.presetCriteria); + conditionalFormat.preset.format.font.color = "white"; + conditionalFormat.preset.rule = { criterion: Excel.ConditionalFormatPresetCriterion.oneStdDevAboveAverage }; - 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': +'Excel.ConditionalFormat#textComparison: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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"; + 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.Range#getUsedRangeOrNullObject:member(1)': +'Excel.ConditionalFormat#type:member': - >- // 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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - const salesTable = sheet.tables.getItem("SalesTable"); - const dataRange = salesTable.getDataBodyRange(); + const worksheetRange = sheet.getRange(); + worksheetRange.conditionalFormats.load("type"); - // Pass true so only cells with values count as used - const usedDataRange = dataRange.getUsedRangeOrNullObject( - true /* valuesOnly */ - ); + 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") + }); + }); - //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."); + if (cfRangePairs.length > 0) { + cfRangePairs.forEach(item => { + console.log(item.cf.type); + }); } 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"; + console.log("No conditional formats applied."); } - - await context.sync(); }); -'Excel.Range#set:member(1)': +'Excel.ConditionalFormatCollection#add: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/master/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; - const range = sheet.getRange("B2:E2"); - range.set({ - format: { - fill: { - color: "#4472C4" - }, - font: { - name: "Verdana", - color: "white" - } - } - }) - range.format.autofitColumns(); await context.sync(); }); +'Excel.ConditionalFormatCollection#clearAll: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/master/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(); + range.conditionalFormats.clearAll(); - 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(); + $(".conditional-formats").hide(); }); -'Excel.Range#moveTo:member(1)': +'Excel.ConditionalFormatCollection#getItemAt: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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:"]]; + 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") + }); + }); - // Move the range from A1:E1 to G12:K12. - sheet.getRange("A1:E1").moveTo("G12"); await context.sync(); + + if (cfRangePairs.length > 0) { + cfRangePairs.forEach(item => { + console.log(item.cf.type); + }); + } else { + console.log("No conditional formats applied."); + } }); -'Excel.Range#getSpillingToRange:member(1)': +'Excel.ConditionalFormatRule#formula:member': - >- // 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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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(); + 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"; - console.log(`Copying the table headers spilled into ${spillRange.address}.`); + await context.sync(); }); -'Excel.Range#getDirectPrecedents:member(1)': +'Excel.ConditionalIconCriterion#formula: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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(); + 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; - console.log(`Direct precedent cells of ${range.address}:`); + /* + 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. - // 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(); + 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 + 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.Range#workbookRangeAreas:member(1)': +'Excel.ConditionalIconCriterion#operator: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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(); + 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; - console.log(`Direct precedent cells of ${range.address}:`); + /* + 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 this method does below, 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", + } + ]; - // 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(); + await context.sync(); }); -'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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml await Excel.run(async (context) => { - - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const usedRange = sheet.getUsedRange(); - - // Find the ranges with formulas. - const formulaRanges = usedRange.getSpecialCells("Formulas"); - formulaRanges.format.fill.color = "lightgreen"; + 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.RangeFormat#textOrientation:member': +'Excel.ConditionalIconCriterion#type: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/master/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:E2"); + const range = sheet.getRange("B8:E13"); + const conditionalFormat = range.conditionalFormats + .add(Excel.ConditionalFormatType.iconSet); + const iconSetCF = conditionalFormat.iconSet; + iconSetCF.style = Excel.IconSet.threeTriangles; - // Set textOrientation to either an integer between -90 and 90 - // or to 180 for vertically-oriented text. - range.format.textOrientation = 90; + /* + 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 this method does below, 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.RangeHyperlink#address:member': +'Excel.ConditionalPresetCriteriaRule#criterion: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Orders"); - - let productsRange = sheet.getRange("A3:A5"); - productsRange.load("values"); + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B2:M5"); + const conditionalFormat = range.conditionalFormats + .add(Excel.ConditionalFormatType.presetCriteria); + conditionalFormat.preset.format.font.color = "white"; + conditionalFormat.preset.rule = { criterion: Excel.ConditionalFormatPresetCriterion.oneStdDevAboveAverage }; await context.sync(); + }); +'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 - // 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 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.RangeHyperlink#documentReference:member': +'Excel.CustomConditionalFormat#format: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Orders"); - - let productsRange = sheet.getRange("A9:A11"); - productsRange.load("values"); + 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.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 - // Create a hyperlink to a location within the workbook - // for each product name in the second 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: "Navigate to the '" + cellText + "' worksheet", - documentReference: cellText + "!A1" - } - cellRange.hyperlink = hyperlink; - } + 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; await context.sync(); }); -'Excel.RangeHyperlink#screenTip:member': +'Excel.IconSetConditionalFormat#criteria: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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(); + 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; - // 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]; + /* + 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. - let hyperlink = { - textToDisplay: cellText, - screenTip: "Search Bing for '" + cellText + "'", - address: "https://www.bing.com/?q=" + cellText + 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 + 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", } - cellRange.hyperlink = hyperlink; - } + ]; await context.sync(); }); -'Excel.RangeHyperlink#textToDisplay:member': +'Excel.IconSetConditionalFormat#style: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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(); + 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; - // 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]; + /* + 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. - let hyperlink = { - textToDisplay: cellText, - screenTip: "Search Bing for '" + cellText + "'", - address: "https://www.bing.com/?q=" + cellText + 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 + 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", } - cellRange.hyperlink = hyperlink; - } + ]; await context.sync(); }); -'Excel.RemoveDuplicatesResult#uniqueRemaining:member': +'Excel.PresetCriteriaConditionalFormat#rule: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/master/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:D11"); + const range = sheet.getRange("B2:M5"); + const conditionalFormat = range.conditionalFormats + .add(Excel.ConditionalFormatType.presetCriteria); + conditionalFormat.preset.format.font.color = "white"; + conditionalFormat.preset.rule = { criterion: Excel.ConditionalFormatPresetCriterion.oneStdDevAboveAverage }; - 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.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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml await Excel.run(async (context) => { - context.runtime.load("enableEvents"); - await context.sync(); - - // check if events are enabled and toggle accordingly - const eventBoolean = !context.runtime.enableEvents - context.runtime.enableEvents = eventBoolean; - if (eventBoolean) { - console.log("Events are currently on."); - } else { - console.log("Events are currently off."); - } + 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.SettableCellProperties#style:member': +'Excel.TextConditionalFormat#format: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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] - ]); + 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" }; - sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); -'Excel.Setting#delete:member(1)': +'Excel.TextConditionalFormat#rule:member': - >- // 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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml await Excel.run(async (context) => { - const settings = context.workbook.settings; - let needsReview = settings.getItem("NeedsReview"); - 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"); - } + 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.SettingCollection#add:member(1)': +'Excel.Range#copyFrom: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/master/samples/excel/42-range/range-copyfrom.yaml await Excel.run(async (context) => { - const settings = context.workbook.settings; - settings.onSettingsChanged.add(onChangedSetting); + 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(); - console.log("Settings changed handler registered."); }); -'Excel.SettingCollection#onSettingsChanged:member': +'Excel.Range#moveTo: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/master/samples/excel/42-range/range-copyfrom.yaml await Excel.run(async (context) => { - const settings = context.workbook.settings; - settings.onSettingsChanged.add(onChangedSetting); + 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(); - console.log("Settings changed handler registered."); }); -'Excel.SettingCollection#getItemOrNullObject:member(1)': +'Excel.Range#getSpillingToRange: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/master/samples/excel/42-range/dynamic-arrays.yaml await Excel.run(async (context) => { - const settings = context.workbook.settings; - let needsReview = settings.getItem("NeedsReview"); - needsReview.delete(); - needsReview = settings.getItemOrNullObject("NeedsReview"); + const sheet = context.workbook.worksheets.getItem("Sample"); - await context.sync(); + // Set G4 to a formula that returns a dynamic array. + const targetCell = sheet.getRange("G4"); + targetCell.formulas = [["=A4:D4"]]; - if (needsReview.isNullObject) { - console.log("The setting has been deleted"); - } else { - console.log("The setting was not deleted"); - } + // Get the address of the cells that the dynamic array spilled into. + const spillRange = targetCell.getSpillingToRange(); + spillRange.load("address"); - await context.sync(); + // Fit the columns for readability. + sheet.getUsedRange().format.autofitColumns(); + await context.sync(); + + console.log(`Copying the table headers spilled into ${spillRange.address}.`); }); -'Excel.Shape#delete:member(1)': +'Excel.Range#find: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/master/samples/excel/42-range/range-find.yaml await Excel.run(async (context) => { - context.workbook.worksheets.getItemOrNullObject("Shapes").delete(); - const sheet = context.workbook.worksheets.add("Shapes"); - - const shapes = sheet.shapes; + const sheet = context.workbook.worksheets.getItem("Sample"); + const table = sheet.tables.getItem("ExpensesTable"); + const searchRange = table.getRange(); - // load all the shapes in the collection without loading their properties - shapes.load("items/$none"); + // 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(); - shapes.items.forEach((shape) => shape.delete()); - await context.sync(); + + console.log(foundRange.address); }); -'Excel.Shape#fill:member': +'Excel.Range#findOrNullObject: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/master/samples/excel/42-range/range-find.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" + 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.Shape#rotation:member': +'Excel.Range#hyperlink: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/master/samples/excel/42-range/range-hyperlink.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 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.Shape#group:member': +'Excel.RangeHyperlink#address: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/master/samples/excel/42-range/range-hyperlink.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Shapes"); + const sheet = context.workbook.worksheets.getItem("Orders"); - const shapeGroup = sheet.shapes.getItem("Group").group; - shapeGroup.ungroup(); - console.log("Shapes ungrouped"); + let productsRange = sheet.getRange("A3:A5"); + productsRange.load("values"); await context.sync(); - }); -'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 - 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); - 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]; - 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)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-images.yaml + let hyperlink = { + textToDisplay: cellText, + screenTip: "Search Bing for '" + cellText + "'", + address: "https://www.bing.com/?q=" + cellText + } + cellRange.hyperlink = hyperlink; + } - 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#line:member': +'Excel.RangeHyperlink#documentReference: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/master/samples/excel/42-range/range-hyperlink.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; + const sheet = context.workbook.worksheets.getItem("Orders"); - line.endArrowheadLength = Excel.ArrowheadLength.long; - line.endArrowheadWidth = Excel.ArrowheadWidth.wide; - line.endArrowheadStyle = Excel.ArrowheadStyle.triangle; + let productsRange = sheet.getRange("A9:A11"); + productsRange.load("values"); await context.sync(); - }); -'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 - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.getItem("Square") - shape.incrementLeft(-25); - await context.sync(); - }); -'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 + // Create a hyperlink to a location within the workbook + // for each product name in the second 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) => { - const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.getItem("Pentagon") - shape.incrementTop(25); - await context.sync(); - }); -'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 + let hyperlink = { + textToDisplay: cellText, + screenTip: "Navigate to the '" + cellText + "' worksheet", + documentReference: cellText + "!A1" + } + cellRange.hyperlink = hyperlink; + } - 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#lockAspectRatio:member': +'Excel.RangeHyperlink#screenTip: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/master/samples/excel/42-range/range-hyperlink.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 sheet = context.workbook.worksheets.getItem("Orders"); + + let productsRange = sheet.getRange("A3:A5"); + productsRange.load("values"); + await context.sync(); - }); -'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 - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.getItem("Octagon") - shape.setZOrder(Excel.ShapeZOrder.sendBackward); + // 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.ShapeCollection#addGeometricShape:member(1)': +'Excel.RangeHyperlink#textToDisplay: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/master/samples/excel/42-range/range-hyperlink.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; + const sheet = context.workbook.worksheets.getItem("Orders"); + + let productsRange = sheet.getRange("A3:A5"); + productsRange.load("values"); + await context.sync(); - }); -'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 - 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"); + // 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]; - const shapeGroup = sheet.shapes.addGroup([square, pentagon, octagon]); - shapeGroup.name = "Group"; - console.log("Shapes grouped"); + let hyperlink = { + textToDisplay: cellText, + screenTip: "Search Bing for '" + cellText + "'", + address: "https://www.bing.com/?q=" + cellText + } + cellRange.hyperlink = hyperlink; + } await context.sync(); }); -'Excel.ShapeCollection#addImage:member(1)': +'Excel.Range#getIntersectionOrNullObject:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-images.yaml - - const myFile = document.getElementById("selectedFile"); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-relationships.yaml - const reader = new FileReader(); + 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(); - reader.onload = (event) => { - Excel.run((context) => { - const startIndex = reader.result.toString().indexOf("base64,"); - const mybase64 = reader.result.toString().substr(startIndex + 7); - const sheet = context.workbook.worksheets.getItem("Shapes"); - const image = sheet.shapes.addImage(mybase64); - image.name = "Image"; - return context.sync(); - }); - }; + // 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); - // Read in the image file as a data URL. + // Must sync before you can test the output of *OrNullObject + // method/property. + await context.sync(); - reader.readAsDataURL(myFile.files[0]); -'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 + 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" + ); + } - 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.ShapeCollection#addTextBox:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-textboxes.yaml + 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 Excel.run(async (context) => { - const shapes = context.workbook.worksheets.getItem("Shapes").shapes; - const textbox = shapes.addTextBox("A box with text"); - textbox.left = 100; - textbox.top = 100; - textbox.height = 20; - textbox.width = 175; - textbox.name = "Textbox"; await context.sync(); }); -'Excel.ShapeGroup#ungroup:member(1)': +'Excel.Range#getUsedRange: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/master/samples/excel/42-range/range-relationships.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Shapes"); + const sheet = context.workbook.worksheets.getItem("Sample"); + const salesTable = sheet.tables.getItem("SalesTable"); + const dataRange = salesTable.getDataBodyRange(); - const shapeGroup = sheet.shapes.getItem("Group").group; - shapeGroup.ungroup(); - console.log("Shapes ungrouped"); + // 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 context.sync(); - }); -'Excel.ShowAsRule#baseItem:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-calculations.yaml + // Asian and European teams have separate contests. + const asianSalesRange = sheet.getRange("A2:E4"); + const europeanSalesRange = sheet.getRange("A5:E7"); - 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"); + // 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); - farmDataHierarchy.load("showAs"); - wholesaleDataHierarchy.load("showAs"); + // Must sync before you can test the output of *OrNullObject + // method/property. 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) - let farmShowAs = farmDataHierarchy.showAs; - farmShowAs.calculation = Excel.ShowAsCalculation.differenceFrom; - farmShowAs.baseField = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm"); - farmShowAs.baseItem = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm").items.getItem("A Farms"); - farmDataHierarchy.showAs = farmShowAs; + 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 wholesaleShowAs = wholesaleDataHierarchy.showAs; - wholesaleShowAs.calculation = Excel.ShowAsCalculation.differenceFrom; - wholesaleShowAs.baseField = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm"); - wholesaleShowAs.baseItem = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm").items.getItem("A Farms"); - wholesaleDataHierarchy.showAs = wholesaleShowAs; - await context.sync(); - }); -'Excel.Slicer#style:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-slicer.yaml + 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 Excel.run(async (context) => { - const slicer = context.workbook.slicers.getItem("Fruit Slicer"); - slicer.style = "SlicerStyleLight6"; await context.sync(); }); -'Excel.Slicer#selectItems:member(1)': +'Excel.Range#removeDuplicates: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/master/samples/excel/42-range/range-remove-duplicates.yaml await Excel.run(async (context) => { - const slicer = context.workbook.slicers.getItem("Fruit Slicer"); - slicer.selectItems(["Lemon", "Lime", "Orange"]); - await context.sync(); - }); -'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 + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B2:D11"); - await Excel.run(async (context) => { - const slicer = context.workbook.slicers.getItem("Fruit Slicer"); - slicer.clearFilters(); + const deleteResult = range.removeDuplicates([0],true); + deleteResult.load(); await context.sync(); - }); -'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 - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - sheet.slicers.getItemAt(0).delete(); - 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.SlicerCollection#add:member(1)': +'Excel.RemoveDuplicatesResult#uniqueRemaining: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/master/samples/excel/42-range/range-remove-duplicates.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.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.SlicerCollection#getItem:member(1)': +'Excel.Range#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/master/samples/excel/42-range/style.yaml await Excel.run(async (context) => { - const slicer = context.workbook.slicers.getItem("Fruit Slicer"); - slicer.caption = "Fruit Types"; - slicer.left = 395; - slicer.top = 15; - slicer.height = 135; - slicer.width = 150; + 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.Style#delete:member(1)': @@ -3959,673 +3958,645 @@ console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); -'Excel.Table#onChanged:member': +'Excel.Workbook#styles: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/master/samples/excel/42-range/style.yaml await Excel.run(async (context) => { - let table = context.workbook.tables.getItemAt(0); - table.onChanged.add(onChange); + 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("A handler has been registered for the onChanged event"); + + console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); -'Excel.Table#onSelectionChanged:member': +'Excel.RangeFormat#textOrientation: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/master/samples/excel/42-range/range-text-orientation.yaml await Excel.run(async (context) => { - let table = context.workbook.tables.getItemAt(0); - table.onSelectionChanged.add(onSelectionChange); + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B2:E2"); + + // Set textOrientation to either an integer between -90 and 90 + // or to 180 for vertically-oriented text. + range.format.textOrientation = 90; await context.sync(); - console.log("A handler has been registered for table onSelectionChanged event"); }); -'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 - - async function onTableChanged(eventArgs: Excel.TableChangedEventArgs) { - await Excel.run(async (context) => { - const details = eventArgs.details; - const address = eventArgs.address; - - console.log(`Change at ${address}: was ${details.valueBefore}(${details.valueTypeBefore}),` - + ` now is ${details.valueAfter}(${details.valueTypeAfter})`); - }); - } -'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 - - async function onChange(event) { - await Excel.run(async (context) => { - let table = context.workbook.tables.getItem(event.tableId); - let worksheet = context.workbook.worksheets.getItem(event.worksheetId); - worksheet.load("name"); - - await context.sync(); - - console.log("Handler for table collection onChanged event has been triggered. Data changed address: " + event.address); - console.log("Table Id : " + event.tableId); - console.log("Worksheet Id : " + worksheet.name); - }); - } -'Excel.TableChangedEventArgs#worksheetId:member': +'Excel.Range#getUsedRangeOrNullObject:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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); - let worksheet = context.workbook.worksheets.getItem(event.worksheetId); - worksheet.load("name"); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/used-range.yaml - 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(); - console.log("Handler for table collection onChanged event has been triggered. Data changed address: " + event.address); - console.log("Table Id : " + event.tableId); - console.log("Worksheet Id : " + worksheet.name); - }); - } -'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 + // Pass true so only cells with values count as used + const usedDataRange = dataRange.getUsedRangeOrNullObject( + true /* valuesOnly */ + ); - await Excel.run(async (context) => { - let tables = context.workbook.tables; - tables.onChanged.add(onChange); + //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(); - console.log("A handler has been registered for the table collection onChanged event"); }); -'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 - - 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); - }); - } -'Excel.TextConditionalFormat#format:member': +'Excel.Range#set: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/master/samples/excel/90-scenarios/multiple-property-set.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" }; + const range = sheet.getRange("B2:E2"); + range.set({ + format: { + fill: { + color: "#4472C4" + }, + font: { + name: "Verdana", + color: "white" + } + } + }) + range.format.autofitColumns(); await context.sync(); }); -'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/master/samples/excel/90-scenarios/multiple-property-set.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" }; + 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.TextFrame#deleteText:member(1)': +'Excel.Setting#delete: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/master/samples/excel/50-workbook/create-get-change-delete-settings.yaml await Excel.run(async (context) => { - const shapes = context.workbook.worksheets.getItem("Shapes").shapes; - const textbox = shapes.getItem("Textbox"); - textbox.textFrame.deleteText(); + const settings = context.workbook.settings; + let needsReview = settings.getItem("NeedsReview"); + 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.Workbook#pivotTables:member': +'Excel.SettingCollection#getItemOrNullObject: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/master/samples/excel/50-workbook/create-get-change-delete-settings.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(); + const settings = context.workbook.settings; + let needsReview = settings.getItem("NeedsReview"); + needsReview.delete(); + needsReview = settings.getItemOrNullObject("NeedsReview"); - // Display the names in the console. - console.log("PivotTables in the workbook:") - pivotTables.items.forEach((pivotTable) => { - console.log(`\t${pivotTable.name}`); - }); + 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.Workbook#properties:member': +'Excel.Shape#delete:member(1)': - >- // 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/master/samples/excel/44-shape/shape-create-and-delete.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; + context.workbook.worksheets.getItemOrNullObject("Shapes").delete(); + const sheet = context.workbook.worksheets.add("Shapes"); - // 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; + const shapes = sheet.shapes; + // load all the shapes in the collection without loading their properties + shapes.load("items/$none"); await context.sync(); - console.log("Set the following document properties: title, subject, keywords, comments, category, manager, company."); + shapes.items.forEach((shape) => shape.delete()); + await context.sync(); }); -'Excel.Workbook#getSelectedRanges:member(1)': +'Excel.Shape#fill: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/master/samples/excel/44-shape/shape-create-and-delete.yaml await Excel.run(async (context) => { - - const selectedRanges = context.workbook.getSelectedRanges(); - selectedRanges.format.fill.color = "lightblue"; - + 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.Workbook#styles:member': + }); +'Excel.Shape#rotation: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/master/samples/excel/44-shape/shape-create-and-delete.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; - + 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.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 - console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); + 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.Workbook#getActiveCell:member(1)': +'Excel.Shape#group:member': - >- // 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/master/samples/excel/44-shape/shape-groups.yaml await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Shapes"); - let myWorkbook = context.workbook; - let activeCell = myWorkbook.getActiveCell(); - activeCell.load("address"); + const shapeGroup = sheet.shapes.getItem("Group").group; + shapeGroup.ungroup(); + console.log("Shapes ungrouped"); await context.sync(); - - console.log("The active cell is " + activeCell.address); }); -'Excel.Workbook#close:member(1)': +'Excel.ShapeCollection#addGroup: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/master/samples/excel/44-shape/shape-groups.yaml await Excel.run(async (context) => { - context.workbook.close(Excel.CloseBehavior.save); + 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]); + shapeGroup.name = "Group"; + console.log("Shapes grouped"); + + await context.sync(); }); -'Excel.Workbook#save:member(1)': +'Excel.ShapeGroup#ungroup: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/master/samples/excel/44-shape/shape-groups.yaml await Excel.run(async (context) => { - context.workbook.save(Excel.SaveBehavior.save); + const sheet = context.workbook.worksheets.getItem("Shapes"); + + const shapeGroup = sheet.shapes.getItem("Group").group; + shapeGroup.ungroup(); + console.log("Shapes ungrouped"); + + await context.sync(); }); -'Excel.WorkbookProtection#protect:member(1)': +'Excel.Image#format:member': - >- // 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/master/samples/excel/44-shape/shape-images.yaml await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.load("protection/protected"); - + const sheet = context.workbook.worksheets.getItem("Shapes"); + const image = sheet.shapes.getItem("Image").image; + image.load("format"); await context.sync(); - if (!workbook.protection.protected) { - workbook.protection.protect(); - } + console.log("The image's format is: " + image.format); + await context.sync(); }); +'Excel.Shape#getAsImage:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/data-protection.yaml - - let password = await passwordHandler(); - - passwordHelper(password); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-images.yaml await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.load("protection/protected"); - + const sheet = context.workbook.worksheets.getItem("Shapes"); + const shape = sheet.shapes.getItem("Image"); + const result = shape.getAsImage(Excel.PictureFormat.png); await context.sync(); - if (!workbook.protection.protected) { - workbook.protection.protect(password); - } + 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.WorkbookProtection#unprotect:member(1)': +'Excel.Shape#incrementRotation: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/master/samples/excel/44-shape/shape-images.yaml await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.protection.unprotect(); + const sheet = context.workbook.worksheets.getItem("Shapes"); + const shape = sheet.shapes.getItem("Image"); + shape.incrementRotation(180); + await context.sync(); }); +'Excel.ShapeCollection#addImage: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/master/samples/excel/44-shape/shape-images.yaml - let password = await passwordHandler(); + const myFile = document.getElementById("selectedFile"); - passwordHelper(password); + const reader = new FileReader(); - await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.protection.unprotect(password); - }); -'Excel.WorkbookRangeAreas#areas:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/direct-precedents.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(); + reader.onload = (event) => { + Excel.run((context) => { + const startIndex = reader.result.toString().indexOf("base64,"); + const mybase64 = reader.result.toString().substr(startIndex + 7); + const sheet = context.workbook.worksheets.getItem("Shapes"); + const image = sheet.shapes.addImage(mybase64); + image.name = "Image"; + return 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}`); - } - await context.sync(); - }); -'Excel.Worksheet#customProperties:member': + // Read in the image file as a data URL. + + reader.readAsDataURL(myFile.files[0]); +'Excel.Line#connectBeginShape: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/master/samples/excel/44-shape/shape-lines.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}`); - }); + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const line = shapes.getItem("StraightLine").line; + line.connectBeginShape(shapes.getItem("Left"), 2); + line.connectEndShape(shapes.getItem("Right"), 0); + await context.sync(); }); -'Excel.Worksheet#pivotTables:member': +'Excel.Line#connectEndShape: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/master/samples/excel/44-shape/shape-lines.yaml await Excel.run(async (context) => { - // Get the names of all the PivotTables in the current worksheet. - const pivotTables = context.workbook.worksheets.getActiveWorksheet().pivotTables; - pivotTables.load("name"); - await context.sync(); - - // Display the names in the console. - console.log("PivotTables in the current worksheet:") - pivotTables.items.forEach((pivotTable) => { - console.log(`\t${pivotTable.name}`); - }); + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const line = shapes.getItem("StraightLine").line; + line.connectBeginShape(shapes.getItem("Left"), 2); + line.connectEndShape(shapes.getItem("Right"), 0); + await context.sync(); }); -'Excel.Worksheet#showOutlineLevels:member(1)': +'Excel.Line#disconnectBeginShape:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/outline.yaml - - Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-lines.yaml - // This collapses the entire outline. - sheet.showOutlineLevels(1, 1); + await Excel.run(async (context) => { + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const line = shapes.getItem("StraightLine").line; + line.disconnectBeginShape(); + line.disconnectEndShape(); await context.sync(); }); +'Excel.Line#disconnectEndShape:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/outline.yaml - - Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-lines.yaml - // This shows the top 3 outline levels; collapsing any additional sublevels. - sheet.showOutlineLevels(3, 3); + await Excel.run(async (context) => { + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const line = shapes.getItem("StraightLine").line; + line.disconnectBeginShape(); + line.disconnectEndShape(); await context.sync(); }); -'Excel.Worksheet#onRowSorted:member': +'Excel.Shape#line: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/master/samples/excel/44-shape/shape-lines.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(); + 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; - // 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"; - } + line.endArrowheadLength = Excel.ArrowheadLength.long; + line.endArrowheadWidth = Excel.ArrowheadWidth.wide; + line.endArrowheadStyle = Excel.ArrowheadStyle.triangle; - return context.sync(); - }); - }); + await context.sync(); }); -'Excel.Worksheet#onColumnSorted:member': +'Excel.ShapeCollection#addLine:member(1)': - >- // 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/master/samples/excel/44-shape/shape-lines.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"; - } - - return context.sync(); - }); - }); + 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.Worksheet#onChanged:member': +'Excel.Shape#incrementLeft:member(1)': - >- // 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/master/samples/excel/44-shape/shape-move-and-order.yaml await Excel.run(async (context) => { - let sheet = context.workbook.worksheets.getItem("Sample"); - sheet.onChanged.add(onChange); + const sheet = context.workbook.worksheets.getItem("Shapes"); + const shape = sheet.shapes.getItem("Square") + shape.incrementLeft(-25); await context.sync(); - - console.log("Added a worksheet-level data-changed event handler."); }); -'Excel.Worksheet#onSingleClicked:member': +'Excel.Shape#incrementTop:member(1)': - >- // 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/master/samples/excel/44-shape/shape-move-and-order.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("Shapes"); + const shape = sheet.shapes.getItem("Pentagon") + shape.incrementTop(25); + await context.sync(); + }); +'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 + 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.Worksheet#slicers:member': +'Excel.Shape#lockAspectRatio: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/master/samples/excel/44-shape/shape-move-and-order.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.getItem("Shapes"); + const shape = sheet.shapes.getItem("Octagon") + shape.lockAspectRatio = true; + shape.scaleHeight(1.25, Excel.ShapeScaleType.currentSize); await context.sync(); }); -'Excel.Worksheet#getRanges:member(1)': +'Excel.Shape#setZOrder: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/master/samples/excel/44-shape/shape-move-and-order.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"; - + const sheet = context.workbook.worksheets.getItem("Shapes"); + const shape = sheet.shapes.getItem("Octagon") + shape.setZOrder(Excel.ShapeZOrder.sendBackward); await context.sync(); - }) -'Excel.Worksheet#autoFilter:member': + }); +'Excel.ShapeCollection#addTextBox: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/master/samples/excel/44-shape/shape-textboxes.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 }); + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const textbox = shapes.addTextBox("A box with text"); + textbox.left = 100; + textbox.top = 100; + textbox.height = 20; + textbox.width = 175; + textbox.name = "Textbox"; await context.sync(); }); -'Excel.Worksheet#copy:member(1)': +'Excel.TextFrame#deleteText: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/master/samples/excel/44-shape/shape-textboxes.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 shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const textbox = shapes.getItem("Textbox"); + textbox.textFrame.deleteText(); await context.sync(); - - console.log("'" + sampleSheet.name + "' was copied to '" + copiedSheet.name + "'") }); -'Excel.Worksheet#findAllOrNullObject:member(1)': +'Excel.NamedItem#formula:member': - >- // 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/master/samples/excel/34-named-item/update-named-item.yaml await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - const foundRanges = sheet.findAllOrNullObject("Complete", { - completeMatch: true, - matchCase: false - }); + // Get the named item + const myNamedItem = sheet.names.getItemOrNullObject("MyRange"); + myNamedItem.load("name, formula"); await context.sync(); - if (foundRanges.isNullObject) { - console.log("No complete projects"); - } else { - foundRanges.format.fill.color = "green" + if (myNamedItem.isNullObject) { + console.log(`There is no named item. Create it with "Add named item for a range" first.`); + } else { + // Update named item to point to the second range + myNamedItem.formula = "=Sample!$B$10:$D$14"; + sheet.getRange("B10:D14").select(); + await context.sync(); + + console.log(`Just updated the named item "${myNamedItem.name}" -- it's now located here: ${myNamedItem.formula}`); } }); -'Excel.Worksheet#showGridlines:member': +'Excel.WorkbookProtection#protect:member(1)': - >- // 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/master/samples/excel/50-workbook/data-protection.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - sheet.showGridlines = true; + let workbook = context.workbook; + workbook.load("protection/protected"); await context.sync(); + + if (!workbook.protection.protected) { + workbook.protection.protect(); + } }); -'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/master/samples/excel/50-workbook/data-protection.yaml - await Excel.run(async (context) => { - const sheets = context.workbook.worksheets; + let password = await passwordHandler(); - // 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"); + passwordHelper(password); - firstSheet.load("name"); - lastSheet.load("name"); - firstTaxRateRange.load("text"); - lastTaxRateRange.load("text"); + await Excel.run(async (context) => { + let workbook = context.workbook; + workbook.load("protection/protected"); 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(); + if (!workbook.protection.protected) { + workbook.protection.protect(password); + } }); -'Excel.Worksheet#getPrevious:member(1)': +'Excel.WorkbookProtection#unprotect: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/master/samples/excel/50-workbook/data-protection.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"); + let workbook = context.workbook; + workbook.protection.unprotect(); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/data-protection.yaml - await context.sync(); + let password = await passwordHandler(); - 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]}`) + passwordHelper(password); - await context.sync(); + await Excel.run(async (context) => { + let workbook = context.workbook; + workbook.protection.unprotect(password); }); -'Excel.Worksheet#tabColor:member': +'Excel.WorksheetProtection#protect:member(1)': - >- // 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/master/samples/excel/50-workbook/data-protection.yaml await Excel.run(async (context) => { - const activeSheet = context.workbook.worksheets.getActiveWorksheet(); - activeSheet.tabColor = "#FF0000"; + let activeSheet = context.workbook.worksheets.getActiveWorksheet(); + activeSheet.load("protection/protected"); await context.sync(); + + if (!activeSheet.protection.protected) { + activeSheet.protection.protect(); + } }); -'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/master/samples/excel/50-workbook/data-protection.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: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + let password = await passwordHandler(); + + passwordHelper(password); await Excel.run(async (context) => { - let sheets = context.workbook.worksheets; - sheets.onActivated.add(onActivate); + let activeSheet = context.workbook.worksheets.getActiveWorksheet(); + activeSheet.load("protection/protected"); await context.sync(); - console.log("A handler has been registered for the OnActivate event."); + + if (!activeSheet.protection.protected) { + activeSheet.protection.protect(null, password); + } }); -'Excel.WorksheetCollection#onAdded:member': +'Excel.WorksheetProtection#unprotect: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/master/samples/excel/50-workbook/data-protection.yaml await Excel.run(async (context) => { - let sheet = context.workbook.worksheets; - sheet.onAdded.add(onWorksheetAdd); + let activeSheet = context.workbook.worksheets.getActiveWorksheet(); + activeSheet.protection.unprotect(); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/data-protection.yaml - await context.sync(); - console.log("A handler has been registered for the OnAdded event."); + let password = await passwordHandler(); + + passwordHelper(password); + + await Excel.run(async (context) => { + let activeSheet = context.workbook.worksheets.getActiveWorksheet(); + activeSheet.protection.unprotect(password); }); -'Excel.WorksheetCollection#onDeactivated:member': +'Excel.Workbook#getActiveCell: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/master/samples/excel/50-workbook/workbook-get-active-cell.yaml await Excel.run(async (context) => { - let sheets = context.workbook.worksheets; - sheets.onDeactivated.add(onDeactivate); + + let myWorkbook = context.workbook; + let activeCell = myWorkbook.getActiveCell(); + activeCell.load("address"); await context.sync(); - console.log("A handler has been registered for the OnDeactivate event."); + + console.log("The active cell is " + activeCell.address); }); 'Excel.WorksheetCollection#addFromBase64:member(1)': - >- @@ -4657,81 +4628,85 @@ // 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)': +'Excel.Workbook#close: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/master/samples/excel/50-workbook/workbook-save-and-close.yaml await Excel.run(async (context) => { - const sheets = context.workbook.worksheets; + context.workbook.close(Excel.CloseBehavior.save); + }); +'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 - // 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) => { + context.workbook.save(Excel.SaveBehavior.save); + }); +'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 - firstSheet.load("name"); - lastSheet.load("name"); - firstTaxRateRange.load("text"); - lastTaxRateRange.load("text"); + 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#autoFilter:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-auto-filter.yaml - 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 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.WorksheetCollection#getLast:member(1)': +'Excel.Worksheet#copy: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/master/samples/excel/54-worksheet/worksheet-copy.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"); + let myWorkbook = context.workbook; + let sampleSheet = myWorkbook.worksheets.getActiveWorksheet(); + let copiedSheet = sampleSheet.copy("End") - firstSheet.load("name"); - lastSheet.load("name"); - firstTaxRateRange.load("text"); - lastTaxRateRange.load("text"); + sampleSheet.load("name"); + copiedSheet.load("name"); 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(); + console.log("'" + sampleSheet.name + "' was copied to '" + copiedSheet.name + "'") }); -'Excel.WorksheetCustomPropertyCollection#add:member(1)': +'Excel.Worksheet#findAllOrNullObject: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/master/samples/excel/54-worksheet/worksheet-find-all.yaml await Excel.run(async (context) => { - // Get the key/value pair from the task pane. - const userKey = $("#key").text(); - const userValue = $("#value").text(); - - // Add the custom property. - const customWorksheetProperties = context.workbook.worksheets.getActiveWorksheet().customProperties; - customWorksheetProperties.add(userKey, userValue); + const sheet = context.workbook.worksheets.getItem("Sample"); + const foundRanges = sheet.findAllOrNullObject("Complete", { + completeMatch: true, + matchCase: false + }); - await context.sync(); + await context.sync(); - console.log(`Successfully set custom worksheet property ${userKey}:${userValue}.`); + if (foundRanges.isNullObject) { + console.log("No complete projects"); + } else { + foundRanges.format.fill.color = "green" + } }); 'Excel.WorksheetFreezePanes#freezeAt:member(1)': - >- @@ -4801,75 +4776,209 @@ await context.sync(); }); -'Excel.WorksheetProtection#protect:member(1)': +'Excel.Worksheet#showGridlines:member': - >- // 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/master/samples/excel/54-worksheet/gridlines.yaml await Excel.run(async (context) => { - let activeSheet = context.workbook.worksheets.getActiveWorksheet(); - activeSheet.load("protection/protected"); + const sheet = context.workbook.worksheets.getActiveWorksheet(); + sheet.showGridlines = true; await context.sync(); + }); +'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 - if (!activeSheet.protection.protected) { - activeSheet.protection.protect(); - } + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.horizontalPageBreaks.add("A21:E21"); + await context.sync(); }); +'Excel.PageLayout#centerHorizontally:member': - >- // 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/master/samples/excel/54-worksheet/worksheet-page-layout.yaml - let password = await passwordHandler(); + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.pageLayout.centerHorizontally = true; + farmSheet.pageLayout.centerVertically = true; + await context.sync(); + }); +'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 - passwordHelper(password); + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.pageLayout.centerHorizontally = true; + farmSheet.pageLayout.centerVertically = true; + await context.sync(); + }); +'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 await Excel.run(async (context) => { - let activeSheet = context.workbook.worksheets.getActiveWorksheet(); - activeSheet.load("protection/protected"); + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.pageLayout.orientation = Excel.PageOrientation.landscape; + await context.sync(); + }); +'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 + 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/master/samples/excel/54-worksheet/worksheet-page-layout.yaml - if (!activeSheet.protection.protected) { - activeSheet.protection.protect(null, password); - } + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.pageLayout.setPrintTitleRows("$1:$1"); + await context.sync(); }); -'Excel.WorksheetProtection#unprotect:member(1)': +'Excel.PageLayout#zoom:member': - >- // 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/master/samples/excel/54-worksheet/worksheet-page-layout.yaml await Excel.run(async (context) => { - let activeSheet = context.workbook.worksheets.getActiveWorksheet(); - activeSheet.protection.unprotect(); + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.pageLayout.zoom = { scale: 200 }; + await context.sync(); }); +'Excel.Worksheet#getNext: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/master/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"); + + 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/master/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml await Excel.run(async (context) => { - let activeSheet = context.workbook.worksheets.getActiveWorksheet(); - activeSheet.protection.unprotect(password); + 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.WorksheetSingleClickedEventArgs#address:member': +'Excel.WorksheetCollection#getFirst:member(1)': - >- // 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/master/samples/excel/54-worksheet/reference-worksheets-by-relative-position.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(); - }); - }); + const sheets = context.workbook.worksheets; - console.log("The worksheet click handler is registered."); + // 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/master/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#tabColor:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/tab-color.yaml + + await Excel.run(async (context) => { + const activeSheet = context.workbook.worksheets.getActiveWorksheet(); + activeSheet.tabColor = "#FF0000"; await context.sync(); }); diff --git a/view/excel.json b/view/excel.json index f121396da..b1dba0a49 100644 --- a/view/excel.json +++ b/view/excel.json @@ -43,6 +43,7 @@ "excel-events-table-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-table-changed.yaml", "excel-events-workbook-and-worksheet-collection": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml", "excel-events-worksheet": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-worksheet.yaml", + "excel-events-comments": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-comment-event-handler.yaml", "excel-named-item-create-and-remove-named-item": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/34-named-item/create-and-remove-named-item.yaml", "excel-update-named-item": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/34-named-item/update-named-item.yaml", "excel-pivottable-calculations": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/38-pivottable/pivottable-calculations.yaml", From 4c5bb86562cc51284583d0f638758c388d54bb8a Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Mon, 21 Sep 2020 11:13:57 -0700 Subject: [PATCH 307/660] [excel] (Charts) Bubble chart sample (#491) * Bubble chart sample * Map snippet methods to ref doc entries * Feedback --- playlists/excel.yaml | 11 + .../excel/10-chart/chart-bubble-chart.yaml | 164 + .../10-chart/chart-create-several-charts.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 +- .../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 22500 -> 22693 bytes snippet-extractor-output/snippets.yaml | 6168 +++++++++-------- view/excel.json | 1 + 15 files changed, 3307 insertions(+), 3057 deletions(-) create mode 100644 samples/excel/10-chart/chart-bubble-chart.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index f3a1230e2..d34f52272 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -45,6 +45,17 @@ 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////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 diff --git a/samples/excel/10-chart/chart-bubble-chart.yaml b/samples/excel/10-chart/chart-bubble-chart.yaml new file mode 100644 index 000000000..ca6970161 --- /dev/null +++ b/samples/excel/10-chart/chart-bubble-chart.yaml @@ -0,0 +1,164 @@ +order: 3 +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). +author: OfficeDev +host: EXCEL +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)); + async function createBubbleChart() { + 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 a 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(); + }); + } + async function getChartSeriesDimensionValues() { + 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}`); + }); + } + + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + + let inventoryTable = sheet.tables.add("A1:D1", true); + inventoryTable.name = "Sales"; + inventoryTable.getHeaderRowRange().values = [["Product", "Inventory", "Price", "Current Market Share"]]; + + inventoryTable.rows.add(null, [ + ["Calamansi", 2000, "$2.45", "10%"], + ["Cara cara orange", 10000, "$2.12", "45%"], + ["Limequat", 4000, "$0.70", "66%"], + ["Meyer lemon", 100, "$2.65", "5%"], + ["Pomelo", 4000, "$1.69", "14%"], + ["Yuzu", 7500, "$3.23", "34%"] + ]); + + 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 create a bubble chart, with each chart series (or bubble) representing a single table row.

        +
        + +
        +

        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-create-several-charts.yaml b/samples/excel/10-chart/chart-create-several-charts.yaml index b5b7d7537..10a7a11cd 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: 3 +order: 4 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-formatting.yaml b/samples/excel/10-chart/chart-formatting.yaml index 43858df03..b852a2e29 100644 --- a/samples/excel/10-chart/chart-formatting.yaml +++ b/samples/excel/10-chart/chart-formatting.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 6 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 b00d524f8..bd95dae97 100644 --- a/samples/excel/10-chart/chart-legend.yaml +++ b/samples/excel/10-chart/chart-legend.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 7 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 267698091..6370a490c 100644 --- a/samples/excel/10-chart/chart-point.yaml +++ b/samples/excel/10-chart/chart-point.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 8 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 0669879b9..2aec1f275 100644 --- a/samples/excel/10-chart/chart-series-markers.yaml +++ b/samples/excel/10-chart/chart-series-markers.yaml @@ -1,4 +1,4 @@ -order: 9 +order: 10 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 a26d2477f..c8c7a14d1 100644 --- a/samples/excel/10-chart/chart-series-plotorder.yaml +++ b/samples/excel/10-chart/chart-series-plotorder.yaml @@ -1,4 +1,4 @@ -order: 10 +order: 11 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 6cdf4cda5..88b71fd33 100644 --- a/samples/excel/10-chart/chart-series.yaml +++ b/samples/excel/10-chart/chart-series.yaml @@ -1,4 +1,4 @@ -order: 8 +order: 9 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 666104ed5..3dfee0e3a 100644 --- a/samples/excel/10-chart/chart-title-format.yaml +++ b/samples/excel/10-chart/chart-title-format.yaml @@ -1,4 +1,4 @@ -order: 11 +order: 12 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 7318b91cb..c9af58528 100644 --- a/samples/excel/10-chart/chart-trendlines.yaml +++ b/samples/excel/10-chart/chart-trendlines.yaml @@ -1,4 +1,4 @@ -order: 12 +order: 13 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 e0011a6e1..b7d8c3815 100644 --- a/samples/excel/10-chart/create-doughnut-chart.yaml +++ b/samples/excel/10-chart/create-doughnut-chart.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 5 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 164c0b2070f6cc7204ff7c1b28987f8b35715f54..901bb3b1a63b2e86799857e2af1cf9fc3e885297 100644 GIT binary patch delta 12748 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 E0KA>8i2wiq delta 12532 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 DG|x$u diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 67967eca5..1fcd69a31 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -1,1760 +1,1854 @@ -'Excel.ChartAxis#displayUnit:member': +'Excel.Application#decimalSeparator: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/master/samples/excel/50-workbook/culture-info.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + context.application.load("decimalSeparator,thousandsSeparator"); + context.application.cultureInfo.numberFormat.load("numberDecimalSeparator,numberGroupSeparator"); + await context.sync(); - let chart = sheet.charts.getItemAt(0); - let categoryAxis = chart.axes.categoryAxis; - let valueAxis = chart.axes.valueAxis; + // Local settings are set under the "Options > Advanced" menu. + const localDecimalSeparator = context.application.decimalSeparator; + const localThousandsSeparator = context.application.thousandsSeparator; - // Load to get display unit. - valueAxis.load("displayUnit"); + const systemDecimalSeparator = context.application.cultureInfo.numberFormat.numberDecimalSeparator; + const systemThousandsSeparator = context.application.cultureInfo.numberFormat.numberGroupSeparator; - await context.sync(); + console.log("Local character settings: "); + console.log(` Local decimal separator: ${localDecimalSeparator}`); + console.log(` Local thousands separator: ${localThousandsSeparator}`); - console.log("The vertical axis display unit is: " + valueAxis.displayUnit); + console.log("System culture settings: "); + console.log(` System decimal separator: ${systemDecimalSeparator}`); + console.log(` System thousands separator: ${systemThousandsSeparator}`); + console.log(` `); + + await context.sync(); }); -'Excel.ChartAxis#showDisplayUnitLabel:member': +'Excel.Application#suspendScreenUpdatingUntilNextSync:member(1)': - >- // 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/master/samples/excel/90-scenarios/performance-optimization.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - let chart = sheet.charts.getItemAt(0); - let axis = chart.axes.valueAxis; + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const rowCount = 500; + const columnCount = 20; - // Remove display unit. - axis.showDisplayUnitLabel = false; + 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(); + } + + 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(); + } + } + } await context.sync(); + + console.log(`Ending. Adding ${rowCount * columnCount} cells took ${Date.now() - startTime} milliseconds`); }); -'Excel.ChartLegendFormat#font:member': +'Excel.AutoFilter#apply:member(1)': - >- // 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/master/samples/excel/54-worksheet/worksheet-auto-filter.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - let chart = sheet.charts.getItemAt(0); - chart.legend.visible = true; - - // Format the legend font. - let font = chart.legend.format.font; - font.bold = true; - font.color = "red"; - font.italic = true; - font.size = 15; - font.name = "Calibri"; - font.underline = "Single"; + 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.ChartFill#setSolidColor:member(1)': +'Excel.Binding#onDataChanged:member': - >- // 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/master/samples/excel/30-events/data-changed.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - let pointsCollection = sheet.charts.getItemAt(0).series.getItemAt(0).points; - let point = pointsCollection.getItemAt(2); + const sheet = context.workbook.worksheets.getItem("Sample"); + const salesTable = sheet.tables.getItem("SalesTable"); + const salesByQuarterBinding = context.workbook.bindings.add(salesTable.getRange(), "Table", "SalesByQuarter"); + salesByQuarterBinding.onDataChanged.add(onSalesDataChanged); - // Set color for chart point. - point.format.fill.setSolidColor('red'); + console.log("The data changed handler is registered."); - await context.sync(); + await context.sync(); }); -'Excel.ChartSeries#delete:member(1)': +'Excel.CellPropertiesFill#color:member': - >- // 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/master/samples/excel/42-range/cell-properties.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(); + const sheet = context.workbook.worksheets.getActiveWorksheet(); - if (seriesCollection.count > 0) { - const series = seriesCollection.getItemAt(0); + // 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" + }; - // Delete the first series. - series.delete(); - } + 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 + } + } + }; - await context.sync(); - }); -'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 + const nonApplicableProps: Excel.SettableCellProperties = { + format: { + fill: { + pattern: Excel.FillPattern.gray25 + }, + font: { + color: "Gray", + italic: true + } + } + }; - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + 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 + } + } + } + }; - let seriesCollection = sheet.charts.getItemAt(0); - let rangeSelection = sheet.getRange("C2:C7"); - let xRangeSelection = sheet.getRange("A1:A7"); + const range = sheet.getRange("A1:E5"); - // Add a series. - let newSeries = seriesCollection.series.add("Qtr2"); - newSeries.setValues(rangeSelection); - newSeries.setXAxisValues(xRangeSelection); + // 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] + ]); - await context.sync(); + sheet.getUsedRange().format.autofitColumns(); + await context.sync(); }); -'Excel.ChartSeries#markerBackgroundColor:member': +'Excel.CellPropertiesFillLoadOptions#color: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/master/samples/excel/42-range/cell-properties.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); + const cell = context.workbook.getActiveCell(); - // Set markers. - series0.markerStyle = "Dash"; - series0.markerForegroundColor = "black"; - series1.markerStyle = "Star"; - series1.markerForegroundColor = "black"; - series2.markerStyle = "X"; - series2.markerSize = 12; - series3.markerStyle = "Triangle"; - series3.markerBackgroundColor = "purple"; + // 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.ChartSeries#markerForegroundColor:member': +'Excel.CellPropertiesFont#color: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/master/samples/excel/42-range/cell-properties.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); + const sheet = context.workbook.worksheets.getActiveWorksheet(); - // Set markers. - series0.markerStyle = "Dash"; - series0.markerForegroundColor = "black"; - series1.markerStyle = "Star"; - series1.markerForegroundColor = "black"; - series2.markerStyle = "X"; - series2.markerSize = 12; - series3.markerStyle = "Triangle"; - series3.markerBackgroundColor = "purple"; + // 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.ChartSeries#markerSize:member': +'Excel.CellPropertiesFontLoadOptions#color: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/master/samples/excel/42-range/cell-properties.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); + const cell = context.workbook.getActiveCell(); - // Set markers. - series0.markerStyle = "Dash"; - series0.markerForegroundColor = "black"; - series1.markerStyle = "Star"; - series1.markerForegroundColor = "black"; - series2.markerStyle = "X"; - series2.markerSize = 12; - series3.markerStyle = "Triangle"; - series3.markerBackgroundColor = "purple"; + // 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.ChartSeries#markerStyle:member': +'Excel.CellPropertiesLoadOptions#address: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/master/samples/excel/42-range/cell-properties.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); + const cell = context.workbook.getActiveCell(); - // Set markers. - series0.markerStyle = "Dash"; - series0.markerForegroundColor = "black"; - series1.markerStyle = "Star"; - series1.markerForegroundColor = "black"; - series2.markerStyle = "X"; - series2.markerSize = 12; - series3.markerStyle = "Triangle"; - series3.markerBackgroundColor = "purple"; + // 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.ChartTitle#getSubstring:member(1)': +'Excel.CellValueConditionalFormat#format: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml await Excel.run(async (context) => { - let sheet = context.workbook.worksheets.getItem("Sample"); - let chart = sheet.charts.getItemAt(0); + 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" }; - // Get first seven characters of the title and color them green. - chart.title.getSubstring(0, 7).font.color = "Yellow"; await context.sync(); }); -'Excel.ChartTitle#textOrientation:member': +'Excel.CellValueConditionalFormat#rule: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - const title = sheet.charts.getItemAt(0).title; - title.textOrientation = -45; + 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.ChartTrendline#type:member': +'Excel.ChartAxis#displayUnit: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/master/samples/excel/10-chart/chart-axis.yaml await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - let seriesCollection = sheet.charts.getItemAt(0).series; + let chart = sheet.charts.getItemAt(0); + let categoryAxis = chart.axes.categoryAxis; + let valueAxis = chart.axes.valueAxis; - // Get the trendline for series 1 and load its type property. - let trendline = seriesCollection.getItemAt(0).trendlines.getItem(0); - trendline.load("type"); + // Load to get display unit. + valueAxis.load("displayUnit"); await context.sync(); - console.log("The trendline type is:" + trendline.type); + console.log("The vertical axis display unit is: " + valueAxis.displayUnit); }); -'Excel.ChartTrendlineCollection#add:member(1)': +'Excel.ChartAxis#showDisplayUnitLabel: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/master/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); + let axis = chart.axes.valueAxis; - let seriesCollection = sheet.charts.getItemAt(0).series; - - // Add a trendline. - seriesCollection.getItemAt(0).trendlines.add("Linear"); + // Remove display unit. + axis.showDisplayUnitLabel = false; await context.sync(); }); -'Excel.ChartTrendlineFormat#line:member': +'Excel.ChartFill#setSolidColor: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/master/samples/excel/10-chart/chart-point.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"); + let pointsCollection = sheet.charts.getItemAt(0).series.getItemAt(0).points; + let point = pointsCollection.getItemAt(2); - await context.sync(); + // Set color for chart point. + point.format.fill.setSolidColor('red'); - console.log("The trendline color is:" + line.color); + await context.sync(); }); +'Excel.ChartLegendFormat#font: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/master/samples/excel/10-chart/chart-legend.yaml await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - let seriesCollection = sheet.charts.getItemAt(0).series; - let trendline = seriesCollection.getItemAt(0).trendlines.getItem(0); + let chart = sheet.charts.getItemAt(0); + chart.legend.visible = true; - // Set format of the trendline to a solid, red line. - let line = trendline.format.line; - line.color = '#FF0000'; + // Format the legend font. + let font = chart.legend.format.font; + font.bold = true; + font.color = "red"; + font.italic = true; + font.size = 15; + font.name = "Calibri"; + font.underline = "Single"; await context.sync(); - - console.log("The trendline color has been set to:" + line.color); }); -'Excel.Comment#content:member': +'Excel.ChartSeries#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/master/samples/excel/10-chart/chart-series.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)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/12-comment/comment-basics.yaml + const sheet = context.workbook.worksheets.getItem("Sample"); + const seriesCollection = sheet.charts.getItemAt(0).series; + seriesCollection.load("count"); + await context.sync(); - await Excel.run(async (context) => { - context.workbook.comments.getItemByCell("Comments!A2").delete(); - await context.sync(); - }); -'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 + if (seriesCollection.count > 0) { + const series = seriesCollection.getItemAt(0); - await Excel.run(async (context) => { - const comment = context.workbook.comments.getItemByCell("Comments!A2"); - comment.load(["authorEmail", "authorName", "creationDate"]); - await context.sync(); + // Delete the first series. + series.delete(); + } - console.log(`${comment.creationDate.toDateString()}: ${comment.authorName} (${comment.authorEmail})`); - await context.sync(); + await context.sync(); }); -'Excel.CommentCollection#add:member(1)': +'Excel.ChartSeries#setValues: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/master/samples/excel/10-chart/chart-series.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Comments"); + const sheet = context.workbook.worksheets.getItem("Sample"); - // Note that an InvalidArgument error will be thrown if multiple cells passed to `comment.add`. - sheet.comments.add("A2", "TODO: add data."); - await context.sync(); + 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.CommentRichContent#mentions:member': +'Excel.ChartSeries#markerBackgroundColor: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/master/samples/excel/10-chart/chart-series-markers.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Comments"); - const mention = { - email: "kakri@contoso.com", - id: 0, - name: "Kate Kristensen" - }; + let sheet = context.workbook.worksheets.getItem("Sample"); + let salesTable = sheet.tables.getItem("SalesTable"); + let dataRange = sheet.getRange("A1:E7"); - // 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?" - }; + // 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"; + series0.markerForegroundColor = "black"; + series1.markerStyle = "Star"; + series1.markerForegroundColor = "black"; + series2.markerStyle = "X"; + series2.markerSize = 12; + series3.markerStyle = "Triangle"; + series3.markerBackgroundColor = "purple"; - // 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.CommentReply#content:member': +'Excel.ChartSeries#markerForegroundColor: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/master/samples/excel/10-chart/chart-series-markers.yaml await Excel.run(async (context) => { - 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(); + let sheet = context.workbook.worksheets.getItem("Sample"); + let salesTable = sheet.tables.getItem("SalesTable"); + let dataRange = sheet.getRange("A1:E7"); - // Append "Please!" to the end of the comment reply. - reply.content += " Please!"; - await context.sync(); - }); -'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 + // 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); - 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(); - await context.sync(); - }); -'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 + // Set markers. + series0.markerStyle = "Dash"; + series0.markerForegroundColor = "black"; + series1.markerStyle = "Star"; + series1.markerForegroundColor = "black"; + series2.markerStyle = "X"; + series2.markerSize = 12; + series3.markerStyle = "Triangle"; + series3.markerBackgroundColor = "purple"; - await Excel.run(async (context) => { - // Adds a reply to the first comment in this worksheet. - const sheet = context.workbook.worksheets.getItem("Comments"); - const comment = sheet.comments.getItemAt(0); - comment.replies.add("Add content to this worksheet."); await context.sync(); }); -'Excel.Comment#resolved:member': +'Excel.ChartSeries#markerSize: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/master/samples/excel/10-chart/chart-series-markers.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Comments"); - sheet.comments.getItemAt(0).resolved = true; + 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); + + // Set markers. + series0.markerStyle = "Dash"; + series0.markerForegroundColor = "black"; + series1.markerStyle = "Star"; + series1.markerForegroundColor = "black"; + series2.markerStyle = "X"; + series2.markerSize = 12; + series3.markerStyle = "Triangle"; + series3.markerBackgroundColor = "purple"; + await context.sync(); }); -'Excel.Application#decimalSeparator:member': +'Excel.ChartSeries#markerStyle: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/master/samples/excel/10-chart/chart-series-markers.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; + let sheet = context.workbook.worksheets.getItem("Sample"); + let salesTable = sheet.tables.getItem("SalesTable"); + let dataRange = sheet.getRange("A1:E7"); - console.log("Local character settings: "); - console.log(` Local decimal separator: ${localDecimalSeparator}`); - console.log(` Local thousands separator: ${localThousandsSeparator}`); + // 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); - console.log("System culture settings: "); - console.log(` System decimal separator: ${systemDecimalSeparator}`); - console.log(` System thousands separator: ${systemThousandsSeparator}`); - console.log(` `); + // Set markers. + series0.markerStyle = "Dash"; + series0.markerForegroundColor = "black"; + series1.markerStyle = "Star"; + series1.markerForegroundColor = "black"; + series2.markerStyle = "X"; + series2.markerSize = 12; + series3.markerStyle = "Triangle"; + series3.markerBackgroundColor = "purple"; - await context.sync(); + await context.sync(); }); -'Excel.NumberFormatInfo#numberDecimalSeparator:member': +'Excel.ChartSeries#setBubbleSizes:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/culture-info.yaml - - // This will convert a number like "14,37" to "14.37" + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-bubble-chart.yaml - // (assuming the system decimal separator is "."). - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + await Excel.run(async (context) => { + /* + The table is expected to look like this: + Product, Inventory, Price, Current Market Share + Calamansi, 2000, $2.45, 10% + ... - const decimalSource = sheet.getRange("B2"); + We want a each bubble to represent a single row. + */ - decimalSource.load("values"); + // Get the worksheet and table data. + const sheet = context.workbook.worksheets.getItem("Sample"); + const table = sheet.tables.getItem("Sales"); + const dataRange = table.getDataBodyRange(); - context.application.cultureInfo.numberFormat.load("numberDecimalSeparator"); + // Get the table data without the row names. + const valueRange = dataRange.getOffsetRange(0, 1).getResizedRange(0, -1); - await context.sync(); + // 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(); - const systemDecimalSeparator = - context.application.cultureInfo.numberFormat.numberDecimalSeparator; + // Load the data necessary to make a chart series. + dataRange.load(["rowCount", "values"]); + await context.sync(); - const oldDecimalString: string = decimalSource.values[0][0]; + // 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; + } - // This assumes the input column is standardized to use "," as the decimal - separator. + await context.sync(); + }); +'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 - const newDecimalString = oldDecimalString.replace(",", - systemDecimalSeparator); + 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"); - const resultRange = sheet.getRange("C2"); + // Get the first series in the chart. + const firstSeries = bubbleChart.series.getItemAt(0); - resultRange.values = [[newDecimalString]]; + // 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); - resultRange.format.autofitColumns(); + await context.sync(); - await context.sync(); - }); -'Excel.NumberFormatInfo#numberGroupSeparator:member': + // 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: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/culture-info.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-title-format.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 ","). - const sheet = context.workbook.worksheets.getItem("Sample"); - const bigNumberSource = sheet.getRange("B3"); - bigNumberSource.load("values"); - context.application.cultureInfo.numberFormat.load("numberGroupSeparator"); - await context.sync(); + let sheet = context.workbook.worksheets.getItem("Sample"); + let chart = sheet.charts.getItemAt(0); - const systemThousandsSeparator = context.application.cultureInfo.numberFormat.numberGroupSeparator; - const oldBigNumberString: string = bigNumberSource.values[0][0]; - - // This assumes the input column is standardized to use "-" as the number group separator. - const newBigNumberString = oldBigNumberString.replace(/-/g, systemThousandsSeparator); + // Get first seven characters of the title and color them green. + chart.title.getSubstring(0, 7).font.color = "Yellow"; + await context.sync(); + }); +'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 - const resultRange = sheet.getRange("C3"); - resultRange.values = [[newBigNumberString]]; - resultRange.format.autofitColumns(); - await context.sync(); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const title = sheet.charts.getItemAt(0).title; + title.textOrientation = -45; + + await context.sync(); }); -'Excel.CultureInfo#datetimeFormat:member': +'Excel.ChartTrendline#type: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/master/samples/excel/10-chart/chart-trendlines.yaml await Excel.run(async (context) => { - context.application.cultureInfo.datetimeFormat.load([ - "longDatePattern", - "shortDatePattern", - "dateSeparator", - "longTimePattern", - "timeSeparator" - ]); - await context.sync(); + const sheet = context.workbook.worksheets.getItem("Sample"); - // Use the cultural settings API to retrieve the user's system date and time settings. - const systemLongDatePattern = context.application.cultureInfo.datetimeFormat.longDatePattern; - const systemShortDatePattern = context.application.cultureInfo.datetimeFormat.shortDatePattern; - const systemDateSeparator = context.application.cultureInfo.datetimeFormat.dateSeparator; - const systemLongTimePattern = context.application.cultureInfo.datetimeFormat.longTimePattern; - const systemTimeSeparator = context.application.cultureInfo.datetimeFormat.timeSeparator; + let seriesCollection = sheet.charts.getItemAt(0).series; - // Write the date and time settings in your table. - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const dateTimeData = sheet.getRange("A2:B6"); - dateTimeData.values = [ - ["Long date", systemLongDatePattern], - ["Short date", systemShortDatePattern], - ["Date separator", systemDateSeparator], - ["Long time format", systemLongTimePattern], - ["Time separator", systemTimeSeparator] - ]; + // Get the trendline for series 1 and load its type property. + let trendline = seriesCollection.getItemAt(0).trendlines.getItem(0); + trendline.load("type"); - sheet.tables - .getItemAt(0) - .getRange() - .format.autofitColumns(); + await context.sync(); - await context.sync(); + console.log("The trendline type is:" + trendline.type); }); -'Excel.CustomXmlPart#delete:member(1)': +'Excel.ChartTrendlineCollection#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/master/samples/excel/10-chart/chart-trendlines.yaml await Excel.run(async (context) => { - const settings = context.workbook.settings; - const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); - await context.sync(); - - if (xmlPartIDSetting.value) { - let customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); - const xmlBlob = customXmlPart.getXml(); - customXmlPart.delete(); - customXmlPart = context.workbook.customXmlParts.getItemOrNullObject(xmlPartIDSetting.value); - - await context.sync(); + const sheet = context.workbook.worksheets.getItem("Sample"); - if (customXmlPart.isNullObject) { - $("#display-xml").text(`The XML part with the id ${xmlPartIDSetting.value} has been deleted.`); + let seriesCollection = sheet.charts.getItemAt(0).series; - // 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); - } + // Add a trendline. + seriesCollection.getItemAt(0).trendlines.add("Linear"); - await context.sync(); - } + await context.sync(); }); -'Excel.CustomXmlPart#getXml:member(1)': +'Excel.ChartTrendlineFormat#line: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/master/samples/excel/10-chart/chart-trendlines.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 sheet = context.workbook.worksheets.getItem("Sample"); - const readableXml = addLineBreaksToXML(xmlBlob.value); - $("#display-xml").text(readableXml); + let seriesCollection = sheet.charts.getItemAt(0).series; - // Store the XML part's ID in a setting. - const settings = context.workbook.settings; - settings.add("ContosoReviewXmlPartId", customXmlPart.id); + // 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); }); -'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/master/samples/excel/10-chart/chart-trendlines.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(); + const sheet = context.workbook.worksheets.getItem("Sample"); + + let seriesCollection = sheet.charts.getItemAt(0).series; + let trendline = seriesCollection.getItemAt(0).trendlines.getItem(0); + + // Set format of the trendline to a solid, red line. + let line = trendline.format.line; + line.color = '#FF0000'; await context.sync(); - const readableXml = addLineBreaksToXML(xmlBlob.value); - $("#display-xml").text(readableXml); + console.log("The trendline color has been set to:" + line.color); + }); +'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 - // Store the XML part's ID in a setting. - const settings = context.workbook.settings; - settings.add("ContosoReviewXmlPartId", customXmlPart.id); + 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.CustomXmlPart#setXml:member(1)': +'Excel.Comment#content: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/master/samples/excel/12-comment/comment-basics.yaml await Excel.run(async (context) => { - const settings = context.workbook.settings; - const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); + const sheet = context.workbook.worksheets.getItem("Comments"); + const comment = sheet.comments.getItemAt(0); + comment.content = "PLEASE add headers here."; 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. - customXmlPart.setXml("JohnHitomi"); - const xmlBlob = customXmlPart.getXml(); - await context.sync(); - - const readableXml = addLineBreaksToXML(xmlBlob.value); - $("#display-xml").text(readableXml); - await context.sync(); - } }); -'Excel.CustomXmlPartCollection#add:member(1)': +'Excel.Comment#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/master/samples/excel/12-comment/comment-basics.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(); - + context.workbook.comments.getItemByCell("Comments!A2").delete(); await context.sync(); + }); +'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 - 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 Excel.run(async (context) => { + const comment = context.workbook.comments.getItemByCell("Comments!A2"); + comment.load(["authorEmail", "authorName", "creationDate"]); + await context.sync(); + console.log(`${comment.creationDate.toDateString()}: ${comment.authorName} (${comment.authorEmail})`); await context.sync(); }); -'Excel.CustomXmlPartCollection#getItem:member(1)': +'Excel.Comment#resolved: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/master/samples/excel/12-comment/comment-resolution.yaml await Excel.run(async (context) => { - const settings = context.workbook.settings; - const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); + const sheet = context.workbook.worksheets.getItem("Comments"); + sheet.comments.getItemAt(0).resolved = true; await context.sync(); + }); +'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 - if (xmlPartIDSetting.value) { - const customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); - - // The setXml method does a whole-for-whole replacement - // of the entire XML. - customXmlPart.setXml("JohnHitomi"); - const xmlBlob = customXmlPart.getXml(); - await context.sync(); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Comments"); - const readableXml = addLineBreaksToXML(xmlBlob.value); - $("#display-xml").text(readableXml); - await context.sync(); - } + // Note that an InvalidArgument error will be thrown if multiple cells passed to `comment.add`. + sheet.comments.add("A2", "TODO: add data."); + await context.sync(); }); -'Excel.CustomXmlPartScopedCollection#getItemOrNullObject:member(1)': +'Excel.CommentCollection#onAdded: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/master/samples/excel/30-events/events-comment-event-handler.yaml await Excel.run(async (context) => { - const settings = context.workbook.settings; - const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); - await context.sync(); + const comments = context.workbook.worksheets.getActiveWorksheet().comments; - if (xmlPartIDSetting.value) { - let customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); - const xmlBlob = customXmlPart.getXml(); - customXmlPart.delete(); - customXmlPart = context.workbook.customXmlParts.getItemOrNullObject(xmlPartIDSetting.value); - - await context.sync(); - - if (customXmlPart.isNullObject) { - $("#display-xml").text(`The XML part with the id ${xmlPartIDSetting.value} has been deleted.`); + // Register the onAdded, onChanged, and onDeleted comment event handlers. + comments.onAdded.add(commentAdded); + comments.onChanged.add(commentChanged); + comments.onDeleted.add(commentDeleted); - // 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); - } + await context.sync(); - await context.sync(); - } + console.log("Added event handlers for when comments are added, changed, or deleted."); }); -'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 - - 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(); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-comment-event-handler.yaml - await context.sync(); + async function commentAdded(event: Excel.CommentAddedEventArgs) { + 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); - if (numberOfPartsInNamespace.value == 1) { - const onlyXmlPartInNamespace = filteredXmlParts.getOnlyItem(); - const xmlBlob = onlyXmlPartInNamespace.getXml(); + // Load the added comment's data. + addedComment.load(["content", "authorName", "creationDate"]); 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#getCount:member(1)': + // Print out the added comment's data. + console.log(`A comment was added:`); + console.log(` ID: ${event.commentDetails[0].commentId}`); + console.log(` Comment content:${addedComment.content}`); + console.log(` Comment author:${addedComment.authorName}`); + console.log(` Creation date:${addedComment.creationDate}`); + }); + } +'Excel.CommentCollection#onChanged:member': - >- // 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/master/samples/excel/30-events/events-comment-event-handler.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}`); + const comments = context.workbook.worksheets.getActiveWorksheet().comments; - } else { - console.log(`There are ${numberOfPartsInNamespace.value} XML parts with namespace ${contosoNamespace}. There should be exactly 1.`); - } + // Register the onAdded, onChanged, and onDeleted comment event handlers. + comments.onAdded.add(commentAdded); + comments.onChanged.add(commentChanged); + comments.onDeleted.add(commentDeleted); await context.sync(); + + console.log("Added event handlers for when comments are added, changed, or deleted."); }); -'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 - - 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(); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-comment-event-handler.yaml - await context.sync(); + async function commentChanged(event: Excel.CommentChangedEventArgs) { + 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); - if (numberOfPartsInNamespace.value == 1) { - const onlyXmlPartInNamespace = filteredXmlParts.getOnlyItem(); - const xmlBlob = onlyXmlPartInNamespace.getXml(); + // Load the changed comment's data. + changedComment.load(["content", "authorName", "creationDate"]); await context.sync(); - // Make it a bit more readable. - const readableXml = xmlBlob.value.replace(/>\n<"); + // Print out the changed comment's data. + console.log(`A comment was changed:`); + console.log(` ID: ${event.commentDetails[0].commentId}`); + console.log(` Updated comment content: ${changedComment.content}`); + console.log(` Comment author: ${changedComment.authorName}`); + console.log(` Creation date: ${changedComment.creationDate}`); + }); + } +'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 - $("#display-xml").text(`The only XML part in the namespace ${contosoNamespace} is: - ${readableXml}`); + await Excel.run(async (context) => { + const comments = context.workbook.worksheets.getActiveWorksheet().comments; - } else { - console.log(`There are ${numberOfPartsInNamespace.value} XML parts with namespace ${contosoNamespace}. There should be exactly 1.`); - } + // Register the onAdded, onChanged, and onDeleted comment event handlers. + comments.onAdded.add(commentAdded); + comments.onChanged.add(commentChanged); + comments.onDeleted.add(commentDeleted); await context.sync(); + + console.log("Added event handlers for when comments are added, changed, or deleted."); }); -'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/master/samples/excel/30-events/events-comment-event-handler.yaml - async function onTableChanged(eventArgs: Excel.TableChangedEventArgs) { + async function commentDeleted(event: Excel.CommentDeletedEventArgs) { await Excel.run(async (context) => { - const details = eventArgs.details; - const address = eventArgs.address; - - console.log(`Change at ${address}: was ${details.valueBefore}(${details.valueTypeBefore}),` - + ` now is ${details.valueAfter}(${details.valueTypeAfter})`); + // 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}`); }); } -'Excel.DataValidation#prompt:member': +'Excel.CommentReply#content: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/master/samples/excel/12-comment/comment-replies.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" - }; + 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!"; await context.sync(); }); -'Excel.DataValidation#rule:member': +'Excel.CommentReply#delete:member(1)': - >- // 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/master/samples/excel/12-comment/comment-replies.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Decision"); - const nameRange = - sheet.tables.getItem("NameOptionsTable").columns.getItem("Baby Name").getDataBodyRange(); + // 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(); + await context.sync(); + }); +'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 - // When you are developing, it is a good practice to - // clear the dataValidation object with each run of your code. - nameRange.dataValidation.clear(); + await Excel.run(async (context) => { + // Adds a reply to the first comment in this worksheet. + const sheet = context.workbook.worksheets.getItem("Comments"); + const comment = sheet.comments.getItemAt(0); + comment.replies.add("Add content to this worksheet."); + await context.sync(); + }); +'Excel.CommentRichContent#mentions:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/12-comment/comment-mentions.yaml - const nameSourceRange = context.workbook.worksheets.getItem("Names").getRange("A1:A3"); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Comments"); + const mention = { + email: "kakri@contoso.com", + id: 0, + name: "Kate Kristensen" + }; - let approvedListRule = { - list: { - inCellDropDown: true, - source: nameSourceRange - } + // 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?" }; - nameRange.dataValidation.rule = approvedListRule; + // 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.DataValidation#errorAlert:member': +'Excel.ConditionalCellValueRule#formula1: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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" - }; + 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.DataValidationRule#list:member': +'Excel.ConditionalCellValueRule#operator: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Decision"); - const nameRange = - sheet.tables.getItem("NameOptionsTable").columns.getItem("Baby Name").getDataBodyRange(); - - // When you are developing, it is a good practice to - // clear the dataValidation object with each run of your code. - nameRange.dataValidation.clear(); - - const nameSourceRange = context.workbook.worksheets.getItem("Names").getRange("A1:A3"); - - let approvedListRule = { - list: { - inCellDropDown: true, - source: nameSourceRange - } - }; - nameRange.dataValidation.rule = approvedListRule; + 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.DataValidationRule#wholeNumber:member': +'Excel.ConditionalFormat#cellValue: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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" - }; + 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.Range#getDirectPrecedents:member(1)': +'Excel.ConditionalFormat#colorScale: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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}:`); + 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; - // 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(); + await context.sync(); }); -'Excel.Range#workbookRangeAreas:member(1)': +'Excel.ConditionalFormat#custom: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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}:`); + 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"; - // 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(); + await context.sync(); }); -'Excel.WorkbookRangeAreas#areas:member': +'Excel.ConditionalFormat#dataBar: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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}:`); + 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; - // 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(); + await context.sync(); }); -'Excel.CustomPropertyCollection#add:member(1)': +'Excel.ConditionalFormat#getRange: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml await Excel.run(async (context) => { - // Get the key/value pair from the task pane. - const userKey = $("#key").text(); - const userValue = $("#value").text(); + const sheet = context.workbook.worksheets.getItem("Sample"); + const worksheetRange = sheet.getRange(); + worksheetRange.conditionalFormats.load("type"); - // Add the custom property. - const customDocProperties = context.workbook.properties.custom; - customDocProperties.add(userKey, userValue); + await context.sync(); - 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") + }); + }); - console.log(`Successfully set custom document property ${userKey}:${userValue}.`); + await context.sync(); + + if (cfRangePairs.length > 0) { + cfRangePairs.forEach(item => { + console.log(item.cf.type); + }); + } else { + console.log("No conditional formats applied."); + } }); -'Excel.DocumentProperties#custom:member': +'Excel.ConditionalFormat#iconSet: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml await Excel.run(async (context) => { - // Load the keys and values of all custom properties. - const customDocProperties = context.workbook.properties.custom; - customDocProperties.load(["key", "value"]); - await context.sync(); + 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; - // Log each custom property to the console. - // Note that your document may have more properties than those you have set using this snippet. - customDocProperties.items.forEach((property) => { - console.log(`${property.key}:${property.value}`); - }); + /* + 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 this method does below, 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.Worksheet#customProperties:member': +'Excel.ConditionalFormat#preset: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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(); + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B2:M5"); + const conditionalFormat = range.conditionalFormats + .add(Excel.ConditionalFormatType.presetCriteria); + conditionalFormat.preset.format.font.color = "white"; + conditionalFormat.preset.rule = { criterion: Excel.ConditionalFormatPresetCriterion.oneStdDevAboveAverage }; - // 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}`); - }); + await context.sync(); }); -'Excel.WorksheetCustomPropertyCollection#add:member(1)': +'Excel.ConditionalFormat#textComparison: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml await Excel.run(async (context) => { - // Get the key/value pair from the task pane. - const userKey = $("#key").text(); - const userValue = $("#value").text(); - - // Add the custom property. - const customWorksheetProperties = context.workbook.worksheets.getActiveWorksheet().customProperties; - customWorksheetProperties.add(userKey, userValue); - - await context.sync(); + 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" }; - console.log(`Successfully set custom worksheet property ${userKey}:${userValue}.`); + await context.sync(); }); -'Excel.Workbook#properties:member': +'Excel.ConditionalFormat#type: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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"; + const sheet = context.workbook.worksheets.getItem("Sample"); + const worksheetRange = sheet.getRange(); + worksheetRange.conditionalFormats.load("type"); - let docProperties = context.workbook.properties; + await context.sync(); - // 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; + 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(); - console.log("Set the following document properties: title, subject, keywords, comments, category, manager, company."); + if (cfRangePairs.length > 0) { + cfRangePairs.forEach(item => { + console.log(item.cf.type); + }); + } else { + console.log("No conditional formats applied."); + } }); -'Excel.Range#sort:member': +'Excel.ConditionalFormatCollection#add:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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"); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml - // Find the column header that provides the sort criteria. - const header = range.find(criteria, {}); - header.load("columnIndex"); - await context.sync(); + 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; - range.sort.apply( - [ - { - key: header.columnIndex, - sortOn: Excel.SortOn.value - } - ], - false /*matchCase*/, - true /*hasHeaders*/, - Excel.SortOrientation.rows - ); - await context.sync(); - }); - } -'Excel.Worksheet#onRowSorted:member': + await context.sync(); + }); +'Excel.ConditionalFormatCollection#clearAll:member(1)': - >- // 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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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(); + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange(); + range.conditionalFormats.clearAll(); - // 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(); - }); - }); + $(".conditional-formats").hide(); }); -'Excel.Worksheet#onColumnSorted:member': +'Excel.ConditionalFormatCollection#getItemAt:member(1)': - >- // 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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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(); + const sheet = context.workbook.worksheets.getItem("Sample"); + const worksheetRange = sheet.getRange(); + worksheetRange.conditionalFormats.load("type"); - // 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 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.Binding#onDataChanged:member': +'Excel.ConditionalFormatRule#formula: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const salesTable = sheet.tables.getItem("SalesTable"); - const salesByQuarterBinding = context.workbook.bindings.add(salesTable.getRange(), "Table", "SalesByQuarter"); - salesByQuarterBinding.onDataChanged.add(onSalesDataChanged); - - console.log("The data changed handler is registered."); + 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.CommentCollection#onAdded:member': +'Excel.ConditionalIconCriterion#formula: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml await Excel.run(async (context) => { - const comments = context.workbook.worksheets.getActiveWorksheet().comments; + 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; - // Register the onAdded, onChanged, and onDeleted comment event handlers. - comments.onAdded.add(commentAdded); - comments.onChanged.add(commentChanged); - comments.onDeleted.add(commentDeleted); + /* + 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. - await context.sync(); + 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 + 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", + } + ]; - console.log("Added event handlers for when comments are added, changed, or deleted."); + await context.sync(); }); +'Excel.ConditionalIconCriterion#operator:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-comment-event-handler.yaml - - async function commentAdded(event: Excel.CommentAddedEventArgs) { - 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); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml - // Load the added comment's data. - addedComment.load(["content", "authorName", "creationDate"]); + 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; - await context.sync(); + /* + 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. - // Print out the added comment's data. - console.log(`A comment was added:`); - console.log(` ID: ${event.commentDetails[0].commentId}`); - console.log(` Comment content:${addedComment.content}`); - console.log(` Comment author:${addedComment.authorName}`); - console.log(` Creation date:${addedComment.creationDate}`); - }); - } -'Excel.CommentCollection#onChanged:member': + 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 + 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(); + }); - >- // 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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml await Excel.run(async (context) => { - const comments = context.workbook.worksheets.getActiveWorksheet().comments; - - // Register the onAdded, onChanged, and onDeleted comment event handlers. - comments.onAdded.add(commentAdded); - comments.onChanged.add(commentChanged); - comments.onDeleted.add(commentDeleted); + 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(); - - console.log("Added event handlers for when comments are added, changed, or deleted."); }); +'Excel.ConditionalIconCriterion#type: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml - async function commentChanged(event: Excel.CommentChangedEventArgs) { - 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); + 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; - // Load the changed comment's data. - changedComment.load(["content", "authorName", "creationDate"]); + /* + 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. - await context.sync(); + 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 + 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", + } + ]; - // Print out the changed comment's data. - console.log(`A comment was changed:`); - console.log(` ID: ${event.commentDetails[0].commentId}`); - console.log(` Updated comment content: ${changedComment.content}`); - console.log(` Comment author: ${changedComment.authorName}`); - console.log(` Creation date: ${changedComment.creationDate}`); - }); - } -'Excel.CommentCollection#onDeleted:member': + await context.sync(); + }); +'Excel.ConditionalPresetCriteriaRule#criterion: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml await Excel.run(async (context) => { - const comments = context.workbook.worksheets.getActiveWorksheet().comments; - - // Register the onAdded, onChanged, and onDeleted comment event handlers. - comments.onAdded.add(commentAdded); - comments.onChanged.add(commentChanged); - comments.onDeleted.add(commentDeleted); + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B2:M5"); + const conditionalFormat = range.conditionalFormats + .add(Excel.ConditionalFormatType.presetCriteria); + conditionalFormat.preset.format.font.color = "white"; + conditionalFormat.preset.rule = { criterion: Excel.ConditionalFormatPresetCriterion.oneStdDevAboveAverage }; await context.sync(); - - console.log("Added event handlers for when comments are added, changed, or deleted."); }); +'Excel.ConditionalTextComparisonRule#text: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml - async function commentDeleted(event: Excel.CommentDeletedEventArgs) { - 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}`); - }); - } -'Excel.Runtime#enableEvents:member': + 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.CultureInfo#datetimeFormat: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/master/samples/excel/50-workbook/culture-info-date-time.yaml await Excel.run(async (context) => { - context.runtime.load("enableEvents"); - await context.sync(); + context.application.cultureInfo.datetimeFormat.load([ + "longDatePattern", + "shortDatePattern", + "dateSeparator", + "longTimePattern", + "timeSeparator" + ]); + await context.sync(); - // check if events are enabled and toggle accordingly - const eventBoolean = !context.runtime.enableEvents - context.runtime.enableEvents = eventBoolean; - if (eventBoolean) { - console.log("Events are currently on."); - } else { - console.log("Events are currently off."); - } + // Use the cultural settings API to retrieve the user's system date and time settings. + const systemLongDatePattern = context.application.cultureInfo.datetimeFormat.longDatePattern; + const systemShortDatePattern = context.application.cultureInfo.datetimeFormat.shortDatePattern; + const systemDateSeparator = context.application.cultureInfo.datetimeFormat.dateSeparator; + const systemLongTimePattern = context.application.cultureInfo.datetimeFormat.longTimePattern; + const systemTimeSeparator = context.application.cultureInfo.datetimeFormat.timeSeparator; - await context.sync(); + // Write the date and time settings in your table. + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const dateTimeData = sheet.getRange("A2:B6"); + dateTimeData.values = [ + ["Long date", systemLongDatePattern], + ["Short date", systemShortDatePattern], + ["Date separator", systemDateSeparator], + ["Long time format", systemLongTimePattern], + ["Time separator", systemTimeSeparator] + ]; + + sheet.tables + .getItemAt(0) + .getRange() + .format.autofitColumns(); + + await context.sync(); }); -'Excel.Table#onChanged:member': +'Excel.CustomConditionalFormat#format: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml await Excel.run(async (context) => { - let table = context.workbook.tables.getItemAt(0); - table.onChanged.add(onChange); + 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(); - console.log("A handler has been registered for the onChanged event"); }); -'Excel.Table#onSelectionChanged:member': +'Excel.CustomPropertyCollection#add:member(1)': - >- // 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/master/samples/excel/26-document/custom-properties.yaml await Excel.run(async (context) => { - let table = context.workbook.tables.getItemAt(0); - table.onSelectionChanged.add(onSelectionChange); + // Get the key/value pair from the task pane. + const userKey = $("#key").text(); + const userValue = $("#value").text(); - await context.sync(); - console.log("A handler has been registered for table onSelectionChanged event"); + // Add the custom property. + const customDocProperties = context.workbook.properties.custom; + customDocProperties.add(userKey, userValue); + + await context.sync(); + + console.log(`Successfully set custom document property ${userKey}:${userValue}.`); }); -'Excel.TableSelectionChangedEventArgs#address:member': +'Excel.CustomXmlPart#delete:member(1)': - >- // 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/master/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.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); - }); - } -'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 + await Excel.run(async (context) => { + const settings = context.workbook.settings; + const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); + await context.sync(); - async function onChange(event) { - await Excel.run(async (context) => { - let table = context.workbook.tables.getItem(event.tableId); - let worksheet = context.workbook.worksheets.getItem(event.worksheetId); - worksheet.load("name"); + if (xmlPartIDSetting.value) { + let customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); + const xmlBlob = customXmlPart.getXml(); + customXmlPart.delete(); + customXmlPart = context.workbook.customXmlParts.getItemOrNullObject(xmlPartIDSetting.value); await context.sync(); - console.log("Handler for table collection onChanged event has been triggered. Data changed address: " + event.address); - console.log("Table Id : " + event.tableId); - console.log("Worksheet Id : " + worksheet.name); - }); - } -'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 + if (customXmlPart.isNullObject) { + $("#display-xml").text(`The XML part with the id ${xmlPartIDSetting.value} has been deleted.`); - async function onChange(event) { - await Excel.run(async (context) => { - let table = context.workbook.tables.getItem(event.tableId); - let worksheet = context.workbook.worksheets.getItem(event.worksheetId); - worksheet.load("name"); + // 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); + } await context.sync(); - - console.log("Handler for table collection onChanged event has been triggered. Data changed address: " + event.address); - console.log("Table Id : " + event.tableId); - console.log("Worksheet Id : " + worksheet.name); - }); - } -'Excel.TableCollection#onChanged:member': + } + }); +'Excel.CustomXmlPart#getXml:member(1)': - >- // 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/master/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml await Excel.run(async (context) => { - let tables = context.workbook.tables; - tables.onChanged.add(onChange); + // 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(); - console.log("A handler has been registered for the table collection onChanged event"); - }); -'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 - await Excel.run(async (context) => { - const settings = context.workbook.settings; - settings.onSettingsChanged.add(onChangedSetting); + 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(); - console.log("Settings changed handler registered."); }); -'Excel.SettingCollection#onSettingsChanged:member': +'Excel.CustomXmlPart#id: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/master/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; - settings.onSettingsChanged.add(onChangedSetting); + // 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(); - console.log("Settings changed handler registered."); - }); -'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 - 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: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + const readableXml = addLineBreaksToXML(xmlBlob.value); + $("#display-xml").text(readableXml); - await Excel.run(async (context) => { - let sheets = context.workbook.worksheets; - sheets.onActivated.add(onActivate); + // Store the XML part's ID in a setting. + const settings = context.workbook.settings; + settings.add("ContosoReviewXmlPartId", customXmlPart.id); await context.sync(); - console.log("A handler has been registered for the OnActivate event."); }); -'Excel.WorksheetCollection#onAdded:member': +'Excel.CustomXmlPart#setXml: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/master/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml await Excel.run(async (context) => { - let sheet = context.workbook.worksheets; - sheet.onAdded.add(onWorksheetAdd); - + const settings = context.workbook.settings; + const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); 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/master/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml - await Excel.run(async (context) => { - let sheets = context.workbook.worksheets; - sheets.onDeactivated.add(onDeactivate); + if (xmlPartIDSetting.value) { + const customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); - await context.sync(); - console.log("A handler has been registered for the OnDeactivate event."); + // The setXml method does a whole-for-whole replacement + // of the entire XML. + customXmlPart.setXml("JohnHitomi"); + const xmlBlob = customXmlPart.getXml(); + await context.sync(); + + const readableXml = addLineBreaksToXML(xmlBlob.value); + $("#display-xml").text(readableXml); + await context.sync(); + } }); -'Excel.Worksheet#onChanged:member': +'Excel.CustomXmlPartCollection#add:member(1)': - >- // 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/master/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml await Excel.run(async (context) => { - let sheet = context.workbook.worksheets.getItem("Sample"); - sheet.onChanged.add(onChange); - 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(); - console.log("Added a worksheet-level data-changed event handler."); - }); -'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 + await context.sync(); - 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(); - }); - }); + const readableXml = addLineBreaksToXML(xmlBlob.value); + $("#display-xml").text(readableXml); - console.log("The worksheet click handler is registered."); + // Store the XML part's ID in a setting. + const settings = context.workbook.settings; + settings.add("ContosoReviewXmlPartId", customXmlPart.id); await context.sync(); }); -'Excel.WorksheetSingleClickedEventArgs#address:member': +'Excel.CustomXmlPartCollection#getItem:member(1)': - >- // 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/master/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.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(); - }); - }); + const settings = context.workbook.settings; + const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); + await context.sync(); - console.log("The worksheet click handler is registered."); + if (xmlPartIDSetting.value) { + const customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); - await context.sync(); + // The setXml method does a whole-for-whole replacement + // of the entire XML. + customXmlPart.setXml("JohnHitomi"); + const xmlBlob = customXmlPart.getXml(); + await context.sync(); + + const readableXml = addLineBreaksToXML(xmlBlob.value); + $("#display-xml").text(readableXml); + await context.sync(); + } }); -'Excel.NamedItem#delete:member(1)': +'Excel.CustomXmlPartCollection#getByNamespace: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/master/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 totalName = sheet.names.getItemOrNullObject("TotalAmount"); - totalName.load(); + $("#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 (totalName.value) { - totalName.delete(); + 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}`); - // Replace the named item (TotalAmount) with the actual formula for TotalAmount to avoid displaying #NAME in the cell. - sheet.getRange("D11").values = [["=SUM(ExpensesTable[AMOUNT])"]]; } else { - console.log("No named item created for the formula."); - } + console.log(`There are ${numberOfPartsInNamespace.value} XML parts with namespace ${contosoNamespace}. There should be exactly 1.`); + } await context.sync(); }); -'Excel.NamedItemCollection#add:member(1)': +'Excel.CustomXmlPartScopedCollection#getItemOrNullObject: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/master/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const headerRange = sheet.getRange("A1:D1"); + const settings = context.workbook.settings; + const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); + await context.sync(); - sheet.names.add("ExpensesHeader", headerRange); - const namedItems = sheet.names.load("name, type"); + if (xmlPartIDSetting.value) { + let customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); + const xmlBlob = customXmlPart.getXml(); + customXmlPart.delete(); + customXmlPart = context.workbook.customXmlParts.getItemOrNullObject(xmlPartIDSetting.value); - await context.sync(); + await context.sync(); + + if (customXmlPart.isNullObject) { + $("#display-xml").text(`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); + } + + await context.sync(); + } }); -'Excel.Range#group:member(1)': +'Excel.CustomXmlPartScopedCollection#getCount: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/master/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.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); + 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(); - // 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/master/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); + 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.Worksheet#showOutlineLevels:member(1)': +'Excel.CustomXmlPartScopedCollection#getOnlyItem: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/master/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml - Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); + 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(); - // This collapses the entire outline. - sheet.showOutlineLevels(1, 1); await context.sync(); - }); - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/outline.yaml - Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); + 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.`); + } - // This shows the top 3 outline levels; collapsing any additional sublevels. - sheet.showOutlineLevels(3, 3); await context.sync(); }); -'Excel.Application#suspendScreenUpdatingUntilNextSync:member(1)': +'Excel.DataBarConditionalFormat#barDirection:member': - >- // 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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml 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(); - } - - 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 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; await context.sync(); - - console.log(`Ending. Adding ${rowCount * columnCount} cells took ${Date.now() - startTime} milliseconds`); }); 'Excel.DataPivotHierarchy#showAs:member': - >- @@ -1782,35 +1876,6 @@ wholesaleDataHierarchy.showAs = wholesaleShowAs; await context.sync(); }); -'Excel.ShowAsRule#baseItem:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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 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"); - farmShowAs.baseItem = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm").items.getItem("A Farms"); - farmDataHierarchy.showAs = farmShowAs; - - let wholesaleShowAs = wholesaleDataHierarchy.showAs; - wholesaleShowAs.calculation = Excel.ShowAsCalculation.differenceFrom; - wholesaleShowAs.baseField = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm"); - wholesaleShowAs.baseItem = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm").items.getItem("A Farms"); - wholesaleDataHierarchy.showAs = wholesaleShowAs; - await context.sync(); - }); 'Excel.DataPivotHierarchy#name:member': - >- // Link to full sample: @@ -1825,265 +1890,523 @@ dataHierarchies.items[1].name = "Wholesale"; await context.sync(); }); -'Excel.PivotTable#columnHierarchies:member': +'Excel.DataValidation#prompt: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/master/samples/excel/22-data-validation/data-validation.yaml await Excel.run(async (context) => { - const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); + const sheet = context.workbook.worksheets.getItem("Decision"); + const rankingRange = sheet.tables.getItem("NameOptionsTable").columns.getItem("Ranking").getDataBodyRange(); - // check if the PivotTable already has a column - const column = pivotTable.columnHierarchies.getItemOrNullObject("Farm"); - column.load("id"); - await context.sync(); + // When you are developing, it is a good practice to + // clear the dataValidation object with each run of your code. + rankingRange.dataValidation.clear(); - if (column.isNullObject) { - // ading 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); - } + let greaterThanZeroRule = { + wholeNumber: { + formula1: 0, + operator: Excel.DataValidationOperator.greaterThan + } + }; + rankingRange.dataValidation.rule = greaterThanZeroRule; - await context.sync(); - }); -'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 + rankingRange.dataValidation.prompt = { + message: "Please enter a positive number.", + showPrompt: true, + title: "Positive numbers only." + }; - 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")); + rankingRange.dataValidation.errorAlert = { + message: "Sorry, only positive numbers are allowed", + showAlert: true, + style: "Stop", + title: "Negative Number Entered" + }; await context.sync(); }); -'Excel.PivotTable#delete:member(1)': +'Excel.DataValidation#rule: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/master/samples/excel/22-data-validation/data-validation.yaml await Excel.run(async (context) => { - context.workbook.worksheets.getItem("Pivot").pivotTables.getItem("Farm Sales").delete(); + const sheet = context.workbook.worksheets.getItem("Decision"); + const nameRange = + sheet.tables.getItem("NameOptionsTable").columns.getItem("Baby Name").getDataBodyRange(); + + // When you are developing, it is a good practice to + // clear the dataValidation object with each run of your code. + nameRange.dataValidation.clear(); + + const nameSourceRange = context.workbook.worksheets.getItem("Names").getRange("A1:A3"); + + let approvedListRule = { + list: { + inCellDropDown: true, + source: nameSourceRange + } + }; + nameRange.dataValidation.rule = approvedListRule; await context.sync(); }); -'Excel.PivotTable#layout:member': +'Excel.DataValidation#errorAlert: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/master/samples/excel/22-data-validation/data-validation.yaml await Excel.run(async (context) => { - const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); - pivotTable.layout.load("layoutType"); - await context.sync(); + 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" + }; - // 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.PivotTableCollection#add:member(1)': +'Excel.DataValidationRule#list: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/master/samples/excel/22-data-validation/data-validation.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"); - context.workbook.worksheets.getItem("Pivot").pivotTables.add("Farm Sales", rangeToAnalyze, rangeToPlacePivot); + const sheet = context.workbook.worksheets.getItem("Decision"); + const nameRange = + sheet.tables.getItem("NameOptionsTable").columns.getItem("Baby Name").getDataBodyRange(); + + // When you are developing, it is a good practice to + // clear the dataValidation object with each run of your code. + nameRange.dataValidation.clear(); + + const nameSourceRange = context.workbook.worksheets.getItem("Names").getRange("A1:A3"); + + let approvedListRule = { + list: { + inCellDropDown: true, + source: nameSourceRange + } + }; + nameRange.dataValidation.rule = approvedListRule; await context.sync(); }); -'Excel.PivotLayout#getDataBodyRange:member(1)': +'Excel.DataValidationRule#wholeNumber: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/master/samples/excel/22-data-validation/data-validation.yaml await Excel.run(async (context) => { - const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); + const sheet = context.workbook.worksheets.getItem("Decision"); + const rankingRange = sheet.tables.getItem("NameOptionsTable").columns.getItem("Ranking").getDataBodyRange(); - // the layout controls the ranges used by the PivotTable - const range = pivotTable.layout.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" + }; - // 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.PivotTable#filterHierarchies:member': +'Excel.DocumentProperties#custom: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/master/samples/excel/26-document/custom-properties.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) => { + // Load the keys and values of all custom properties. + const customDocProperties = context.workbook.properties.custom; + customDocProperties.load(["key", "value"]); + 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.Range#getPivotTables:member(1)': + // Log each custom property to the console. + // Note that your document may have more properties than those you have set using this snippet. + customDocProperties.items.forEach((property) => { + console.log(`${property.key}:${property.value}`); + }); + }); +'Excel.IconSetConditionalFormat#criteria: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml await Excel.run(async (context) => { - const activeRange = context.workbook.getSelectedRange(); + 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; - // 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); + /* + 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. - partiallyContainedPivotTables.load("name"); - fullyContainedPivotTables.load("name"); - await context.sync(); + 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 + 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", + } + ]; - // 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}`); - }); + await context.sync(); }); -'Excel.Workbook#pivotTables:member': +'Excel.IconSetConditionalFormat#style: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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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(); + 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; - // Display the names in the console. - console.log("PivotTables in the workbook:") - pivotTables.items.forEach((pivotTable) => { - console.log(`\t${pivotTable.name}`); - }); + /* + 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 this method does below, 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.Worksheet#pivotTables:member': +'Excel.Image#format: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/master/samples/excel/44-shape/shape-images.yaml await Excel.run(async (context) => { - // Get the names of all the PivotTables in the current worksheet. - const pivotTables = context.workbook.worksheets.getActiveWorksheet().pivotTables; - pivotTables.load("name"); - await context.sync(); + const sheet = context.workbook.worksheets.getItem("Shapes"); + const image = sheet.shapes.getItem("Image").image; + image.load("format"); + await context.sync(); - // Display the names in the console. - console.log("PivotTables in the current worksheet:") - pivotTables.items.forEach((pivotTable) => { - console.log(`\t${pivotTable.name}`); - }); + console.log("The image's format is: " + image.format); + await context.sync(); }); -'Excel.Slicer#style:member': +'Excel.Line#connectBeginShape: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/master/samples/excel/44-shape/shape-lines.yaml await Excel.run(async (context) => { - const slicer = context.workbook.slicers.getItem("Fruit Slicer"); - slicer.style = "SlicerStyleLight6"; + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const line = shapes.getItem("StraightLine").line; + line.connectBeginShape(shapes.getItem("Left"), 2); + line.connectEndShape(shapes.getItem("Right"), 0); await context.sync(); }); -'Excel.Slicer#selectItems:member(1)': +'Excel.Line#connectEndShape: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/master/samples/excel/44-shape/shape-lines.yaml await Excel.run(async (context) => { - const slicer = context.workbook.slicers.getItem("Fruit Slicer"); - slicer.selectItems(["Lemon", "Lime", "Orange"]); + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const line = shapes.getItem("StraightLine").line; + line.connectBeginShape(shapes.getItem("Left"), 2); + line.connectEndShape(shapes.getItem("Right"), 0); await context.sync(); }); -'Excel.Slicer#clearFilters:member(1)': +'Excel.Line#disconnectBeginShape: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/master/samples/excel/44-shape/shape-lines.yaml await Excel.run(async (context) => { - const slicer = context.workbook.slicers.getItem("Fruit Slicer"); - slicer.clearFilters(); + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const line = shapes.getItem("StraightLine").line; + line.disconnectBeginShape(); + line.disconnectEndShape(); await context.sync(); }); -'Excel.Slicer#delete:member(1)': +'Excel.Line#disconnectEndShape: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/master/samples/excel/44-shape/shape-lines.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - sheet.slicers.getItemAt(0).delete(); + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const line = shapes.getItem("StraightLine").line; + line.disconnectBeginShape(); + line.disconnectEndShape(); await context.sync(); }); -'Excel.SlicerCollection#add:member(1)': +'Excel.NamedItem#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/master/samples/excel/34-named-item/create-and-remove-named-item.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.getItem("Sample"); + const totalName = sheet.names.getItemOrNullObject("TotalAmount"); + totalName.load(); + await context.sync(); + + if (totalName.value) { + totalName.delete(); + + // Replace the named item (TotalAmount) with the actual formula for TotalAmount to avoid displaying #NAME in the cell. + sheet.getRange("D11").values = [["=SUM(ExpensesTable[AMOUNT])"]]; + } else { + console.log("No named item created for the formula."); + } + await context.sync(); }); -'Excel.SlicerCollection#getItem:member(1)': +'Excel.NamedItem#formula: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/master/samples/excel/34-named-item/update-named-item.yaml await Excel.run(async (context) => { - const slicer = context.workbook.slicers.getItem("Fruit Slicer"); - slicer.caption = "Fruit Types"; - slicer.left = 395; - slicer.top = 15; - slicer.height = 135; - slicer.width = 150; + const sheet = context.workbook.worksheets.getItem("Sample"); + + // Get the named item + const myNamedItem = sheet.names.getItemOrNullObject("MyRange"); + myNamedItem.load("name, formula"); await context.sync(); + + if (myNamedItem.isNullObject) { + console.log(`There is no named item. Create it with "Add named item for a range" first.`); + } else { + // Update named item to point to the second range + myNamedItem.formula = "=Sample!$B$10:$D$14"; + sheet.getRange("B10:D14").select(); + await context.sync(); + + console.log(`Just updated the named item "${myNamedItem.name}" -- it's now located here: ${myNamedItem.formula}`); + } }); -'Excel.Worksheet#slicers:member': +'Excel.NamedItemCollection#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/master/samples/excel/34-named-item/create-and-remove-named-item.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.getItem("Sample"); + const headerRange = sheet.getRange("A1:D1"); + + sheet.names.add("ExpensesHeader", headerRange); + const namedItems = sheet.names.load("name, type"); + + await context.sync(); + }); +'Excel.NumberFormatInfo#numberDecimalSeparator:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/culture-info.yaml + + // This will convert a number like "14,37" to "14.37" + + // (assuming the system decimal separator is "."). + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + const decimalSource = sheet.getRange("B2"); + + decimalSource.load("values"); + + context.application.cultureInfo.numberFormat.load("numberDecimalSeparator"); + + await context.sync(); + + + const systemDecimalSeparator = + context.application.cultureInfo.numberFormat.numberDecimalSeparator; + + const oldDecimalString: string = decimalSource.values[0][0]; + + + // This assumes the input column is standardized to use "," as the decimal + separator. + + const newDecimalString = oldDecimalString.replace(",", + systemDecimalSeparator); + + + const resultRange = sheet.getRange("C2"); + + resultRange.values = [[newDecimalString]]; + + resultRange.format.autofitColumns(); + + await context.sync(); + }); +'Excel.NumberFormatInfo#numberGroupSeparator:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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 ","). + const sheet = context.workbook.worksheets.getItem("Sample"); + const bigNumberSource = sheet.getRange("B3"); + bigNumberSource.load("values"); + context.application.cultureInfo.numberFormat.load("numberGroupSeparator"); + await context.sync(); + + const systemThousandsSeparator = context.application.cultureInfo.numberFormat.numberGroupSeparator; + const oldBigNumberString: string = bigNumberSource.values[0][0]; + + // This assumes the input column is standardized to use "-" as the number group separator. + const newBigNumberString = oldBigNumberString.replace(/-/g, systemThousandsSeparator); + + const resultRange = sheet.getRange("C3"); + resultRange.values = [[newBigNumberString]]; + resultRange.format.autofitColumns(); + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.horizontalPageBreaks.add("A21:E21"); + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.pageLayout.centerHorizontally = true; + farmSheet.pageLayout.centerVertically = true; + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.pageLayout.centerHorizontally = true; + farmSheet.pageLayout.centerVertically = true; + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.pageLayout.orientation = Excel.PageOrientation.landscape; + await context.sync(); + }); +'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 + + 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/master/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#zoom:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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 }; await context.sync(); }); 'Excel.PivotField#clearAllFilters:member(1)': @@ -2244,63 +2567,304 @@ await context.sync(); }); -'Excel.Range#getSpecialCells:member(1)': +'Excel.PivotLayout#getDataBodyRange: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/master/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml await Excel.run(async (context) => { + const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); - 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"; + // the layout controls the ranges used by the PivotTable + const range = pivotTable.layout.getDataBodyRange(); - return context.sync(); + // 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.RangeAreas#format:member': +'Excel.PivotTable#columnHierarchies: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/master/samples/excel/38-pivottable/pivottable-create-and-modify.yaml await Excel.run(async (context) => { + const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const usedRange = sheet.getUsedRange(); + // check if the PivotTable already has a column + const column = pivotTable.columnHierarchies.getItemOrNullObject("Farm"); + column.load("id"); + await context.sync(); - // Find the ranges with formulas. - const formulaRanges = usedRange.getSpecialCells("Formulas"); - formulaRanges.format.fill.color = "lightgreen"; + if (column.isNullObject) { + // ading 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.Workbook#getSelectedRanges:member(1)': +'Excel.PivotTable#dataHierarchies: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/master/samples/excel/38-pivottable/pivottable-create-and-modify.yaml await Excel.run(async (context) => { - - const selectedRanges = context.workbook.getSelectedRanges(); - selectedRanges.format.fill.color = "lightblue"; + 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.Worksheet#getRanges:member(1)': + }); +'Excel.PivotTable#delete: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/master/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#layout:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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"); + 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#filterHierarchies:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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"); + context.workbook.worksheets.getItem("Pivot").pivotTables.add("Farm Sales", rangeToAnalyze, rangeToPlacePivot); + + await context.sync(); + }); +'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 + + 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.presetCriteria); + conditionalFormat.preset.format.font.color = "white"; + conditionalFormat.preset.rule = { criterion: Excel.ConditionalFormatPresetCriterion.oneStdDevAboveAverage }; + + await context.sync(); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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#getDirectPrecedents:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/direct-precedents.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}`); + } + await context.sync(); + }); +'Excel.Range#workbookRangeAreas:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/direct-precedents.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}`); + } + await context.sync(); + }); +'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 + + 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/master/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"; + + // 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/master/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/master/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/master/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: @@ -2315,7 +2879,7 @@ sumCell.format.autofitColumns(); await context.sync(); }); -'Excel.CellPropertiesFill#color:member': +'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 @@ -2391,7 +2955,7 @@ sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); -'Excel.CellPropertiesFillLoadOptions#color:member': +'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 @@ -2399,1033 +2963,25 @@ 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.CellPropertiesFont#color:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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.CellPropertiesFontLoadOptions#color:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/master/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/master/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/master/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.SettableCellProperties#style:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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.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 - - 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.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 - - 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.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 - - 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.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 - - 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.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 - - 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#cellValue:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/master/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.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 - - 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.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 - - 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; - - await context.sync(); - }); -'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 - - 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: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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 this method does below, 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.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 - - 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.presetCriteria); - conditionalFormat.preset.format.font.color = "white"; - conditionalFormat.preset.rule = { criterion: Excel.ConditionalFormatPresetCriterion.oneStdDevAboveAverage }; - - await context.sync(); - }); -'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 - - 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.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 - - 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.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 - - 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.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 - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const range = sheet.getRange(); - range.conditionalFormats.clearAll(); - - await context.sync(); - - $(".conditional-formats").hide(); - }); -'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 - - 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.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 - - 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.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 - - 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 this method does below, 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.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 - - 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 this method does below, 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(); - }); - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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 this method does below, 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: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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.presetCriteria); - conditionalFormat.preset.format.font.color = "white"; - conditionalFormat.preset.rule = { criterion: Excel.ConditionalFormatPresetCriterion.oneStdDevAboveAverage }; - - await context.sync(); - }); -'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 - - 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.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 - - 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.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 - - 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; - - await context.sync(); - }); -'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 - - 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 this method does below, 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#style:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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 this method does below, 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.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 - - 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.presetCriteria); - conditionalFormat.preset.format.font.color = "white"; - conditionalFormat.preset.rule = { criterion: Excel.ConditionalFormatPresetCriterion.oneStdDevAboveAverage }; - - await context.sync(); - }); - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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.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 - - 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.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 - - 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" }; + // 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)': - >- @@ -3555,122 +3111,6 @@ await context.sync(); }); -'Excel.RangeHyperlink#address:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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.RangeHyperlink#documentReference:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-hyperlink.yaml - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Orders"); - - let productsRange = sheet.getRange("A9:A11"); - productsRange.load("values"); - - await context.sync(); - - // Create a hyperlink to a location within the workbook - // for each product name in the second 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: "Navigate to the '" + cellText + "' worksheet", - documentReference: cellText + "!A1" - } - cellRange.hyperlink = hyperlink; - } - - await context.sync(); - }); -'Excel.RangeHyperlink#screenTip:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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.RangeHyperlink#textToDisplay:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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: @@ -3805,22 +3245,6 @@ console.log(deleteResult.removed + " entries with duplicate names removed."); console.log(deleteResult.uniqueRemaining + " entries with unique names remain in the range."); }); -'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 - - 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: @@ -3837,243 +3261,341 @@ await context.sync(); }); -'Excel.Style#delete:member(1)': +'Excel.Range#getUsedRangeOrNullObject: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/master/samples/excel/42-range/used-range.yaml await Excel.run(async (context) => { - let style = context.workbook.styles.getItem("Diagonal Orientation Style"); + const sheet = context.workbook.worksheets.getItem("Sample"); + const salesTable = sheet.tables.getItem("SalesTable"); + const dataRange = salesTable.getDataBodyRange(); - // Delete the diagonal orientation style from the style collection. - // Styles are in the Home tab ribbon. - style.delete(); + // 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("Successfully deleted the diagonal orientation style from the Home tab ribbon."); + 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.Style#font:member': +'Excel.Range#set: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/master/samples/excel/90-scenarios/multiple-property-set.yaml await Excel.run(async (context) => { - let style = context.workbook.styles.getItem("Normal"); - style.font.load("bold, color, italic, name, size"); - style.fill.load("color"); + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B2:E2"); + range.set({ + format: { + fill: { + color: "#4472C4" + }, + font: { + name: "Verdana", + color: "white" + } + } + }) + range.format.autofitColumns(); await context.sync(); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/90-scenarios/multiple-property-set.yaml - console.log("Bold: " + style.font.bold); - console.log("Font color: " + style.font.color); - console.log("Italic: " + style.font.italic); - console.log("Name: " + style.font.name); - console.log("Size: " + style.font.size); - console.log("Fill color: " + style.fill.color); + 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.Style#horizontalAlignment:member': +'Excel.RangeAreas#format: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/master/samples/excel/42-range/range-areas.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"; + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const usedRange = sheet.getUsedRange(); + + // Find the ranges with formulas. + const formulaRanges = usedRange.getSpecialCells("Formulas"); + formulaRanges.format.fill.color = "lightgreen"; + + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B2:E2"); + + // Set textOrientation to either an integer between -90 and 90 + // or to 180 for vertically-oriented text. + range.format.textOrientation = 90; await context.sync(); }); -'Excel.Style#load:member(1)': +'Excel.RangeHyperlink#address: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/master/samples/excel/42-range/range-hyperlink.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"); + const sheet = context.workbook.worksheets.getItem("Orders"); + + let productsRange = sheet.getRange("A3:A5"); + productsRange.load("values"); 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); + // 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.StyleCollection#add:member(1)': +'Excel.RangeHyperlink#documentReference: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/master/samples/excel/42-range/range-hyperlink.yaml await Excel.run(async (context) => { - let styles = context.workbook.styles; + const sheet = context.workbook.worksheets.getItem("Orders"); + + let productsRange = sheet.getRange("A9:A11"); + productsRange.load("values"); - // 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."); + // Create a hyperlink to a location within the workbook + // for each product name in the second 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: "Navigate to the '" + cellText + "' worksheet", + documentReference: cellText + "!A1" + } + cellRange.hyperlink = hyperlink; + } + + await context.sync(); }); -'Excel.StyleCollection#getItem:member(1)': +'Excel.RangeHyperlink#screenTip: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/master/samples/excel/42-range/range-hyperlink.yaml await Excel.run(async (context) => { - let styles = context.workbook.styles; + const sheet = context.workbook.worksheets.getItem("Orders"); + + let productsRange = sheet.getRange("A3:A5"); + productsRange.load("values"); - // 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."); + // 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.Workbook#styles:member': +'Excel.RangeHyperlink#textToDisplay: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/master/samples/excel/42-range/range-hyperlink.yaml await Excel.run(async (context) => { - let styles = context.workbook.styles; + const sheet = context.workbook.worksheets.getItem("Orders"); + + let productsRange = sheet.getRange("A3:A5"); + productsRange.load("values"); - // 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."); + // 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.RangeFormat#textOrientation:member': +'Excel.RemoveDuplicatesResult#uniqueRemaining: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/master/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:E2"); - - // Set textOrientation to either an integer between -90 and 90 - // or to 180 for vertically-oriented text. - range.format.textOrientation = 90; + 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)': +'Excel.Runtime#enableEvents:member': - >- // 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/master/samples/excel/30-events/events-disable-events.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. + context.runtime.load("enableEvents"); 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."); + // check if events are enabled and toggle accordingly + const eventBoolean = !context.runtime.enableEvents + context.runtime.enableEvents = eventBoolean; + if (eventBoolean) { + console.log("Events are currently on."); } 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"; + console.log("Events are currently off."); } await context.sync(); }); -'Excel.Range#set:member(1)': +'Excel.SettableCellProperties#style:member': - >- // 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/master/samples/excel/42-range/cell-properties.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + const sheet = context.workbook.worksheets.getActiveWorksheet(); - const range = sheet.getRange("B2:E2"); - range.set({ + // 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: "#4472C4" + color: "Blue" }, font: { - name: "Verdana", - color: "white" + 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 + } } } - }) - range.format.autofitColumns(); - await context.sync(); - }); - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/90-scenarios/multiple-property-set.yaml + }; - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("A1:E5"); - const sourceRange = sheet.getRange("B2:E2"); - sourceRange.load("format/fill/color, format/font/name, format/font/color"); - await context.sync(); + // 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] + ]); - // Set properties based on the loaded and synced - // source range. - const targetRange = sheet.getRange("B7:E7"); - targetRange.set(sourceRange); - targetRange.format.autofitColumns(); + sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); 'Excel.Setting#delete:member(1)': @@ -4097,6 +3619,30 @@ await context.sync(); }); +'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 + + 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/master/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: @@ -4167,103 +3713,150 @@ shape.fill.clear(); await context.sync(); }); -'Excel.ShapeCollection#addGeometricShape:member(1)': +'Excel.Shape#group: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/master/samples/excel/44-shape/shape-groups.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; + + const shapeGroup = sheet.shapes.getItem("Group").group; + shapeGroup.ungroup(); + console.log("Shapes ungrouped"); + await context.sync(); }); -'Excel.Shape#group:member': +'Excel.Shape#getAsImage: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/master/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"); + const result = shape.getAsImage(Excel.PictureFormat.png); + await context.sync(); - const shapeGroup = sheet.shapes.getItem("Group").group; - shapeGroup.ungroup(); - console.log("Shapes ungrouped"); + 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)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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.ShapeCollection#addGroup:member(1)': +'Excel.Shape#line: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/master/samples/excel/44-shape/shape-lines.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 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; - const shapeGroup = sheet.shapes.addGroup([square, pentagon, octagon]); - shapeGroup.name = "Group"; - console.log("Shapes grouped"); + line.endArrowheadLength = Excel.ArrowheadLength.long; + line.endArrowheadWidth = Excel.ArrowheadWidth.wide; + line.endArrowheadStyle = Excel.ArrowheadStyle.triangle; await context.sync(); }); -'Excel.ShapeGroup#ungroup:member(1)': +'Excel.Shape#incrementLeft: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/master/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); + await context.sync(); + }); +'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 - const shapeGroup = sheet.shapes.getItem("Group").group; - shapeGroup.ungroup(); - console.log("Shapes ungrouped"); - + 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.Image#format:member': +'Excel.Shape#scaleHeight: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/master/samples/excel/44-shape/shape-move-and-order.yaml await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); - const image = sheet.shapes.getItem("Image").image; - image.load("format"); + const shape = sheet.shapes.getItem("Octagon") + shape.lockAspectRatio = true; + 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/master/samples/excel/44-shape/shape-move-and-order.yaml - console.log("The image's format is: " + image.format); + 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#getAsImage:member(1)': +'Excel.Shape#setZOrder: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/master/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("Octagon") + shape.setZOrder(Excel.ShapeZOrder.sendBackward); await context.sync(); + }); +'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 - const imageString = result.value; - // Your add-in would save this string as a .png file. - console.log("The image's base64-encoded string: " + imageString); + 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.Shape#incrementRotation:member(1)': +'Excel.ShapeCollection#addGroup: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/master/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 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]); + shapeGroup.name = "Group"; + console.log("Shapes grouped"); + await context.sync(); }); 'Excel.ShapeCollection#addImage:member(1)': @@ -4290,298 +3883,484 @@ // Read in the image file as a data URL. - reader.readAsDataURL(myFile.files[0]); -'Excel.Line#connectBeginShape:member(1)': + reader.readAsDataURL(myFile.files[0]); +'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 + + 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.ShapeCollection#addTextBox:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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"); + textbox.left = 100; + textbox.top = 100; + textbox.height = 20; + textbox.width = 175; + textbox.name = "Textbox"; + await context.sync(); + }); +'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 + + 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.ShowAsRule#baseItem:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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 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"); + farmShowAs.baseItem = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm").items.getItem("A Farms"); + farmDataHierarchy.showAs = farmShowAs; + + let wholesaleShowAs = wholesaleDataHierarchy.showAs; + wholesaleShowAs.calculation = Excel.ShowAsCalculation.differenceFrom; + wholesaleShowAs.baseField = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm"); + wholesaleShowAs.baseItem = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm").items.getItem("A Farms"); + wholesaleDataHierarchy.showAs = wholesaleShowAs; + await context.sync(); + }); +'Excel.Slicer#style: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/master/samples/excel/38-pivottable/pivottable-slicer.yaml await Excel.run(async (context) => { - const shapes = context.workbook.worksheets.getItem("Shapes").shapes; - const line = shapes.getItem("StraightLine").line; - line.connectBeginShape(shapes.getItem("Left"), 2); - line.connectEndShape(shapes.getItem("Right"), 0); + const slicer = context.workbook.slicers.getItem("Fruit Slicer"); + slicer.style = "SlicerStyleLight6"; await context.sync(); }); -'Excel.Line#connectEndShape:member(1)': +'Excel.Slicer#selectItems: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/master/samples/excel/38-pivottable/pivottable-slicer.yaml await Excel.run(async (context) => { - const shapes = context.workbook.worksheets.getItem("Shapes").shapes; - const line = shapes.getItem("StraightLine").line; - line.connectBeginShape(shapes.getItem("Left"), 2); - line.connectEndShape(shapes.getItem("Right"), 0); + const slicer = context.workbook.slicers.getItem("Fruit Slicer"); + slicer.selectItems(["Lemon", "Lime", "Orange"]); await context.sync(); }); -'Excel.Line#disconnectBeginShape:member(1)': +'Excel.Slicer#clearFilters: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/master/samples/excel/38-pivottable/pivottable-slicer.yaml await Excel.run(async (context) => { - const shapes = context.workbook.worksheets.getItem("Shapes").shapes; - const line = shapes.getItem("StraightLine").line; - line.disconnectBeginShape(); - line.disconnectEndShape(); + const slicer = context.workbook.slicers.getItem("Fruit Slicer"); + slicer.clearFilters(); await context.sync(); }); -'Excel.Line#disconnectEndShape:member(1)': +'Excel.Slicer#delete: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/master/samples/excel/38-pivottable/pivottable-slicer.yaml await Excel.run(async (context) => { - const shapes = context.workbook.worksheets.getItem("Shapes").shapes; - const line = shapes.getItem("StraightLine").line; - line.disconnectBeginShape(); - line.disconnectEndShape(); + const sheet = context.workbook.worksheets.getActiveWorksheet(); + sheet.slicers.getItemAt(0).delete(); await context.sync(); }); -'Excel.Shape#line:member': +'Excel.SlicerCollection#add: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/master/samples/excel/38-pivottable/pivottable-slicer.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 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.SlicerCollection#getItem:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-slicer.yaml + await Excel.run(async (context) => { + const slicer = context.workbook.slicers.getItem("Fruit Slicer"); + slicer.caption = "Fruit Types"; + slicer.left = 395; + slicer.top = 15; + slicer.height = 135; + slicer.width = 150; await context.sync(); }); -'Excel.ShapeCollection#addLine:member(1)': +'Excel.Style#delete: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/master/samples/excel/42-range/style.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"; + let style = context.workbook.styles.getItem("Diagonal Orientation Style"); + + // Delete the diagonal orientation style from the style collection. + // Styles are in the Home tab ribbon. + style.delete(); + await context.sync(); + + console.log("Successfully deleted the diagonal orientation style from the Home tab ribbon."); }); -'Excel.Shape#incrementLeft:member(1)': +'Excel.Style#font: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/master/samples/excel/42-range/style.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.getItem("Square") - shape.incrementLeft(-25); + let style = context.workbook.styles.getItem("Normal"); + style.font.load("bold, color, italic, name, size"); + style.fill.load("color"); + await context.sync(); + + console.log("Bold: " + style.font.bold); + console.log("Font color: " + style.font.color); + console.log("Italic: " + style.font.italic); + console.log("Name: " + style.font.name); + console.log("Size: " + style.font.size); + console.log("Fill color: " + style.fill.color); }); -'Excel.Shape#incrementTop:member(1)': +'Excel.Style#horizontalAlignment: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/master/samples/excel/42-range/style.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.getItem("Pentagon") - shape.incrementTop(25); + 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.Shape#scaleHeight:member(1)': +'Excel.Style#load: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/master/samples/excel/42-range/style.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); + 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.Shape#lockAspectRatio:member': +'Excel.StyleCollection#add: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/master/samples/excel/42-range/style.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); + 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."); }); -'Excel.Shape#setZOrder:member(1)': +'Excel.StyleCollection#getItem: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/master/samples/excel/42-range/style.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.getItem("Octagon") - shape.setZOrder(Excel.ShapeZOrder.sendBackward); + 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."); }); -'Excel.ShapeCollection#addTextBox:member(1)': +'Excel.Table#onChanged:member': - >- // 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/master/samples/excel/30-events/events-table-changed.yaml await Excel.run(async (context) => { - const shapes = context.workbook.worksheets.getItem("Shapes").shapes; - const textbox = shapes.addTextBox("A box with text"); - textbox.left = 100; - textbox.top = 100; - textbox.height = 20; - textbox.width = 175; - textbox.name = "Textbox"; + let table = context.workbook.tables.getItemAt(0); + table.onChanged.add(onChange); + await context.sync(); + console.log("A handler has been registered for the onChanged event"); }); -'Excel.TextFrame#deleteText:member(1)': +'Excel.Table#onSelectionChanged:member': - >- // 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/master/samples/excel/30-events/events-table-changed.yaml await Excel.run(async (context) => { - const shapes = context.workbook.worksheets.getItem("Shapes").shapes; - const textbox = shapes.getItem("Textbox"); - textbox.textFrame.deleteText(); + let table = context.workbook.tables.getItemAt(0); + table.onSelectionChanged.add(onSelectionChange); + await context.sync(); + console.log("A handler has been registered for table onSelectionChanged event"); }); -'Excel.NamedItem#formula:member': +'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 + + async function onTableChanged(eventArgs: Excel.TableChangedEventArgs) { + await Excel.run(async (context) => { + const details = eventArgs.details; + const address = eventArgs.address; + + console.log(`Change at ${address}: was ${details.valueBefore}(${details.valueTypeBefore}),` + + ` now is ${details.valueAfter}(${details.valueTypeAfter})`); + }); + } +'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 + + async function onChange(event) { + await Excel.run(async (context) => { + let table = context.workbook.tables.getItem(event.tableId); + let worksheet = context.workbook.worksheets.getItem(event.worksheetId); + worksheet.load("name"); + + await context.sync(); + + console.log("Handler for table collection onChanged event has been triggered. Data changed address: " + event.address); + console.log("Table Id : " + event.tableId); + console.log("Worksheet Id : " + worksheet.name); + }); + } +'Excel.TableChangedEventArgs#worksheetId:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/34-named-item/update-named-item.yaml - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-tablecollection-changed.yaml - // Get the named item - const myNamedItem = sheet.names.getItemOrNullObject("MyRange"); - myNamedItem.load("name, formula"); - await context.sync(); + async function onChange(event) { + await Excel.run(async (context) => { + let table = context.workbook.tables.getItem(event.tableId); + let worksheet = context.workbook.worksheets.getItem(event.worksheetId); + worksheet.load("name"); - if (myNamedItem.isNullObject) { - console.log(`There is no named item. Create it with "Add named item for a range" first.`); - } else { - // Update named item to point to the second range - myNamedItem.formula = "=Sample!$B$10:$D$14"; - sheet.getRange("B10:D14").select(); await context.sync(); - console.log(`Just updated the named item "${myNamedItem.name}" -- it's now located here: ${myNamedItem.formula}`); - } - }); -'Excel.WorkbookProtection#protect:member(1)': + console.log("Handler for table collection onChanged event has been triggered. Data changed address: " + event.address); + console.log("Table Id : " + event.tableId); + console.log("Worksheet Id : " + worksheet.name); + }); + } +'Excel.TableCollection#onChanged:member': - >- // 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/master/samples/excel/30-events/events-tablecollection-changed.yaml await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.load("protection/protected"); + let tables = context.workbook.tables; + tables.onChanged.add(onChange); await context.sync(); - - if (!workbook.protection.protected) { - workbook.protection.protect(); - } + console.log("A handler has been registered for the table collection onChanged event"); }); +'Excel.TableSelectionChangedEventArgs#address:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/data-protection.yaml - - let password = await passwordHandler(); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-table-changed.yaml - passwordHelper(password); + 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); + }); + } +'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 await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.load("protection/protected"); + 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(); - - if (!workbook.protection.protected) { - workbook.protection.protect(password); - } }); -'Excel.WorkbookProtection#unprotect:member(1)': +'Excel.TextConditionalFormat#rule:member': - >- // 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/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.protection.unprotect(); + 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.TextFrame#deleteText:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/data-protection.yaml - - let password = await passwordHandler(); - - passwordHelper(password); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-textboxes.yaml await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.protection.unprotect(password); + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const textbox = shapes.getItem("Textbox"); + textbox.textFrame.deleteText(); + await context.sync(); }); -'Excel.WorksheetProtection#protect:member(1)': +'Excel.Workbook#properties:member': - >- // 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/master/samples/excel/26-document/properties.yaml await Excel.run(async (context) => { - let activeSheet = context.workbook.worksheets.getActiveWorksheet(); - activeSheet.load("protection/protected"); + 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(); - if (!activeSheet.protection.protected) { - activeSheet.protection.protect(); - } + console.log("Set the following document properties: title, subject, keywords, comments, category, manager, company."); }); +'Excel.Workbook#pivotTables:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/data-protection.yaml - - let password = await passwordHandler(); - - passwordHelper(password); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-get-pivottables.yaml await Excel.run(async (context) => { - let activeSheet = context.workbook.worksheets.getActiveWorksheet(); - activeSheet.load("protection/protected"); - - await context.sync(); + // Get the names of all the PivotTables in the workbook. + const pivotTables = context.workbook.pivotTables; + pivotTables.load("name"); + await context.sync(); - if (!activeSheet.protection.protected) { - activeSheet.protection.protect(null, password); - } + // Display the names in the console. + console.log("PivotTables in the workbook:") + pivotTables.items.forEach((pivotTable) => { + console.log(`\t${pivotTable.name}`); + }); }); -'Excel.WorksheetProtection#unprotect:member(1)': +'Excel.Workbook#getSelectedRanges: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/master/samples/excel/42-range/range-areas.yaml await Excel.run(async (context) => { - let activeSheet = context.workbook.worksheets.getActiveWorksheet(); - activeSheet.protection.unprotect(); - }); + + 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/master/samples/excel/50-workbook/data-protection.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/style.yaml - let password = await passwordHandler(); + await Excel.run(async (context) => { + let styles = context.workbook.styles; - passwordHelper(password); + // 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(); - await Excel.run(async (context) => { - let activeSheet = context.workbook.worksheets.getActiveWorksheet(); - activeSheet.protection.unprotect(password); + console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); 'Excel.Workbook#getActiveCell:member(1)': - >- @@ -4598,36 +4377,6 @@ console.log("The active cell is " + activeCell.address); }); -'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 - - 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.Workbook#close:member(1)': - >- // Link to full sample: @@ -4644,219 +4393,307 @@ await Excel.run(async (context) => { context.workbook.save(Excel.SaveBehavior.save); }); -'Excel.AutoFilter#apply:member(1)': +'Excel.WorkbookProtection#protect: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/master/samples/excel/50-workbook/data-protection.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const farmData = sheet.getUsedRange(); + 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/master/samples/excel/50-workbook/data-protection.yaml + + let password = await passwordHandler(); + + passwordHelper(password); + + await Excel.run(async (context) => { + let workbook = context.workbook; + workbook.load("protection/protected"); - // 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(); + + 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/master/samples/excel/50-workbook/data-protection.yaml + + await Excel.run(async (context) => { + let workbook = context.workbook; + workbook.protection.unprotect(); }); -'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/master/samples/excel/50-workbook/data-protection.yaml - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const farmData = sheet.getUsedRange(); + let password = await passwordHandler(); - // 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(); + passwordHelper(password); + + await Excel.run(async (context) => { + let workbook = context.workbook; + workbook.protection.unprotect(password); }); -'Excel.Worksheet#copy:member(1)': +'Excel.WorkbookRangeAreas#areas:member': - >- // 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/master/samples/excel/42-range/direct-precedents.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(); - 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(`Direct precedent cells of ${range.address}:`); - console.log("'" + sampleSheet.name + "' was copied to '" + copiedSheet.name + "'") + // 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.Worksheet#findAllOrNullObject:member(1)': +'Excel.Worksheet#customProperties:member': - >- // 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/master/samples/excel/26-document/custom-properties.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(); + // 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(); - if (foundRanges.isNullObject) { - console.log("No complete projects"); - } else { - foundRanges.format.fill.color = "green" - } + // 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.WorksheetFreezePanes#freezeAt:member(1)': +'Excel.Worksheet#onRowSorted:member': - >- // 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/master/samples/excel/30-events/event-column-and-row-sort.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + console.log("Adding row handler"); + const sheet = context.workbook.worksheets.getActiveWorksheet(); - // Freeze the specified range in top-and-left-most pane of the worksheet. - sheet.freezePanes.freezeAt(sheet.getRange("H2:K5")); + // 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"; + } + + return context.sync(); + }); + }); }); -'Excel.WorksheetFreezePanes#freezeColumns:member(1)': +'Excel.Worksheet#onColumnSorted:member': - >- // 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/master/samples/excel/30-events/event-column-and-row-sort.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + console.log("Adding column handler"); + const sheet = context.workbook.worksheets.getActiveWorksheet(); - // Freeze the first two columns in the worksheet. - sheet.freezePanes.freezeColumns(2); + // 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 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"; + } + + return context.sync(); + }); + }); }); -'Excel.WorksheetFreezePanes#freezeRows:member(1)': +'Excel.Worksheet#onChanged:member': - >- // 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/master/samples/excel/30-events/events-worksheet.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - // Freeze the top two rows in the worksheet. - sheet.freezePanes.freezeRows(2); - + 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.WorksheetFreezePanes#getLocationOrNullObject:member(1)': +'Excel.Worksheet#onSingleClicked:member': - >- // 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/master/samples/excel/30-events/event-worksheet-single-click.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const frozenRange = sheet.freezePanes.getLocationOrNullObject(); - frozenRange.load("address"); + 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(); + }); + }); - await context.sync(); + console.log("The worksheet click handler is registered."); - if (frozenRange.isNullObject) { - console.log(`The worksheet does not contain a frozen pane.`); - } else { - console.log(`The address of the frozen range (cells that are frozen in the top-and-left-most pane) is "${frozenRange.address}"`); - } + await context.sync(); }); -'Excel.WorksheetFreezePanes#unfreeze:member(1)': +'Excel.Worksheet#showOutlineLevels: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/master/samples/excel/42-range/outline.yaml - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - sheet.freezePanes.unfreeze(); + Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + // This collapses the entire outline. + sheet.showOutlineLevels(1, 1); await context.sync(); }); -'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/master/samples/excel/42-range/outline.yaml - await Excel.run(async (context) => { + 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.PageBreakCollection#add:member(1)': +'Excel.Worksheet#pivotTables: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/master/samples/excel/38-pivottable/pivottable-get-pivottables.yaml await Excel.run(async (context) => { - const farmSheet = context.workbook.worksheets.getItem("Print"); - farmSheet.horizontalPageBreaks.add("A21:E21"); - await context.sync(); + // Get the names of all the PivotTables in the current worksheet. + const pivotTables = context.workbook.worksheets.getActiveWorksheet().pivotTables; + pivotTables.load("name"); + await context.sync(); + + // Display the names in the console. + console.log("PivotTables in the current worksheet:") + pivotTables.items.forEach((pivotTable) => { + console.log(`\t${pivotTable.name}`); + }); }); -'Excel.PageLayout#centerHorizontally:member': +'Excel.Worksheet#slicers: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/master/samples/excel/38-pivottable/pivottable-slicer.yaml await Excel.run(async (context) => { - const farmSheet = context.workbook.worksheets.getItem("Print"); - farmSheet.pageLayout.centerHorizontally = true; - farmSheet.pageLayout.centerVertically = 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.PageLayout#centerVertically:member': +'Excel.Worksheet#getRanges: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/master/samples/excel/42-range/range-areas.yaml await Excel.run(async (context) => { - const farmSheet = context.workbook.worksheets.getItem("Print"); - farmSheet.pageLayout.centerHorizontally = true; - farmSheet.pageLayout.centerVertically = true; + + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const specifiedRanges = sheet.getRanges("D3:D5, G3:G5"); + specifiedRanges.format.fill.color = "pink"; + await context.sync(); - }); -'Excel.PageLayout#orientation:member': + }) +'Excel.Worksheet#autoFilter: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/master/samples/excel/54-worksheet/worksheet-auto-filter.yaml await Excel.run(async (context) => { - const farmSheet = context.workbook.worksheets.getItem("Print"); - farmSheet.pageLayout.orientation = Excel.PageOrientation.landscape; + 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.PageLayout#setPrintArea:member(1)': +'Excel.Worksheet#copy: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/master/samples/excel/54-worksheet/worksheet-copy.yaml await Excel.run(async (context) => { - const farmSheet = context.workbook.worksheets.getItem("Print"); - farmSheet.pageLayout.setPrintArea("A1:D41"); + + 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.PageLayout#setPrintTitleRows:member(1)': +'Excel.Worksheet#findAllOrNullObject: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/master/samples/excel/54-worksheet/worksheet-find-all.yaml await Excel.run(async (context) => { - const farmSheet = context.workbook.worksheets.getItem("Print"); - farmSheet.pageLayout.setPrintTitleRows("$1:$1"); + 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.PageLayout#zoom:member': +'Excel.Worksheet#showGridlines: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/master/samples/excel/54-worksheet/gridlines.yaml await Excel.run(async (context) => { - const farmSheet = context.workbook.worksheets.getItem("Print"); - farmSheet.pageLayout.zoom = { scale: 200 }; + const sheet = context.workbook.worksheets.getActiveWorksheet(); + sheet.showGridlines = true; + await context.sync(); }); 'Excel.Worksheet#getNext:member(1)': @@ -4913,6 +4750,96 @@ await context.sync(); }); +'Excel.Worksheet#tabColor:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/tab-color.yaml + + await Excel.run(async (context) => { + const activeSheet = context.workbook.worksheets.getActiveWorksheet(); + activeSheet.tabColor = "#FF0000"; + + await context.sync(); + }); +'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 + + 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: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/master/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/master/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#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 + + 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: @@ -4971,14 +4898,161 @@ await context.sync(); }); -'Excel.Worksheet#tabColor:member': +'Excel.WorksheetCustomPropertyCollection#add:member(1)': - >- // 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/master/samples/excel/26-document/custom-properties.yaml await Excel.run(async (context) => { - const activeSheet = context.workbook.worksheets.getActiveWorksheet(); - activeSheet.tabColor = "#FF0000"; + // Get the key/value pair from the task pane. + const userKey = $("#key").text(); + const userValue = $("#value").text(); + + // Add the custom property. + const customWorksheetProperties = context.workbook.worksheets.getActiveWorksheet().customProperties; + customWorksheetProperties.add(userKey, userValue); + + await context.sync(); + + console.log(`Successfully set custom worksheet property ${userKey}:${userValue}.`); + }); +'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 + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + // Freeze the specified range in top-and-left-most pane of the worksheet. + sheet.freezePanes.freezeAt(sheet.getRange("H2:K5")); + + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + // Freeze the first two columns in the worksheet. + sheet.freezePanes.freezeColumns(2); + + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + // Freeze the top two rows in the worksheet. + sheet.freezePanes.freezeRows(2); + + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const frozenRange = sheet.freezePanes.getLocationOrNullObject(); + frozenRange.load("address"); + + await context.sync(); + + if (frozenRange.isNullObject) { + console.log(`The worksheet does not contain a frozen pane.`); + } else { + 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)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-freeze-panes.yaml + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + sheet.freezePanes.unfreeze(); + + await context.sync(); + }); +'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 + + 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/master/samples/excel/50-workbook/data-protection.yaml + + let password = await passwordHandler(); + + passwordHelper(password); + + 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(null, password); + } + }); +'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 + + 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/master/samples/excel/50-workbook/data-protection.yaml + + let password = await passwordHandler(); + + passwordHelper(password); + + await Excel.run(async (context) => { + let activeSheet = context.workbook.worksheets.getActiveWorksheet(); + activeSheet.protection.unprotect(password); + }); +'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 + + 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(); }); diff --git a/view/excel.json b/view/excel.json index b1dba0a49..90aa0e11f 100644 --- a/view/excel.json +++ b/view/excel.json @@ -4,6 +4,7 @@ "excel-basics-basic-common-api-call": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/01-basics/basic-common-api-call.yaml", "excel-chart-axis": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-axis.yaml", "excel-chart-axis-formatting": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-axis-formatting.yaml", + "excel-chart-bubble-chart": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-bubble-chart.yaml", "excel-chart-create-several-charts": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-create-several-charts.yaml", "excel-chart-create-doughnut-chart": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/create-doughnut-chart.yaml", "excel-chart-formatting": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-formatting.yaml", From 18e83d2ca676b9c78fd69c92c3f614f8e707346c Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Mon, 21 Sep 2020 13:00:54 -0700 Subject: [PATCH 308/660] [admin] (Excel snippet mapping) Removing extra mapping line (#492) * Removing extra mapping line * Run yarn start --- snippet-extractor-metadata/excel.xlsx | Bin 22693 -> 22626 bytes snippet-extractor-output/snippets.yaml | 171 +++++++++++-------------- 2 files changed, 74 insertions(+), 97 deletions(-) diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 901bb3b1a63b2e86799857e2af1cf9fc3e885297..f46a80d40a59fcaab9dbff3a8bb34409185c699f 100644 GIT binary patch delta 12128 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 Qm_>-70VCqI&VLa92foakJpcdz diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 1fcd69a31..7f4a88248 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -425,6 +425,80 @@ await context.sync(); }); +'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 + + 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 a 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#getDimensionValues:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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#delete:member(1)': - >- // Link to full sample: @@ -592,80 +666,6 @@ await context.sync(); }); -'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 - - 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 a 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#getDimensionValues:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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: @@ -2736,29 +2736,6 @@ } await context.sync(); }); -'Excel.Range#workbookRangeAreas:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/direct-precedents.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}`); - } - await context.sync(); - }); 'Excel.Range#sort:member': - >- // Link to full sample: From 10d322e8bcfc1a55d3eedec53af31ba7de093d5b Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Mon, 21 Sep 2020 13:27:36 -0700 Subject: [PATCH 309/660] Fixing typos (#493) --- samples/excel/10-chart/chart-bubble-chart.yaml | 2 +- samples/excel/30-events/events-comment-event-handler.yaml | 6 +++--- snippet-extractor-output/snippets.yaml | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/samples/excel/10-chart/chart-bubble-chart.yaml b/samples/excel/10-chart/chart-bubble-chart.yaml index ca6970161..9c5228e59 100644 --- a/samples/excel/10-chart/chart-bubble-chart.yaml +++ b/samples/excel/10-chart/chart-bubble-chart.yaml @@ -17,7 +17,7 @@ script: Calamansi, 2000, $2.45, 10% ... - We want a each bubble to represent a single row. + We want each bubble to represent a single row. */ // Get the worksheet and table data. diff --git a/samples/excel/30-events/events-comment-event-handler.yaml b/samples/excel/30-events/events-comment-event-handler.yaml index a49008cf6..6459dedfa 100644 --- a/samples/excel/30-events/events-comment-event-handler.yaml +++ b/samples/excel/30-events/events-comment-event-handler.yaml @@ -31,7 +31,7 @@ script: async function commentAdded(event: Excel.CommentAddedEventArgs) { 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. + // 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. @@ -51,7 +51,7 @@ script: async function commentChanged(event: Excel.CommentChangedEventArgs) { 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. + // 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. @@ -71,7 +71,7 @@ script: async function commentDeleted(event: Excel.CommentDeletedEventArgs) { 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. + // 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/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 7f4a88248..ef2e4a332 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -437,7 +437,7 @@ Calamansi, 2000, $2.45, 10% ... - We want a each bubble to represent a single row. + We want each bubble to represent a single row. */ // Get the worksheet and table data. @@ -859,7 +859,7 @@ async function commentAdded(event: Excel.CommentAddedEventArgs) { 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. + // 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. @@ -899,7 +899,7 @@ async function commentChanged(event: Excel.CommentChangedEventArgs) { 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. + // 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. @@ -939,7 +939,7 @@ async function commentDeleted(event: Excel.CommentDeletedEventArgs) { 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. + // 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}`); }); From 0a858f35997945209f1677441fb2667832ba9cb2 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 29 Sep 2020 14:59:27 -0700 Subject: [PATCH 310/660] [Outlook] (delegate) Update snippet with appointment example (#495) * [Outlook] (delegate) Update snippet with appointment example * Update based on feedback * Clarify --- .../get-shared-properties.yaml | 60 ++++++++++++++++-- snippet-extractor-metadata/outlook.xlsx | Bin 20389 -> 20410 bytes snippet-extractor-output/snippets.yaml | 24 +++---- 3 files changed, 65 insertions(+), 19 deletions(-) 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 7c74c65a9..d19d0927b 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 @@ -7,11 +7,12 @@ api_set: script: content: | $("#get").click(get); - $("#run").click(run); + $("#run-message").click(runOnMessage); + $("#run-appointment").click(runOnAppointment); function get() { if (!Office.context.mailbox.item.getSharedPropertiesAsync) { - console.error("Try this sample on a message from a shared folder."); + console.error("Try this sample on an item from a shared folder."); return; } @@ -20,7 +21,7 @@ script: }); } - function run() { + function runOnMessage() { if (!Office.context.mailbox.item.getSharedPropertiesAsync) { console.error("Try this sample on a message from a shared folder."); return; @@ -37,7 +38,7 @@ script: let sharedProperties = result2.value; let delegatePermissions = sharedProperties.delegatePermissions; - // Determine if user can do the expected operation, e.g., do they have Write permission? + // 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); @@ -61,6 +62,48 @@ script: } }); } + + 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) { + 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); + }); + } + } + ); + } + }); + } language: typescript template: content: | @@ -69,12 +112,15 @@ template:

      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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 50c452dcc..de09b3108 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -1301,6 +1301,42 @@ await context.sync(); }); +'Excel.CustomPropertyCollection#add:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/custom-properties.yaml + + await Excel.run(async (context) => { + // Get the key/value pair from the task pane. + const userKey = $("#key").text(); + const userValue = $("#value").text(); + + // Add the custom property. + const customDocProperties = context.workbook.properties.custom; + customDocProperties.add(userKey, userValue); + + await context.sync(); + + console.log(`Successfully set custom document property ${userKey}:${userValue}.`); + }); +'Excel.WorksheetCustomPropertyCollection#add:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/custom-properties.yaml + + await Excel.run(async (context) => { + // Get the key/value pair from the task pane. + const userKey = $("#key").text(); + const userValue = $("#value").text(); + + // Add the custom property. + const customWorksheetProperties = context.workbook.worksheets.getActiveWorksheet().customProperties; + customWorksheetProperties.add(userKey, userValue); + + await context.sync(); + + console.log(`Successfully set custom worksheet property ${userKey}:${userValue}.`); + }); 'Excel.CustomConditionalFormat#format:member': - >- // Link to full sample: @@ -1805,6 +1841,40 @@ await context.sync(); }); +'Excel.Worksheet#customProperties:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/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.DocumentProperties#custom:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/custom-properties.yaml + + await Excel.run(async (context) => { + // Load the keys and values of all custom properties. + const customDocProperties = context.workbook.properties.custom; + customDocProperties.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. + customDocProperties.items.forEach((property) => { + console.log(`${property.key}:${property.value}`); + }); + }); 'Excel.IconSetConditionalFormat#criteria:member': - >- // Link to full sample: @@ -2855,6 +2925,28 @@ 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/master/samples/excel/85-preview-apis/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.RangeAreas#format:member': - >- // Link to full sample: @@ -4514,28 +4606,6 @@ await context.sync(); }); -'Excel.Range#getSpillingToRange:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/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}.`); - }); 'Office.RoamingSettings#get:member(1)': - >- // Link to full sample: diff --git a/view/excel.json b/view/excel.json index 64f24eff0..3283ac7b6 100644 --- a/view/excel.json +++ b/view/excel.json @@ -99,6 +99,7 @@ "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-visibility.yaml", + "excel-document-custom-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/custom-properties.yaml", "excel-range-dynamic-arrays": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/dynamic-arrays.yaml", "excel-pivottables-get-pivottables": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/pivottable-get-pivottables.yaml", "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", From c1b2e448b4f1dfb65e0a0c9e0834ec2e039a33ea Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 11 Aug 2020 15:50:48 -0700 Subject: [PATCH 301/660] [Outlook] (SessionData) Map to overloads (#479) --- snippet-extractor-metadata/outlook.xlsx | Bin 20399 -> 20389 bytes snippet-extractor-output/snippets.yaml | 6 +++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 96e5543f9750031dab981267386c5ab30b027b1a..78cb1bf7441567b505b36563a29c0a65bb239009 100644 GIT binary patch delta 7916 zcmXY0bzBrc(OtXV+;G3Fln+ zZaJz-bht$QvTQJkX|@FRfg+Xo$8U{GaN*JldnHuO$>G4*ip&mEf!AVxsH5Nd=UmqC z-)u>Ni1J{toYGn?ft2cOp{wbHYJf*<{(O{S%_<>nf%1mzw62M z!k9x=S=a!D<1HA`n;JPE1R@UsG+i1!+Y!XX5G8zuL8kVajrAR(Xt0JbE3=1rF##lNLVCSgCYxQ?Y{yMZD-}$XaGJlg+0PKF)KR!!^|K7f(uZK$ zj9o9&NOFfs+5!peC}CL{a+7Cxp%~_rReSU0?rB#6tnr}47L^gZ}LO-}y5k(m%| z2)^kB8Lqwy+k#TKctzvfBrOa0Y=W8esjSOT{8>Jj850OQ@e9CE!Wh=T|T4{mhk9XUMJ3$5mnhK@(kY?%n0o97)#W4Rcq=M{Apo!%W@l z;kc2h{oXCxs;uFzi2EH#=%at*!>_F+w`SxIrhFS&tH`CJ{55Oq&gBS883Ef>uY6No z^E0Q$2&>~WxmMd+oBY9tV?$~n-&D* z&OY>hC9ZkCUgJItujnT#K+>gS6eRE!fF26MIp4%f24D7;*jD z7IMBfRW^}(aA2Mj{?&Tf=Kani_~!KC0dVc35Lj;=apQBt+lln--#gp?br*#7Fc*4x zj<~%;dEMMx&-CtlwGKgaHL|Fkq9Rv4{_!MsZNGoEuycL}3Ot=V8EenA%v;&Mu{E^~ z60eGjyN8wz`U;!`9WYm|HEhNWkL9j-otud+YSaxgM=W^#`xfd}?8Esf zgRdd{CW7D)I!7PxIL=b!h|*R1Wk)-@PG^)#RHDV8-GD&;x(PJsSQ_}KN*%Sml==Ymj-mmU-h(3 z?rD$Vud`EEOM4*FXXAtom+6nvP}vYEI>dzCTARN} z4%PVm9{A%gm(LhED-&DbanB+ey)4S_c)o|BrE}Ws8F&Es8?%0%Eh+W)%K?rpL0su+ zoJf$5i^JS8%Y}5>7_rR3ZBfj4zidW*OhQU0mCi->VDJ6meB&|iRXXiCOOu21O9vcS zJ?%-VoavZH+Br|Gx9Hz?QesfIS zc~%ez(e2S4DMT-_=5-MX7OL-=`wkP6(WB-IP76N0Z-Y#npf5laIFzK({1+TS68^##)YGdW$>E zWhX0jtFV}jy5rK+WX^t1?dnKXWeLxpbrWU@q&DWFy0uzqjH zQ_l!3$`o@}Uv{)yAh2`HT(Jzc^ABaYQiO&YYR5@`Q~;7*9cp%>sbZm*FhOzAxeK-S z-&wdp#TSeO)S9&&Ork7<^Tm_dL_fK?{gy39V97rh4&^{=RwI#zCK_^67f(AYnDZea zg+U86i5=KkPmZ#d<#4nUxb2M#tzvjgWnY=vg=cIMzfkNZs@od>+2u|;b~yPF;kKes zfQ8YgM4}9hpa^R3&W61Vp@q+guDSo4F$1Uvf2s=o62*ESk@*ez^Nq6+mN zMo%1TXKALPX3=Js;+*&^I_#URHs1{Cv3@~xZt=6%YU;(UBWd$k5f0n;+O6^OVw5{? ztHg0q1i0{BbPdup`Ce-abEX}WYu0_e8 z#y6>D6)nNX1yfn=z>c3W2g?J!MJX3lG(FgqgR4okH6=D8Hu^d~MD@6}Mic;vV#32z zXC&;!4S5nln;bAprdN5IL6pEwGj;|^s5U}|8*Oi#>E>;KWB&|4kWrRdm8OB`Zbz79 z%PbxDhz0FeI3uUN)a9*paX{fU4Vk}U*GxmJFKTb=Kbn;f^=TS zlCixUnpu3az<`1)IMsXjLrUb`{3*hO*a#)DT0ZldYpMlRU@oQ0 z3rU)Me!A|d4}GRq7uOWW#ey)K2=c%Yp$qF#4fes3Rv&&H5Atz@R9FDUxns(i&H2^l zH_6^I1d?;8x1-WoDp2}|$y@qR)+E0HzZ83mnntr0Nr^2nwR#-(@9FFkI?W4A>PP*K z=#%v$g?jrOoW;0GR8Ej8+{t?DefgZjzwIgxE=wYbf9&*+>6n|d%Su*xKI=Zyzx(ox zL}w6JA+yy3V9}8YS)}R$t&Q_~2f@LvLrL@mf4FW7m0KY1cK?K`(Mckq`cQzS)35Bg zADa`hD_-l3+>)Nrx$U-khYE>8d$_3%pvCVgT-w-ai$v1FSI;ISzL%&hj5X+4F!CM^ z5XKK=Ug_@(fg*eO|CFliq&Boway1uy#EzFVYx{NaHbrO~(pLH!0LKAsW>%+2nx%#I zsN(t)s#OL3cx!}ZN$+3Ba``r8e6y_-RX>n{1jIDBI0gq_+Z)a*?&X7?NEof~$(eS9B@> ze2>xpJN2(gi5G_;+}V;UdBu+1LwwIsD($QZQ@GXRXpug1+xOT1$NXu|G%M9 zMP873?GS%kbP|?_%uOd;$bC*TV;)HuE1$R{@wFB=e#0&i*6gWFvU{EiM z758p1y221*Qz%Cmy0nTU{c+Mi-hF2=M0z0(;p^FgvP5YcLsgRe)C8vuVhg*L&;{D5yAe-`SN)1bK8K(g&bsRjrpUSy@K(=@E^8Zg zx_$Y*L#4e~+>KYs_gjE@zW0d$9=_~c4Ee^Exps9zC?ZqGGxnn==S6I9X(B&2-e8#ZU*bL?gfkT ze5ehK+d3!)&g$CothkSKpF5Nk!sa1^)6xR=eIhTXx<_5Uyx@tuC-eT?gp(C-Qm}#i z=uy)IufO-7kLK#8`IUFiP`L45DyGyOb-+BIJX~{-w+tH!CD{Dv56XT`^XlxFxRz_CWU6okYtV@WOIIUo4A^# z3L~IbsWg2-a>ieb``_8XX!zG>8P~`fv@q>7bMHT!HOZJI#p@r(GO!MaMsrE2XB{(sk#j$4PjY94V&Ey7BzducP;aVoeop z^9jG$=$Lb^MOlmuK^Cf2Q%Og5=rGuz2&$v z&iFk6R;T(;nRZ;Ih;$?-S6`-{zl*bt)*$M$+t=KWji0d-Aye~_ackK~RJEcb-s=cw z=ZRsmIS;k95gz-Mzw#Lvcx{2{Pzeg)QG83ShF+75Pf0w@R+%#HFz*L@K=hzR<0sd9 z3y&^v80@Su;1?zspN9ur1Z|_NJdB^k+22YhVc=C%Z9mru=9>w`sJ4At9wAYT2w;)Z zY?bvXi+T(3BLVV$_Lrsj@v7a*@$?#!IQrVmLgSX0TC$d}y4%<`EsmFk5eB;4;}><>zf0rJ&2GOs zhh%$&Nz-lX8x31?uzp41%fJoZ2KQ@|cxZVfjjllI$?Yw_{83tzhMAvw;W+}RG5HBG>(kIr>rkI&07u7FSA5gv~!EzB;Qw&`G5S&m8Cks{IK;v12r zx)}AiZCt8kLh&n6N=NzC&zNDkX+LO=IQd6*$}I}rSY?nKpDw81eV@02Hpe@6%HGn%4zq{ zg=A&h#LO{wjuz5)AHtxNl??DgG16KcGk`k8Zlbk#SB$xDX-&oFAtz^m_3WsI8SX7n z6tPFgI((_6Al1Kl^V&?YgU~oixeLvcgeJ)lNi|HB5P5n}_mXv}|5i!b)~=DSKid#R zwL+Y2Fxuv(jkwi~GI0A!*@+Qm9Ib4c?HwaworurTZ0k+*0ueo`hVc%XZ6v=;=qe5= z*z&81Vr-QDs%`VlU>^s&uzNN;7(0>dH747SIXYG6k2V~2xz8txEt!F?-h>|#m21}t z^kbX+7yRQ6dX7G|G4-X8aQ0p4q15FoKuB8Bl`a#>O`E-IAoXUUArsMChy%MTg`L4Sf zGlp>`A10Ol{+aI&vwTI(f?sXFa@}jDqhaTZ%S^zX5ZN;js^L`bYQVS1D0maqRxjuH zAxk*!&jkNe$>~9ZX8aj)m~+cwO!A#i02o}8@#k;@&1 zX$45tp;%IEz2o1x@o#;<$WtOjVI=yqcpcIVnd59C!Y6NTG{L;3(B^C`iXCp3WJaZE zSU{_(V#%6yIqw?;7dlFkPdtbaI|G9n7=K>0O&*cNT4W~gE3q~&41cv6p@YCMv0bh1+PI?m%@q+4Ds+4 zeY@=Hd81L1Luyjd*n_Jma{I8CVyK6=U$o)|7Obub7AGv1{+fZu4Dglnx)K9TD}iQ} ziPta9YwB6@UOgEJx7}CAuIqOGbcfxSP}6DSZaxu$P0=`X!nG*9_MKQh3H>F#*y9qQb@4r<0cWS9^c z-3yLJy@_~P&e@;6GiQf)Dx3LjGZOuuPC#eQ$mOz{6d(vSU=m4`NqPdF8v&Y0XxjM( zKXFgB9zm^HUTN}{&-By#qWNQYuf+C4Y6mqltFC#$qB9G;M2OvKcn^jpMpExxe`-C; zNtj@GY^676c{*xm!wixHSrQ)(>|!}F^umkmOzxui2`I2G?8ubIIP~bku2VPb7)~9x zgd@q~+8BX83Gt^4`Cjo2?OtI&@!F2Y7KXFV%%WT3Oc!@+2;4lkTE&Hzet41)dO|uS zS|23Ct_;{;KuCSHOFkb(yP#YZBu_;t4*k?L;}J!>nej9W@Sx}gtM^oO&pjcds~tuY z_)Rh$Dx<~NZ7oI8LULN{3Qq~)FR-eaP>n`j2n?+yKL~sc$98U)ZWjv*u)*;24tTd8 z#aTX#T1)@lV4d7ofgS4wdr&#NFaCD&{9VkNCxXJw{T=BuMo=Xj`P>%#F` z3aPFb=2yPKnT9ri&p|96vvluVxpEi%q_XK;{>YiOek3Wp;vOyZs+bxtDK()Wx#r=k zy5c7y%1$iub(^~v{o=g2!_5TC+tk1c-O-IhgSCVE=Bk-~fR_C#b=H-*<8E_J@r(AH z1RPFCrS%86$z@DPc5NJABEn?pZJ|SGg$jU>#Z@ph{kER>&prQI&v3=W)6eB zm~1__yeq@`G6dnmO_g`mO6x5?f+H;x2YGIEYgdB9eCZLC9@~)J(vq`h2*@%78cSZ! zg@jH6{-IfB#9k~WPM(eKXd)Wq<)}QT-d|i<988Kv%Y%K4iyTfs-*=&zNdoYrCJ5z1 z=#GQ$!u#Vw<08Y@rUiZBwp~S9J>JY&WDPzdJjQWurr6}2PKl0j-f58f8rRmU3N>JZ zCve)Ml~j(8Gx~VFQjxoZAmGcEHRlI=P&BCQ4F3>*F#YwAIUC26QX+i`*XPUDTLLFB zM4IJe4%-=#K$UNRarBd|JWAmZ zDVN#TMT&l5M@+JMz=ZLj13X8Q=LdII7w$oJI+9Rk3jm|P}KBe=*%XzK`jc33^zIX3 ztP4j$QDyW^*gKdhI}lRr_7g9FP0sI50NxG9fIgh-@GK~1(5@&{(R~~mUwtef9Qz0^ z!YZA9dAL+3uE=Xkw}iD_Zd~-dBEe~_!|@q;wq8hY>CCZY_XprrsOU8#x6lx>`XGBE z;r<8X$0tQ2>BAGLbQ9bFoa)LGIP2-x_#RthMRQF{V14U}GUQCSv9@1K&6E=0bvkvaS^3v$|uRrA8S6mfKOFCCoLu`)d44; z2^d@8p-G);8bFQ0Usft~i%O%at|1`jaxsS~x9jaGVAACmie8ePUy`V;7eZl#pnSs7+v@$(jc!M`*YA1qy1w4bS6 zwKA6k1nCTDs#Q-p!eaxTRW@}XxQxylK+SiPdKG=U5+BlIlXVy#o{FVH%Tj#m^DB*i zf$UAe6_R{|!hFnq@|fI02(7IfO(Lr1Cc)>TJS~|16GI>o|G$@-$mctZC8b6PLadre z3dk|*>}S7+JDjZ1S(y^1K2q~x9J(R1MZVn5;dnsuMnXSr(wUd$(W)5mpvm)X)^?7; zy~ub9U)j2sBY&u{{i9tM{Y*?7{ku#8(Et~t{Wn*o&cFoxBQdq=L?WYpMS9D<)sT@! zUKK&i2c8Bp%SS=M>@S>DKVvfTQ}-2;jkrMV>Pk17mIIAo*~;nOZ{v#$*2at#gtYmS zXR|YU?W3hLEk9i#Fh#Bz$Ry^6h~H8McUPIo1H296Q2h7D&38rlu#+Yd+27UMERIFY zed;qGvJ6+Ncq!#Dt4Ma}Zk#hrOlKS9us@bLMp*T#&&1GFOrFJhm%Dx&|)dCM8S<6*f-c>VR^~?Nn z-yk-T)(=a5cYzNVey4S}8ScWwtJ|D!kpFIv{#>tYw?By1-V}%*MM*EPG+x}1zNjSTfNIq zG7FeZy7*g>SxHF7k?XSiUB7sr`-_ql`1L}q&i)OvocNNQg);LaGfV+M(WuU2Plpv1 z4>M`3QRGI4=xg>0QM_BjepDI^%jK#9C@w`0gGHWWNH|EWZDTXn8*NJB8w#HxYuR@h zz1NxJGrK_|*}|dL3}#8UUNpwhOD?h=hz*YFLK1bT)20zZN;I<6VVT!5QGsD4%rdpV z#j`kQcHqwqUZkx|=S6WW;y8#CZL5Of=do;;e48|C>U+UE^kcVIxDFfQ7QP22kv9kA zzaM%I)Tl!ZF8m2e)1r0zV3xa^O>{24#-Ak;Lba$t8qohb(e)oRg zbMN`N)zs_$H`XX@Pwjrq*geP_Zc2-K)LUQc3!)0f#i(Nis&=NV9=5Vhqy(b6el?CWh$w z_h=8ntgXQc4$<-(R7G?VV?37As6Ck_pM&di2JE6QkK2=@S7$e_BQ$ODH%PjqyK4S! zfz14GbeLbT1{fSLhg>5H)^9axlm{{h9oPCd_zR#D+V@&%G^Ylo`(YJ%l6sdflzvO+ z6S4Cca&e%ah1q(Jk1DhECzsrgB0Op5yvQpA(#yVT*PHNxa{a^<1)|(X*V$(#tinpV z4zZ;06MgFV_CPx*6}yMvFUoonvKkD<+pnnYgI*R&N@4$FR}Hj3b=DD&cmi`_wP*9R z13p8!uCc>APuxFL+x%w2abA`y+`blzc1?P3emJFA<0=0pz2zOcxxyBm z;Hu&QR*IsZ)9evAmp_-5f}_CIjyfEq<9avH&oOte2wzM6wGzFHSRj=gf2&H;8nsGD z*a_9Qwp2IDR{!LvL`*eqosxKi%M6qXNng#JE4nXxW!x`x**^P?9gR8p+lLv0cd^=Q zzO`mvsPBX`)Rg6FveQTc^ErN&q( zLDfEupuB(Trw9Qv3DUBae{3;VHRaNi=#+TuE04X>)G~|=IjgpOD?aFI21tjkD3Blx z$UbWt`N>$+rSaK4s?If=2G!uOWwni_(~;g&q1bU1TaWrIwbda!yKhHBvG&OK=Jyc7kNY7uSZI!VhGc7L^=>af01Oe0rON$RECoJlUtI z1R2G%k;5H&e5ug8zvEArk9*d4{liVO_C8-FCE5a;?-9$A9mrPymOF&MQTvZoiR!Gn z?P2S?=9QhNmEbmizqP8Ao61S(R=4h3iuYA?sYk`bZIM399)XVSfd=c9WEse_g!1Cm zwL$Nznw6curtOv4rub`gXJc+R%`1<89&SfhcmIeX|NaQpKYO&#G%=A_YrDHTnzlyX z-zT~~r7I01W2BpIpT6C9{Q4zuvVQO`;Rt!MYjt6DBOK7a)Iaij@54nobZ2#vWJ`Kj zjmp^RgY;Y>nnu+(D0hLN)IWRmv52Rf`oT#9yQ&l9+0h+A>JyN9WUsqxbaS-0D7~Fh zja_o@-C-C{pHRi)2VgZ&u%GgdJb_-8QuTJ-XRj8Lb?1zPPV0 z=R;=9cFPCLO>c{)`XH|oW?c;abnonqIyd=oQ=PCZ>_`VKIzP7i+vnTT>uqwGX!)I4 zo+0A?ZSFuJq*&M=l=0}-vmYNq_ENp4?h$Rz56K`Hy6|wfyVn7&m^1B2&QW$zZV?!^ z4fJ`MH@|XEEtbW+@zytQU6!z5s2cVh%lEzAYZsckLAucMW(+R>@fA#0>rW-m z{=kPcHKE=-y#p!zTMsBid`(b4m$A*PHNi!_#dvG+g0l5U*hGAKZ7l8k zKI5Y}EftG7yEbU2{CEk+hE22#aOj}r>g%So1(u^Ck z)t^E+{+3b-GBj}QyvHPXE&LbanghAV&0NqP`!&v1 zQV|&2&KO-*_(i3xKu20?NwHnxX@-FeMMV;wF&bm+ZI=<78AvWs5Wvrb-Z&#q_;C?^ z#70?Kg}UB%-O}y=?P3puD!uoRtgu*!sz?SJ?dqg;N}cEa2`3M0IZda%+91o?dzp{@viKWS3xPcc>V!fp9gfV&BpPAv=FDI(d!vD7$`CKK z#8^0j$)&3>l0j~u^!2;bPY`jz*d~-^!J>y(6xjvM-O+@uXpUln7iUyGZ;_tXr4XM9 zwosHm6KF)gHZVoggrghb5E{pp-nfP3nF#O3&Zd=Z2D-)Xxs$OOPewM9-WwFPSj<0L zc2Iivj1nQSxQRtyGm~rszwL;QFdr{LH>#2&{CIXhRvo+wdK0y@_aDFW?zS_Nn~iWo znw#F4&E`=_HAcsC>||k?LWvQ#YEXCJc#$x@O!3NY^VXG_0(K*+T;r{zO3S3fa;{ix zv!bC(h(dEcYF@rqO$xpm0D-ccJKCUmXbDjZXN@_x%dn>2qw0}hzA^kjMGKWl2uCfz zkN6la@obV?szn9cyTF$kUKE;C5XIB{ESkz93GuW|2$U6nv-R9G{A>bdJOlW{1x2EJ zg-WO>7V%61{iYFa^d39_W(zXQY&$70^XsOX33)yq?pP_X-8qk9H^? zeDVE_V3!MHUXWjsCrJcX*a8t~lyPll%o3six`G|59zoGMs16V9K1_Bdp(2IZ@ej6a zyf_YV!OEse;>;$yci%bt&qT!*ixwpTo_PcAWt#8q8TkugM85`zXo{B{2@1R|>QD|A ztToxal9IH-8Dr`?bkPqMc)b|Zyzf`?YU`aS6@6>iec}=zBidjW(n+?kk|4b>tYXV> z2IWkwYKBH0Xs~v{PEh@;%n za%!56Aj+EN<8WT!H+}EdafIb>9e{s+uty*+L3ui7qd{ z3rCA_?;k=1n}~^v5gH-8ltf*p{61rY1t@`Hgt4n;%rv40D@&m|=(vGO7Kjx8E_G(d z5AcNUkaNpK_2U>}gEBpQPdmmOkPV9lGmSp{!7dU^HONq8hcyNL;(>e<=W3>P{U1pS zW3==X|Ly+;jjhY6><}|$&q`gRgUA9lmO79??zt-%fIkk}MvCT{T~2}X>Anb*|@oB^mM zsSGnyrLZ4kOxzGS@cCnZgZ{9L?>g9q!YheQ%QHmVrUjymzQ_l;@eFGIZlQx?^NrivtIcpVdfLAoapWq+_s*W7{VikTKhEq3 zHHJT|p>W6!fH6>GZJqx|r{tNXL!$ag!g!rdrKVXA;YO(XPl1FQFRj!4&yXQPLBlXm z1d5^Mv&zc7Ovjf~rD}I|I@f^a0+H#i;2k+QGgOM4R%R!aNYC<=qgV+`j>B)wa>@HC3=bk!?%G9qRicW6)JN`mOmBs)!y zrC4Un+EtBL4#{r0^DIiZ&0hUJ;oQ?G3sbK<*vXs-=9tXkNJixWftO}{4yHM>wb+yu ziUaIE^6`lusXR}OwYcRXE-Z-N46PM6`*laW6XXqj|^Bbv#d`XWZXc)T$OIlP% zR7KAk7aeNn>g$BHHKCfPa$gcHd3EN!v?I+0%sL@>6mZ~j6KOemxL1HJ)8mBC`+-a_A1?_g5$X8XN%!?zQk0-R>QW(e>Z(LbZh|lHmzp|3v{IbI_ zZw09sa2K!d+Cp3^#%T71A zbng*bo^*K|tuG>#SRey%HfCYO{|pA^oj4GaIuX!tFe%+~5dCylElg84tDECyqv{}A zUSC}+xaVH|+nEV?F=Win==_-zn0FQG@3)Pn9G$3j`hz4()hkoxXr7x5LO*89K|3%$ zRY|bIk(09$28KrOe<#4;I@e5z*9|^4Pu8d;vpn^BN1U;0Tk3 zNw=cEI}B;v+tQLXuFE9rxUsv4ZC-4x%W35a2t!_IBD}mMsz^}h=REK!dYn5MH;=0h zU^3i*sxMmTc;+G-gidlhSrPrNqb^KlgdVtI3%H^>J#4a-wCZXy5+Y)EYPEVzdi!3^ zQ1NKVZwtauU(WPzvQyACG#-o?D@d{P24D(O@VKYlu6!N|aKqDB&b~ zG?w+4HOoJ6!+o2QIj)v|i?V+1kSvZp+MmPlLTDH|Sr9PV`9k)`1MjD!`56iPuP#0h zIf30cC!l$3gDRUBO9Eu$)m_A!RwV$Ie;Bp_o%-LG8ubw>moao_}>g)GKH>wkD^=srzxjHkQ}X0 z-PwEEndr?MaOx`AY*mHjwk3~KE2$$utZBdGjHz%_tsCF`!GE8QZaI`y;jd-_`y{~n z1><50>sNYZM7Zo@p`xv?G{?jV`F3Dq#;1B*z4s%HFj$TpwHY@=N!1U;JG`a77GDLrWx+)_3asv?gwYsylQ7jQ#VzD+j50 z(oKK%zdg$VgnKv3$I5c`MiyNbsC}Q@&!T}kAkL31>_c6eBYvP15VtMV=EmvvPR;k` zq^*sdQz$uyf%FEKEQ478dwyU8iGJd-F*hTk-&}izZ(s<%XXCNTXRGYuv}Lg>3F091 zdgPolF6I1K%DD!$YU%srIi|09`X{KA`Bf(%!|jxukgfIFztT!^@0I2VXGezZMIiId z=`BdM6eZ=Ge{Wz{j7uMMlV3`w5v(uK(fm4+(~yyovw&UEx=p0FG#AGfJSxlYhShY;&0dT(axIQnG(91dbl`PzP^a)~kd!jZX z?7oa9zg$he2SrHRjGNe7VlY*G(P@zUT|vRa&XyJN$@tV3r&f@3m6(V*V~UqQ<7g7# zop&<6n32i}2}MLU4fr*n%nQS@b|dXrZ2N=U$9e-eYG26!bl#omnzvO&)OB*Fvd#C! zkAY-PP&ma=&veopgX)t6Kz2F-lpHDou5?VaUQCl zSS@V+i8GfjE-Df)!Q@}^g`$hLhuX}vyT!f_MUxg=Hz2{`!>>jD-|bs%pZ<%5H>zjrSdw$I->d?=60jwHHhZ*Evm z%$;wA##e3IzovtiY-ocavsf4WrUbgAph^UWZ2u)V2ER2P(n<}&H}4qkCW&qQc33tm z^O6;(Og-&^c;71tg4Za~5;EE5pQy(d8Es-!S=2hnuPJY!VAwy>AS6%&E|W6(`>(H8 z3&hOx@ye%cqD)H0HZh_u7Thv|&S1^SwIc!zJT~r}OjhCyjFQsTI1j$3EOSYLoU}{n zs>*N1=BFrd22Cg=Ly8|rukASGy&n&k?QbgER!qHKage(AV`!pJihuY?qIWc=YXxLvmH=uoR%jtyK~ zHs%Wqc7eH{<>6+!!o}?ohEep%NisgJy16847~*s1RY|I~4V?|zexHMkbG;U&`3b5x zU74DQHuQ%v$cG$N8Jix36t}63^q^b&Wq@KlJ0O?2tBVat79lhLcMiTsa>K4TRQa-X-amm~vo;KaE=JK9M*`51NkmVG7zkaqOgRV4>xu)Q{D z>N)u{Z!Ydtvht6x>|RJIJvZe!iOV z5ed`#tiH_vSiMbGT_eKMOK$T%`$2*eDWjYoeV*llI?5O~<9^4RRJzS`A;zrDuBCMf zD=#~P=LWHw_HE?FSaRO_z-pPuQL|x#O#FZ+GT0rH6q$65zn9mcqMhwHL_NZWB|En) z^tMS6ropTV)tF5q*;feOzBXnL<-owc+so9f`^@sTHB3+FO>%DAlQd=4+cP+woRR;oKgn>G-yj|ff9`pNTKTF+2v_p)mF+1|-3;zyI4_V-a{CqdM*jJt z@4~tdQzhX(K16q&Lw?hXD6FF_yee2u(RAu7nmrvYPA1!%R_009;G)l?zFq0Xpc;axdi9!^d{9L| z_4d^~X3DH{eoN(Vsqd`O=I2%vlDZ%7VCKTn#m688jQJ!jaWTB`MtE!7!&^;O`s@N@SbnN^#BFH z4nQu=dmg)jMar<;L|*Wa+wPB*%yb{CjlzjvEjh(QUQw6CeilYdwOxF((T+C3{HJBf zjCeFP;Wq$rr(v;5($0oal)j#F{~B?giio#43)Cr%49aa3Yb_H8Q@)WX+^HYL&F?r zv+(Hb(Ah|jxWKpX%DEgCHDq@=4Cv?i!B-4QWeq=mQFB6;p8FES+2G6Pu9KAiK`JUy zm51*FXI9V&auQq+_#^3T&+*XXvM~1ry@Zyo#B4b+^p5rBaA(=R(U99`IN>Zi)%3#? zVkOvEy3I(UqJ0|@8`k94wNTX&47|T{zF2t_s=mz@K|YTsew(iA4d2Zo?mrYA^JR>l z{-*b13w%ybfO2OXx~}$I3I3F zWf>0R45Q~qlz2vOM&+P1lvw6AarlpZ_yxe2bK~(duv3{N;)Yl^iF_$ZFTs<@D8t-( zQ4`8$H>{AEm+2wYy%0^y?#z5PVX~s5-bfp6x<-SpO86C~Weu!8qo@W;#hr%vPKdk7l`HW=`pHod!x5SP5?`FZe##HDewnx-^27V{+PU;P|*qV|4orUfxxJ~uvrif^?#4gs8LX22T@QcQ2y^K zhta-QL=}fwyqCdi;X^_3b>#E#^mDX={dxZi*7t@G_kYPhVe9W@QI%ngY9N3o5Jn_L z0!s%H!305sumg$zOWc9Asc8b9B%diL%fB`imQP*I88m}=QRR2TxFK~TGzyJUM diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index de09b3108..728a13de9 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -8680,7 +8680,7 @@ console.log("Failed to get all sessionData. Error: " + JSON.stringify(asyncResult.error)); } }); -'Office.SessionData#setAsync:member(1)': +'Office.SessionData#setAsync:member(2)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/session-data-apis.yaml @@ -8721,7 +8721,7 @@ console.log("Failed to get all sessionData. Error: " + JSON.stringify(asyncResult.error)); } }); -'Office.SessionData#removeAsync:member(1)': +'Office.SessionData#removeAsync:member(2)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/session-data-apis.yaml @@ -8736,7 +8736,7 @@ } } ); -'Office.SessionData#clearAsync:member(1)': +'Office.SessionData#clearAsync:member(2)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/session-data-apis.yaml From b9c5b6c5a80bab072f546649f971b0adcae2d641 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Fri, 21 Aug 2020 16:35:02 -0700 Subject: [PATCH 302/660] Adding Culture info and Direct precedents code samples (#481) * first draft of culture info, date time sample * first draft of direct precedents sample * update culture-info-date-time.yaml, write additional settings to table, add comments to script, clarify IDs * update direct-precedents.yaml, remove extra code from source sample, update title and description, add comments * update direct-precedents.yaml per feedback from Alex and Elizabeth, additional functionality for sample interaction * add api_set, order and id to top of files * commit files auto-created by yarn * Update samples/excel/85-preview-apis/direct-precedents.yaml, grammar adjustment Co-authored-by: Elizabeth Samuel * Update samples/excel/85-preview-apis/direct-precedents.yaml, add clarification Co-authored-by: Elizabeth Samuel * Update samples/excel/85-preview-apis/direct-precedents.yaml, move comment to more relevant location Co-authored-by: Elizabeth Samuel * Update samples/excel/85-preview-apis/culture-info-date-time.yaml, clarify description Co-authored-by: Elizabeth Samuel * Update samples/excel/85-preview-apis/direct-precedents.yaml, clarify description Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Revert "commit files auto-created by yarn" This reverts commit 36d48b8805ff67aa06a3043b4fc5ea7316b45303. * update culture info description and comments, clarify references to system and settings per feedback * simplify culture info setup method, per feedback from Alex * move culture info setup method to end of file, per feedback from Alex * move culture info method comments so that they will be extracted, per feedback from Alex * consolidate values in culture info write method, per feedback from Alex * move direct precedents setup method, per feedback from Alex * add clearFormatting method to direct predecents sample, per feedback * remove unnecessary sheet.load statements from direct precedents sample, per feedback from Alex * update direct precedents sample, specify cell name in cell selection methods, per feedback from Alex * update direct precedents sample, specify address in range.load() per feedback from Alex * update direct precedents sample, clarify variable names, change var to let per feedback from Alex * update direct precedents sample, move comment locations and adjust content per feedback from Alex * update direct precedents sample, remove unnecessary sheet.activate per feedback from Elizabeth * update direct precedents html template description, per feedback from Elizabeth * reformat html * update playlists/excel.yaml and view/excel.json after running yarn start * update direct precedents sample, remove weird duplicated code from end of file * update build.documentation.ts editedFilename so that local instances of repo can have 'sample' in the filepath without breaking the build * update excel.xlsx, run yarn start, commit snippets.yaml and minor sample formatting changes Co-authored-by: Elizabeth Samuel Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- config/build.documentation.ts | 2 +- playlists/excel.yaml | 22 +++ .../culture-info-date-time.yaml | 145 ++++++++++++++ .../85-preview-apis/direct-precedents.yaml | 177 +++++++++++++++++ snippet-extractor-metadata/excel.xlsx | Bin 21935 -> 22079 bytes snippet-extractor-output/snippets.yaml | 180 +++++++++++++----- view/excel.json | 2 + 7 files changed, 480 insertions(+), 48 deletions(-) create mode 100644 samples/excel/85-preview-apis/culture-info-date-time.yaml create mode 100644 samples/excel/85-preview-apis/direct-precedents.yaml diff --git a/config/build.documentation.ts b/config/build.documentation.ts index 1ff06d382..956b59c3e 100644 --- a/config/build.documentation.ts +++ b/config/build.documentation.ts @@ -145,7 +145,7 @@ function getExtractedDataFromSnippet( const whitespaceCountOnFirstLine = spaceFollowedByWordsRegex.exec(fullSnippetTextArray[0])[1].length; // Place snippet location as comment. - const editedFilename = filename.substr(filename.indexOf('samples')).replace(/\\/g, '/'); + 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 += indented diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 36dd49126..b01cdc137 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -975,6 +975,28 @@ group: Preview APIs api_set: ExcelAPI: '1.13' +- 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////samples/excel/85-preview-apis/culture-info-date-time.yaml + group: Preview APIs + api_set: + ExcelAPI: '1.12' +- 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////samples/excel/85-preview-apis/direct-precedents.yaml + group: Preview APIs + api_set: + ExcelAPI: '1.12' - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/samples/excel/85-preview-apis/culture-info-date-time.yaml b/samples/excel/85-preview-apis/culture-info-date-time.yaml new file mode 100644 index 000000000..8ce6a2d4a --- /dev/null +++ b/samples/excel/85-preview-apis/culture-info-date-time.yaml @@ -0,0 +1,145 @@ +order: 5 +id: excel-culture-info-date-time +name: 'Culture info: date and time' +description: This sample shows how to use the read-only cultural settings APIs to retrieve system date and time settings. +host: EXCEL +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)); + + async function displayDateTimeSetting() { + await Excel.run(async (context) => { + context.application.cultureInfo.datetimeFormat.load([ + "longDatePattern", + "shortDatePattern", + "dateSeparator", + "longTimePattern", + "timeSeparator" + ]); + await context.sync(); + + // Use the cultural settings API to retrieve the user's system date and time settings. + const systemLongDatePattern = context.application.cultureInfo.datetimeFormat.longDatePattern; + const systemShortDatePattern = context.application.cultureInfo.datetimeFormat.shortDatePattern; + const systemDateSeparator = context.application.cultureInfo.datetimeFormat.dateSeparator; + const systemLongTimePattern = context.application.cultureInfo.datetimeFormat.longTimePattern; + const systemTimeSeparator = context.application.cultureInfo.datetimeFormat.timeSeparator; + + // Display the date and time settings in your console. + console.log("System date/time settings: "); + console.log(` System long date format: ${systemLongDatePattern}`); + console.log(` System short date format: ${systemShortDatePattern}`); + console.log(` System date separator: ${systemDateSeparator}`); + console.log(` System long time format: ${systemLongTimePattern}`); + console.log(` System time separator: ${systemTimeSeparator}`); + + await context.sync(); + }); + } + + async function writeDateTimeSetting() { + await Excel.run(async (context) => { + context.application.cultureInfo.datetimeFormat.load([ + "longDatePattern", + "shortDatePattern", + "dateSeparator", + "longTimePattern", + "timeSeparator" + ]); + await context.sync(); + + // Use the cultural settings API to retrieve the user's system date and time settings. + const systemLongDatePattern = context.application.cultureInfo.datetimeFormat.longDatePattern; + const systemShortDatePattern = context.application.cultureInfo.datetimeFormat.shortDatePattern; + const systemDateSeparator = context.application.cultureInfo.datetimeFormat.dateSeparator; + const systemLongTimePattern = context.application.cultureInfo.datetimeFormat.longTimePattern; + const systemTimeSeparator = context.application.cultureInfo.datetimeFormat.timeSeparator; + + // Write the date and time settings in your table. + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const dateTimeData = sheet.getRange("A2:B6"); + dateTimeData.values = [ + ["Long date", systemLongDatePattern], + ["Short date", systemShortDatePattern], + ["Date separator", systemDateSeparator], + ["Long time format", systemLongTimePattern], + ["Time separator", systemTimeSeparator] + ]; + + sheet.tables + .getItemAt(0) + .getRange() + .format.autofitColumns(); + + await context.sync(); + }); + } + + /** Create a table with only header content. */ + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + const range = sheet.getRange("A1:B1"); + range.values = [["Culture Setting", "Setting Format"]]; + const table = sheet.tables.add("A1:B6", true); + range.format.autofitColumns(); + 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: |- +

      -

      Try it out on a message from a shared folder.

      +

      Try it out on an item from a shared folder.

      - +
      language: html diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 78cb1bf7441567b505b36563a29c0a65bb239009..9588f32d185dd125b2a47411b6c97758cd454064 100644 GIT binary patch delta 9560 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 WC5LNkNutidKWeePxB&g Date: Tue, 29 Sep 2020 17:04:04 -0700 Subject: [PATCH 311/660] Updating yarn.lock (#498) --- yarn.lock | 538 ++++++++++++++++++++++++++---------------------------- 1 file changed, 256 insertions(+), 282 deletions(-) diff --git a/yarn.lock b/yarn.lock index 2b8de2d19..c8d9f9403 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,23 +3,23 @@ "@babel/code-frame@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" - integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== dependencies: - "@babel/highlight" "^7.8.3" + "@babel/highlight" "^7.10.4" -"@babel/helper-validator-identifier@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz#ad53562a7fc29b3b9a91bbf7d10397fd146346ed" - integrity sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw== +"@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/highlight@^7.8.3": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" - integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ== +"@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== dependencies: - "@babel/helper-validator-identifier" "^7.9.0" + "@babel/helper-validator-identifier" "^7.10.4" chalk "^2.0.0" js-tokens "^4.0.0" @@ -37,11 +37,6 @@ resolved "https://registry.yarnpkg.com/@types/chalk/-/chalk-0.4.31.tgz#a31d74241a6b1edbb973cf36d97a2896834a51f9" integrity sha1-ox10JBprHtu5c8822XooloNKUfk= -"@types/events@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" - integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== - "@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" @@ -50,23 +45,22 @@ "@types/node" "*" "@types/glob@*": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" - integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== dependencies: - "@types/events" "*" "@types/minimatch" "*" "@types/node" "*" "@types/js-yaml@^3.12.0": - version "3.12.2" - resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.2.tgz#a35a1809c33a68200fb6403d1ad708363c56470a" - integrity sha512-0CFu/g4mDSNkodVwWijdlr8jH7RoplRWNgovjFLEZeT+QEbbZXjBmCe3HwaWheAlCbHwomTwzZoSedeOycABug== + version "3.12.5" + resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.5.tgz#136d5e6a57a931e1cce6f9d8126aa98a9c92a6bb" + integrity sha512-JCcp6J0GV66Y4ZMDAQCXot4xprYB+Zfd3meK9+INSJeVZwJmHAW30BBEEkPzXswMXuiyReUGOP3GxrADc9wPww== "@types/lodash@^4.14.122": - version "4.14.149" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.149.tgz#1342d63d948c6062838fbf961012f74d4e638440" - integrity sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ== + version "4.14.161" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.161.tgz#a21ca0777dabc6e4f44f3d07f37b765f54188b18" + integrity sha512-EP6O3Jkr7bXvZZSZYlsgt5DIjiGr0dXP1/jVEwVLTFgg0d+3lWVQkRavYVQszV7dYUwvg0B8R0MBDpcmXg7XIA== "@types/minimatch@*": version "3.0.3" @@ -74,19 +68,19 @@ integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/node@*": - version "13.9.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.9.2.tgz#ace1880c03594cc3e80206d96847157d8e7fa349" - integrity sha512-bnoqK579sAYrQbp73wwglccjJ4sfRdKU7WNEZ5FW4K2U6Kc0/eZ5kvXG0JKsEKFB50zrFmfFt52/cvBbZa7eXg== + version "14.11.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.2.tgz#2de1ed6670439387da1c9f549a2ade2b0a799256" + integrity sha512-jiE3QIxJ8JLNcb1Ps6rDbysDhN4xa8DJJvuC9prr6w+1tIh+QAbYyNF3tyiZNLDBIuBCf4KEcV2UvQm/V60xfA== "@types/node@^11.10.5": - version "11.15.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-11.15.7.tgz#97559c6d7f8b15dcf275365512799f405c20cd4e" - integrity sha512-3c3Kc7VIdE5UpqpmztRy7FU+turZgIurGnwpGFy/fRFOirfPc7ZnoFL83qVoqEDENJENqDhtGyQZ5fkXNQ6Qkw== + 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== "@types/shelljs@^0.8.3": - version "0.8.6" - resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.8.6.tgz#45193a51df99e0f00513c39a2152832399783221" - integrity sha512-svx2eQS268awlppL/P8wgDLBrsDXdKznABHJcuqXyWpSKJgE1s2clXlBvAwbO/lehTmG06NtEWJRkAk4tAgenA== + version "0.8.8" + resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.8.8.tgz#e439c69929b88a2c8123c1a55e09eb708315addf" + integrity sha512-lD3LWdg6j8r0VRBFahJVaxoW0SIcswxKaFUrmKl33RJVeeoNYQAz4uqCJ5Z6v4oIBOsC5GozX+I5SorIKiTcQA== dependencies: "@types/glob" "*" "@types/node" "*" @@ -125,10 +119,10 @@ agentkeepalive@^3.4.1: dependencies: humanize-ms "^1.2.1" -ajv@^6.5.5: - version "6.12.3" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" - integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== +ajv@^6.12.3: + version "6.12.5" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.5.tgz#19b0e8bae8f476e5ba666300387775fb1a00a4da" + integrity sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" @@ -152,12 +146,17 @@ 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-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: +ansi-styles@^3.2.0, 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== @@ -232,9 +231,9 @@ aws-sign2@~0.7.0: integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" - integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== + version "1.10.1" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428" + integrity sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA== balanced-match@^1.0.0: version "1.0.0" @@ -253,7 +252,7 @@ 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.7: +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== @@ -310,9 +309,9 @@ buffer-from@^1.0.0: integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== buffer-indexof-polyfill@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz#a9fb806ce8145d5428510ce72f278bb363a638bf" - integrity sha1-qfuAbOgUXVQoUQznLyeLs2OmOL8= + 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" @@ -375,6 +374,11 @@ camelcase@^4.0.0, camelcase@^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" @@ -485,14 +489,14 @@ cliui@^3.2.0: strip-ansi "^3.0.1" wrap-ansi "^2.0.0" -cliui@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" - integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== +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 "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" clone@^1.0.2: version "1.0.4" @@ -578,11 +582,11 @@ config-chain@^1.1.12: proto-list "~1.2.1" configstore@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" - integrity sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw== + 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.1.0" + dot-prop "^4.2.1" graceful-fs "^4.1.2" make-dir "^1.0.0" unique-string "^1.0.0" @@ -627,17 +631,6 @@ cross-spawn@^5.0.1: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - 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" @@ -674,7 +667,7 @@ debuglog@*, debuglog@^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.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= @@ -696,7 +689,7 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -define-properties@^1.1.2, define-properties@^1.1.3: +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== @@ -736,10 +729,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.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== +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" @@ -783,6 +776,11 @@ editor@~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== + encoding@^0.1.11: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" @@ -838,6 +836,24 @@ es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: 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" @@ -896,19 +912,6 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.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" @@ -949,7 +952,7 @@ find-npm-prefix@^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, find-up@^2.1.0: +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= @@ -1075,7 +1078,7 @@ genfun@^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.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== @@ -1097,6 +1100,11 @@ get-caller-file@^1.0.1: 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" @@ -1163,11 +1171,11 @@ har-schema@^2.0.0: integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= har-validator@~5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== dependencies: - ajv "^6.5.5" + ajv "^6.12.3" har-schema "^2.0.0" has-ansi@^2.0.0: @@ -1182,7 +1190,7 @@ 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.0, has-symbols@^1.0.1: +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== @@ -1313,20 +1321,15 @@ init-package-json@^1.10.3: validate-npm-package-name "^3.0.0" interpret@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" - integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== + version "1.4.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= -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" - integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== - ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" @@ -1343,9 +1346,9 @@ is-arrayish@^0.2.1: integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= is-callable@^1.1.4, is-callable@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" - integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== + 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" @@ -1386,6 +1389,11 @@ is-installed-globally@^0.1.0: global-dirs "^0.1.0" is-path-inside "^1.0.0" +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" @@ -1408,10 +1416,10 @@ is-redirect@^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: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz#ece38e389e490df0dc21caea2bd596f987f767ff" - integrity sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw== +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" @@ -1463,9 +1471,9 @@ js-tokens@^4.0.0: integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + 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== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -1475,11 +1483,16 @@ 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.1, json-parse-better-errors@^1.0.2: +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: + 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" @@ -1536,14 +1549,7 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== - dependencies: - invert-kv "^2.0.0" - -libcipm@^4.0.7: +libcipm@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/libcipm/-/libcipm-4.0.8.tgz#dcea4919e10dfbce420327e63901613b9141bc89" integrity sha512-IN3hh2yDJQtZZ5paSV4fbvJg4aHxCCg5tcZID/dSVlTuUiWktsgaldVljJv6Z5OUlYspx6xQkbR0efNodnIrOA== @@ -1663,10 +1669,10 @@ libnpmteam@^1.0.2: get-stream "^4.0.0" npm-registry-fetch "^4.0.0" -libnpx@^10.2.2: - version "10.2.3" - resolved "https://registry.yarnpkg.com/libnpx/-/libnpx-10.2.3.tgz#d5e01f12d383ffca9a947807ca6a8f587d38fe2c" - integrity sha512-bCvdARu55fLQBhMfcYGF0GznF1kB2sqxq/9zKZ3652M8DDFWpVpCnpgzjzn0yWMDMez5ZGMBiX24yR11uEYZVQ== +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" @@ -1675,7 +1681,7 @@ libnpx@^10.2.2: update-notifier "^2.3.0" which "^1.3.0" y18n "^4.0.0" - yargs "^11.0.0" + yargs "^14.2.3" listenercount@~1.0.1: version "1.0.1" @@ -1709,9 +1715,9 @@ locate-path@^3.0.0: path-exists "^3.0.0" lock-verify@^2.0.2, lock-verify@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/lock-verify/-/lock-verify-2.2.0.tgz#12432feb68bb647071c78c44bde16029a0f7d935" - integrity sha512-BhM1Vqsu7x0s+EalTifNjdDPks+ZjdAhComvnA6VcCIlDOI5ouELXqAe1BYuEIP4zGN0W08xVm6byJV1LnCiJg== + version "2.2.1" + resolved "https://registry.yarnpkg.com/lock-verify/-/lock-verify-2.2.1.tgz#81107948c51ed16f97b96ff8b60675affb243fc1" + integrity sha512-n0Zw2DVupKfZMazy/HIFVNohJ1z8fIoZ77WBnyyBGG6ixw83uJNyrbiJvvHWe1QKkGiBCjj8RCPlymltliqEww== dependencies: "@iarna/cli" "^1.2.0" npm-package-arg "^6.1.0" @@ -1795,9 +1801,9 @@ lodash.without@~4.4.0: integrity sha1-PNRXSgC2e643OpS3SHcmQFB7eqw= lodash@^4.17.19: - version "4.17.19" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" - integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== + 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" @@ -1843,17 +1849,10 @@ make-fetch-happen@^5.0.0: socks-proxy-agent "^4.0.0" ssri "^6.0.0" -map-age-cleaner@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - -meant@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.1.tgz#66044fea2f23230ec806fb515efea29c44d2115d" - integrity sha512-UakVLFjKkbbUwNWJ2frVLnnAtbb7D7DsloxRd3s/gDpI8rdv8W5Hp3NaDb+POBI1fQdeussER6NB8vpcRURvlg== +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" @@ -1862,15 +1861,6 @@ mem@^1.1.0: dependencies: mimic-fn "^1.0.0" -mem@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" - integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.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" @@ -1888,11 +1878,6 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== -mimic-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -1936,7 +1921,7 @@ mississippi@^3.0.0: stream-each "^1.1.0" through2 "^2.0.0" -"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.5, mkdirp@~0.5.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== @@ -1970,11 +1955,6 @@ mute-stream@~0.0.4: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - 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" @@ -2029,7 +2009,7 @@ normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package- semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -npm-audit-report@^1.3.2: +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== @@ -2056,7 +2036,7 @@ npm-install-checks@^3.0.2: dependencies: semver "^2.3.0 || 3.x || 4 || 5" -npm-lifecycle@^3.0.0, npm-lifecycle@^3.1.4: +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== @@ -2117,10 +2097,10 @@ npm-profile@^4.0.2, npm-profile@^4.0.4: figgy-pudding "^3.4.1" npm-registry-fetch "^4.0.0" -npm-registry-fetch@^4.0.0, npm-registry-fetch@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-4.0.5.tgz#cb87cf7f25bfb048d6c3ee19d115bebf93ea5bfa" - integrity sha512-yQ0/U4fYpCCqmueB2g8sc+89ckQ3eXpmU4+Yi2j5o/r0WkKvE2+Y0tK3DEILAtn2UaQTkjTHxIXe2/CSdit+/Q== +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" @@ -2143,9 +2123,9 @@ npm-user-validate@~1.0.0: integrity sha1-jOyg9c6gTU6TUZ73LQVXp1Ei6VE= npm@^6.14.6: - version "6.14.6" - resolved "https://registry.yarnpkg.com/npm/-/npm-6.14.6.tgz#1a81ce1fac2bf5457dbf6342ceed503627ff228f" - integrity sha512-axnz6iHFK6WPE0js/+mRp+4IOwpHn5tJEw5KB6FiCU764zmffrhsYHbSHi2kKqNkRBt53XasXjngZfBD3FQzrQ== + version "6.14.8" + resolved "https://registry.yarnpkg.com/npm/-/npm-6.14.8.tgz#64ef754345639bc035982ec3f609353c8539033c" + integrity sha512-HBZVBMYs5blsj94GTeQZel7s9odVuuSUHy1+AlZh7rPVux1os2ashvEGLy/STNK7vUjbrCg5Kq9/GXisJgdf6A== dependencies: JSONStream "^1.3.5" abbrev "~1.1.1" @@ -2153,7 +2133,7 @@ npm@^6.14.6: ansistyles "~0.1.3" aproba "^2.0.0" archy "~1.0.0" - bin-links "^1.1.7" + bin-links "^1.1.8" bluebird "^3.5.5" byte-size "^5.0.1" cacache "^12.0.3" @@ -2165,7 +2145,6 @@ npm@^6.14.6: cmd-shim "^3.0.3" columnify "~1.5.4" config-chain "^1.1.12" - debuglog "*" detect-indent "~5.0.0" detect-newline "^2.1.0" dezalgo "~1.0.3" @@ -2174,13 +2153,12 @@ npm@^6.14.6: find-npm-prefix "^1.0.2" fs-vacuum "~1.2.10" fs-write-stream-atomic "~1.0.10" - gentle-fs "^2.3.0" + 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" - imurmurhash "*" infer-owner "^1.0.4" inflight "~1.0.6" inherits "^2.0.4" @@ -2189,44 +2167,38 @@ npm@^6.14.6: is-cidr "^3.0.0" json-parse-better-errors "^1.0.2" lazy-property "~1.0.0" - libcipm "^4.0.7" + 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.2" + libnpx "^10.2.4" lock-verify "^2.1.0" lockfile "^1.0.4" - lodash._baseindexof "*" lodash._baseuniq "~4.6.0" - lodash._bindcallback "*" - lodash._cacheindexof "*" - lodash._createcache "*" - lodash._getnative "*" lodash.clonedeep "~4.5.0" - lodash.restparam "*" lodash.union "~4.6.0" lodash.uniq "~4.5.0" lodash.without "~4.4.0" lru-cache "^5.1.1" - meant "~1.0.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.2" + npm-audit-report "^1.3.3" npm-cache-filename "~1.0.2" npm-install-checks "^3.0.2" - npm-lifecycle "^3.1.4" + 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.5" + npm-registry-fetch "^4.0.7" npm-user-validate "~1.0.0" npmlog "~4.1.2" once "~1.4.0" @@ -2296,25 +2268,25 @@ 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.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.11, object-keys@^1.0.12, object-keys@^1.1.1: +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.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + 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.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" + 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" @@ -2337,9 +2309,9 @@ onetime@^1.0.0: integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= opener@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed" - integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA== + 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" @@ -2355,15 +2327,6 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" -os-locale@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" - os-tmpdir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -2377,21 +2340,11 @@ osenv@^0.1.4, osenv@^0.1.5: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= - 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-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" - integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== - p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -2507,7 +2460,7 @@ path-is-inside@^1.0.1, path-is-inside@^1.0.2, path-is-inside@~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, path-key@^2.0.1: +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= @@ -2642,9 +2595,9 @@ qs@~6.5.2: integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== query-string@^6.8.2: - version "6.13.1" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.13.1.tgz#d913ccfce3b4b3a713989fe6d39466d92e71ccad" - integrity sha512-RfoButmcK+yCta1+FuU8REvisx1oEzhMKwhLUNcepQTPGcNMp1sIqjnfCtfnvGSQZQEhaBHvccujtWoUV3TTbA== + 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" @@ -2687,16 +2640,14 @@ read-installed@~4.0.3: graceful-fs "^4.1.2" "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.1" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.1.tgz#16aa66c59e7d4dad6288f179dd9295fd59bb98f1" - integrity sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+A== + 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== dependencies: glob "^7.1.1" - json-parse-better-errors "^1.0.1" + json-parse-even-better-errors "^2.3.0" normalize-package-data "^2.0.0" npm-normalize-package-bin "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.2" read-package-tree@^5.3.1: version "5.3.1" @@ -2844,19 +2795,17 @@ require-main-filename@^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.3.2: - version "1.15.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" - integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== - dependencies: - path-parse "^1.0.6" - -resolve@^1.10.0: +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== @@ -2924,7 +2873,7 @@ semver-diff@^2.0.0: 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.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: +"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: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -2959,9 +2908,9 @@ shebang-regex@^1.0.0: integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= shelljs@^0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097" - integrity sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A== + version "0.8.4" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" + integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== dependencies: glob "^7.0.0" interpret "^1.0.0" @@ -3033,9 +2982,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" - integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + 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" @@ -3112,6 +3061,15 @@ 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" @@ -3166,6 +3124,13 @@ 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== + 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" @@ -3254,15 +3219,15 @@ tough-cookie@~2.5.0: resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= -tslib@^1.10.0, tslib@^1.8.1: - version "1.11.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" - integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== +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== tslint@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.0.tgz#c6c611b8ba0eed1549bf5a59ba05a7732133d851" - integrity sha512-fXjYd/61vU6da04E505OZQGb2VCN2Mq3doeWcOIryuG+eqdmFUXTYVwdhnbEu2k46LNLgUYt9bI5icQze/j0bQ== + version "6.1.3" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.3.tgz#5c23b2eccc32487d5523bd3a470e9aa31789d904" + integrity sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg== dependencies: "@babel/code-frame" "^7.0.0" builtin-modules "^1.1.1" @@ -3272,10 +3237,10 @@ tslint@^6.1.0: glob "^7.1.1" js-yaml "^3.13.1" minimatch "^3.0.4" - mkdirp "^0.5.1" + mkdirp "^0.5.3" resolve "^1.3.2" semver "^5.3.0" - tslib "^1.10.0" + tslib "^1.13.0" tsutils "^2.29.0" tsutils@^2.29.0: @@ -3303,9 +3268,9 @@ typedarray@^0.0.6: integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= typescript@^3.3.3333: - version "3.8.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" - integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== + 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" @@ -3385,9 +3350,9 @@ update-notifier@^2.2.0, update-notifier@^2.3.0, update-notifier@^2.5.0: xdg-basedir "^3.0.0" uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + version "4.4.0" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" + integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== dependencies: punycode "^2.1.0" @@ -3492,6 +3457,15 @@ wrap-ansi@^2.0.0: 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" @@ -3546,6 +3520,14 @@ yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: 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" @@ -3553,30 +3535,22 @@ yargs-parser@^7.0.0: dependencies: camelcase "^4.1.0" -yargs-parser@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" - integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= - dependencies: - camelcase "^4.1.0" - -yargs@^11.0.0: - version "11.1.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.1.tgz#5052efe3446a4df5ed669c995886cc0f13702766" - integrity sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw== +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 "^4.0.0" - decamelize "^1.1.1" - find-up "^2.1.0" - get-caller-file "^1.0.1" - os-locale "^3.1.0" + 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 "^1.0.1" + require-main-filename "^2.0.0" set-blocking "^2.0.0" - string-width "^2.0.0" + string-width "^3.0.0" which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^9.0.2" + y18n "^4.0.0" + yargs-parser "^15.0.1" yargs@^8.0.2: version "8.0.2" From b9e64e60607e2737e25ac4b50345eddaf2126300 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 1 Oct 2020 17:21:45 -0700 Subject: [PATCH 312/660] Removing check for isFiltered (#496) --- .../pivottable-pivotfilters.yaml | 38 ++++++------- snippet-extractor-output/snippets.yaml | 57 +++++++++---------- 2 files changed, 45 insertions(+), 50 deletions(-) diff --git a/samples/excel/38-pivottable/pivottable-pivotfilters.yaml b/samples/excel/38-pivottable/pivottable-pivotfilters.yaml index 25a06f473..d824dc378 100644 --- a/samples/excel/38-pivottable/pivottable-pivotfilters.yaml +++ b/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -80,16 +80,15 @@ script: // Get the "Farm" field. const field = pivotTable.hierarchies.getItem("Farm").fields.getItem("Farm"); - // See if any value filter is currently applied to this field, if not, create a new one and apply it to the field. - if (field.isFiltered(Excel.PivotFilterType.value)) { - // 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" - }; - field.applyFilter({ valueFilter: filter }); - } + // 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(); }); @@ -105,16 +104,15 @@ script: // Get the "Type" field. const field = pivotTable.hierarchies.getItem("Type").fields.getItem("Type"); - // See if any label filter is currently applied to this field, if not, create a new one and apply it to the field. - if (field.isFiltered(Excel.PivotFilterType.label)) { - // 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 - }; - field.applyFilter({ labelFilter: filter }); - } + // 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(); }); diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index abb0a3c6f..9d30c2935 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -2474,16 +2474,15 @@ // Get the "Type" field. const field = pivotTable.hierarchies.getItem("Type").fields.getItem("Type"); - // See if any label filter is currently applied to this field, if not, create a new one and apply it to the field. - if (field.isFiltered(Excel.PivotFilterType.label)) { - // 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 - }; - field.applyFilter({ labelFilter: filter }); - } + // 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(); }); @@ -2527,16 +2526,15 @@ // Get the "Farm" field. const field = pivotTable.hierarchies.getItem("Farm").fields.getItem("Farm"); - // See if any value filter is currently applied to this field, if not, create a new one and apply it to the field. - if (field.isFiltered(Excel.PivotFilterType.value)) { - // 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" - }; - field.applyFilter({ valueFilter: filter }); - } + // 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(); }); @@ -2554,16 +2552,15 @@ // Get the "Farm" field. const field = pivotTable.hierarchies.getItem("Farm").fields.getItem("Farm"); - // See if any value filter is currently applied to this field, if not, create a new one and apply it to the field. - if (field.isFiltered(Excel.PivotFilterType.value)) { - // 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" - }; - field.applyFilter({ valueFilter: filter }); - } + // 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(); }); From b273e5648dc18cb8ef379bb351f11ae234803d0f Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 20 Oct 2020 10:13:06 -0700 Subject: [PATCH 313/660] [Outlook] Promote 1.9 snippets from preview (#501) --- playlists/outlook.yaml | 112 +++++++++--------- .../display-existing-appointment.yaml | 8 +- .../display-existing-message.yaml | 8 +- .../display-new-appointment.yaml | 10 +- .../display-new-message.yaml | 10 +- .../display-reply-forms.yaml | 8 +- .../display-reply-with-attachments.yaml | 10 +- snippet-extractor-output/snippets.yaml | 60 +++++----- view/outlook.json | 12 +- 9 files changed, 119 insertions(+), 119 deletions(-) rename samples/outlook/{99-preview-apis => 55-display-items}/display-existing-appointment.yaml (92%) rename samples/outlook/{99-preview-apis => 55-display-items}/display-existing-message.yaml (92%) rename samples/outlook/{99-preview-apis => 55-display-items}/display-new-appointment.yaml (90%) rename samples/outlook/{99-preview-apis => 55-display-items}/display-new-message.yaml (91%) rename samples/outlook/{99-preview-apis => 55-display-items}/display-reply-forms.yaml (94%) rename samples/outlook/{99-preview-apis => 55-display-items}/display-reply-with-attachments.yaml (91%) diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 1c3fc523c..95a8d0930 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -268,6 +268,62 @@ 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////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////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////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////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////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////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 @@ -530,62 +586,6 @@ group: Preview APIs api_set: Mailbox: preview -- 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////samples/outlook/99-preview-apis/display-existing-appointment.yaml - group: Preview APIs - api_set: - Mailbox: preview -- 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////samples/outlook/99-preview-apis/display-existing-message.yaml - group: Preview APIs - api_set: - Mailbox: preview -- 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////samples/outlook/99-preview-apis/display-new-appointment.yaml - group: Preview APIs - api_set: - Mailbox: preview -- 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////samples/outlook/99-preview-apis/display-new-message.yaml - group: Preview APIs - api_set: - Mailbox: preview -- 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////samples/outlook/99-preview-apis/display-reply-forms.yaml - group: Preview APIs - api_set: - Mailbox: preview -- 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////samples/outlook/99-preview-apis/display-reply-with-attachments.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 diff --git a/samples/outlook/99-preview-apis/display-existing-appointment.yaml b/samples/outlook/55-display-items/display-existing-appointment.yaml similarity index 92% rename from samples/outlook/99-preview-apis/display-existing-appointment.yaml rename to samples/outlook/55-display-items/display-existing-appointment.yaml index a09e2ae32..5d89ddc92 100644 --- a/samples/outlook/99-preview-apis/display-existing-appointment.yaml +++ b/samples/outlook/55-display-items/display-existing-appointment.yaml @@ -3,7 +3,7 @@ name: Open an appointment description: Displays existing appointment in a separate window host: OUTLOOK api_set: - Mailbox: preview + Mailbox: '1.9' script: content: | // Pre-populate with current item ID. @@ -21,7 +21,7 @@ script: var itemId = $("#itemId").val(); // The async version will return error 9049 if the item is not found. - // The async version is only available in preview. + // The async version is only available starting with requirement set 1.9. Office.context.mailbox.displayAppointmentFormAsync(itemId, function(asyncResult) { console.log("Result: " + JSON.stringify(asyncResult)); }); @@ -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/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/display-existing-message.yaml b/samples/outlook/55-display-items/display-existing-message.yaml similarity index 92% rename from samples/outlook/99-preview-apis/display-existing-message.yaml rename to samples/outlook/55-display-items/display-existing-message.yaml index 02ac7fadf..6a95ab594 100644 --- a/samples/outlook/99-preview-apis/display-existing-message.yaml +++ b/samples/outlook/55-display-items/display-existing-message.yaml @@ -3,7 +3,7 @@ name: Open a message description: Displays an existing message in a separate window host: OUTLOOK api_set: - Mailbox: preview + Mailbox: '1.9' script: content: | // Pre-populate with current item ID. @@ -21,7 +21,7 @@ script: var itemId = $("#itemId").val(); // The async version will return error 9049 if the item is not found. - // The async version is only available in preview. + // The async version is only available starting with requirement set 1.9. Office.context.mailbox.displayMessageFormAsync(itemId, function (asyncResult) { console.log("Result: " + JSON.stringify(asyncResult)); }); @@ -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/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/display-new-appointment.yaml b/samples/outlook/55-display-items/display-new-appointment.yaml similarity index 90% rename from samples/outlook/99-preview-apis/display-new-appointment.yaml rename to samples/outlook/55-display-items/display-new-appointment.yaml index 16cd0a84c..727832dd4 100644 --- a/samples/outlook/99-preview-apis/display-new-appointment.yaml +++ b/samples/outlook/55-display-items/display-new-appointment.yaml @@ -3,7 +3,7 @@ name: Create a new appointment description: Opens a new appointment form with sample content and a few fields populated. host: OUTLOOK api_set: - Mailbox: preview + Mailbox: '1.9' script: content: | $("#run").click(run); @@ -31,8 +31,8 @@ script: var end = new Date(); end.setHours(start.getHours() + 1); - // The async version is only available in preview, and provides - // a callback when the new appointment form has been created. + // 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"], @@ -81,8 +81,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/display-new-message.yaml b/samples/outlook/55-display-items/display-new-message.yaml similarity index 91% rename from samples/outlook/99-preview-apis/display-new-message.yaml rename to samples/outlook/55-display-items/display-new-message.yaml index 2ac06ca7e..fe126b5b7 100644 --- a/samples/outlook/99-preview-apis/display-new-message.yaml +++ b/samples/outlook/55-display-items/display-new-message.yaml @@ -3,7 +3,7 @@ name: Create a new message description: 'Opens a new message form with a sample content, recipients, and an inline image attachment' host: OUTLOOK api_set: - Mailbox: preview + Mailbox: '1.9' script: content: | $("#run").click(run); @@ -27,8 +27,8 @@ script: } function runAsync() { - // The async version is only available in preview, and - // provides a callback when the new message form has been created. + // The async version is only available starting with requirement set 1.9, + // and provides a callback when the new message form has been created. Office.context.mailbox.displayNewMessageFormAsync( { toRecipients: Office.context.mailbox.item.to, // Copies the To line from current item @@ -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/outlook/99-preview-apis/display-reply-forms.yaml b/samples/outlook/55-display-items/display-reply-forms.yaml similarity index 94% rename from samples/outlook/99-preview-apis/display-reply-forms.yaml rename to samples/outlook/55-display-items/display-reply-forms.yaml index 4d2904a06..fbf9ff7d9 100644 --- a/samples/outlook/99-preview-apis/display-reply-forms.yaml +++ b/samples/outlook/55-display-items/display-reply-forms.yaml @@ -3,7 +3,7 @@ name: Create replies description: Opens reply and reply-all message forms with sample reply content. host: OUTLOOK api_set: - Mailbox: preview + Mailbox: '1.9' script: content: | $("#display-reply-form").click(displayReplyForm); @@ -11,7 +11,7 @@ script: $("#display-reply-all-form").click(displayReplyAllForm); $("#display-reply-all-form-async").click(displayReplyAllFormAsync); - // Async functions are only currently available in preview. + // The async version is only available starting with requirement set 1.9. function displayReplyForm() { Office.context.mailbox.item.displayReplyForm("This is a reply with some text in italics."); } @@ -73,8 +73,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/display-reply-with-attachments.yaml b/samples/outlook/55-display-items/display-reply-with-attachments.yaml similarity index 91% rename from samples/outlook/99-preview-apis/display-reply-with-attachments.yaml rename to samples/outlook/55-display-items/display-reply-with-attachments.yaml index 7be9be7af..ff2d97913 100644 --- a/samples/outlook/99-preview-apis/display-reply-with-attachments.yaml +++ b/samples/outlook/55-display-items/display-reply-with-attachments.yaml @@ -3,7 +3,7 @@ name: 'Create a reply, with attachments' description: Opens a reply message forms and adds sample attachments. host: OUTLOOK api_set: - Mailbox: preview + Mailbox: '1.9' script: content: | $("#run").click(run); @@ -26,8 +26,8 @@ script: } function runAsync() { - // The async version is only available in preview, and - // provides a callback when the new appointment form has been created. + // 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
      ", @@ -72,8 +72,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 9d30c2935..66c0c14a1 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -7228,7 +7228,7 @@ 'Office.Mailbox#displayAppointmentForm:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/display-existing-appointment.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/99-preview-apis/display-existing-message.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/99-preview-apis/display-new-appointment.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/99-preview-apis/display-new-message.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/99-preview-apis/display-reply-forms.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/99-preview-apis/display-reply-with-attachments.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/99-preview-apis/display-reply-forms.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/99-preview-apis/display-reply-with-attachments.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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,28 +7333,28 @@ 'Office.AppointmentRead#displayReplyAllForm:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/display-reply-forms.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/99-preview-apis/display-reply-forms.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/99-preview-apis/display-existing-appointment.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-existing-appointment.yaml var itemId = $("#itemId").val(); // The async version will return error 9049 if the item is not found. - // The async version is only available in preview. + // The async version is only available starting with requirement set 1.9. Office.context.mailbox.displayAppointmentFormAsync(itemId, function(asyncResult) { @@ -7363,14 +7363,14 @@ 'Office.Mailbox#displayMessageFormAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/display-existing-message.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-existing-message.yaml var itemId = $("#itemId").val(); // The async version will return error 9049 if the item is not found. - // The async version is only available in preview. + // The async version is only available starting with requirement set 1.9. Office.context.mailbox.displayMessageFormAsync(itemId, function (asyncResult) { @@ -7379,7 +7379,7 @@ 'Office.Mailbox#displayNewAppointmentFormAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/display-new-appointment.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-new-appointment.yaml var start = new Date(); @@ -7388,9 +7388,9 @@ end.setHours(start.getHours() + 1); - // The async version is only available in preview, and provides + // The async version is only available starting with requirement set 1.9, - // a callback when the new appointment form has been created. + // and provides a callback when the new appointment form has been created. Office.context.mailbox.displayNewAppointmentFormAsync( { @@ -7410,11 +7410,11 @@ 'Office.Mailbox#displayNewMessageFormAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/display-new-message.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-new-message.yaml - // The async version is only available in preview, and + // The async version is only available starting with requirement set 1.9, - // provides a callback when the new message form has been created. + // and provides a callback when the new message form has been created. Office.context.mailbox.displayNewMessageFormAsync( { @@ -7438,7 +7438,7 @@ 'Office.AppointmentRead#displayReplyFormAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/display-reply-forms.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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,11 +7448,11 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/display-reply-with-attachments.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-reply-with-attachments.yaml - // The async version is only available in preview, and + // The async version is only available starting with requirement set 1.9, - // provides a callback when the new appointment form has been created. + // and provides a callback when the new appointment form has been created. Office.context.mailbox.item.displayReplyFormAsync( { @@ -7469,7 +7469,7 @@ 'Office.MessageRead#displayReplyFormAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/display-reply-forms.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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,11 +7479,11 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/display-reply-with-attachments.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-reply-with-attachments.yaml - // The async version is only available in preview, and + // The async version is only available starting with requirement set 1.9, - // provides a callback when the new appointment form has been created. + // and provides a callback when the new appointment form has been created. Office.context.mailbox.item.displayReplyFormAsync( { @@ -7500,7 +7500,7 @@ 'Office.AppointmentRead#displayReplyAllFormAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/display-reply-forms.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/99-preview-apis/display-reply-forms.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-reply-forms.yaml Office.context.mailbox.item.displayReplyAllFormAsync("This is a reply ALL with some bold text.", function( diff --git a/view/outlook.json b/view/outlook.json index f4b2ce723..4819456ef 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -28,6 +28,12 @@ "outlook-recurrence-get-series-id": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/50-recurrence/get-series-id.yaml", "outlook-recurrence-get-recurrence-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/50-recurrence/get-recurrence-read.yaml", "outlook-recurrence-get-set-recurrence-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml", + "outlook-display-items-display-existing-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-existing-appointment.yaml", + "outlook-display-items-display-existing-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-existing-message.yaml", + "outlook-display-items-display-new-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-new-appointment.yaml", + "outlook-display-items-display-new-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-new-message.yaml", + "outlook-display-items-display-reply-forms": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-reply-forms.yaml", + "outlook-display-items-display-reply-with-attachments": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-reply-with-attachments.yaml", "outlook-delegates-and-shared-folders-get-shared-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml", "outlook-entities-and-regex-matches-basic-entities": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml", "outlook-entities-and-regex-matches-contextual": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/75-entities-and-regex-matches/contextual.yaml", @@ -56,12 +62,6 @@ "outlook-other-item-apis-get-date-time-created-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml", "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", - "outlook-display-items-display-existing-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/display-existing-appointment.yaml", - "outlook-display-items-display-existing-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/display-existing-message.yaml", - "outlook-display-items-display-new-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/display-new-appointment.yaml", - "outlook-display-items-display-new-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/display-new-message.yaml", - "outlook-display-items-display-reply-forms": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/display-reply-forms.yaml", - "outlook-display-items-display-reply-with-attachments": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/display-reply-with-attachments.yaml", "outlook-session-data-apis": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/session-data-apis.yaml", "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/work-with-client-signatures.yaml" } \ No newline at end of file From 1a93e5ff35facee8096160f9d27d558a3d67a00b Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 27 Oct 2020 11:33:47 -0700 Subject: [PATCH 314/660] [Outlook] Clean up (#503) --- snippet-extractor-metadata/outlook.xlsx | Bin 20410 -> 20377 bytes snippet-extractor-output/snippets.yaml | 57 ++++++++++++------------ 2 files changed, 28 insertions(+), 29 deletions(-) diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 9588f32d185dd125b2a47411b6c97758cd454064..90167dbfa6402e46ce9fdeb6b9d142b925879bb6 100644 GIT binary patch delta 8127 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 delta 8087 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 // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml @@ -5633,7 +5633,7 @@ console.error(asyncResult.error); } }); -'Office.Organizer#getAsync:member(2)': +'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 @@ -6045,7 +6045,7 @@ Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); -'Office.NotificationMessages#addAsync:member(2)': +'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 @@ -6102,13 +6102,13 @@ }; Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); -'Office.NotificationMessages#getAllAsync:member(2)': +'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 Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); -'Office.NotificationMessages#replaceAsync:member(2)': +'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 @@ -6124,7 +6124,7 @@ persistent: false }, handleResult); -'Office.NotificationMessages#removeAsync:member(2)': +'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 @@ -6267,7 +6267,7 @@ } } ); -'Office.AppointmentCompose#getAttachmentsAsync:member(2)': +'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 @@ -6287,7 +6287,7 @@ } } }); -'Office.MessageCompose#getAttachmentsAsync:member(2)': +'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 @@ -6835,7 +6835,7 @@ console.error(asyncResult.error); } }); -'Office.Categories#addAsync:member(2)': +'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 @@ -6865,7 +6865,7 @@ console.error(asyncResult.error); } }); -'Office.Categories#removeAsync:member(2)': +'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 @@ -6961,7 +6961,7 @@ console.error(asyncResult.error); } }); -'Office.MasterCategories#addAsync:member(2)': +'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 @@ -6982,7 +6982,7 @@ console.log("masterCategories.addAsync call failed with error: " + asyncResult.error.message); } }); -'Office.MasterCategories#removeAsync:member(2)': +'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 @@ -7066,7 +7066,7 @@ } console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); }); -'Office.Recurrence#getAsync:member(2)': +'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 @@ -7083,7 +7083,7 @@ console.error(asyncResult.error); } }); -'Office.Recurrence#setAsync:member(2)': +'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 @@ -8382,7 +8382,6 @@ } } ); -'Office.Body#setSignatureAsync: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 @@ -8401,7 +8400,7 @@ console.error(asyncResult.error); } }); -'Office.AppointmentCompose#disableClientSignatureAsync:member(2)': +'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 @@ -8416,7 +8415,7 @@ console.error(asyncResult.error); } }); -'Office.MessageCompose#disableClientSignatureAsync:member(2)': +'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 @@ -8431,7 +8430,7 @@ console.error(asyncResult.error); } }); -'Office.AppointmentCompose#isClientSignatureEnabledAsync:member(2)': +'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 @@ -8446,7 +8445,7 @@ console.error(asyncResult.error); } }); -'Office.MessageCompose#isClientSignatureEnabledAsync:member(2)': +'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 @@ -8617,7 +8616,7 @@ } console.log(`Appointment starts: ${result.value}`); }); -'Office.Time#setAsync:member(2)': +'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 @@ -8804,7 +8803,7 @@ } console.log(`Appointment location: ${result.value}`); }); -'Office.Location#setAsync:member(2)': +'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 @@ -8908,7 +8907,7 @@ console.log("There are no locations."); } }); -'Office.EnhancedLocation#getAsync:member(2)': +'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 @@ -8930,7 +8929,7 @@ console.log("There are no locations."); } }); -'Office.EnhancedLocation#addAsync:member(2)': +'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 @@ -8954,7 +8953,7 @@ console.error(`Failed to add locations. Error message: ${result.error.message}`); } }); -'Office.EnhancedLocation#removeAsync:member(2)': +'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 @@ -9014,7 +9013,7 @@ console.log("Failed to get if this is an all-day event. Error: " + JSON.stringify(asyncResult.error)); } }); -'Office.IsAllDayEvent#setAsync:member(2)': +'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 @@ -9065,7 +9064,7 @@ console.log("Failed to get sensitivity: " + JSON.stringify(asyncResult.error)); } }); -'Office.Sensitivity#setAsync:member(2)': +'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 @@ -9104,7 +9103,7 @@ console.log("Failed to get all sessionData. Error: " + JSON.stringify(asyncResult.error)); } }); -'Office.SessionData#setAsync:member(2)': +'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 @@ -9145,7 +9144,7 @@ console.log("Failed to get all sessionData. Error: " + JSON.stringify(asyncResult.error)); } }); -'Office.SessionData#removeAsync:member(2)': +'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 @@ -9160,7 +9159,7 @@ } } ); -'Office.SessionData#clearAsync:member(2)': +'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 From 226944c893b509fa03796e45e2b036c5e009b3b1 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 27 Oct 2020 14:26:51 -0700 Subject: [PATCH 315/660] [Outlook] Couple other items (#504) --- snippet-extractor-metadata/outlook.xlsx | Bin 20377 -> 20379 bytes snippet-extractor-output/snippets.yaml | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 90167dbfa6402e46ce9fdeb6b9d142b925879bb6..3848989d837b43f686be604ef50d554e467281bf 100644 GIT binary patch delta 7715 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

      nQ2SjTpqCgalb>9630skG-~y-^f%wP0}NjVJT& zVZpF%`CKE58~L+pHJTL->sAJB67P!sv|xylRSSJt0S9P~5DB%$?$CoI6r^+02-6>c zEUc;%UN}@ETE~P9RLoT^Cq_}?BDIhT1;Fo5hKvnj(-iYR^r$T6V)2Qm4blyHGd}`) zbsS3W5J~bXvaQpaZ%L<0546^klvMo2A(dej`f1b2Qs2usQ@~Gpqal@cbVoA~&!fA! zra6U%n@1%a$uLS*Qz-YIomUY38mLmal*k2HWa~Ng_Gvyu487gT3qK=HwR)ChK_!zS zV{*~I@-rk09ztWaA6+zSgj`d;D}!UVMpZt_ITf6&OAq)1d56G32t~h>o*Lpe4eV`G=}E-JvXSx3JNy zS%qd_&$oJX)BUH;W>Yz$ho1~UEghEx3I^c#Nk0n>-{r|dn1x`g=KM5#%cpdnvf6%Q z^%%wLJKVPRNc-wx0Wl3%_M^^W`Ur_1jtqDZ|E;6Kx^oZf$GRHLkntzT>@npEPf6&N zo+zp7xIQl!L!G~gjYsr^;zD1BN4>@O(C}X;(GV|U~$L~bb zmGl}H8gJze`sPcg3Nb}@1Iic zV-o0;lhY~%=wZ&ZitW3BhTb1-wefwj$G5J$ee6 zlAS`r9bR{}{>QN=A0QO_QqNLiE@=%~1E$`RSc2F3U>aIrt$f+$iW|MaCaP)Z6-WNY~F_M3i7mCMSX6wrcK7C!5VhPGhZl zmj;3JkG_W%EnGoAEU&#u&=u#GL;o-J@b^nvkLIp+{ zkm}TVnq##K^+!dr&OhE7%g49sTtz6pCv7^+&ULO*6H@mDw=&E{(UwgfT*jXI z+dRx&aNp$mIL)@AMo5^pnHwm1CCJvx3pW*P57&dnkUV`tSf{EmG$$hzhWZR4J=W|L zhpgks?W|iqQ*n^ZGF?d|ztzGl@4HuM>gRVnORiZ(VwM9}t>hMRoJnAB@FN;q@UZ9e;sOo?d|OT{MOn*_ z!z2CO=>-{eAaS}$hWvzgMx|Yj8cS?)FK#M@jSM)_}#!;da(a8xQM&7SmvvU zarn%`9c2Weo1W^3W3?8OUeYU{rQ6r?sfu`cKfNhwM_GP-6tFe=}1P$*bN=vIc&^E|29zLn0p zVGMIA`+}!$Or>vPWZQMp8hqVofuhPcfo8Hn{zm=r!QR6YS-Azi2Bgq5D`ICKxlJf4Xw>vxPyN-?xnq1E^hWH@p zASIGk%^dfCCa(V45R4GmkhTEB{|%dl003IR|9?Ki$aT~(XkgEDlrYj^nL08LGpZRK z5av@En63;9OhT6z!y5KdS07^%R;O!#c_0tNQQ(6K>hWU!RDcmF^1!0>crl=`&wAVp o|7j=&0N{!V0FeLx7=T#Vsh$D`5ll#59%C5huFr-01N;y0UrT|qJpcdz delta 7747 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 QLLLIUYq4PL1OEa15Bhe()Bpeg diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index deb237561..8e89fabde 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -5218,7 +5218,7 @@ console.error(asyncResult.error); } }); -'Office.AppointmentCompose#setSelectedDataAsync:member(2)': +'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 @@ -5231,7 +5231,7 @@ console.error(asyncResult.error); } }); -'Office.MessageCompose#setSelectedDataAsync:member(2)': +'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 From ce3f96dadad1daec42fa945cca47f5594cf8e99f Mon Sep 17 00:00:00 2001 From: Ricky Kirkham Date: Fri, 4 Dec 2020 15:25:39 -0800 Subject: [PATCH 316/660] show how to use insertSlidesFromBase64 method --- playlists/powerpoint.yaml | 9 ++ .../preview-apis/insert-slides.yaml | 137 ++++++++++++++++++ view/powerpoint.json | 1 + 3 files changed, 147 insertions(+) create mode 100644 samples/powerpoint/preview-apis/insert-slides.yaml diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index 11420003b..0160ae550 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -44,6 +44,15 @@ https://raw.githubusercontent.com////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////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 diff --git a/samples/powerpoint/preview-apis/insert-slides.yaml b/samples/powerpoint/preview-apis/insert-slides.yaml new file mode 100644 index 000000000..b9d54d60a --- /dev/null +++ b/samples/powerpoint/preview-apis/insert-slides.yaml @@ -0,0 +1,137 @@ +id: powerpoint-insert-slides +name: Insert slides from other presentation +description: Inserts slides from another PowerPoint file into the current presentation. +host: POWERPOINT +api_set: + PowerPointApi: '1.2' +script: + content: | + $("#insert-all-slides").click(() => tryCatch(insertAllSlides)); + $("#insert-after-target-slide").click(() => tryCatch(insertAfterSelectedSlide)); + $("#file").change(() => tryCatch(storeFileAsBase64)); + + let chosenFileBase64; + + async function storeFileAsBase64() { + const reader = new FileReader(); + + reader.onload = async (event) => { + // Strip off 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 + // property. This also triggers the onload event. + const myFile = document.getElementById("file") as HTMLInputElement; + reader.readAsDataURL(myFile.files[0]); + } + + async function insertAllSlides() { + await PowerPoint.run(async function(context) { + context.presentation.insertSlidesFromBase64(chosenFileBase64); + await context.sync(); + }); + } + + async function insertAfterSelectedSlide() { + await PowerPoint.run(async function(context) { + const selectedSlideID = await getSelectedSlideID(); + + context.presentation.insertSlidesFromBase64(chosenFileBase64, { + formatting: PowerPoint.InsertSlideFormatting.useDestinationTheme, + targetSlideId: selectedSlideID + "#" + }); + await context.sync(); + }); + } + + 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 + // 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 { + resolve(asyncResult.value.slides[0].id); + } + } + catch (error) { + reject(console.log(error)); + } + }); + }); + } + + /** 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 slides from another presentation into the currrent presentation.

      +
      + +
      +

      Try it out

      +

      +

        +
      1. Open this add-in in a brand new presentation.
      2. +
      3. Add at least 2 slides to the presentation.
      4. +
      5. Next, select a PowerPoint presentation from which to insert slides.
      6. +
      +
      + +
      +

      +

      Press Insert all slides to insert all the slides from the source presentation at the beginning of the + current presentation using the source formatting.

      + +

      Press Insert after selected slide to insert the slides from the source presentation just after the selected + slide of the current presentation, with the destination formatting.

      + +

      To undo an insertion, click anywhere on the presentation and press Ctrl-Z.

      +
      + 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/powerpoint.json b/view/powerpoint.json index 5f0e6cb1f..b462c51da 100644 --- a/view/powerpoint.json +++ b/view/powerpoint.json @@ -4,5 +4,6 @@ "powerpoint-basics-get-slide-metadata": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/powerpoint/basics/get-slide-metadata.yaml", "powerpoint-basics-insert-image": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/powerpoint/basics/insert-image.yaml", "powerpoint-basics-insert-svg": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/powerpoint/basics/insert-svg.yaml", + "powerpoint-insert-slides": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/powerpoint/preview-apis/insert-slides.yaml", "powerpoint-scenarios-searches-wikipedia-api": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/powerpoint/scenarios/searches-wikipedia-api.yaml" } \ No newline at end of file From 79e422a3af308c36503b5210d35a7ec1ab639129 Mon Sep 17 00:00:00 2001 From: Ricky Kirkham Date: Mon, 7 Dec 2020 14:26:58 -0800 Subject: [PATCH 317/660] review changes --- samples/powerpoint/preview-apis/insert-slides.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/samples/powerpoint/preview-apis/insert-slides.yaml b/samples/powerpoint/preview-apis/insert-slides.yaml index b9d54d60a..46e95e32e 100644 --- a/samples/powerpoint/preview-apis/insert-slides.yaml +++ b/samples/powerpoint/preview-apis/insert-slides.yaml @@ -58,7 +58,8 @@ script: if (asyncResult.status === Office.AsyncResultStatus.Failed) { reject(console.error(asyncResult.error.message)); } else { - resolve(asyncResult.value.slides[0].id); + const result = asyncResult.value as any; + resolve(result.slides[0].id); } } catch (error) { @@ -82,7 +83,7 @@ script: template: content: |-
      -

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

      +

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

      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 359/660] [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 360/660] [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 361/660] [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 362/660] [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 363/660] [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.

      +
      @@ -97,13 +98,12 @@ template:

      -

      Press Insert all slides to insert all the slides from the source presentation at the beginning of the - current presentation using the source formatting.

      +

      Press Insert all slides to insert all the slides at the beginning of the + presentation. Source formatting is used.

      -

      Press Insert after selected slide to insert the slides from the source presentation just after the selected - slide of the current presentation, with the destination formatting.

      +

      Select a slide and press Insert after selected slide. Destination formatting is used.

      From b47fc02443251ee442f3b6ed64d2f1d0b23ce841 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 17 Dec 2020 12:06:57 -0800 Subject: [PATCH 318/660] [Admin] Remove Travis (#508) --- .travis.yml | 33 ------------- README.md | 4 +- config/build.ts | 5 +- config/deploy.ts | 117 ---------------------------------------------- config/helpers.ts | 12 ----- package.json | 1 - 6 files changed, 3 insertions(+), 169 deletions(-) delete mode 100644 .travis.yml delete mode 100644 config/deploy.ts diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index bddd72420..000000000 --- a/.travis.yml +++ /dev/null @@ -1,33 +0,0 @@ -language: node_js - -cache: - directories: - - node_modules - -git: - depth: 3 - -node_js: -- 6.10.0 - -before_install: -- npm i -g npm@6.14.6 - -install: -- npm install - -before_script: -- npm run lint -- npm run tsc - -script: -- npm run build -- npm run deploy - -notifications: - webhooks: - urls: - - https://outlook.office.com/webhook/cd954b0a-08e5-4935-933b-a1cda4e6d5e9@72f988bf-86f1-41af-91ab-2d7cd011db47/TravisCI/c7d4bdd9ff6d4f2e8bce8919d416a064/5bf9ad7e-4cad-45e8-9812-e553da1c05c6 - on_success: change - on_failure: always - on_start: change \ No newline at end of file diff --git a/README.md b/README.md index 5e731800e..dbb4e2fea 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,3 @@ -[![Build Status](https://travis-ci.org/OfficeDev/office-js-snippets.svg?branch=master)](https://travis-ci.org/OfficeDev/office-js-snippets) - # Office JS Snippets A collection of code snippets built with [Script Lab](//github.com/OfficeDev/script-lab) @@ -134,7 +132,7 @@ A few style rules to observe: ## Debugging the build script -* The scripts for building/validating the snippets are under the `config` folder -- in particular, under `build.ts`. There is also a `deploy.ts` for copying the built files to their final location. +* 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! diff --git a/config/build.ts b/config/build.ts index 304f96a29..e1a194296 100644 --- a/config/build.ts +++ b/config/build.ts @@ -6,7 +6,7 @@ import * as chalk from 'chalk'; import { status } from './status'; import { SnippetFileInput, SnippetProcessedData, - getDestinationBranch, followsNamingGuidelines, isCUID, + followsNamingGuidelines, isCUID, rmRf, mkDir, getFiles, writeFile, banner, getPrintableDetails, Dictionary } from './helpers'; import { buildReferenceDocSnippetExtracts } from './build.documentation'; @@ -18,7 +18,6 @@ import escapeStringRegexp = require('escape-string-regexp'); import * as fsx from 'fs-extra'; -const { GH_ACCOUNT, GH_REPO, TRAVIS_BRANCH } = process.env; const PRIVATE_SAMPLES = 'private-samples'; const PUBLIC_SAMPLES = 'samples'; const snippetFilesToUpdate: Array<{ path: string; contents: string }> = []; @@ -123,7 +122,7 @@ async function processSnippets(processedSnippets: Dictionary'}/${GH_REPO || ''}/${getDestinationBranch(TRAVIS_BRANCH) || ''}` + + `${''}/${''}/${''}` + `/${dir}/${file.host}/${file.group}/${file.file_name}`; if (messages.findIndex(item => item instanceof Error) >= 0) { diff --git a/config/deploy.ts b/config/deploy.ts deleted file mode 100644 index 82bcf41d4..000000000 --- a/config/deploy.ts +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/env node --harmony - -import * as chalk from 'chalk'; -import * as shell from 'shelljs'; -import { forIn } from 'lodash'; -import { isString } from 'lodash'; -import { banner, getDestinationBranch } from './helpers'; - -interface IEnvironmentVariables { - TRAVIS: string, - TRAVIS_BRANCH: string, - TRAVIS_PULL_REQUEST: string, - TRAVIS_COMMIT_MESSAGE: string, - GH_ACCOUNT: string, - GH_REPO: string, - GH_TOKEN: string -} - -const environmentVariables: IEnvironmentVariables = process.env as any; - -(() => { - try { - // Note, if precheck fails, it will do its own banner, so only need to focus on the true case. - if (precheck()) { - const destinationBranch = getDestinationBranch(environmentVariables.TRAVIS_BRANCH); - const repoUrl = `https://github.com/${environmentVariables.GH_ACCOUNT}/${environmentVariables.GH_REPO}/tree/${destinationBranch}`; - banner('Starting deployment', repoUrl); - - const start = Date.now(); - shell.exec('git config --add user.name "Travis CI"'); - shell.exec('git config --add user.email "travis.ci@microsoft.com"'); - shell.exec('git checkout --orphan newbranch'); - shell.exec('git reset'); - - execCommand('git add -f samples private-samples playlists view snippet-extractor-output README.md'); - execCommand(`git commit -m "Travis auto-deploy of ${environmentVariables.TRAVIS_COMMIT_MESSAGE.replace(/\W/g, '_')} [skip ci]"`); - - const tokenizedGitHubGitUrl = `https://<<>>@github.com/${environmentVariables.GH_ACCOUNT}/${environmentVariables.GH_REPO}.git`; - execCommand(`git push ${tokenizedGitHubGitUrl} -f -u HEAD:refs/heads/${destinationBranch}`, { - token: environmentVariables.GH_TOKEN - }); - - const end = Date.now(); - - banner('Deployment succeeded', `Successfully deployed to ${repoUrl} in ${(end - start) / 1000} seconds.`, chalk.bold.green); - } - } - catch (error) { - banner('An error has occurred', error.message || error, chalk.bold.red); - banner('DEPLOYMENT DID NOT GET TRIGGERED', error.message || error, chalk.bold.red); - - // Even though deployment failure does not imply dev failure, we want to break the build - // to make it obvious that the deployment went wrong - process.exit(1); - } - - process.exit(0); -})(); - - -function precheck() { - /* Check if the code is running inside of travis.ci. If not abort immediately. */ - if (!environmentVariables.TRAVIS) { - banner('Deployment skipped', 'Not running inside of Travis.', chalk.yellow.bold); - return false; - } - - // Careful! Need this check because otherwise, a pull request against master would immediately trigger a deployment. - if (environmentVariables.TRAVIS_PULL_REQUEST !== 'false') { - banner('Deployment skipped', 'Skipping deploy for pull requests.', chalk.yellow.bold); - return false; - } - - if (getDestinationBranch(environmentVariables.TRAVIS_BRANCH) == null) { - banner('Deployment skipped', 'Skipping deploy for pull requests.', chalk.yellow.bold); - return false; - } - - /* Check if the username is configured. If not abort immediately. */ - const requiredFields: Array = ['GH_ACCOUNT', 'GH_REPO', 'GH_TOKEN']; - requiredFields.forEach(key => { - if (!isString(environmentVariables[key])) { - throw new Error(`"${key}" is a required global variables.`); - } - }); - - return true; -} - -/** - * Execute a shell command. - * @param originalSanitizedCommand - The command to execute. Note that if it contains something secret, put it in triple <<>> syntax, as the command itself will get echo-ed. - * @param secretSubstitutions - key-value pairs to substitute into the command when executing. Having any secret substitutions will automatically make the command run silently. - */ -function execCommand(originalSanitizedCommand: string, secretSubstitutions = {}) { - console.log(originalSanitizedCommand); - - let hadSecrets = false; - let command = originalSanitizedCommand; - forIn(secretSubstitutions, (value, key) => { - hadSecrets = true; - command = replaceAll(command, '<<<' + key + '>>>', value); - }); - - if (hadSecrets) { - console.log(chalk.yellow('Command contained secret substitution values; running the `shell.exec` silently')); - } - - let result: any = shell.exec(command, hadSecrets ? { silent: true } : null); - if (result.code !== 0) { - throw new Error(`An error occurred while executing "${originalSanitizedCommand}"`); - } -} - -function replaceAll(source, search, replacement) { - return source.split(search).join(replacement); -} diff --git a/config/helpers.ts b/config/helpers.ts index e297ae06d..3f3818666 100644 --- a/config/helpers.ts +++ b/config/helpers.ts @@ -74,18 +74,6 @@ export function getPrintableDetails(item: any, indent: number) { return details.split('\n').map(line => new Array(indent).join(' ') + line).join('\n'); } -export const getDestinationBranch = (sourceBranch: 'master' | 'prod' | any): 'deploy-beta' | 'deploy-prod' | null => { - if (sourceBranch === 'master') { - return 'deploy-beta'; - } - else if (sourceBranch === 'prod') { - return 'deploy-prod'; - } - else { - return null; - } -}; - /** * Creates a folder. * @param dir An absolute path to the directory. diff --git a/package.json b/package.json index a3dd39282..75dd70328 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,6 @@ "start": "npm run tsc && npm run build && npm run lint", "tsc": "tsc -p tsconfig.json", "build": "node config/build.js", - "deploy": "node config/deploy.js", "lint": "tslint --project tsconfig.json" }, "repository": { From f6e45627e9bc890ec5423529988845558c27c34b Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 18 Dec 2020 15:01:14 -0800 Subject: [PATCH 319/660] [Outlook] (internet headers) Add snippets (#510) --- playlists/outlook.yaml | 17 +++ .../get-internet-headers-message-read.yaml | 74 ++++++++++++ ...stom-internet-headers-message-compose.yaml | 106 ++++++++++++++++++ snippet-extractor-metadata/outlook.xlsx | Bin 20379 -> 21026 bytes snippet-extractor-output/snippets.yaml | 86 ++++++++++++++ view/outlook.json | 2 + 6 files changed, 285 insertions(+) create mode 100644 samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml create mode 100644 samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 95a8d0930..ce28d757c 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -335,6 +335,23 @@ 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////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////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 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 new file mode 100644 index 000000000..abd3744ce --- /dev/null +++ b/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml @@ -0,0 +1,74 @@ +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: {} +script: + content: | + $("#run").click(run); + + function run() { + 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)); + } + }); + } + + /* Sample output: + Sender's preferred fruit: orange + Sender's preferred vegetable: broccoli + */ + language: typescript +template: + content: |- +
      +

      This sample shows how to get internet headers on 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/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/70-mime-headers/manage-custom-internet-headers-message-compose.yaml b/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml new file mode 100644 index 000000000..f1690ebef --- /dev/null +++ b/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml @@ -0,0 +1,106 @@ +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.' +host: OUTLOOK +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 internet headers. + function setCustomHeaders() { + 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)); + } + } + + ); + } + + // Get custom internet headers. + function getSelectedCustomHeaders() { + 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)); + } + } + ); + } + + // Remove custom internet headers. + function removeSelectedCustomHeaders() { + 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)); + } + } + ); + } + + /* Sample output: + Successfully set headers + Selected headers: {"x-best-vegetable":"spinach","x-preferred-fruit":"orange","x-preferred-vegetable":"broccoli"} + Successfully removed selected headers + Selected headers: {"x-preferred-fruit":"orange","x-preferred-vegetable":"broccoli"} + */ + language: typescript +template: + content: |- +
      +

      This sample shows how to set, get, and remove custom internet headers on a message in Compose mode.

      +

      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/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 3848989d837b43f686be604ef50d554e467281bf..67a88ee84986290ed80baf75be82d62f2374e4f2 100644 GIT binary patch delta 11440 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

      ZJIl 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 delta 10810 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 8e89fabde..3df31e0d6 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -9171,6 +9171,92 @@ console.log("Failed to clear sessionData. Error: " + JSON.stringify(asyncResult.error)); } }); +'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 + + 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.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 + + 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/master/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/master/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/master/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)); + } + } + + ); 'Word.Body#search:member(1)': - >- // Link to full sample: diff --git a/view/outlook.json b/view/outlook.json index 4819456ef..d4a45c0d3 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -35,6 +35,8 @@ "outlook-display-items-display-reply-forms": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-reply-forms.yaml", "outlook-display-items-display-reply-with-attachments": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-reply-with-attachments.yaml", "outlook-delegates-and-shared-folders-get-shared-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml", + "outlook-mime-headers-get-internet-headers-message-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml", + "outlook-mime-headers-manage-custom-internet-headers-message-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml", "outlook-entities-and-regex-matches-basic-entities": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml", "outlook-entities-and-regex-matches-contextual": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/75-entities-and-regex-matches/contextual.yaml", "outlook-entities-and-regex-matches-selected": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/75-entities-and-regex-matches/selected.yaml", From 2b695f30d7d61d54e7f85c44e130bc6dcf752773 Mon Sep 17 00:00:00 2001 From: Ricky Kirkham Date: Wed, 6 Jan 2021 10:32:22 -0800 Subject: [PATCH 320/660] adding extractor metadata for PowerPoint --- snippet-extractor-metadata/powerpoint.xlsx | Bin 0 -> 11742 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 snippet-extractor-metadata/powerpoint.xlsx diff --git a/snippet-extractor-metadata/powerpoint.xlsx b/snippet-extractor-metadata/powerpoint.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..66944e6037bcd31e3f542aeecd735cc872fa78e7 GIT binary patch literal 11742 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 literal 0 HcmV?d00001 From 8855fe03b4efa6566e72407a71ef2807019b74b9 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 7 Jan 2021 12:20:19 -0800 Subject: [PATCH 321/660] [Admin] Update playlists to default branch (#513) --- config/build.ts | 3 +- 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 +++---- 11 files changed, 431 insertions(+), 430 deletions(-) diff --git a/config/build.ts b/config/build.ts index e1a194296..580d01f7e 100644 --- a/config/build.ts +++ b/config/build.ts @@ -122,7 +122,8 @@ async function processSnippets(processedSnippets: Dictionary'}/${''}/${''}` + + //`${''}/${''}/${''}` + + `OfficeDev/office-js-snippets/master` + `/${dir}/${file.host}/${file.group}/${file.file_name}`; if (messages.findIndex(item => item instanceof Error) >= 0) { diff --git a/playlists/excel.yaml b/playlists/excel.yaml index d34f52272..32a23d771 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////samples/excel/01-basics/basic-api-call.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/01-basics/basic-api-call-es5.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/01-basics/basic-common-api-call.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/10-chart/chart-axis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/10-chart/chart-axis-formatting.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/10-chart/chart-bubble-chart.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/10-chart/chart-create-several-charts.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/10-chart/create-doughnut-chart.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/10-chart/chart-formatting.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/10-chart/chart-legend.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/10-chart/chart-point.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/10-chart/chart-series.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/10-chart/chart-series-markers.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/10-chart/chart-series-plotorder.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/10-chart/chart-title-format.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/10-chart/chart-trendlines.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/12-comment/comment-basics.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/12-comment/comment-mentions.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/12-comment/comment-replies.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/12-comment/comment-resolution.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/16-custom-functions/basic-function.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/16-custom-functions/volatile-function.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/16-custom-functions/streaming-function.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/16-custom-functions/web-call-function.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/22-data-validation/data-validation.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/26-document/get-file-in-slices-async.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/26-document/properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/26-document/custom-properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/30-events/events-chartcollection-added-activated.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/30-events/events-chart-activated.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/30-events/event-column-and-row-sort.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/30-events/data-changed.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/30-events/data-change-event-details.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/30-events/events-disable-events.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/30-events/selection-changed-events.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/30-events/event-worksheet-single-click.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/30-events/events-tablecollection-changed.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/30-events/events-table-changed.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/30-events/events-worksheet.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/30-events/events-comment-event-handler.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/34-named-item/create-and-remove-named-item.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/34-named-item/update-named-item.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/38-pivottable/pivottable-calculations.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/38-pivottable/pivottable-create-and-modify.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/38-pivottable/pivottable-get-pivottables.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/38-pivottable/pivottable-slicer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/38-pivottable/pivottable-pivotfilters.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/42-range/range-auto-fill.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/42-range/range-copyfrom.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/42-range/range-areas.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/42-range/range-find.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/42-range/formatting.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/42-range/cell-properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/42-range/range-hyperlink.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/42-range/insert-delete-clear-range.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/42-range/outline.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/42-range/range-relationships.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/42-range/range-remove-duplicates.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/42-range/selected-range.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/42-range/direct-precedents.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/42-range/style.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/42-range/range-text-orientation.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/42-range/dynamic-arrays.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/42-range/used-range.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/42-range/set-get-values.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/44-shape/shape-create-and-delete.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/44-shape/shape-images.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/44-shape/shape-lines.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/44-shape/shape-move-and-order.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/44-shape/shape-groups.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/44-shape/shape-textboxes.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/46-table/add-rows-and-columns-to-a-table.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/46-table/convert-range-to-table.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/46-table/create-table.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/46-table/filter-data.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/46-table/formatting.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/46-table/get-data-from-table.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/46-table/import-json-data.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/46-table/sort-data.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/50-workbook/workbook-get-active-cell.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/50-workbook/create-get-change-delete-settings.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/50-workbook/workbook-calculation.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/50-workbook/create-workbook.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/50-workbook/culture-info.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/50-workbook/culture-info-date-time.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/50-workbook/data-protection.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/50-workbook/workbook-save-and-close.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/54-worksheet/active-worksheet.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/54-worksheet/worksheet-auto-filter.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/54-worksheet/worksheet-copy.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/54-worksheet/worksheet-find-all.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/54-worksheet/worksheet-freeze-panes.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/54-worksheet/worksheet-range-cell.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/54-worksheet/gridlines.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/54-worksheet/list-worksheets.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/54-worksheet/worksheet-page-layout.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/54-worksheet/tab-color.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/54-worksheet/worksheet-visibility.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/90-scenarios/performance-optimization.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/90-scenarios/report-generation.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/90-scenarios/multiple-property-set.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/90-scenarios/working-with-dates.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/90-scenarios/currency-converter.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/99-just-for-fun/patterns.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/99-just-for-fun/gradient.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/99-just-for-fun/path-finder-game.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/99-just-for-fun/tetrominos.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/excel/99-just-for-fun/color-wheel.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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 ce28d757c..4fe404814 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////samples/outlook/10-roaming-settings/roaming-settings.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/15-item-custom-properties/load-set-get-save.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/20-item-body/get-selected-data.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/20-item-body/set-selected-data.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/25-item-save-and-close/close.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/25-item-save-and-close/save.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/40-attachments/attachments-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/40-attachments/get-attachment-content.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/40-attachments/get-attachments-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/45-categories/work-with-categories.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/45-categories/work-with-master-categories.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/50-recurrence/get-series-id.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/50-recurrence/get-recurrence-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/55-display-items/display-existing-appointment.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/55-display-items/display-existing-message.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/55-display-items/display-new-appointment.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/55-display-items/display-new-message.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/55-display-items/display-reply-forms.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/55-display-items/display-reply-with-attachments.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/75-entities-and-regex-matches/basic-entities.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/75-entities-and-regex-matches/contextual.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/75-entities-and-regex-matches/selected.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/90-other-item-apis/get-subject-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/90-other-item-apis/get-set-subject-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/90-other-item-apis/get-item-class-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/90-other-item-apis/get-item-type.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/90-other-item-apis/get-start-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/90-other-item-apis/get-end-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/90-other-item-apis/get-location-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/90-other-item-apis/get-conversation-id-message.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/90-other-item-apis/get-date-time-created-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/99-preview-apis/calendar-properties-apis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/99-preview-apis/session-data-apis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/outlook/99-preview-apis/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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 0160ae550..04fdc6dab 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////samples/powerpoint/basics/basic-common-api-call.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/powerpoint/basics/create-presentation.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/powerpoint/basics/get-slide-metadata.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/powerpoint/basics/insert-image.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/powerpoint/basics/insert-svg.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/powerpoint/preview-apis/insert-slides.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/powerpoint/scenarios/searches-wikipedia-api.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/powerpoint/scenarios/searches-wikipedia-api.yaml group: Scenarios api_set: {} diff --git a/playlists/project.yaml b/playlists/project.yaml index 165ac7d8c..afd101f1e 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////samples/project/basics/basic-common-api-call.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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 2d9498bc1..76c596d50 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////samples/word/01-basics/basic-api-call.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/word/01-basics/basic-api-call-es5.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/word/01-basics/basic-common-api-call.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/word/10-content-controls/insert-and-change-content-controls.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/word/15-images/insert-and-get-pictures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/word/20-lists/insert-list.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/word/25-paragraph/insert-line-and-page-breaks.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/word/25-paragraph/insert-in-different-locations.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/word/25-paragraph/insert-formatted-text.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/word/25-paragraph/insert-header-and-footer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/word/25-paragraph/paragraph-properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/word/25-paragraph/search.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/word/25-paragraph/get-word-count.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/word/30-properties/get-built-in-properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/word/30-properties/read-write-custom-document-properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/word/35-ranges/scroll-to-range.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/word/35-ranges/split-words-of-first-paragraph.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/word/40-tables/table-cell-access.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/word/90-scenarios/doc-assembly.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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////samples/word/90-scenarios/multiple-property-set.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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 90aa0e11f..1bac65941 100644 --- a/view/excel.json +++ b/view/excel.json @@ -1,121 +1,121 @@ { - "excel-basics-basic-api-call": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/01-basics/basic-api-call.yaml", - "excel-basics-basic-api-call-es5": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/01-basics/basic-api-call-es5.yaml", - "excel-basics-basic-common-api-call": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/01-basics/basic-common-api-call.yaml", - "excel-chart-axis": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-axis.yaml", - "excel-chart-axis-formatting": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-axis-formatting.yaml", - "excel-chart-bubble-chart": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-bubble-chart.yaml", - "excel-chart-create-several-charts": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-create-several-charts.yaml", - "excel-chart-create-doughnut-chart": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/create-doughnut-chart.yaml", - "excel-chart-formatting": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-formatting.yaml", - "excel-chart-legend": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-legend.yaml", - "excel-chart-point": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-point.yaml", - "excel-chart-series": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-series.yaml", - "excel-chart-series-markers": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-series-markers.yaml", - "excel-chart-series-plotorder": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-series-plotorder.yaml", - "excel-chart-title-format": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-title-format.yaml", - "excel-chart-trendlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/10-chart/chart-trendlines.yaml", - "excel-comment-basics": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/12-comment/comment-basics.yaml", - "excel-comment-mentions": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/12-comment/comment-mentions.yaml", - "excel-comment-replies": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/12-comment/comment-replies.yaml", - "excel-comment-resolution": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/12-comment/comment-resolution.yaml", - "excel-range-conditional-formatting-basic": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml", - "excel-range-conditional-formatting-advanced": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml", - "excel-custom-functions-basic": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/16-custom-functions/basic-function.yaml", - "excel-custom-functions-volatile": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/16-custom-functions/volatile-function.yaml", - "excel-custom-functions-streaming": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/16-custom-functions/streaming-function.yaml", - "excel-custom-functions-web-call": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml", - "excel-chart-chart-title-ts": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/private-samples/excel/20-chart/chart-title-ts.yaml", - "excel-data-validation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/22-data-validation/data-validation.yaml", - "excel-document-get-file-in-slices-async": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/26-document/get-file-in-slices-async.yaml", - "excel-document-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/26-document/properties.yaml", - "excel-document-custom-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/26-document/custom-properties.yaml", - "excel-events-chartcollection-added-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-chartcollection-added-activated.yaml", - "excel-events-chart-activated": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-chart-activated.yaml", - "excel-event-column-and-row-sort": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/event-column-and-row-sort.yaml", - "excel-events-data-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/data-changed.yaml", - "excel-data-change-event-details": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/data-change-event-details.yaml", - "excel-events-disable-events": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-disable-events.yaml", - "excel-selection-changed-events": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/selection-changed-events.yaml", - "excel-event-worksheet-single-click": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/event-worksheet-single-click.yaml", - "excel-events-tablecollection-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-tablecollection-changed.yaml", - "excel-events-table-changed": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-table-changed.yaml", - "excel-events-workbook-and-worksheet-collection": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml", - "excel-events-worksheet": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-worksheet.yaml", - "excel-events-comments": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/30-events/events-comment-event-handler.yaml", - "excel-named-item-create-and-remove-named-item": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/34-named-item/create-and-remove-named-item.yaml", - "excel-update-named-item": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/34-named-item/update-named-item.yaml", - "excel-pivottable-calculations": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/38-pivottable/pivottable-calculations.yaml", - "excel-pivottable-create-and-modify": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/38-pivottable/pivottable-create-and-modify.yaml", - "excel-pivottable-filters-and-summaries": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml", - "excel-pivottables-get-pivottables": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/38-pivottable/pivottable-get-pivottables.yaml", - "excel-pivottable-slicer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/38-pivottable/pivottable-slicer.yaml", - "excel-pivottables-pivotfilters": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/38-pivottable/pivottable-pivotfilters.yaml", - "excel-range-auto-fill": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-auto-fill.yaml", - "excel-range-copyfrom": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-copyfrom.yaml", - "excel-range-areas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-areas.yaml", - "excel-range-find": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-find.yaml", - "excel-range-formatting": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/formatting.yaml", - "excel-range-cell-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/cell-properties.yaml", - "excel-range-hyperlink": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-hyperlink.yaml", - "excel-range-insert-delete-and-clear-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/insert-delete-clear-range.yaml", - "excel-outline": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/outline.yaml", - "excel-range-range-relationships": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-relationships.yaml", - "excel-range-remove-duplicates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-remove-duplicates.yaml", - "excel-range-selected-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/selected-range.yaml", - "excel-direct-precedents": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/direct-precedents.yaml", - "excel-range-style": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/style.yaml", - "excel-range-text-orientation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/range-text-orientation.yaml", - "excel-range-dynamic-arrays": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/dynamic-arrays.yaml", - "excel-range-used-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/used-range.yaml", - "excel-range-values-and-formulas": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/42-range/set-get-values.yaml", - "excel-shape-create-and-delete": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/44-shape/shape-create-and-delete.yaml", - "excel-shape-images": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/44-shape/shape-images.yaml", - "excel-shape-lines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/44-shape/shape-lines.yaml", - "excel-shape-move-and-order": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/44-shape/shape-move-and-order.yaml", - "excel-shape-groups": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/44-shape/shape-groups.yaml", - "excel-shape-textboxes": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/44-shape/shape-textboxes.yaml", - "excel-table-add-rows-and-columns-to-a-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml", - "excel-table-convert-range-to-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/convert-range-to-table.yaml", - "excel-table-create-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/create-table.yaml", - "excel-table-filter-data": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/filter-data.yaml", - "excel-table-formatting": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/formatting.yaml", - "excel-table-get-data-from-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/get-data-from-table.yaml", - "excel-table-get-visible-range-of-a-filtered-table": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml", - "excel-table-import-json-data": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/import-json-data.yaml", - "excel-table-sort-data": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/46-table/sort-data.yaml", - "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/workbook-get-active-cell.yaml", - "excel-settings-create-get-change-delete-settings": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/create-get-change-delete-settings.yaml", - "excel-workbook-calculation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/workbook-calculation.yaml", - "excel-workbook-create-workbook": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/create-workbook.yaml", - "excel-culture-info": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/culture-info.yaml", - "excel-culture-info-date-time": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/culture-info-date-time.yaml", - "excel-workbook-data-protection": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/data-protection.yaml", - "excel-workbook-save-and-close": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/50-workbook/workbook-save-and-close.yaml", - "excel-worksheet-active-worksheet": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/active-worksheet.yaml", - "excel-worksheet-add-delete-rename-move-worksheet": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml", - "excel-worksheet-auto-filter": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-auto-filter.yaml", - "excel-worksheet-copy": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-copy.yaml", - "excel-worksheet-find-all": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-find-all.yaml", - "excel-worksheet-freeze-panes": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-freeze-panes.yaml", - "excel-worksheet-worksheet-range-cell": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-range-cell.yaml", - "excel-worksheet-gridlines": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/gridlines.yaml", - "excel-worksheet-list-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/list-worksheets.yaml", - "excel-worksheet-page-layout": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-page-layout.yaml", - "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml", - "excel-worksheet-tab-color": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/tab-color.yaml", - "excel-worksheet-visibility": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/54-worksheet/worksheet-visibility.yaml", - "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", - "excel-performance-optimization": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/performance-optimization.yaml", - "excel-scenarios-report-generation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/report-generation.yaml", - "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/multiple-property-set.yaml", - "excel-scenarios-working-with-dates": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/working-with-dates.yaml", - "excel-scenarios-currency-converter": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/90-scenarios/currency-converter.yaml", - "excel-just-for-fun-patterns": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/99-just-for-fun/patterns.yaml", - "excel-just-for-fun-gradient": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/99-just-for-fun/gradient.yaml", - "excel-just-for-fun-path-finder-game": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/99-just-for-fun/path-finder-game.yaml", - "excel-just-for-fun-tetrominos": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/99-just-for-fun/tetrominos.yaml", - "excel-just-for-fun-color-wheel": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/excel/99-just-for-fun/color-wheel.yaml" + "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" } \ No newline at end of file diff --git a/view/outlook.json b/view/outlook.json index d4a45c0d3..52b362f7e 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -1,69 +1,69 @@ { - "outlook-roaming-settings-roaming-settings": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/10-roaming-settings/roaming-settings.yaml", - "outlook-item-custom-properties-load-set-get-save": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/15-item-custom-properties/load-set-get-save.yaml", - "outlook-item-body-get-selected-data": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/20-item-body/get-selected-data.yaml", - "outlook-item-body-set-selected-data": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/20-item-body/set-selected-data.yaml", - "outlook-item-save-and-close-close": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/25-item-save-and-close/close.yaml", - "outlook-item-save-and-close-save": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/25-item-save-and-close/save.yaml", - "outlook-recipients-and-attendees-get-from-message-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml", - "outlook-recipients-and-attendees-get-from-message-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml", - "outlook-recipients-and-attendees-get-to-message-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml", - "outlook-recipients-and-attendees-get-set-to-message-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml", - "outlook-recipients-and-attendees-get-cc-message-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml", - "outlook-recipients-and-attendees-get-set-cc-message-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml", - "outlook-recipients-and-attendees-get-sender-message-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml", - "outlook-recipients-and-attendees-get-required-attendees-appointment-attendee": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml", - "outlook-recipients-and-attendees-get-organizer-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml", - "outlook-notifications-add-getall-remove": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/35-notifications/add-getall-remove.yaml", - "outlook-attachments-attachments-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/40-attachments/attachments-compose.yaml", - "outlook-attachments-get-attachment-content": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/40-attachments/get-attachment-content.yaml", - "outlook-attachments-get-attachments-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/40-attachments/get-attachments-read.yaml", - "outlook-categories-work-with-categories": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/45-categories/work-with-categories.yaml", - "outlook-categories-work-with-master-categories": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/45-categories/work-with-master-categories.yaml", - "outlook-recurrence-get-series-id": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/50-recurrence/get-series-id.yaml", - "outlook-recurrence-get-recurrence-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/50-recurrence/get-recurrence-read.yaml", - "outlook-recurrence-get-set-recurrence-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml", - "outlook-display-items-display-existing-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-existing-appointment.yaml", - "outlook-display-items-display-existing-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-existing-message.yaml", - "outlook-display-items-display-new-appointment": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-new-appointment.yaml", - "outlook-display-items-display-new-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-new-message.yaml", - "outlook-display-items-display-reply-forms": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-reply-forms.yaml", - "outlook-display-items-display-reply-with-attachments": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/55-display-items/display-reply-with-attachments.yaml", - "outlook-delegates-and-shared-folders-get-shared-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml", - "outlook-mime-headers-get-internet-headers-message-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml", - "outlook-mime-headers-manage-custom-internet-headers-message-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml", - "outlook-entities-and-regex-matches-basic-entities": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml", - "outlook-entities-and-regex-matches-contextual": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/75-entities-and-regex-matches/contextual.yaml", - "outlook-entities-and-regex-matches-selected": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/75-entities-and-regex-matches/selected.yaml", - "outlook-tokens-and-service-calls-ids-and-urls": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml", - "outlook-tokens-and-service-calls-user-identity-token": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml", - "outlook-tokens-and-service-calls-user-callback-token": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml", - "outlook-tokens-and-service-calls-basic-rest-cors": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml", - "outlook-tokens-and-service-calls-make-ews-request-async": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml", - "outlook-other-item-apis-get-subject-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-subject-read.yaml", - "outlook-other-item-apis-get-set-subject-compose": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml", - "outlook-other-item-apis-get-internet-message-id-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml", - "outlook-other-item-apis-get-item-class-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-item-class-read.yaml", - "outlook-other-item-apis-get-item-type": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-item-type.yaml", - "outlook-other-item-apis-get-start-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-start-read.yaml", - "outlook-other-item-apis-get-set-start-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml", - "outlook-other-item-apis-get-end-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-end-read.yaml", - "outlook-other-item-apis-get-set-end-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml", - "outlook-other-item-apis-get-location-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-location-read.yaml", - "outlook-other-item-apis-get-set-location-appointment-organizer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml", - "outlook-other-item-apis-get-normalized-subject-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml", - "outlook-other-item-apis-get-conversation-id-message": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml", - "outlook-other-item-apis-get-date-time-created-read": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/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/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml", - "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", - "outlook-session-data-apis": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/session-data-apis.yaml", - "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/outlook/99-preview-apis/work-with-client-signatures.yaml" + "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" } \ No newline at end of file diff --git a/view/powerpoint.json b/view/powerpoint.json index b462c51da..19371c18e 100644 --- a/view/powerpoint.json +++ b/view/powerpoint.json @@ -1,9 +1,9 @@ { - "powerpoint-basics-basic-common-api-call": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/powerpoint/basics/basic-common-api-call.yaml", - "powerpoint-create-presentation": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/powerpoint/basics/create-presentation.yaml", - "powerpoint-basics-get-slide-metadata": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/powerpoint/basics/get-slide-metadata.yaml", - "powerpoint-basics-insert-image": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/powerpoint/basics/insert-image.yaml", - "powerpoint-basics-insert-svg": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/powerpoint/basics/insert-svg.yaml", - "powerpoint-insert-slides": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/powerpoint/preview-apis/insert-slides.yaml", - "powerpoint-scenarios-searches-wikipedia-api": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/powerpoint/scenarios/searches-wikipedia-api.yaml" + "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" } \ No newline at end of file diff --git a/view/project.json b/view/project.json index ddf6c8408..79e486bd9 100644 --- a/view/project.json +++ b/view/project.json @@ -1,3 +1,3 @@ { - "project-basics-basic-common-api-call": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/project/basics/basic-common-api-call.yaml" + "project-basics-basic-common-api-call": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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 a4501639c..ea2c51702 100644 --- a/view/word.json +++ b/view/word.json @@ -1,23 +1,23 @@ { - "word-basics-basic-api-call": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/01-basics/basic-api-call.yaml", - "word-basics-api-call-es5": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/01-basics/basic-api-call-es5.yaml", - "word-basics-basic-common-api-call": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/01-basics/basic-common-api-call.yaml", - "word-content-controls-insert-and-change-content-controls": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/10-content-controls/insert-and-change-content-controls.yaml", - "word-images-insert-and-get-pictures": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/15-images/insert-and-get-pictures.yaml", - "word-lists-insert-list": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/20-lists/insert-list.yaml", - "word-paragraph-get-paragraph-on-insertion-point": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml", - "word-paragraph-insert-line-and-page-breaks": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/25-paragraph/insert-line-and-page-breaks.yaml", - "word-paragraph-insert-in-different-locations": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/25-paragraph/insert-in-different-locations.yaml", - "word-paragraph-insert-formatted-text": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/25-paragraph/insert-formatted-text.yaml", - "word-paragraph-insert-header-and-footer": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/25-paragraph/insert-header-and-footer.yaml", - "word-paragraph-paragraph-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/25-paragraph/paragraph-properties.yaml", - "word-paragraph-search": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/25-paragraph/search.yaml", - "word-paragraph-get-word-count": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/25-paragraph/get-word-count.yaml", - "word-properties-get-built-in-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/30-properties/get-built-in-properties.yaml", - "word-properties-read-write-custom-document-properties": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/30-properties/read-write-custom-document-properties.yaml", - "word-ranges-scroll-to-range": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/35-ranges/scroll-to-range.yaml", - "word-ranges-split-words-of-first-paragraph": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/35-ranges/split-words-of-first-paragraph.yaml", - "word-tables-table-cell-access": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/40-tables/table-cell-access.yaml", - "word-scenarios-doc-assembly": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/90-scenarios/doc-assembly.yaml", - "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/%3CACCOUNT%3E/%3CREPO%3E/%3CBRANCH%3E/samples/word/90-scenarios/multiple-property-set.yaml" + "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" } \ No newline at end of file From b3c1bcee4ef8e395853f737611dc028496a8bcf4 Mon Sep 17 00:00:00 2001 From: Ricky Kirkham Date: Fri, 8 Jan 2021 13:00:47 -0800 Subject: [PATCH 322/660] generated the yaml --- snippet-extractor-output/snippets.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 3df31e0d6..6b1018855 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -9257,6 +9257,20 @@ } ); +'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 + + await PowerPoint.run(async function(context) { + const selectedSlideID = await getSelectedSlideID(); + + context.presentation.insertSlidesFromBase64(chosenFileBase64, { + formatting: PowerPoint.InsertSlideFormatting.useDestinationTheme, + targetSlideId: selectedSlideID + "#" + }); + await context.sync(); + }); 'Word.Body#search:member(1)': - >- // Link to full sample: From 32db4d79d67506a270cce6c1372c5ca3e76689e6 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 13 Jan 2021 12:42:29 -0800 Subject: [PATCH 323/660] [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 324/660] [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 325/660] 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 326/660] 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 327/660] 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 328/660] 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 329/660] 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 330/660] [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 331/660] 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

      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 332/660] 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 333/660] [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 334/660] [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 335/660] 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 336/660] 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 337/660] 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 338/660] 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 339/660] 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 340/660] 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 341/660] [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 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 H{>l9xPQlA= delta 12768 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 J^YNeD{{cN0jN Date: Tue, 11 May 2021 12:56:12 -0700 Subject: [PATCH 342/660] [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 zcmY*=V_+Upv+xt!Nn@vtZQFKZ+jcfi(>PDm*j8hwv27;}8>6wlzVH3<-Mc>rXV1*e z8SI(aZG&iShp3xG0K8PhM-iYvAXYdK2n_@RdD}C4Il0=IIyu=fc{|uwX{tJ9vY-d% zHhu)XD*c4O5>YHg$E=>?)3jR_(qc**21!3|Nnz$R$Cxa`hGz37`zLHb@P;IS_v!VIH{;@4b@Br$ zsPPTEy75A7`ZOBH=_^3RzZFuNRAE98aWZwvKd7@>%d@O_{)8uO*e?;?3}4O%Ev}V9 z_!*;`7B$!|y`7Y=B|#Amy`|vO^K1x3Dec^RhZdcuUg#N0 z{*+WNb4VIsZ2js&?cB9qff1h6RrMD`#7}ST@-NmI#?2S#%m-E;WZJ*j0Q#3mKP|dv zvP$cCoUR~@*J*2Lx$z}A#NHP&f=##E*-@9zwt-EI29X|{UQ6i;izDSawYbGIommA4 z$OjoctY!J*u&SYH#^0$&_*c_z+gw3fZXPuQQ1m2#38Jf<;m`b~G?lfz2;=yIfl|wJ zsbaIo=_c2m7mg2DY^D_`bja0%8bjsDxL!rQvg8ecr?3e#HcCf327?O~A(PU&*lac1pM3&m5@r__D|5Tn+Y}+U{qY5RLYija=Kf)yI4_yE}T72&_bkDH#R} zHnK4kPWoT#+JlfYrw%E|SCl7^yJxq39sH~S6-f9b^yx1=2nL<-WrRZ_GgJfFk!?MB zV9D;0veCGxtmcrQOS^jfSazax5vI{O z39JsCPvK0HX%N{7{@r=wxb;$jcfDA6ex96GzA9JRprUgg&U06*O~T4*leBVfZJlQt z$`)y>j%Ozq?Z*2E=Us1*z!1>bh&gEUIS>C% z35En19fbrSY{Td-rMt|Vqvf3#>u8d7P-||X8P%$~;5K2p)-wgt~Z@DaidY zokTspj53iR!5z^pD^fUX&G8I8-XAS{c-+`$HoM<-%wP8Sx%rx&Zs1sS`FlOrwT=by z3EJ?h{CF*GaahkbcG&FZH}C*94|A=o9J=f6<^zwonujL9c1tDw zJ(D+8n;c8n=VNP*2H9^{hm+gWOC?px%C5`H#Pw7i|e3OL-X>TsYQPQ z-U-lI^=II^u98{Nib<=)aE&6Tv9_(6?Zy7IW)kt2MH}kMip8pD^J@Pc26DAMRv{Hz z^yyR$v%cnPXMgqpSqXYrOr_~cpH?##(Y5<>qo$T=EyM7pI~SC!j@k0Xs%6J0UNKxA z@g9ErMK>E?+A|6sNBA-nl`>n4LF9{U!yvE-QKY!B!JETvTW!Vq@W;;k-rWP$w`;N`!N%sDw(>!PhOV7V*vO2F3YSx~ zQ^gj8bm=GCZ>a%Qb!VyDGNeGr}Jcun5rFW5s1Mt>cSmOgZ~y~yYSdUmWkF~x!0 z=L&l6lrFnGw~U&`b0>?IIiIwSNl!TGVeK{_k@&z5UT~J^pamhi;1~q_n9QeRav0HX zqGn;iJ}&|)HE9E4RptilvW(UcMtkAKGo*QX!MD`u8#~6XsIco40ik(^{_<#@o9P1i z$Oh35Ms1Drl*9YaEC zHMrA#^uN=BNocmI*MB{(*%R3{3^NYV&!?!26E3G_D2{9rgjh2_!;bU&LiVR3-Bu7C zH3Z<)((bgQ8lAuAx;fUf{S^eK@49aoJRz7e}e4} z+sb$7B_xiSo5{O=9PsZ<@Kc+s*Gtc*`gBg&b1izd#0%$phf)$>BR|G#d(8go<|^iu zvmgOc~sASGqn@x9$i*rUDXn=PH|NW1`BfktPnNz;3M#A@M!5pn`;->zFAvy4@! zuf9LN0(C-ZoZ1lt#~fYjYY1qPouY#c>nyZMV-t(y6<*b@qW+yC-B1UZpP)0jy=4i^ z%F{$_;?^=u{1V*Be>r;B=f?v&M`Q>l4> zm;s~n?DFcBMrWU%i0}?l?Rh5(v^{bt%=#0cH)#egjg>%+M^mEFI_)OCW_ z!9^nj7h#d1(G^)6)4kom-KlQfpz>A+uA;t^{*+Y~A_7?_)YpmG?)w$>J#@pn3ZA;J zzq)A29%f|9uUZY-(u^{a@}Zw1WlS;oZbx8+N#dUnd0H{AL`+56+k?z@h1Rrj*2z)Y zjbDfp6|LK=2&byLiW13LXsa6pVPZbxovIsc3VoEmidf^tkbrJ}P{3N4O69!rw;Ye3 zw_+-*pQ(f+t}I_7j%u)x-6j=#9VQJl)$+Ik)Csla3P#F5|LiQ3#es3k2+Yl7Ra>6s zFWYB8fhWjI^vdr9YctSnEg%$TtX>L~cHe!nR(@>tMh?*u(OW;%es!wQ(PXk? zV;OVXbC3%9Yq*aZsgXBrKiCQ#lmI5b^B^pw!(3(7p8hWOMZn9OCHpI%RLyb-vUWTd z{^w#Cc_49DREz5M8;7AFGN zQ>}dW_B)@*~E2M_`#ED_TFA=9Hq*aVD9P&z*)r4#(!p$SL{}Mbuqmk z;E(`By)t)gDdhR8{+2&`yU`)rDjccD$Pa$bU^JH`3VY~KJ<8eXTDAO*O(J5^9EWiq zh8174Qc_`!JF>VM9=i8w?=$Yl6jw3|w>&-sLjLtalRkp&3+F_;tFqdHLJDQ3BtG;X z#h{QMc-gmQsexi@>$W&Zq*VgpVo;jBzZPgRaZ@`9;r){;zmT|F=|luT zYkt}njEs);6j6rVzIQyOjPoxvrJ3sIi9c1IsoqRIPU9g)RMG_`$#w2^OFGH19+~e! z-BAS{p(Q+gmovR}$R4Iw0gJc0N*3TNt5%KV>y&jN1^=d+Z3(isHxx>tVe*Bs_a2Ko?l1Oi-pT~sQ^Vnt5*a8 zna$=3UX(utvX?Bs7_w3yiEkCV`RQjVQ3{Dbvu_SGaxu&_3d2DECt`;vS{b!c4cB{w zIU`j_BkNkC8!H~=&Q8~-H2mKwL_++okYcRMFF%A`Fj32RMDCx5hWC!;&lPCR!UtHG zfF&=~sX|jv(}!^o+x#t?4b?`@7Y#kvXi6kAGCu`C67$XeRPwpFGGLj>PEUk?|+b%bh zGN`~L3A{KTxj8;_c3`gCsv$#vfbNg+0~KZ)DMR7Y>tPHKY+`=kS>-|`^7$0I8-)0? z0SjhkX>{V_eb+x?1DO78$cBe4?p9_?9O zp|WRJqiWTM5-%HH6by`VUSUSD{eLgy@VJ+Ma0V*dmp0}7azj?CT|$%i!Pj6ztFTx? z8%UG)US|FBDf-d8{gKBh}vaBqi$#H(0-hVOq4lV)wDu;>=cEj_H7dE%(XuAc~o zprzq~GC@N06Y|lQ)99;yR}aLHoFx#!DQh1O{S>aJA(PIo^M_MRF;GYZQFS6BD8AVKb-n|emnelFv|WeVw!|{ufMV@ z|Lt(9$)=6e^b*L&M8AkHp7AV*gt%7+eevbI--&bZO2CK@rez%;{;L@=VA2&x(@Z0s z>Jxzn%-UOUg#LYn)rDQM*|WHBR$OC@IHVZ1gI=D6t-j!VSS2RO@xA$ML)jpD%6Z znwLv{uU1FFJszP}tC!S(J-n2)`TOK&iGy{1?XscRvEB1`qst59-rTUOlrU9~Mhz}LX~N!ZAh{DM z*d(L{PNCp8=9v930TLR^myO+^vCE7gRvbXs#pYU4c2qR|!r{Ca@=;lEUKs&Bp2g&O znqD2q$NqhWK%0d2#mL40mzWTo|VpX|%e6BEaR#<3%%r>4#3b?hO@hU_EEh(ooy&q1Y=hrLlMk$!* z5*lREMp2x4#S9x!Ob!qAyF5xziqI`eeR#PuEYq^}i zSEygvxAQ|7^q(ID4fw?5kf>P#?jEirAQ0ya2!sa$zv&PFSq7_)gz`xNq{i=}GcQf) zI)jsSn=ENV94vy?6WIqpQf>5FlgjdsJN_EK2T(*?YUW^JP!$GuGs^$ekT}3hO#D&0 z_4enXbU4$fg^ZUK<$KJH?q@$A|TISJo=J4k2{o6U| z`trJPz~d1B_&%&VevF^CoZmZB666?dZwK-d8E$QDc5MOcLJo%8XNJwwVo&w!!Vai6 zr|+kmr{jSgPa6n=f?Ef()~*kYKHlAew%#2*Qo|SHX^}7Iwq74^HZT4>bgNFJ+;BfX z?$-OqPi5EV-#AZlxL%C9dtTjp{CqKRa!E)?Q2}>A&dDj~V*CBz^wzQG=`T&-N6y;h z+vKI+lTqqN#=Kd3PbIaW;Krp_Z3lBCcfr$zb%Q4m$lbHP@sQE@pwfzF0MHxUTn`(`bH6vPzo{*}NkU8C?59oM-XF&2 z8Wpj-XP|bZ0h@um3@z~#pS7avC*O8=mx1%`uv6&b~k0RJ{wpc0T1gv_N3i`^g?4s9dWPsx1^Qlr(H1&K3GoeX+S`a zUoza-$F_iAGQJq>(BZ?yk<;+e!D!}a5wYU;6Xo^g{#>B5>E*KaMpsEH#cP&6v3rp= zF_-%D9`~Q3{g}MJg-R-cInW2WR?ustkTkM8CxE|8ewQ~jh^NxKDXHEmLQkiWvmG5q#e^Fld5pHY znTIk4keuMNijptM`pbaDCRLZ)plDCbF*9^)6#iS`-4fSC| z`_Y5!owQf7&$Ej{2u|A!YlKBfvg0Lo3ci2n6aH0Vc|%c~G;@Qso_SZMg#gDqE$8<^ z_CiC?-?VRFgZh2A`3^39J%N6t(EG%E*CxNd^%iAu$3>14v&xJigYptyMizwhuiigl z)@E7O+FKfC1SYd|ZG3+Ji46ZNG1=Vgon^v`@~GjxN*(x?A^qb1`%gf9*b4ROZhs@3 zL3vT*^3<>Jw19$~?iqo#QY=9E68w2UNJl`4e-cUv$M8O?)O@lqfbaURkdD|H_|CaB zTkeZnKpDft84k*C$x@6TbKk6vbIKpa(d`b;(t8);1g6DgMTirvIKr7QRYucrRH&0- zt5lc%=+I)GBe@CR+3MMygc)e!&|RIYH(Y%t_hs+Mf`Y<45?+zbGAll3d=IO5eIv8`07dRU1RmIO)2V zDN^baF!!U(p$X2?{XR`kQ7K!fm7`m$Ctcu-d03HIMvFeeLCGMw;(uBO&eET!6lA7w z;YPUSWwv!4ce_?AQsf3yzN-s(Tj~|-@>o*lbN$0{2MH8QZXgzyW(i{XSmWqdNfua_ zJ7oRD9dY>0i&31?C2@ZiJ1~SyzZ${MpHxcZ@@?WWZ6v2Ff6`(Hny;Z>tbOqnsf5>>>z!poH?XY(R1Nc!t6irHWTO2Vb7r3$}|7JY5 zC**e=WH~yp`D`*^N@eoRaW2ZdutwOiP2W=3P2T3sS(Eq|U{z(v*q^7j`LzDBWhq9` z?(-|j_le24$`Tt~o7tSos>+WF+l_lFuxcN$^Dg;59C4xLXSq;gwKahrH5sdVw799v zUi^bV4X6mSKjso(|2|@v*_24L#cE{B9xCg%#D3Q`i$0(8LqQ3nEq37LKPyR6F3$L{ zyRO<12s8|MXW_%P?p4K_!x7&~PRC>$pRY#QTuorA=jbR*ZLCP$eCyLc5Y*56!geGm z;z(GNjJaB#+?*Jb&yw4KtF@Z-@U5;bS|14?F#JVXx+N1uh3wF^_-C~zfidr#lxt|*4=L9|&&N9<=kay2al?5Q8U|L~ylO@$-C7?C1aZCE=A(t^ zPcoX)n6^4i{m}J>dG?gFA|@AbVa-h?QzKxU5nDacC4>_PsxsU|6VbAEImK$R^J^MZ z;J=8U9z+Q9;j1k;Wmty6WGT3{G9I65_hfb$C#>wN%d>i`MYOuK^R$|@1-P&fiuZgO z1rCKk3$*c!dH+uLq&hWE9A)oMmRz4&PE7~2s45&gkz!8>4L+n+7b?R~hwMxX8cjH$ z`ZcYDJNsCPL09{me`e$%_IVX&1o+Rs%9-OSduv&8f8s0++WMB2|0DEpEpegB!Z~Db z&S7K>t!l=BEMA7A*tOS(%VtgcmzYH*qEBLI+bxiQ7BgcgMIDhvm3%-JyC-K#xCf~e z_RlKvHl!-0djnLMZ-}=u7ApvOCwn0W{vAS<2x4P!8h?lbW1t5S!UTZ>NXL`k5L5qE zP=mTivK{oYQ#;P#yGNyZy@+Bb8ia-ez4iT;9Tknz30|>7bvfNGw9bD(|0L-_7@$$& z3aW6ZwrKh%(BZ@!SmrPNgw-=hJDGfXELZRU#eX?bdCmIQ|PyDRoZP zY!0civZLZq%C9K*MNXE`jQ@FBR;Jb#WTEjAGRuL<`p;drFS@|zRiK*Ts)|N%TP@4n z5s+g_mwFT}kSr{uW?0kKAJ)N;FT#u5>3<7bwjqXYLgH-7mwZt(SHu;OX#;6E0XH!c zo3sPcaauA5#3uO}OhI!0_R^*G4SK_d_>{TnXjb{UOnK-nkZRdl>5>J`CKm?jS3YccN~0M#W3IX}^-2zIpAcHYebNP!G%Tko%pbTU5?Thh zDg3lA444W?w^xBpU3F%orFH+~dAHm#5VG0fv)2s2=HKM|V`?21I6AdT_U$A0nR_4{ zc_$!_Mpdp$Xx)e0oN%xk%Ek^1=nxmw{|gUM%g!{}$z3$(9+5JjEI?F1jXFH2>i(BZ z`m&vbr_{Ot<{9Fx%GvH2VcCf_gPPBYhN zb_~)RsGAr+Miutursbk_UTc}$7UWyqhdp(z9H*}G=-Uo&~kZ@z~N$$ zOr~R=+5v2mAU6eu8>(M)SRKSbk#BNWjRd(+QM?BA;WQ;{Bg+FyZzTj-g(7j0>#IaX zgX<6JJ}VQFL+`*%41|nYPZCI z@!-lnD;DS{*w;0UZ9cF%fn?uR;!8asN$qkS>vDZLp!sBlp!N;>gMrDaD_JUWX43`j z_7ipNoU4cZ5u!-G?ps2WZ6ujl8Jp9|_r$s!DfDH09(jFHzS{TnnpoH;MBnI`IOuDR zkZ-nlvF=KDUjaixl$-9^#016>I*&T`7+BxK3Z!wnLecJaZ*eC+%)EK{f?^YnnJ3TU z7(;%k2E+51(zL9ous<9jzE!)(GYvVm#60kGmD!?QO23o}Wd?*?=S6}3&s~b^S2%7q z#aP;$!%O(0{o|HD3>XI;|9*ph@r_#iMt;px?? ztvg0Ccg+3%=&{Npj4{>tF`s|)$-c6fPrtQtP7G?eQIMf+C8gvrq6tO&cXJ7CsKjHX zCyK$HG=R@Bi@8CJi1$RIhBcIk5w6Chn`0sViJ&fKDT%et*J+8tST>kdua)_wv~7rT zi&kM19L>b8d|uu^VA*CXI4a+RWUlsWu`gg%bCQ$9#e~j7nW?>^q!HSKnzOayKrpse z#hQ6UUi8Ah@dAqsATeMllA;dUWwa!NO%5JefnaZ#HE~^HM zz>G=jKPk>D^0ABi``gcKXJvQOAFKu!v9uSH|A({fdf8+aE<=qPQ;KW8*Cr8&31oWD zcGrB@@%fGzT;gjL&4H6w5d>&kuxBgX$G0HFDG#ALArPEf6|pR05{ml=*C0N^z3lkU z*d&7B>Dfn8gZc{uoT}LZWO_$|V--WluR5zN1YG0nq$n~}wXsq@USHrp6M_OQ@KFwc ztz20O$7$yT`Kvr#+%~%9GDNc#5X|_=vmw-ob_BDGcB}4Yq;LgTmd=aJr*=6kuL*O< zOh;;YFlged5`C(67wnz(290q{TCiGEFan0zY-2Jjhg%PtgEU z1%z5oL#PBygi&_QA0E!lGI8-|QPOvgA~ke< z`|>oPd(ZPNWa+H??|MDCQ&yPHT>efmv-ko zzr|Se%AIrZU1YSvNyyi0g0zHMKi7aZky^;VRzuHdOCj~5_I>RzB|R5!I!})`Vcop@ zoXiJ0Ox=|yer;%vr!%r}&Vbo}OfBO;I=QP*g?T)A=72Y@M>aY+e@{iL8jIQSXN8w&lWKHmrLer%0W!Z2TI7(phzbF7E48mOyo1r7A_-OS746u&HfC zsF)cYxW5lYmg<2n z*|cSiKpyq^*V`OBQ38r`mOH44AZLeH^kvEe5#l>>8*?1FL6Os;ZDy-qT?f-;`J#>I znxerpfL&F@=}B;P?xp)@}3jsF4;wBj96hav+qjXud)h3HW9<5Gwc&UfKa5@ zO-6Ss%9yheLk(@7%6AbRpqxu?{Rl-iM?uZx*F4V`b8MTgE*xdqt#Y1Emd#q!38|L2 zT+!-ITwq1uSpbq|JY87#Zzs$V^jQ9B@9wNL%KX(M)i@mZtxDihu{Gue!`;6XVFXh857hybuY5c>b z^DCK-5*v&(_25Q|U8gm-i8Ci|wGBr%;G#nVm4 zr#L}n-)yBAJ0h2~aw~#E7x5{Y<_vwq@7R4>;7b{eXpye`Nb@EX26Oi3ko2t?@p}H- zu-}Y9dDp!}fAl;Q4bK%27w@6yp8RPIB4ibT+PD#wGQ>gcAZ2!z4f0(Was0^bh5ADT$gG|2D^Te^cl+sMWvSdSCalYnX@I&yd+tyP_COX ztDHakdoND!Bx2U!-p?bhj9ZskoSOZmaGDa!TegNMdSOKW zJ^M7 zhAG(c9E8!NK;uf;ow=((Y(m)8Mt#%FPE*=}Ki6fd80^*|v_k%vxr;3E^&N7VEvoYz zc}(>|AGgi+sQ8+~tJfEa2P!cI@T&TRkgyk1-!SeDSKeMwvUb=o$;#p=P*nqw2sj}jJisy6&D3kc9v zVxIETY%bN6>_2?7GyR8G4?wEfMXP31uO0VXoXZCY7k}SOA%>IP z{tq*flD3AQrnuzdLe1v)}vWih$LI9hVSg{%DJ_mG{3Ej56*H( zF79!?uU8i<5ohay&FDq%1#d`>t|Ysev+iLlyCV%DgoqF?&%h#3R7uwsI+7+bu@WrZ zq=}H+ZbgGHnk)eH(fr zU^B&8{D~iQwDVejxoKjw1VH>H@yLlFJ$=TMC1evhvG4%!p#Gdd?bDaIJsP*Wg;3%0 zbXG!14+~alpcI-&2Z%w5$H2CKhnA@A=8%OV!(3tyI<=T$#+7keScXWSqE{~A*F$gn zbpW%)QMHLuXxFZ>d2BEK&}dTT>}&z0{Ge@=wbsRA(;}shh zrit%+XJQM$E+k$+m?ZX?evzWg)=pCJf-^N|%tg{Q;6(R9iEzxWwTC=O{ z!jL}o`+X@<=sWy7_ksHWRX3%MbK zk5K-v?SLvblH?ksiMFI1X9@wjSM{3nlwjJXTx+BfZ>u}68I1nsIQfGZYg^EIwnuGA zOAH{}Ge%ZhE6BDPJxVUpsoy$HfZ{G>O#V+9XtHdZ<#D5>p<;!Q@yUPUpgo)oEg8n= z&!(VUhy26cOC_k%Ny)7cxl^C3f@|7zJ;Dzk&41AoylWWjEg{uTnX~n+yN#14cThe^ zejuOm^14V+KfoFUFwUz9Th0_VO&*-Z?*pjR7rHaSln)jkG0z>l+fkJ_)9r^-{KBai zdnapzN_OPd{K1>S(CMrxiA)E;qNS2+kZ;?_7e&~kl}d4(eFYj`niV%quG;KgvYKp{ zB&Y>Dp3rFzXB)RjT(5xX&>f@f5&n=ro@)_p1}0v(?Ytu>d(# zM2d~o)ZqPI=b^0(Tu>v@)Q(#huV9#H8j{zgLM4_hltfK-`F{0Lg=J_`;*4Zxc@7E# z6EitV{`5gyCbG))vau~5ryp-w#RmNy^xFOJ1`r$jSA9c1jfB0L=@tm9I45lewgd|+ zy-5!x(_q)dq08&>n4)C^er)sBAb|OfZR-kV)K(RR#hvjISB5^XQ@awScflekah{8E zEQ^FyjN6JMIkS=>OkCkbG#ZS;mlQ4`I z&vDQzt`U?Td0M1Gy2eEk^kbLyH67%m;MSAc%b8d=cr zVFjLiEM^5Vws9x2$aft}d>O9AiKs(P^n9jDVVoXq8B_4<#Cl<`V2?);ZILooD-{5!AywC|* z6O0}|&&r=MLO*5duwtPN15P(8D>fRS7h%&Z#P1-8GnmCzgJ7ge|MeqSsE`Vc{CBm4 zT3O_f#fbw0v;Wv=+{=XfHx`ffdnxxt7KsPfKj;$%OdCh`5#vWEm4-AqtEHTCFyA+5 zWg>r_x()}>ezc^oy#Gsukt<42adZ`#oP^+m*GFZS=ntWyM}e!qMPv61-U*OxY?IfZ zZ?2*#9YQ^)t<25k9x_T6)m;@Pwk(aOW`)wxPrnLV@X+#iM?XK`_9G)AA^H*x!VnWL z`?F1`Y{`EXEAw*wNm@bP$fHLl_~$JkS(`glwp-4FbpZRSRYbVr0diq^ft_rYmSaS$ zIa0b>vldIGk{=iiR||%u;Z~T4p-T$ZCk}f_>_AxcELyVVfiz!ERGEQ$4F#|NHItGl}rr z!BQL6sCb=Q63eef8OZ^dxkVdEIM2AIiXcVhyJlmtRyQETQQOJ%Bvex7h*^y(x|7#b zRw*S`zl$e2BJap`m!#r8f?Z^p-Yl^tTa@>|wLgO99a8K)zhO5Dx%VDUlYr#fH7S$RS5`VqUe|&FlTPZY%!Y z5A{#&Z>N?Yce_t_hb}LYmUXj)KUDA0jC!))16I1+ffV#B8!w)-9HpLsbw?qmhXd|W z-0m~a$a!W{kJ*>o`>VGD%NAfoh?FbxzxTpvo9}ho0z~@=PNYITJ)0i~ZVz2F)Bo-? z_wJoC-*)c~10UXWNDMNXKTdyTk1vZ}!g@X(v~0eoO% z6p7#>EJDe5KUqB&dnZ&;$D2Z4_RC2Dp+KG(@hcr`%Ed<1Stw*E)}{*Z{5s$3Q89!K z9^QCq9GWfW=@pH_qsi@yQ+#Rl}dHW4nmvd@kOq*B6PrxL+ccrG;2|Q=G$R}{T zleg!z1NVmNpIogab$%8K6}{j{t#_?NNs;&|x0rO&tLzc?=L*dDpQP-}rv8P>u8&t{ zS^12)tdQ?wh%#CLTS5viq|GFaB74#h%@YAE7O8>TG&sx3L=n$@ZURd9-9vlHv<20z zv4XYV#5m<3^hqzk=VB4}=%-t&mlpiF+@eW~$1BH%z)hECEK$`=@A+Hw2p=`q^z8*{i_!0hIdcamBs#md?&TDW7|p~C5>D%Xs9Zz71U<>Uxp)2<$A5_3XQMC?*eC!zcTI z)f_M7Oz2|Wk$=_De=Jw1J$=hFDsbU*nd|UAq4ds%txWO^0S$^Sc^z)Y~Yk%?9^@?yzW6zg|InPRi`p2QJqbrvSlvRJ` z${n~EM!OVB%t0E^pq*-kVw|CNv~vXHX*ytw~$&#@?0@oFl z1?@8L8eb{xP^yzC8=+6+&F^-uBwiyR17#@&Xh7MaigWr2Jq+!J-118WO~PFQQHbnr zN`qL$85u`LWy%y2*9HRR#<&epms3zs4mCzvT>TKVeb z=1(ypCxd1OJ!;tqbgAdV6U+t;wxe3lF}8##rpOwQxvS(ivOGyPP%&bD6VnuU+)4@2nc%%;@bOh zB_tVf->5}$UtYbid%(Net1$naIs^B7qK{|Ah zpGm+>B%i?*U(pHwZ;Q?U<`M?K>PVs-3I2DI&CT7%-og!ht%nUZ)g^$q0te_SLzsXk zb>$)A!T5S2kf`!tJw0JaMkR2To&e;H3b<2+5PYYHPV|3W-~WCAj@my*C<4i-3BJ~# c1;^;4|Br=$^Yw8cI>0UZRItKd|3m-(0P7J|t^fc4 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 343/660] 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 344/660] [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 345/660] [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 346/660] [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 zcmZ8|Ra9KT67AqF!QBb&PH=Y!?i$<&3p%(2cXxMp2np_Pg9d`T56;WI@8hob&R4JM z-K%@m>DqNpNoY6JP&ZV=6cXs1fb$Fm1_0nd001xm0Kj(#HZNzOy}7fqJ?nQzhZ?ON z)nay>kASf^jFRn7$SF{+Tow)j*gP^`&vTmeb)V=NhNcKUAin3ri?=|%9_r%K%hta4 zfXiOb5xVTIro4=^4x3>_^3G9nWme=Zp_sXu{rrEj!O|0@3r}jizx`p66Vz^=j-fEI+P5Wd;PWh^ z{3TOD@9)7ixyP_8a}Yj}^D2^Iep{6{t2CX02kh*0+8y27st5Z!X7JP@0ZBLxf0D3k z?tm~8VL+l*#|ZNFuZEWy8v=!iMFr^JFH}Tex7*phjy>FNa9W-8`a|%tpayOe<65Qn zZ(OEf8(7IkD{|B(=Y>3-KSQj)2?Ub;1xyrBOmUOblSJoU2|;BP)uy!POs%2wWW2Dx z1jA%=_I#X#{h-Pcxb1Qg_zdh?l;oIHH+#zwR z@`cs*sC4gD4C@7fYZFQnYZ|j=v(yRqeV1sI%TNk0wsgp6<0Ul7e_(Al{)ga+DVsYG*kGh)g#28O+5M>a^sChoK?Zu~c|+ANXLe>R?A z4$P%QZAs_heeRrYU@zA~CtS`Qla4WBTh0Q@yR0PyxP}b<^Kz_= zM#0Dg0T_fYm{pfsW@eh~u#^00+RClzJ9YJbx`|LwqJ=hBl@AgKPHZg(dz003xwmnH z$TRcVC6$p@CsROheF>EP9qok4^UvPUR1mf`{^5k1@XAv$U<6jTy^J}Bk|o&$kPHQj zgPd7Z?7@Hu0H8=Ge?nshk?Sy8`bHfn9?K-5qx^DgT_N-<~$J23*d}DYSl;I7WT62GF*UM|o z9?mK<(p#^sZtm;xzI||T9Dlx}@$%m^+valy2?-yc-axjD9}D|F?$3`Syd0l)j37Hj zoQ^LSH7{2eG4QW{dRY00*NyO3JldN+^89~xGBOcM`nPS41 zGJa%u!e=^*V~mj?G`8VMdOuNASD`grLji~kvGSgR8`oivH+wF3ndH9`I z>aP-!9VOG|UCLHa!mo;i}DIakunBgFpi`*Pd(eVQ;hVHvPx1sq^ z7c_0#HQ&|;O50R8G`iqjCnX^@**}01ettVt0>a~_JBr=WBT&#&>lH-cz*54;eu6(Z zzZL5=#zJXK@|dD&Er9cj#ZQv}1v>H+!doF!(PDdxi!)*fXVKD}TA`KFgD_Zxz$y=sPPh*$k=FWgeCV*JFMv z>{|^7-C3nw26A2IBq)!ODH|MI3pRr_*EdDpLwC{Q+y}Y-h#D_R!@R7e9MGqF19D7f zDTiN-PaHaQf28e&JPtim62akmGai;b8F!VYOI%=LRv4m!&Hm=lwv8?W)`uz%9s&YW@+~eVsM)Km z&3vJM|BVRmB7nUoIRA{z1is;}FfwVq43?3=?nxWsEnASOI3N+W5R&`rVGtpS3cDMd z44t(K2oyzlS+2MLjVJ1TY0T}~>ne~Ba%H3myh1nSkbPORP>q%RzEr*Y%Nz<)7Puiv zUE2TGbKf|?Ng*6-kDMw>{%De#`1QNc0n?v93cp~YppH+Vy;cbhuQ>B`9G(d5rxh~>cn=t4HTWpD16;Vo`<)LX5am)0C zSAzcRbK<;ib@oXfKDc%sFD?0?wL4`;Lxw1-^0dL5xX)TRJ+{yOPQ!9WqL&3p&D<0= zfihcRH&t&UmlMbgsHt%5;wER&Ai=PgLsxTa9|Urua+jKd%|5fGqLT2 zQ1iZtUr5x0M4EB`VgV#n!WUN@W2)r7^%)8?A!lA~?EH2&KPKojM&UFRUi(&)KGM+w zPdH;8nuSfb3RP+=8fS?ohQ+^J_GCw_C04>ZA=GkblaOaFWd6B;tq+Ok3}ij6{O$p! zKoPl@liVU4Mx5u!8qh?}`n{J*Qqn+ppo{*}hW@lf^Md`P6RMHZIRDxrdl<^3n3dr) zrVdEp9cx*n+a%zZR514G8+|3^I!PgoF)Iibq(veQXNc+DigGvSh!UFPzswT3e3miv zUWmp4nb3KX(Z!t!_mgh=gF?EH^BkbwBxQv?%K&fen2)(vP%mB@T)U!O<^aSm^gkgL zZu1llbMRaWnKh5BOxB?ayDi=&S<&&Ds98LU*L(lY_EWG$cDam&u^2s`wNq4Sif7=hDiNpJMFvZn= z#r4OcyW?P^H4@k-Np4x^&bu~-of*-{HDJwD2(`W@NfDM2O&w+Cc~ZC@i2`FUV8U%W zhF3>1A2-aGpZuMw1hH3enk#wV3@HZg7y%G~uFWeBy)s7@Wb&cP_fW5joMBKs%O-35D!+ifwTRSNC@1 zYhk+%5WQMh18KQv9=#qd`FjVML*jEZCPUHFnnPSHV(^en|Zzic9zWf!npeLxSx|3(Tj(frDWf;myj>T9^2IPr~ zZ80%MO|^TF)r%>kACKckSqVuuQbkx5KCr_6NS4}$X=?O-(kz=rtu$pJ<|{8PqaxSa zCVOfjZioF+rDvpOo|u|nBo|X-{EJR=s~YPOG5E5@PBEi<_=T#i*ZAozejyX4x~ z)EViHh`8d8iebp&E=d2IgWsn&Tra7}{uP!(%sv(wev~&yuBfYdUF<%6JMMGiR|j6C zH}L#D=&~J0nTHb113dL0-zb$Qf>FGwkdr~1Fpg!H91Q!h#%8}K-!0HOp`5|6+(5=1;<5%``q;Z1q)Rs3ys=70 zIrew2KMG5!!OO34gG@%BRJ@oQn!DPp{8|wLqVfZ$**#*IOG1B~r}3)cgQr!I&sA1M zz`#zdk?sN9TuGZgvfEd$VY?7oLS)4shsd`gR4I1&DpZCm97wujkwKIJh2gYn%!f$r z7lTPKjGZcbVm}0V&-KBd;W1-S5Uu{G3GsccLbg?-rC9}a7M3;~^=hTX&%hXdKJ;G) z%?Rr&PUw3x)q1PAW5*gJ1~std>D1x=;#Nc^!jC0^(%%i0p4aAJ)aTWCfZ$=#QZ%P5 ziCso0cbM`s_NFINLfXP22sPkZRX-nZM4{)uK@|3fWg(26WHBB2ajq}fOUz_mB;4bv zAvwgQ4K1oDxOszal%QsNRAGI`Uhx{xN0D-YXtB(&ot@*?wrwb$pjVRE?$(Qv$4$}x zbedNBN4|?3nZ{z)u&}QmF;Wd`3I57YJMz*~fZ%mAN{h7jlJMkL9><((x+@Bg^{NBz zlIYL91At~1{avp~zNd>Csd(-fAV3PzUP#aJvw)ox!@#|Twv0kPSA7gjCkFyaBl#8f z0!Qoa5Wxmf6MV+VASBbZdj9Mo8BKN?>Tz9}HRk2sIB zkBmG^hy4PWox4+JxJz|;D)^XU{c+K*E|kSoIAfr6Qe*9qrYSAC-V5JG6M~8imsinN zCHG{LY)((M-BG8kO_98k{w9dy$7aK+ca_ZrAD)=H-Z<pO@7vak$W;KFWyzUsCV~HI#+^ z?CH#v;VV-6v+9#H&L(rHsATbc$arEy6Q~g8z_1 z(pV9KvZ0(1Px~=mAN6@{1$uOJVxGxfzctqwFkKw zqD=wE@!*k}Ds>D%rEc>;Sunl_?9T5-CnbfjZ?3N?!d>P2l;vYlkeT)0jrP@y$XGE~5}1@`wnl>J+t z_o4=G^eR1#axzhnF+UPQ1YsXXAS0b?gux%UN-`Q@RgMUZjDYYbwhmP~*DWMKKTukM zWyb^+RZ$WXeozD3H-`5BtGq6LJ!2P9*XDkcN2`P=2O+YsR{$*ATd!g9TPC5<{qxJ$ z*4R0YKF@8IayEELk#%^{!rx%HpG)s|ELL=Y1Xe-W;0RSEI$*A*#LKdBRkv$>*B^8|s9dZ#r8xt11X6~m3<68W`Paj5opqFD6{f_S* zt=j7WdWU0=&j)YobqH@On-4E;_m|ZJ2Y>6=U(V0Xm{jFgbUs!==VSrBn<>MJ zvF@kukPmvJoA(hDMZWir^*8OsH|Ah!@0*1KSKs@?dewPCLFI_eg+6Cd^0al|#ODN} zYb!V3ju-!zX!f7o?;T%AJTbzGi5U@|77pJo$k#`vm#0g1rRRQ3%F@cVMswp4=YN#n zw!TP{^d1Y>e)!)!mpj>j-kSQJJG{48y&xa{kmD;YR6ODQwtT+r3ycAB>w0TtG9HF_ z-`#D`?GHy^$iDsc*Y`D#J-+;RL&tn)%Wq@Z-*cm3+Pi(d3tm5#28=Q(znMC`9|Z)6 zim<5~tA0MWQP%`*h>!<7UoZcAsT1}Bg!ht5U!(47Ria*n7zq17Ds;5gu=`V9!8f-w z^dCahv+tM*`J%AH>Ddf9n+tn~7&}%sUB}yhy{(<&*y`+mFC8>^e|Yx21khR-ZvAP# zgUjStAinIKKw+yP57p7%)qCE%yp(lz4oG)$c?oH&uyxF$_CQ)xYO2o4QUe+-09Cs` zo%-UJ{ENmFUXjUy=Ef3*Y{zh?7TN}zg|1Ur^|q$Qv51n{@Mf;ce$gGv;=j=J_&3`) zCn$Vo$*$u#F0B`{npO@bqVp`4!|z)S>W_|{S1Mnm$D4`q0Y{bJsd|njkt}zI?mpKj+4H)cg*n%S+;ke>fgoc=?9ZsJc9m>&cioxnJ1C-mJqNiJvR;O@TVE z(6?-hO|m8v)NBE-@#RJcg%-*~DsK*_OHPc|L|ZIZji^CJuiUy+u7z##ZL!+1wi4SX zh$&&IE!b*iSq?|lLsuCsvsnx{u@gJW?NuKoq!hxAT`D)rI{DVka|Q>j_JK}H?UnPS zGSs6t6rnmz$mB0f=21DH&e*zCAJx_tS06{yJn4M^$(5+|3w`sY&Z7^?(f={SL{%+c ztevM{Zy;Obf^|@pUBQ4k%1zBIz3O*bk(^_=KrPHh<;sV2E5K$4oN&8VFHz=G`=KH9 z-O8X;pWlkQkoVsdU!YK_^agTid5$o)w+*ggjdYO>-T~JGbf>ZqT~SL@`e9?6NM#xqyo0SRJD{L;Uf}rt8m@Y3W9vcG0)CdDDqy4xp@omwTbuPr9l zRm!Zza~LLj=i%!$r!R5J-2TDNH3cn6ncI&{P7T0mhcGC2U~O@sO<6349^x=AhhKOe zd_z;FLG_ws^C?s83Ae8L?r`MPYAti_b1;RPxVk~$VZ8aqt&vqpS*kD^?lizv9C_BN zM;x_FdaLMY#cn&}Q}&aO$b5|}d5nRoJ@NZCN8gd&oE(q)R*d087W@n|2N}pZ9O{DK zo*FDZ@>*m)tkUpsHpuc-_VcJ(}bwj!?43+IqqK0#c6jpef@f9z&u?UpjdBnP+Ljp%mMgFSx7qkWvTk1~n z5hd!*uU}q$$UF8O6D;d(32;DZ1T3@5X;8H*LW!Y;wL0r=C(k8XcddBfeO}8d~t&l{eHt?SygS&V%qD-O?kD66}oZC zd5x`QDit){(0Yzcqk{MQt~8Ih2V8CaUAoE`JX-&7D%0F?q0Rr6E;pB2{v!~Hg1cui znw;3v0~{ST3+xQUn<2*3;;!l=^p5t*T1a%G|3si>YkQh!WeOSBCa8ZJVEGTzaapIO zRnw$9_x#g?KcK=d66U|!?Ol<(%NB#xu&6H6KHayVif_sxpMJ@G2*f+&b3NW}wDl z1T``3KDXJk$=(II3Z}_{Q%#6W;3Pu?X04hm<5L(m_;_zYu7PP%QcsCAGQxC3izAUI z7m%u{WikNM3!LZ1fd6Bj6w|#{;b2eAwQ|v4(y!_lVB)CyX2Fg9LE>tugD`|dtrh8gm2r`1*oA(f z9ur5lGu<18GhBHlU(nZ1J|iiKLsW_KHhk?0Kl=R8)Xs`^Vy8rQfe>~*qkaLh5((h$ z32$O*Z$XdXRE&-~HHWKqL`BUx9B`M1M1jtdO~H4Q5({9B8NVn`Nl`7#j&*QPl$blm z8xPyvFNEXE{{mknNEEG^=kv8$<1ACQNZ(Avf=SK0AgD%v5>)&jf2x^1kmWQO@fs-f z*BE7S(&L=x*b|*-l3Ki$9Rp=JEd(}^p->kYJnkd+BOdD$*!MJ1moK6;*Ar&c!dUr7 z%P~BomJkq;8zlJsU_q!u&i{?MM|@?k z;eV>6VvB<`AnPRPZ2hR?j)lKXfd8Rlm$S(^ZGHNKnSPFe28JJvWo$;eq3+~gU>F+*c znR1{E73zu+qG^EeY2|WI2u1H2;o>Rm8TSvVGipB4J3hnt^%gV}j&yB7S1mV(+)vy+ z4r$;e^)s1xxjq(I_Ze!{_c5y0pZwkoG}n#lqg4f;cHq>|>l===rrW_~PCJHmZ3s z=wT)RnWmV!0qbg&cbXKwn1{WwBeh4kqtZ4(b@v*~&qdX8GVVN>Q5Pv}>Zk#ge}|tq znFbS!RrZLuM(2Qkhz=Ab-!kf9ddBn?OCvE`FTh-xX(VM5)6n(^d&~QQWnDiLN3XhNwit zis@#Gx51L&?R(p&9!nyt$VA*={Td$+pKH*|d$JLu@^<7N@8%Mx2LrB{CT!?GZr_!# zTz$hs41*Dtx<<7+WwZze;ORlS+UXD?v7elN;$8hqCnB$3bCuLPVa9xWKf~6h0>~#g zyIA4B$&~0f_MGrk^htOY@R2IO0X{RGb`i~Lg_%@Xm5bMQEnseDE1*1U6)Y^$0^t74 z`uAD#BULEu2ey>PNhh@MnWIc={rc1O>_mY2&5=F9!?|*7i^nyH3XKrt0B7+o5(Vd{ zMam~+TqPv3YUG_QXmii1yS|pwmK9^G8`{qq=)k}{6uOsLH7Uq%Kr%2feu8TZXMN%uXXZHWGfss#B7*;g8o*A^@9yvjJt}* zPrTQdvRbmS>ycU%{vZ`Jx1fL?m}&Cn9kgI0=n7^j^&r^hXrSoWz#t6$)0zb3Tq@kk z-tZ{*093Q|(RbI(#$-&S>%xafVj7GEc5wDA(1tZ`NuOzfx0a9wGx$_iaw&Tut)3*V zlo_>}9WycfG}RLE3645qOynC_I)N8q>zFm#&__(gVJCNHlgFUUJE0dF@+wlMUo2(a z{;Vm2fP=IhMbg*xMkl-%zkI*iLNZYc5%ppBb|VQrxL@B0e=e@S>2203Q#pBYB>W|= zpC3}I*U>}SaW3umcWPPOOKVm-wwPvsR$J$Es(*y`8QHp!4C?9<5{5HnE;eHSxj@MM zL=(QiOkow{SI`X-W=`P&RHW@7NqMaeCCj)b!7q+Kb#o(E+%slVwy-{FMt%kF#Y~&p z5iHAZ2xfB;2nRQ^mOKC%6j0Nx$sIh!X~GuX0CHM6YrqI*z- zhN7^RNw1;q6`_TnXEE8p9k6$OnmY9@JP!=^ezmXe!n2g@ z@)L2Vs5FlF#kd&Y#LQ|$exilukD)f(WGs`R3h4)FKyh>nK_QHC2`o-0yb$uZn8fsGSs<5=2JJuoCN(k$VKjK+?FEVvoowopIgm9915qjLe2Q_$7;ABxG7Ca7wrr%E_-;dg zfw4?WuY)S#l9u8cVP?YBGk-(xX%u@{_6dTzLRqk&Z4?0+R{YQ}_a`l}A#>sS9?`!f zH}&Na%UGaPvUd;%H9c;jOKNp6cDHmf3Y%yHwI?)W48*#+lnh4?Y{Xhm7WnU0Ptu?~ ziq&Y~V|XU;btO+<29$)N&)M7v~ zle`0jk-rU*jc5~`33l~Alczx1Kqwb$`$!~3Erc>F936A{)m{l}SVxZEmnfzSjN8A2 z;f)54TE#+Dgq_}mhk(=6>ia)TyH1tp)nS0y`%3`KDmm^jy|!BO%I<6+v>;F$?Jw=-m^w+fViAR)o8fHuw^-k7+R&{u%s^!f zo1*GDx{A=hrC-W9U4$>DDGSvMP*C3MGL$ROj?j?P|or{$2uKoOnQb1tb1<2 zX;q>JQnTjFaeC}I-5unOu1^=_Tv*9Le(=B@vCMM15Nx`@Q!#@G9W(cA+qmduH{Fc( zs&dnZqc-td}aJeCN!Qi!OYfi}1!XmhDknj?M&_=D9U=oeN@!_pBZpY~59CO~*st_2Unk z)eS;C9aR`!yP-M_7tpc)J}Mp-ch$`*eVe+O)-|d-f7@uD%5Qa+2ZJK;U0PlG&Z-XP zahEQBe{Zk(Sn!506ZdTJz*eOTI(f!h!DoKHfA4Y{!H(awj3xCcCS_r*-_=hzhd!_H zY9kIG#gs*3^|)!aZW3-KE14$N!vM}eBK|yK{XRM#4y^@h(c-(V*XvKN291npFIi{V zNQ@x@9>;>Xwth+r!hrf~v1VC{PfH{p+RrUu1VUF=Tp^v+yje#lT-kCfGR*7QVT)6cd)^rGl4mLFu0fqx;w3EWY*_I4xR+$sbwE^YA0EQmO-(5H*o~0W8EqH~>v=45FCtt%&$(QvT`!{c+uisZ*JkJ61j)dE$5-28j|nH3N~bQ>pv+AN zDtQ5i3}3VUn+xHUG0AMlG!!Pe%mWvn`WGhxz3Ji$P@#{9b6{?o zu*D+&=xt@YNo4pCvR{9@qA#Yj0kRtx_TVg~&JnohrUtOmd!>6}{2Khr+I^IAUt2GB zl2~&Qm)!D_CRvDkb%h#oipjqtDNk5}7GiIEshHJS09t|DVqctnvS+{fkvLuHUzqL2 zKh9&Ab$dVm3w3A-+F54`zAN4WEq5mFTVi{zxPY)};)Q3aS`Q1mmvyeVpfmUX6>oBi zK`4-ch@AC*MNUzrHljR->!ym0{ZaoV)*_3Y@G7S!=zbX65c-$ZYWbe#rm^NX86cfp zp@N_~$x5mjRXuWlY@iH%3#?SEYGAaXaUo8<{LW!yDN1umi$zJ$W7sj{!CrE!mxMcZ zyR^ZxkSk$&F}uSmtPgh0=OKDncna@t8qLlv*PT0cbU#sYFDLq}E08ERPd%OMj9~QD z87$^{Hn>ENL;9{siB$207%zPz*+qe!@($Fs@ec!;p&z=9Yk&0Gt$JMuwiw<_a3ej@WK>@76FdMNtgV3X)!D?XNgO$ zwc2%qjMd$@A;`FnP9eF_m`wn2XJNnJf0+<_hG9>MosCzNAEwN|TNpOP4Z3ZDE&XE&z&7AxaiCpta-lQ3y!N`uccX6jWU!0TsHdl%7-#c9(jl)-^pKo0W z2uW3f049xKFQ%=C zh#lH@ObIo;Yzng}-{8tX1wnl3ehX`;by@?x6+%<{d3ZVuJ4j#_4KfEi{(P1m`T(2e-Y)m?emsWYv z5E%NnQh@o4U$0roCs92 z=7;{(dNP?6;v1oVKaOU0Z73^23jh>zk^IiS^HZdxPRqTJ7E^T!V+b{;t8ln)(t}X( zqm6vYW5QWk`AB3PC7LFaMXY6oamu;QqfDxP$)$G!$J`i$1WghSSZ724>2>=9z-UzW z&9Pi9VOuRN>LOnQc1qJO!;XkIG5-d{yI{(pvAdGu2 zC*D8fNzve8_jCGJPAWnFK!x|uEo1sE@#QrA*DZSvFDOojE<@n%&K)KIxg4$~+2EDy z@olDFkPIJ87ew!rBslZ5V@3c*%=HG$w^fDH1?HqL|Mx4iWr!D?mdt=XPmBBwrDS4X zXg@}yUAEWf7LoF>YMk7&8FSANUWs3TXPOTE6W6rMumD%Q51KUvam5wySmtaO$*(MXd!7a=_tY1GjYZY+V>hoXo1HXGTe*htmeja^q%v`HS zt*~uxo9XrCAaYODO_O~`zYS9K?uZ3vllE-Yb^j-2!I8tw3zui<8de|BCfQG6qjULx z6}2M+2QKZteqL`a>*NpF-629dQ=8>pD=+z?9{D-K4kBC5An+N+%)g|sbNtN_XUH9h zw8QO5?0o7MYoFi0)bpv3&&S7q%jA>C^)Z_@M96U96viiScauHUDM1rX>+G04_(!6M zf~^QLG}0$#gRFP3sNBNb$Az*oMbt$}^a<|v#iM=cEn2iHKzg6#^n=N>Y36!S((tX9 zu~a;u;mZ;7GZ{HC_{X)`IjFl@eAjoaq0zFJslGr|rMFepg2aKr zm=642_7Uu~OSCDw7j}hx&Dyt+8+683lmNB*UkG#bmHX3%dJSS1o<%$L+*DZf?;0I* zLgHZ`QMfGsLI^hJH7sTN=bML@{0ue{T*wN@3>3DXf?7r~L2^}*^E9;bk-M_n#9-6x zZqgxc*JA&AT%Qy0^+a^jZg*>bp;j36iLVUN@@f6eiX$CJFTQplw>6l_fDxm+cE9}n zAnQD~M%uaKhV_z-s=6l921!yaofe*^gy35XIuzr0RSlKW*EsSwQ@7eu&h~IZ5$YYi zF$U&p$$I@)P`+dg3~g4OWw;p=_!B1NeS*BPJXi4{iFgLDtwgeB8T*R?|N?S-?ONFSV zl_SN9DaoTFHX6!j;TOmy{pg34X=$sQp3AmvD}|W-DNC+>*jptRHFnu;=ilUHtt~Yp zU8ZlAZ%Tv?wc?ROQV`G7vc>C1ET-}yggADSDv$J8^W{4#v2{y1b0i(cNXIm%lwlUM z)Uj9?X$5l!!-j?q^Oxc*QTi>H+D}aZzifH}6A1+>)v81$tJrch-mQ?#&)hjsJ$6{f(JJNxGv*3KXUbi6ksCUdsiG@df`b6*ssKyyb$RV>kt}R=+6&>y0GIywAkU( zcRke(csj+}d;5JVi|?a;=Z1=z5TrUBE}$}QaC4>0{8hz*69Wn9SXmrf=Fq_tGG{5! zy-iC>bn3Oxz|7xDnI$nKn&_Ar8JMZ`1wcfk#{#oc<)m>dr z_pV(-onWDzV0BY)Ks*J!A|wa^;0FuLz3lC()Ri3zxljWH zPd_2UDumO+*e-x>L&IgpMsgnuJsucn28wsCzxkhpEo}{Y*(f!U+`K5nB%-no+ zDsxoY;xJVwn9+X(CCHU@S~OH(x2fh%f->W#6>R5jGWAb+s;+zMm(41K6$YTYD?*Q! z2&Rl^Ip4E|WBfUypt~SdMdCd@sE=h20aZt5Dv?w`4S@l)1GO#-)56;Prc#K0BJoJY zsqJc+(i=mY!@f7~PfTjPdMXmghD!hLoJ{nP&KfnEc3(KFKdNYEjKgpq_Y_4AT~QVe zSY}Y#maqytCBt_i3YR1&N^XSE@~7DY=naM(mtCJQb&{Vw=2{9z$xWQZO8 z@b=z`O+2}t(x@tm8j&n+34PT9#e><1qIX_e_4(~=Wq!0 z(O?Y9jMb?IYBy^GNH>YQ!zip;vzYf+5GV7~g~Rki*`Hc~)P}dsu!$o-&Uv9cl&w1*0qg)I{VCflrYL2+Pq!4 z*={W4?tHx{I&QS^_OEyNdv=_4ObO0Rult#=lzdFv+W}+JsaC4we*!ZPwL7h=Xx5XP zw>o&8`?~yzs8?i7 zNHrR2(u=T~0&8!7tDK9 z!e}VaB7^t1OhM=-94Pd*A0gnAh0WRdBmr+XI@WDcnfEgIp7c#~WmkS#?qc3f2%#ih zgY1p`>^Wka*Y>gYlTT&J4r6R(rzj5`kc6AC{X-53`Gbrn!o1aE@7H>wRxq6OlI16G z1ln6VTe)w*M);Fjz1ol|L1jNM(~xBa#~_A%F~UU7W2~X7SI5}zH`Q)1$;ckCH-Pcm zlXrwpN7?8NG;4*{6MP1i9GNzq8zZ?&UHu8MUeNC&l^s?_hMDsO#Vja+=!iUnUOTec zNZ7J-iGHZPT7qJQd1Q)*n`}EWtq&@rgy7)Gm0;}(Q|ydzPq!!2aV72a_*>$%{K)S2 zfrdMNj+(&;D^!Xr9=c?;hy?+Dz4yA0z%8!)wO}&I7Q!f3`8=eXWYryf$k# zCz#~Nl!D(yDSp6Zdz*z2$Bp-Q#!`KvZiN)c9%BA#0wv^~0<9XU1lIpo2E>%}%R<)=t_RG)emjYf*97!|Y;ej~^ zDpkG};g}2F#Ej0Syq2{mjVFsSQj_X*Mp2N$Rra(_fzG5pJUMZOw{dk9yx=gbF60PLA z2g#eqb~#c%2`&Xbvd(5`R|p@mXrBHvg$QY0HCl2K^5IZ3KOFcm**?}wk8jprN@P9C zJAfn1BjK7RBg~rCl^BA-F+eb3yt7Q&n_&hd`-*akV%5mVeLBf|LJ^ zPVWyUbW64sb^;xhH2XmedBBshk!g%PVrcN*ZvsYN7B&*^lA4GBW0;|5B6kJ6P=<9Q z2^tXQj`?ARrgCR@TGPe59hTf-{J*VkJu-($$HjjO=8$@aDyFR-)%bZFO6TE`F&M7DMgztnJ zuWJ5X+(1ld_L6&=;o?2CDXa!EwWv+@h+jgwZ@F;mKx+Ac@zau3z?Nrs95Dv~R ze)l{7x=s8Aw8S3|&n%7(44w5l)2V@M{=l=)Z>OTMDH%_gDnJZ=pcLwti=OsYlNBT_ zw{MOLL(#|)$q%Y9y4Ai`j%PY#*vKG4ro#~)HU@t0vV&v67kCYF8jFi_m9986L0e} z&o%KzjWQl8G7DG}7Y5@)YZFNX1>;u_t_4{q-6Hj!7I5?Pc$1yTUF{{k?kD3|p$a6jR zQ;a0pD-mSq8}3vwA`_Mn{)SexKVdlr{nh{?(P1{4_kdS41%=^!m~5?!Y`Q{Y7ED5W z_DC?zJjs+}h_;r@({-HJ(r~*x(>#~3Rq^FxQkO&yM|iLQRU>oL8rcTx;9=C@z)nC0 z+s%mG4XO-Nfcee^Em^z5EUV%clS=|^Rju3)SPMs&R`c}0FZ;YZpQGT2nxf1X)a?L% zexwwXQx@ejcCHD~q>L^c8#n1jqBlZ<($$(y;OHV%gC9yOHp}?vZDDzR+agN0BX zd3m-KxWZnhn&x~>YuVRPh#E`Z>KSiKhN@itmJU7Vp#-DD{lPp~yI2Pqb;!57oUP>| z^nE3gKuUR}M4xVB5D@GP){jUKbxbLvPKs0!3i-yw*@S`B-8z1E>m4|8(B%kxYnQaO z)~0hTW}k_4D40VaMSU8&A8!Uvvyc|vFGwI4lFh1vW5&>aY=}g=OT23# zM#__Q{%?>Mo<*KyYZ;+?JTIwLCCQalQ z)+{OmgZB3c#9JBUTtaTJ{Iv6r$y_ct7&QVCU;q7m=Z9jClB9YO6P#4Rb6%KZg%W$+$q zKEWYI21!s-bAkdC`way!#rut$yIl2mKFQj<*$Iva1;2&Zp7@Ux!)!U4{;$9KxJQ4r zddpC8NUE|KAwjWHD++GJ~i9bIfC7XQu;K z=2lNGEDUr(hx?ctTzHqcknx1X3|Km!Pg?4TL^EjNp@~O-db^*(a~aP9ahft+a$GnVD_66 z3as&5g0vf^j1A8g1Q_Cyt$(Po|L;N^y#yA+{25hOjT65N4S4ONzCa9&te`rmF#cRV z#_zPd8ecTM5e1oHH+n#v6?w_og}BMeR#|(JUkb2Cj2nk}{InqA7c)Be3JX z&C$R2G)M|F!zy(18|{Kxw9R^_il-{u{vd*Iv`P6Nt~L11=ijHQx|!DBWxkfn!x7vL z&}r7lXd&)B$^TMNwn8Ooi44Mr2S2BSn?|A-wE8Up#fpeH)E9{>6szU8_HAj|*F~Pi za{IX4o~c9vh03borH_oa45kZd)iHPSoV7MWD?Hz+!-=xp+VWG-p^2mYhyD=L1i|Cm zH|zgcU6{o~R}E9_Y;V=V*{`Gj;j46nm?uNBlKmV<9XvC)pX&0xt@ACRzwA_@qe(#Y z_?z=1P-}ssX?DeyiS&Wpf2h{ev+j?g$X}V?Wjs2x_}PUqe@c60x5N6F`!^scm7U?t zTTElZU~tf{oP-WN<@?g2dUM;F{uUG+kjOo^JgI=am*$+7LPkiYF@GE?TvM$-81z$v7{9<~k z?Q%kFmKV!MW^%C=e)k&>J0j+dOK=C8)^$ z#fBJ|M-2tLT^uATjAZu$Mfmc?L_DK*ZZ4dt;LGw%+IO)(y5Ot z=eMiZnale}!|kv0-mZ_HjjyM7_fCGj$e$y}o-2kZKTA0|IcHi8TTwEPS2{~C3#A0E zpHMPG-aEcr?%$hs90c4YP@Xxx*?<|Fe0EnvwQ)q-7fiSHZ|^Tx9-Zr30lupOM6n7_ z8*fv><6rNOSEnxrm%C4Bo+z0gjypL9TUSImgF_>oZ=D0V*$d~DKQ}l9f!>>!oW$2q z&&1_hn+6~CsbA(VwcPwAZ=F8#16!8?&s}eRUJN;ovF6J+$DH?>Q})-=`@r5&c^k*4 zjh$;5DCC+uLCqqzEC0iO?R!O@%!ldm^Yz}Be{-<)_%$tY@6D=HW8gpP{aTS-lTs_- z_jk5Ohu*^a&bV8LY54xDGvMoKA$!qD*u8ltAi(p3v|IaF+SUL5(|#rR^W5R>qy6=H z$@uUESAV{|9S%^QF?#v*B0XfH!lO|t^%+I68K)M z@7uax?^md-5wlANu1N&vH9zfR7WOXZuIqots-< z&s(JfnlyDrA59-!FCIXgPcC16+q*Jp?@ffSmbXvGjZP**1c?{hmG~XMSJ!6$p5&bG zj(hHm00+dGo9n`fjEfny{jALjZH+KH)-u{MWX~e#1ywWBc|DEeMeda&SC;4R(JO7bc#;2z*|J4L z86b%kqd{x>jV*iiDEW}qVz6oDl%I8aYt3=nP z^-FAye%x{#VUOcBEn>N%i{fb4Blhy%(Rh!xY(l7p^hjjv?F8MUr!e zlcQWU{>!AcD*-3{heXA*?yrq@oyLt{`cCW9O9h14Jo(g;B9_VmD^)-K-sVv+FI$Ny zcq>6V6Y++ajAiKO$d(uC5>>LnM|m62#jzOYCEKV`KjEoU6j(%*;Xw}$ijfA0FIND& zPW(>pxTqz_Y{E}c)v3ycY!D^)!%P2AJfS%x%%+pNSr`O`q@nYWv2DOgm_mUMiE8zE z62WERl9`r_wh1|l;%HK691fN7J&;erN`PCg8RJOcs2gBZ-X*3@$eLJ+*^vb`Qa>M7 zLzkK!!4+lI=;y0pwmk7UuZy6=Wrzd4M~~&(z7o(?*glo0IJJ<7eR|2hBY2SWsASh^M=3b;vZS zY~0wDJTD%HA?`5DoGzCnu1t~{HA(_#7+x>N5XCe3Gzn2J? zvU7;$t91y_p_x)kRiQB(XbqZ_BJ*`$mMHKleOJlGmBG`lU2K&YkRxYJ&Z2O^k9^L) z`!yORIi7!SanSJ0M$$OhmWvC7a(dIoPbYL6XCho_7AP_?GRBP(Kl>L!BWWW%^YTFR23Z-k$bmc9K7+()_n1J!pwmZ2u;oEfyM1-%M%N^UEo(z)tqGML|3PNjaj6A zg&8*`CUV+lfDqRXL<)2p_eUt|sA@hgM<*Cb_@k9H)3u^g(eiU}Ig0&{iYOp;8r*>( zGFAKqG4vl9yiX$))2_QgqQHck!~5U3ZXz^m|7#b>kVrDvP+34#LkqidH$UY+wz68{ zN&eRUM_XIRHCOx{a8N4LBCe9(29o3vdS5CYUo>77mV`ks zd+W4dQzcp+u{n7-P=F8>B=tZyE($V6C0QDQnt1W>*FcZPfOb1242Xstf(zw`0^@YQ z1sucMxoh_~f`qcff=!gK3|o1=Bg_xJ{ZlfBn%VY^ffR2icCM*vR+H!I|K|puuQ@PA ztQT&OI>#3df~+n{L0X(Lx5r zSmiUZGii!f%)`%a7Z0Z(m1)O7wO-Aei+}z-Wa6Bv1qA&nScI_gPVBnyM;vLM3v6UN zm>KvM83f`Xn_5bD)vCG$!vNMTT@&!}nqIS^okiW<@GNzIL%mND4b>NC5}w$3MTBh0c(263TeP{*KPU7k817a7x&0FkU6*=>^2%#G z$P(XkQYPAC78RladRivvpw33vf)y(;Op+#p&$Gt0{~ zd9dq-q~50EWHY^ChOEDd8s%Cu72AXU1>-5IO5J;|ol{Q?C~}M_Qp(6wrSzgCfLpm& z;8@!!{`&y&x0yTKu~$6&P-NrAzx)byyku?Bm53J^*~lYiu5W-!WiXKMu5u`DTgxp5 z{s(a{frkdtq!~tHxXXaNeqrM%!ALXdry0sjk8nloa6!^fgNF+W-=l;wjii|*%%aV? zJ`IMWxkk-ppp;tXK!(HM&vzldeGP>9N$*Sc7Y}5-Npj(8Y7~Uwln}^BYms`4diHZt zIsq9mlj~|plP!W24?O6Ik**93TXbk1b!MfD{)o^%?m;djh`}?Ka;?mN&>9?MV#%#~ z63E!oubMQ&PKz4n%}%mRiRe~gl(!o4Ei%n@RhJ?hh=fYHRB++`9q*RZKZ)lDkSH== zyuB9I04Y$({wyzPpGqb>d4dm3;MX1V@cl%%AH!T@MDdz|k)lestya8-Gniw4EEy@g z`??!Z3=F=pCAEO|uklubCfWe#fq2KhTKVT{R<2@Y3Pj>&!(mOoM64YgY(J`M_*`=- zQk5HRpw6@pO$=Fn=K|3%Lk^qF)KYymD?r?)S@fv_tUo$G!&_A~I`ok(xNUk+8yxDe z>(#WKk!@9TQCICm3RN+TpvLEm&!|4D)Q5g04Eie|pPW=TP2GT+ZIsngf7JjR@1pV- z=R*lO7*7m|4&D^RfnTSJPc32LS}pYc%Xj7kAak}vd>ngUAm4fZa()O&FCOBnJGcj) zIN6hOCh{wO`~!#mfaYXzih|A(j_wRBo&m?ii4C_$p(I6L={Nd#%Pd3l_8Lmw>Bj6D zN-1(*$sE<_pXF94?Ix5#s6Av!mA9COU8oq-WHUs(GP@idSryP}@j8XGk1`$VVrX!e zz!(wVC$$qLCFtK2m9y@D?bthE*YU%iF3M-~Zx9BhH1f}H)+#`PaF_pA@GsO^aSM-% z+axMwVx^RX%hEULt0E?q=z#Kt;ae8E;e zFnXF<%U@3uf18%Q26@BEeO+$NfzztKr_6QQO4U@}3)dp)7=b!XhT#>>!{iEb#aClP zn(E0Z`3^1tDom4-iGH_rCJqTzS+MhFIj<5FsQE>g{O}SeU>Mlhp@+3q z47Y8QT=(+qHN7Z*Xhzu0x_N#Cyqfu3Ks#;oa+)e2__|1amlYAoFU6P2IR)NR4PZDI zfSbFFch8aghu3;de(AP)(_LS|sL&$8Xq;oV*D zA*f;z9nO?vVb1!SfQ2A7(2vRxQ@}Q-KqT*UdyPy!tc*7Bx?oN27<7Bf(SJLJv&SG> z_!&(j*E~3kYFJhY{?~{&3x$UP4b|A3at+NztLeB}Jq1P8iPp`^09;Rdjhf9a#Zmw- ze)M1LU2Y|iu&n{^=qhL9KaW4sDUP0CVO-&^)Xq&br`Rh7aWsU0yA2&(OMv_2AgIGA z&C0hMNp}|MDZZbB5qSn{?KXj5SnV46fR zocPi2KzC$>2yR(wErMVxH(Mj&UIVg9)B29T81bUvRJ{^y%}%@w73<8_rpC|?YNjfN z1X51)sW?8j`WdN9Kpy}4Hrg|!*BT7<9@`!59|5Gpymak`+UEs!$yZ%&gIh>Ag0*k_ z7HNde8)C76D&W2JlP=~0K|hSU8kA!=ots05+Ub=87mhG+XMz!n!^`6#m#u62YACxw zvo3c+Bsx0V@YI8c--*${JhzodlGqyTA>f zxdn-V00HKn-<0YHlQ4bs=Oj@M-P>p;XtI58#gbg8_)=M?03Y`FKitA^)9&!!q6nJ} zFGP8ycP5uOoS%(6^|xg!RU==2S(T);5-Mr^2Cu$OL=-ztT$X$1hqI3I;p}5m8^|j^ zL=Mkyf>27sm2Zf>e`Q0{YV{LV8xC3LYiG>?q9$mcH5uCZz9I?_5CanMxUJU;v!9H` zGz+;NK~@I{heYrTxT@oHWSHL7GP1{{KE=jV@Lr1zIX;<+o&%~@$AFW$gB$9Z7^Rw? z$wa9dUc^b>3I?;P7*u>65f2u37QDeT)3`hT79LfjNq4C$_v_y>9xo?h@0J~t?tH00 zh`7PPl)g<`)^%TH7O{|&z=`PnA@CuWb?xN#97Zj3iT1Y~QC_eL=QZCkPfkq9{XGqv%nsLczl@u0{4s+}_QsG%ENoW_K?t9c~~U1Hy!S zCCsQ=p1UXYMTlO3GaJR2%TCHg1H^y^Y#`^pMXl)w&- zYwj+|@v%@(Ux&fueydRT5f018&OIZ0JHYA?$<7W7YcicRQ(MHhaMtQtLx>s!;%A1s zl@{{(Ma}94yV8cWNnq%vJvo!A{@*#qID)d5ge)*vb?n6UPu?UiUi4oDDBSe+AOlRt4Wx z4wk;YvyP6Dw|%vEzA0!Rgh!NGWR9+XUxW=MMtj1}6hKvSRl@NqvKtBd(v4NLJ++F) z%^?+rmjcMzClq?f8Z)P#DFs&Oed0_U9RH zSt?ykc_1wPV^u|AUfO`~wM{NWV@@nJWL$I~VVLB|W^){6WB}90rP6h5AZk}w&Icd* z4}2`VH;qZe^ip{)Q}fRjTzs6jI~x*gu#r^htETqUh$9BUYU`%-x6ybnQxnc~osfW5 z_US%`9BLCkYt&>Xcg+Q7p!$c3k|4sx|$~E`_&~ zp*{Wr3J>#OGe%^aDd;Ke>{bosDzy{E% zKVV3hpoz%s_IWYdFgo>v;1W+^>LtK=labE@j2Q=89Un%ctE2#u%ObFG)SkKSyhilf z3(!4Ng?bx&Lto{kTFzzLirNKVE;}>T?z_G&Y45iBUjmc0^QKB?ofX7`RjPkC)J)0V zR~+WCN+QWAdJJoXxh-wx;YjZ0)|{EdQ}_8#TqISb8klq1?@Ic@WM27cdS%zszbg+J z7OrbqR?qQs=$|Rk2nn}}TL%vB#h5Vguz_u~UHSZmmdVdCPYPs8IKm?Pn8RvYbVh<% znrbY6*AWhCFhuu%4Ab4{Dpwjc!hPE|4>6j?X-2Hp*uui|d$g9H=&mg1K3T>DH8+`gWZSV@(=Am(ow@i3qnE{#Xh2PUhP)TKZXI|!an00^+THy;2viR3<4aQhA<_| znDC!r$yWqe5p$Rf>$fsl@xYB`bkgm=dWCw(jyykln8%=eLhJih{5O?kXgNGkhLeT9 zO3%7);0(bm+C7oik3|@<11%vfkre4-=sp{XahtFDA!k??w}$6kd=;r5u%9}xMSJtj z`WNzd*cNZxaEBdUDF;ER3?@AKzUCbLStvH8t)A?YcJ$X0`%Rm^tiViEZi5!DYYaYF zY5#p=C-y#8q!)<@ZRqP^1?2jD_jSwgfjv9a^G*D*rD^i9?l!!=u8BT@(t&RgVeHvg zafRL%a<)k;PdFYT7alH2kHNxyDtmWKFq#%h?EYoaW#xxZl_GSWFIL;us+uc=5{~Vy z(DR^_n8myN1Rb5LSs-eLj2oX16Irvun6h9355Kj#Xoz{)uC~s!vuOJ+amA=ln4=r3 z6g_pydvoo!D?{se^wYMRz@RMEg=bx05yc+(;h9m1R%T3ASA}!V!8Vp$ zL>eRZrE$a&9I#Rdj2r0Zs(rwL)1+!mzQPn+Kzh}#*EACh)^33N>pv*WhBLzy1UF=G z5X@==9bEdVp@ij&kGO8loMQ-%4nH3DaA`Lcn8oc}l)kodJHA8LE9ccf+5Y@;u&Lat z-^G9+=5)uPDX-4X2F0oR5jphKr%2YawwKY{k)Yr4 zjEpjr%-_o`M2v}~&Z;tkxaI&tfzOBMr#nBl zRG&2?Er~sU4qWX%Y^+=!EqE9PfUqCETY0kr5>&8zdmT`Aa%w!@IxqK)UE4PJdpZNw zFHzp6wuEzTj;yyIGfh7{XlY355EvmQ672 zc)soMh+TgXgTNp$KnS|1jVS^|7*LhEMq~$|b`?^fyyFHJMi=(#7s*MJuaTHakwEln zm;e~W6j8=Qouotoxyg5BlGA00gfD~n<%$;202$}YTvqzC1<|!2arpMzbTXEU-rEWC zD-kjNTGXxiCD6A*c+YpeuHL+x;ALIVK>%lLv|VSc<00FNP{v>0qW3FFSG z^K-P)*hp2TEw#BMPV!XR1^$6~g!V&?Nz}QT%!WcZaG=8blprSy+S>`kpK>g_3DKGh zHg}I)o?bVpSlaggj0Oc$vK8hP#e*keeUk$ILJTU3qLx=l45bcu>`p*xX&+IRL+4z7 z*2yo;A^hs0q3h9o!_`seYS5FwTRyM78!@EC&QfRv(sr9_3udREayb z-PK$(kyTbjSiy-ZrGAH|D8eyoLI$H9uc#uEQ;s$KFmkOeW{C^O6(HZ$9;2bJ6s-m7 zy!Vq12cgNYung2CUwFZDxBS-niB&V{&R^NaJ#|Z)s~94Fa71t@^7LlBXh8m4$Q^fp zaqIfgYPxHOOFvFADFb8QLZY5Xf|lPAYE@r#lI{_py?Z|z3G$K+)Th7- z?h4e7CXY|@hJp>gLRbc9I^!PVNT>sqnIKX8yjrH)DfH&DD4k_RnXFOA@7VIcMbM0a zk*3f|--BaFt0<@SMJz8bar>}NwLE+hw4It&@^e3p^wx0Q`c}7_>*>f2@Kh;VfXv9D zV5e;2(UO8$D(C4#ze$L@;Xm7V63UN!jS=;%rWtrfZktl1MvF%`CY7M(HPsj~n5qY} z1w)304s#V_ERlAd%r_rdv=ip?2wZQd$IbqL#tvC(%#1r)-LU25R=gPFmnz+Za2yJV zxOBC7uEUbqxab(o=9pjVspI_K+AI+nxxu;IgMDRqEGzpcGJ1slpY{$AojxjPRXqSw zh$>I2QAdLc45%+Vz>E=o4fQ2D=AT*ON*vk(k*v>+nnk@mbYNG>VJ*ed`Qf_|w}c$- z$$jj9f588$6q$8w$S4RHm*$B|aZrt7+2FQKg2a z7LhMgCd3(PwGWh3tY>L;omGOP+XFLZcR)D)YhzsM2aYLD!+b0rR>c}7Oj2pEs_)--@T)tFI0WDkbXuhx6=K+q)mWA8+o2-@ z>N8cXq2wvt_Vk>v5TpR^0aTOi*v8^I=k7| zP48f6=q(#X4vs2Ip&1WZ4w(Mc#7@E&IA~aF73zPQ%|M0PT=@TOqX7Ug{C=|B?Ns31!sRD}Ps`9X0y9RCV^|L@N=|K$PznxH>A;$Z9`N?jf>0g$n- zB3Lb`URM@;OBD2}D+s0s63`O@^92F*_`!vgLAlEKpfx>I{Qt>v-~hlB)c- + // 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 347/660] 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 348/660] [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 349/660] [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 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 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 350/660] [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 351/660] [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 352/660] [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 353/660] [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 zcmY*BA?qONk+NN>s;o92BqA<|@Z^Ck7r0RckT9}77;E(vkyzj8jwu(ObFpEMTq?Q)aYpN zp>}=v>NP=ES}egS5wSO3bhVS#rD~e>ghUsbR;MNPFG8m|LJ}imdbAb6Ytb85u626G zvv(|i8qwdW8?zq}=IWkwqpTXs=GKIpL$Ub#W^WhNx9{s9Jj!gChQ}nKH$KJEzc{|L z?3!XVGg!ORYHxErv8oafR_op>>FuEK1fjFsewo8cNvlbH5sp+63fSH+YFsc9`fI1( zPH_C-RxO_7MeOE zfG$P`U;X~eiSzWmTwRRiiB6+WRWjG#bR)5g;JjdT9Q_k)tgsVDbNGSX$f~J+W#mSe z{2X_DgQQRT6Sq4qt-Nc_-r&@MN_?Dvst4s`Xhwwq7aPrW0DK9=uL#}?B1$63ynhfaG-14<*cbGdMubT@anC7^ZEY*xZk)gBx zabReG`a7|>2no|w^b%@UwYIW#);m|C!EPENhcugaCi&C$hslFNMtrYm&hhC2eF3l5 zC32^b5RUsiC(+wwM_D`t9X2}(Z?l(0quJzX)m%&irHySLv2Uz_5pLHjGSKx+s#HKY zYwrZsNLbtzm3M>~Q4S_>%M?8`e}Qx6G9~LIW1as_`V3IcA`3e-66Re|J#-oxS7?pz zxe~WUOIc7Sx(HTzQ*uQ*qsoY@o#9|5qBhW5V)(k~<(Qt>E3+}`yK4@O?TyANv4x`W z9#lq`k=XZfUDp=XzR|&@o4lsBW5`MRT*T3qS|{o?zO<*O$A{g)rIxs3Tw|IZ((P41 z_HtU3NXg!bGysP3f)pE_Iy~Kt2mnZEB*3R5viABr@iQH}z`GKoxOG6aN9o_-3Akty7_Htqe$QZCKUnRgCHn*b z;3hXUH%-ZBza$9=!uT1O|T#?%oOx@q4;|x|e?bIU_v(AIxNr zAg*p6uNl_UkEMfe51;{1o7s?YTL4t+R7Acr&@Pc?xv&*eIEP^_2wD>T>Zo4-cCrz8sgb+?JYxs z^3D3ll*|eA?&jigulV%viP&2s`;lL|``N1}@SczRt(4?j+NWR86f<)vM9<^I$^jze z>QL+Nlhn8DhpH{)We@MOaM_4gPZfuh)W*3le+Pez$k)4lhejW$M`P>i1~RMZnW94J zbSmWGSnhqV4CHA{@178!8N@q|LwlyLq%>) znso5r+xo}DGuJ$5DZ@(DHNxgMbcJCvI3$sr&&>3+gqyF0kSEPy-lHz4& zDhG5+(hdG}d)M(ouI#Yx;R(LZAG3F(Rs6QpCm{G+n>1ANZ~J4mKzGkmlLW1gMpV%; zH|E{pLAv|x#;iil|kAFuT zA3XV`R5qc5*(S8DTT;E*TL&>dDVT!G*u{y`z3 z=?AUX%36)59{Q1~lalMF9Mqta_SYg{CEDqq1DYtrxa9?13K24+s^*jn1b%SpDpsgt-6mskkkbqJN!R5%?lW6gM`ahA1Udh`Re z>^ZUKSUQU~1ho!%RU8n`T=a4^mQ(B&>n8No)LH}%*;5|*fiksp8^%fC~yQo}MR8^1(k=S7YqeP*^9W zpctE06?`}EKQh^6T7sSH`+2igu)V_guGqUHm|4LyU?gZ77@-un z48)&MkTRd`LJ0N7*3*t1(p?$Od>Tfs{Oo#!=m;lV_rzb{=$FO~*V7uEA47$a#d{7X zLV4FGBw;}+>$ldSZqgFLBgHcpkm6S04%w`Aq$ z>G-~@4fSyGk~L#=TBs%kho7HuiR-nnWC?$Jv|b_AnRfZUu|n?dF17cYJc^`0dB+99 zo#kV%;IGn{UE0I6EAOFEyL~FW`|mvchfQj!(MEyX%C(vS!%K|Jfj8j)f+sa&E%m!13&ge^)5>>`PHN~oNg5Qity8amZI#h8EL;Cs}Ckz znk%f6+R4}I2}lXrV^=_80ZMX(FwgDt&H zX!Wo=scUPoyp26tMQrhOzvPR+{ZE34{t>bt?aHm+=&3XME8^Zxv&1%rO=fTbH<{X) z81&`!ZlG3rKFW$}tRCe1Mpa`KGH>K+PafuG8g;~jw zHQ=8dbo?$SIbR81JN!M?g*|(Wglo%_jB((Ujh~Mdwd8_T&CR4mRv?QUt4Pc6Qv-oC zbSh=PQYAM7VI zYPae{E!jAzD-F!(e3LD2he>xOHiK8H=f4cR&danq$sF5_{|pBh>yvlmY{Abr0A{ABaHz?Z)p;$1+q)dr;_&=3wCUHJF1nd&EZ}UH z<6hwit5jD7EUBcxMo9|*IoKWhPx4_rX1!Kot)ST7T#m&_%`(DYhmJgYCN4FH zSKB+Ws%acu*EN4DRrg0nZCKMw^d^VH6o0&$WI6vo- zM%dzeF1W$UlHMO7>hPiks_HrylXEbCyHmmYW&x{KL3T|sf90jo+#wDQ>Fdl01gtKC7@G&9d|zoeCu8iYjsKOVE2SysHsmPz=5&7t|N z=3DhY$4%#I{Y%gxQU1GKsHub=|J_3ul6owpQCy)ySwyqy`qG2>OM@f<n-qv8$E zIFme&DNOmg|97leqCzsFT3x9V z5{$Vx2zgzYr5>tWSqYaZ(O1t>@U*ZzTZhWDh3dLu78>yt5OstuGU5F;Gh!8;SBk^Dlfi@KKWRV^6l)4C znP?IF6~$|6reuW!_r#BcUVv}yU=I^+tR?3c-_0PO0lG6$iUGMRN}3|FYAz0Q-B41) z1#}{9KEM){IM*crR7{H((_HS)Btpsa!)1Wxgk8E%5XAfLqD^!$%>4N4jC+;Q1=15)*32SV%S!o|_%DyYs{4xl9_CK+ z-;uE)FlCm|xp~K$Nxr}H=on}@lB{6~S2S9U8_(Ubda0Bf_3s~PP})fL|H zZhjYa-e$rYEty2WCARtmeQ)W#UB);cvsk?VAzXhQcX!Z9G(~;fEaj#j%9ISCNc^(s zPt8~*B|yA?O`X)WNv`A*Cyu;8TuT&G7S$_4hVm5z#~e9GtAU({gz;U1F8 z$2Chdn488n%LfQC*yhW+BC0x_h$YEy3sx4lxiOQV&q3Rjv$1$G!zGEK4XqnVJjqQ9 zE<10}^ZSO76Kp*>t=!MNGUKH`@`v`SYqjx=D%}Yqs7AU$0y23AilmiPvBeNEc`tYc z&c}s4PD8-mqJT5BxE1wK`nOTi;hIAtJd~sUc@R_rpc)sXo_`JJK!1Vz4=;EC$ISc7 z_*RC4@mmyUOp26P;h!-cmxSp877Ck86N|u~F~qlqOxTlJtm*#wP_k=RmD7a+RHkJg znzy9MbJ+|m*O!P0=-NOO3Yx~hc=)sviO|7J-CT4bhuRc0&Br=XT2E*!blHocm{XCdzo2+Z2=2*z`5Z|9 zAd+~T1~$t_28F#e9TJ-B5?8>g=JMVU<(R@bANY|az&h`_O+Bn4_ZZ2K4|loVEH|u! z@i91vpItqXEgs`ffk{zZHaElDdQWi(aMk@|}KgSmc+4;3un z5e^;wCUy?)A>*Se9I7Gva#EB!gG`rh640nP6!MyN<xSMt$_`sGv!2_r<+j?;+gFe#>kYF4w&n7hHuBTB|wG zUUrS!VzQG#-_zaiCE_UChyhw?h_8)9$xO;;T@0HZNDtjF>J%ZvV)A4IO^vtn5_qLT zUq?D(;5#nW5+P`mai5m==m4|rr9qL*OopkRiPinIV`g9QcRbm8X9e+Us|fFlUUJsp z*OpWj*@*H*6SXFXg_dYyzbbumJStYAD-q(=?*gpZT)BaDGRw)#;S6e);+F3jb=;!Bfq?lv&s&W2XR3Sx z^Wz_{Xwg1TTr7SsJwV%-4=+lMkgchlbo{E~#eW_HXiE+owe_0|CxBEHY8hMa!5vsOJG#BVU%%?e7nP+JIZ07@DBALhg@mFDWBK>NOFdvC8rYb>35j02iEjlAS{;1Mjtik6&)0mcd@Hu;z97@D{a2fOZ}tX z3|*iH?Ven(DRyE9p7{|P;8Y$$0j0a((_L3z^auGl8}GCx@)u^x_svkp3B)^ovwrns z-vHpq5p<}shJM}tnmkJhP?t8xm-zcLp@tX`TX#YvbBJQ`cA}Twtq(Bw=VJD zAM#JDqAoVakMMSfZpOA~kjnm52CUoOqN;calTo~v7z9mH4uzh94IFj|p#^5q9Cc@9 zk9zM(AEJ%!x{e|`=aa!G?fMY}g;6C5*|_PF$Tu0(!(WJ7)IVT$Wd51_x_9)Y)xpF6 z_>5@T098={VFyZ!IEX}z_~DtB-7~Iwxta4SQfxW+Ly(OwSXB_6(R6UC86=kbN(nBK zOr}~lvGVWkwJ8EKjJo^Vp{i2pr*x{Q*GEf1(IU9`VQFk2dY~0v!VAw5&|goxyn^N( z>`iKhb={@+IWHqYQ@bC|i-4$%SE*VaLzzScdQxpN-&|)1r!WC6lMZB}1m)b*%q}rh z#eoAPn#VVVnx=&oc@-|~^fmaUc7+5+e@vP`+{+A8c+W`2e&yHohW@fxo=zYKFNO7N zF&Fy%puSnaJAHK?tJ2c2*nt-4fQmw74^~{xGz$iEhj~p~I;+J*gI zU;CwBUzSPzw4Km2`b)L2Oi!3tN=Kmeh{N(E3h-Tf*~-f0H^TVn1W9g6V$YJ-u;-#G#EQ}*E@#EA6`XT{cYkWLE@?(EeyV}ylNKAYw}hj z&P&*hrQPYnFHwL+9o3taD?nRr{|7Z9k^L-1I6vi3aBGo6H8P!+R+f zMDR@EBteFA^prPF8m`{BU9nSk(%BmA_zs|c*0vTKrNb&0C`DC7 zK%+eRaksQKD;}+j4fC+(uNfKBV#urHt~-CMlUFFW)C?{iat++LV(xC7sZ=kl)CjLp zYZ>cJH&p;FQ&9I8M~6qs-xRYyc+6H3axt#DBxz2ggG2{jj#eBc;3*oz=?4+|4CAdI zpG!4`h-a_a+?m$TyQdcogDJ6=_K)6T`J9Arl4G$L_|tSVnj&(TSjAG86V32_Y`i$h zSZ=Z{g?MAUOV;|JDv?}ef|#?}m97fYk)A@^owfs1qtHGR982w?ZOijAdu8X~@ylr`oN^*Ax1#aOWBWSQ|5A^ z9@sJnJZRC*X6^lVtZ|Wc!qBJTE??ccHNNxNk0*AN_))G=%o&X(n;l7J+bR|@a&INH-60*jjm6J=DbudU&&r1<7@?q?mRUa zVKLRwLj5f=BV8rX0zL~wOq!o+TSgPe%(Ka-E>P-!4cpXZn`Noyf@IIUz{5tUgyrdB5hw17xba zmNBUw$YL(!x{sspoc&445a&QV0Q!1f+d%4X6-5Uf>%7J60d$OqAqdQ0hwLLmLQ zrPwwC=sU&qw~IxjLxCj%4;J8N((*HQ#8tuC7lCCMH<5|6PvpLp^w3!p@NC?7Ls;po zfln4)MxHM518m3AR&aFvUN*sDA&q11?m~fSJ!Hx8nn1FmrgBDTR(>3-jq%s#dsMHt z%im=ECma%ybub-K4(NA4K>i+{^Q=Ax=(V%#uOO<~>)k^Sf)C=azAKdXIb{4{i&+GJPw9$|+3+hBWp@i$SZM zm!w=iYDtxchpd*@5u)s&_EQK@FW*Pc)mcxQN01bSxl(?<+=OZ~y_ibJcX)doeC#Em zMIno6>cdDSe(Suu)?lxVPUoGd$i{?LnirqTU0$FESB~b~a_>`7Rq#L1EeiUOw)?6$@oB$vQ@F%XQq;t|?n{d|Mo1Ov?rRPf5- z7r7gC3yR8R{d_6;hWj%nr4Bc-6eC;X$^cnI5VL!b$il#xIgDZ3EovzCD8PM1RmVRMVUb*Vvt;J^d4G(+PvbSbXO*JJiE&;t{|uO_4;CN9ngA$Miy zubz4NS{kEDak1n^MBL5=XZKhMnyZ^Kfu^7?llxTmh(mdA*Dz|HCIG*M-#~Nmj;dNq zjz=kO`HDM6{xL0dj47xiA#jl@L%sZ*lGHztG7`OK2k*#xfLBNiWFlTBWTZu|1dXk=wsLN7T}) z`Zg>a?Hpq|4=Ohni2jjYEr!N#gqBnaqH&kd0R-@+gq=aTj$Kt=Pz~+e;A?G3)ULC6 z&dA1eTwiHP%5KI?H}m?|wGsAfsM(TKWJWql`*a;u!ZMB2Fc&o=^QP>SHumcoF})mI zO2nQpduS~%sAAQY=J#PATw73hW;%N4rC=W{=T4OV~KjhL#a$@*>s!yFE3^p0J_BelDv59up!= zzdANN^1U_k*PY1Lo(n3Wo-@R{eeYK_gX^=yflXnvmIt}sGv$I8Zx#iSmE1^PneGcg zEWILk@6+rJTo)05cJAEqQEY@(pqxh(IV|>UsswjudhfHnjl->Ac5aaH%6%s`GZpw0cu z$NVTZU?=K3Lep*qOu>pDRq%JKFb5s-G033w z{|hR?`u6UumnbuJRC`@R?lDN8-&U>e`UA{lFKs_o93DY8Dl|_S6>7LY&*^lLMA9{{ z@702q%<{9j*Pjc?BmuEBPd4S zkHwX)|9nAA(71fCAJy z0mJScF`Nc1zsd1Pm@6_Hpjte(9Y&R>aL1UhpA$?>xNgpqoN}d_brSu@Ye?!49idJy z`hRz%8eND6s;e=$Usemqb(x_++dvcOIj_kN?{mD$NYaCGhP1%Vuv*Jid#q+0B}*dO zDl9~2(7G$(|MVr1Q!A(DA`fuF8GijQ>->V@i0&lbF6iz3=^y04Ss=2ivq__4z!K?o zztVELf8}HT#Fq4A+ai(k#H2^jCGAEi-EDq)L%4o0uzyh(7y^Bi3T}};5h29%?_ZCZ zIfo;mcmJ5EKmWSOt&i(=P`|eJtw+B!h4h`eXYcLly|_{lw2r?&TM$p_(?x{Og#VE# zH1dN&DA9l7wRx&HHW&z@K)uyv*Tcs1XtDH2x2!x{AlXf?F(Qa+XoFFk| zvRA!6e|~% z?7XeCCOBu~aBMOl&}@bKX?;|piDKoO*2dkuv-`l1$QGc~BPfmxD$3XPvlT6RN>N^+ zn3SbqHM0^^F{}_3ea%pnIsCbkAijZu|Ihefg|e^1U)7OToo3Pq(RO4r?Pr&Du*>|& z#T|Btxm4GmqUe${A2z^V1?lA3+a6G>0_M%5#x!;d| zxap%c*q%32?ITBT;=^Cx-5vmp&iFg}e`Qjzdt*_W|J8qh0RYl}f~o&|?qF&rGALQF zFD81Zh4ip)dNvrIDG|;83O6-Oa+%NOvrff;6%;hzLBtzu!6U zoi~5pnLBfP?#%f#^dsf=BQ;KAfgL`LuzZ?eF4T zt81#h&Px(f(E397ATg}=Qy_s&Tha*6LB*ceU*?TRr7W?0;)giGmk_wCwuOrJ2$`U7 za6?G&3=EFA%uv-9Cos8{ZugQ&|^SZhAJeC_f7Iae9n@pbt&oiITXFz5P z65(2#+e!iF0MPpEywWN6T~DvUWz4O7^G_~+_A07!%SuE~uXb+Q(-*JJrTniRM}jJ? z_Hl$YA9$^GVm=l6 z-v(-8PfvVvC2a~_dr5K3pg+=1oaP0cJyL4N5Uer@ zSIj%!+=r#w%}RgVmo7d0;DUqgutBsSfHXt*#`0;^cMs1+GWIvZ>LQGaLgV}yDxN1P zz|R}@;o8FLkt{X z!FordN}6N3f2o1x{nK`hMYkbeo|62}x+IE%)mcn9CK+aXU=L`8?;}qlY(1s{Kc+X_t=sCw-5SA;EqtDQd7e zMAad6Hx_Fzg;Q0aDW}}>$3n1Zk#>q54m6n2X-}UX7@lmW?^TY021Wy|C4OAw_FI89 ztx@@A1$w2ikG%H`@@}tr5xPWPg8%IwpR7S)wcVcOo^^Kls~Kj8;%sD0ww0L3KdTdX5&{6JErfWqgth{@M_W8Jbpf&Gmq}j=x>12EI`84boImw$-j@8)7_<5# zX(^Ie!QO(sH&-uZVD0d#gJdC ze~D$9&xL<}b~ef}@tiVLwI6d7MyC9Rc*0RRx+001Ze5M@&;aIWdPE45-uh`Gg! z)Lb{0jozj0DxCofwRrzbaT6@V&Zyj_=(VQud`Q;F^P?QuNHvg^Nhuzwd{pSC7ExNp z=lCh$?K2M;xMBXcee?bH8Qpu6@(y?g`TFSkW=8j@8$I{S_5093{=Oc6NoTq~XN2F^ zb%G4AYXQ&8)n&m8`1t9(`>A1eyJLMQ+TK6-+5O?k-9OOJ=Qj8;qdP z+0y~T-Ft9fP@tqkP^X0a=8)~n>DLP3j_yyanwJlVXT*gaxZ>t&cjs=?yiWpgmot06 zdrx1rxncIVDdWZFp+Qul{Lxh6cn9Iz7qk^3(L*||FQ3!)7*{j0e9#UreR{8~>ez6% zzKu{q!LPo0Z>yDk1HCG&eZWXl4YJwyIop2fe7xGZ0w2QTWW8V}u!q#^U#jB9T-(8a zZmL4Oy!h3@i|VJ#e{7q7_f391@7qwsA#dQmTW_G}eqZKy3d}Jx3klx7EqsBlKR=s1 zJ?%C={GGfD4GLPF&|cUd+4k%HWbP_lcB#d@34OWmOXCiBxpF%GR^Zod9tZ9F@}mv- z;Begu`+c3kdW@S_K7=?n?=UBrJcB8OWSf~eyAt?;`&__e?F1PGexHUAMRVQZo=FA0 z2tV+)q;I+}Iw}1ZHET(BQFhq4)y4ITcVc>997G?Mal5Tf_p*dnQ*cjSAUwOik9h7o z@1^ODYuY``ID=1reH^;@`S+}69IiS6$^U)cz5QYnbbl6fsUCVJcG=AXu5X|1;H%!_ z>X`?5uHi1gu~TgoI8KW`pvn= z#`l_^ai>P^ZKBSSz1!!ZeMy(5MuveAQ|aL2y!);FXz~^HK@P4<&Zo8Gh zqjYzbgNqS^57v@Ob4_-(hNtPGr+PQ>X%Kno=8SLA1)codcrwssoOF7zeYgd9naXXr zH9bL`oy0>ndr{ucdMt1E$kG$iV(*ru^oA>^{@rm|1ITtjHG-kUQBX`SGYbI7!^5aN#edMzJd`Rs0Zk5)3BsN%DdYAfKt z(>)s6=?sll%+R>&!gb&NpXs>JX(>RM%GRkkD{$xa3|MIYVm}I zK;I>u>5n{CKd)DD77ecr68CVT12V}wK^~ENSfkX8#x>R{yT=h@GdJnX<5HG%)#UJM zGHuAKS!RwTH7?cx8Q+CgEp}jEn9ir+C3hurZ@fBbN`zMBfw6p^Kv}J(-Om6btn)5J zYYe$y7kIyIM5|O)SVKv-FA3-$JJO@TIZH9A`w2XTP19RyAz$u+KD2Cgx~{{IQXskE3D?|fM0DWUHgif|4H&z{maD^@N(j) zNKA~Rot5Sb6-$j0R9i{@?Q&JpFP~}!85f3PM`4EIH`tdPDSCIsSC(Tx5wa}BLWECz z>Up$228maunsgbSlgL7(GS^v(;ME8#AKaab~#iP!YC%P=}d2c8pvAeymPpXcu z6I9RZos)~OwWPbNCRiTgwJ}T+fv77(ej^dp1hggKWyJ|E{89{WpFpS z4i%gr(H)W9>#1H<2uCu@p{drMS;XEf!6vg%a#u){tnNjd<1uv^NpQ$Yr^nj;=}Tmy|d8u zPPR>h!^IS__RlGct2JlhaeT1@IFLWnXy0&lDaiIqlieE#zpxrpfQ)556R#U8QPwpb zLkFI|QtU4sCD!ElB3|&MJ6GeI(|6G5Pg9W5XEJORAO!39;E{I;@g_S!cHd26&i&I_K8a&Lw zk1F;{bO3nI2fp++&03$K#s$r=q8FHe+BXQaa#GE^z5z6^=_UDimOHTIk{%ElJ5{rD zMb@^HBA3Cwum2l3YDEKhlauS1| zu)SW)y2Sh=b?V&!x_$a{ziz`7ZXiLeCxfVc{W*h6;!D*-pJ0hQ)%e)%X)!kep)yuK zY7-T3B>M=KMCn0D)uD%l-wl(dn2PFo2^zFFBT@M(Xrx;Q1*>#;XbO&et`r(`mKkF^ zs@=k}JK5jpEMjRW>fQ=g-b^T7E8v1Tr$WTp$de|{7<4AlNUX?{PI43S<)uGb(s>|N z0;5Z6n@O!DjG2o(@O4$|LCCtadc@TaP^mIcq{+&==XHgRceEo^qh{$N65SD} z=wY&mNv6CJQl+EFx(9`BwH_eNj6%ICKCB#K0uvkK{CC0W39o2mqpW482HnZ+o)+W#iC%tVPY&3TvPM8< ze6{XmSu)8EcAgxAEJst+EgKY!zQ;}E9a|A$|k3t!o&2g>7Re}*KziSokUXACd^XrpdVPk0B#1ls%rs|UXTUL z)Ttm-Pze|DFEXEBJKd+kAYJ*7$<^g%bH7M}$dW7dGCvKHG>{}!qf^Pq*l^hUI;+By z8&^CCoEn`Z4?cP827^2g*6y;G#Xm_c_^`D4Y(!26hpQ9vS=^3BdKez*p^th7SAITr zMUmMxgMQOxz>q8kt9Mdq9<}pV>WfEu!?P4LRN#bn@##oVsD;sDGx*ex=?dLqYS#CGBcMk?NCQ}Fz}4wq!TOWGb?jeK%CmauG1chezcl3CLedSH(T6fUKf*;xG6aT{>0z;JG5&! zThZ1JeKKN4@h!?q+j&)oLZ>#-(=k z^DHTFxya{}Y<$?U#wz!iW{Dh1-nkVwWNbZz_SVr32-{O(b0!B>XxfG4FY9nz{jX^Q zVXK=(e0d3|j}bdjL)w1qu&Q;=F_1%BZ+XPCK_9W}7wNk|X zory5y)v=;lH>#}Nd6+l5yGHl}DK-pufMJHgbhg1DXhkmQN;!a5`C-F;B89rKM&P9E zt-6V>wowEWLS?dSRq##U-q5VEXy!uQOSRLP;rV#ZwX$PvR_nYB%#Buc{5KP`Q*DKz z7R5tP{9bYIEHTzI*rsM|dEMWPtFjP?mODRbKlwT??kh_vV!Ui}4PhwO3L(olb!6jW zbJw!FQJxmuIZ3`zhSdr$89y!X4W4E&{;EdAF*H2Fk4pohl>rd|6Cr$TeKe%tKMqGx zG2rsRhG4zI(wXzO)wK6DjDtV2FUkvl>*xRS)m8qK7;^yWsizto`cL8d^wv)~TFXv> z5F*}J;D*PFt~YpnS};E9oq20LRx!(svMy@0ro1BE z<+|04#{CeC1jYW1(S6{2odA$tDf+_LrKfT@ty)g-R)msvLK$GlK`l455_k}a8oSpv z&vrh8T4aq<*vwf{^xWW!D!YOEtyJ$3xl2wLOi_Z4xlaWcw0Y1XM`@PEdsXYA5T=6w zd3V60n$bav&GGedNLk4Rr8Ovd6+B4O@&P=gn2esULDLgZPJD0DcTtYMR7=&Sj8Ne; zvcGlL6;z

      ?@)#QP#Q>Qq3m^3U_kOm>C>MG3l1>rXh3m2_Od-cP>-f*F%<+(m#~I z=*a2PuUj+MYJ+CpmaaX?V{8a5o`kr(ALrmBA*lnIM+`YYd5{eCZTBtP%^5~9{th!Q zo#J0=U~=~xgpf|!^DuZNJ7vji+@bAtu5kAjnz<$7NqLkFN*v%Mbt$p+u40TU*6rY& z_&gf0Sx{pd%AJy=wGP#C3*Z<%tTK&&BOVsaFPi|}8?(Q?e;e7k?NHd8#8i9}lA!;Q zP6qV&9zraPrBiHNTEpJD&icV)8??vQ!~X>>ki1FXCP<$Z@M=pWjp&p2A*Ky>xF>Db z5gGk902Gb|#aD5jEOQnuzm2Ji&q;x?(^OX;!D)&*VCTR_HtU*na)O`q?{hn4y>XKEJ*3|#5Xgh+ojqrEriULxw-r(WPQ%T+<1>oxlJk<1)) zKJ1dA@dl~U^qYV9YpBwQ>>9#~!FI|DSmF&$?ev+T{bjq5B|G_=!()E;YGsqLwh1)}Yyq7PIu-G1U@TfQxC zTX3}QUop}vm-7=Erqkt`2VD5*oDhKFE9DuQJaU&7L#SvLYo&|GfH8U3iMxSr-nV!L zRL3_3LG;s@VN?2YBc!ZgMo^ttmsA^Kj9?!n%-FV7iM9hzJ=Yu1MwK6C)F7v&F@^kb zOf0s)#ixQ8!>C0AgDa3b2-k2F>n)3NUrT2XUK^o%c7Gi;wc~_#$w~jVTXMbsF4f&4 z?its4Y+O)!pq~}NYeImBt@pUtLd~qg>m=6)>2?aUIOR2qpH8LV2xqdRe`U4Lk!X79 z0>iIVR*pY9-)I@+U2fsNtUj2`MYHrcRx)dFJPHaMOuywD42F{DOWV6# zC2u+^Wz-041S;s8OEU#XSSV~!v!gkk{SCz!a|V7LhdZ3wH%OB8T0tk)6}H+$Q!xPO zIhJ0u4g0>>huL5T*S&0o2K+3|1_E6Gz-79zOATXBD65(B_>TnhX2@*O7=EU6%(M?? zI*#6iZK+dEGGdM9%MPGv#r>_Um^bXk)n8djOkkmkaW8UG;XXYU&4`N^(~@X913qkD zdb$Y8xX82Lg_a?Ll=T9?f8$Cd^=Kjv^Y-HA^p;hr(_hR_gE zf0?F!wd~r|h*XVaX_$3~tn@o_hHYGVhJ$KxJ_Z+9Afcam2-_~xbB^@90tlYbAMM=t zD5hn1I}T>n$*Fl{5NX5-Tz`OYF%3}m_D`4$cu$UopD;R8BwV?oL`lE1>Z6n!@-)z| zrv2L?lj+Is34m3d_%0zAQQ(QVeRoH<;>?iN$J(Qg;m#Px*oP(jiC88(5;8c_tB?Xb z)M=W}DdXQ6KftQFFRP_;rJ(D1(m2*(PAx_NNAM1`hwdR8ts;#K@ z=thj!sSRH zkIZb_NACcCsPDHl2OP!0Am-*AO92un=@$#>09p)%zQ^(p;S}@RxFtn;bv(tNd%nY^ z8o8FaE+zUX`Lh^RnVX+3BF4f+b9UK34-Jb9Uck*@f! zb@Lxot1Fgr`xfQtehsFZ03^Q|Wx{DG&k^rUAoEmrbgR1A}=t zkZD4x+!QC#S^cIN|H7DsyXE;KRUmOTO$uc0=2ZZk1$&Wtrx6d77 z52BUL5`sDu`9>y)cQW8DIW;@DIoPpLWT zTeKtG%?{~+N&BSxMu>q3E4TycMskvJwXi`g%&G&c=-LJZhrEIVQN!wO`HI%+mqsuq zN!hOSS>wmkG_;U1gVH%PP=CC-Hym~`cYHTVzS?jf607sT4|*6EsLn&GR`3Z)95YNKuMs=J&Oin;DQo;C>H) z{$lpzeFF_#l(|311xKX#J?EgSNR0QU&HGm;Oc2!IUVW2^y*YV>BSMISZPtGz_SYi= zMzk7TeY>22kyP6oq_BW6#*bb>&V*M0V+I5bH?L+HTqtlSOd~&Bw)Ah|Ept9keC@F+ ztywZVI-p7PtQI&tEkh80sX@DQRS@yXLp{RVUNx{STA%5!2Y2Jkmcm`K#t;GAVZJ3Z z40(L?9^dMxTgfW#>&MVtPBv?XzVl0C6QF_%oLcA;xMg!XAocQ6mY*Q(v55`~7a^o!GV%~`M z#?0ZSZgfuvLw)o8LzwaWcB}s`M!Z4~Gd7k}sRqXd3jF%eCH2YrQ%m}O0e777b6zL= zOKahN!N@*-y9P9j*E{(7P7YvqI$+?kM$>VHvq|UNW^%C5AV7I?>sb)N=@+{7Rm3}n z-v`Pt`o*0>3B!8+M!sza?vY@w6wFl^hijE6 zV+QPwPPP%lf2S8J2aDm?V5^jr{^TY7&oC%_rZslgYScDjUTHaZCPU5^STjqBz2o~X zt5H8LJx5j3Ybf1IMr6HDxbD7TC?asdH`g&FvOtCZUxX`jOa>tq7G{JVk|l z*k^y7v@&9=e6Ly&a$e|lg)nI0r_3GuciN4O?>KXV5<*N23bQ(jO2cRK35UOL6b7iG#KBt9 z1N2fyH!9I(sJiUvms5{WKIWpHj1V6Uufsm@$M6O&;mqG39QlB1Cb}1ms1G!|3s#v>Nl6}Yw7)W<92iC{1GGYR0`X6SfFCisfdmg%uY%o0<4!i z{k~zr2bA#0I*z<$7}EatX2k0R&F2+V`ffC|S8WB^lT3Lbbak~OUssCPjO>#de4q&I za{p=_0!k+UU6zZ@-!c#2Z&{3<{BjXY6vdRuAU=$YHa zi28|DfBclZPK}4bIZx~fykEFeqzC&URky`LJ~#;R_TNa(u0?Q@I(X$q>J1Uiorn=* z{|N)aPsqX}y-ZxqZH6cL1BoWOg+4Kff~F{ihPuSJ=16mjWGq(WueP-M`bYELM*ZPUPXrwYW7hu5Uq_=-rd_;+99P>?DZ0lG0DGs7YUYo*l^tCT5NW)g&cyVw-v(=f^&Qf$UeiJsG_1MUeFDEn;2dF z2Myh|)h2AFfX>`Dxg$?X^en!DJP!+L)+Q`Q8ETU>V?JO=7O+T}qW!P&c4>oPByb9>HVVI(xDKz7mA&L5z zGPeCKExF+$E+RjdZZsQqa8GWr$Iy(pf5bN_zz<8s^Sr@ODf7zXt{9sF##MF}w65kl z^6%A5-nV~4x+Q9bK249_tLM0__qp6{Bj^fv5FO^P+fDk?*kFB+cTYF>Lx`$JU9+{r z&7H;|k*Cu~-)oz0o|hD&8=nsG+-F8Ta#)`;!TWq}-^cE=pO#*o>k^@z!E0v(kJFn{ z`4}=FKYoe zmoG^FArK%wri3k;AXf^sJQ)Eo)s|rc0VMFUs`PsJL_Q6s9?7pnMF^ghMAsiEcvMm!gF8YA%t8{jpSVYOmvXe*VSo_ zj{O@dl-crm3ll7%3l^KKIm$J$3d(PK&P4}8SNQuQJ|7(s!45(OUYFCtVGcC2?s(ut zWrPSKtcWi5=yR%-%t>BVU>FGnd!>|UoTAJ{0X)3wYy=0!=dn^IZvTGq9U_%$gdq_D z7L~w;8s2Xz)8hZv&cU z{tQJ80AKux&L?@IK|!_t0co;Kgos|H1A%19sf(FYAEc!NwdbPdMY~~-N6opL=PCFJ ze|}%|$tVr_lW7?ZN4@4JTg19VrSL3xN&HI=;Wb`G`yU7t1kXf-`v0Ok|q{vQtj&;wC2l|^ENB$- // 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 354/660] 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 355/660] 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 356/660] 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 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 From bee4a018013d478606ff57e9f1bd1b78cc94788e Mon Sep 17 00:00:00 2001 From: Ricky Kirkham Date: Tue, 12 Oct 2021 11:52:27 -0700 Subject: [PATCH 357/660] 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 358/660] [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

      - - - - -
      + + + + + +

      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.

      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 364/660] [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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 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 365/660] [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 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 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 366/660] 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 367/660] [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 368/660] 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 369/660] [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 370/660] 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 371/660] [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 372/660] [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 zcmV+?4cPLXZkukfR0jn-8A@ zy1%v~WGPMSoR*?yW3*=qT}{4zx!ei4c@|=00YI(BsL;Ae97kmZtEjpV4XeSje-g5y z8brBvR3jP9Rl%69O2>2Ez^N#&(Gek$AHfi-70=jQWNpQ2eFTxLq#Ed}f;VbFtFn*4 zRa9=;#?D050K_vdx!(7n$f~krxvqtz&n1N2Vc+T`JOTW%3yU{+0@InRif2+NvCsqvFe$dKPszg>vm0sjrvwVy~5XFwYQ^>ZNw!8$ZM`F)I&g9h2x6%Sw z&E&1*Tbk|RP9Q61E83R&9$I^F2>Kw1J>Q(|WHO}xR!a-sm-8E-a7VX5e+a_PU;A|l z9`Wd@&SZk04rv(pQ!pF`T{wVL6QmD>f$w413g9r z0y{H(r`=$|ZqoAnjmE)!{n=*!YZ+`WCLD9CA2{2ox2zb^>K=KWiyb5_3L=PVKgc%r zK-~4#N1p2fK8am&(tTrme_a4&>_&{>IVpL>vyZ}i+)%0rePXxf3G!phWjZK<3%oW++z#}Gg@X)X0!DL39;*i z<_p&88>Rc*Y9$APn7C=^#>93PBOgix1S2x?>=~JR3qM@U7gOJqE69w%r!eFQ0090m zlWhzve}^1MSU`joM|GuMthzm18)rf+;yAU(c?ju zWCz*^Ri!lS1e8F5VA>EI~qLQd(GB z4}IV80wgmXRYQeea-}7+_^Q{wsWq_7CCSo{e}bUrOC~DX5{CL7hRSonVXpXALS8xwu5B9)qHDz;17JpFQi-lcVWWV*RT`K2EL)9k4XxX3oCkqbw3E}U0_YS zfAnxGvXs8|gTbI1%;w%CiXOc9VLtOFlS%ANr~R-uS|(5{zd~+j zP?lH#9W!pl4xTYAr7LBvlFfH_11v7(e_H*4%4u+=8gUKt|KJwVLT5cp{_PCl6vg`& z_1E*Wlcl>Y&zfYAvu$a=sr?ra>!OhxcVg^fa}0;saSn##`A1uwZiD5jL zUM0U%4b8a(98U?!{ZcW~CF6KX?qUnxm+HHo{R031|Nj600RR7#T3c@9HW0juF$c&D z^%~8>HjsH7#BdDcYZI)EO>+B4Bqg!Cs>SWUU9(hVsmbnQYo0&<{P_5~zkR*EKL7aZ zpQj%$hj4iM{QK?u=k%{{{o(1~f6%?XfBWOV`^V?|$M>(7!|Av7@cR5dLw}#J(_cQP z|NneFJs*F*J|Exn*tHxBa_m-)jb}M{F9#br_9(~Nb?i7TeO-U!SpSTDIZP^76>XI&{t07)e_ffov}{M)$Tr=ICm1X>3~le>%fi#qoiV zc4HCJI)}6wTaiW}TG|3(($d(jG=#L*TRJgOGN1NSm}G~RMJ zdFtd0mhU+Pl~S*fQGzb2Ufd=O+x+CwaMHDgfr6#ZRh< zs=^g{2pZs;K!{KV0hy=9Q}x3PmX4;=SBH!#ElsEP+HJ)g^S$ZLo>C|6!7zpa4IVoX z!8KK>l$SR#3Q*1Kp(+amCEB6!VFeE6pj|bKp9>zRA3q`1&(l!MNGSG zaCx8g7>ykHu)P*)XU?c+Hq{ zZfLVC9feI4X+vl;PlyM@Z!{ji5y3K44T!=hQWC)3kxjDg4Vf%GR-{ShU|(Rul!L9K83OfvlT6mJ!z6F*jJS>LKOsSaTl8^dJ*m~SZ1lKkoe!K|U8E2kS6+VTkc9~_YJQk$I4s)Q-mryGj5%wuFjBp6k}c&r3PHnh^c z$9}Zf13`hLhXLtu!O%~vNN@&$WD=u~(0ZIm1lLX*_AojSxL~M2BtU^=62tp<9#ay* z6@eL3ZqZ&_k`+V0B$G~w?gX((j7~}CaU>C3e-ns?qSv)8^YAmc4sPeG*FOVb7$eDa z9!CK_f;=*ZaVzLN zE+vBHtw48A2n2t7lR^B$VIGvX3jJM_fr@M{f2rcJEL}1Ur4a*(2no7Dw9?QWiUeSv ze=~t7wMG@}Jmw{WDz^2Pu=6;X2$rW1LWpLkg;Tg-Xb6ds zfhvKR*0?Kl9wQUMl@KP2Q8pz;UFI{55kW$rZ+MwNv;nOm;qfsYc2ppKr0JrsLYXFP z-7i86-G+=2tr}xf_8#vN!K(AD&eWA*PV}x^F>F`nK~dK9u_KtlFlW8TyF_qJAobgm4e8+|K=Mi9+Quk%VK5EfT=GLPGDg#QP# z*%a&*1@`Et5>2zpDklMdOT#b}h2I7LL&Xi>{jZ!+{+EWOC-AiIlH<0=(3#M z?~)D&>iF=##5fL#U$h{Ek%Z02gm?lBxzB$`{tJ__DipIwEm;NyKE8g#u9K!SQUoCi z005If3L29ZG!PpLG^a4+2mk>7F#rG<000000000000000092DfG(`b!lZP}w0qv8> zG&%x6Ad_Dp7Lyt^Dgo7#MKw?Y?0+A_`uqhjpNj4B0_UNY) xO#uJ^Y61WN5dZ)H0000000000006X;bT&Q#IFqwBJpuNU@iry~6*B+;006yc9rOSI 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 373/660] [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 374/660] 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 375/660] 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 376/660] [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 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 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 377/660] [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 378/660] 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 379/660] 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 380/660] [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 381/660] [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 382/660] [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 383/660] 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 384/660] [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 385/660] [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 386/660] 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 387/660] [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 zcmZ8|b95&`({5~SY}>YN+u7JQezCK$ZQHhOYhx!H`{sSWd(U^yoqu{xoo9M#s=KM!-E0=F+lMU$1@Be3&fT!OsHM#TCq~&ou$hdqt-W;My}TU-D6BadU3Uk>WTr5lWPq4>T&*) zeIL8o;+WHh9ejBlo@I1+Ta%Q0ihq2%c{LFe&tkEnRuzv2$SpMI&x^(Q_Tk)>eDq*A zDg*`EW|Xk5eqXu|b(+>;&l=Bh-zzV+N)OHVx((HLREM{oaozObABkUOp3lb-iqgPArGug2!=Df}XDA z%IH_Ld!Y%!ez!q|_kc$53G9jz;WD6sG-T6QmFBGn{KG0CEd9%dgX0TZ%x4SrL@DiK zwPL5n9rCSB1KGoHKP$K&$_Gpor+0PnxNwR2aVnjhK)@iR4;K8k7L$tQMg`5naW^%w)}l9Rs@G?>Fmx^%t)NV3Vg1SuifxgK1Fe^e=Iq9VTc$C!CKv z*0G9lHyFVziYo?ZNiQP)1v`iwuv;&(Y?pZxkc(r=${F8$16lbQ%v17yw=fCGJdVP16 z%oR#plWqMtzmF?xXJ=(q)&LDw>H=8+U0rhkzksvePLiiB&i&x)Oxt~L_v@9tKF?~l zk==nGr-A$S6GN?j`)^zJ_V)=pxuAH7O}l>x-z}9IcAFVpF4o2!a-Zj$wY^_o%jC5g z_l*Nja$&B$pVyuDjXmXlSJTDc51*?5ZovJ9n!UceJ^jU2`)X|m2cXtq9`f69M|HFM z%x)sHL?;t4y|b&Y(HxP#lWAu=iTFCQ#TwNNo%p*fsv;k6G}qQS+5Pp1+g`mS8glw% zU@6^`S?;6(*+DBGw8c!VeWnSrZ6_eV+0r;k)XZ}+eY&{XTE&Gk5tEbwoamqmvxT+! z3`~M|8=fv%O_PSk0l=O;E~vbc5#!6e?#C#825d3x5&WmK);U||6CEyN-~u>-Cq1)f z@U>|DcP7wZ-{9Jvv`F zCj_$qLZN7Z-#ZfK()gJfTg{y^{FV-7S2a4Fo}KG%onk#nt$n*u!NL0~gi-kVD*5}!7P$V_uw!5vza-{pwr&v|9?2+^oFTy>3Ezrg(Z^%i3*Wp6f&&v`!sy`E%~ z-dPcTazEmpyc;Ckn8VDMq676>~^ z;eOJQZ31ZBjN}nkr@E=y8wA0)Jw)e$D9F^~8b%}qCgY`O{fmKfYmsok5QN09vMO-I z#&t+RkEKL?J;JEdt2KBkbt)%&ZcQ3$|C*8^9AGA2S%eh-9g$)@Wkf42-=p<3F}^c2eg`*%Gx+JaAo$|L>( z!bir>Bg-~jurZ?Z7yjZz@ONvSM)Ky$D}4?}#<4Zw*YE55k#I2?od+Dvwy^$N7{7*I zA2dMULME~F^#)9tVcC%$-yvRr89O{InmmRZ$R>%sWTfn+ya#7n*~H8z=A}-rC78~~ zUXbs~(Blev*Jybh&;XDBFzyvjEZ-yEKqWpJBsy#x2iYM$HWeCvXS45DeKn?Z93YyM zJbyCP=Jw!*$p9Eq0|Z|ZPErEHf%cN;UJEenCL2V*<|k%?vO#|l%4f}CX(A~LBTvXB z4wn_EkjNLtLSp~R_I=Ng)BvINKoxZ=Y5hccM{&lGbk+2pl)^K{pHr}GSwz{%lXZTj20u6UuBhL@yw8xyV}^H&1PblbTKj+4RqE#hKEotn7bb72n|F; zA##2}FRn)3V9=7DTrBHxeP_tYW8OYyWgnj)Ho>w&p##9=5SrBW z;1~bOW4c7egE=S&?kbJU?o-0}WX7-%F;4nV^q|Z7z2HK}@z9n*`NKC+(-W7o{t3$6 z>5=Z7x~+li0nzqxDF@_XG@uV-0P>Qd#B2!QGy;UAuIO{4bW$X=Rse67#H@9vwZe`; z9kF;EZ$-bW%w(}rGnD+J8zAg_E-Njwr7W6Tx8v}Q(epWr*N2(lZF->z@pu*g6=j;U z+0UXS1eG6)K6@C>b7s@5rHN11KL#;R+M=?H3i&y@(pZ6O3xSQ_OMjDlj!ZL_QG08< zr8(Rw{x()Z5`Q0sJf*!hht~5niCuOWQJ=&Pn)!6l*U=`Z;WB?HfzfmOF&@pt>D+sf(gQ2 z^u#z&bqs$+Xdq@ExY({Rj=kNH<*A27%wyIWh4LPVkkGkSR%?cDG=;Njf-~u1W1^Z=vvhOwMK7)%|=Bd&7H9g@% zASwcfy?q6RdJ;-)usb-b48gEQlW!+}nNUVwBvco2^>lC4Jmqt4`l{3PtLI2|z6>ST z7WsEySY@sa_uw{47ysf#Ls;;4Zl)Jm&#a6SnQAC}v+r^w06c4CYg=bO%d9p_gAOQ> z`;&(ag!rYRgT)UW-Ea)bnxy98KR9F-kZ<`-*c=wy=y4_h|0d2wN)~>`-F`0@E+%+V zjz)2z1SIiE?_hmniS#=xCo3pNcyIAMlq5OJv-=h0fZcwO9Cnu^tof{>-oY&$#?|O1 zT8xOG(l}Y51FUX@^Ejm*kmIVUDn_Y8%p}3B*W0+{rmg?QKOV&^bT-q}73Q#!k)dn7 zQbm%cF2lYASF}H&+XoD&gVLZin)X0cGzElUep+0P2yVebpcPC(xc3M#%wB7kql&ba zEYNgZ)KYOdJySiGuvYOFpi!1Y^!&PSx>1RkGs5?V1e~6?>1GOxa)SjMbB93IpmXCT z?P20}ulLbP%};*4-x0K+%CQl_yRKhd zE7gnU@FNyxOJ}8#rO_&gMdj2*a*{~`sw%4|1}g&U8pAT%V3#OGC{dPWuXJJoDsXW?(*(TfqlubNF-sTm{+BP@%5-z~`pDq*k zyEv6}B_@=#R5>(L@8OCSdYlmsdZVOj(Q@h{q2#!|+vCubfre*wEq#7Ohh*GmTLDB1x@zpBnzj$Bc{x@u zBCvrT4<#K6f6F9PRs?J=kftH%sG{lLs;ss(RX22`(t@wj>Y&{O?E8U6l`aP2p}d%o z07RA&7^_^_g%C76{;=odi5Qu8Ehj!qM*-Y}CyGif-fK>aWD-cOR%xTNICN^>hzsE_ zv(;l4%jQ?E-=F5TK%ZFf%<3x6lM~%QRv@q7*zP#nQg@ZTAq-MhO1Jj9Trs~D^k85M zzkWp+<`ce${u@k;%m4;!9TXj*{gi^I0K8gnxR2!a1ua#pOj}A~$a#eUn;A6^-K5$7 z+t!M}x5PXG3ctR|Dj0h4A8`0s&nu*30+TvVlAa+FdZUxxgS|=?`GR|oC|zxNVHN38 z?lYH=7o)E(+QOIp69N*Wny3g~{_pttWVGw8V6eu;io&(nHHfGerFdR9t#WvNyoX z1$nV6A`5qkYTqJu%8QvBPALu_ow&7NZID6TEN1WbM}f~VlBPh}-aCm?cFkh~wq&Zr zS%m@!ZmgB*KPX{n2C^YKY7lp*6hM+}w(jk4ABz8J#G%i_gBfB1Bcvq;WG!@hAxI!Y z;B0=0w^Y!0#!eO!V>Io|AJb@(G83wSRZb!|vx1ScD%ooSyBUi9&qTEMEX%zI`2MK@ zeZpi0aJMzik0UO^L>})q_+;amCJZ*4-)w*#X8_1o#ma<; zREy6A<-k%X6)Sr@PT*%lG98`%*;D-Jr0ZKok z*D96xbM_X6p>`0bsMP)q-8U#%w9hf-Z^7+LfIwEWtISE@Mc@)L;9No`mcLfioO z$iG_4yf9T+6z#%(C>Fmj;W3!jndEBv?inhQ89b=zxtnA3y+G`e9zS_=*YfYaza&bD ziBLkqg@0wQyURaX$!Zp`2S8C_5saK;aqZ%^dx2mz*TVF9DcoP8D5p285C} zD;Hr-VbZ_VOrUQ5Wy6WaY3&M6_MOvKX;II3XW}Sy>r%*LZ!(47!EvhN87>U3Myd6-ic4&xt z+zVZ#(Mq&j76Yu7e*j=y4lgJp@GJKIB_ej2QOQD+k%NVaakY*A>sUDV3RhN{E#Yq( z&%|fQS{j4EgZBkFm~+g%T?frCp(jfpZFb@MBdw&@BbZ!=4V`?dxe?Zr?&6bI@&Z{J zk=?mBM;Q;UW856Vh&eG=gRByAva)qUQ)QEug2_kC2cbyz?;Jq?Mh3I!{IFf@19sh} z&y2}7AVsibKFv#9b82N3O#X&_j#kv3pZe%E3NG_N8a#U)%iXU;bplfSdGk%_i9y^B zW*?g-3QmyJBhU7ZXC(Vl3!H4g2AsJ1QL;a=mn<=?lz1(UH+20`n&TVB!g3FV!v0w> zlc|ujlF3JmcL!i+Ska~smDHTM!&al|T3ob%X=x&*RAm&%mXA@1Z~{YWIL`DQi;^FF z$!18RF#VXQ^@ZWqSWLth5O~cD4x)&5|1RT2c5kE8i#r!uI6#$sfjW^`dra^)M}E%+ zBBWg{T0;Ia*jL92W+a%$T0dgJTT^!-&W7J_Y={!XyAEL0wCLUD;4aGe0~wxw#JRrd zQ>J3vFaD6{0{dQTWu3npbz`_l5kzz&7nR$*cR6ecC}D;=md_GcH%3h?zFR;YIr!8YlQ-wUTC-=D_ z1S*XyS$jgDBt6u#Lbv!^bEGY(JW5o1q800VP_h+2=)K@BL|dN%Ok|xC{+BWbcb~Et zZb#Mvmyb!@S$93uE2a4reBbSgUIjfJ&))XmC0xKw(~f1YFG>gFVp7Aw6-&IzCQ$)l znl}>BQ_H%0bnj3p_bKk}^nR9fsjDC>`3cvpT65prb6Xj9KNOW{h!TlC_f{ld%2i1G9U?<#Qh_Futs}1 zj;Obt`yG$oRwkBdhF4=YuW5EpI-KCe31Gs+1(oLZl%MUvdsv0@h&{APeZe|7KDa~5*i*(HJHedXWDUvVcvwGv zH)`h!)0mgNCJ*nJ34Ro*_SV_n{tNOyiKa#Y0wNHY#wpAQ9U>s0`13?7B0_+k{RSgy z=nch{fM^dzZX5`4wX#LC^rC8vuP)CFv}Vk~6g#-~RqxFjk!7hgS_Rme;|Kpq*XSs1 z4MM>azK|t-X0)iEB(Fspt!Lx-*epS7A=O<|zMPcxx}f- z5bQ-E)TJfEFRw|R?L{yiNQyGAwPq4>v8eFC)h%4SB#*%98}=C0rn32GB5ajoJXF8m zALPE6tzYB`d$Lk=GzTPHr%ry>0Q4!435W%qZ*!vp$GpAxO;8`9VFG{*RR&zu3wVkT zQVIg24n5oM9W%-7q653kz>!tb=-se|Prde^f4l^-HMONm8M{?>H584#hfYdPyhaxj zDvGA0vBw-zoMin+1Fmxn2;QGo*I3$B`4DD6g`z{=3CdMi&0!d1Yb%5I9GeM`mdh=U zL`Olx+xd(`V|2ECJT(9v8wd&JhEJGeE#a67A2%W12{=Ho_f~4WFg8iZ_MTm2f3fs9 zg@tYfJ&E;z@b~VP5cfHAWK~)Fj0~VaP!L0XU>$TZ7O>G`_O2gN*OyjW6ycIOs z_VTf*T%L;K#2Y*iLD4Inm1}yCU=n4QRkqu(VK*8Z1GT=E7 zf2-~0?{Il;$pK^YDM(X0A6m>6Yf7=gdGI;mnl?h9F=G0Q5~8O>xb0yu=aX<&4@qAJ zH}D^d{=*Me$5NC74`hn+TsT*sU7J0a=bzmF_xDda^ZPp~d;1Rw*PjrBVkN}7Y-Q24 z86geOi(E*m2X+9XMq^a@$kg>_Eo!>yJrAkgv7Q>f5;x=KR4}@>T)cNq`97ppklFOy@EqTCgvNfeu~2n4 zFJW=fjMPW@P6`xdM}Z}u$_59-)&Zn>K*9^gIPx-i;G5J9S%+)7loP?v?L$DDN(bl9 zzF^G}Wd{f=fz4p5QqXd*-iA>bEs#kLww`ILaQfn&=L(G6X z#VQBZ_=(mk3B)Xa@R3kYgzG|4^$?(taFPS7?MKc6faU=}_l}A#Q5SK+W{t2HOs&% zJdBzX@jz`VX@orsKaYVl0&M5U_+i(nTqfVDG$>seJ|1Dw^J->)M9@s(HeZ)jXTR2C zdwDM!$ABAy4nv!pjGOWHb94AF-rm5ybLB7(nPH~+IX%hK=hL@EUI6FGyBE?(rp@Pp6GrLWtM^6 zz_Z?Z0+~(MA^3=WE&*o!g`Y~{iR$cT)Nng@itlM=dIAw=6Wkw7L%Cxm8!)NvHe}ta z1UB!9<);$)5(*xTc@%-dXQVnr|7K>ET_1x@sht)tl3ibN_7qI8dSSBNZNxP6{AAbU z@;ac5@cc@K6l}%;Wd_u$e6X1mTHQMr3zh~a1S|Vp=$w`p#lnM)w=A^+X-Ou<>xL`) z-6IM%>8ogwdVN85!Ln;HNbBhOT4B!_s+pd86Nt`eN8)2uG7{m}4(Ln!-Q-!GdPYm& z**BYBD`K?@cACx~rwt*!aR_lR)$~PbTFW^URVcgX5K!lUTRAyS>vI@KdK0#jM@Yv8 zCfA!W?yl9Bh^A_qp>{)=W-I34x^ydng=^41>K(s}X(R#?lMj^lC$wJpQQT4&fww*k z>sRD*6EZa^+QW(m5*q8Y(kEHmA-Z}x?@ONB*5ir%+^6MV=9hV$D&~%@EF0;tA@tqgj#*YKUebP4t;gHiF?-cCJ$*S%CcNqx ztu8AY+)jb;pCgB^>=EV zDpmA5j&fGm!htdx%;hlP2^%j@k*e(8DqgM-ZJKCqSONUO>k@d_cda0oDr?=9Zqmx( z>Vd4rI!6tTXa7g9S)f9u0cs3*;l0ZN@emFU2i;XNhJ7*jR}db6RNlCgX(i(!tqt~% z7XxaXzmVO&kmdhH>4d4q|-CTnC6M6OB&)(?ALh(HO)afTXF@ch&EL&U)4P zk9e~nb#}%dZ*wS9ZVfDE#z2Qqv)N&f!O(dz@JoH|&JcPE5xMWGh+_^2@@r#awaJ&}(xdJJ{Us`<;CXcb5YX$d zFdq4)Xf&$zvhL9*epiIUpb7c4z-@Fd5<+CYZ~mq2@%RPuG>cP>V#lS5>4eVyWfiJ# z$RXelyM2zea*-735j)*)Rh5aoDb&vH_0(C^^IFc<3w}w^%gltdN_Sn%R}~GJO%?bMy^C1*uJZ z8rGk$x?3)I(;q-<+0j@t>rtn?4R;nf8)H%A*av>>*~nOQtDf8awaIf*DfZa#^&ypKr+n~;`Zefq^_xA^wv-4jdfL!LUamYWjeTp9K2R({i zBOJM&vV|~z>O|kG`hmd4+e9SV^Mua2$DV*KWZ6I9*vO-BgPGs1KMnJA--8rj>YQ0#apQ@BfebReCg+ z?hUv{3Gaf_^e;i>mKVpsOIeJM-XWi6`|lphyvyljW_11?ZpF6D5IZ!N9I(5-dXH!| zjeXoOP}YOHVDc7!y9Zoy}YrNg>pB4Vux32uRMNsaws%g(2G=)W}!t zlzE>Lj%kq-O#ZE)TTRl9;nNU=3}irW@0VoPbWu8v%D=+(%x-(MC)>t{MnRy-4Kpz0 z8@6KgU6L}kt9Tf;Rt|^8n_oHT6}XFaf5OnGdk68u|4Hm1fPt;G_JaX?# zXE2DZ9FtLcV#DGxD67@sfBiTY`Pct6wZhzA7ZcFoal%))guz->@tn>tZWPF)Q}24@-l2 z2PrwB3vb7wFM9PBrr(*hVR^LNx~zC|ZN zp%V*cqFCAlzMF$}YVZ}}@CDs3$(q;7J?09h?(M0la1=6xzpsb4U2=yl4mEy`*F4@g zM*ylI4VG z#_8~bx~AW;?{Ol_)R?(9aP*y`^{smuO+2D<4=WeO4i;Qfwh3X4)s{k=W5rTEsoY{z zRd8=0AuJr);8<*3w#?+M*DtcM3X|`k`RMEO2~L>9mr%(JSK7_h$X$Nsm3{_I4xcT^ zV@UJIFQzDJPyo)Bhj#um#0Yejz-*L{wA|8Rc~l5CZ0j6z4pWlV4S#yhYD@By*!vWp zwKBYQ!QHv=`nwkiZ4%4==B=~&>f@gwJx63gI9k0OZv6BF|GssGeD|LjgblX7t*mv~ zy;#Sgu~b|v0|tASGiHfolsbB|5bDdjVpQsx%(Mb%^dd_`?iXgKgn__Wrq8_mB|A{B zTziAHl39Pb^yHb{oCk&q9^|~{E|BF9$tU<8ZB?qO&~J&mVnuH*n>B>DP3|Q8yL44; z)L|f^rahfuu)OI$9+bnJ?ypOPJryo0Cwz|!Mg`6lXeo;~Hy@jq zJ^?#G_2Et)_Bw%UsC%)zn^W(%I@Al;poqh0)evZ@h1==73u~!E425@eR+clPqk?6VgcXzD=7XVf$$=z2Okti6ZNq5Xx|F51csc zVHdp)&kq>#T|NGI`aH4QHNTv8?U3?DsXSkSqZ}0I{I z_u^aV_mw^@y6hRpxb$yvcrQ_*S*;YkPv&$d@d^TN-BMq15Hg`c2(iLGa~qCM83ly< zHV(s5>~j+Iy<_&e=oVxy5kMSeIC!VxQRCg=&^hA$4WiRdpr(Ij<|ML=r913$0U>&k zJI8a5U_l5g>)!2CK<=DBPDz5MbQXMnAtAcVc+|U#stjrT@$OY7Dt}6qenhe8ks>|J zZy{#RaI$?T7~(U$q`R)V9oj1uWmzk4OFy$239!e)$5Z|4*DBI>Gyu?r9AcxrfUe<= zfDTm(YsyF%;4)*Q9${}NJbgj3wicSO2=yUe55?uVyo-J6 zK-2J~=MUr6RLjraUP)i!1BLG^`1*S^oVrot^sPRz+1b(`EYZb2|w z$YN@mko}d_kT4oRsT=wJN~?pQ_Bp+6F3wyAOl2-)70Y<3!M`a9(Wcao;>;90i{9UH zGvD3mnQfFR0Hh=C@|n?IqGdaH+zD3h`~%YszV0;|*-WK+DujZl!@{NT(ryHY6DLAEXFuev{O+ZTX-pw`QX>1dsQR%(kJJ=Fkh>MxB)` zD5_f~Ol&@t_?j8|e79!2@zbGSF1^y-ND+Clg2Fi6$ZC7@O%(K2W>7d?Ukn)%REw zy0?}1rh<|)_AGf)(@=@E17`Dt0eo=B@v}_|zVu2|Y&BCU`zj~?ZTO?QnR|BQ#2zCV zDsL5xoOLA2xHld!5%2RtTUR^7{8~*935+ZHfH$JSB9+1PHXVy!PgvZ;D!DYReQ&B$ z9q*TRzo4qz707Ypxu>`2Kmroaic(qYo)%&SO$4J`S~KOgJ!M({fR0;z<}J$kvHs9K zOE(L{^1ewZFdoJ3J@Gb3{6XHwwt=(*o;f$T*OC)CM$dSA?NM7q7QTps*o@ZbINnn- zz^|(A2a%((ZX%(rZa&_9PUK4kwQQ4UV!J4mD}VikkqsGv7;sNh3Mi7NfW;;S3FQz2 zp61#>1i`>{=+X$^J=QCfnsYMSpI#PIj??P_CJ`4@C>I7Tq$jJT8_SbmovD83tn6{r z^N#6HcbeuES`n$eohB1P-J}`Kseb4HII-HT^z|mhpkF)~(R=GGj7Qb_H&~HIujW7= z&bi)KeHau(`5sSjNkdKCOLbm*tUKUt23c88j)-$J&p>xgkkW8)h_&&EHRc_JXEYiKjX8(gO;&Io;V!0A*2x^J5nQWk2)qPnY9j6; zM)?K{jpZ`ycF1^Wv7IuCjY56wk>JwTZE;3whxaiB2Ot`X7^h6B#atLTj>GtoV0})lQy*5mRah%u-&W7^z=gZoqSid0 zR_|9KtVDvljyYq*?nheX5I}X$RIOJCQ?cxnYo{-@UjuhXCa2*q zXvrYKsVrvjN`iHcyj!@Tp4(R4SpdyaR7;C@im1~>f(P61yL}vRDTM2vKjIB~ElLzN zp@sd{K%H7tIiNq@F}Ln9q0Z$BKvA zfr@Pc?z3XT$5rg%;DF_fLb(xT^*2f2yE{w}FG)({V`o{fyrj;o89p7T9X6b9JT_%!AT0^F;NLG{By)du zEh*w9+z!}Vmntv^s{bnh z;@#n62a%V`Igm~A4`++4GC0DK2Sv;(@omXU8_*3=3aWP7YZ~TAMrnJvv%XuDw&}|BNeb2Z+wZ-C(a9bJ+A1e5HXrMVZOi>)jqQ%QK7vu8Ijd6>nG%J4Z}S$$0F7CX+hjJoPJfyBQuTD0JF`;; z*#J*jH()U3@S!nRLmLu7=fX!b>8VNOVN!Bt&-Q(dY68ebM>){G)Iw^8m<&ErTHQC zn4B@4GXXyvFgUaS$U?M#c}LzcCygu$w##I#X+1fZm+ z=0Jr^_iom@zZ-^|ry@!V8{ui|AN;FkX1%?`{$n-_iT?z5q1MxW=RT@Kb@z^V&|+)K z9u%&L3TJQjZkV8Aw1NX>e1Vrb(P${GqYo1e&KE>i+0*QM7BR5)(WwLr9ca`&-kIyW z`s(#Ki0OSMQ9=p@f%TU#E%>Yy0}$&KWY`9-keiOYsIo6(pw8pouV#?jrm^|!U3RuO z6?N!o;WPgE?Sq759SAvLmXvTs*1~l67>=rkH9Ze{{NK@GuDsH#&z><*41R0~(AN*?}PW zQQTowDLrk^lJu4Toui&PUBPim{stkqZ^MrX_Z=xG^Q|FLF+JMsnq8ZEvte>=`D3?( z#G9EX!>x-KsOe_|v;&g+vn2?a9cpY0PS{y#8+z-?2JU<&9M)w}+(n%|?x50od}DzM zsLac5KXB!M3G-}oGim&GO27pi|kQ{hnSc1rmSW*8*8$o_*^vl^lB6rUP`KQw#L)_m;<|Rc@IlG{+qUt|- zSnFLXN)ff}Wdz(m{XuqR@K*&&9o#tdq;?>672$r^S0?i%#aE^?74YyA(iJucI@Cm- zMK%TI2Y)w<6pDDJJeG`CCg7{*7UvEJ(v>I-!QVU3i#6*x>vMeB%<>Dal-4a>%rcvl zeQ1L4^1D`2Org#$#2z5z){9KD5_?M>SuuQ8ebRlOqg_ol{mCRSqpw7`qH(?nL;RPN zOwG!#xhhvQSLT!(47iSXSpMkbV!jUmno$=eJE}xDsx(9;8ouP`6}rFU(|tx=&Em{wi1L@I=#*H9#x?6sEn7NKJPExiQWUOwI1NYa-1P8E9eOqSFrZ6BO; zST&+*3Td*(>UhIyrvNU$$iLYnzg#wOTStrC% zG9M6m)-ZRjPkQ=zcI}cW*_`Q)gRR$(}Xb>@(M=nmPWHfV-@Dx{l`m zj8%2AOI?hsw#RbS$mIni*v+3ugn&Jd;^t88#N3>QAMCUfF$j3m~aK>0q%U7|F|a!tnr88 zS%cP?gSqD-=X$UvMr6Z^U&yVQrf+C62(WltI$M=FV>tpi`R+I|=Q?@Vmb?}XsWbl) zP5q9gR{M1;%L_y9H>q(BAGq&n*PyOd0;QgB?oo5@ef;Wq{n6ZJo|AiWtN8D51*N!VM_e{*bI9v`8s8OIoA zdoA{Ovr$d+gX%G4Iq~*y)3;OezG1ymDW!?#KNRx&%bK=|$5P(yp7B^JuaV}R&aE38 zqtu6Js98E(@iZ|PdBL?A{z{LKdfY|~np7~;uQI(JaXE$!mBS@t zp-BT8(k`{c_+@*)?Ud8I4Ha-kqCtsF&=O;qj@IrgTn1sZ`N|TcUJ_{Z6hTG0pDL7D zGSp60p%@-M12h!rrSOb&i(0{`%Dx)twpG!{*nEb;IlOVAIK{ZX+ESz!lYz=Q^AuFf zG2mQIFI_T+v}gaJ@-9~>w|n}x+CZv|tGtz>AP-Pguh?nh|`xW{eSgg6r{oM7-fMf)_&PdgSEk}V|6}hbA zn+zYLxzK!yx#TA;`-gkj!z}7-IPPH(nk5RuIIUPy?@u48$))~o5_ok9q)%%JDboXn z^1=9Y=`c%B<|2)>$r&9oo=<$Ct&<5aup6`8O`o(EeUZdlc~qru;gqUQS_Y;kQump) zcz>rYTN894n9!Dom=n}ZBrjmuY^0p?o0Q2dMi{mSv}M$Cys%ab(N16@J-H+}cBm)7 zn3O-BdJUL``Qo882KcT|6aas6YQF#mi}iTOxyBs}3Gyuaw@#HvdJ#Tc#=o&RIY8=d zw0?f89LAsuYEq&6g(kbT_EW@oiq^XxvyDeRHbzHzN$kVh=?P@cT-BC(1VUShQ6Iey z9o~L@YMY@KAoZB$0rF2(4CsDzv(Spt}V}L&_s5Bz-Uk|$#8QXoReqOit!kq=vDR<%)2c=Q#}>+XrR8s zv*^v=;HB#y{FR-~Z5@t08_E&JXYlK0xqx90MojTkp~LC>~r*l;px>zX?u zG;85;n*ny=#2kDbd79~MRpbR=&8k6A`I#hGjs?gqa(~<`S3|6TNn76<+J9#w_yF%> zO`fTzoeYkq;qC%{W9_2nJ(#V`eu!b=5R;ESD|l$aKxq24u;fy6ZuTv%Tj3`Pq%;zU zN0}mbhyd7K-uckm3oTk43cq|>G)YMW9!>ymH5fN-x@((AP1|__HDH>$LN1MK5Fd;4 z=!r9Vq4vX|b)9Px`+b0DkX<=1zr80&ms14D?lHLnLS4AGM$;rwyvzCQRHR+lz&Gxo zy~6r^a1`AZ-DWt~YC&YU-Ug^z(*YiRwo*W&k~r5d@U7|kDuTpV4IaRvNFu(M2`M+R zI947cVb;HI$J>WVb%xBWvR7t75w?~WhupP=Wd=3mk^zD_~Dv6Jeq!u-{rz4+Kk zuQ~OyZZ?VuwVxPvAF-LafR5%%$36V56tk=675Pd+M%!5lGrOfBGM{xCK4w^fM-@Zz zX)SZFnJZ2(q7f-ZW+K2R%Yc>5H{#gX!^vQ=BV0{Y2pyS1Nz zRp(Ga-s)QHX#&fs@A|&LvHkn_ReRXd%Z|OEe&_af>-`nta4FU|Z(qa>^b^7AoWgQy zA(VeC!eKTHbH%vCU; zfM*DA3C!HB@q*vI04!I(GB5C26@;S3DM8UhTF&S3l5X|tMm1fyEj)eP z{Jln@?R#_?_l~|JGfoc`lXs4m++pq0)Sy&wh%QJgF_NdUB=%v_g*>3kG9l^2Gh6=*b<;I2!d$T2GqbPR&e)Prn^jsidn8|ADR!g4RsH0#tSiH&DPqKvPJ` z@_A4Kgik)fZ}|tI<;6UAzo62q1&V;J;SzjQB3;SqL|(cCeRk2W z$tg|=5OkLE_R|=KQapW-^St^wrir=oh^ZQy1fZ)dPHoONRGS1v1b#^#W5Y-NZIZ7d z;xAnm2e0!C<>QC!2EZ5w=iU@&_B=S2YbMDe)h%L!TwKU>&neYN4QHU7Zw_q>6ilnV z>--@g(kVR-smLSObO$4UZk~ZjN~uhS2!0af@Yz4iKd@lL3+QGxhx9*X14m=vxBN}^=WHMnlS(Y+yHIIggxfUPX#8di_T_C8gq!@hjVvX10){Mry8%Wc;U zqvwv9n^utdTiEbx(VO)RlvPbdRhH{?LbN={Fb5^H)6JlMW1o}<_lHN`O%!sR-7A0- zcomUgrufjg4OrX3z+`v-xh0`BQmJvz=C6kE+O&A1pzc#IB8rk}4{*6@0c|qB9HROf z<*vXw_Q+J_D_$8#>~Fma-}clpSJ2P?C)!5l#-~@wfPY2J_jn1S+vLfYakZv+FSz7< zUAYj76I&!Z&U9KvCYiv^$e^Pp7Or6B#!9{1d~(G90q~w4lRM5-fhCa^>qy`6KHe3` zal`@da}=JUZTa%`TH0g zcr<0MhF8qP62u^Fk{7wb5hIpr`9s8tLhq=7CxP?!3^}W3xxSotEaJLb)P>$RndNmwmNauYBOL(e;{|h+>8|o`Lb1(+u!xSG;ehX z39~DhjFstpIDgu>WPTjHk9&Bl9X2|QBOmeaO#=Mh-nKejs`&fY|9t?QyDr-f8s7XP_tye@cF8v(v-fm#zUIwo&L{cT(RPZuvb zTk72phqHj!&xfA+VHj#yj7R?6)r9BRHLdpON&vjX+K)|%rxpbcP4t!R7^f& zJI&-XdEdY@K^)x-E=d{l6zK6F$ISrF6z7SP~`|-F{LD z!mRf_#g6SA)>qnQN)8I5`GxG)mERiA9TBX-n>Jj4Lp+{`nwkG z*OrbLw72gAp(0i<+Zr=GGaQ=r_T{|oex*Q>opqon=0422*??a1NisT~l7_K9q;{U2 zA7*E~5=j(JVG{sitaj%jx-QEc94_^a|2CEXek(j(9Hcn(O zX|adTli~#t#T@}NC?J7hwf@b*aup9fdXuRAE3LwgsuYrO+fJYs?G@ae-Z=mo2v2}G z*=wv;q=YiBe|{X??qEofl(@|>g29frN_lq}lnjgt39JS7CI{P+|N8 z7v)Ixk3JzZ2r?P@@%dwAQtIxGrYEU5+_y zos>km6)*m5etkRMm{_T*V|=Z=Y{8&lbWa%@`S}4bh^$H3;_T<@S+yqf=-FP`LT;XX zI|(Pm;0&tdSZhYowvw#&E`p}q=jKWuPzxGI#rw$yv%~K3;bsUF57X3Q0>z!}Y1+`m!DCG28yP@GncTkuw4np-d_1l;hC_^W0-hNeOAY8ca z=7RVpsmft3W)N9u*-Am*$)VTxFB~jM z2e|h5OxMk_+7@ZYsfvqnZJ@83*kx{l>Q1fR+EMmuR4&BJkhCdUo8JhO@F&q7rn58U zcF;heyF2JmUl+HLy8RHxaqxwf1Xu1wo#S%-PoQM@K*2UdqS-(X?K8)U8xQ*})=U!s z8Aq9wjsMs=!YSH0o<)H*o&Z-@Wzl{p zGDaQ(O4>aEVXS6s~ap>TUgN4$qJYbHdwjwi6 zF#W9m_SJ^}{EB+<7A!B<5Qma%b?g|2i8qX1--(C2Ppia91wnCTE9km3Rkt8}v&hiV z84W!mLJmh)8ybF)j5o=cp)%`Q|Cc#J5o88z&Q>S~!2O!H zNQ+1zLY!6mE%h7XenBfY{A2isp`T&naIliWY`kYUYq0z8Lzd)VOBQbmDO&q*-sJu+ zJFx)Hkxz+F%pDA?3Jzfhn@VR38T2_?TsV+fsyT!N3zU6@?=UJlkH8+fVM77sm({S!7c8{ink6#|F}lw0eETz&>A3vC+BAaj{&;d@N#zfj)GKWeN5Hwb=!$sgQs(2J(QhW+vi-A5HN zF-?0r9Z8H(wCPuW-{#y+Aqf#$#~$J;i4uw;eEpM}SoPO6R%VqMFV2fOcxW$ovPx5) zvaj9?VU);dOKX^+aZvXLFci6h-j4#g;SgRP$#B9lSA4oRSjtkun(4`^h#B$ciiF;j zykoPH?-Ax|q5-}A8icOi<97}9U$2G(CXFBM5>=B73M^AOT2)EStV&({7TcEkmMm{fOQU?cE=Jl#y-9G zXi;u-Kb&N|i#}{MfoOPN3)2c;`rcakg)MPZ{f1Q|n*Bj!L$s3qi!9u7dsS1U!TA_# zxjJ62+71aKkJcGmQfDh1?*IdT+1Ee(Cl|m%Y2%`Ix4S_(2MK`%n6)d7{;{WxD2j~! zX8`-S#822$QRHS?fNkGJ@wlYn=wcW-E(z5wtO~9B)J$hKo%*W@^B|9C#I4jy{(k07 zHY)~#mca`}a?4PsxRWgJk@+6=sSL=Ju;`{8UF3wP0_v2A0@BGSXQZWoL@il_W$q&r zL=;eh8FVE*&!&sn3&s&{CYBa5&7YewmxBf>zZu`=nXz4HGvMj5+9bIQ$`)7J0xo5Vk zlWhMexo(hY`Y}GM(wk5+4B=s|XJA$ASR<`Ofw%}yk($@GZSI^XY;5mL2I6=k#>P4_ z3V6d}iE*GjU@VfNjDL+$9q{mAj)p&YD3B{mNcd$UH=~X|tDL%VNrWl4e{#pNS~?J^ z6FhRO-f#?C{!1;V5M8Jl- z_-89D`yk$8h$V{RTpk8snh#~Hza>@gj)uaUKwn!05Dfbmi=497FI`Spk(?Z@X&HQ-k`E5S7iY^(KaOVvBgNvqp=%3!2U?e zi0}m zp{BEENX$4nn=97gbEx8ta$K5cGBLVe`JWRDupqzwCC|}3&KK6OoMy+vV8PWn(FhBa zmf(sw^UIr$&t}g%Cw3S4TfM^yNN?~h{0(=XDe%NG#?q8~kA0!q%1k~^2v6WM&w&X6OS)YEZrwSE7;0|=$ba<-Jhz-_VRIvo?;)MhxGfo4-snWh{O&s zr6y2z2|Ry@i5r?pT|G$tjfs|RhD?9OpK(%}iW|OdPInl|KOOog8$5;Df!mO!z|rH2 z;y(sm%0Kicw05t07IL3Rl92sMgb|t&ust?gFIKV3V_Y!s`yRhUikfvIV|YX~6D{^} zxPm(W+cce+kh;=G3BKD}EW$ATs~)vN3VH~E>k=kgI?-h=4RZHRs(Pj9xhc`4iX%z7 zRux;%BXf>0mKm8Jfiyx80R5FEJt?K+^hg5h7XQ=bIz673j^vr_nZUL!mE%tZ;A8?9 zynlH2T>BqSuxtvMUktjb6_xGZ$LYT+`JVA5yLT~0CkA5{iFCK0wVsP3vc`<+ZhUqIgf79dS?C|VKuwRK`fYug#;3k znu$RabqqRA4wj}x4lr7n+hb0ukNQfNnGM#O;^R2oUC}54-G{oILzAU30m$ze^-iSU z=MJL!x9N-uB%Ira6Zp#0eF-k!%~M-DE~MU;)Y+Q4izLMRx&pYC^32_jmHMj7LTsoLk166b_URRmQZN^2)}09 z8WDj=dthupsF>_4TWHIr1aM#Ac)j4Qjr5I?@o?mr^R17^P-dD^bJW@r$SK-t)%JOduDGW2h0vvU_HnJm6XCh~srop{u z=4iEuR99@`aV{K_@Jo+fN?($)shG2NQb-0vHGO4O1P$kd{i%3H2jJwUPbS8GdS;rM z1&QzpHd_$I_Ea^|TVF19uLNV^0A3xoJV7}!w$T4LLuLrtHVWXJzT66r6oaNy!>OqU z6OxN?LC31$V0ah!ZN zs;WrRICP`t>=L=t-I=cm4QFM*Uj!<7oPHq20DxPgcDvBf}yuM0q2S1yy*EP;B>{4hn+o+#bl28wBtqIrgMdS7WL}Z zw9-Q?H1vR=TBWg%UofV~SWYfj4DxR7WS%FPMhb+~uB$bo18~god+SBaTlHV{`)YBH z8>isO%^k2?hR3VV>nU!O+$Cad7P6FxLQt_cG|o97*nqj!ld5(L7NpNrL6&ic2LVA& z90dwO7Txamzdg8iNA*2a0VpokVW2`t*yEaizIfS*S0IjVEU%cb|6(?>K&oUp^xO3sz6=?Z4h0u8$3CZAsTcJ@+oihA~p5^?? zLMB1Ci7#i*nhN+ho#u^w+nA>w9ge}>oKtlynhA>x;4pF|G$RnxX^Hpc#f&o@MG1dZvmt?Te;*`W-yq0pkfQ zy9bi^BBxbNl0AJ6r=WzWIO1V7cgGyKLXDeqa9M-{x2dZ8FBgDsF8?ryf zpggYflh~Z9uOn|#5lq%!Go*vrDH|(d;`VcZvdo>-h|)hU1APc(>YqGg=)Jhme1ttJOBPB z&En9WBYA2dFfGUmiJrN7(CT2OynY=L&6;Vcg!7&XE0$;EOm7$5KX@s3x@w&%dQ&dc z#7{UGrXf=O{tIW@<}g0CJCIG`@<-z4`TnMT-5<1TQ#+>R6wh0eFeL|flc6G%SPuXy z&xM1sm9_my48{z#!QXziH<*@fVe?1F9d@-MR>Mp$#sW8yFV6?&F(o92ki<+FkK~HS zl$cklA%q-h%SAd4$vO^c?{01&lL>D%-!1WFq%`&_8c~1e6BGpG>+Ab2|LZF$(=L{R zH#W3-wglY1c>nSS$DOn0hDSQLIS}x|+5X3N{CqQja_Sr=K$4B_rJ7E`JU&ssC^h5j zaqnuY`^)?7@u+zV@OA|FdP@Zae9U&e-|hjrKK6#5m$sUiyWgGkx<783zh1l7o`?Z{ zUqjhO-5noNU$<{gfbqO9-qG0Zcbu=Ur7NfIkJsvNLJx7s=ccudnZFDf0d1Mc5>8kS z1D9B5$mdI_ALL<%(k4m%1=Gmo6ecqs{-5hvpE1W|L1=>ia+$)ErB<+W(KZUYQafV` zn4D^O?G)zr>SL6b>_~%D9)EygZ79xWR@wal5om)rzDXlO!|{Kg`|wZlr>G$)Tr&J6 zgztC7u*4`I$Te&08SNNR0DwdagOFUohShfGm-cKS>Vr5|LC+bo%E*I^{l68%dp?5U zu+#ZeB5@<)esmNpqg~QHd26DQNoTb3fkd33K7L63)CpY!j5dSuDlR!o6T&}slbG@PXYQ>U|NL$ejfhQ{E@oR?9XV~(3e)DsCOUzuH*l!R0b2nqv#AlIf zd(2Y_R(kr1S6!k$c5D~cn2T%hSJC-HEzK|EMMKp_=g$kVd@--r^9q)m48!N0@q~6w z6%#&T^iO?8-Nr?SY;QE?Qb^e={d4&fVq2@002R{u`Q6c~zB0mS`Ruv-hX;5p*bIcm zr5!USM~@werHoizFzPr>=1R4hazC~}g`sEdQnVDSUKryAFw* z1KiTP0utw9gw_M;g%c1OJH@8!ugg>ZbUiOaiO(2?Wijqd1gF5j6^7V{4fFq6ZyvaR z0RDBn-_Z*ePH>3PIPR#IJH0pSa|BtCf$@J%KohRD=Orck|9;%OwS+2$Zi%w!u>4=AC>Xb&_sFi={4K+zH2IPRB<$zHB2q1SKI zZd?1Ffz-uDCdmJy()mmdU#^!&KEwBeB}%K6*e%zh=#yn_V&(8Q8ixU?uxCBZZAg7q z8q|94kqu?^1Fi8q2J=?~BQ*unF+zR@d(^Wf-=OxcefcFG3YYlB+vj~CAU~~2`(#{Y z+x)Oay~PzPfC#;10=Z|x6RU#$VdYy->!gk77b_>;&iL}`OXC!Ty0PkeWrAGW^|r^;Dv6G&guD$N@TZz(g>&B zmp1m5e@mDFBm*(_Ny;0bEfqtmXn@C~vr)%EC(-UYQx*rclOLM{HfDds( zy7&!A8ZhSn+#qO!sStk)>>r9(G-yPhoGoEFg_C@+31rLI1h}HuVKZk^4{_RssaWkC znJsVBn3xFL#>aXzNpH!q4H?jn^TKC1Ke)rzY=+<(FH1@PV}k8lnFxn-a@=mIQZwv} zuDXR>^!iphdc81GD-*R7CPTE6=+v6%ROhtGKQ=1O!fVRf8uJ;SUH(;{Xz z25bRrGM&eA`{L_sBDJ2{AQx{yuiILVCisj}&7oXNoOc-B=?u@u>GF~HtkuJ(NZ{Z1 zS$Vw$)xX8crE@F>Riiov(oZ3sT}2CHWl-D~2OXcbW`?32Hx02U$QA?~yv!8~tG~{l zeOPHjS+JuK*^t0LrY&7F3xl%S5zx#5_ym1H%@4}1F)YGC61h0iAbNwILJ8yuX`b;` zF2Q{e)^@nn>Z&_6ZW*7Mg*mXz6VlIf!wX~AF=<9;dEml-TT^>r>us%=Z~b+&He=b- zy<^QoZ68+}8ZmtmH+=W6g*+=lzX%78=e|NEP$rStXrbj-ZIg^~t~gBDj4-45@*hfVIpLLYm`x)uYqerl|Ly0r$?^MR zNEIsoZS~xGooC!~M|{u)YRAACbZGok&>3?UAq{Cqtbhd2Ce|(YP2S)A1Qp3sK|=Ku zbmyMC2DskEFeP1nE`-*AKj79%R+;W;4+U_vSt15i)Hm8HhCjn9tFNZwcT2^hzGXK> z;IR+Bn$#2Ys=dQozVzLWLFz@D@s#TCe}?Mz&HsnuHjP#_)!2PQ+ki)~)WEM~lV* zi_7CIxUoi&G2B7IW>@vCu4klZr&Y}Mn+UAnY759hJIhi~xJ*wWky)R`&#O=Uowjew z1Sev^KLAJscRx`L9IL>j!|?j2S#mjo>VZsaZ%`ppuTB4rWEDg&-`*I18v5G^!$~_6=B1AIb^d{-Bq&0l)m1dYJSdCh1?V-q?acVFgg#xkhi;3A| zQRX8Qq0^Hp?K26n3Si~Lqh{_-=lxyKB6=(7u!&85`;r#s6KnrwheH(kJ!!Hs8fxu3 zU^yfw=uFyo4RDd>{vgbB4NCk#;cXqHsa`**H@O&axfDgS0pI=e~tw>>og zmqU7%kiMi78Lwb-)}&Uf{sK_|f1X1#)dyN+!hhU7TPOn4(7}mhaUqVNCnGC1%Kz@0 zFnk-;A$V`*WeC;g{i+xGIwYglB7YPhN+^f>j%)DkZ67gRs7ngma3d=Du)G!WA82*a zDY#DdMC1-M^%p_hsqhQ0@4?W##xgwz#seQst8dzZ>V(QjtzJFRq;xi%FuVRTd!LPcUOmv(jc2l zu3I*|#h2J?HG+{mz<@2-3j7c-Km78(4gMo@(35@l(Bt%pn@lfnkNxYj&H_RSNLwjR z+PrsYjIlQ(zQ(oPqQmf#PJ0=#jNNI8UQb)0W{vSzq3pAo2BdVL+WNUah#bI$Py}Y2ohW(%jo=AtONCCA9^g z51ObMWg>?f1*c0hW zKM->Dd?!eb6_;QA-HJ(T;)09(R~=;ahLkTNbwPZ)og9tOA62Fslne)L)qWRGJ9s70 zxy6rNUbN<3Bqc*2w?Thct>LTH6r*s&@`YTQ+$b!4?g2m{i69id=LjuCwUQcUm2JBS zyJHAEy+UV)`;_ZG;{rFyJrHleC$Gyf&E<|7@ZVmWtdv#3ZKvNNgPX=%Uc$J}^K)#n z4eOPb@C^n37pMQ66Qcv zX3+qw$J{&lXHk8LIWE{|)93`kEIZ}1_F1y-4%~m+6lE1fSl8-NfqlX$WMS9Q{QJon8)it3RdAXC>&UTKX2rskg;86 z=~Po9*|g!RKI;4&g*2GM>gkdV5i+Z>+{P*X7B*QHVN~jT@T%eK8Mc17D>ju7+|J|7 zp`r8p*b)uaA+~P331O>pZ zJ==_!lCcq^us5{37?>&R9A^pQSe4|eRZ#F_o`f1>URX0%^73%c+V9U$YY)>fWJ~KO zU2D=XuGkMzrWC!@2?H+TLl>rHuE)PY*#?MeGE9_{;Rq`6(S`Se{@x{scRbkVSkSHJ z0hFm|$>P6hh9NV0MVW5K1Y_`|e4qgq0?hXr4sS{7vEf2%IJD2nbtL4M80}B&LVqdB zEu<+OeEtaD`XC44x39>%L?K~Ha-DGu!^>?hI3&apNBa_9tka?;C2*0CF?Uuq$RI-I zlVGD%e9f-1#JL4!+SbM{=5AFO$j-_j!bu5X_mnfeRm};E|2WrghsjbnFWv>r9KGS( zCj{#|7ui|j68~l&-_y6I&VPG0HaSf7x2Ge+boCZQ5A2xTP4Zmr+0%DcKW8>8`X0+H z8{w<0XuC0HwH04}93?ww+XDLG4AXsv5OZM~$bD+Ce$Vlx!z|bM-p}4sf#I-#`UNwY z)l$)4w8N0UyINN)$*v@t%O?ThlI_z@O(&YOUbZNKpoE$CkrRr5pVk*u z+mNL8a_I&(R3J7bB+M1N8in5b$>R_ung{zC#T$1%*OrFO2Q&t%nYMuVpxaguqN|G2 zL7iR$dYCLhTFT5)sN7N#%dzo*+e8|LNG;)yqiRchGquT+J3r)`ViI(D=ym14#|oT2 zh-^V?96+=+aUQy1h^MwTJ$mH3YubplANY5h5L1ihlnQ0JqA~ei8z1?W$!kWC9kylU z=4YL_!O24{4IL3(>dJtR<=Rw!lfAdak<%Xb?nkp;QNjmO-(Ofj!ompoX`Ph+kw*$Zwm5apsJwjI({f8 z;FYb)+30ynf@YC~Ms6OX){7p*bo;HR5}Hi8WEz9#fC3MpqU<}24n5`)j)xO=hT}oP zvF=RS*;An8RU3M^`FG#p7%>*}qo}WZxo> z2K78GPc&-h*@##5!q@x$n$!S8pffW*ilN*1?U>7*+PhZ zP4)SH-=Gjo`lF3f*|lAtJmeIK=GXaxMnox_SROK{74bTNXy;X~WIVzLBReD$#?Z&eblNF4$3w6dHNQVjpe7ahMf zfzztQTHZ$zI%so^5Lmn6Fz~VTnOf{5Zv2OTO&wOy*&MOX!v6Pb+CpzMiBx0 zFxhnN%ybPQ-0kSDHrLEY6E@SML{tH9{({toI>7hHvk-roFkZ?rHW;}h0iXe&zOdf6>ki0-`f+kU=wqN0dBjj+DHqe1>1d$RUbT-8ZL75k~0`iwf91biG@8k>9Sx$L@(O;1h) z4?1zdGmUt~V9TFd7i}EpwYaBd?6%DSa=jKaWnB$2>vR;ilwG)ODP0Y0sjtG3s1%!CE2Q(A+IcJdH*4r=@7V_@5 z|NEI0E8jDuK+VfTdTG(-t$rIMU*gUO{gw$s7cMAZJPwijmD`i!+wXN# zWUU!$Y5!iq>)CtJtx?#&+cg&b+x+!ZpH7vJ@KXPHKu~nOL^VOIj3+!9VJZl;-fk6F zEgrQ((dny9lSm6<5hxW8axZkX(q|#jPzHy>X<=}{Fn!BYWqP2Va6B<;>3JNbXrjwk z+i&6Fw8UoD(G4JTT~Q=QXGln=C#s-!aJK#P2AU`~w84$L{-u2*9t=7;u}v%DRWs?g z#pHqkT%mu>ZNZoOfzE$fiVFT`Si5CJ_~-&ZJ&Bm`z9FAjoT}daIBUswkp(*JR%z87 zt7zVR?5UD4&3`jNz$N2Jhe~hWo|jTPfJ+Jd3)k-iNJ99TFfr)yedK6~KZ{E24XE}d zu0wun$(Wf`IJ;?&Ze1oHNlGb;2aQhbRaNh<_qvEwUVd-?c&=9p_xkygLxHhK`oLMG zaM}R&?3Ezi4Do&LK)Cd#-TG|>HSSb}DLa<*2cOMYh0XYqByC^)Pe6!yO+mm|Y?myU z8KJBZ;Jd=l-_F;){{Pe+b7#P$VElV!aNt_j=LQ$r1WY?}UDssHR4YjaaQj-yf|>5Y zwQOi{`M*I|2fGrSP#dl$Aw@DMKB=0uArQ|-&iQ_BQsJiZb|^J8ChTMYY z1zNv@)3h32WYuwx>X#}nuEk{cMm~rtKSA`xjf^u6WEq2V{cKc$Gj>XYN~EB266~zP zwzY)Fs+5+8EBza*7zmJ~UbVW@J2P^Ks&B_HBY^qWp(26#dUKO_@QYXBfc~z+u@xli zohz_x-2D$UcND}_(J^Iag<>y&?rVHEP;)3@<_oC7c+mX*i0Q%}AoG#>j1jCM`f=x{ zL8+yUDUa^nO<(KwK}l%d>E%%Z+3xeBRU0=7#;1?giwk<~pit-y zvQ9`&m>J?lzh>Yb-=$xGNY13#*DwV8n7iGIBdieaB6z|)8(#CzWk@g}b64lpWgXSc za_ZAawe>VU_x6Lh#&D)f@vP?6=J4kNtQBD?h5rJn7$!yE6w8Sie?nKDmJ;mqOcJW> zs1_lfhA7#x=}+RUoR??GQlUX-VIk=B_5Ji)mF%mR`IcFm)k1LMzDl3B$j8eIuUhUT zGJ|f3&iIVg_YBhD_S$TKsdj*Y7;pK#4HHgs6c~;LF!@ILR^plxFU4#tRl;OLGYhi)C%b6 zW~4ijTTm}KWRzks^<1|=PJh9Whj+cgq2y3C8mL{{+CV>_B7~(7YL5+B;h8c@ita|Ldbna*=T_mp@H7vqBXT=! z?YnKdY^3~;xKTmWfd@C+d|yiJ!U4s@;wKxc!>@nLGCyUN{69~ya_O=Wm}F0^7A4t6 zyqP{ush*{&?&wDVNyFG+8WToC6jfWi#3K~+Mzwd0W-_gXry`Ul6-YZ}G`R6)aC|Z5 ziP#~>+}60y6GDfZa=|*jCr5<8ax8k9F4cDDgor?lu_?s6Y1@;u^*O4|ZCy^1W^a#L zBU7+0{yC5s;QiX-NJH!Vc8{$=Ph|MRs)NlF@AO|06L-7;j&+kdvQfIeHf~wvBPdTt zt>|%WY0n-bC0qNQDBFDo18aDmQjpd6F5X_LX!FBG z&|FnN8*vb5WtR5+V~c92^L{Lck=*HW@5=Tnq{tu7J#1!ZgVuL~yTqo8qrlF;@%y3= z@Qt=cD3Zi)Sh~N9tak%*9!IC6&Uojlg+D((-m;sW00D0w-+>EOVnqNHdliq0@ANQz zBoGk9|C1i(=I(88;r5^8uyd`o*flN`f97cb%5&AiV2T}nO31?x(ZB+l8aj=+{hMrwYGru*1|DZdryRp_c*03SP|m#8r$EVEQ$#;nvZ=$cf9?Km!dTEp z52aq76Q@=T2Sw*jx4>7sh%WrMNH&FS$usb5M4*_Kw~!xjD@mk?EFI{FuZrRw;DzB^ z=qPdO8zrEkCd84suX;QybD(*Q6DBfWVEq1LxSEVLJEw1=;-uhx%)1YP0ra*AsLobO zfLItZt`pt!cb@(5&rEWjrEV;*Mf)lNUP$Fn_BgfSPFA0Asfoi5;zq+k8X3PgcKXfB z@mGdkS_^wXc5qfC7Q!5?^$&DPG#s9Zx4o)BZOGxaL;E9xKb@Lh*r78I@UkP;mf96Z zT>T3BW6o&|mx$x1t;mKEbuy)eR>UX=vSkQd4tl3TUL^{1u;i^!`ahQN@8;`R3=0-X z&QB=vy%-@ai)1gNE@hX`YpTr(xNDg8bT|sGq~HO7mWEnPqkZis=3xwmh&HXsd9U=gTbEYq39iQFFGi)7&-g)@Pl|CQCnM3c3A@Sy zA7hNgALX^}H9HC|ipf`m0z-5l!AIIbody@%dB*&6m7P%!_H&N-mcj(> zPw2IP+&@R&;-E%)55V^>uKf6cs&K>cl9K~$TZ>R1MQG~Awx}aFYw87WwRvogRZ0I0 z)3{q-(OTi@ImnN$?U5!FYrM=!_xaRE!hft%zi>VrV>2qqPZmApYoh9J_)a zOR|L5|GIGdviCg1;7`SE@lt|N+3x4yY2W?=Xl&U3`72`E$Q!x_Nc8VC{xYW+(kmi< zA~tjP`jTL4JIEQeTqM4iv4uy??|+kWtAT~0`Y4zsmg9-&nOmX5%kNID-;#{BKx-2R zaJjz;qP6B*H#z5j`ZZ}&kPF`*ZSiRZaqB~zPeAILPZOsiRKb_QHj#cg*9?}hmz?Oy z-hf;%J*n_qU*-3B0<(x)K0t}u`bC*tfiy7KA)ofRlqwOv?t5XqPr*4|J~+2C+G>h8 zm=2Yza2}P)6gXWdp-Y;5{QB_4TmOwi0v;Ko0NtfgfmkM}^^{V#D3BnVw?w2s0&RXk zeFT-@{jjvVM1@2dMW#p1^4F%6Uip9w(%|MXwVUN;hIhxO7XkEDf*pC1{@Xs>8&PWI zX{ev}8(@o*=1$No?R+_h!stzD{h64%`_t87<)cTig>ho_sxnhk)Oa;3Zd|`KQtr7< z%f}om;54E~KD~bO{_mO#jM#6WvAG!F)hcvh`I9(4;e(%(6zn{HBVOa8KMT;xmnIe0A}4!N%BbW3F0vP33l~+p!P^GWSazZ zJ(PSWU&~%I2fd9Xd=y<2ZPXo`sJ9ME(gJLu4v`hAO!r%sIXQnonJKo-4btk z?nujG;>oU?q@1sB{;8tQo&``^-Q4*KM-7O3PP*3u~8d|cBrrO_~P_FGYf~qu2E$?o6FD$4* zJ|!Z>`I^biVTWqIyWY2pt&lom-KB?@=OcYIG_nRO#%=~T5MC{T2(yJysLx^OIN}u^ zL;{j4XsYhNU5a>yC=QU^0R4NsF2GW`-kn8(_q+rmElEC#CdOQzsJFbUI;ICwue6vd zRW-KF(nZ0=i}2tCwRYgxN#YaEUg~cPJS^S`RxuR2Ko7aj2|1gMbm#-zQ!AbOX@&Z;p zwB80blh%EW8~^ZhY+j?a0y3Ey7qG>+zBjAyC_A9FUM!>>1U!^N{hJ;YC_qK7p9Ldq z3-U{R#5aR#W1YqUn$Fjigh$0MdSpY>VK(0U=i5`!g(g2v*TJUS?ZLWS-JqyuFEWna zBApaPlnO}HQl9!6L1$I!4gusME2Xvu{qPJbgDyrhH|`Q`HKIU=X* zk~h=T{soDmKEacQ+0m9f4RBYuVmk56y#`j~;uk^5L-oh31v1=+BoAHn8npDO=oBQ_ ztVAT(6$|)lTeupW{9*wmasAV1jBP2s{rdAn-(y5-u+F|c*@zEAl%MsvI^+32$f!Ub^uDwUkIy+I%dA+ZfC z{2;J8VD$FVXI2q4V}pl7YB zz+cx>yYrtRfmVjgkpE2+2TB<6;QufC6$Aw1+avhj^A1ck5(Q%=27*eV122rkKzV>H z#$5RS3ws0s!TDe7?~*Do$e14g|8+6`*CYryWXuPqE%{B50!VE_2R0)0U)q)?++dH= zz-$v?Fb`$m_V+7E4M=J#0ICBtG-dezZCacuCYYZVu*g&dY)Th+Y|4xOU)A`Ijk5&< 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 388/660] [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 389/660] 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 390/660] [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 zcmZ8|V|Zo3+GT9p=-9T^-Lah$+r|k_*kQ*V+qOEkI<{@wnA|%v&-cviUwf~5t7=v4 zs#Sc;hrnxw!E46hK@)JWBFKHJuJ z*{+|EHv$7NNZ?$V;$%97ZefJ&KRZomC{NGlvD|Q>3A0T=ADu4I znYS^kO-@-Y1i@zqVHrkyS5=9Bjz|uUR?kN>$t|WT%C#s2K*B#JeMCuFKAs&r<4&&i zM}NSAwHie)=scDlBJZa)+wvv|U3RO=&a)#++;1Uw>{JjeWSll#`$SPxo8?Ie1gm8R zlAr1%3MTI_-6&j&VmYM1y!7eZ^#v~^6?Zqv2}O74jyA!Dc~8T=+ls}_CLQlf&|tSY zh(07KS(I<#f_h|GIX@aOTQ+RxBUDDj7G98YI*5;XUf>_#ys!h$SMf4_VF4pV;1l{F z8L&GN)LpwHq79)wxd;Mg>Kfz4uQtNJqptb5I_XFL+B}z8H1honX{1&~b|&CH%EL(0 zbiwLVvVUR-B6zjMLiU75frx64l;AU9fHmaOT$B;41>N8mkrnT75fb_$77E$HJ=|+Gfd9mje))<;q$ZT`+&c z!*R-Zb&6-)0s9P2DWzqiBD@Dy&x=kf!}V^oR4uvRpk+ko@y~enybf`_ccqOy&JME` zzbIUdgB+tG@cCCS^UC)I>490DbTGbzr%%lE9a;HgVbM*BdV&=JOww`(zMf_cOk>_O zdakyTe-U_68x1w4^6>cFnd4I8HQ6cnKII~)pp}P-5-2oEa{Yc@cz_<%9I}O|BMwYw z8P+O;-z2!$7I!kTnxeof`0>XaS`CW64s=H)_$&OykpP2f4)IDLg^bgGNEm?{8~IUE_5&gdm~e>`L8LQG?zaL;^Sz7DB+2 z60xO!Yu3PX6=NHM=OgFuS4);GY-_ zP`XH$XT*sdF#eRN20gWxPG-rS(y#h}KE^c-va?f*YRu*KPS|&bx{0>^%>26oJ z4_~}jw3_R8!s;l+?8ryOIeI2z2$p^*#Shc@F`D`lJv|mkY zceOETm4823t?v4`n5V8zyRGkikPmh1dY?6zn0zUEY2-=%nDy9vyM7zD(d_VA@AzBc za;V>RveE7*Mfx`6rE1q))JEr!W^ebwshpx2)B7;cm#6Jvog51?8Li~~K6>R|- z>_-N_Co1s+wCHzq`eOg=kO30>41i+$2=gM%r1P@1c3!+-elFfBT30Af2xYN_|Z;MurOb7lnl6yD1$Ugr=3VI=9j5@^-LjAzts;V%5)BqJT9GBp-A0URCO`LLSvZ-R!%WRy_K!qvI*{ zCO8GT|7xj&XOQrFQ?F@l+dI<(d+uhTRi++3WL*?(+-%br_(RiB%Q+6D(RAD6gVRj6 z)l#K1gtwu)D3k*6@m3$CZL2D>4E(=#3E~erk6CRjD=7bo;G(n?X_% zbi~s{)sc$ry)`C4W2#zbc2V{%E7_s>-o7h(Gq)v(g7_NlDMr_Axwo@P-7kLh8<+y? z5#Fu@iyOBdqm=B;_cv2t%*wzB!9S7hzI5v|vg96caB5XBd;DBHyp&5r2@EW^4`tSF zxTQC|a|4imzSlwO@XSQnYni9+@$c*QAchM#?ZWo@KvYD%?gZU4yfAzBeJqh!sKl#` zwFm>-?tJO!E+p|MIlyP);$Ccai>YL33t^w_yE$?`O=%YqnQCy~;oJAv37GqaC-xKt zGStk12}sL=dB~Zj#4+tOr!uGAE-NFJKAYHm04Nj=ff3 zdwVO7Uf|KB#^JpP-S#>N^+6jGw5Y3lMN%vd0e1<8xt5RIC@ok+ae92JGRnIU)$lKM+kswM#Xe2L;9X@U2CwDzmDZXES(#B=~~j^peLD zGWNJ2cEEBqP^Cxy+;{VQlSn_wKaio<#Q2*NY`J0A$te#0+5n%c5lV_KbZUGUlEcmL z(+_ET{DCP3z<_s(?j*C?yB=K%2Pt`PReO0tih?Q0!QdyWVB!r$2dOJs%sOTt&#j z0a38{&4af9!q=Q(kP0j~1F5vS4NpCF*l*cfBZ+e3hG-SE+-`MCIZ$LnKJ-IXda3tJL15^p2l2)Ct3wzi+F~BdZ(+ z;+i{tUO&nk?>lYvgH|ZkM&_GK%C|<7rbHU%RlO0WNMRui;7Dt_Qqs^rNAMvc?+PAmv za&tA}bHpP%E1Y8By{E{zJNJ^ijHB{o+Tx1CvB&3-zC82b2mYXwd_kUDmEv@D`Q64SS>&OwG=Ch=;0jJ7e5e=P~*}->=koe?m^ow<4K2REeXo{fj>7 zx*qghGjOx6blYG7EYc&x{YV8%BSOG^0qCGfVkCEMB5}k40)bO~b`fcguXOcs$#rhq zKVibceL&)B2R%4u2ArlJy(a;!9R>98TbN}BDZ7WzqP^ku;j(6se^^{UPkC6Rfm0a|AWV6oS!cQjL5$6qj`BMA8 z*Mj&Ij}(6lftFM_=Yu)t%$nPN3}AS@2u8WnI~gY#)(K)W0ek6p63O0ctD5Lh%VBya zNbGl*mGY5t<6B8i|I19lJsM53DmMa0G?uIUr?Z0pG5=$=+l)wZ2bU9Lg($3rldf_~W;n zsf*zA%u)@T+754`Y3SgGS-MG(Lq$_cd~QvFXBF!ug?Op^Hf66Hae{wi6dv9VjkOlU zfOCf9sRAQkPW-7PN4v{`oz1bd z;QI{P$aj8A!HB;qXMFMTZw!e9$5QA^eA%UOHC&&FHZ7d!d`Gdo-`|L*WI}6TXE%|XKhDV4J_&r?9H9J?D zf$9&OPRdfLo-U_-&IlnlI>xA%AC!S1foFuHsEYK~FlcKinE3T~G+Y^b)mEGMAP7{I zW(BTdascNsF-%IxJVuvE=ZJ>|6|lf45t6L6%OwJ17ZRcG+9D{rsUMB96r@Ve7YcRU zOdG(`po#L#aYmD+zq&JvbS(p(P0RFA5$V8^t@!320hc?v~owS*bWUUx@v5BV#ViPlCZhWwk+!uCjmHR~? zE7mtv4ziRPcx!Ja5J(QH?+8$gx9;Jb?Qey=gGLq7)%=F)k2Z)WEvlPOP&6xq)~(dB z0D*TvlM&DpSrWme!^tHQ^iXV-9!rLT^i!-S98p%O|7K%X1p?t>CfnJHmQ@>0Gq_Xc zuvoOJFpKbx#fE7rz!8d@Ho`*vmbS(@YY*XBJ}11EN3Y)$G{pHAVzR45qjRgYQ#R~i!^~-I)bR?`{%vf%Gv|nU1(mZ~GJOEN zSM?t;RlSMfXz2~NZva`Xb~WiJF@3mt9C`ac4|X&$b6-Rz$nyFc>qdLa5qSX^{mw!6 zx~n=k6nRftP?7Dth(+2N(=C~iI*>FzO!RyD(+vEa))3QS=sSXB*_0&3UY1g-k+IsW zenM+n9zKmdTrZ+TWA6y_LJ*-swW)lOI_^85_=aIBt~#F*SQ7Y8QTQsYkd-Pi1&s)2 ze~bFxsZ9APxs1F}`pXox1F+pug@VwP^A0{rV#v1_WPuu-)|zNavN*HPOE2a2458j@ zO{tb=VnzC5K64$AwnLgh?S2s`kuQm3`+FXz*N|4CO-2qoOV_2Vx~9%Z$M~+~4o~#Y zaCzHNGOgU?v`6v{ddn_w#BdId##bqu>o%+AKkYyWDymQ5xaxe?!xjaucEf?_`1(oB4gQqP+! zKbHd4D7xryn!^P-3qSI%N2gL&;x$9p1Kp7xNL~^6_O|DMfs)0#@t%M4b8WlHRjdqF zI!2Xsn<9hMXi@eeQ~JyU!oNl@K}D7q1+s4jEf_ptrk^1Hx}~>@aNZLtCO{tP#&p&& z_uYN-DAt;vgzQ(+uBpRquEK9!?6Z~D2B4!LLx=r&pREl*V(naJT zuC-St8j{&Ar{vG|BQRNPrz2;X!>c&4qQ}8+d-)lSJYapg9;K}fXZ{|MsxIxbz~c7@ z`J-Mr)zRqYNl68}(6B(m3$fs(Rr5`@4~*=S9G7mMSq9?pA0PFG)LgLd2EWe&KozEC zjn3eiW4e5+`I+j7h)>OI3P#@-N3BC>*y(W$90{@yC#R)~3PMYgrESV3WT8BI=-=f= z$Wi*&#@+#5w4`JF@4}cu(;j__B00WO7IDVZ-EFsNFjjzUNQl(HG`L_rG4~r2TR&ug z+sL0cMNhe==~sEdbhE(@xgEH1P`qrlbfC}A+$4+R(6+l)rc#A*LawE(i+}aLgfHDh zYlS%D(r?NzQES&fP};23C4RjfoSb>IG%yJb^4{tR1(tVW+AvlPdum_m);BQ4@w$|Xgz5(*yW@aBfQ9=kS0HN{E-c)Ug$%LkE}>qN%;s1>tPYslbD*uaqkx*XeTpAY#a) zg&N_&jp{m6j?M8QX)k89+TYNya5 zV+lHY`?HihnNWeGb_1}xy5muM>%h%d3(a-)_xHRo6pE!=w4x(;JMju}{|%JTM!35A z3We7hH|hamia{g$?K_^m8h?s&CZy5FHKef;wwy1hk8ndX{Td&Tm@ad{&B5v=`@Q2; z);O$DS!5h5LJu9>Dbo`cqn+sXg9g@(4Z~6eRsua*E*(L5L?go&40Gn-$ltM@z6*{b zfr16rk`q)2C_>h^>?6c9EB7!Ps?;>&u#Iv*9fZZB=hP#xPel|;0r{hbvCqJD*-od& z69q4-`I^{q2mMrJjYx5ZlH(>emWgl?=^eCm9uj@OMM4I&4*Lj;c_a9=?Z#g2 zr>a>w?i3IjNT}z06LJHg)x+Im4A;UhsnE!Ln#$6}#TtLr+E&IO@ehZnV+|3M9V-5- zGO8C1TIeuz-Z`Yxvw|oPLDU-oFWZ3n!gYBnD==Y9@t1HX3%BF%*RP|1&(E*3fX~mw zOq*y*zUbg;_7X_j;=PM&JXfxoYu=yv%>mC`Z7Cr8v9k?7s>uvEzwhkyPu2ADYO(Qp z)XL7c*`H6VmtCJ;ulJJ%pyy}O&-d!Cx82v~hjSLt+hjH9)8y^6dbPRh%|RFReqQ}~ z4{F~0d^&&Z`h0$09Rl4sbiKW;GQMQzpFRB}-TnN0+uuFR{&@a3Df0dh0$^-v!kjLb zY6jf~9F6DwURpPP4|wNn2L(?dl1J6WpuHIVA!BTp}?3nq*jX(+ol!L0>%bW%`l9HMCu}DFO5r6+YzgIT@s&C|8;`@!+!hKXvJ*tsc?4@xgrxn9B?eGmq0_NfiA2sNm zFz7u@3DXJTv@n|OjDBHie|n%gd!x!|bO_-~FRZ(l$SOzN>Nc?H$jIypu79XRGpiqK z^gAkpa(s;~K8E4FTGZ&w-~chSFEJ`-CgO(kJ5-*F{hG;aO0C95uuV#6uf`D?F1v@( zy=1VS@Tsf;)Ze*GIf1;P+cV9yHv3nY3beiIlI*da(?dvadz*gV0>GN{Z<7}$Vb*Y! zJTy9~|NYh2uIspZbkH*Qs8*u@ z{N(V*d$Oi44xeGuueI=`ro1MKx7k?>z-E_`YCSxc-jCeB_=~?c8hlZLIl0FIV1HyDq?bCmc;G{V~JUEF#Ew@C+FO^7>bo-noPtHlqAy~os( zNip3qOPIyKQlY!X)MY+>^Mo$%~skE)q zlHEM3zpM}3LX2^*atO&W-60}0q_v7?AZm|$y-R1< zg5>DFC~w%jNvTvxNTas(ce!c_$!2qb8`IFy0GU`<7xX<{O0^cUP0A}x3 zqjg%OI0C3hDCku&8qr>=7~4;61Jj?pAUh`F5m4!}SUd~P28`DiAlOyaUoCALKek$O zDwpV7T+xnst?J`PiqPQayiPBd&U3QVcmnQkEdG}6zR2MaF8jmJ1<&Nju2_NnkriSv zh8ZkBbK(Ldaa_W$mPp%z-jvZb8F|FSU8y}MwQoFEQ^_kq< z<(~jh8m%ObPk41I%PH%HGn7%4;*0fHE`RoV!PXL+?2Riw5Hg7H?XhPvL$YIx7Ws&3 z(zz_#X#)^4&cK=wTqb%40rE>Au!S})$f!ZM@;kBE^7>US?2R?iC_pn?Fz)yo+!;Y; zK?b8(GlIlKZ_#vS*B<{Ni_sy=Hl;B-+`@boFDemv#iZ>)%w88bN5w~dI$o~ z86V(QN6q14-S9NpI^5i(Sv)A+tZaYl0I@fX-T%If;*)t!iQ;H%PRdIFQUkIS2So#1r`~-(0e3_YPY-@GNcc4_Bf*d1a`qeUbU8VL7WPy z1$d**cu_JM(teuv?EZdTK**v6`!U0BbSn`;Zn3TTq2qb~0r4(rTBj|lls+!38;t=tanr;uu#`L<-9C7^*(I%9YY_Go&D z!ISlLeY(%C5P8`hdCsV*fp(LWl}Pb5o3vIo`|S(^w+A-n;OMkT*6c8Zx1fTRz2%Xgzx+`0a$z7YVmbl`i`>Vg-_ro})Cc`ApuuV&Px{Un8k zGmqAu%E$SW?(?y#8x8J?u)Na>j?J@Q8FC-h*FXMO(@K+36TADL1iiAmn*86d(X<=@PTI#)c2*l*i5Nn0#67Qczr#{eW&pNr?9M16*AWce6H!gnLKJ*}Z0GwPP zb@d`ht)zB*CWdX7SsZPFjboY?L5GRpSGTlgLkxo5MWMk!kBj6y96=X0ECdHB+*Yv4 z>W>iB$C+w~9%5B|*F`Jh|BW~NpbuUZ?oO3K2yWXT$#Nuuo1pe3dzwBQKaWAcY}S5} zb`VDE2GvdA3t?Oe6l##dS<8DDh|fxNZM%^P^0`j_9Gg=qM}=xE3Q#L)_0=*KI&vfK z{ULOTZ3EB=bBjN-CB-)0kQE`d7Q!Q7XG{9o<}I!5bjfixE-;|w-xPy@eOYM0Z-?K= z;IY=<>0NAQB!~jy~;mZ^Yu2 z7j$ctEI>n!$Y{z~OxLG$Xh6*<^5y53DUdcIzx5li*r^163}ol@@YYJJ)^`6ZublnJ z1)?SgcXhu9ndk!~gpMlFMO*AyfsqN2yjCG(1^LiWsAqj+#W5YB*^C+J~i|EC5< z&&jDkpNV6hzZPrWW8aS}1RzwX|Da@9w2qKagPtk)7pu@0S9BtTTpWJ7FFjDdE-CMB zndFDG%;ZR5r6*Egb>T~$MVX)@tz^ma4)PguHIQFgAH-Q=;xA&D9IcO2{@RwSzhejm z7x)(3n0>6}b>e6h1CO0GP>uuPaXbLi;+@K0D*U%%UWQ)8``E(yU&mf`3)22+e;+ax zmLCqb`d^z4E7-&(bao+Gw5auWrk98}IO=6JnT`uDY(eBA$#gWhh`?Hb?tu>dP0%mj zHI5oY;4e>ZBZbVY$5Qw*VP)3gV*paUgqev~oOZz2@miqoE`P;5@8RYNu z^#y!Rfrr9h-&+(Ij-k0qo-6#)FhFZeq);9~`d7BkO7V!+Q!n8egMYMXYKk5s zj;gM1AHo9WCiC)Lj|O){)l^*|k%yw@=mq)&Yye~KnlSQKZ3yq#g@1?C9g_pl*93ke z)krgh&r*s1>Q>z2gwy8WY^MH7Yw1uSISdy=JZ_e3_yQx>_%icX$6q~WCJ^A8R>`NN zLJ(Y=z&75)wN_}Rx!9oA8qVX^vkM3^+uMlsR$uq3E7OUF{PY#EL?HWza)yyrSX z4)xuP?}An;%R91|YxiJImmpVb7KLO5{o<)f+2ZiFJIZs&Vh(So)&|HT9L1>_UNrUl z-{d|hf{y(4xW%$#2*;URj%m$_MD;Vm{};N?Qon?VX8Rp9kW~#UUD1-cO#_N-`@Q_?#kCFYW*x!T!EaiZ-E&FhW7LY(9hTy*-d8e#LX;>BExLL!ci=RKvI%XRt ze_D)wVr3j;l6fqn7>f&AWDY}frMQ8xrLSz^RaKCzl^(^N+Wcxs4%92n0b@ zn*$^E)y`yNVF4b1V&9fW(T-3uyoGca)o&U<;oY*4U@qc0Ab(5r{HFTkz15Uo`E3(i z`lgC!nuKy68J-M-pS$I)U*kT>UOC&uVrNXwfyHZ^%I=6)suh|ul`#sLO4rS3Qd)h_1zeH?+_6mP>_TsRJ(kaTC z=Y63&4EjE;e2d6VmEq|9FZ`&uFiv-R73bjMdwiUf04buA3#6VgT^yfUC@4_t>FG+!&dY9G{b~+0^ zW_!Rx*@|&3K}mN+XB(%P3~DDixGu@h6xhtKN_hSV>sQgi6qTe48>oVBeJwC0JaA&H zaWOzobw6kvZa0vzfe2%Su3bXDFC)BRleM7u?cQk+W}#aZ@248HqJoAv30$`uGa`9J zJU4YGRg~ALj;d8DBD9thW8^(?b5^rU8LFL{7>b|&rzInp!mt^xD7MM&nQ=&B%ZO<;57=!wRdlnvF*(4TqQ!#wf@sQ%_~G- z^cq}DkVM+-wfSA?`8v8*f-h9j5Zw>I_w1iW*yd5sYgPK8T1T-hq>r0WNteRNmy+SM z*Ck51daxB$e}`0tuJ z@S=S5VTjA%f0#*~s2IT2+N{J~qWBlmqg%hIj;e?;Ce;oJyyxZ4)9Mx)*pLd(3g7=t zObhK*+u~qHV>~YD54f zQSDR&V_84{155JjoBK?v$H$qmu(m`K3%mi>k?L2I&{**H;nArkIB{G~i@D8_6f7(N z&662px7dzoS8wVUyRE&j&i0?fL3_GO6c$9!=NMv31_~_N7jjkX{_I{#H$i-}rk39* z%9wve<>?1i2mW+KU;Pn(MPh^eZTtPg*7eU35rLK%WsWgT$cka-F}p1i#fk-`GRCyE z+Vl)6jegiG52De=dy`(-WVE1cnKm+kri8V`t!V!`ZePE?Lu=G87{X#6jiMHHqZHi@ zPVKkq#naqGE=nC&Xz~^iyWPD+IW^%F)kcV+##TLuYB<+w+Xv=CQ>eu6NVZ@2F{-t9=TO*WgpB}0R)Y(RmC<>j!7~!QEAFGEaBvFVEZ}^ocxPwYEGAz zhmhxth8(ee|Cq-6j>B_VWz@JK8=>KSJT!$00e*O#4%cuIFvO}jq!hyTiq!?&XLHCJ zVMv@utiVEY?i6F~cB|wI41WX_wc$=a zlfnJEFPan$kIVftA7prTQTNw7Poik7>M^4wbmy2u$=D!FTS`GUPj5|VTKH^tTT(zM zB-P#A$wp(1-A%)JSfUN>$6Q&0q|bEa2%f^VQ{Bq5;n^iK>4>+01X|6Vt^fC+?O+#! z$LGBF#jI7>^}d*8_=jIug|PIX*JY>7dsrcVNc~5Iv4)sX%(Fm4Er+~n&Z@tfK(Jn| zo_cVfX~to<4;?(Db01a}ho&)RI%l^qb2ne#$GjHmK^hX+zI>BruE9&@@6Ty{wg{#j zih+r%2!Z4-ZFYTM6S&;W4MKd)$@2;`N+PNhjC=`uh7){}o0EaKtYJ^kc$Y4*3y%$a zmM{m^_s|RtETp>L@(r@n@TkSNwrxbk=s*kn6uL2WJo6T0TqF+GCNG}nTdgh{cKzE+ z?)v=4cD=;0-u)2}b4zw(JaY5Wv7KKf53vGOQK+dV7Lw|0n&3~)j$h_YzMOa5 z3joJkc$JB6D&=aF=}I!39%3F8K_AZk3Ad=N<$Ps~*AukYh(Iqd>xzR73q5Y0Y~FYj z+G{@bzZs_TpwfG;>6Yi71wY1X&DpzgwM`(%JWoRt4dLqr=Ab&gE^?*AIqMA4@;~kAv-@l;E>hg$ zJmYBW5$0+}Aok~U+v0S5wAy-K)aM_6sTUlc+o0$DE%$}CEEi*8K-c8H8yk4T0l~U# zn8Sz1)OKuX{XxjS;E!-ifCiH@BVrNog;9g?9tyVoP z4kOfzkg7CJg+!B0My6#m7^$YpJ(`Z=e7n*6ZknC5qi{&;28fmH6r1n2s%7!DuyCMp zj7^5tpRI%P0Uxj;CCwfyy-Ea~m7VmzPY;c-1YI~NgrMONyALZIL0v+5@M>|^C5%(C zsX_@9+v_2$z&6v+tr4>fVdzc-1qy9qUgRWqXQS6@A#I)g!HWnBul;yEtzuivEzaYa zOyeHEcG+AWW+=r>=4mFg9yyZ7(?RGfOO5T)I*&9@{_?~loEyNd;i`N{`*X!(7XR6h zEPhp?G^l)8qlNNwo_w-U!d)=bQ2nwlWc?AmpWkkO#vOMC5YU&jm*L#~B#x}cp@*r< zOO+mfrWwk(n729EN_&BG*(aRQtX=(FweS(Ob_|=DH{~wzThF7_=zbXw!a_n*i@5bVH(`8%X?3iGK!K zvFhzH{$x>q1uesa0IHP6s?RFYq0Efy7w5IDI9;iqTZy|A6LKI@#vow7+iGXILCCEM zp)UyPKzC)Q-2VN$ET+c@RnKe^GdiVOTVB$j-`!T7cb{+;ywRb(xkp(DzDlfgVFPL5 z3P|(H-`Rq$e()%O^h{72)T+xc;^#K(Cne<1v@`N3T6doae8&n0a!6o z!8T>B3j?>d9Rt_%ZYn)KE|TE4qtk=_z!Es?i%o*X1WGG}7~w((G1mQ68n?) 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 391/660] [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 392/660] [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 393/660] 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 394/660] [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 395/660] [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 396/660] [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 397/660] [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 398/660] [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 399/660] [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 400/660] [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 401/660] [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 402/660] [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 403/660] [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 404/660] 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 405/660] [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 406/660] 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 407/660] [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 408/660] [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 409/660] [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 410/660] [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 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 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 411/660] 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 412/660] [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 413/660] [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 zcmZ8mRZtw-vPB0QT!I7}+=9CY8=N4626uM|k_qlQK!Otj1b25QXbA4^PJl23!n~YQ zuimZu_Q$SW)vNc%s;;iptAF?|`_$@Up!W?ADxGbP+4$VAKh*41EiQXq@r}K zIUzT;966fB)HC=+gV4k$d8)=dGjLG3h|5QFajvbT_E^(jPkkVDbE-3b5~yky6y-W_pkB zkf}pDqgo;R0HaE+M8!H?_t<7waGZ#wU;Avi19w@dA>*U@UG$~Gx6GWe2Sp>KipFqZ+5HXr&|{ zb}Q%;JpQmkG!LVjI@#Xl5l6b-uHl{i9w_;-3{C&>(ys_@Y%n6NuZcK2f^Vw^C5umDcXh-d( z3%9gvmb!xScLJ#D^i7Z=Se}fIoWPlOfM>|dInY`nOWi}h z|G1H5@2RiUjkdQkzp7pH!DTW#(xLV7Pjw6*PioyYXpuswFlXCbWt=3{xkQSZ-nVNy zs81}o%3IpFYEOpX@j}3xVbk{`gXN!*rL!OFip=zk{2qmfy+Wqv5 zG-4GNhFWEpjOs1ZNznQrMN-|lHw0JchNw<ZB2DhCD|$b^#;Xz8B}m9Gvoc`%z3j+D7*yuDi&_x(`(+URpSrf*KB+cVTTi3Y!( zQG8mll)c!ZLk>&VWWUg;_;%!8p+YmJu5!$D+eHK{Z=;C!kQcc#%OslS{ zijp;lQ!?_q=*dNxVHYzsz{~YR$^>iISVsAv(PFu#beX00a^xq0NH{Ql3^OO-c~8Ioy9bAOI3zOHoeCZqE5*#F_Nwv-ci|6RrC&%J z)c1HBvd0#D?gt2SwaaK?esen=OIvT~#Fsf(b=*k%i}}V`N*w?__D{oEvp9^kXVn(N zin@sk2kfRu%SfZ2P0r^SGzWzcwW4zpY41!OYL_M81oao=ft(=7qTO??<5I)rzd1;J z0X8w{)4aQovn`4N?RMP-_T%nHDsvBL+4Kp%u4x$e{-Edqq7Szy#FkKnx2FqLSm~ip z0deNabUa5JIVXQS!rS4Iwlx>oKoVHE5aZNm;=9TRZ@co* znETp`(R+4iILtY*D6gGb5swnZzsC+RGfVcX>MJXbfjJ$fkDF+}d(87`#ri;Zs8>roNfAo| z2rcEWWC8H@ex?JU+re=1+$FbciUX>(t@FA5Dl(3P8jJt_EYS~WJ~u(J{(K3>>Euo6 zZ|R;DGa5AX@UpsW4jTZz|v87Gw`3?c=TUW&6xFNC_(BSSc5?5Ra9s z@x+Z|G28;sW>_$6$fm>S$8COXs(k6df0x_fy3khocbrySHK>@n|a!oCeo{#y!81%FD0G%}!VN^LhQmD{AcU zAw4EJoPB4(%{CPSTx^Vee!)aWCy;|sSW~4PyAvN&uZC8Id_G|`7UqEgJAk|_)jvrn z1GBqYSKHXK6AO#LJ`R_HL|8e%qv^KaS=%XzM+Xxo2G@MjzqXyOs4*yKcL`G~x8b@u zx6O76p7T7ANly+i>zJK#KZfsITlxEH%My?FQUF&?=j6!%gZH|;2WZ_y^uyuDlbCDOc=D8)$=&gW;DC3SbW3M=H{SjHY&9Dv75X;^W(sdWs zMIp3e`cMIWfAHG!>rjH?gk96T6h4L>?Xu#Y9AMyNY3Ia1<|N%RG>hH-(55twEY7{e z&COR~PGMXRJ~+{;l4lgV1X#&5oQ%#yKI!z~1<4zcfdKpqI9U5*x)P&x_5!<~47;IS zpA-hcUia2*fEFLpJIlzu~O~D%sI2F`BgD$Li^?`|6Q?l5H zDPfUegqo>UQ6g*|ahNH<_wTj#C83|Uum|*PZUx=ci22;P zyyWA(D=d@6A8}OnLQ@1vbKdaU9&s9mu2P+{X*g8Im8Jq0!eA7XQRpm3Te>foS3fwW zeWjEC5fCpd#Q-W^)p$_oiz&2^P9QEVEfXQ)u>G_Dig&z42l*I8$rP3pIs)a}d0od4 zp)FC-rfe4rINBNF0BMPlu}Ux-%9*g5P?ccU>^ywP*j|Z)$me=jYP>RFXCt4NWe4jg zw`GyHhcVcF(3oQW8W#-%MutJ^mbuEz^$2po=qK@^^?ug@1VRf;FSwlv4QD9o(cEfC z<5f0WaZAbh9TjuYlKxWR4{b>R{VpQND zT$dM+VEIb0tRw&i&<>3eU>JO3e{WscO4`tVYB<7PC>8*re#rp=KzBkF+D2L|ei?Xh z*xK0Rxz$C36E|4nraSA$sI&xMy?1UiNU)6Ej?hNkUB5hH*kK4u0(|lK^m=?dlK0ZA zJ}d>365peFIaof@`if9?0fU-wjfYv*w-+rTO62ies!)~>9!(dAErx+Vh%~c;T;{aG$c`-Z%`MS3!4GbVAOZ!soh|0hc3z5l z)D?OXjI4q`DMJKr_$Y#UzY~cI;0h-zPhZLS)u?FRvfeRU%8vt0z@OiY5mdr8|F*AW z8|?K-Ry;;ok400c8c_-#s=jVCt=v?pbvYF*-=jqSE^SBFC8^7X8Ds;HI;9T<_PL>! zoRmOa>476plQPK4kQZ(Sinrsvq@*7DZdHVOYLbV%M#VJEG&N+=i8$Ec$(AYQGb{NP zYo46jEgK!2FjbWy1Jru*bk@EvoT$6hHVK6Le_25@)bsZ5GWNL$0SX7=~GzRic*O?x-#9P=ohruAKXu2=#I!qT7lN>)7ROb{8jppVU%* z&rL2)qK0GN56O8_9lqh`lqkaV%&|<9Vfd-~Njz^kFhz7*Wrn=QAp)wInnYVTRw>%m zT|7tkAz3fpErIQ8wXsc$Zt@8@UAI5`wSz2B?QW(@MP1o+Sv|BPYfRTOiL6m5i6 z;-?+_u`C#!@B+g0<_>k87>|s$LphDDT7Zv0Osl#M46^UoiFa?Fo_NI(Z636qh3aHq zxL!pJY-~|n{As@|A#u1_(0q31Nw_O;mzBSN{X9Ua$?hKE(M<{!s-+C2kD)`wo#%_d zIvEx|B_c`F;;bT?Y?rPyb*%ptR@>6&f~Qs(F(XQH$Xq1!SIWeQZ~@_^%Rd*S64YH|&p zq>SR$!z2M?P<&|IiDevO&6O4|sqWZ8l~TXwl>PgyHZ8D1L2BQb4c%oMhIvwyyOQW= zU^~tc*3wuN+wN}~yY*peskckzQ$@OgR<02BZ!Hwb!8QE8&o+TRc%5oau%YCZuAL>0 z1ea8XRXxif8@=6W%MN*kIMUt7QI;_jo|^!DdwN~8iO*0;!Qx-FJ7{P$93108OS^Eeh!)S(B$MVn|Qz7?*eul$V0PLzxyxJ9q24OsmxYr zj*}{r8-+fS24!!>K(dD5hYx4|eA1ezc4w2rQ|>Zyc0^ML8X^+elZVHHIGqh(kOU$~}@y1}%7 zq*y9(Z#x3fk&w7xW(=Ir63p1w5c6?fP;UmVs>?J(llV;icB*lzlM+Ho?xOl-id-3s zY!1euB(2}?Yhx}YZu83N6UU&33rh(Uy(8_?^?7*B9rdG?M15jKs%q7iV<(3Av&iGa z*Rm$p@cJ>+1dhWjX%=E*T`jLi4dH_1`uUOrJVe&|pb)^{fddJuKR)XA;sq_U;0s3y zcJGR{dHA29eg8T3Ycrgii@l!%kJrwQL(V6*UZYjH8f(sC*BI;DsI4j=VJu&=NBO_~ zNL?hjsZ6t{bdU4=Y=Vw3kzU)x%5?Y1>U?@##c>p2`L>gD_lsS%Z;TMmtAl|rQ4p~o z;H!gB50tYP+vOvZ&>k(uGrVplyGhwskmo_%O^OX&UJHy15*PF_ixPUQN-Z)j6Jo^z zMd-^l=0TOYPpunQD5^1Hk*8ItuyDiJ+*o`j=k?cbeiv)i7G7?d>ZmVS7o>E8iJ~^R z9P^k-zPq(X;P+shjFHs&;OtlV6Gb@T7T@t_ygxa@=1-D*0p&O?geGCT)!KB=>=73^ zj|s2ETB5I!C>M8P8vmTiRQa@P3>-An zncWl>Ci+Y@rFjR{C0sT#W8;&~hQDI4dl@)iVy$o(1i#y8&`8_9wa(SYQayV*o^GAH zq*S`|g$|1uLkmRts8yvDM;*5Q6s0=o$GnZ;(re>Ba!NH^1*aTgzwroS=&QdPz)nuR zMj6p?z3_LnOso3y@Uj?-(&r`IYQsE6Xb|}Kfyvh zqjx7WsqdgK!eQs`d*J<$uyWink8WDAw(3bAn#O{+165`?u|+WZ*m>ttzv`FGWfW-4 z8bQJvt7PQ+al^Z(0uKqAQ(7viJXUn^v>@PpA7HSMF5#6Gfm%-lfS9#U;24**ICI1g ziF-N;n*3}|%+y2;6eLH6gl7(oNl|n5G+HrjRH$4@k&1N0sUAUwf9&bm6g?JSWL;MNb(2 zKA%n`k>h^L$+FmiSm64DP$&hLt5VM#GWTi<6yk~Cko@`dtkX(mRj&D2TGRE+&$i&< zK_(=W3Hz11#GndpcqvTeOjOD1G13SxZ2NT9`qYI{HV}(QyQgE;L>DmfQ)ew|1fSTF zGU_JBHqChEYL)h|NC*w|NH44F3b5DF;i0fO6w@m0#4n04vN!{?t~M0KxXm;lf7Y3R z;uIgfUOE-?$VRT%$6>53)-3!!@Q&$--;h?0IS`joQ*-=d*lb5`_~FJ>`fhbo(yA5~ zVni~2#R%iV33!hql_uw@5neQq<1`Rg6U{*5t$a5n(RKwI%J;9>+6yIwI-T4|r^63fw?c3VMTQ5pYTAhL1MO(jv?xn07 zWQhZK$Kz6JTDv2RqRsP>1jt|+z()XvryXCDrhlqJ%0#(KPS4^-)lb3ko+DHf4=g;8QE98sJdPgX$ecJhVONF6Mozd zj?`v{-D7mG9JAqBSD(YQXZQE9;yyi*)njhfUIa?Ka2g7Fn0iq@?=o{XU?kn`6Phn> zw~73(u}8sHfsF2Xilwv(8)avKzF0!gT{TMbfSBIUDxSS&X6lvE;mkU-NQ#$N8dNEg znW;)BM06GH>Pg|pZ4|L|Wo~D`>wNak89vJ9fjBk+;MgJHQjL3U$;!S>KQ2yLYifN- z+9o0=cOtT&m8a|NmFveh^4-SEg5){b`X0_5vTAFl$A+v3o0`eNT&N%vzb-dntBX3^ zeU_XBbN_m<7$pg_qU=$cj#wB$W4m}I)-ld;GYDD9Nw0ExPSe_>@~Q&y*A zi0-W{6s@#Ruvp#;Pt$`!N?PGqpdl7$t1;7|p$JZ)>B_skuiQ0bif4-j!xbfTbe=2M zKiDtJH2;rPya&99PpzX?Ch9D9I3s;m(k0~gjK1W z{aVd%AWMSYKl=&o`e4Oz*Ol6D2PMs)dYP~1$L*+_Ms0M$S!5nmJkP%`B+_wS_3+$K zU@>pZDf$Ir_DF%YBn`987Y*7pW7HkwDdhK+(hn)7K-si(he;miilRsgc5=>!mwlCN zsyX|uHkjOz(Gy$dRTd_S?H#S97OCNry>eFwoB zrtp!}^Z1eIGy5=@zKh2V(@W(0WLu;MW`FITU8wH`oLw#JkToGY z9%B3v3W;tzSxv z!ET#d6G|A~LzA6x!cU)V_K(tNSma_rMn4Q0C)R90ykbFyY7WqmL~N=*;p1L%MQF67 zG^@^?jWRJ$*$2tBu9im#^`8B@EIx;H48n)I4zD~eaF2Hi#u#@!=PPFpiND+R2NFv+-no>u72sp$gp)bzqU(3g5)jW&f-(^G9(7S2O>BrPd^ z_S~-QUs`XV#mhTcaopYLYP)bU4tEpJ5f2>TX-KpNmTqeoMvPA%Dz_ji$8ZKaasFzXG?0yl1E6LSWx-Jz#$9V+ z0Y}^ZNs@#EB?GipsBr@$Htk2Nj34&hu#^3iY7k04V1?OVqCNnF_!ho zHi*{{@V_gq6=7{;1{jwJ7uA2Z1xQHbf2XJa90<%uL;(f<0@f+QMD_oNtpC9LU{4}+ zFaJ*=k|H6I{3rPLwFiQUh{~X(u)+dFHBlV^-Gy 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 414/660] [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 415/660] [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 416/660] [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 417/660] [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 418/660] [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 419/660] [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 420/660] [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 421/660] [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 422/660] [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 423/660] [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 424/660] [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 425/660] [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 426/660] 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 427/660] [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 428/660] [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 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 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 429/660] 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 430/660] [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 431/660] [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 432/660] [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 433/660] [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 434/660] [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 435/660] 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 436/660] [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 437/660] [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 438/660] [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 439/660] [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 440/660] [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 441/660] 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 442/660] [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 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 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 443/660] [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 zcmZ8m1yGzzmmM4i2{yP(a0vv0yM*8pG`PD2x4{|Q-5r8E1ot68fS|$M-JRusyS1-& zzpnbKyYK0)meZ&1?S_JLd}`E?5PE;G6qhGxA(4P}?K9YMeR3LJ{hkzRQQo64mWe?d zJ};_O>ON|=uE8_;#o1!#|9JJ8D=a*`P;rTXM4b-oWhA4+1q zKr34dyw7-C{;T^393z)Y3^TN|n=|*uzGsJ7ay*Mk8+ky&ebLl?x@2 zVD8tyUTciSO}3k6byk24<-}eRPo*t2t%ikZmD(Zfr4wWqJ_JQ%aDd@Cl58#?=hrYf z8J4*n*xU~4ea=^u8)OfhfD-}4Q*ofcfLkwk=dAxrFu4gRyQWuzJ>ZovO2qQI5nJ?3 z2qLApRFU4aV_#wL=i29UI?uq@aG73So7CwBGLKkKw zPMzu)-9%MYN%OTw073uE%xW#2bRGKR9tvom!-1+-v+5+~i**5syMEECUoZM145b5@ zA6zyE(xfQ}J?SF+T=tl`I-PIX;=glR#63EZ%~+>C%}6)PWZ#ln%Mr-DSUEnF zY5=zBTFbgGmha-P#1@H#cNZF*>K+)uatTDi%!H?2)rBwXD%>>vDffW(7lnZCIffU| zC}Ht2QhlV(;MWpkvaKP->(*hAC4E_ecsKqMk)~H)*VI)vJ8;}zgNDPP96N&)< zeAi2`L8AaKMlY~qhMY28lQOT0fBx)8(aV@Qo#a`2aN}T`iK5x>XqBN_-swe$QKP1Y zTq!{?l=hlIIPQMs9E_z%NhnOe|^O0ga9exgvj41sYVgJ!j8sll($- z!%}j?QUQDtvv7Ob#3p|W`qY7^F>SRSxr8UIOcT%gO6_mMKrC5hWG`o>FEr#r)nAJK z)^-1U=L_ZGwRl3fa~?NbdXcALXi=BiZi+Ig9=>mSnvW11WGh^JAn(1)D>0-yKJ^TR)5y&eO{?@O15G8Hr*NHlxQO;Fsa}PvtKqcreDa;-(Qps32Cv4_} zRA{1X-Dw-9WW{`)F^3-GhQq=+J5Cce8zHfQ_fjT`>ePo9dURnTbXwKBa-C&bG+kV| zuJm^i|0wMmMjqr;1$jo@d!@iu&FvcDo%FU_#EbrJ3VzPN$q}iTbs03|?+>h?b4(>Q zH{j8Osi-)P4lai!yi+XfE{}XpI9fZ>GjWY7*W(ZGUCAX^?rlc2ew_3^JFH+8J4(U< z=Re0dpbWAq47ni%c<>=FaKd}M3;!TYC*?)kiBsu@ohyh!H7!I?3C1oE3~S>Nx*f>o zKk5Pi0I#qA{1U${MlW%rJtr9m=kj0pgvo#}3#g|Ja?N552LDCkklO%28i9(jLx_@S zd3pBc(ECa&o8w)O+z`~Le+Y1neuzn@NZ0T7S?BURRkU^I5GNl?BYb3dztbOUHUIZJ z>D>Q8fFLw4K^FaPVB$l^51eGk`!SZika3s|;#o?CYy}7trpyz{B;=Gkg-0x11PWpM z$Fibr=*n3@(^d*o!BPi-+!;tw^XS7(b61F0Ho|hLH{h2~X7P81n97YFF9Nv|G_n_5sGsyDp4vWKf}{=$tBjWD_8jaKh7z}Es4r;lAA&OC zXqd9LcC45xWw1|hwVX=SEy66~wj!|Xq>?L~1MbV1{=0hUY~6=2j&^vCb}5osYoEpq z(*E(!dQsHna{$`K;J2uSbpsfBD!P4l0 z+-6ZMEx6>v)K4YW9U8*EQD`04h`>x1qf-M#-Fjyf;fy5BTW3PnV}YZ6HN7>kHtLN- z^ThmRKiz|W8YiA@X-Q-{ck)oy$Id`;KTu`WsefX$RHF+_t%=#lJ>Kjgs=FyA{RCBE!N z;Bt&arY6o3Ntry)g)484y~H=kg7I6888PNx{vtQ~NX%f)YpK++#SQGiw`KsbD;w06 zNQbvkbly{vfH2=l&-zPAyk2#_P}a+>QaG{_y-{-7(9CaX@Qv~Z@}|`sp^cga zl-LEA*_vX)iPpnA62 zZXem4w~ioLoP8kMDwH`%&_o3YxxNFWBncptcyx1%prjy{qf-&topF(*jW3GCX{+>u zq{lYYb6NuRz{9oIgT5{hC=aYxAeremB2yqwR}Ja7wa=fs!Mmy@b?grtc|2Bw@Lg&6 z%8qcqKDJ9Ki+IbYSf;~T&0byf>ra6&>4^}Gmx~FgoLB?L;pJf(xA+-$fyLWZ$O7|a zDMmIWtoHHrsSTPqg84g$!kp4(A133ttyt0wv?Fp9z=AKOgT|f)yG(2!R6xcO6Q*Zc zyZEt-_XvF(JIr%;uvWdgJ{t}i?6ckE)ah@_-+KBhdh9{cM8$4EmGfc*rxWmtBndVk zT7&)lJ*0}*M_1acwKs}m9yBqTW$m*e>4{D=PD4fn{iP6vr7LY<9yZc>m)r8|NUf)V z1z9=^3@TXptlmJpgg3onv^*HS*ETulW`ZXegPyxr6|ppoEA2U2K3L3FgU~Rismw-o zDy6>?ci(`5i{gr6vWnfk!)>btXv(6KG8G*TA2%+HN9No|u#a7)tzAJw7MD?!p|JXgP)WM>ac<_0u% zCmhKJ=9nv_g_wFHx_iZ8*DTF_tH`h`-r9+;P`ODr>US1ZT~s$l{gEs^@qL_5PfZU> z3L(?y=k_40(N&I-tH>L?%~;cLi%+m#=($^)xiGG1I>4>4yL2YWjtXu7S#5wX6ULnm zII>4j5}w4r15XK_qyez=o6qAa_RxeIz~_g$Gt;BIxC6-m>wqR56RJ0%%m~b98YTqZ z`q%xXZ~)SeZGWCKeyYSZHCJRTs7egJ9WOAgJkpc0KDyIL@}bF%FkkHMrdd%s{`ak4cGiY2pkO_Z(72Ku z>W7$ajOU|6iB}MsPD&wsRqD?;)h|8OaP+Ark$1fL_sB%t8@}=Y676|u~J!~ zg;-OimM^p}5<6p^qtusLsZ0d3Qy0utMi_rekKaToo~xaD!S1G!G)+;4X+a^o6C^C} zSuDhhNEGiXc$poI{PQoqGuT9kHp)}(pmn2oJ2KjkSVNWzXJWp86bnn*!2U}CBq3Dc z-i2dYR9g7CR2VO}Xln~b%>z9n5}&D5(q!pqgoh(SFBDHHQLnylUYM`acN$NGFjQkN z9BCGIR>~~;O^v*a0l_2i1@Bp(2mh3*qa5gE(tPBZhJVu(b; z(uOrJN6v%>MMUHys9;iqWUX2QS81fn19g`?&Lx8F5b8ZhPI*znJ9|(JBpIj`BQjl{ zA-I&4n8lh;yZ#GK5lBxi`3+KIQ?VMLaIEyBmYQZ-eLuZO?iaC_#ji=00qKSV9~zL}N3@zV(}{OF6wEexeDrX&3r$ z$-n5paJktWByh)zRx_FZaNsWTNJp1%lfczQ%=x3?R*R?yP za0hHn^xn1#%QB_M{5aP?mlRlvzH(7QH5*=rEzOYR*8$|fD67UYd=st{bNzfr&oW0~ zDdEet%qHqfC^Qg)NzQ(A__Uvg$;2~8f5VcCnbrDMo_hJXE99KC!Iy^<5Czz-tTq-KM9wdez4 zRmw%jV=+^Sg(U?;r0jo@gQ1PQ>`u+p{qO)vXMfkhBMs%k4AON?{b50@nm;lFwfvQF?jnRIy!iIZNA>LRN= z-WZ0)zn8@v=7pSV1^J6v&s(MPDeOr4o{&d*FSd^SqdmC{)>FoyDh2iY9r1Dv#IsmBg>K%EYDBnC&@b4#~* z#YJ$G&3brF7zOa8=6Ma{X}6?($CI|dBhGjrM%$YZ9HZsc5mWiynPXOJGF16-*@#+F zHYhtCY5=jI3pKGP08O!YhU(lq))n1u7KAM5IYsS^an1HqwN#IDuGWN|R_DI5L5nKk z=;@60sTFJ#xq!bG;xTSVmvZn>oylIsw80DCV}l&$s;`uZkd$*T?>fG|nAmLslzpq$ zBT&0Ut1bLr+I3$WmX_2lTOe~04zBWb4r!I247uC1?73$+6gD%u-rMKnw?me2FcMkP zDnACgB@kti4zFg}BBaX+_{_13c>VH8`@Pw$g&jKMk{MLbs}~e;?}DeU6>qmwf6ZvC zZi;jAH<+!2=L_~LV*OTqQr;41R`ualm5BzWSl^L~&y0$%D`un%CP4%V7g#z{L$i+n z0F>Y-2+h(Q?Up1y5`b}*7;!Ih%j zGvoZu_2K1VPM@{X1!wx}jnx9r+%s>+-yic7+$?T)b4O-PoZZ%ofEM-N zFYeC|MzcV1==>%e}!u7Mf7zE){Pd`VkfUO`Tik(AW~m(8N1eJNwnn`79IE7vs} z3y|H81v}5l(($3J=&~#LJu`m0G`(a~OKS-{C9LG%D;gwkS?BL-dvAKwowZRZ!aMrW z#2@r4Kh(MxrD1P)eIZCY3a`H0t-V(zAIiSU$F7xHG+&lTZ+Ms-UdI+30P;b+P1f$E zgUj0bn#|L_T(|8Z7Wd+>)8bCt!lYWX!jg2m0TxxO`jj{`uK92;sgde&)H8Yh1^u~ET-=&GeV=k5xyudWCDLPn%>FegA z)uc|zqJWJM@gvtbXx%NlcAo z^>YpLQw^}tq`kLRHJx8Coxs#uQ9qZvrvNG{l!X5B*>IVX>qW5);X4Ma*yhRleN(B+ zs_|I36~U!eX#Wqg)@{b9;Cd%SbMxWkRdDI#inQ)}?XM1Ie5%i;JEhrN`6oAQ+MlGF z2iB=b8nnd3%RSK6a#^kNF$KxRtAfa((mp}9zkc#q)x!mbpHKDGXar|oZ@Z?b$4`ZW+dgbR z;CgzxZq#tXjgKP%ahD10?ntT+w6RuLSs!U(%21i6qH?Vg~|CG zdKCf#KJHKKl*Nv@Da-{cg6Lg>t%Z%0n12;f@|`%vGLi#^OWP*=#kYM-SimztV`;I! zqBM%$Da~VmEETO%Nwjr?!+uM|ie$yuo@B}}p?AAcYgxk&1f0B@6sCxJtt6Q%$20;M zzEvb{9nW>>NoU}yP-UG%3c(=<;q_3b&%eWBB}QAh+aE%BHWcR6PMKksgs88O6=AdU ziaUXg4+KByA_RiN(gw$QR>9U>fpiy(Hlg#tQM&P`$ZoBTDG3ZY-xnx-CRq$`R7p(h z`e^IlEMB(j9dAGk?MrkFi&j~=P(~b6^LP(CRWTBre{c>5TxULZJ&59aZgi1A%0Yh$`d|aYt#mFs#<6GxbsL%fpOuA|?7-pqhHy{8`I4Rj_@aXDgDpJQ-lY zPu(U{A7L-(ytw%M?AiB1c1lA{y?xqvwpNElgKYR~@V+b%-|eF<-$%jkeHNd6n0;*| zOUb$t%1rs$I$9|X_S>#f&mu+B!aO{>DPq}3N6y4t_;VYl8Fxl*8eb0oxLpp; zKc;SuQ07Z|Q_8+Wp0eq3elR3f+2oECIM`$Nq#uO)ZMPwRz~oy|Xg6spdc(^Q&d{5? zJyk6c1BYim{3DlVLeUMG^-eTeM20SsZnfQuBX8ZS;_8{ClVuYiAA`Z>^HKKcXJdLO z-!U0M9Ii~5RA#_?$!?K)`t+kbX{lo4ym)#gXX}E!Ha63?=&Y@pJ$a(A*H4$@X!gQK zKe_MCp66S9v-62l-#1k+|Jcvj-S3JaO0?uaoT`>P^yF8(b(IrddcGgBWml|}-`Mxf zEXlwO(MpcG9&|Np2RjBHZ>BU}W}%$V2%B%NRcb{MTZ_+`5r`$b6z@+J^j4I=#(Xw^ znmYzq&7r^ls3^Y}^eoCG|I@R{`y?x;F1>_5=g9j-)_Zpq;wFE*yf?f4KHSuhxg>+73<5&97#N70g66=0NzWu@IV_V_ zuwkBlRU9!Ocs0g8&t5$IgD`aV=+y&s<0`0#kZwt)+=DO`owIx!8udt~LqgmhmQ^DZ zGHurp>7Kr_oNnvz(=zaSc;@_jcv5U6V=7!FE+S0{0rHRUeuY2O2G}K0pE$=(q5~;) z+m0VTlr1;Cy96gn_8J;QpNl`+{16r<^h*>;O+mm!Wrp!jgz5Q=fro5dWg?SSXbvZo z_E7H8RO^c~T84N5d^S2~gHQZ18Z0LAotY|MDVGKfRwap+3e6H>l8{n|QvtCHaB&N` zt3zywRl-g6S7Bik!OYCgMQmZj)iHoFmW}&)5p&xm`G7C%phAn>X`b!_eW&Mpw2IhC zvWZL-CRl<@nDDgH*lG<1waTcq6Bhw>-9mQx=05j# z4#5C|fapA;B=pLTapECyCe_m4TeWWtjk_R^F^G?QXI&Tg+kSz5*$koQ|$XjUFu4VKLKC++OT+N+N@Os8Um%;yVU6z9y23~SpSHIqg zlO6^v+sBR@yo&HDKJ1lIoS}nai^S;VM8Tu%9WlJDZu=+J#P#vE_*k8vpmTfW`^EN> zY~6sUde1uoomoa{ns8-6_*}l)B1uP8ieWhHVJddT575>gG9F9#Vn(F(FKf8*;#q@l zDBNc>rVMku3%n%^gUP2N9K;@>7aPUg@x1!rbe7pja6QW!O|-dYfN=nCh>k%i5)~gM z0(q>b{SOQZo)91nz4?bQ}@@#0qs}=(lI``Z5UodZ_tM&J# zQC7w##YNzS2#3#okBkM1@v=IO2OF9ZMx z-Xg+(KV`H82Q;DtBtb@44B`X|5>UctLCp96KZ5)hA4T- + // 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 444/660] [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 445/660] [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 446/660] [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 447/660] [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 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 delta 6620 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 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 448/660] [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 449/660] [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 450/660] [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 451/660] [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 452/660] [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 453/660] [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 zcmZ8{RZtvE&@HyOv$(s2Ai-JOT>>l++(~c^zOdNhkcHrc1WSP6?gR_&?(XjX=YIF$ z{&nY}pU#|`nw~!0RcDrAi2Koq6}o6BOPN9^a04_B2sIZ5$1f$B8l`33-zJX+jcX`x zf|GbLw5MO&tlm#}`TlB>@9y1QI}OEU{C+qC!?o@|7LP|PCJIODY^te$cCMS!$whuD7ReTrI_wo_Ii zILk(T1k%Wb6=`_{VkROMWe7W9By(>iVK@6*^VYW@fi9X<4f&ac)Qc}SWnXbkrLfM) zsi>+HaYGp>L+htyo$|3^LHB)S5z^8L%+3pwhV})eO9o9fSCmgLTDM=J>>3~iQk<}R zAv(gp;6hpU#g>TJ5{*6$>tBybxsdE1khHjWftaJb@==6L95^tCtpySegWU4${TfLC z?UG;1dJZ1Y-l!L1S`(L!E3@#AG5|ZYPwqh>pAHS*V2-_aQDb*6EOKwtCh7Q8=A1lN zd4(VzQW{%sXtW1nJMN_W8wimR_o&xd$A6*x&FN$Iwk+h&+eJirSCIejSz-gGygm*+ zdWdg8;bwP{aL0mT8A}xBcPI+T+@}?6}etDPCW4!@zTjFzn z$(^@I$x-EFx}nzgPYMlk=L2boC??vs=$Q21?M)@$;CSX_yH$ zt^NjM&?y;Hq4{hq2$TEPfl#4VpXH7ln{%T`nPRMW(y`Mq$X*ge5NhRGT*-b%P}__o zx9M;$|B-s>pXHm8Ql_RxYFnG>SRi*+hakhxg@Dyun0!c>O3AF+d_V*QnkcvfHXX#s zWq}9Sx5|19G6-TNb*HDBh;|?6IR5_Ov#;O?hC$rskRU+txcRgjqlV~x4+lZ~X4WO> zwViu%F|_nApFN{)_T(5ATS!KU%v5Gp&|?#Ybu!uD0aULzB8#STY%w!|w$Q)e+Ym_y zA=4B~kY)G1{fpg*>V;^(>QuNsIoiP?3pP#h|_fx+;;i%u!9UrrtLN6xHE%Z6Q; z6S%7U(+O={i#O(B7|g#T2Y;f-vVQnDi{0=AhhgRi;muxdvXVsO>Xb^gS9lwq#gMRw z{S(f4l!nvNlRPVX16UztMz(78V_S{nO`pW3-9*7_36I5*gAd6uYFlo^DI5Z1v70#q zkhBtg&9OLk-|yD|iacinHr;?jq@nY!!W7+kJpnwK!yBE;CM1Q`+m^nmv9Dv9AL(5q zjr8SY(LrzO6*PMafbBpiJ6;f%np2DUPSqf#;K9=;TgIR<=Xne_wCi{7Vd<0 zDr0`ew-H&8!t={~$KiSZ(7x$p|2=Z^f_ zuO*n|cbfSf&9Rhh^PN4dY)2%DQKYDw_Q_gRs8;&V3}@NWnUYOe6|4|1>?NVT4j;>I z(=Xj0Z)ow8kLbw!(I5U+c>+ZTD37&&mUR1kN>Ev0Q+h;-4U~3oo!2&tt>lhBBWrDa z-)3~xj(~vh`ubl;Hd!oNY9M$@374d!`E(L8EA>wFlD44tpm@f=$F3!jZ z0@*dqy%%sPU||k|+@C+*o=WbzNVW$)U+hZ0UJib14^sISbbns%0(mlcc{tpjZymRqpvRy+m|lW54S6R z6?Kv9ADuj0nnNZNR)puFqbuHyb)#67z0Q~wMitb}lofoCnM-nEvO@yrE5_BH@^5}a zI7nC4N}^``MOML+P-@qM-+e^7>Fj>Ne(4^01{5K0FD(YLlJa)Pr{>r@oI7#nY%~i3 zg|OX#_znB_0BuiwBeU|^-yE$7 zqOEqROgr%*W(wK$in#y~U5@xMJ}Exa3zTi6WOz#WDwb6?-bjeIyBu)?%Uep!e}SHh zPU#7t-L1cvC@k9)GKSv{fN{?up0B91E|Mi3spFalCQ-)1G_5>Qcm0DGpwwE2zvYI3 z;(r{kET~s47HVv$Y4-8Q0a!jAOph0R=2oqp!$A--2hpyuOa7flLGR3+uQC*@p-yHh z%ZVnvz3p}h$ORO>y$=N2{$N(Ma-)**iIRpY7x`k zBN;&`*UD@$U1}Z4<#p98zcY|wj8SiYzNuLj-FI=YwGG@Kskb3XVvn+kFz?OX51!P$ z;kUFM`b>48zQ4aF&;`R+wqmv%whM5quq|Vw=gTeoHV+U}FR0G@r6czdcy`i}B>rK{ zGuW<2#GgWM;h+n<(bx++1J~$zp^jXe`XeU1Ekj`aTc6TvvHX{S9B-W71U^gpq|N^nF;&*rGLki4P-H70%D({DdZoqzO>Z) zvTFJzXXm$wh}9r)pyMdtJT_gK!s7>UINvbi{m_J{7s>#TfQ?-2Q-Pp5lI%m*SB*J{ zBx!Z&pqnjfmT1=yFzF4snB~VIA*;kAnFL)7KdLl#f~Nm9~XeDy(T+l8zq> ztyDoC%l|PIQ(I~9#7H{sBiDAuIEVJKSJ%v5`F)TpQM3AOIXqOw9XEf1XOuRdrpj8b zD1X(@uMtjmiBa9yJHQt_5;6Bi19EqSy7N0_?jsk2Mq#CJzpa+pP%>{~a&{)Ah;Egr zh;(Ei80~q<^`h#U0MUaAi_D5;qs}#zgpFd2F;lx;D+QdG{+4Ce@RV$vn_P^{H8wpx z{m;-)MrHbfs-~&9eAs{+r*4&Rc{(`uqYRrNMd3C~m)$W7b5kv(59Zvz2GJ(|!1s4| z{%av?yE`jbSf`wiYw3lAfW5C$so!>}B#%aiEP%$5tkJetRZb|tvKUv5WQ5!~fk5xy z+v6Z^OvU&sJ^)y+^o6nwQT?U^QTb8}|A53>J;R67WUV(i`ejY-01L27 zq$IjF=n5lElANL`+Qv{a1j$4jMQ|);zBD?U=ewD7pibKadM|rU418Nc0jP_bkOA8D z<~rLtXPXUm!@NP_haDYf%~(9dHVUg!_Q4tk)(8UWvtVubib}75q^m};NxPw*^mYvb zx0Fughn`gGzMnV5s5)6VlYRluHgj8mUWbb!*a^p4Ykncp`oS(lHh53uhsBmNMlGkp zBQx-??}oTMlM&)6Dm2_^Ly8Sw!{^xj9bpL?BZCVN1K`f`tRvS)eCEv5%|W3k6Wk;} zC-8fLi zV-`^p-Ui9j)w;d{D{N5_gpi9da3wDjc+hV{D~=#CARCX>y}Xh^3={eh0%9h*=_`l#uYB39*;J{Z87<@u>_jyKOKl}0+V3T z&7~zdo70MbrVSZQfR~5gqm7(tu+lhsY<;ZI`k7GMgIvu1tcTQbOYYf}x0P{<*`w?4Y`Ab_AEJ4z(LI6mXYFVlB66he z6z;8g;@!K0pOhyH+<60bvs|~Z!e;bw1#UOCF&vs9TH>kt0Q!Z7Z9dqW9A2(_SXpzd zmxLosi4*CyhR3x*gtAp|-*5qh1MEMqDxf&7;*0nbot1W3E6@Uyi{#tT2#P zz*~22X$<+0Aq&hqm$JyRIH%AK0kjz1mY`I7B|K&o7hQf`DsGQ0>IOSfVzVY2XkuI( zNH8FkpTasY-(8&_rzrxiufn;Q9vg5)qv`&4)`r7<=#uJbI12vIelIE<21bX7iAsD(|@vyY6?XQCrlHkZx_ zVP_!oPxYb`a5Fydggh!lFLJxlMS&k!d_HGn#sTx^NsGaMd%RA+lr4%C=RtyIh8um)&lX#4r(TCfa%(ncxn(ij_M3MdM!dFMMWmS&N;sYa$kWX&vGC(2c{x+m z1R3+;20{nbNlx$yidkUK0EC#X-klNiL~vx&hOdy%^`eYy6SjiqL}%C-K&*x@Ijxt4 zLsk!q7+lky#*9)##P<~paAdzteq(rHho+y*J1ot5ou&LlLf}R&w!zI$bFTjZ=jLsy zzx#c4D5V!duTOc-XGehEJKje5;H-p-?98FJh|AMF(bYrv*C zCmpQq{x(f~39+z#v_l&*GwwDlYm)~WqbA(N=oxKrS2^*cweWnA1T}1^s)Q$JGdImz z9;0jIn2b^^MGCSo-!NrJqrRqAX35MBSfm2vrb3!e|MDR4uiP-7@nNJs|I*9~| zD_JLWr!A~k9$0<;nASmh7Wv2U7re0 z{Pi(F&(E1o$LVlCG@x9pjEdf47SNT1DR5V}F+daCly!B5qZ8Z%KF=z+XNOQqP4 zl@qJ$ufvcIiqGrlNQ@-T+k>;KZI@hf*J{(KTxXibZBGR9`x;Z-sS)=Is z;Q|7#%^y;4Q8IA}2=vE7>0PdEZKwp1!}r@n>k6%e5~HE+(u`|Z)?K-hJvq1pZ}rEz z*eWtM+1Pp_-Mw4OsWhok*F)RPuP!V$TwPh7Jz^nA!ZI9m|j0bDZV^xi@vV40YyVkyuNuE^+tSJoVJ#J zfh>J$6Kf#d{BF?cb+PboJP!kim->Rk8;}nxO($ABYo4dPxEFr>(oUNS`aZqfo1$hnWN9R(1FV29#|m;^lw09(RLg@EYCtbU;~ZZ2AEE)=kA zdh_-xZi&Y7m8}jT-S>@!zVbGYzYZP6fOSyH=yy*8dZfz2o^(t&hmp^H^KJQBcM*G= z;RiRRE|NHka&Aphgo^mC61-k9i1^`&T%2|!N5?a&n9M&qHgIoC+r;*>UTu#dP?kUR z7a_}7i}>-0QURxI$l-+R=FbZ0p}HpNvg~p@nkdrWvr6qbSjk(&RTr!WVYcoJlvX(M&c?RDqR>yvY3ONXIp6xznCg5z-c4&?8`$*D& znksV=$3~eM2umsVb(^QelslO;EZ01=fPX=e4Bp0F{<{L`$>(^_Idu@_w{j5>xI;ZKp{Q=x=VpwQu617!EZ1j<=K<$~OfobFic=RhIRsIf?0B~M z=vFkTiLZis-2F7&jy)2I%1Q(C{eFvAl`^3bQ>qZ1P=S+5vvJ=6K!c0!?x>E&jJ_pO zIr05=vM2}dIiI3MRC5y#7}Isw!>UY<3|q!@G#agzxI$^S*jFH_Q3Wm-@Xs~!14XhZ z&<;$stTb?dOf{+WUTPNWj9UyTbyz*nxD|~k%sCb3XQ~#a>+V&I^)b|^eL~IBX1|}o zpLK_keze8O^7L8aMgu zN4T*ELnK)qp6_7%BWhjs}I zv!+Z6ii(DSpiK=Ic|#3JpcKMxBi)1W1bo7ahS#7&Ek7fd!{xD$x(u4t{gdsijp7tC zR5HA>%*+mWS8C2ln(SMthvE8!;+qs!^70ZQl)-%x)6EQ;HjxOyggTmlJO{ zlPYy*blLj3`p|59Y0H9M_WzK9psf?e@t|*%1`U%D;jDg zJ$UpKDxg&76#9oZ(VxxG%j961+m_^K>R^%O*~Hre@ur_1a>Sf z%eh#b={Z+;n{}?Ozw3c~tt~w@DZgHDGP@Yr?p_-&P(RxFefIB??70dd$rL?Pv%r>$*g{W}w&qtz}U zoV&qV^$GicNdTsiQ40m9Z?1V?M(p5*Upsu7YhD%i`UNS`ZEp1Z!0BTHic@~Z{{GF( z6C)=wOEnyDxC-rXP)aWs_6^qcyw9L8eM>&AN5byUbr5|(QAFW6T3d{#6g`w2!*Li? zLl{0MYNJx13rYo7j~GmE*?O!9m)etP7rnDnL0@W1>=ja>4?%;v$(;R7k2y{$Qzqs* zg)AQ{&p}iW#FZQLdcT+k&G8Gie@51770DVO(anwjYtcW?W^~>1%{syx)V3_Ga(qPE z;ILyjiJ8-X0j~6Xn@0ZL%ydC8qfV1T!?1PaA#5BIGfq9><6kZtsbCH<bAoWslt8DhOqnYP8gm)P701S) z*DPfSLW~Q`nGWZ2%f!*9tXf~_ATOvo!1Lwm>uwA=5-L*Pb*~ zAVA3N>aR1d&o+t^`qD^Z4dg}`n1G@vo9M~{IjIL;aaVSY1){4*BptO z-C>4d(6xM?&w=Q%ZRHml^ePg@YbhSGBMgaK+BD&N>y_$7^f{MtGVi``oICC`by!K+ z?T$E7O#hW>syF$-cyFef$ZGhCKN8PC#}$uq7Xj~=)^N-8xWrMVTy-SL8{F275{oJ~ z(I4vm!zhEN)L>QcJ~vpw&5j0*1)bvY`iu44=Y;xI=f)a`I8SSCs<8V)7bl8R^$18S z-!^;Ns{e#BSEslA8%jg>zIxwtSmFyI8pO}8Q7g& zT)C8f@BN59$>_h~IQr>G@8_1{H}Q1Hc4bZ)n@?|}aS4XM%&M)?-tV-RE!em3ZX`Sz ze<|Uq39*0n*VER69+D46vks2aFW)o{gvZ;2E{{DHMXD5CfLS>kTOlOP4aEjT2qSMq(r%UusKPtlK8{*nMQB)aSgvmNLi7?q}3A{G7-^J6#`=}JihUp)^e}&+Z4nui+t5b#-0tPQA@=y)u(r* zH;f|UVAd5JUcFqf-Lw@dgBVHGbY73{pFxSWt%HlFY5Z$_7A1-U$Gye7*7C~i{@{%3 zjPtNlT>G3=yCqW6VtJe+wcchqMc{c*A(M35W;x>wiXn#MkaI5@)#Ea1r%BUQo)9sr zS*=sjr#yiew|$Rftvj!vgxd*C5hw3npLV?0faUdFP)_ht&X0|Fti4fCcoIecVe13! zf5z9_cO{5`Z$%^(3-Dz=dcscUMPdAiQ>-Hpy4W!dSrSkgj?WK-Xn8v1?KN}TG{na#jlNE!Y6_v5h%$8y8L?xv z$*<%EUSsWIAP4&gFXK5@Z6LBMn+YwE};m#3O(6?v8)q9~06CHn{ zCa;Dl%U?$2nG0?G1d~&XF2mNtF}gRIAD&8yFF%3D4}b34E$*Kynks>LI&&>y(jQcC zRoQtsIYtb$Cm6c!H50E2V|v7|hI!_Apw`o|vJN+|Etvk0<{ab@I|@50rcS_Q{I})X z$hb!ue=1N*)b9$3h$-jR*Z|ZM=V3wN<(kfit%oO(eifw=;6N@oS}KDV2{1|C{a&wl zBWxXTk1^4_X|FWv+#IC#ss6Z&>I^0vJH#90O2
        {*5ICPdkAON$d02IR#B6pkZ$?%fZb4Uu?gO1J&m}kc7p$k z(HFa*Niex!(o647hsx}XS5q+>BpdvR-WC)5L=PePV0zY6G`Ccs@^XN?$Lki@{Q4+9 zP$RlKlAJ!mPf~g6hCpW{)AeP8kV89#K{m_0-wbcpz4oZ9H;CYtc2mn_Hhh(FqNK^4 zK?TeJQ~k|Y`MzQc_9wO~D>>F8`@6n`#>v~qzBqBGz7)7ULm}y=P)@`-{n4V2>P(nCwLe~JUTDsTkW%4tnFTb>YY@WuAaA~~F z3J|&d;@GCIcZEEYQaeJR{2mxWQpE0T?sB7AOaI;f6Akb{&MM8F<{a%#?Dy8@!T1f9`DxY$nNLndTJsD+Dk=nGJf}m^to~Qot328kBJ0ZrEgruR|i5pvf&b}wxEMmJ{HSsnw z*KALDe0W?|N`apIa93EE-31=mH;qKh&s?3Bn5Loc`DZV7c`2~QaO9+3`7uIN;)y$H zA}yafslv0j&{|Fm@nLDVJ?{?ipH9F;4N?E^hmLKjkpJzJyGnzRTIk?^r6rL-Y;X)2 zTFU=7aU&r7bJPFVx`4~dNF#CZ!9nks;UzL0NOJt}Ss4+k|MUk50l^>e|L>UQhjYqG zA*~C+&jcyqQL^|{|0NU=0pZg>Ji-6sMnFIjf!E54BSnDVSF&PAauV=&a?Ge!(*FnZ 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 454/660] [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 455/660] [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 456/660] [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 457/660] 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 zcmZ8`Wl$VUm-XO7aQ6Vg-GjTky9OKF-3BMP3=jzJF2S83!QI^@xI^$S&%0aue7pUl ztE=y+?&@3J_nf}>#rP3atAT)sH<$#hhXw%VAchF!C_UHwzo=h;rG+05=jkC)2!voN zkJI|@=dSjfEaO|v$R>kEu?4nb5G;ieh#l{aZ=m~}xr$Dz%F=y8PWJ}?!aJJ9(zrYG zqHsk(wpA3M(#*!(;P7eHp*~o((h;>6 z&w0D)?VV8rmz!2$TkrGNgtTjQOz6EP=Eg*qj?8a))Z7(;Xq)2E52X))Qk$d}jw4)0eT%Qstm zdlsoU@A-$|i7=O&*($|(u^y4oLL@{We7U4qO`KX-sY9C^w-JxRW z+{Ji+%iLq8FC8)hEVrpa`)zq6Pig2y&fWF*zv|m6D0lrIB&7Pnv28EP5exIs&B| zQ_^>2#h|UZES`m4L%uS+!copEg>VIgm^W$CK)rk;&L*wCIup4~x>WmI^7p-p&_)$C z1ks;(=CPG$R|}`y00<@qc0KzC4(Jb3Tk5VT2mk;j6~qyl9?ZBYj!H@Vsh9p|e)U|m zW^;t?uENhxaq6p?ZO84NrqB)fdU+|pU7ok@^i8vPQq($1{wb+a`XbTA5?K0b7u71Y zr?ZoMj>3K&t^G<3oWfgRxR8QS0RBbFMjBTjl}xFE+~UGQ@C$O$h-o=C9u!N*?sKjQUiX=JD7|y0#=_z7{B|4=LFFcv@azcN>T&#$c0ik0W!2>*Oxf*Xh#3$%8CL zWP~g$)*Sab#%R9TBi7%b_?tm%fhR?pT?3N{B5eur#2H2z+|D!~$Pa#zO}Nu>V>8p` zYdE~!A2qX8M@ikU--4VOJT7BS z)Y>!_=)ub>>shrtnpSs6^x7%%8_BC8?}mQCnR3<&=r^<8HYnbB(vT~6KaXZ7?%%o) z;tx$sXLyb8u%?X;^is+EfwBRaA=_RQQ`+2atNoghz!w^|t@(ifIS(gi7MJz`)ovoR z7o)&Y#7)A6``ue|s~3aNC4QRzKcw53F@_E84`6so8*=W|Rb=ELgU>ZGx!V+NR- z%d=$hb+qi|#M|mTpu_>}_4Wqh%SIji_MqtcPW3SE;a~d0Sl;QeM*Z>GZ1v#o*sR@% zMCg~JMu)V0p`Mt1zFx#ioK0mn0lceyGrfU!3vm!b50b&?mQC@^U|aYtvZ@p^@~yGN ztIsLLDKjBSFGW+fMSlqDx>T-wEecpsGEU!jnUgc$3?kHc=-w-vhxj~JpNK}?7=4*y zk`W)3S#$3a@^^EqnYf#v7B@sc|IixPRX>f>B_BdtZXnNPS^k-C(|3@J1LH3>mACGe zWD}wyOVin&Aaj{Xxq&zj@<0&-A-J(|aoAGWRS~XP6f%OD`n!e#Lm(MC3OIKVsDjuO zWK&Ee!d`d?m-7#tGcfy;2-OmNdAb8&I3asJk>pGa5M%`?dIqY-HYJLT+j++1QV00p zX!5tzVq{DZ@Ed5c*p*}7kU5>-xV9a%UCWE9z(O;DXE>zo!>pUKf&U z5klCA|Kkzff5$)_TKweOd>kC7xqQ-ze7O%qD-xptjj!rN$H@vTFIR}-ox1luwS1#c z(-iisKd{i%I{m_+Uq^9EmXHm%Kr}sDKJ(E8knfv2Vz?z(b0dLcq?)6g{^3LLKYnTB z2%ex~BGGFe6JY)?6ExQk`Ju1nOWAEiy;7!kGuxEA_M8!GDzP3~EIN3iK>7z?s(QUZ z18&&9ANL?47jdo??`{O{e#E>gCvnMnU|!;-Z`zDbk^KkhL#VPBQ$?S8 zq$-%#+SD20mnZ?qg6LX;Yh@c&)5&NJz2!qsneeMfa}va3mFVHe=RJR$hCamdEsYK| zUx9SF0Cyp4(_z{99v=CXgomne^WQL;(_oo{5;(QEsUFmy$LhEEu$4fhN$)kAB3rvCqqj zVhgfIs7^=x!Ip=};P`rsUt#M8t&Oz6x0ne6(ib&M;S> zsk7A)xV{h+?0mSL%_tewCZ(L?A22{qZF(Ik`uX6*XNi?GvGTS)T|0LxNUq8!nq1U! z#`5E`#>o4e!ma_<-1QeQgj7iyq19CqMiMg3KbPi6s}AN%Au^zE`@ZCJ*Bz|%e-Ppv!N+TtKN z{;siKT8o?;?6p-X7GC>_79n_T_2!M)66s4?SYvwK; zp}5ooI#oobm#;al_|CZM2rM$fyb1o?R`*lrQ$`%^O3zS&mPZhkshQ03ZX_Fx>+*d~ zh}LGH0Ql*4xgaM;@M(X!BuB{i)=a2b%VPK}-_3I575uo42ll^-d>B;Te0%&eYIi*A z^<~HS<#IXN82n6gSG&`TGuiEPy>m!2+5PtNa6!u7;K{?sxlNH|vc29<=25Y zR*%Ya3Ngm+a|jzKSh45<zV(pYcEsTcnVx>%*r<*rzF>PAwgM*(j zo8am?_Xw{lIoR@M2{K@i~rus3QG7 z|9BIIH5QuSc9H60S;^p1W85{2QQNfTXJ^?GV7pFnA6B#>eBB#l+@ z53uJ0Oaz?a=Vm`6e1AcBt>s_U{cUll2AY#}xGL;rZI+Nv4_|B5?g5iaxW4z_O1^?3 zXJD`FzdMS}Rn3K|PskQE|Nb)syFsb)L9B}>%SApAm7*14wP7PJ(cPmAv^}v%)x6`G zDhU64{Z?@6xfz4rNKK1r84Aw*=`_vsRcD(;Vy?CP7p_ukS*LY0tH>Ag zd45D$W4)J5df$9-$*D6Q>!HeJ3r@FeS$(XUhcXV&s?&Qk{&%V;W^FeMoaMlp6%iC*`Blta(MZ z-geO-bH7Y^;-*DkUXk9aLZ%yoFzrL!rok@0NF@2-P-XNW4r&{1V;33jiozH$Z^Gb; zz=)kEli1FQnPT9_W6(oo_%8QKuK}*0tu}-zt}1}8S^L;g+Wbm8#y2z-6LRgBzmv=b z(Vo`q;a!w*bfxCv0LYzc!eb{o(CIfbD_1egH*!dSyg*b3m2) zk}^y;$qZWUd8`G~endaCC|#n6tZdlf6gweJ#x;^oee6;t|8~Rhm=H0wX#rsSq_C zq!2ZZ<2ku3+Hy^JRjS{f6=>TgiOy<~brsL#24AKu0)lD=xtXsZ^GxGKZ1N)t#xvg< zx1TV()dW|mx}*aGh19CGBdYW&^jR8hvcAxrdS(=9)od``opefpmo6m77cTQINNk;! z%ISE*4{YVm(5m?aL)itv_&F&ZkRd_Zc^TlLy^gkWIceAr7D z(FVf+09Qzm8hjkEe)K92b^yz*FtF3tPc}0$=Q|scTX*yY> zs*|#X6t1TiFI0AoqEh0Kf-LyAa>M{biq+RI`UB~_e2g&?txvTOIS3O%xgie?)p2iF zoJxr_mC}<$yh)K(Rrxs1)>C=4u58YX;!8ixJ^^9^i}(jK;jdkFowInK#{CsZ(@;n! zX7yxe^VLYeg~OM~U-j@Rg=Ft^aqlrCym(Sd&WwKtIVFTHP0p%07bONw1s!HeV2VCt zafjAdS>Ed?!tM?l5$gs;-#aO>UUuRBYI28O;h|SZ#MZ4UwRtaba`%;fLk7CG>*1I53vs|K@w8X3bzw>^cvW0s-+5mY{QBT6jZmR|i4 zZge|a>$CTec~+P!=$9?#d(wO_X{BS`Zi=XEy*bwQWPv6vJdID(a!3q=O0>Q*YusLZ zNwU}x3LnEF;yXM+vo??`*f&Q-T)0FT-#xMeRu}rT+RX8ikwyF`^!)xOPeVS49iO%0 z+yIM>lI3(8ZmWF9*?B2wPf9a)2amoCo}`I*E$sb-$(Dp?cxiaZJppn^u1v27f#H5A zi69WF0TZM#-o0>_%nL;#J9YLo7jvD zUXXVbD){lO|0EV~(s3a}F%eeP>E^*)$oH4q!GJ97qEnX*@0gPhs|Oj_Gu6VY?&zqU z6R@IwF53Xy82qw@Q%`n#fK+#z8m)VZm74bzFP4D_@gjJLm zVpcf-R4hWLTngv|f@4C#+4DF5e4ruN7?|KE$-brzVrmEyLR7^G}Nqbh#M6a=8sJZI0Wwm2%y1mqsecl9~ zT+$`$SHc*a=t$@GzZtN1cC|6T1`d3vvOLPDko_J=&xKe1y~z0f5;iPwtc*2Di(@5ay8Ekig^;anF+ zd`u~_32yB&wwJJr`P^Yq48F7)0#z}MRBT8(Tohkh2!snm zmYw{fM2iIPspeE`TaZCj&+3mS&4dcHM8K4TJ(mw}(Gm`_Zd6HgkL5VwN1$){EhoQ7 z&yKzOA_f|XYba81s}!sl81~_ys0c1nn`|$Tn3lWjEYl7wv&sXGLr18qgW0wpp7O0G z=T&3FMU{@tOujL%Fgbf05x3_0B35bF-`D--kH`($t@J076cHq;I>A!E#)a@TDXy$AI&jo}UO* z#7~RTRq|6=r^<*PLJ3WT`5ybXX@Rz(w+xy4w^*sCE$R5Oofs~9Ir<~bV*V*h9p9;K zRg!@Pj8#Z|R zMXb95{6j~G=VNM%NPp?*84^TF0`7^+;KN?mJ{Bg^I_nKVX$rDR`e4T>c`Trrj<6O;C*-Z*qp{e z&WhKUKaStok`jXfN@P$xATah`r3hICExB%7J#3M1pGk6v<9Wbou`DkUydtQ?=;OPO z>Svo~RHOz>L`0a9tkW~?*WIpp;f`M$TMPVoF)UYo4kt&>Ev+fOC6bH$7Qq#}c#)bt zwA-vu!8iC@q5ZjJpP;^8MQL+Vm&Sm@rwv!VW1*LuC;us-aS>wK+wt&G_Rb|WnS1&^>O)DHcALkxLU zS_}Fb-QqFzlj$wCzotKH$?qtZfapn@nurv5#&;73NS-CC?CDKUoiDtgBdp%vLn-#O!JuS{0w; z;XLJb(lBVb_ONiR-RvU%?3Py+?dGl#`$A*(EMm^ME5Ke7REhRXyloM5xB_}C=VWQ+ zSTB5uJq_UoBf9gsl?h?hJ)-^Rp@Bb9K*6oy&0xsamrzhcfeq#RSh2$|;NHcD{WGXt zNt2skQVe;~Gif(|?b%g)ww7UUfAyV>pGOT(h|cVA%%K$T3JY!-2_4$(00;`&%!BdF_U%v}s z*lv$xBzkp327KUW?V-c*HtrE7dZO=6A$jx^!PWCWLtCmfTK7Q_|_ ze7oUeoiXa1qNgZfT$6pyerhpm+REZ-iEqM>aW|B{D~#Q~!FuTm@UhlML7E?nf*Dco z!Sem{0)2js9goy~2%lD=K!Y5XV>Mi<|Ge#pg#JKNBWcWw)p1r35(xCGD?Hh)>`?sp zk((iTHf>B?Ow6Y_4-z^7Ioc^0c5&{OT_G8I+XhD_f0kgk|Jq-({M8HIt(65V{f6`( z&(cuq!vBAzx=2PPC~C+OBNNfTRS^IH|1TB)+jJphObo>TlcFL60I>cw{vBmvK|oAY z#Q(}`008BG0jP-}rA(y6|Cj9l#Y}yK>@tZ!N0LJ}NT?uk%;^6eWR00|pbI`h{(Pi^ z?f^XjA 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 458/660] [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 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 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 459/660] [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 460/660] [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 461/660] [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 462/660] [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 zcmZ8|V|XA@vu5lGC$=ZHHAyD6ZQDj?V%v5mwrzW2JDJ#=WHaBryLWf{M|VG`PF2?_ zyxmpL>4+xK!dB3lbZCg{!)1_!Y-j?&E`#x_Pfo*!-X=NF^6(J3# zv>_xTGlhi8efMR0V4+S4)gRR&*Ne`F>((5u?&aj5TGP6nd>mqLQ_=vH(h>JYth}7t z0fgAuZ<;0z$mqCvn2Wg)*N=8bxWsDHLKO%gztT}OsZ~Of7Ye0R=MJTRSAa&oLHlx&y;BghXaK{`{x*U9(Y1v?E zimjGbEa)a*kf%Gg{}h3Xh^7UnL`aIiX#1^cNk>)&#z2282M?a;fz6kcNM=jUhH7Vl zHZ+p{9R;klumG6e2PXtsVMjV(bW!{0sz=gO&-ehprh^o#=>z+Vu!Tz_s?b$es3_t( z9xMN}M=ybEk=0CFS6MIouA&L z>J9{yP$v=ldPb3eT#*jnCFGg4p}q2Bb)WHmf5utJe_pJ;`@3^C2u;Z6Gbli?p>4Q!DOO~C*8AB=D z#otB?NsT*=en%ncFP@7o6uourx=en(^DS9W2);@NFQcjWqD(a^p{!^}TT7V2HT{9Ci=9RXdi}V8G#j{zRky7b*aoE{s&a_Tz4gBr zfE#;#hLTD=rM%_{cR?PeJQ!O_>#t_)zYi{asq*<>%AHilaF{)zWb6(J1ty{u&+id? zkjZ{?7w{ORmtIXgK6P< z4alGK{8t;0A<0>O>0SOPU}y+`>{XFIN1F5-FB2RPP3+6WPmB+jyKHV$wpKFSC}A|s z%>3$0@`lJ@vHqSRowO}!sey$w>RbM7^IV$q5~(L)cX}BFYoynkPy_BQ2#8!Je2uQE zIEG~RrnL4BT5&Bs5!}c2$%e4tMo2F2B?*rg%&bTb7&JsdvbCe!ad&8LYsW9@KJiY5 z&#b8o|Mrc!4W{Ju+m}*-oL00uogRg5O|*XY7HP7IdO|1Gd;( zqW~jUeo^+EJVvQ+QWMC7>HzDWC~q$~x2ZE}R9w=%eM--^YTiD>uPnHfi9hwfyR)>! zBXmS1{C5O&&@VuxuBzEOboKsdv`gLQiX%euBpyca`hwMNXv~sY7x6{Rzjc63UZd(; z=(5(ux6q>e>@GxoVBaG)Eos6g;o#AR)WwU6mk50~24Agc7rhD?k^}%}UHtMQeK|bH z^I9K5(kDVtPHRlR2bJ&B)()7FP4EPWon#1e26KAMp4^b;JR=YvOATCW8IikQme_7s z4fqscos5V>AG3UToeBOAiqkER2;Lks0w5qDA0PiYC1&YFlX1icRx{6ls*0#CZha@! zUs&;o30CdlokRqRgH|@y>|z(vPI7QJ(%y@cXC*Y5{0(;QYTgcBw?3Zsrf-`Cy8ph6 zcfY>^?>E)me}DVFj6VXtufvaf-S00i^Lp>iSzUkMmp)#)Zwa@6k3B-*{k){)S^11hSXW5p6jB%YjYse zzTuaB!*)iy(zFpOiWu&<@=)DNHO{JeqYw}8W-c5`1UhO2x~D_egxk~s{ioZQs8gCY z&wJcRk*!OB?#i?LiW`TrgO<93_FKmgSr5DpEJH3s@6e4du`8==sD^T=hJ0w0gdbKL zs^O0S^w(d=JUEmCwA2H%$Aqv(h_gUtF!A4Di{5$9ZfiMo{{ojjRKs#jIcNDq1zx;WG+SQteP0cNSYSp@onl)BU@qXBq^^MZx z2>uy2?PaMv0?v>0Z?t&451JC4k&D=!%H2dQJ}s5+yk`DcLy(-KPQ-Y0dJ;f;gLVhV zq81AEk7pgo37=;yqBq(%99~jQiRQ?~m6xJ1$li$i_VAQ{@`&F+witAI*R>=XKP7f6 zHxoTgZb%<-#o1Ge3{Nxo7W6i3=4;iG8EaMUwuJ_FgxSCoqUbKGYa z8%52ZJT9~+Il#XMjUnNPK1;ZUY)}cT>E#-EN!)!Zmz_@Gj=Y}T`6rE~mxdfn*E>Je zyk?v?rEtnTi~Nn))VmM7SJG|@;trYUE>yGxo803za~!wF(E&AS0hf_O0pc4UPs-Bw zS>BYdljd2Kx@G3b9qN1vtT6JPt~E>Bn_gA;qBgQX!Oh;c+&0gAvw!B1E(%d9+aA5r zR%9t~Y4V(*alBNR9P!97c4ADQ6Lu4<+iNA$7d?&CrPfD&JCn0G{LxaM+l=|4F6LIU z-TJ6K$57xR$}o9Aq<*4vKQ3cc;G^XEo3(d*!0BH!VRzqszELP!IYpXkIxDjAPrugE z0Hw)C+KnKK&;egCW|<8)oIt6MWR5|j>8Ii?J*HIP^^42`k~Y~?oVqzne+Fg;6`;Mv zn{yrHL)O%Q|5@7Qoq59Ail%85LBzGrD~b2Uu1xSku0d_=rTl2)q4cLq?CgAU=G;~y z;+G?TX4W*jQ+)Qu z)Uau@+*-rRBcF-$B=$EGwpxim>iIl4!2{0up_I(z(-8X9CdeH`-&(OSi6EHLN?v`! z$p%ZwO#eeM#d#cvD8D`7~O{ zO`nPy$y2|Y^JLi7LtW>y(k{GLL{(?JD%XJ~WX(l9jIFLkw7w-%^uyUZ0cIZ^^$^Wy zQi^sJ2!=m`t5>f_u7e1{(ES4D+0(mcn9hC?nVRV7J~w2=50Bsb;|zz=_IYg=Z>>Z- z+x*^CCrPv1dntd=A(}aW9ZLT}NEiVgP3NrS{V^$eHIUOA!K#iITnC6-QDe92i{n=z zPR*`(X^&A8IQ@fRh_I^!Z}@g4-==Q!XGxL+a!e|}3@U; zQsVuwD_MNy8T+R5$K>Ydu&jHL0z|@|QsRUEjgQ2_2;?66zwlOMvFzNBg6Jhik2dI^ zdecdy&T{WSt3P1mU;3VAvKUPA$!2Z-O^Ep`@+LWUz@|p;mqaL~5vZpM)t@~%Oz3pZ zfQWeaU?l+zex{nH(BP9*QtxE9>_plRmC#U|G4xwzom-l?_(G3K@-O;2YU1gX)ytyx zzdBdy9i!SPmf|}+CJ(;oAHaDOXjk8us*DY0=XAt_|`SH9CSQ5`20slFpNOnyHX6_htJ?dl_GsVV?ju&wNv+j}fgdB&>BAB0A21ml_8 z079v+uH7xiloXH8M3VZLO-=Aqf42BDQIY^{H~t(s&RsP{!Rl5xu!=Y9n#AUqW%v3Z zg7_O(*;Be@|4m7M^9I=_q8_27;{*o143;p0eELN*rT(gC2}23I&VyZ;8pj|`)Lusa ze!#_K+V`~$IU1s0O9C%yaiy(z7p8aeEG$RJcZy6~?d}XMEv3e)%Id%Qs%XAON+iB- zr-zX~RA?7ejW&`+Z#p_asJ9B?v3(>B!9-UZ487>2f@l0A#cVoy{3GqM=GYVTGN}!{ zM6y7$>m*o75Of~g{L=y$xTfm9g^6xuR&5dezX`nY(~6>3QRN>XA$;S_IDz2g*Q$z= zpQ!YuF>~QC|y8&5s-RAgGj>mi{!hSCJc^dooCJ?vh2^-I7Deya?dJoApIEM5Y1esR6B>!OI2)Uy1%88zINWVZnzMP|@mQ3PMeVQ;gguzK1W8NK#mn;^-ex z4A1XHzX4eY9{AN9Zy(gz?ba)WIp7nqhY;ZgFKJgqc^cyi&r;89%&$rnBW z>r8RMUmu0eiNx59NQyUn9zloK z-(br#E6lWpxXtUim{5AXCCaiNs3z0kcN_(4d5-#kFZk;{4UV|=rd=Um?_z%y`0)+) zGx6KiiS-jJf{H+lr}oohuUjb*-~QZMBO;Ee3rJd;HcYiBR*!TAm={C~pzS$PD?Ege zN|_`F1X#vCC)YLu{-cdZVrCcj2NtdRXIQiw3cg1b0tg}h`>;eCSyFDqPitsQ| zjF)1};R&}e5#1v8^*iIf6FZX$#B2EFcx0E{6mR?nGmyfn)|yV}F;uKA~);OIv@7k%Zh_62F-~Ij_>>Z{3SkBgf(`OQA@Nr)3o$CdRgN zURu~{3fv|#8YgK58HL3i&ysf?MkTX{!|0*}??%M?eNN~wy-j3lNI~m@HtOm6@yChz z+BHfa$VPpb%xE#M?6_5RB^Z7WL4z5GJGvM{!01xginfz+>%DHtpzU2x^5wBKohUwp zr|Uw-U^qd+yVN+-JXwt+h5nttax-O<7Cc4>M9&B=QPXb}99j2`uee;m%Po7DZ)x4> zZDKR>j2oL+lP7e1Ys!GWbsS%PW)d(R;gwE=hjTI;m6kgk#L;R!Fu87>Tp6&MKuE1( zx+22d3@4c6Nicn36gb7v;%ZReQ?|;xHS=&H!R!3-RVKr&YI2}`wNE%K>}n({L+7Xs zuoHxOu#d7*v^v_9_7=nzGk?(^tJ9ivsY;A&U|8OHN{T&@p}D;emWvc%;wVIG!y6bZ*^kaTCmTCv%d#iL1tW&Ct5IX2~=W2iLa+ zO}iE{v(0YL`1;aV#u?&K^ePlR$%7ArIanxh_B96lrtY6rvvU1k@Z*mo`t z@GknHx;uU6d!Ikw^ZVnrv_HYcy1O#FkV-|znP^$Pbjk}VA(w}I**i$+@kf}9IF ztbP}5eNB(C_H_M?4xzR^n1PkdH+`?X1qqO%H39~EGsGL|hpSj3pYqz|MYW8c%Z)R7W z`|{*ZkBCv^4+K+UHbm)Oi2z4CU`rE4YePEeEzF`VDTc#H%tg=<2oLxDc-)%X7T0er zP3tW(|DMd5=zT*$%fhRx?`-R9yEBYG(K-mP&7-uAB~LgQPLb2BZ*5Tfo-qq+kST^! z&`o0$5kjNQBNr%kM*_fl_hM4|-|U!WJS^vp2^|ghwtS#d%F^osyXjM_Ey|zr$7VEi z9B<~Cag!v^u48Zd=3TMrt!1=rCdzQHAf-af2P-qeX`FpK`r&uP22>_H+icFt!x&)p zAnXN~vk70)30!@7t%7RK`LuV^J64}G2#=bcRZVvGG)~{t&D`tMh&8pLx!lEDimTW$ zmcBe02E|P?hYbRR-KHM(t-6Q1Tu=3x$lyq@OLq%HcQ3zOM%1vLiy;j%CgUd%=^A}J zub!C1*SvnXx5)`qaj^3*e`%>=GsP()$)2p&MvN@Q zq^&HQBcxLyv_@<(3=@`gq8~1pO~-UyOEo~#n+cqo8|(lmDkiGEgaqg?65O3rnX`Vu zFP#;Wz+e1^PoGfo_$YO~9c1T4$(LIad#ll!MD}8rtJa_~z@Vi{PdsRZ8m}=94W(E% z40)B4VYRWY&FD`WQbA9{;rp=IQG3W2C_EAk``>(O$Vax*p8YzI@>5@!C4tnW&6Pvi z1;B=ljjEw`*mj^(<^9^Yr8wTvmJ|GIRES_-N>aLl>l&vC&-zCvlIc>W!W6=sd94#_ z%#?8nmy5yCk8n{dv&@*L4vUSB8Yf$MLCpzq9^2bN%<2&f>A#%KQ6jEREtz>+-Ze_L zQx;mXTYh3k%xqF;P1ggiE!F0na^7V%nE*Cf*s^Mi0?AhRo*I+n^I8<)!`Vew$cxp< zwktY07ssK;{&_0@O57La48-3-G>!#InHo)asT&B@PPVRJpA%iCo*$rDa{^ktDwAhc zmi0My4^!lQJD$G0{iH$l{Nc^XDcSN@ZttWoKW|R6SzOatU_5VY@`ziHmCOsH8yB#< zuBod!1UA^AmI+ec1||=*iqxOT68^%R?W z`E>9eio76VqH~4duFQHboPA?(R1Xu(*JI}{yR-885RKv#vwn6yJhaSW3Bb|Nj=_kj z8cttuS##I%(hgs<^1$xFqXtkEX++iQikL zf=F=)86_Y@&jBw5bfA4Q(YZ;80{?67yCz7x}A?^iKr5`D9X!) zw2Ib-+pPD-Q`7_lK!cWrPaYukQNFFT#oe>bgH$* z#r?FA){zulshLZiY0R+RyxJ(=zR5;$$lV_9?9k*V@(au>q`&#;MT;nkS-Ez}|7_^s z52DfH8Cu2C;@FkME)z%1vb32*yeBn{G?Sfdxs{bV>1zXQr|OS=E6HqHmbIEcZFpl_ zl-8)qWq)?%Vwx_EiKW$A_iLe;u!%XCKYrqE^4fE98LGUcWXbhz(rEId%?6?7(*b!_ zvhkuF9{LOdhb~a7yRScZX>osf7&b>yHT5Skv&t^9$=1uVE-cD5{S47kkrA-5u0t~V zdl!^cqYNlWk6&B~>q1EdFUy=i)Ht@Q%1GFF*W)_q=pPgOHMUH59}dK(3p09g3~_Tf z*S0Y#+6bjF!b_#YD$$_Cak0XNh2|i1vX8U6SRIBwdM2iF$dgvTG;CaUCH+%*+7_v} z&z5uE#I)+#a#KiIl*zL>(Uc-bhR_wOiWrj#Z3!H%+3abltT4$q2%oS@{kO+`fLvc`E-1jlJ?(3m4Iy>Jf)F0U5>e+_S=nRw6%wv`yq?D>;Nf8=*4O%}AE#Y0ZDC94G)FU|$is^<@Xr@c$3`CLSe zbBmdT`dg_0C7KE{qxz;UY;&w#DSN3M9?<&fKL^Ff!<;;pOv&E+ZzpUaVn^6MtGWUm zXp@I0ZJMJ-aE$^sUOG?yCEiB|!rnNuJ3}0p`CUty&1ScWlmbC+Q^g1=dY4a`2#7n{ zfgjtydw;t4<{T~t4NfRY*SD*aa4vr!UOYRoN0W;tB8B;+^ad0yy)~NMIx{(l10@`k z`Z>gZGo?GQiI;i!+e#q`sU9rMbkvvLSZ!TXDru&t-bfFf*ll&NcdgvH43+7(tb$kT zJ=!WP*u!?jK#O?#o-?BgV2SU`SRL@1r-<*wZKv>2`dpQjI4G=iI*b$oC>A zC0H{#kP(aqrW?3!VVUx*YvrRo2()=**C@ea%?Q{r zoH2^u5cp~&VNS2`YDuP>(}*dPKO+h9Q}!1XvNin%vlq%kE=x0djNe53Jl32d1~%uXm52#5=~K5+rg}5>nGN3%nYaDw;Ri@ zMITlYY&Tp0r=8kB7VKPH^?CLTF6zs=~Gw5Zq$O(>1!sU&~n9 z5g(3skahCXmR#K0bZBI7>G|ndR_lKRGGHILE6nN;CeNeCXYiupS0$14b)p>B(yYCZ zVg7Z=fAkvGY6J8_L$s7-lx%n_cpS*BA>);?r;d%K4vDjLhek|0gCeESC4Ke`&h1U4 zJ;;wRO2gQA1bp)*#%ZK4p7>gh7wM9|-ABbVe!?88Fm<))<0y4~j|7!ir;^q0$copY zk<}d`?49B2)MsgnKgN?&F7$U+6hEYmb-rs9yg#`mFv%j0=*B-5=ZbNqT1LueoM!O1RTx!TT|J1 zAk-X3H{+iddRDRic>x=&+#}@yJG+9p;D8f8fUr9d{cO3PsV!HS{bDhzMNt$(GF;N^ zDGI3j;Lgb+6iB97!}N?%cAng9vpf6rePo=yCZlW;CX^miaTPq(Qp3{Fb{m@77;pN# zmWE~K^4`uB5lsZWa5`IWV{PNbKoSK+$};kV{o|n@0a6ZFUf4fUTq9HcKay4a{-j%= zS2|4Gm_{^~DWw(0XB2(fG%w5^c$O)^#=jgyNcMrXm*-lu(p{|gNS^jfY5b@SWIzz$ zf4It*oUHH()$YJz(p^Z8U3J%R+ife0<$fXH%xd)T_alg@_Wa8y$=fFO$%{WV8xe@- zPy~BTcAs4DLe6aOFo zkvoP;Vp^N5c>Z6Atbp%a-KzPSyqbq%UNr^$zS&|AIpwr%IrAjOy>p09I9cLiW_IY2XuenHh#sY&Yb9_PXm+O_ryNX#Cwrao3_RVS(P!_FKEU z-Ko)ax_S!_sG_a>rNPUn0%h?1`CK*{lb^xrVadk`IJYPM?DU#&#~!b-f(G_wqVCYjjrJrrf{wJw=@Ro&z>bkKxE zvPn5eZTeAB6bT}(`^IL|EnG{en$(d{0EcP`J-oAS$t?RfxZv9RFdH`^0qLkh!w02afn(99}zf=>d3F89ih~B+RmMM^1@Bi3z=RhZpTLeviQE zU0urM@u?-p_1>`1-%--tMtY|y3RWoVwMlLgTTA^Di$z(VXL(oUYjHVKO}shlcJ7IN=$C*fyetYTFKAX z0w2k7Aj^87TTvUO$JkYzqIxLpRP`uOvPD8a5Os^T6<7@I_Vc> zv#Tx#D9Wzw$fvy{aGy=A&FwxQZMMyai`SESsiXIG2siU7oF$7fsUBT-412cir-AG6 zWgw(QR=R-u)>8nQo`YzWMeUTDoBx4Pxam$?5EpO!(tPgg_0jJkx(;x_jbj}XS}OYJ z5TnbRuh^mG4F;J9DM7RUxc!R1_WH}^XJdmZ=dP`3cidv3`mBQvYi$$gFK=^g5R0(i zsQvls`P(Qc;H8jI4_rpz_R7ba&ZmDgnn)QtL7C>2=Iu zpU(;+K?hgv8qr&D369bvqqupwu};VB9HZIwPxCd#<&>7TF2>LD5j^|1KY{vxsZ0gj z6KBewBOjxtTl)VFTMYwWIux`^7g{3TV-rElFn#;fop3L4n;k-4UEYMWQ=SjmyS$N| z>|I1j2ynoDXAZv(d93fikKy)0o;sjtq;jz-mv1cFdn?IaPD{M+Vzx|xL%ICG()(5 zlU@?qH~$*_6UCYAz2r2uKbL2*{VuQFm(wCua|9 z6DN9i8|w~L8@n}5gm?b!_ki5XDm@%C34Jg1bWg0AjbJwDvvR}nFx5`1_&F}zi|&|) z`GL+a?d=%LDdL5rV*A43k`HA{@#{{ffwNpu3?z~*Rnl~K>?J_uxV~uEt@M&K&ZLtk zupQk+{q7#e1;oC&4!2T*lJQy-$L+cH;6e-#7JOMIRVO?B=#Q`B+7al_ zsA)9Nfv_p`fFgK1d{bsw6mNmZA0&q;D&xsesFqJNq-UR*h$yo1joL__l;SqUhXSB6$!fg z5+xRPl=WfG8_9+@G$W)(YqgYn2AOx-g^>Hv;ik(Pf_wND)l-YW-CQpOY*oroK{??y zG7fI-;eQX<%6xG$7uEaKFwC{N)u8nHJ)6yLS@-4s#7K7f)vW`=D=D*rKh$f_D>O6v zk;DCbk4h12f0Hv+r6#@;o$Ie_r#F|LPKpF$L~^~pH)80etEZ8 z^(f0`{QGqPE`c0|Y+rb&+0Y}Gfz2&;|`$s^n+@ofL=$Vq{tm zzpz~X4wh2)kZ&`<@cpw;yJ9{?U4OXFet*qyxdrgrrpDG6C^pW4Z6N_4oII9APn`!& zA15htIi@9)qM6yt^B$9tTwF~hl*3QGfVO1qihcVpjJc}k?y0ISUlcY%VI7Bd)de=I zC!x(skMB6b*tWwt&NRb0mV;#gOah+>@3lCvC$p?RU8l9G~3Z+$>re(U^yowPnx61__Pmyr}tm z-)QZ^=Rh$t2-?1*<$r~Q(ZcF;P3NF)I$kj?2yFP0;#!sd#Xy&gH#tff(Et7i!<%^% z-e?&vGj`u`aDzGs29C~SQfj;$-V}S(Ynt=1Y}Jzmq9Grwqn4MnE^x2wCylM&r~{-Q z@e0!tAD=xYJPdM>lh?&je=1UdX5B{v_?d-*3{(eUbDK_M>MM;}Cg_=>DDv{A@FHkBFv%SVsN<_=|}* zpx#wK-^!JeJl}$9f~0WJ_~YGhuM5dI!P1;TE#{N&##A=_=aO z-kOdER;c9$w00iSyeoc(25UntZZQ*06oLK@vpUPawQ0klAl`GQ{Tn&ny%D@n^7%sA z><1N7;^%(wg+Q!kZRVQNJ6n8F$r&WC0&JU!JnBSBo%at~u5`o>_ojoNfYo#H__SXgFqKuLvYjL;(?39< zwTxtIN6exvhL%ZCWa4f+YVY6jo%?ZguF>%}2BG=cCtrdz{#rL!E{=IHnD~(^%n~5Qqx@jRv=6!>pyIV9trB)p2-ozx z$jV3|5J+2E_E8T{GHzOUQ>=T%vFu;R;HCMi-jb`sz2E1&9M@ia9CN@KvN->Q+vLsN zH~Q_I51n)$lxW}}dNo@5JF5R{1c=OFob@B5mrlS7qr)-?brs)^k*gWSGa|R7MVH-~ zYM$;4MTR9UDAp`H&#y93L^Pie<0Wu=By-;76JSbysb`99S$-z$LRnG%7kmi~WW{1} zE_cF(WQn1hqYoeWHM5H9PplKm;byG4Q;kK7?BdQ3q`PvZ63Jd=k#-zVM++21{urTT zuB@+Q1nimMw!38Cy>hHZZNx|CHNZu>g)ij5wab-tBG8ezq{m<{#jrX3CFcqqha}>Y z#Q|1>-^F^(q@h<$f9+HIlPzvy*TdY+lPYu-(yJOaPe&+5r82)R&U{oRSG$ekJ6;+X zi+wh`hVDW1j?zY-xa|B|kr-&VF^a?}9?|k*d(jch2!E_2 z@${~AOj$F%45wKKt0$vr zFM6H2wMC8DeA7ZuzLDz_wJ6J>EL2Ug_`xxEHYy}=-;4Rx0h@m!5cpniOl(E`{8{tW z+S6N5%<1G)rbxP>IL}0l{T$q=g*^s8dB88nYc*I4zp!a`{ut`{262ebiAxD5a#d`C zLsY-t#3sfSa5}94m0Q6zUzlu5F4mUB;W*QeSB_9EW!t9l)dtahVfQ8v==+AlZMz~= z*xPP&4yq&8HXYIy)7t9_jmKFe)DI9O1WRxtZh*&-wcjH3Tr=T!Asm zI1XP9aO)JWYixsF+(=dC?}QGG8r*s-Z|p#KW%vr^)=&0)^=5{OST*0VxlGs*jVlj* zjJc{2@;zAND@Djhu$ZStz*(@?*8{tm3DT<83}~#JqZ3`hVXLfzw}9K>Qw+T}liuXA z1#%>`fa4drmZ!obdqPBqvM3-v_^7PadK!8Q{I1$49~tE(>`2RAcbL*DB!keb8}>aD zj#b%K2ev65F4*0K*p&ex^zn zBe(NuCjLxq$PucCN8U*@=<2)CV>VJHizxi}_p(6R$mL(hUE;hy3$w}PFNp(Ct5>)9 z;K|wDV=mNV1b42IHg3&-{Pws4srrR7lgr|wBJ%VD%i=2uMmZuh>8UJRU|2aV{jThzO_~)c(D&+APaT)D)Q~F``-s!z0?mGNTAV? zgcbI)B7%VW_to~Fipbf(@UtRf_|JvuUtyG~EEBWF{UH7wUZ*~zIssbW_I zYdfv?W6@*O9Dp?HDTf0`RYGtaGx8fNtFjEHqP}`$TwRx2T^6IM(2l*zH%1))vz&qP zv5TBA@~hY?2z^=Nfwzc2%Op$KtO~3WZmUrVMaS5B%7D%Vz#5`5zcXk!jpYjD8aR46 z``j!x5JAOuB%v_yl~I>+>MLph$)wQ{!U3xR`cDyGCg8ws)*FLi4y_w1E9xB-Zk#&m z77jFf2M;+_nTQ+#OtFND1mPMkAKrW=Vs!27MJJQw5@p+Jq2`-Gwm#Hc*)LGR8392= z`z+;(p4bKQZe-q(ofYg0aA#q(ZZY9%3*@l~+9Cw9#IJtH!%3zhuw$&1RMNx+>p=z* zXF~Or{(u0K1L-DCC;O!h@KoGYd^=b z@nBTHZW%f@t7Nc}rER=-TC^`92HUkhW_oiy##`5>xLkn`sYZ<{pbmZm8N^j6m5J6J zH*pUEJ55Ecu>HD!41z%yep()BHHHg5T|BF=4at5*WCoDs}7QIV79Y)!Q6U{-Ey8kcsghMabaFcz*4=`Rt--+4p#R3;ugMz zhMAY{Ee%({iYb5*!?%E~-u57+yXyNoVTW%XrMti|2q?;vv2*GkS7ApHQp^D=I+^UD zL44qTF&P!P6LE5{dq0w7qy_Zc^4PxlqcU*w;6=um1s|gkVj? zdIfnYsQ>zzFjw^_-2ePLl|ZAW3iisF5THg*@&9*jKB4Nr4^Phj>Ek3ItE1!nzlG@k zp7!s$>87eh14DNf1<*1e*{|KoLhv$W`Y7;}cKVP?rN!llUB=Nzl-s2Gf;Hz>=U! zsM0{j`~M;GegNx1|gO+Mr)1rQKp kJ0p2VJ9{Sv1AF@f6!otO1DZHsk;)0%n&eRBYX7+Y7tZjMp8x;= 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 463/660] [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 464/660] [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 zcmZ8|WmKC@w>DPX-QC?GP-vmJOL2F1*A#aRF2$j^Yw+Uk?oNT=P@t5<^StZ(-m^}A zWZf%!_BAtGu9-?WXJC9 zU|*%N?zqQ^8DM1dMs?$tCFn&hF4<u zk`NA6(GTuxjHPp*0F~yKYy=@@;UL|eeW?6}UM<5O#1g5^pZfi(5GGO}ji=o~EJ>4g zce3*!xbqP60Uo?2)jJ#lwC@KRdk6%bomT|Y1uuUDX+b%h%j69vD8laJAn_j)>xUl@ z2G?Ya?FOY@b&re*8~aFe+W+Mt4xh8Nql3Hdjyxi7)3KhJ)>g{%DydAW=wJvN`x@Vr zv*4P{Ejy3+RCi$KYl^9eC%}qOduTE)IkclPg&_{BEjt)u%#v)st4IlCDQ6>RriZ!k;NI?-%fXr&gSZ-W+?$qrfnag_fwRTg z551u_L-Hg57wkAq_R_I`$GX|aiF%EAmPWF2jrph#6tpKI%42MPh5gaosM!JlGV5rl zA|>=RGiUDlM5}C4JE~O`a(9FvjpB?nWUcw%)!E!Hpm!v-HroTOs+vB$^|kJtbLkl@}Cy zLPKv)o0|zlD(WEt2GvVS%ZKZaPaxj5U{Ue}ddQuOW>{XpH6FZ_Ul#T%;%@-d+=bBB zeRn4j!p2;aymA(hC%$NWD&%Dzxc(b%_V})Ua{d@aARcmQ>E+o8~d^^Dw*lHjGb}HQnTL*^}$8<8a=1CqNe)*Xj=LbHqzd93J=Ad*Jnqp;8s;JD82{up?q{2Nr z6VJK)g|MOmE+Tc$4=L_~lGxU=KCls|8Zb{w5e!oJ1X;(@YLFa|TIm1&F$H_{n4&dq z&R)F;VwS_D6i@sKDRAD6xaW--gsaa|#7sg7IJXUC1L9AK4{;PPKO>mzu`XQE>ci%# zj;_l^4-;tKpvrF}X6qY6+JJZd9Am+Mv!ohzh&OAb#%V{Tb-Fvq*wV-C-Q9TN7{M5jxEHO*T`xLDdmTrc%^_1&}Pf8Vpm;aCEI?r z-xpP#F+YB|DDcap`VFLj{;`CRAArTlskeksbP+PoJF;(`cJxzTO4$f{jhuV%jn7OO zLT`2rYnORP*d#(f9V{3_|K{TBGyU0biHB$-WJcibAL4y``}Zp)cQc+=AU@1!@Cvp{ zer%iA8?}l>c)MuV!MMf}VSZ@heBDWAk*GXDx;WX(Q5{(9E{A*yHz@dY_Sh5f@^E}{ zmS+TfxzBrhxy<|fw466S{VCvWc)16-{r8OHI1l)&3kzCI&(gNE9T)Ih!mKy{kRFM|m({A#)pm>uPG)-{K14IGy+o< z!}8&ha5g*SI;HPj#2K&ICrHe3B-_<2=1nLqoe7kb2&i$cnsbXU_7R%c>QZ+mBU_1`7w;M^fW!ZEk9 z)$DFuFD5RZARP+HI?TaGO3vxiB4Ef4$)weBEF;s_oUZgO0XKo5^3kQ3;rHK|5QD3} zKl+`58}iZ3?}*)rt-VjCoO^IRx-2$Ku0adN+4@(W)@1x+owTq+X-*uC4$%4_RiJgCIDE5=xI`kX>#gUHBuX=r8 z?!~-IZO|k%e-LVUMEXuzIN_gW3j$%!zzUU#dHgM}9C}+8>^7d{Gg*b7sy%o!sa}KJ zRKF#lP6hfCBS1%PZRLFhW}UX;zLj&my<0`W(!?CT2o9ZQyfTu@Pg`BzTE03QMC3{( zm>!f9&>hXovz>KnjPuDWt1FjbFwAx$%y_9CuAp9a|LE*keV4h?vq>~gzmbXhs~I(1 z>20AVsR^k*Y7rC?-SqACr%boXTm{-RkCn(f3uIkh~XvNQ=94{5k7^h z-gZ*fvs0Qr7CKTTepQ9a#&J@$uVu~g*ncT`_;;bL!j`3Byqz($h54dH7V?|C0@v>c&l~W?$MIZ;9bA`CX)esND%|o-T*;QX#6u~~Ii_T>iq=OMYt0NOeyizYdBn07Sd?2gxWOtnWWwf90D(9HADWrG8C26F4wnG%E6BIus{nD|H z5X_b`tHe)+emhH*H;fx#Q%&Pd6%f?ekMj`xAh}!62x?VQ|8q!qOOWC5JYu9EqIi41 z%mjRHzWjEww5pK6MExFEw}jY4g6Up<3y(?8xi`9Fjsm0;**_Z-n3&&%P+yo~kC8r) z4idfxPhY1O>j$fKa!3{Zhbf zla&*~?PJ@#erFv0pk+K)c90HqKXA3GMep`rfVge#B_RIS6UbQ1u#Npc<7QVy zBPTQGhn=n5+I{~``2xUTD7@t$0({}`&{@u$J(7K&`Sd-WvW)3o{RuJPU+A+z%ZBX5 ziLI5@LCtomtS_cYOxW*pN+8#XU^0nlTwr_%x*9d>7)(p0&e78Hl~c`F5(-8@rg0O{ z#rw`l=&o6e2(qm0yh}0Vto8`SK$W_R(;Q?tC3NTSimt z#6}9=m0DS)JaF4Gg&PJ04C2CDZt8i*(MpGyn-fBq8Max7GS#Eoo0ew(1lf-K=@U}< zJAJkxirvbd*A26XGP(8#HwG}w3U8SyFGK*=%w9b#iv8#>H~XgKCBR!>$~Xxq<>h42 z#P8D{TFMEix@*22i{H+%y2~jPsP?D}H_@!h7x?*2blI6Asx=(=PAuGj3^HzKC9d2h zA@S&q*Z|$rKlFJS66GYn@eTS2moc+g1SS2axUPeAtnj9y?_JRNSfI_!b2UQQw~&?U z^W7$bjWw%wWYpfaa%4@2AhtLFUccXJtS6+6lo@ywfaG&2@el>UY_8JPpXsJz#~B~` zs(wpZG37gU|Fs07^wWG;AYB?<4^|63A;qE2z+*<7$Yx8lof6f2Uc2KGCKq=@kxMFa zQ;2`>#h6o$klZHs6kpyst_->A0S$N6+n{eom{-w;+m7GJ%~- zBv_|Dn0zz>W722X_S3bo`4jOs%LrM0HHGr#c=BaVBRH$qtAd1q0DUZ-0#p612#j=G zJKJg?O_d1*aZ0k7A%C7hQx0KL>Wky8Dmj z_^Y6+l`5E=n9lCIBut9_Rg!e!eV^ZIxFw%pCG9=930(07<>MUR zRpMr=!gq3Kb7+9CB7@rR!zL4qGRSmJ>lhZrEF>wC-J~f3cqCjh^}kd6iFiNEv1@%R zbO3E=gtI2a<&^i%l`{G7*c3fJD{^F1ft;hk8$dQP${Y;0gvaNV5%VO_E1})#m z!}1h;E__A4a&2YWi7_}XT5nZ8!ENb8Am@_(n6cjbQD^X~g<^9ftFUP`C)NZ1J&tCupDDBSLb<*yL44&=#Wh^!1or4{X(dH$Wi%^A~|Qr40qQ! z2xxb~euPWK?8HS=7!XeM_u;t+3}#t#cT_$EHw$Ap`^eW9Z+*Mn^);k-o6*B$d*$AwCDL^l2+WI{>VN|*gkV#@k7vg0f+y5e;`7kJ1v*z9}j9NpJ~ zy10qYH}SxC;>P*6Fubu#%*8A_LQt}GOmCvqy0rwJ#BeJ@N93<1dOU+5iy=cxA28cg z|B$Uzze)Kj9zt)>l&diNnt@d9d|VL4&otDjW>(641BSj+HC`4G!Z+vdb3noh0Vmff zJ_x#CexYkeH~Rj#oV$&pk-`uu-Az{;zPV{ML*GVinUq}Anu}{=Sk9{+=@aZtE0Ko3 zEk_Xtw#eLxCbXXb4J!WPuMN#E2bTEHXo$=ejFLv^qx4}s43^KFcS-PG98MG(axE%R|IbIMCi|~}gz4P>Ap_jpG(c6J)p#G8~kS?kGlC`k1 z#Z4K%J&NCol7o&(=DtT|2Yr*&>`!SY-zC&Efy)3`|psB#` z_GA+2dHR8745K5Rd7~o%IJ8;M#BLB4(F+k70R)}EOdcUEh6cc7lq|I@)kHj&(|;(s z2w2Pwaf3ci)<+pUahMAaoq^+YHI{^q=!}7x0}+uIfxo$R+7(b580SHeXM*UqS|MZ# zoH-Y{#9+_eBf({HiH=^;AQVk=yHtVBSu*O79u`Bm$L>oOg9!kzUY_GdZzlCSCHW>B za0M#jiEW?-`PVw^$01J!!QmGCUvnQGkn|Jz%2zKTeZk~i4Bl89c{`-5x+jVREALL{ zH!ok|@1t52KM#@((1fb9^9pubtq%L^9uxpWFj_Cb0-oCpLHdtg?oJN1hmMTed`;vo zyQ}NwI)VaF@=WX_WEk})WYU=+JTPEb*ZS)_uD44rW1g?)BNXS27EW&@MA-!*>QbQB zrI8=r6f(A`;d)~rLDDQ6+osC&f+B->s$?IpFQ($#Pj8Z^z&esD+F>BSUNVi?-Gzy? zqcx(TG~K}pS8bCAB_+88cU44d_xvkist(Q2!dYH3DV!4CV!n^F~L*)!QIw-Dob~6XABnsi*Z3xo0fO*l7{|I!^E$ zr?>4b8;ZP9=VmHlhlJo?*YM;NX`z^$ziVH~)ZQ^rYmj6^kIUxiNw~|QwQ^?zzYaMT zBy9c^aq2tlfQI0tBpfW>mcf^|iHHHz%DFejuN&&d)q9lK@Wog4=#;#t=Ijl395=J+ z8c+o@6>QBhj5G-|+DZDu6g-0rmRZAUBa|J1e;h02EO_<~+)K1u+*mSj#@SJt?bjF> zlX9~1Q!vg6UBt5(`z{J5l1jsXmY!UmEEr1{0jlU>3J+%e9I=I;rYwE0dDG;T=)nRB zH{~fcq9?GAl%KiyXBc1WmFHv9S*DoG)59cM>h+%P9e8|-lTGd0U{e}{$5suuJ~6}@ z;IFL=IlgU?G)PY|O2OL}Bfv>vkz%&r&59F&3BjE<7r&Od`0FUyEQ_Ilk5_T&06bR( zOR8vtSOdt6*WnoRxNhuDf{VB>|StuM{v{0DV_u6wLXXX9@Md#X1_~LvCOc>5-t&Q@ZkC<3!K*cJX^4@bz4Iq!r_nf&2@rL*^>O1RGd4-t z%Gb-z+?WP*FSxdOpRrGk;&FDNNaV&GRc~q3v#7G@8*G0*D4F&yFgOzj8_2AK9r@w?X*+>h zrSVBgVXJo~Nx&&jK~1H?4p!cZxL4Yz5Q7LIDJgpDGpwSk?@c+h9y-=)^MQPNBM6ha zzqb+gOShQhtDVY*AfiA(V1r62dz~`oFyGvyUk_m__LpdNWlWm3^fXA;Ow_Qem|i}i z2sEjd%q7g?{26V9sxs7m!};BW|fAmI~OVDAB@tsa26z}D4L9_B4Sbfxj_X)8SNjZ z#0NTNYB;5JX?uzmy4Vx~73sa6Pi9`|s^<8LaO6Fc<_bES3rRN_7%3#Dr`L^sshvek zH-WcXyxLFT6#S1$D3sJzbxq!60(~+!RlORG9jwI_aRw&A z6sx`!29>^Y-&UJv#4@^;uWImfwL27EGDLwKxGkDZoqov+jka1mruEAAEuL6&C5Ql^ zT+>YLRyY>L_qIr(v1XYcCX+ij_k=r8UNEIf;HxV+nsJ zYC1Kl@$&pD zQhn-%y1}}it6TK41(lD(c{D+*ZU`{rJi)HV;NDkv){eHZwkMkt`tLj}}8@9~(`uVw+FfYTG9Go$BloES0 ztKs_xPaT{A(Z@rA65iHeo-bOxQGut|BK4!p<%%opY za993H!_aDg@4G(4t}Y*E|J0QZaZJW_pX~spo43jcQ8qw*@kr~OIea&(96l#XiHeP*R8BrAO-Dzt0hVx(Ym!%?OiQ5zz72PJ z0(S8+R!AgHO55Mt8zq1Sq#^O}AHZ%NvGS<@0Nw@a7a!aK+x%{w8wZQpAAGC6lecfsAhB_Vp!BF!1WTd5AZ8NZi^8}_tK4YAy~t^lyN$E zBK z5x{T>7jPZ|ZnAGp_jw<346QQ55jTSLD*=-iTOS8vl5KOf469bzPThDd4Npz&L;=*b zogGK!Eq=F{^pIb;^n^)&qKA*IQ58BECuSk+TVLta4G`@}z=fnwG5*4fUF|qrI}a|Y 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 465/660] [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 466/660] 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 467/660] [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 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 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 468/660] 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 469/660] [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 470/660] [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 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 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 471/660] [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 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 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 472/660] [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 473/660] [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 474/660] [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 475/660] [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 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 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 476/660] [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 477/660] 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 478/660] [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 479/660] [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 480/660] [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 481/660] [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 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

      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 482/660] [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 483/660] [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 484/660] [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 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 delta 12170 zcmY+q18^lk(=L2sJK5Mc$;P&A+qTUUZEQQ)*tVT)u;Iqe#9I&7`uzEEZ$Xu=wg=8%lLXf^=HWQ|Qe)Cu0yTU*qX+gqwii&R)*_AD} z#I)EsMo>&FRHT)!+nz|2`swMFx?*;Ii~>&^GbiSn-$wI(g++gtcpj91u2M<7vB57g z^wd0r#EmUfmq1W%z#-HQVX!pplS2`?%nMz?1t_sIPo!3oPuk4qq&9b;vR4T;p@ABU z;p1Fv*;~xmY+Xjxw6)^w-!!DXe?W&y1we}0aqyYTCbm*mEdt22g|TKGT?{zMbut4W zYl~f$mn^s!i_$C|+43%y^DCbE(v+VHMSpg^<~51leZ%r+>x3~d-$NzGSZBhDyNVAt zcgIH>vmcBC~}mJ_~vQX#akQpB~Ub;&ipNM$#WvrZIAdssRm?{CF8 zX4ERH#s709LCcLgoX3xHKFfNMDl6v*4hhUV%Rq2Esg|nOsYNejE&dKPx)(g`w}Ypi ziT6cy7y(inFuL(&bA%ht@*_zqMwpsLnCGYZLHZj1ng2Rgo(D|ug0RUKu z$+n0jp!K*lCe*Mi+6O|q?PLr%AesijH}?{Q>P~(=d`s|e&N*uqK^p!~3ON8>QqoRz zV*<;=?5`)|cc%m>Zz%iF@2Yq{V3bNOsgW+Z^Nxn;xnPu|jVz`=zLSsQ&fNs?5{8g=uGHH{35JL&iq|2o=lg8Zh zBc>h&4~g95hR$=KB0)8kZ`+BPE3o~#8jvn+>#7_|twwD?|4}aqQzCXdx6rAURRe$T z4{JL5OL(7gu*}zH|FDindZ2~ndmB;Ghs0gW$4|j~T*2hpkL@3DriMdR<(${SQCmP7 zIneLwWAL+Hj3wTo(}Ve<+;NpxUsS~KO{3mpxuWvz$hT;3OP<`(+*Lc&$I|%dF>RK2 zQQ*GZ4)StsL>OPmf>Sf%e#UEZ1F!Hl)cJHabA#OjIFu8@3T1JzKmlz@tNR{?0@Qf5 z7Tn)wm0gZ5f~v}ygmrFAC=a2@7~LEA8Bj*rd}^b{uh*_F@NZ=HHBxM#Jd5Q6H?A)#_F<8Kbp0EGYXB2ZW;- zvm%?+&iRZ2E8~G0Ll5bX2;CEKOwGAgq@)>nvq+S>L4Di;g|i;~H=yaG6~|O}V}#Ys zx5TgQ7z73Ye0>4_)1>IH*ZyrsdQTnk6Dlp~g=vDIxLEjNUO}u^%r>%2nA{#qGS4)_ zGQYdXv54fT(2YzQVH6Db`uqSL-CrEF)fs-iAAtg1?v@o#78nITA1>mF?+igb{;vmp zC$|@EeV_ZFg(u=Z|F8X{x_ku?H|X{Cpbh+EJti0Q!u<7hRd?d?b^Eey*ys0IBmKot z0;Kn?NYdeuULB(TNEoa}=q)+lFweIf>U8He+KjR`5$DH8ZQsSP;B4p}@emWJA5o3mzSyAYK_@1Xq>app{AzyrCB6nx47MYb_hs4bOknK zdES3rXg%fx-Vj!YYVk~_%I@GZicflEFQgPE2p%@G60|G65Vs3yf@DZKbuG@pMnG!v zt{El>@n4b(e2*>`e|F}nC~ZI%je5E}Re@WSQy4B^eep5q)PzY~n)uLMFojKj`u$F0 z?}($nf=8P4Q?=iB!FrCX-b(rBb1)@@s(*zDjsT~_!yIT;ZTo^xlxa0nRy7nG>$)7e z1jkmXfoL5k^)x&)YFp=&eH4~ZM)DaI?5B1TY6-AjgQgeUQGI^eW|N8B4~TW`Fhp>h zS6H}wyPyUd2~SF@EroY%siu!|$_XW)go9T;I_+bfT~N6LU&~^2a-|;?7EAlq*+AIsb$XX?5!J?zK z1r|-(l&Ww!Gg7gsGFoX8 z)&M9lQ!!ecx1zKsWu-CMI<2uKZVAp9kzT<7C1y5_FK)q#8LvVH2>a_sD^?>)!=?oJ zWD4!OYJZVN<*-!=I`BAO(;&SPQ>P-;XGkt|>94bsMD(1DI?t+7Aw%rp@w~xTv{EJ? za)%XjR*?))bVI<+noTm@gX)FgCnFS}O$bOPXA1LuzC>{rnz$S3dx=#^KYO`aS6osf|3a4d$-CuwG1M5JesKyw-rxSl9%C;_1s9*jJu3}YG%Az_-G}?0|1D) zq+XxND3yUkoTITRKroymZ}h$7`1Bzz?c}LpsO)>rES3IRRT-=@cYLG_S~ffSTC~5UVS{UB2IL>zQ`#^i;;Ruj>1CaxH^&y`HySUv@#465HA<2G8MTie%*GJ(P zU50TQHrG-R`TG&yp`duTBNy0a0YY8Dv=e&!0JAL^AuFFq?VEp z$b>3zBE%i_^f=JZmrw%jJ55-2;>n_yhz{<%WlE7+crUY05&z=&S-;>Qa#GsTr{~u+ z9|zH*#M};ffx#{YNso4%@yp&GSlA^rLeaATZ!C2L6knxc>sb=Z5#LCqR`{*xOBPg~ zV7uDYp5qGJ!aSj{v{?+qztx}y1~ekgfv!A~H~V8aaCH1LS*;eqI3JU_`UNW3@%6qw zv13E1E1%%=nV&$|W9#^lhcRVEk`Z$I;J{&1OtfyX2&4ayXNB(}!T2vs3jXh0DLx5b zvOz?~m_MsS`G}!;Lh>&r>CpNZ50EM&bW8k`bDgEaowOj|1@llEgE%H}Xc0+Nc@)`{ zu2TCov2Rj7kPzHOf7u7IXuawrnNTwngLj-o*dVstG`OA4<0GVHH`mD;SaZ zs{IugvdH9ghvnCoX~i^dw8Oj4*nJ@t!K)j8jv$7G{pc5Zgp~vlJV3gLoukT!+=g;8 z8Ia302Eu^uJ5E`uU>3#=A(L5h*bH#bmM~zQL*)-jbyqL!zZ;SdHv~$0kmENC2WtA~ z830xQ(&2U*Iu&#=mVt{f(HXi-`NT_MDcg3UQfZCwZA7uIA`t01(z@Vi*dzr&Sv zXgdGsOXT~L9OJxL^1ACmT2j6VM0@t<@xeJ(;~@6Im+xN7aw13PC!d-N&FVXgAl%## zQW7m}jF>itUI{A$uy`MK)1b!`RevLAqxirF!!QeCH~@!yIC$VPYz^&B;%;cwD!EqO ztB~u&NWcWE`z%KxTCGRZ7;1&Xk<%=_$T7T^k=Gw{9|)W+A)BP2rYOQiB+HS0r^nN_2pGs*Ta+FhBb|sLDRehLa9A(`N zshDlGZnqTKq&n8Re*(Dp`$0IgWplK;CgRCI@O_dfJR^&YIsC~m%w4fOmrK6#Oki-$ z!E{MucHuu^ub-w|*C6cJtDfLw??C@W6<; z4SSt0h5pK$HDSog0c}rXz&9o=a2PK9pxbOnYG3*<(z708D=tcPs?q#V_BNT@CCAnz zy@{{GdhHCJ#GP_e&jPbs^-wth4}f{gQo0ScsA^|(0?5pL4ZdsH3ZZym?b2;J0OH9w zgB`bhLDTT$MXxq32#*x%#*^ak7g?`AA&0dkVm6rGCZDPegn=wOWkK4v3GaeNw|Fv? zFy)6>UD?VG>PFi14P8~gHb@2*(1DXr1}+QD`;9)ITLdt+zKjQ)-CE#Sie3>Jdt!Cl z^11Mt@Fg)mU;gB$Umy?B=W>A%01dzC9TAawVRfHD7kdvQjgK^PEq0tAwv2HH7~!3V z%j$<1!LD+rc*ZOB!f!o5q6_Z9A@-R2idovkyYdaN1p;x#@5Dl(w&LrBz{&E2ey2CZ z>T}4OFr4>|^FZHaI?TMoB6TNEYmp2qc9gUcx zz^`=-pJsfu)m!Y@2n+=j;q<4Z$8@H=8&84(Y&S)7te%oYIq(UhzKknmn|u%s!Rs%; zEaVt~9?83UNBdABQ=IG*Xcg!S*$I8qyB8ARFRT!XA}|WpN5)|ca07#zhfj=*eu*YvZ`v_Cshw>X=5pK>-jv(;~3{=?S z*FwvB!jXK7S-EVtWtQ6$NA#3kIZJ^Z??O31Gj{rCW9LJ6R@dRq?xsE|{7|-pn_X^b zI7B`z6rGW`_{l&7wSkhzB$y}!La=H2Eq^>+j+oGYH=VWB3MFV+qJt!)^uSQg>pBs~ znjSf0PB$OR)yL{zf$(Ap0o-2FOj`q!mZ2k9*W&?=h6sg8~o%H|Mqw!k8Elq={~)iS`K~uYd<#oDv2EaNDh(+9eI!kp+P?pu(p%6>ZU7w zjW?bzva$2$40-%42l+BZ8Vy@suYJNM`^IJJp!}@=j`||0@$TR)Qz9CP!;x6?Q@76t{ z;IPD1Tp&-Y{zy-p6KiUU@cyrUw0Q+gSIsOe5D=7IW(45HrVM6LH3(b{POFA)lmruH z=pXo|_5@=p2l76i`c`oKo(MYOop?wMDuZnR$wKire*jvlWTy5I9b~KP%;h9E>kExL zM>b_g?_tYi%a|*wTy!rK+coN~8W2={wFjF|_gLSkuoj_ff0v-REM1&n{*!KgJIK&& zG)0o35LWNW=u8Wt4APByEu{JVDBqU9G$I!&;#W||xD!P4+RTmG=Dr;d8<-kIV~5_L z+98QE?ujm<2TWt1ih^)^FmD2$;2U8AL`_Uj$mm1kG7@U%rxIKuvSP;E(dxR1>FdBa zlEvA}OA8=m!2_;-@4K@**O1 zn$}8FO-0cww(h#33E3z@N2HJ043e7_U$rz8^3m$|<2f%W70i`n-?~NNL9apfU8^e% zrEUlU7k%XkpR1%+H4IDwP7nc_Uh~NW@X&NaDThmkqlHu6571vu;4b(`p$qU_|HX5*~LaI5+NU?qx3JEDcp~BdD8dYLD4a2<{Q(bNM6esZA>|r=F-gQqA>M1Q%i*rvz zbUQI13H5q2rK_x#@*teuKAuQTO~KlQ6j3T&1r0cTkR4lcS|Ig2K5EMDxnE_SW;a8Q zP&uhJT*PgcC^e`>qVjk%O-PAbSXIfI`S#bi;F4v95FFlmUWv_y`~>zyL!!@Xw6R=d zK}JK8qj8p05;ZxR?oE4PeqjA!1D9Ns?ou?NhLqBjhCZ%EynXG;pyqUgsR>;n^k~>~ zzCvhFuGS>!ANP5e;x_jE@Kx-vX=dnKFFAQj=Wd2yzXU-h6vEo7hSKKOBvT$~*tg&f zj7fnZ>{fqW0@i*hp~o$vo1e2=HPXoCkU&I*j!n<(DR2$%NXf+0#R07!RaDIg9N~D^ zM|kRBnDx?T(yFKUUr_nU%g=MeW!bk!oFP0-{CJ#Un3dAPxxF~9Q6I?4gMvs;M_B9< zdgX%s6<0tl3%~fr>)j(vS~%xTyVEJVEgHBCvcsvr$>tl!=E5+vkR#^PVR7rbCwAjg zps};iIn$OdUC&- zx(X_#Y2r8^M3uRc6d(|DvOCwFN45kez3Ho5hMj1L*{+n@FO;HU#gty`;%zh+TlZt< z4hzkbF(66^Y#;C9xBEa}-2QJb7iV8!$-k*e;Rmo$dlg^+fKig<03ZP<8lMxh5BpUR z(be;veLtRZYiGtTd6U8{H-(_3^;}tll_jYg9|N3{`$2`exFlV~kw0Z#2m-0+J|2#u z`Gj~5IK4t%b3l=8C!^zm6fODLQ&#qr7vOW}b~E3T;Uk%WFqo8P*sFBQpA)l^L9vhq zvgM*?^HY>ci9s`mb9ezE(7ns9=Lfi;+5dtaTY-2Hv-_DwEX}?C{o4p^SYms>1y|5E zRm_;wAbI|`F#^Jnt&DH9B`P&IA=SZnCAm55^#a-q^5u_OEZOzIC z%AXDULyaO4KaN!{2}##(jq{j!iS~TwpQzE%1FT*sKaQ~57{ASdG^oT5ptVIE3cgr6 z`HEXEf)InGo|6{p84OAaSjM%v&j!-8|BcL}Fo@-HNdA3}DX{bB2EPG*~)OK&H zBqr_B9>(ya#m2J(w1#CicpQhZg%~2-lSDJ4oPbnyuA(ZZMaFrc6LZNT00;zEp^)DD zHG-%(3)|QpP0hVCyiU0Qi|!bPPG!`tMuQ}y{#+*z^jS(C)yl+DoT_gWsfDld=w&ke zORn{uw%`vZ31c3=@8|W&U3ecq=>GU+$gr`a<-4o{45g|n=<-jz;n&9p_LgDa=k@6g z=gA`QW^lOg{be$}@9T!=p?+@zi?P@L_Vy$hd)xovNHLypZJmHHHTtEXLNvc{#3NfE3n!8t1x=`6ep6~}e z;XZi8edISH{b7zIS(oGaj%Xa#M1GHzSS3E!HMykm;Q%URQt?F35NT|`_*Gspeo+FY zM&^w+xYofB3$k{ozcyJZz=&7#--Hd_F_}HY*lxk~(dKJ>tt&0lk*vHtcNM8?T{x<4 zF{3yj-!=hPtyyE%$)k=rO){fY!gHBw+VS7&4>?9)=1G;dOEfO&u(ak+H!1e@mX6NB zUf-xA(YA|U@WeJ{^tldl)O>Q|kmYyS!4HW4MlaATLme|Eb@fS~#lmV^ru%%m^wW2u z4RCB4Gcw%bzvzX;^|Qexd2D-}Mpd>A<}(fh!NMbAZw5zTed>wjR_WMXrev>VbD%(A zN@(<8B>#;anTc!!zI#p(d4jn@L&fXfyruADQ=1=&1vSAv5!2cFSmkZ>J0(@SE_tiF z8vJ?wdaJZpFc7FS|81Ljr!)HS_#kYP+3goJL3MR|oTu2`aKK8Maybb#(k0^Q57|8j zih*G&Usvt~cG!UZCVS3e&!F2#A*bJWrV<3Qti{hF>WG?e_UA;&J*auHQWcmMhr82a z<xoOQQou>Z;=}0&qz%$unVR;=q?uhpsgbS|;hglG$9GPO3 zHD`9m)WZMHl<-Mrt;hsZGGSyTiFZ?7?R56GaksAQ5ih1Ek8x{?WtwLS#@?mlolbkx z9_`EwUu042FzLW|VLgpSL9-Pn1GWcIQK`-j^E$k=*ub`ZCug&L!8pblTK0klb&xOW zVi&5md*DjvIXrtBr{Q8ZhKr@}=p`#mKr<(1_@)fg8`6VPk=W)43hik%15pKZ_Opa& ziL;$i-FU~nSO&p-;gx z?n6}zQTd71TJ^&NM`QA%UhmZXJIanxqOuhjrc9GQ;Km0sZt3wCHF# z!zt{R-PgTdy;VQwD>RZ^)wh<30&RN_n;#Y}{M3*=3PrQ$OFTaeYILuVd^YRn2>7mh z$dQoO{x~R|al*H_wCTdyP?`r6X_v#K%J7!A;eQl-kkFbM9nkoj^#Y!3x?2C4*?$Q} zc(UlMb1w)0zz#kcj*%L~6Bh-($wY!%uPIY#N7ju)kvf6@FB>j3(K=sxaoGG2B2Sce zcf+g63gUPA#)n=~fe9s3Yl4Y7H=Y({AN1K>HwXpaJWx0y2d`29F?a0#a++7~}X?P%zd|1Jcv#T}uIsgcCj?@fci zcD4BL-|7?n;*n}-iVk<`mHM;)bk!ulFC&&C|3c&(NSIQ`Lp=40Ob+lsDT__g@i>Hc zB42fHCe2^amzad*w4@N~MWp#v$mPHHR=^;ZB_746k}aTin2RX^6MO!HW|kebg;a|l z_C;9j5tfC|Cba|f$?G+YNC6i$(VZw)*)McT;-Wyt1T@%(X4Rp!`NK0s!|Ua21I4gj zL{x_AOB+LnGIO}#8-Q48S=Z_wRQcV5cyj+Bom-KuT?CgGilc=YQaDo-3a?NMD%(hJ zoA?n`7;JiveD}WhXOH@GLhlj2LV4^1Lq5_qn!& zS*hQAOQky%oHaYPXrvwBi8r{CYroUi30x7yj>yy8=(a_GEb2eJX@`^?Eg8GRj}{ca zTftbtRr>s@ADGR(?la2;^c_j(Rzq}eH-*rDG?e$@r%4739cwu4?M@QB4m)0mu{Sqd z{OPB;(Psv^86u1O1hFz)qn=6&DeWelj{nBp(;n}La?RE$xR`PVVPu)Oya5^1rTOBFxB>J4G zEO7I|8#93YcYX;hCAk4K;c%E^g9$As%d^4i3gV%g_5Q%Owx0RPDp4bNT*QW4D0KAT z%L_>Eh=mY)=?N1gdPedQN4TH4cwIg?Y?T=j?=}c+vQ7FiY1aeSv^wq6RFUS4x9yk1 zhh$)S&E&+0YjthbI**u#V&mpP0rE`4vTD4!*B=60&^(#*#BZBP6KE_uqyIkiLSr~w z*48qY?#!H7YST`YZ@0u2Alajqepek%n$ZYz(bQ5r*;Xt`pjZhQi9F7TJbss>`-1w9 z*db3E)S)N*``r!_0|1zSWE8n?pcrjgM|@7yUhHEKs+$c;OiqD()Sw3mEi+j^qn6A9 zQH8#Y$q;25#d6f`8LwZpUE+|sLNM3Rt`pHVqUFps$aeTR(t0Sh8>cV8or8#3yCQ3H zdgS@;HtU_42v^oz{zuZeNw=lN`{(UZ{_ofZ@)g?Y5ieW&w<9x?N_yLJkavj=RZycw z=g)7Sr_;mDS#xW4xJ|Jc-Q2vsyw=p|`^qIe){LW9TirzQJiorqR_Lm`Uq0;oyd9no zI(l;8Y^Gj@4e}H>M6|liJ*rNBg=k#-O^lo)wAY$wO6a!F%w2Z1ZadFExtM0h#??&t z`#5vpGPzf(_O0g3?IdwR9z-?GlzlreZx5t%gmOJ)vFBzrY~S3f`!rV{by#h)tKmPF z{UN9%&zaS_o>Fh@5z%TiA6%wwp~Zk?)h?C-h;&#r#9!4289qOyuOUgPH|NmTEoEgz z=uJE+G_vJQ&+r?d)ZMXE0#*pS%~xYJPY}SgWplE5Qdb))4{d!Of+`U7OV*}K7WRTP zTNg4G6;WSb#Ibk0$2-)t>OYZSyMt3+qLN{x#MA4_cmD({>zgMw?ibdU*E&}UKj~HY z#21gtb(A+=O42Gv)R>m4$+Wmzv!BJN%R6u!#eO7Npt;kzmi|M)AXxj=V4{1G-~b`x zbJ|xFPO{W?Z$FneL3yDykh965y5@8z2jTLjcfOo}KW86s7jjUi5d>*Dv5o38Z^{-{ zZ3o%(#fwV;L0uMk>@_=?bdFfEn!&hxAgPg1l4kG~n%%g4i2}QmCChsJpT?7Uf(H+; zuny+~?3ao(P_FQpBKB7+m!<7zwILY?>Y*=mq9STfi!Lc)pnh#Fq!sO?gYPy8Pr~X> z)y*>_P|PZsD~>bh$}Mk4`pY`(;!eA1?3tqel^sO=jh*cn8BTupy?e+B@wc$^Da~Lu zO%Na7E@p=kP;ZC7?_tkM9c$|!qqnW1wouvDBIPK5ulh_la*@lyA6E#0k~(0HUYsK= z)@xQJz0|0R10f(JIJ@Z9X`?XKzIw%24``VkOh7wi4duS({uGCJLajc6l_63XIujbi zL~}fo&C|4rEwpc(_I+?lN>Uask1tl|bEHkWn8D^Xzg_e&a_FC7Uq}!TE05~TiqV}> zlT(>abw;L|O>DHFY(#v@;&0+;xH`-21WJJ-aLAW1Kvr=J2V|pGs8wD3M7&1zS`Fnc3U8Ko&X-G*v4hm;D zzAlvxfY!`bcvbU)UwVMk2jF($t&NG4o_^V7@^-l@1{!xpgVeS=Y|}C5igdQRg&4WS z3J5{GMK^Q4EHXmgWHkiH8ulE){1W`wX=}eX>ij9*#~=D_WDh#Zj4pv*)V@cE85H+9 zvhr1RvyvN?c$2xAj%|ue{Efih9@V1;KV$-~L95ByL}!ta!In9bEm`%zd;8X)t*Ddu zxMw&#OR%EIZf5V7aq1kRINZy!_=?Y|imem-B1__!D<^IOic}G8{nBd4O|xK_eQ>k)i6J&MG6^;$>W4ipHoXL@ zaW?46mIU|d8Mv-iFvuSCTA7v+6%Algfx>6$2Se%j`-?y)_oD2>J4>QO9?juIG1q{V z*s0>)epAYS8CnFk8D$M8G#q-#zIh*jR)3PXv8f*MZ&d2*M3j>x=un{J7XPWz7ZGhw z{>M5Cz{;mN|9+R^(`7|7!#HI$f|KnEDn2aST=hrz=XNZhe;VeS;5URDZ}=i_&{OAh zaeMa-G;Iz#!YL|(5tp4p4Q`{ijd51P=`90qf*^bt`_F4(AxlR(E@)q60&7E#k}5N= z$`RpLA($gcZ7!W}z&L@`Jybd}Uq4Us5a;$Rm~FBIht$Juu&r|H#{Ol3$ttigS|OBD zS=gm2)b@nxVYpQE@7ae}UiMASpeFofexc@p2gQ@?U@T>`z{)?!zAaws0+sr69{fW) zMYWcLNOP)lOf+~8PS;J&3HZeDt~cO4PdWBsD6Rw$--a!69FQjYz54crH#AH;VCU$T6?AA0Oy*0l`<(`jtvfeQEHj%S99 ziczeesZPSBtuo`1C6BKGk-JMjG^pl%6UT>!udYrmlTDUPJ1WS!(Kcnl-^5OHQQvlU zosA->&L^%5aiIy0OCU+mAA72TolDG1(Ad^$hY&-prALfsqp)+5rULvA6@SZ=g3YU#iMNU;gqFkMTO3a%N)wqwbx0KfMxn9?%=;4d^PRx_JctYX8puk zOD^Fj1x-7w^Pv8Cf_g;`*0=~plTJ)A8>X>Rfkb4(7EkUvPD(t{DyM*_*j%H2y-aV^ zAA8Z(a|6Z>-%aOa?mm?1Z&M1!+|>{s(sTw}n}m(luI)PKefri3Wl{+o8<+6%W_WjU z3VgWTeQvtXqU1{Noeaz@$iwc_P5L!4_dIHPfY?Oe8(V9aNqalTrs97er*7k5yfO@- zHdZfRBoJX)_}_uVd@gz&C1+Ox7JvF%b#a`d=vdElHXZC6ZKnL;+w3qqx)t2xeUj;R z#JB9x53iz5TYc!XpQ<82`<3%Dr?A8)eE_N$`K`lT=YiD|m*vo!O9a9yDWE*Sl!B)r z0i_xhpc4c&TBM|5(YUI;D5t}b-6S-UUo9wvISkW#(qDqEd)W(&P&{n$w!bqHrt1Zj&ANF3q_a`jWe+$KXwxrA0V0{nuYND^53 zaeobf8|z6ct56-U1~YcP)Dp|P3BmY(5AGHc%zTFd`$6Z*fTo0Xh^8#1gboc>F^P^A zmJ)g#gPQx8Jfax*P7mm<24jHy3uRG|5{-unSq3Zz)FS-)hSR81&bqS{8mn(^2+ARB zswM&x0^1~-a;FE$%BC?oVL?FBCj4j(d@-~JRV@HYu} z_`0E=Xy!Tkt=2JtwbyXv3;_Jp3yLa$mom`g3r8d$FhD+XX(1RK_1kaD-&f+VL+BBY z33(O6ggV5kArVSdNz{^6VwMt8(6kDol}Vh~MIZ(~r44hra>mi_6>uZmN{CQPDBq2?@1Y1HM9D3} zj@)>M`7hkGN{Ac`^199EqG?{31`HI!g!yAz{vD^ltL9Lu zxa##fa zuV?YUc|Yj>`58jseQe3fa*E)q?8$`uG|7{4sQx<^Pt9B>x@UgFBg9 zo|fQ0k3r!dYSacC06_cSs{t~3k^|-W!HM{j`{el`Hv|EIWKv0tZ%VRI(Es5>`B$(1 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 485/660] [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 zcmY*F${yPgxdfSQcuXE*2nc;*&qz0E-r8;`)_`Brvz>Iru@N9w!`- zstZ+aR$11qHn}%wTLW+eC%q>ssCW+iT~u`VSI0XhGVXM6H|O3zXzFco)&ecw5BeMOg(YUZ-U?s4UQ-q$|-$EAGEe~4L>&56kBRCwJsALc;V)No&fzDz%(gu z%L<~*WTTpKN~sT6(=1QKM}&X50Lu<|65%9%(XO9iKi88|aV1CC#VkL&nggEssY0d? zoS4Gb0*T_lZMXITT|`XXk|{O)Uv{u6ol8`9=Qa`xN(s( z&rA|_4-^3x^Yi6TInVL`eab^j0Q2TfHI{cDTFBJ<@daSq%@*NTy7kQkH6E6of5T%a zIrxVgmhV2w0q&C?Lw$FQz6SXkF$F_#&N%zvJ%eL}-k*3uG*}F)*;p@N%7xpOnL1yg z?4qcf&%9W9Y1nZQQ;vpYYMG*g4fuFlxgS&c@R_{bux~<*(VbjdUp?Z(*F{Mhxp4W> za3hGO1;(jRP%Jv&PI!=iDZIc#5`M~ZENRfiV#WxC$jGZsu^$&0UAw=}BCd-zG?#SVnyFWv(7+g*VRG?l!a3ecrU>1r1j7A4bAL%Vru z1+-L==fd_1+3!_*G3SiJDJ}EfqrJW*^QLQ^I&s{uB7~|tMMV{6i+o!fIAd@AnIk!s z4nz7tmDzEDkok@(oL#loBL7B1=DlcSc(ftH^>qO+%a^U+Ym76CCj4tEuOkhjRQ?ox z(xJcIvM}NJsYiMz5yrc@m4_r>=ND^sKd%*0?rr9)XaXlcYMeXWTfvU_gP1$7V5H2k zf%p>z%RMjH19FRCJi?6yFPv{Q3uetDMC{Edf63Bc%-F^fE zU0fS^vRAoJT;WJMk*{QEzOCN!0x81T5pbJ~VnnX`GR_^BxvObxluac|S+H>r7nJE3 z)r772Ju#gdyOeFeBjiUZ=C}E6gV~Sa(<{<%EwGx#TS+HiXORxVCTvcr&fOgx=I#}U z19F7MC#Ts8r_5(&-^3S)ha(!f_xUirXOE8_4PL*uwc%(gEtN;)&CdYKPKWIw)7Y^; zIsMA+?}FF;P$$y_o$KGd9qxhAW0+bu(a-k|cCsE}Dn^lGZmzTDTVo7y-IK0~eqx4s z30r6$P_#P0;zN)Fk)4cDGe?pT)_G~3E6_!f%|5GFir_+_mVOix0Z#p{op^;oaUZ%B z&{)_-VPz&Zz<+V2a_chnjD~{p{EYJ7l45e)z{uh9F_ropB`5r8B}0_Z=UVub*Ik_O z-s$*Hrop1CYaS~u+neC0>>0+29`i}@j6Vs`$6UT`S3$) zc6Z?8?`v1H=ZfOzDYylY0%iucRPWfEVrFmenbhE*3BlsP6KJ_2Yqelo=Nz)?%Qf5rtRAm*zo8{+ zW#`C%IjfN&dt9n_FEhKch1-03@aC2=W7mQz|7tehr;lKvja$4DcJfH{Rrwuuqna(kX2p3CrxIme|Kodt`(xGK`irhe@4;1yp@QU=i(VQ!sdm5}tU@OMp9= zOE5_6ljoNvpq(XU-n1ba#@3aJPpUXPpHbU4BFjtUmlu#W8@-NBUYzd~DPtyKja2{X zo?FpU92di*JX9ns55iLbjuc$v3x8(CCtv24N1jvc$fe_f19W>Dm0x|rJeDkp8@)D+!G ze6%J!PR*@glaOP(MaXRzrWPxJONbN8!>IAVfD6Q7GUxtYR~=8%pityRb8ea~n4LJW z8uSx;uY9Q6H%(w#jl}oV^n-;Njpp3V9+U%h1XCM^FO96S+u?L5`ogL(d$&PRrFTA= z#IwWDKv7oAIV7PpjH&iB5=YT$T?LnC_#HjgkSaT3O7r*kP?W+00V1RZ`)Is=^dtpSQ^;wyJ@uEU)fX(}h1JG+v z;WXHXMX5KY`gcJx0(#g}vTA&O{|t#gXkKY}T@fCX8C*fAC1Bur0ZPRKmorCeI$HWg zEoAE#H~kPzZNNzQ$auqN?Ovw<20BGq*~M`xFv%agB-R>vM8uIq8>!@D?#6-UHE=RBE0R~^Ha zx{3&b0B?v>p-4l^x_AuuD!I2%f;IZn7l3Jl&kvHr^sB8vEo}Lh+x&6d$43@?lwy-Q zWS`OsZc0A!H1OFMT2q@L=KD4OxukCPaVnlzo6@YCjKqrde5xo5S5Q_8(011Uw|xRg-nVmvR6p6s(xaw3rZWAeLCK6_={sD9nWz>{%6=G;8njCa7t~oPT+hpoqxz&pSlKb&W^6mi~S5{TGXK>?CK-doFN=PS1>j zdr%5;7drlWh;U5v8^EqNit%H_LXh8n8o><5btT=UDXXi6@M7E(`R>NT{a##aFD`Q#K{h3>7TRUlpk1* z->+xTT<2OFu_7kRv#cQ8hV!dGii;yFGI&E>{fV0$M`G{MT`|EnMVY&^!daM*0{k~7 zLWuP2;*)}pJi-ogljl2`FQHIPUo~=I%vBD%tgFNWUp&#Per|E8P&NaQ2<$COsUz=V zCUMAINEyjphLn6R6Kmnzq!3uKl$5sUgQ;%v(+c&TR_@d*bu-6T>rM5RZTdh5j(~;i%Vn z_Kzmh`4a99y*kySWYw-O|I~mh^m}Gp>2T=&#n^mnRXXBsk$W@MFL3PDrMTK@d*20x zQm&fctI3-AuWx5K<`ZxaW+P;QfEoOXzmuOLc1?aDJKt3;aSAOnyqURwSCKKSDPta} zOUJACyW8K-6cf0ok;DY+#?$JyyqlXj5X2UzOj^}<@j$&C;TP!+5hK~K`0x#xm>y$S zJ;4*et<~Se-SxzG^cP^|efu?HpY+VR)d~`LawIPW;(brCa5a33R^?V1wxXB6h~zY0 z?Z0&yM!3z{K?DFvMcya>f9L#Bp?JFTi9P7~k zz=2s;Ftb6=8&yzyWSTjIg3<@n3`mx-#KGiKTK_4F`@+u=r;lce2(O6N;@BNQGz^Sl zq8R>z?sb0FkM?w~O83mXIWV*iz<9c>;8K5x41C%J5<#CJM3uCn!~?)U9C{3$_TbLEB&EmSw?=px*X01M1amJnKTddV0jTAF*I}+bF&0> z{%3wjbVtPNe;Uvs3YTn`;s=U;W`v5afd$p;ZCuYsK@hHM=3GiKIz z;&6%FlTJvwzDo|t9)LMcq%mb=^B9+NPMIUALWQ0tLDWiAeSaoz&Jx?vU^!RV8#l7D z5Z1nC^#Af{02z@6ako6Af=5K`*qqsGLAWHFP~HDzHw#vMe@hT85dJ%8-%N_m+YaI+ z_@}@B4A*Y~BQh5_%R-`=yC3xJ2kimzF1Y0$lgO%|yencuJh6X0Y(lC`0_RfV60KI{ zz?iNQLpOKiwHO!(TpWX~X@6s}29dJFs+$p1z}uzwstY>F7q6FvNYFq^Cw=mNs2FV zf5Lj~9M&0X+f!BLP;w)0y>AHlqx*wV3YeEr9}paYDZz9&O%B7}wp_lP!rV*w)NDeE zxO})8voEoN91^sZMqHAfHSH1$X8SC4RTQ~Q%>+@t44}aNnk{q&9{O^+zaBs-c5oNA zy>Bv7`?n{E1oq7=Jer}o`_iwTW_%;p4ac1EZhU*Y>Z%MEvUP}E-9K()l}4p=~|31&iom`=A# zX6Inz==l~|$w};{&u`iO$$W4oHC1q(XeCm7>!fXClmXI&W?``ay{!qoTL)Llx2n~= zJ(K{d`U87E)cF0S*sJmF($jigCicJtcj;AoZXC#R0bo|9n*M+5z9&w7>M|R>Gshry+h8}_mq~!EMO$M=rK*LxVScbXG3nS`{(D`q0`CAw*qVwaX1otI4*(be{x<9&AbQt-vZxU;a~{rB`Z(eo%cX1<$CuR$lkt*;gd)A_H?gj-&T9dT#r zWd-34R>7o|zI2stbdEKQ_gb&9^l9zHje;d8G{TTcC(<+@wuq&}$)Qahl2d%x@DNN3 z))@%6ghGQuH!0r$2(>U4uPp&L6fXR|xhek&?2x*Wu;)RRkc!3fW<}N}c)jSO{3OBG zI7WnwN6~MYW4Y27{gxYUg%Ln-T;C^4)9*0I0UOrRZtNF`I611}-Q6rj(x})&_i^xS zt^mM5yi(GqVJ+T+!)c$C3|XAY0VnfA)krS6Dygy(?|o|_f4{Bp9Dbaluk{@S&c^CT z4Pm6%>5O_(x{P|}tml0Jz9gPFQ8~3E2y;D8A zU?7kYHbt7f0-sHPsTBu(@@SlR@D0AOOI2L72(OSp3+0w3NO(U~1Y9wvq z0aJWgqf|5XLmM;_FZm)^e8j*S(+nJJNFPl9et|&=MB$>lVyYIV6`$Ka5neViKrNl3 z<#K2C>w&4}*p3!;o?#zbX&>U&(wROD%aMzXx{_<3zvAj*B}Pe{Lb+ws24~X9Y0Lby zndC3JnrYpS@@m{R5zyYjhKw>uBhoKR^AiVx*12ZU2P07EKV6_*Fkg^^ zTCXJfj&}j|OmAE0`u7(0^i*_|Ng~#la!M7AQ18bf-i;nU8mWSATq2d8M??oJ%qm0) zT$JtYaAjAOTpIsE7$d~$FI_~ephGl$J}tKVCk$=>TCq7KK?1#36@6xi*pDywCgp_F z@yGRcNsNk<`d;19Aa4N!Gn{O`r=t^TN6civI_e4<8ecj_jT+8=%TpBPFb-%BpRpg+ znT|t~y=B8zD*5+uSoI0o6%9iQjOJY?32wlaT}>20Sp6j4@I>Ul7grEH8e$8X;H@bp zsHu8^AufRKE>S?4SSqbBb=)~#pZ~pC#H03Bh$=wlMFkgG}Db4Yn z;Whe5I1MnLF*ZXzofOecOJz~&vxKem5J?C^nE0?*@dzXPL>w}R;9-Q&^g{~9Ak44{REvt_uoHuXJ&iEqF$R5)D4r26 z?a|$KVxrQCvE%=NV0#)g33?LJ`lJ6qVeQe<_H@MxJmtHkJ+AWK*$CO?AAQ@`Cn{P= z4KbFvLxa4s(i63i_1n2y$m%`%XPiVL1tAkp-J_+V<>9i}#LSt$(MelnkS=Jr3$;PqV{BIna(jVCp@Mp+^COD(mD=5Ql~DdnwMhYB4u- zFv?cknuKg;Em_Ki8~%N9eD>jUG!YoR(}}0~ArXs+GJ`%%Vt7M}>2@H1MG4Q@9!CZc z#gzD?*LHET!P09P<#7FqI9a_PuORJ#38ZB~JLRV0=-n~wvS;uUDVykoFttZGA(=Ttzb8$ebB&h@RL%}B;%`*c_W#Qzwu$k z126`>&n=J-6m&cWExYbkiRSz?EAy)gHS^=W)7!e^Y!V9Zk{Q{hWg)9azsQcQwh1`7I3ktDn1={pw!5{bx7s@2kdv_)LK>26lZbrxg4V*L{=WkY$5#Lzc|hk_3# z2)+k@YTn@>yn{c63X!x#n;aJ2u~v*}a|nBka5t>nF{Z@6VENK0M|bvul*zg0ip-ME zyhzJT&nNPa^g@2;L%n%9T9dD>K4084_!%hYg|?H%uK zu@_57!6XeMGoDj8dqqN5Q|^!gz`W4SULYAC72=eL`{8V_dNj!hYF zH6mj^=Vg%o*^$9k`-Wi6CRLKZkoy+Rk)*7zlOi>p1L6RY)T1ez5M3JWbxPLLK@H@a z&}1{8Zj!aFZ(|^t>KUYy)D-JFu_@QUrG6vQ&HK1lz!7Vpm^7hP-Wz_)fs&|=IrAjJ4!3m@XfEcWh6C~_xzsxF7eqtuUCi7P3w>nio($E?DAsqr0tjiILrs2$#Ke~U z0$&>)~{tbEv8q zsKEQQl2{i{vk-O`@R|WpWva9~8Dst5R|;uEfFHu4mhG@BW2Q~zYX9VhfnKE)dEKT| zZ~1Ib+a$u(r0r~1-)BDgz*x4Vai(D_is233nhRzNwr(7Ghqq=Jvw=lD&NGdC{vkZL zBkp|)>@Dci^xRCs!*@!}BznyA8aiS+n7@(Y(V|tfcr#3vw^34Xl!t?vEXU-ewQF|QiXaSc%OFUUFSzX< zU&4xum`Og9b6FcIy7pMaFbVg%XBJeQ9E@5J*{2Z&rt-@>*qC8>v&LL=7uij{B_FX3 zwGu=(q+Lk;$!ODWoWB4d?eHW>HMc?7A8Bka0rp@=3|4|8K13b-$Yj4%FX))nwGKO6 zN^2Zj97*qV#`u}qA}VRt7ZiT->w$xzm116p3Z7y}b*C!U`*a&i6?9vW_3=D;%Fx18 z-y>P85vI2E5`ckQQftD)_qW+BPLJ#|awG6I??VS#yXw3$nza0|l(v@QSV4!ds_UC@slznCt6cQ9TP>l>$WTfiKAV}23 zUH2?K>2N)n1m_H8tfL*Kq9$A;=hS5WP}IQ|MfrMORp-h+C@@;S#X4y)?X@rtbIhP+ z=b=;X^WWmsLVcI2$pg!WV?n!3Lj7i!Fe8&#Nr_cm$#}&%-dUb<(ryaZHri*8+X+~f z@u7m7-h2#lq3vXMWMB^Fw8D2EchVY~UHtl`=UJ(ty0e{-)6o~t-=ibGc6O3#M$8C5 z-NQH!^3B|?XCJWzR%ADR?&s9giC;tMyL#_(I>s`s=W;Zcwr>Zx!v;l9=GrsGsFu}p zT4|OW(@F(iFtx{b`19+#{CpPe?C2!qE5yxuxNQqCJ@;eX9{j=#GYPPCOm%NuD)y@L z`j({OmHffI%{_Ecv#*-Y^l8mo;p8UWxq2~MHB*wWUoYJI(93FYd2%I`11oJO)ADlz zWSt)haJv}0ao#XMr)ezpt-{nVNW1mgZyiB!4yqK#By%sn(|#z{`Y65HD^{A8IC7@Z zAi_`c-DRa=DX%UFHpuzBF4@|_>=xGwe0Bp%+L)HX)fmaK$ zmY7*YHVe+g2Ygu`S8>ed)iWB4|u6XS?tr^;}Y6EYy{jsQBGMGq7@g zNMw1(@qF%&MB{iNf&Z_jl%^nPtZNf94Ul4nx|d!Nd{v^3@n&`%c>_NeV21r>AM(PD0953tiE-RiBksw55<%LXT7a#+Ned%r~0l_BvQ57%AMPkZmXR zwP!m#&=rHmee*z6z7wl1F{LMhYmEi*4iYhmYqO6o^QxaVIkQ5R3^%qp9M`U;f4fzC z+;7ORmVck8n?Td{U3@I3E`%*wdJx8c%arCtd<3rfy%EEa^9qtP#>q_tZeaH{9mrJt zJYqSk&VIJDTkHiFkrWJ#MPkV zXpj3jar(0&lE+&{c$*GRn5zqdwdg7}V!l@^#h=posBM>@NG&HyrY}j|=<56)|7~sb zp=BqUGQV2T4TF}=)y$e~opnB^DK5~=74csFA|i~>Qaofw=yGYrtrbcaHHvtc$txcFL~tH+c4mGNg}Gr2a&> z)Tn#y#@z%EMzzPVS}SwF1B|$9l$WXNZ$)gdgdC9y7psZiEU8!eEfzN{bVa%?kZbtk zU@jZ(i6ByfJ??@F-wc(o3p(aCaF^HrNe!=-tBKFO+fF%_!>?=gnhx0j9^3TeNxgLs zxnrgL7#4sX%h>M#5Mjje55IHKML*j0!x?4z>efTls;zc{qS_vt0`t2%IZw^KJYA+s%g4`Xcn%9zb}z;?t^rH`Adhnurn( z-9PHkYS41HY1v0DE9nb*)d^yD-Z7vs+aKCYp$?Wu0pNa<10!dad*X~t`o~>7%9uja zgeFfVL$?zy&2rX-V2^)fd2t0pu+321pT|bm{O%Z0hd*3^FYmtE){6&R!T#6^B1ujp zXe#MTLeVD>TQdrLVXyFAqnqdz1vOrY3|u-e=LYl%0Fqgb`_~8TH!vSU??%N#U~fAfh#S{MyHPRndqgW2 z;KkycSYpRuilh`J_#bh4m^xL|v*7szo~z{19oMaGmg_MO)(vLJ0A8F)bN@Nb!+n`K z4iVi&-E=nXIL%QU7Tw9y!{+O~(qD|oi?v;I;yxkOH>=KSwU2SMKSAA9)ra1ZwI{-t zh5P~Af0b>m0H~zEE7#_K#G~b>C*)>norhO>ZNX4a9>Gkt>T+zlH z^msembUemh%;npOE7*PiP*8$+JnhPW9tF9q$2U_22@KzF0n}BF9p>*m0-v(1e_|98 z*=Q*%o9Aew3BRQrkeO?+4coxD#hLEdw8vh2f8Wazw@hF`U?4}MutOm!1cJwyh!_Sl z{U~C8F-$JkL!*r;JjUPJ6Q-+^l7bV^vIckQIbtM=vaYkpKiO9b{ zvAy_7Zo^3`1 z7FJzn_X+N0HHUqtgy)s*xP2T(&`6GA`uemwOV$WOjTbuF(Qm^|Z-v^v(SQYanrQVk z3ZgPhV{;|(H)a3$BL6Jp=pDMZOAz#aXmtD*NXXsY`ij27TY?7bx=!-VQDG4A7az`6 z9|5F7?4tOix0qMFDWk_V9ehocw6Ri(0Tu9F<*L7NTKY9AT6+>4S5^cy8ZIw8!s`o# zT6i?7=zLk48o4O^>EY9@z96`TT!%#|Qw_lr$MvigHgV!+2$6t2&)nzu4f6k?Aia?@ z#Qfj{?8c=R1_4)f7BJi v|EuReAqx&umq3NWyVS)2s|qM6aHt|NnU*RB=6@jY-#kM{L3vXCZ}-0dn+lTg delta 10267 zcmZ8{RZtwj5-q#IgG+E&T!XtV&f<$}u*DM~xGxUD0xTXvaCZnE+zArgHYB(N4X!Wu zzK{Fr&BxSKb@%j~nLblp)g6%oD9ZuV>0zL1Xf@{}j4){6rmmlONrJyLJ%>DK*7ruC zrs+XczN#Yis?G0>+J2#Oh9vW~l^wv>`Plc{JN1wZ)|(!uK3yJC-Anq#jfCxK6`BNM z{Ud~4CGN(xL>Gt0Gc@$2LYtQuTKLBAT_M`ksvM?nTJFd9d-`Szdm#jeA1%wab?g}QjSWAnP=lM; z+5mU&=s$UbD;qxc=$qAc3{B|GqYNOpikGkRM#>v*ob)*-zNoqdC}%d#o<^LqlD~r2 zp;i#1WwTUxqIP|)QG9q=JS50q%=l+WEWi#ciX^HG5g@LAagR+^fI*;dr3yzFEs0t zeo@^{fx*h!SK_iH)DqC3-40oKx3$rSgdu_8$2RY0X9`cA1)A0QYn`{NEoDoEjR8qs zHO*M=SOedeyJcJgw!^<`0IYBW(dRvqf{5MqQQ$Tkx||VzOzp7zbEn9u8U@|iY3{k1 z>(obcTBWJb8rdlt9mJ0){NUOLyBOMsKBdPV!KULSgy`Ab87sW<0S8MaKMcj{-}v

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

      Set up

      + +
      + +
      +

      Try it out

      + + + + + + +

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

      +
      + +
      +
      + + + + + + + + +
      + language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/word/50-document/manage-change-tracking.yaml b/samples/word/50-document/manage-change-tracking.yaml index fea7222e8..74b37eadc 100644 --- a/samples/word/50-document/manage-change-tracking.yaml +++ b/samples/word/50-document/manage-change-tracking.yaml @@ -1,4 +1,4 @@ -order: 3 +order: 4 id: word-document-manage-change-tracking name: Track changes description: This sample shows how to get and set the change tracking mode and get the before and after of reviewed text. diff --git a/samples/word/50-document/manage-comments.yaml b/samples/word/50-document/manage-comments.yaml index 021909e92..3cc873b13 100644 --- a/samples/word/50-document/manage-comments.yaml +++ b/samples/word/50-document/manage-comments.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 5 id: word-document-manage-comments name: Manage comments description: 'This sample shows how to perform basic comments operations, including insert, reply, get, edit, resolve, and delete.' diff --git a/samples/word/50-document/manage-custom-xml-part-ns.yaml b/samples/word/50-document/manage-custom-xml-part-ns.yaml index 3a309aaba..891a3362c 100644 --- a/samples/word/50-document/manage-custom-xml-part-ns.yaml +++ b/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -1,4 +1,4 @@ -order: 8 +order: 9 id: word-document-manage-custom-xml-part-ns name: Manage a CustomXmlPart with the namespace description: 'This sample shows how to add, query, replace, edit, and delete a custom XML part in a document.' diff --git a/samples/word/50-document/manage-custom-xml-part.yaml b/samples/word/50-document/manage-custom-xml-part.yaml index 602513686..9c1e35ae1 100644 --- a/samples/word/50-document/manage-custom-xml-part.yaml +++ b/samples/word/50-document/manage-custom-xml-part.yaml @@ -1,4 +1,4 @@ -order: 9 +order: 10 id: word-document-manage-custom-xml-part name: Manage a CustomXmlPart without the namespace description: 'This sample shows how to add, query, edit, and delete a custom XML part in a document.' diff --git a/samples/word/50-document/manage-fields.yaml b/samples/word/50-document/manage-fields.yaml index bb4b15b8f..2c0f8fc13 100644 --- a/samples/word/50-document/manage-fields.yaml +++ b/samples/word/50-document/manage-fields.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 7 id: word-document-manage-fields name: Manage fields description: 'This sample shows how to perform basic operations on fields, including insert, get, and delete.' diff --git a/samples/word/50-document/manage-footnotes.yaml b/samples/word/50-document/manage-footnotes.yaml index c08f96f74..2659634c1 100644 --- a/samples/word/50-document/manage-footnotes.yaml +++ b/samples/word/50-document/manage-footnotes.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 6 id: word-document-manage-footnotes name: Manage footnotes description: 'This sample shows how to perform basic footnote operations, including insert, get, and delete.' diff --git a/samples/word/50-document/manage-settings.yaml b/samples/word/50-document/manage-settings.yaml index 33c496f41..b0c060fbc 100644 --- a/samples/word/50-document/manage-settings.yaml +++ b/samples/word/50-document/manage-settings.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 8 id: word-document-manage-settings name: Manage settings description: 'This sample shows how to add, edit, get, and delete custom settings on a document.' diff --git a/samples/word/50-document/manage-styles.yaml b/samples/word/50-document/manage-styles.yaml index 64294c4ee..15e8ae404 100644 --- a/samples/word/50-document/manage-styles.yaml +++ b/samples/word/50-document/manage-styles.yaml @@ -1,4 +1,4 @@ -order: 10 +order: 11 id: word-document-manage-styles name: Manage styles description: This sample shows how to perform operations on the styles in the current document and how to add and delete custom styles. diff --git a/samples/word/50-document/save-close.yaml b/samples/word/50-document/save-close.yaml index 4a4672679..4a5b6c8ad 100644 --- a/samples/word/50-document/save-close.yaml +++ b/samples/word/50-document/save-close.yaml @@ -1,4 +1,4 @@ -order: 11 +order: 12 id: word-document-save-close name: Manage document save and close description: Shows how to manage saving and closing document. diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index fe09e6436752c198c78b6e6fdde7dbb8938a4749..3a0785c53e35b2635db9b395ddc642ddf456ea0b 100644 GIT binary patch delta 12540 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 HKbZdo@|jTl delta 12035 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index a3430ed45..13e240fa3 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -13858,6 +13858,30 @@ console.log("Styles from the other document:"); console.log(retrievedStyles.value); }); +'Word.Body#clear:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Clears out the content from the document body. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to clear the contents of the body. + body.clear(); + + console.log("Cleared the body contents."); + }); + + + // The Silly stories add-in sample shows how the clear method can be used to + clear the contents of a document. + + // https://aka.ms/sillystorywordaddin 'Word.Body#getComments:member(1)': - >- // Link to full sample: @@ -13875,6 +13899,195 @@ console.log("All comments:"); console.log(comments); }); +'Word.Body#getHtml:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Gets the HTML that represents the content of the body. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to get the HTML contents of the body. + const bodyHTML = body.getHtml(); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("Body contents (HTML): " + bodyHTML.value); + }); +'Word.Body#getOoxml:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Gets the OOXML that represents the content of the body. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to get the OOXML contents of the body. + const bodyOOXML = body.getOoxml(); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("Body contents (OOXML): " + bodyOOXML.value); + }); +'Word.Body#insertBreak:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Inserts a page break at the beginning of the document. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to insert a page break at the start of the document body. + body.insertBreak(Word.BreakType.page, Word.InsertLocation.start); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("Added a page break at the start of the document body."); + }); +'Word.Body#insertContentControl:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Creates a content control using the document body. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to wrap the body in a content control. + body.insertContentControl(); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("Wrapped the body in a content control."); + }); +'Word.Body#insertFileFromBase64:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Inserts the body from the external document at the beginning of this + document. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to insert the Base64-encoded string representation of the body of the selected .docx file at the beginning of the current document. + body.insertFileFromBase64(externalDocument, Word.InsertLocation.start); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("Added Base64-encoded text to the beginning of the document body."); + }); +'Word.Body#insertHtml:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Inserts the HTML at the beginning of this document. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to insert HTML at the beginning of the document. + body.insertHtml("This is text inserted with body.insertHtml()", Word.InsertLocation.start); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("HTML added to the beginning of the document body."); + }); +'Word.Body#insertInlinePictureFromBase64:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Inserts an image inline at the beginning of this document. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Base64-encoded image to insert inline. + const base64EncodedImg = + "iVBORw0KGgoAAAANSUhEUgAAAB4AAAANCAIAAAAxEEnAAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACFSURBVDhPtY1BEoQwDMP6/0+XgIMTBAeYoTqso9Rkx1zG+tNj1H94jgGzeNSjteO5vtQQuG2seO0av8LzGbe3anzRoJ4ybm/VeKEerAEbAUpW4aWQCmrGFWykRzGBCnYy2ha3oAIq2MloW9yCCqhgJ6NtcQsqoIKdjLbFLaiACnYyf2fODbrjZcXfr2F4AAAAAElFTkSuQmCC"; + + // Queue a command to insert a Base64-encoded image at the beginning of the current document. + body.insertInlinePictureFromBase64(base64EncodedImg, Word.InsertLocation.start); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("Added a Base64-encoded image to the beginning of the document body."); + }); +'Word.Body#insertOoxml:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Inserts OOXML at the beginning of this document. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to insert OOXML at the beginning of the body. + body.insertOoxml( + "This text has formatting directly applied to achieve its font size, color, line spacing, and paragraph spacing.", + Word.InsertLocation.start + ); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("Added OOXML to the beginning of the document body."); + }); + + + // Read "Understand when and how to use Office Open XML in your Word add-in" + for guidance on working with OOXML. + + // + https://learn.microsoft.com/office/dev/add-ins/word/create-better-add-ins-for-word-with-office-open-xml + + + // The Word-Add-in-DocumentAssembly sample shows how you can use this API to + assemble a document. + + // https://github.com/OfficeDev/Word-Add-in-DocumentAssembly 'Word.Body#insertParagraph:member(1)': - >- // Link to full sample: @@ -13913,6 +14126,27 @@ await context.sync(); }); +'Word.Body#insertText:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Inserts text at the beginning of this document. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to insert text at the beginning of the current document. + body.insertText('This is text inserted with body.insertText()', Word.InsertLocation.start); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log('Text added to the beginning of the document body.'); + }); 'Word.Body#search:member(1)': - >- // Link to full sample: @@ -13978,6 +14212,39 @@ } } }); +'Word.Body#font:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Gets the style and the font size, font name, and font color properties on + the body object. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to load font and style information for the document body. + body.load("font/size, font/name, font/color, style"); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + // Show font-related property values on the body object. + const results = + "Font size: " + + body.font.size + + "; Font name: " + + body.font.name + + "; Font color: " + + body.font.color + + "; Body style: " + + body.style; + + console.log(results); + }); 'Word.Body#footnotes:member': - >- // Link to full sample: @@ -14064,6 +14331,25 @@ console.log("Search term: " + result.searchTerm + " => Count: " + length); }); }); +'Word.Body#select:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Selects the entire body. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to select the document body. + // The Word UI will move to the selected document body. + body.select(); + + console.log("Selected the document body."); + }); 'Word.Body#tables:member': - >- // Link to full sample: @@ -14078,6 +14364,27 @@ await context.sync(); console.log("First cell's text is: " + firstCell.text); }); +'Word.Body#text:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Gets the text content of the body. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to load the text in document body. + body.load("text"); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("Body contents (text): " + body.text); + }); 'Word.Body#type:member': - >- // Link to full sample: diff --git a/view-prod/word.json b/view-prod/word.json index b1cb5ebf6..ad4c739bc 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -27,6 +27,7 @@ "word-ranges-compare-location": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/compare-location.yaml", "word-tables-table-cell-access": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml", "word-tables-manage-formatting": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml", + "word-document-manage-body": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml", "word-document-insert-section-breaks": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-section-breaks.yaml", "word-document-insert-external-document": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml", "word-document-manage-change-tracking": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml", diff --git a/view/word.json b/view/word.json index 6d7009305..c74a0f538 100644 --- a/view/word.json +++ b/view/word.json @@ -27,6 +27,7 @@ "word-ranges-compare-location": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/35-ranges/compare-location.yaml", "word-tables-table-cell-access": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/40-tables/table-cell-access.yaml", "word-tables-manage-formatting": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/40-tables/manage-formatting.yaml", + "word-document-manage-body": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-body.yaml", "word-document-insert-section-breaks": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/insert-section-breaks.yaml", "word-document-insert-external-document": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/insert-external-document.yaml", "word-document-manage-change-tracking": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-change-tracking.yaml", From 45f50e4545fda551046bf8e6617d23c9887236d6 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 18 Jul 2023 13:55:02 -0700 Subject: [PATCH 498/660] [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 499/660] [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 500/660] [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 501/660] [Outlook] (spam reporting) Add code snippets to event.completed options (#814) --- snippet-extractor-metadata/outlook.xlsx | Bin 24070 -> 24068 bytes snippet-extractor-output/snippets.yaml | 13 +++++++++++++ 2 files changed, 13 insertions(+) diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index dff1cd06f4239bddbd40670b7921abe2d2b6ea8f..6d7626933693f0bf3b40f63467a7de0e69675b8a 100644 GIT binary patch delta 13807 zcmZ9zWl&sA)Gms<1`qD;?g4_k1b27WAcMQRy9AfP2MF#AL4reYcMX2YdrzJ3t1~~Q zruvzsz4p_)yH)m^OaCO{(y?uGnKk4_ zeJ;rl;KGTvgOQVS;T(Q{-DqOJ>(a-)n6zJfa3~O&el8IdGF(i%8~jFV&MCPIK^eo_ z!SwZpO;WTT&oi_}30Q8NX8#vk_y&!b)c@VHJ^A>`a9kQ0BHJ-KUAL`q$Ne#Ru|_bF z*$L3AF87TSRsL?%y>`3iFg^FA(^Wqfy27$pj4)LDEQEYQZC5DG$LL1N=?iv!Cfw7y zTJw6O=D~CCZw2A|+PsNQ*hpVh#8;s}ifZsqN`w@Hr%});chQ1wA8jBY*u;4xr}yrt zN_SVzvuPe4;>=zKFss}kF&cqUBRXO%N(K0%`XZZ2bgo^w8B-HXta%A1btzhcNmpB> zX^OCcH**-D6BCanuX>fEc%)n7Fs(`Px~E{sz#HkV3%kmeQs8*(kv-+<(Ns4xKI zJxu5q&&JwCto9^tFU2}j*9UR+?JfJB2CP3Z_M(&GzPMoj9Mi>zOQ9(m)xSvW>SDR_ z3nzP;)j|0bq@n(wZ3R? zs32?&;e?Y!3Onw+g>btOx%|O8G=C%o9r~#3Wap*3gsroI4GF{#;u4aG0_KHZ5 ziPZj}r_C-kCr8niJr9QK2K(oHbYq@LP0rGnDolq7?%OwGZq@K}jm8eiJZy=8yengH z6;ZN%IXN*_@Oo6z)Z$a~+<^U^9E8~Rj!q2lqW!*pV-uksDyoEHy${06p;CzV3S@ZZCdE-_REUMy zvtiN_$zaY-Z%Vt}3?uvgQ355ma$ne=a9_S_k67y4*9w|-u-kLqZE?r2&K3FcRJ^xd zAicys7buG=E{n84w_MPl*XaYZ0RKcB zA2^55D!0$yA*of|zD0gdnR7DIDxs$yZt65nt0J$EX1jel-idfLJfa1{HozdZj2$hk zSnfZEJBe}ZRKnT%sWUKV4M}%jDV7A`u*hfzU;|*Vj5t*1;@RdT@T-_$Bg(b~5nIm4 zJ~LRV{#=e8&b3ZP?~^Sr@SKWdTqZMRW-v)WlZ)B~J}cI8>1k;{kSpNR!p9XL{Jf%% zTLq-ZBGsj-mfa2#$n{KBzaB|y+C5e*b=DkOh1 z_ic-$0p?wQVDCv|dK`5sga$U%UTc}v_8oE1ay42i>Kr^3z4HlWguHjQ%X&?2yGk79 z?Gycq&9M9=+PX<(zoQF|w=9=Z1^H77H$LbXJ@^7e^Qq+FSce#PNDyho|3O6TQWOBy zu*?E+CfVC-FH0KRiXLyqiWMp}7w+xj1xWUEDC|sry zFyzSC^WjV@d9_u9B#GmlS}|!BKz}56pw>0=)9?Mc0PyDVc)!^8C*W}r@II~l{&Xk* zcs=(32zVZOxHkd_20R`CCQjN!-|mgxy&i9#Nda#=^+rFtUZnk>uUA+i7U5Kv&Xoua~Ue`9) z*%wfT7rgtux$v#*_z4n$SJtr^B9ZY;?`J6C_0C*?d}Vx600EhhIY#R+WdAY)g4IrC zw$EwEB?dTNItD`({e<6dip)L^Iu!T~11u%B1iwZ8wcujk=?3v+Vjx<_Z^HNkj0JvU z0}rS8sImHEkPI)YS^_XtNg0U{R?%)=9Opj6BUn|F<;KwhbM&9c1o{gA_WDMc$JTFT z1;D!(HmF7VkZNu;=PAuTZbDcsQW$6Q)Xm_#vnvItC4T4{ZnVHDO-LR>SZz|6K=M?G zkh`g6_CK7xx;qd{_Bh7C84^T)l#P;bma}kvLZiiJ3!gEFQ$Q_rC>!!uU8A!`HmU7C z^N}Wp>|fwz6<4Zors4cc;iXsQB5f04Q8+GyS&LX0`Lr!?IH&*Y>1j5#r1AF?YZeJ4 z=!4?Fj!gSKUZ3Incpvr^jiS3#Gkbb#=HNYV9H)EEC-cI$Hp2WU@_GH~&(%z?p@7@a zZK{5}P&b((0sw@bWk2`U+2n2JZjWXmiG8Sl+IIJX(6`**j05ap`Jm;aTW%LHdlK7v zAI)3KC-5UdDHNAtBwtZZcA0-;C(*N~1nFcjv`_9}KQ|_Aj7}bVAO?j+H0hyRM=zyj zF89`a>65M^>u$`sQgbl!J7P=`$PuPUG!>vO7hq!qsPQ4AXCB3~2Uz^v*M8+HaoxC9 zkF6Mvg}3ydDaf0M@mB)fa_iWT61A(%VI`F=JjesqJOn6v{Ep9`l}$jShU-NE6d~w4lD_Y^vaF~ zmFRv9xC$7!)r)?g&wTH#L8m#K6eF3W3mS;u`xZ(}DpW(yGOt#>Wgf1N03IR<$#A5} z;6|fizLo{H-ITVg#C2dy3S^LR@z|{SzxpxgTg2qmqEjx~Mcnh5d&JFukg-URp6+3U3(}aXa1Dlz(ndGO)Zg zwHqojla-MsSo%ZBiJ1CD%Ncmwv%DQU`fbzy}EI$C@=QM(pCx z^$IDVV6JDk3DWu1_r2-jYW>(~XZlsnF=<^u@6ax~=XRlwAxtL-46eWbZGr+*ojS8& z-$}Z!bs+bbThi#C>zRo`AL{Od?q*JKRJ6#*IdeHuX;}0NePHdXB*XXCNUc z!JH$z=+Tdmz=@;19bKzlkL;i7)D7jA&xQxx3@HuOH9nFA5v~CTMh;Al`KTX^5FZzC z%p!KyQ7vU4c~%f`4HOsT40T}bdNypm;g(sI#hX-Uf?Bwh~@%3$cz~RC} zH;$g_8n%bCgasg2@nbmAXMX!s@S07zpQ1@i|CGJW{qZa+B{?-Vqk<))SBGWVRS1-h z?~Oh42imZKN43y?Y!hEUS7TqS|CoBM?dQ|>V-p-aV;-{l7q9m!%z#yYM)us^n+j=l07ny9r@(rw($`%Xy%w(Yp}PvI%nIk!#;xcE@TVm2LJSdm zrjX3!@{Kxe!w&gC{EXRxomv@0WJd~tup;GVL`YBR+icw)q3C#m!RVT>bVP97X*RI& z@>Y*2mQE)Ms+nz>{k=85$n{CP)`@mh;er!m4+>KI%tQJgPQ3L}o4*<7iD0(levM1= zW(_%P?;54w3bS+wh#n#`!-WP;Qs)_^e8**ntWT-IC7@*GDPfn|7Osu00Un3#*OW(2 zv(t#MF>3NLF069TAD<;98KoTJ+5qM<^I`(cqKWPnW|~mPFmorGm0$R@9Us0;Fh`z_ zl#j3fdg*1Aj8|gk57yaF)0CC+1cJij>i4=FtxXk^O4JqNjWuhG*<7J#^ZaXWacT_z z*Dx91P%d`H`Kei1z44tmmR&SSp6PcOpy^PHRwLrUf8&5DKHv^LS7Z6%41Kxuhkv_1 z_Tv}-OV`YYiG&Xmg`C%05?-F7e#YjHp93u;WOLOND%;TFi865*A``^Bsbe*z(I^=; zV(pHz=CVx{D>AwJYP7}t<6Gkk1vydu6SQe7zc*8>j^U%ETCySFO=E(a+bl=_h>y5o7#qUeTE3h$ z;uei|w}2_q@F@p6)GevMjQ!L0jzhMvDE{<7M)8+}OsKw^8~A*Rz0vioY4UzqF~-{b zV9DsaT(bpeU_Z2*s<$iPJB~F`RF?+nn7VFszd=y*`l2EWMkBm;2!OjhVz^wu67Q zG))5JZPn}%%&E2TRPi?ddcqn%O%FHskAB9CffILkYu55zAF>7;^!ff<0wD!5Eo}N3S{BU6zKqGW$OSUdgmTkWYSn=Rd6UJZUDksrLcfe0KcH_=s2JYcu=H_|v}kYN>m|CaG9>C{)D?eC9xP8pb2kfAaWpNB9NVNgDyx^ukEaRwEr|BL-OnSzg$1Z5UFFa)V z!48a%(F#mm71xy~VI%m_UOy-ED*$*Ab|&akBv%2-E;$_nCJ8Ivu zUPrqU$BRyp*&q|kED1xdYd$UH=O66V_}*Y}VhKcNdFqXL62~VHbhEMzi2O#(@=>~~ zy#9p6ureLK<^Su22FXMCdqb0K{iz*&2wuJQhhz8))+FHTNq5{xlh&xP6Jw!`zMhuo zOwW3xt}(~GbPolfRQofjIRFyBk~nYsa6hI|E3ogXtH#nt)}?kvDA%-s+0C(45*5fi z(}gw+h}~lPeFvO6*oF>v?4Di%kZxrrm2BqYfX$cBjEur7%1h(pIsW}GmSJ4-H85m39o~-8` z5cRFt2n`rA0i80fK9y1lEco#BIiRKY8BCqmCFklayYN)2xcdZo-)F3?J3k~CW9efG z-cIGp@JF}I`IR5uKwV9SP*r^E^bN$PlCzjt?s%p;kXcZA24rnd!w;0KROM&Qn#Pw* z;^x&l+pU6nH;M9sI6^ZDL^F6k|Ds&m39Jpr_4`#9NDl3Qd!|LWwtro-E^ohAS~wwv zyt0IsXq8`9{XKTrU)}UT6Y+J<^BnBT(g=&QZ;PJ!2l)(nRL1WJ(jz0xQ0{lmp}>@k z{kH_&{jbFnQUL1g`|CPJ-*V}gH2-RI-KL{B>*ljHUz_9Li6|`F5<-I?f4Tx=*XB*L z2PV^_>gFbW<-BYT+83onJ5^>M?dt(HMhb2+-3rdt8^!`&Eb5n-tuZqD7A0&(>?Oahuo3IH#cR zq{eNoGk|%@u9+H=EfPdIpQJ$0i`0ZiIKZFYqT2uA z^d*Jxy=mHXxG&qlrZsYJIA_lwgNihyMI`*~Wmj0S3jlr2 zRf#*Ir&GAw)3OC+q2eQqS{w^&==_eNq;P>1C#|Ikghd3Y5C%ITU!NI&R4`$REeY0fbSiLxtpHLbdGa9U!pphBz@!!73o}lw||iZA#+NX z@pS%EJDGLHM01ngkZs&FD5u4AwsAJ2(yf#$m_sOTZOUrQp-laAvgY$zSoX&E&i-?e zEdJSM)vb>Vsw8vKkFVBla^<*V&W4g0q<#QNn=H+%-``pX*0g6d3;=f1!}YOhT)cgT zLYObf>VHV4O4P*0-6o{h7SEqR@{w^(t50^5<#?=u`6(NYKfN&*Ip^MJCNApgiOmLx z3#s}FX4hB@mIRWpH-0!KI49_|c+F+lc|GeubI(Et+palnK(dF{75w4nOmd_YI{(19s?jcChTv`g=bSe7rExN5o$#>2KD4pRU_9rTo}?+v>5Q1t_}xa z1aNe&*2}1TQvJly?X4zGT>%u%jsS-1@qs`sI-sOv?}f~RBoHoxGsq?(ci3||(q0d= z%Pr;g?2~geX-b(jr7lLvnBE!eVVSU|pQ{?M`X->3(?a+d39v%-`}$L<__WoxVGm(U zN(c0d<>#}|=}sO`c({3jra=*2TT>mQ3azCBW$C&|QEwJY<_GR=JI?lV~!i9Ph$_tHRTO$8~Wy;MeOFJ&UP(O;}9t zImN^}ze8wUOryNzQ=KL8^yh01O~w(=ZSx->GWUIjRR9}ii7zv^KndtI3y!AAd)5;4 zT)G!IDmB#E>nNK4RH%de9#P!t%PLo9OPw}+-kpaAd32!M8JF(y9M|#)rN|&_lkSFL zyWpDlwcA#5a+76KzXL4wtFyOG9R;W<6Op_SyKX3Xic0^xxdL_&FQSM#FLN6;tLU`F zuLTD98xY)`sfgh8TZ-kKgftWF{Bc~nvF!gu9!MHtL+5CK;Twe4 z*sW-1Ek}FFF=m=S^9Oma9_Qk;r?doY%*tPyekuGUHiIj;cb;)x`+SPUO%vmJ$vV*hN>Px3L`7-B^Q7~D=_xh5(9%+QP zg0nXX#HD*q!*A0Ww_#PeUgf$tX{_VS^Y&kjG;S*x%3f^lhlyz1rZ8hV-x~Yn+J*pp z_?(|I$U>-SZ>H5urbU4%uy(PhaUDJY25|4$pC)Wf34mux;*>m#49IuXFA z@ba{mgnJTGCRhl&KLj(|_nQ7B8-#$cZ2T>1??{b9;Ef*IyV4H6E)&INb2D;YcBPpQ~183^Le&I$9$&^H@32yXWvvFIarXey!=mcC8lI;686c*Gcm>Pb;r%>L)hKMVtAj2FyVL8EEjX* zKT5ASmH?Bh5sxknqp!pt#&OnyNafjZHD^)-s?t%TId1(;9C6B(pL=p&TP%Xsmv<;o zNv*+?;AAjnT#DN_)K{U!^ebjkElLmCFq8Ht62MI%ph=>BxCG7O_+T0wr*w~iSCsph zj4i4UZ>F-H!clo;9C405IiJh-VOu1Fu5V#1cM3UEEn^U^Wq4p|eGyzFmX|q&idAgd z+CP|=qiDVeBD>%5M}a)UOLZ8dC{$q%)N@TCkWnrm64a?hAYt$#&23%sg47BubhH_+Tv$N-u{~B&-L!`;26k zf%RPK!$usK<>k`#ys7!cD-TMSf9UBb5<6FBHil`!H3+$UL^d4*Z=0Le?qlk!abaX! z!29A{qByXbInste- zfsNLvvA{jN^onhK-5kCj>~f4F*+V@zUsRWzse82aS6$*Gb$280Xq(gK0&>nq|Mg7A z2p}Tf9g2-E$uC&7@_TLI)|+X)Q8=i;v9RiHTlT&D!@Z{XRb6R*rn2D{xJE zryPF9=Q&SuxofGzOu#yzG>V;8kHc}XbXqaIID?-qhBx$xoi%=>vly4((ul0k z9+NqI$wL)F(vNR*e{CVb`}9cbSz`L(a$>s=R>!Zcb5hN4`&NajUl~DM~drf6Y4Nj_f2Sp{V$?#2xJ5oPILfwAr|C1Psr~wtEO45At*; zwbeB+vWvAP?ahjS1N-?2Zln`^-5w!Fa6JZP(EjhG1s3W& zzI5KE#Si+8E_c40(Hu9D9%!T8Ddt3$+6UXS476Z^>Y7g`gPo%`hn;!rl_Qt1oy{RB zOFv$wn|N#&(>%k*o&~qkBz#vVX$(Sj07cTgI~#kIoH0BsC{8{J9nShD!B2GKY)N5D zl3Eu;tHQpnrAVLWVoK4@knoyEqQ~^BstgkVouYSVt3oag|Xc3Dh*wYf6MB$3a`;lE&L4inPpH!K=SwQ?hWSVVLA*8B3qp2`8vY^J(r zS?J=LTh@wWXPh~0&zrRIF0CQ^}Tz>BmzTt}BBGmBH5rhMoU^r>ufLnnD|yiTRk zFqgWSQLZ6y)xOB2~=xV z=rUsrILcNl+L9G*;_pJd?GgnwPygzj+q?M+ry~l(zoHX4wJk zsCH%Lq(0PB#?BTN$(h@(ld@YKC!Fo+739R7F(=*#ctZF8*haRF*hiS(-|%V>hMgll zL$UU_&OM^W6yoa{iU3SJMPZ1Iz8SueroF^{N>AJ`SRvHOq94+DI`Mm(qa zF6s8?oGGY_$;5bZ&k^G_0nFQO?diy~bFGfl8L2H$|A$R=(y4dU4i{2Z?-VfWtm=l9 zn?$5wV?J+-@~>CJ&AfH)T3;<#ql;t9WN5Q$!!_9>l&9AiDeROe_5wX0~Zqm1u&E7}Qu#R^Q)c?O64n2Y7Pe+pVbL*AyHX4cE(%;oxxVdFJCbB09ubX?1eS3X)%L*DBTY!f^vJFX$|=z^s? zQzwx#HkBsousgzd##;Of5_GO5fwI0{1lXz(?VAGU^yd$VbQ*eZYpjeWXi{V2-cXo(O2;1h(57k>7$vNd9@wsJIqU^cg;GobB_}C z|2`9WWSha^Jlwo>X!FT-3$-heH?(OZ1@lh2)Sa*>^t|Yg!en?Mt{5aGkfXc_0qQq? zq-w3;B_=TgpWx4g(B=$iI!!IzFCxc}QWxWtIvQ6Ks6}cFY{4VWYs9hL)nD+>hJ39i zZPK*H!x-z!{euYZlwDaNYh5MAd$PfJiB~>bgA;$b4w}bLq^j5coy_f*d!n%)ppJH1jdd7=sFBS^*hA#^YpZMAk785NcV}LR}s?xxx_2WN|(-P zx#r07ap>zGYF^GS-N%!>msYh+%ZcRxEkTejGHC*yfWgaF1WEV0M(=r)Xe;?XXGzs{ zhkK`7cgm-;8l@aL0KQ(O%m}}w&9T%Ip1H1QMe@EdVzctjOsmBu%wXsYiUR&u^TQiZ zk-Y&K5&XqC`VkQVq9z4Sm;~Uo){Y5ab^g=0RB76_M&+wyVUJi zOmlhiR=ruTCIa{rC!QmqE|lwya;a=}%{#c@p_)nexF z9W$G5+`;9KZz+K64Dgubu%WB06I14T#e0& zgnup7ej0MnzimD_gnO(F_1wRZ&i64(D~sLy(JS(~^9Ns)5}m)S(!atb^sWkB=m0B* zhgju;z6~mMB#4}QxYmxZIM>#AV^a^PV^DazJ2h5~huZ`A6CwLbs@TjMI>S}O479&M zce#R2+uCwp7OF$`^Mi_4$~z{lCSaipJ-XZ;L-$tgr8OqP8* zDMW0d3WLT!fv#b^o(uID3Qz>z9+$opO2N+KMv3+chZ6M{Dww98Q^VeVV3hYub=&NK z)TLoPJq192CD_*oeM|Qa+l_jws@Q^z+ka)gvelLK$L=?QO8#fFntR7G6S$H#4j# zbF&*3d1ydaCi$(u7jpx}byZo#zsysjkcCZ}R}%1m2MD8s_87XvC6-5MCXWn=h)=Yp z-Zi?(xX6y)W%ZqeYVPu(_(3ijp@&dKI4;o_;YhT7yQMUk*hPN{C#z|6i{v|uXQDL# zk+?>!LdLZ9<5^?52A_((uqE8Q?_gqUuCei9g@!L^ULHf_EyYESlR8N1FfwBs)q0K)g|cUC zF)_rgc#G4;yOM~{g?h{~`Sz*|#AmKVf2#nL4_9~+erK9gl?oagp_+?HLM?u>M;wogmDHgF&PEfs&))C$daDDrbdxPXu@T9{x}`692IT?RNePvRehS1#bE+e z$}bL=BXHJZ`nO}rkJ(p0mYJh-&xg-{DvcZwpN5qF43Ky!pG!jN2v{{~UkwRuubjD^ z@skmACcrGMEKCej!)X7E?HiQ>t>HqBND8#FR=a>8kvs9HybZm9nzTcrhT?#NUakHr zg^EQc{;3~gLs$hy5cS60+8vEqLV^}hSYBGBva49}s{LJ2)q`byL2M{yRyk}U&(8&_ zkM$d65W&&x&<^a;Rn2j;(wxW(UhlztrP?ow8J4YxLG93&DPSVEycO(N#G%WkVlGVY zaYy=E_=`Xul*+Z>{u@^>u`Eudc28nnQSMa_YtUOQv(h_EWE8Y zVuxtEU`)c5bsJ5i30u;xQ@{t_P%%1V>Ao6rvi2P9PqN;AKt$4I=mcvV^ex(|o=DM6 zZl-UUEg#?NVFkZ6ZDQM+V;~J0E7K)znH9|?-M^ z$b@B;J^YEEyX84M-^^KYduODLhzGgv*s$KnBH_buOxQ} z=DktVA9lgtl{-ha}g zQgFMF9_O=XDwjgP%b}qifa-Ud-r~9*ZKUg{0bT ziI8lIUar#+!!$0-QuqR2uWXmrIEY>OEz$DgZbu=M<9<=fGo?WUxF0E~UOr=@2i*w!fRvaqoeGzKo`a$xk;JK>I(4tJr+@yso^s z9K=3I?AB`=hic&^B^wGbx3?neim*{qChtmL5~-88805|K1vqZi3yc;=hDD#p4ElaO zj)S=4V^`QNyj#CgF%9zC{d9vL`Z#?WwCJqYUqaBLpBd;^p)Wx9IeNuq8}5W5>>LX_ zl`c+YjghQPV!Q_0l8t7)R%Xq7gvzWow6y~yym@9J`b|yE>;B*^fq7~-GR5Jy+C&s#$>4lL_ zNbcm#Etw_l1nAHBzT%7H#uXRzbN1WXzoCx;=xz^QQ9g5n`|qb;f35ByGNKGyw)khI z-d8PbiNV7Yze9)~@@|^_v9_28Z}2zBoO$|F{;~c_HG3_8A$^0z@FvOR+2`8%v@o?| za{POP^e45Ata`S(imD9cm>gUahcsC&L79!zEI#$00pm|4cIPg~2Rgb~a1KuUVnpxX z0pAu}+tA#axB2Azdl?wvZW5lJmMZJPW(Up(HHj-}RRfMEe{I@3@O-PiMYStKR-f^b zJPbK>`|vNT`U3~CLvpY23!AE{vrVFrUW8+L9;9rZt;5ogKN+Ux_BRQjbPoOG8>E`` zpKIwyI;HZ>S5tIw%9F6FgQ`XP)1r=P05G=)n=t=wAf?6PvK3wS7$xebA3S&(!`c^) z!c(^erxZuh8+R$?(o?}nW{-dg#y|RZpkiK3$Nv;RG8vZA2B3cDc!H;6s^$VS!gzp_G18g$^zh6+?5*18CIr zCjO@Wi6Jz4wM=jh?Jj}!Q(B_l24g&isSJfG6*~}PB+XJ1ah$7`UV*%1EzCsrR2*0v zEGlIq_&fWH;=t83q0$RU#hGu;j+U-{#Std(|%bM~k-3 zg0g3B(CuSAID_RkBYDm{Fi4pX5|*%z`CI|mqrwRZD9>{YZG}z~=EulY@QWE+*L0Xo zH1~XdC_mE_#P8YLaJ$}HlW%$y)9gdX*IQtarixaDh+Zt#SS9MN#oa=IU0|oy{>C^u zgUOVQ*Tze*n7RmOs8HM2{>gq*c3iE_t=UaUJ(l@TkU7sa+TM_&1C?73mtGCQyQN;Q zEYTk`0Af7iKE7j65lQ4>D7N31W(|9s-(G7!{%{2`*Q1NVO}N#*LOL5`(d z=r9xh&y^5J2>g#e{{Q*Br10uWLQbXl>wbaMPU+DlBmBSnQZ@((?Em@W$FGHyM_n;U z$P__6c_Rnlo~w-r~=uPPFd=dS3L&Ejubk5O~~F9fW83Xe;oF4aR3JH|J9?E hGOzFW|Ic`ew1EaBOG>VRFyv{W3RpL z>bk1#;zsSzF7WU!@cJxRXqrJ{7nJ0DSVEw_(mD&Ke}2;^>a*aG;vPpV?JsNmZ}6zW z$i#^0@FkebxB{WkdEaRKiFAAYnZAELEgO$KOp$2!5xr5HBi$Nt8#=kY<~TfQQF*t;m)Lm%5kBp z{J>T%g{fV&1NN4i2F`} z0+7nGp^}3WHb0m$=MaY*X}sd=ywO0|bT$-l|9WT$=2=Ga;LT)JF%;}Zop;tbWD2LH z*|O)|l$OSrdsadV=kt%`JrM%F1-kXdO=dXM@S8TU+Oa?Eaz@uC_xN&^f41DhETq5n zO`To_5m=_2;zst(hy`QR-q{!K<8eR?GS-{h#!6gfr5OS;TQCh5{@XWXOpGHwUXAR=n-($UrP>W!*n0xW(A@^po9x+%`)J zwl!C`7NmU5J!(C)3^-yBpzf{#qEg5BfBREpze7*wlV9TGVj)pif6H$?j<-Y%OwYR% zPn=J;PB7o!@!-`FSK*7AKfJVR_%T$Roo$`LaFyoCoqWOForMFzzo99?k;1DV3erfS zTIkK{gnwZ&a%5T>YJ8wj?_)GdOGxq%UX~SXj(cjuA_W<9ChVJr*n0?Ra^@E{wJK|5 zkYy_mv|;_Z2@K%Xr?*YDBibMW*0*WcJRsW83>?}VHqZ3t@=HtUhmn~~DQSiJ_948v z!l$3B@zQ%*5_13w%sPJusJtqXa;_ZN zK8bkYT1sU~0L8oOoJj5XC-*xQYzawoYJ#1(@+KWzu0l@WfbSb^J!A{BZz4h#=jWSn zdgVy9OFVs?y3osZn0o%GePPPMh)e0O?C?f)ct$nOV0JAC^{cdfFQi~dg;2QF%+qnt zY2ZuvuzeO)VA-*c(kG@j#GG!{+>@*Sy0(}n)L@JpfkdRC+N5(YcJX1X=qS|uY4-D> z9@F7T6s%^fkD=H74nTxqg!6NM;Skc?QR#YhysJg0GL)=beNYLUyd%++xwP?)9_DuH z@W!L!KIy-st*%qKhII6KoDBDuK8LM~)#cpwd6tdr1f`+-GUj1@S$P8^O}`zksB2lH zt9dC{U_WFND@S^Q}2rT=l5SjUH5&_e% z1YwT86OVcEaX7t)tpc=40RbpeGpU3Gkpsg(H-VW~xcl6XwsDIn>~zPB--o?yCcTW7 zaNbwj1y+xn__u%NO8g#E@{qOm&~#Kl%iH3UwGIu1oksk%d@#jU6Euc^wNE#Fs_MF$ zt?)uUz1{a>QFbIC3E{H*c{q)=Jz4y2Jc;~X0eG3$l}g4dbNt$3!3@bhDVR+874Vu{ zzPI$BQtUIzfw6sAm!jieJ*EG0!mfDDeJq0rRwi^)yI(m+alOzPg-0d(_FpiU4Ze7F6sVN{X91czK_(lH(<20r%?@%?gMQ+!s_Ab0N>nzk3;dE!eQexV1 zMpGZdiIL#y(?5rYy4&Lbs@5@wT*kk=5{5qKMyUhU!j{LDuV*YU!5Y73!5E4$7VSLNxO^ zhqIJ6+tJ&)=zPP4Uk22bUU-=9@z$aJ0nmN90!)k!@)%lpd>9uN{Aa%a@A0r})a2hK zw7!JNKJBZ`5n-MnSB`cMQ;ut1d6mrLjNg6L>$Ex1tJr@wGxfr|yH{TkvZ7&GhAr|; zxgbFhz)%q3&t=R>y2w8PQ)u@hRmqtCinm!?d^+W0tv}Xaj>(7ZO)2$$Aa5%pBNaP+8YOvoUVLA3Xnw8#D*cXZhYyYjBVI>$iGTM}M`NQ1cj z0iyTl82JCG2*Q~8EcoI42tB-cU&})G=)iltjB@%;XWLKY^YI=IcluV9mexqSA4KT) zN#v~E?oC|deDdzxIi-@$NTG7cr`WohQBDT>r*csPUz-+C#udZc-mSg~?Jw|8B$vi?n$vEcS|>tf}Xn9i(1kj%3pL;K4(e}&ROL^M%9Y!w71a>&;2CWuiv(3=RT z)xC^%Qcm93XsJ7FS=xnTj1zsZ`}g>hwB!-hu%6Gk)khzd*@scC5Lz3icx<86~-n>@qPi|7$PSz`=~%=s?pb!iS~V#&6?jITKAve#8vRua$?`;*X|khYnT& zJL%+7wr!bOJB3_YIFj%``Z>?%2^uO!NK#QE!Tg0(~+HMO{YruoDFAmx7(ZTgi@K z{=drI2JNk+&t9Eh3p+KJ-kmG~e)=h>6mRi)Q5$3DG|2**I1Oeu#(*ExIxSn|H`f(%R%pg_|kUQsC&o|Zxpa5T_0O+EdkkO2gz136 zDGh&<6}2e4SWs7T#A-V6BhBPL6y%&CAy22Yj?w?pWHu>^dCh|y0R#V$BrF3(RILhR znq;AyImlZYd zurhymDIKb%BgV60UI%0fDgl|1(+7yN1oz(4_PD+Z2=;~~4fa-20KS-W|D4t|Mpic@ zm4y4&SGT_3OALD&5BNLV{VtW((->pzk>>0ztCBw}kfFPVRo8$h)`m2iZ7|;{(7tqK zqKH;>hsjR9rj@blSob}=lYhMIUdH|M?hXId&1OG?Q3;U7krgpN3EYU?tUob4z&d0j z1ZIiMVe=)_`$BZo{H+lbjGxecIwG^6cEe=9Y>B&MBP3z>F*FMIuf$-x&)HKu1W>Ct z_2P#=Dc(oZE<AUr+P`0_w*K1y+)$V3 zs_4m9$~z}L(T2R`p~vRX?@FzM z&ovl$)s!a%pRHub3q)k+*9+(xKAU7Rss6xD$IU_YWIgz?rikP7OMbmK zY-V1fYH@on3FrO;8;4%yETqBaur``7Xx&9 zAjcbh&rZAW*FD7T1#^4@Ly)~;m{2N{olnS?s&{pVOUvrgV2^=@Q=dy`exxT*;GRc+(UjvV8<)RT_MD`})icdClKq!} zmha66P{qnn7{+xrps_+t{2q#Z=FX z`p52M>P-3DwUNZ2_Oy}P7h9aAy;&0w@dB}pb}>n5G2A!M^RZ2i~EXiw|1VEJfn?Vvg^=~&;})=d2SLB4AFdBhC)NEL0+Gtp4^=g(+VC2>J=YBpq~foJj>Z-x!#c4BhG<1jU>K zNhD-iV#u$z+$FIro|1So=uYlIUjM5`w39M_a9r+WjmOGt z=_j^svHq(N^-1N1^=H6Nj)~{0w8wl8Sd3rVlxJ>4ClJ5E_4WA0==cih_}`-BU}xVK zjjkSghc}zbTgN6)OSkVga9Y2Q*QXin{>w&Se~?ZWyY`#ldn_8u3^OHsWP4iJhl(behY1pN*xahXO>?aFMqL%RP#>%lsW)jVs zDUN3QqM&bwdAxQDuN&7^TUBl~Tkdm90GSX>Vs8ENiFbO^ZuXo% zmh*hohUA=s3;Jr--LS$usAvtBjv|eX&*V zVozT=*e}(VQ08$Sc^}kvO;^>kR-Ep`LySk#CE)*jVf16O%vC$D6d}Sv4v!-#Tr^C!!_0C z2+NV$>u~O^N*qpQayHIxt@`omhf7509*z-&IxF${wglQ&kKIo(c6i6Ir^CNH zRt&m4XLGVVR>!OfUPYcpBieq>j$<=HbVf6H0*{-}=9os9GEcL0JOpgVCQeFN?f1=o zb?&$w$*;4Z6<0BG@)dW!XTnf7u83K5zLp&R9FwH#>~r`&?NhFe_!(i+>dP!kWk;1d za@C!S9CS9S)Df%c@%pWm*B_8t!ZE=M*KF6WSVY`HZsCOERI6u6k)dz23<%ezFA*EJ z1CBV_rdGR4U5fhEFPM>h?GWui8xI$E)`7FYB zNr%yT7dN%+ z*cJ5%_WO*ALtk3%%GHzTrSJ|k&CW12(f`goV^B7*b-VIpUKlqh7%E*%QR0r~9?j!Y zT?_LF527|6i>*mGn_7{8=q*~-6d>f8tB3n)??PWQ!?^~VP zqr5&%v%6p5W_q&Y*KjDFoe8H!7>J#tI4&+5=EbA-7YG=wdXKt|_fD-Wr{v>SaaJ!D z)AE*aIQF6Kh?h|q43Y<52GFfKj8J-J;pTr~Te0XHlba!rUP8TO(# z0!6Qgc+)Rij|sJ&TQJn#FrWKcx^!+2PCstSMmZqAygn%Js5 z>jgsQ;)IKgYclZ7070hk{xPgkf3e>8jhqI|fD2(~q&85bg)+!z9?Wn*3`F@kHPZz@ ztq-!t?AI+c93!sSts#-y6z^XSbbc*+U_$|frWa1U|Fi9vr0@&v{C>zcSbduq%cl-+ zc~hnZki)O2J!2iqQT9rXSrHhnr#H)ZsQR1z=N3+>w&Mn7Joswu06(CjxLl1D?hlxsF(Gy9LZEHauv+vl4?GwcvR$3csZByEdpi`0hBxUN?H%IOV6O;Ao3RZrOR_pANUjvduzM+UmSXVFe zK#lZSCxh5%e*(*R;;9(m{-m1> z*!K`3A5LO-S~VKw5$z&0CQ;r_x!XZ=78oiaKr%jx$H_;a!c?T`SEF-{#JA0zTN`d<>_FGQ|xu#nMN(93VMuZnwg!<%gL3P7we)2=5;2$yR%dK{hr#bJyo zf&~X8r)7j!NpJ?ybgE@pX^Tk2HCQS@W5TcZ+4xts~l{ zA)UpUUdPAvmt!}Y8@>e8ts0uxu%x~hjB28qStfgUa;X`PF2@c%)VH#uP)he3%n4bU zN#Nlh$W@(s@}Kt9;;K z3`HJ`2*$coUT!IHg6E@=5HArj4Oi$7Y>l7r*}B8ti(TV!Q2bA!i~@jh7T+~~sSj%Q zIRP7&*#-r@lAQBfek>Wdv5!`$mLUk9FA|1$0L(IQ5?-w~n#lMZd#`Dg*!Vpi;%&7O zry0)wUD<~sN@H_Y)%;fVO-ePx!x?@?9shl*w;Vg&+%PdYpfAo9-s+uL8o?ry)h)0# zlN|6Cx%o?1YYmIi;XoWH>DKl-k=`$%l9KDItFE}w;V@Jas}KGM>f9_^Fx)c`$C{?% zH@m;mwvBTHe$-qfAg(vPYN1zih*G!_5b?5vv=uNtd!>BR_3l!Z9CFq;6G>!4;iPY^ zHAX9zRbnfIcZeI?3846g(1^1+=@MsPFJ4=Pmet~U%+hLT)>H=!-6UqPTLMnlCKGH5 zPtR7x{&p|bx5R_0_yLI7B^EAg75$GX+xa_VXTAtzA>^xuE`lgeU~Ju3Ux>ofXx0Bi zDCVmeTU=5&@sTM)>w4$Pw=?{Yd!*{QDwk6|!sNNkdUx@z`WfbR$$V$wdCPq_oAw8y z#7%)XW0Frg(}&7WS^dp$^DEc61Vim6<*_$k!q6z%slr+YH}lO94CPiUPB-ZJYj{u3 zX9Z++RdaR7LWGFyZ~vKd$m^1uB)2vEVZOYYEEDRhBIy4Ll?+n7A`#Y&sccA%+M1t( zu)b~}keK$1vq5`eduPyGr{dqbjivm`-p7S{u73a>A(WE61UO?~yrKPMMOslF#Oz*pH` zWazUY#U>ePl_(vR;8_M`8&QO>`gr{F3fe*Or9;(C$IUTDUm0J)w!NRIc=r?@M*<$C z%bkPKUrT^yXR4J_Ai(S^+Z zD?7BG+Ik)}hS@3YX+uOwv#nNz;><&A(<2sBE;E# z$iyh=UB4zZ-Er1dmU9=q!hQ;X8Z+gS>a(9szGpu< z%Q1zrq|(`e>i3#M4eDQMv|Rq5cmZJM=d z0E-n}&as2*heQrXEQ=1%f(&5h9Q7)|K8oXQV{f`p3k8j^lYiwwgS2cmf-W?Vs%+~e3 zSC$-l&bJZyv=eLQ73SaE*dL9ZVL4ZtvCH`V!PMtz+2g9xfr7xG;;uWxQm>kk#qj!U zDW1IxhXD7|;IT5=&GN`wtozqivL zFChmme5Ngzv*M;347R^71X39``FgM9w0V_!{exf`OKn#JmcQEk$s13n6sD!@5f<>g z>Sj4I8#$M>$nnsPe{q^AIR(yqEW`4fN^qVIz?D<~! z^$f;&^O#VPclWjfjkw$&+|xo|wTy3MPpB7|LaNntKI5l7c^bbQ`_b0$J<oC2|{`!hN$5f91>rS>aceKTN zD#x02ifosy|L_N!hiCRQT5T-3H|NWag)`R}!2l=Joc^705xvERqGCROb~&$98`l}| zAl2iQ(R)xpt!S7d!fyg9-4lLIe>0j4?!(K#s95noB4G?cNnn=($n*Nt9VQlT%whb0 z`!O=OpP8ak*W;2ltu_?0bLq|2 zXz~WidCPwo0Pt%kvmT)jcn+b5U4X_*k_~!2{M@;|j!L}4cO5DW+>g*^8(^{!a8ZW{ znLbDecph4-%;nk!+*yZT5A!CQQcaK@aaUhW%=dkVPAMosjjot>#kvLnq5wAbTgA>i zwL*vXZ%iDoWSe(c^Nb`@#T+DVQ|rt)Yr3>+oLJ}x>7b`av3M@lz!T!n-+=M76;V6Qj_w9o%{D&iBw!CH?9|1QUow+#;lCZBvMKnzr(d^+A*@t0IhL(Y^0=*Itbd#If2nHR6coH{^bMctuAiv| zGOZt08hR@Q_}iZqTh_)Z-wj?wcwSpd>7`YoyF42|9)6hKPF#%rpr+TPAOAkdwJ{kW z`2Nv}VS0gfBYSV$(&+Jiy$>{1tMwY30+?2!HPZ}jOJ zDCCfl04i2(o(tZ}4|q2ASdhKdnmGQL@7?<3;TL4x`#Y33ZEG<(-XJK*JA(4DpNo0U z*&1y_b{X|~d~r4}rE<@@h}BB3p$`gYK6sCUEn`jH^>~wMb$P4MtOiE$th$zfs#D33 ztclx%MCD8fHfQ$sPDoM+qy$LdBjGT`_2KucEL5)wDtr~>cjc-zNTD zsQ4>JO^wwAMj$L3sh2udIFjZvD%~$cM7W(eJ)562`_=<9qAv$yxxXuJ|77IgwQ0f) z$kk{xxf!i!>nDS5#Y{!A>TES#k|<(^8F*}yAdey%kapV7F?tcGF$tokEYPns)P6j$v-WzO*wP^|t>&diLT4^C~ zq($Y6{V_S>e9P`&-KoAQof8j$-MBw6@`0ieD^1ptUqCr?x8qJhOFOS_tAbCeaBgeV zttniJoV#5=7$e1nHc02OlSqsV**zJPXmZAw6YwS@_ra01R!L=X3gr&jc%)D_tk^{T zg*Z8@FbjMiHYEEktk2pdF^Udh4_CBZKtZVk|GfNmm|aHxJV6WsV|2`evl;udiyeFx zey4m>ND#r}--f|T>4?xJlC+4^J&<=Rv9iblM(GKU2`9&MCZxed4!nQ(`5`nqk;K^-(HYM^Y!UJ#xN zHW9e770s)kYp=Ex8Th=bikS4?Vp;;-VJCYoYw3{khmEc#hQ-F+;o*5Iw~xs`KQTO( zUpT$}`ufh&HCDd}T+;?H!Brcd&e90LtW^0Y_e>%#haW(+-YNq^Cz^;!G`cCWQk{gb zJtx31|F>aO!%i$2I*e5A!bSIziu|!dM6|yCnZJ#YOz%|J~(SFY7v`L^h<+O7+YVUF;P+@iFRWQW_Wmxzx*6<^JK6ABRGUk;xJ zf)3>x)ms8?bV9E;cB928LGf!a>hhX(QSE>7INU&P0NE*j@TQ!xAc|7Mv!b;k(GiL&2?Xu%q{wQ z0B2zP;^wZd%f!Yt3woZ@bE$LSma*>yjawduYn}QxSWAL;4%kbmyR`LhGef&!&|5`+ zCl7qcvFO@@70-)*Hgvypa0F$mgI8>m&4RH@G$>0wA!Qt|)PU=9okZHb+p4l7H>3cBzXqMsu}&h$gC>j{bRW!}+Zs@3z! zqY%{NzVA12P%u=%Go9z&`ff@#voDas{Jyg^F6LO|hE*;0w3b}XzZiz#c{!;HX)7bP z7%&8X{xPN_-D6cSnk|6Q)zTTwk_NZNy3AZMu-8cWFxQW8d7HA@0j^*h`*yRmLi zSkNn_gns6nyjc0l1luPqazxS?Aws=7*QE7CG2Ga zu?oQUHz?5-20fqfOZ<~goM74c`eY^l2%0jUh>Oh*4eVdt&tQN@3R8Z_T|s$QAB5fJ zp+{#TADW)i4Obu{a8U$Xf3^0QhEpUPBgnZ=WpXl~EQqha6NU@@`KC}{L5br`nT>9<1UBKt%R^+h(%*S7=W#i+GrYQ1tHy6}LMJ1QNh8}B31J7Fb z=&R$>vuld7+<(!+6C^^EO}!+4e4F|N#{-5wcjXHgN67FzRQnvp(NweGW-UINFIZ?c zBco9BWc-8u*WU$BqHfx>$nSaFPu{&=A=xwgQ`+nRhco_&M*S`N$3^g=d&Sb9HPfuc zfPlBO5-J62MG*-yXi9p#vEPJ2O%^F-crvCbekdU-NImVNDhkPNTu3_RjuxZdrj$mxkcmFhc}Lmjp*)qy$8jtoyRu`v)uF; zO%|B0N)}SqVbXE|m|xXrl@=LA5I~gTsqV!QLB8FC;7}Z@^7?AzZtGiSWY)+Sn+{E$ zpzedr@&(hX9M6+UjRFl;&r1z)96VsQ>kqlj>xfyH*sXX6BDQ!ZgxmIjyP^1rV++>O zBLP5E2E@quP`0Rva*6jvZeb2}HF^CQbJ-hX)}K9z>7hCiCCN{)F!R(A?=Y}GPRMZb zbP4D%;1%w0mG24vbXV$_wMJgX{_qMh-s!#4ZlxTVdrB(I z8BPiL-y0r_rJtoHOaVbbN<84uyeH$dil824c5oo|<_4TSES;|lDUXU@^!TQx{alin z$Lmwsr6xaa&*7Hq-QkAZ+^|S$KMJm{I-eM2lnR)RdgIJGQg?0oE+O=iGo!b*_1Fv= zgU&%Kcg3&FUq}Mkl`#7V^+7b&6XLmrxvrdpD^WzW4iwij1{>;<&c||~VNRTFKg5iY zTOy$5PTN7;J~r+WBwB8QD$V(I_e1W~XMwgkgm6&X4(d=pDxg_kAK=@RPNrrKM?Xvsm~{=bxpr z5BCDHn;d`54}PLsqmO`C@@lOosZ$b9e|o|EZD$5beIO=-Lt%mh)U;v#?- + // 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 502/660] 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 503/660] [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 504/660] [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 505/660] [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 506/660] [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 507/660] [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 508/660] [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 509/660] [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 zcmZ8|byO8!6fPkhN+XS=bax}&NOyO4k02?{CFGKlB3+kDH%NDPgLFuX@A`YS-kX1B z&D!(r`DWMIXU>`FHu$Y}_!=+@z*X?=9U~$foF)n!+-o>EI6o(LUsn%D3s+Z1Ha};l z3T+7 zg2_kJQamI#^YZ3-1mavlRE134iuBHwSigG7$fhQ`mZk1q>3|4Wiua zZBK}g^J|KVD?T{EOYpNy8XSwcXMZ!gPRFvXJ0SOSC^INAFU!sTrkkzZ3-(;&ONe#f zY*6;HOHBIyk;BS3Hszp>%y9ikGXUV~@TTRM(r*NAN7K~^8GytzeV8;D2~_QU)6!*6Ur zc0<~Jf+$QB)gl92Z*7#PxxDnrp|fRAN;@9Z=yJ6%H$xs!UE zt(38X4VTSxPV zqp9uq3N*DpazhLxf;0BxH{Um#5aiX4`{Me$19;{Gd#OR^0mdF#YOapJqb}*WL~yU# zs*y-G)cxW2<4eGgoWJ;+%J6(UT7=`->9GJD2>um*{X9B10x)6lZk(GA4levHJRI@= zO(;)0Yilo0_Ww?t|1v8()!B8KuO<8o2^_j%DazHy|A0e71$ zgsj^&U%pTuDR7-)m*Du?`59o#-6=+j&bu2E6L2CY>CRVX8kO(>}i|m5T``K%D<7-Y3>Q6Q6$*a+?9C1}k6`*s&E3RIy~N5jvFt!g*As24_1g{TGy~>46d|-7>Sszx6kV*9uVfwAE*fEyYIu zploJUvIfMpH%58tkZ0t-T?f!p_XjNvaY0z`E*9`sO6Im)qtrF5<~au6)#d^_K>&^c-Qb1D*IQmf>F5)NQxI_JM|g%GDNK zVd>}mQ);~D!kK-$YCb~on)Hgn{8LWrVZQ0fFKKy9Nz zZ6o)-dO%#(M6pGqWzCX&s{>Y9B^GugsF8`r138ifjFjcD~yLEm>~eQ7?=VUxID zS}!g|Co~dbmjgx1`4(>?tv2XT+uXxUPPTf%H5-CZ9@0sYS z?$!a86Jan0wo))kJka=B#ocnB>MF)639| z!&%W}SC$^GJd%cKX8dE4E3tI(F8+qzMyFcIPS1<6H9k5$TxBE;%Zv_PbUNZlWo$WZh|+-~R>qFe(dt zO@`LDcApWY^X%4i+ut4fd_?!aT{TY6t+D~*Dw!hqD%4hQ65NFlxA@)l5ewrFP!a=Wq3G8QPb8a zhwho$<~b8NENe20rkfk&jHhOii&>fieyeMHldrqGUIV8+veqRDwpWjHtE<3gAd9f;-b~6GMD$LmTcvErX^0-%9uik(v+A}q#JIz{Z z)C4!*-jA#_5AASDULTjV44 z=gr%#jlBbTsH#89UK8np$py)!Q3@9fXU1gxrj3fRnHV6Vdd2y*bkqOR2$%amfz2D1 z0~b%KY>5>xS!-?Mp%{xo=7G^L+`Kb>_n33+0gf_j@4DEtKhhQ<4oewKGzO;=hMJDD z&5Bg7xLt307v1~@E2Ut9&KTz2`S(|>CJ<_?8WB?#s717^JNRBxlW*r&IHg&p zJP@ULxvsLjy1``h=>SFGjSD-SC=7R4T&jZVQvD*EP1AkT3)2`Epd%cXU(9orA);P(o^S9fpO*SG@;18T3BMKw5}9SS(~Ta3wnG&MP3 z=AgunyQu$u1@giaGQ6-9qEE_ar^ABryWcXCyNA~fD=?ol=k^S=g< zkai6dTn)5AOcpLs6Pmf^J8=qkBrx03Q^%n~&4%!>q!fRM8z58gYO1r&nfq=(?x1kr zw%>zN;~`Vy(M~R1xlXYJT!BWJz%Jbjyw!9BJXPcSyxNke^N)9exZg!!p)qB6fgj9T zmhbL8!2VBw@JkT)%F9ah3W5XnND#@-l{(sJ z6Hm!kdSy~wht8RF-ivhroGBR@*{innzA31XA*4(|%8mP}54b}aIc;-jM$-6mujRkU zBYwdgQ`lrg2A}Rv$29a4KFV>iKVXcM5BAFLH|eo7uvbQxRh5u+8%?Y2;dKBTDQzFJ z63Kl^V}7OTsrKdipCNRhvj0p+(Y|+uTI11Qt9y-hfJ5eKT`?h0Z#l!$oW46{$d(Al zth?(U1Pq^xgjrU_5maf+>>8xVxi*U+R2Wg)?)FCEkcHfLrSCby^@OJQF~2W%_rCfG zU!g@El=_R+ydhw>#=7{6duFa+CEeUjdO1Ce+4RBO0#2M6y~|SeT?_P0!hRiX+PX*C zE4>FvCWW$RRG(+!OSuRBQNX(A9HQQlWHY0v;9n_E#R)#52fen8aG1XhbB^GN!y1+JZfz%s6}6cDn*3LejKS-YHK{2Rp-DN;r%RN+wT+tKW2B@pA6b+Oam=BYClvAjMG4z?Fed&;{nH3%X zr%~k>#gc(K;k^bf3oJFsX=7>-ndUq^X^RHo0FqDLUq|V3{VD1CxnSv8`~|7oK$TBU zD#Y$=?qF%r#Opkbc0`U%AFc@$*!X1CFbl#G2)g#H?IA#neKjhl&=pr+uQL?>Nu!SN z_BYvqV9H8zIscm3VD(Gtcy}oHfw3$TMl~%!hMsV$B=nHYIJEl>}sW%&7_^?oE<~V z!`=dyJkmw1K~$k~$Srb5EADqeYvTb%xgIuBa)Nkw-cAc!ec4k_Vcc#X8Fu%Zi%OS2 zvVD*46ppx4xR)XOC3`$HT+((`UF_5*Bh!0YR#daUcf?{?TyKWC$Us>2ImQd+X`abq zTY~_&H*eK8oNpclkFEWs!swAdJ;b+VFm(!)AtqrTc7T+o%!4yZKVmlS%0IjZyL_7u^epg|hPs++X>PJYBvPXpX_D2>J{m-$>bZP;1_O*Rko? z+rAC%Mq9i26eo&ex=DtlRQ%+7Frd5|hz`h&pHbX3o#=5`-MT7bp1s7KaNfnq{K#`22aW;m)yQpq6IDPsWCp+( zdXxvoxV{QbAIgJ@c$_61h2{U>izH%dxE| zQOO{Rb8g!`v+;u^Vm$MXL`O4&ri#U>NS^&;o0*e$(r&{tsv5EMhcahD;n(N8;GfI> z;xo?=yI!-kKPoj1M%~kwENb{&M1fm2MrfC9zRJ#CwRi>}#bkZ+ARcPc17_?3KTakA=qMoqo$3%qthH4A6o7o+i_r_oghYH<&Wh9Re&#P66RW6L92~ z#}-=SWxUIctBJa-iv#DFz0F8t)y$~pu$%ot!@_`g%hdG48s%SHQ)N%4cB7s3_HJ(q zvUJGNj?rQre;KQRB0Dk7pN6k{Jk5Isy2Fs)ZpI6#3j>BN@OR>io+5?$@h!CC$P~wK zh)yS>mjcx7XCm`F_hi?1A%NNIb}G!H*&xmvZ=OqT93a58v_b zi+>ZlPnZhFAc-Gg*QzukD8k_F26>t07=`1-vl?W|-q*}`e1rNZJMM^Kan)DIq zZnW%+kMc(B_-dAWJ!F5$Gn??RY{%}%b|Rd)30_=YG~nOF7|_9b2->JE_*fPJ37)^E za$3P=fR@zr@h!lZvZbhByjl*XG!A9!H-5W`lNv;g+Kc7`o;llGh;gJ}ao(v@36dm6i5Bbk9jzU+ zRVYc%c@kfU$cc(=p|9cdS^4L>X%(33dJ5Wo?sywdL}-mbdZbUM$S|0U!CB+k*G)ru zVC4CNb)0+;kz>I;HKbbKttlRb{}M?_tBZNW@M^fmsyR)S?lQ?nMa6j(3bT_686ne{ z;qdUJ6;}E*Ed}{kEdFDu5(mp6nB(mlXLj z+%eGv!9NRc4;+0h$@gdP)AFt61-=|IU@ddBv8{%Y@}DhbZ_zip)whcB&vz*C;>fvw z85b&nzg}Dat-ET#+N$RP{4UV(0)1ysP4y zQk`8lm)*275U{evFhyJ6`lo_(s_+RFPgJ9E*$q;4lAMLeyX+CTGqU5-n#QzOkIYMx zo>HIov|LM=5QJAH=+YFw2LT4@l)Rhf#+&se>lWo%oQ6LRISG6uvT?So2@Wza&l`Mc zsv5`Jz`$*>KW?(=D?A0jdcdD<$mNWf*lgr%61)0Y?$S|_prK0{$t#L^1=WdP2#u>w z`GSGY3iunWb)F8BG%eBv8Q-zL?WeEt`7B`r$sa3P>3qg9ZOuD)Zh`H;Bem^UGq#A3x zU9dA4Zr6SZ*+Qn?9nx9pjO03D){weib4PBdEu66}2y)xS6S)@b1jd-uM`?TQsjk@J z2wCKL0naIf-+;yv1>jTEsDpho(+dt!A&TC;1A^X7o}+(#s>a^NvmM z^Ds$ALHd{SR!i>|iX)ZEK-7yv)vU-VB%7@2aWj)s@rWms=gv8nlF@SLXy!&3&07>E{9F2mq zWbZ=l-(egH#iIxwAC2(1Nx6?@jXER|PjZ4MxP_{$%xY!_aT82jOJlvvBa_jm9z#e> zm`zDtLgu%gdhyfeJ$Rxay#C0GdhO7MO0>NAa&MZdpvnUMi}qr>bW`pc=f(=RU~vfC zAe26uZ+$)<3UEOb<&?*5yy^;^FDxRbd~QNSuu3qP187nXBPxTOq2iwf&Nj2c1IVD0 z6OZ~oazmqzPLH^a%@iuPZ|6-($ZOMzu}o`bE$IU6*!8v-hjwS0{TxFU245fVQE>M~ z(3?GIcP>2|wIvP}l{G$d(4gQOB+MFBuMFHSZw*hQ1GPvahB5W#F*_wlN}J!(MjNtU z9>Hr+Q~qtm8K!KcG56bkMAJumcDr|Y_{(LOg-1Px%L7PH_r@%(C21uQ{m6l`fnas1 zZS-O6G5@4iZbvD5%gD88W~D41gPOJ+jZEHH#8M=s?Wv|uylN*9&VC>0bhy}+4yPxJ zc^PplKq!bR5TIYFZ`Bkp2kA|#)Rr^GG`00J!umP>yWTlUJizxDN}tHru@n#09Qc;{ z>~M{F*TgLCWf3a(O#1zf^y8 z<}GI89vi7{=YT$ubMIJIpmZ7nAkx9_ulvVl-H89;@p|oK+jIQ ze%pnV-6e|I^b1u~o~_^WiTOdm!E}~z1!`HdXH&drQ*RpAajJKMb50#CzWv~uxAqD! zPZP{3TG#o4TyuHs(wD}OqV17{+Uv3xYbIFhE*%TmH-Ok%E(QC^6;&gAdhID+P5E)b zg)hXqFY# z#86T{ag&I}LW6Dr5h2X4E=v(vz97J(puXuUyy2>DYcbzdu=F<`S`Is(9fab0f{EvO zZUzHgAog7<8vnyy+p%3z-37H+=HbO=$!Txs)A8F_e}6>~<&-DQgB4Vd5jL8y)w391IEGwO>*mY`L8@a7xdV5 zYl>Z1Bx0mP`VS9O0>=FR$&}}Cdv%$0V1l1v#ityPnGh4tmE4R{7HUneekp3!{i~9s z(O`RNLY66u3vXQ@4>BL|#3de)H75FkK0F;cqULXcf+w!&RMXa8cT9N2x|j1fV7an2 zyf93pkUef!vapy>t3*ylMn{=IPnT0uJD)p72O4$*@k4bmjO2R9(y7<04z~lGs3*V_ z1(uEYGG5zUnc=~#=W*B@=0+=Gj=whL_vhOho(7a)S^=U#yKN59-nCyciE_quf&A8q z8j)oS*$oGKOXEr_j>R#UGhro6?;4;5G4&nZy43(}QTj%Qwudyajmw;eY6qML@8(&d&HHCMqMYI|pidrYu z&X#MeqMgJqy0ERgZ&F_#bDC?RXMJh(;tU|e>oYfJyLWvj9J+-Jx5P6nX>`Bi%Nu*s z=w}oEu9aV7`Zm#5Rs?rHMTidYD0wRc?^vC>6{C6YvWmY3Yku7|NHv|h@Vn^|B>RRz zdI}7*x8UjKCNb|bz;|}W!Wu2tMXzc;@hV@#E{)^aAl|26*ogLjCMUNPGmmK6HR`vW z`9hxgz5$k7o1;Xl2_8oRm9Ed_~0!MpQY>g`}_)c3_s zTRRJ4Ynew*Vj)km2ZQWP!z?TFG=GGRz5&d>SF&7FTLx$}&qIL3{DIxJ@Y^f9+KR$? z!9m{F#~qh7K2UWVsAg^<+IyM+&Os+pF3i&z!N+4J%Ne_nAWQi*dp&gUH>R=`s+#uK+`pHK?#`^MUeGoUYx zR&~Aa**kL35TBHYQqPCNS!0H_g`-?u2K=VDun`xs#Xvw>Q*j$1Odg--73<+A-&|77 zS2dRd)s)?8s2AKAKWOd5;KrUnS6t>vNd%iF*elVnq2{NS~3vnu+C=nzg3>uG}E{9 znfwFF5-Kq{*!t-Sx;SNnGjJw^{ zg#(1ILGQjjq@`SlVSZ=EAU^PYyprg2EFPK>8gd<-x)>v3rGSV@frgm`e5)Vy@8a|R zMS4+UT^soYt2aSTrT6b;NUyD$ik5R+rLcQ3#?nruC3Xa-?2b(ub&FqFQJ8+Epy6G7 zePeF~eNPr)-Plx82}be()1@8rk7lDgAb#YZ!afj%-T0IMnD0X@E@%FQTg$%h8h^+F zwr;vQ4@NqT_P*YJ#0Igt9(0q9>O_YQ(j35ha?-Y-Pi`@KHwT$kDZZjI7KllFl#j|KArt=mVej7>t_z^ zuLz`6=-b`JM?iWbXxpp%0RgAT)~I3(9I$EK%o(rnslUI@?gwG#Vg&}esJ!aJZ}j<% zx8+5H(Q*jYHkE5R-Vmo+SRL|;`+F4tIb*=X@wktE=_%L*kN9jro$$mTZmv1?`R%VS z3`8Faqg|b3^2mw%-mmJyW^8MjcE`_K(JG)>4A3b-iGHV5D&Lx5u=08$jP(%Guq6oli@?b>31z3 zAuFPLmuYd1U6YH(EsPF(B)k=!4#??6f051fntf0ES5s8NjB>$wZZqQvdy44p;ROi! zpIO;FljVqqwN!SXTRV`mlW$cVGm-Tn9mQaylh3b~pz!oCt-|JTjX!d|FO9v2*FLc6 z$>d6==BgOOPs`4r{^6`<+GKWTYS0j-cdWmZZ{sAed*Ms{3?)tY%j`}PP+(nr3$ zIHHVmw81Ec!_}YfS~Fv4PmFvb zxrS_fl>itZ{f1O{PGDISdm{!>RC>E3f2zNJH|c-hp_dsn_6H|S0IPGR}JO&Lv9Mg75F)p!JiEscRJ>1c)E6bUE+ElXyS`3zVLzr%Sizs)~d7ld#bHuqv#KWulvK7Ioy`fc1tX!qvA*GOE-TW`NiY+U`x>k!Ei-8D|cu(2w{>#Y$pc^qXWe zF$a8pdY$-sSlxtD!vnHU9^!XXN^;I8pK2kzW2+vO5B zz{P$WdS8TBDdQ++oIoF=ekU%FauE3bI?jsK0fZI;Zp1|5+d4yb>uL$k`-rlsKhw@2 z8oC$9^(}{ST}-C9`gs%Oj**&Pss>34s=2`02%*?`c1CFguxk`!qeI7b@DB6Y1(J34 z?NIFWnr_e^J4pAS$)PD0APAk5skh-=x2LWeV%^3V&f3-a#d#KB>J}-+W7=;HR^v^) z^!HBzGlV=dG1+c|pdzJJg)z5I8&Dv^&F{iWZ0=+L)(~2@NW9+>Y4j#n_2RC-+Xs5D zr9>u82l-FZ)*MZ8xgtAYpFFENt9oPJ(mbvK6g^Y^1L7~2cN-YM-|Oe&yv~>Bzi{f~>(YOU zrqs3H9lJ&rH5jq!jgZ4o{)9rCe{%BX`&Tq4;xeaB1O5 zt$(7P#xk=)uafq!zzS^TXz!*P5ab-7fUn}Av}JZ&_$wsFxA%pAwCy7ZDoP0aeR=t# zHi(7i;iL6K$6)hm;x(m>TqS;IW6+uSpPk;s`WZYLRkf3&Hk*NLvXvQ-<@2Wax8g8Ryh;qf<)xH1c5l_3<8{23TCet#Ad!CSGMMMZJecRu{{s~yDkm~x@K!2m zKlGR;l{S5fm6a_a#4a1UFFynXTsLv9R$5@4jF2}GzQkbG#iglNR;C3oH4L&ys6~+k z=g$gplj;7i$Fsp85^^BT!jTu!p8iL78*W4SYC(y<|J_87Z#@E!wvW45aesd3zu%oUUJv?TG(7osuL#Ti? zJ1QUj{kJ*ad{nMhi$ZZR+sMB+mi1H;jR?Ts{QK+{ZFB?LWu)gf#IbKW{qebMkBX=+ zYXZpJ@c7{!ej6#dNC)L$!!tgTdjO=H@kJ?G%BDZZ)m8mAGP*)EQ|JlcR8ty0%%TQ! z2QMa2^{m|Xnqwd54JmoBZ)0n55y;rLi1?Sbfoa)mPj#g^n_7gQN6&YJ)TgFmqjIC@P7|tv0|k)<(b?WLmK-4 zRl;A?++qvER#XzKfzI;6w==ADJg3s|S4d7p{7PpVAU<@IxJDpd`!J7Edc+1`CFy&t zfD5y`f8Vhns?TTJYbrIR(5wxU3Np$kXh&)!XI0gH$U>CWG7`CQJ!F=CV9AQ+x%a6M z$!BK2yHvm9Tqr*KgjkyDxM)7jfwu51YhJ!isi~?}A71=ZvYBX|q}7K7xs_O4G7wAY zPyhl%BA-&P=?y%`g0F`qoMkcqbt)tg^1F0cT;(#}^N1r8BF&KKZHpxl)cb9nytCeo z_P)oa>KAmd3DF;isd4hXQ+TUba_mN^Z-ivscr)UByPuXw8)CF}hv^?w{dM#e_s~$+ zJX%T{clxbO!O`RR{+44XNkde~H%P;4D?3bcw>#6XUq?u+R_qHHfzV-q*j@!n7;68knofCMMf%rvBi#JO|jOb1~W#j^Bvwqugq(Cl^ePd&m52^nzOjl ze#m7n(ko^bg6UioDJwT1lppuZx&z#9eV~DUVvVoZBch+}idk0T#7~7fRp++#7UGzH zZi33B+^Z_~n_N~|BkE+O#hNg`{a#)3M0dagxhqiJ(;$L_wU)d}`nZohhqUQJjr@Z~ zpRCNej0Ht97$-jx?=vpS>3Ko~E@_)|#-!!uzIZ)~Nv|WCG`9oL%<=6ihwF&Sp3xyH z2Bl&IzeO!c{T*+Z`@|;^?Dw_UlV+GLS;+#{gH)DPubP?zMa^#ObkmAv*Zu@o@a!XW zBdm12h9_@PsUp;(HZ%SFxswceud4^w3QpL}&#Ln838%P17f095t=$-hKZL7uzHjz)w_MDSw-p$On!Asp zD&X2SFr+b#pY}58FL_FfxkNK9X!dPp@i&s1MN6CMwL7h5E_W`^cW`Yju5wZ1RdGDBLlM|sT;!$-OVmjSm7Zg32>hq%m0CUMZ4tTR`T%To1~ z8SM$@Geg3R`2XCMX(*?Hg!FJtOoRcdROSG16%+=RLpxB3e-g_0cpfG*Pcgqsu}ku@ zDEtYqzh_Q>^-%Blj})>q?`$Z}#mNS#@0l8s9Soulu_Hsj8q5tHS(Ar^SWsagT0YEP zN~&0p=Z2$+JB9o`UB5bze06qXHE-^E8bTmba@zlMEN3}(D0u0;sK>F%ZzZc+gNt$C zMrzSL+5**{$3rl}HhgaJg)%Amm_16=ZVq~&BQ_$rJQGKNY}vZpp{y9FeSGo#bD?U; zC(7TX7a9gR*dQAaoN9c5!yL)GVyRDI|yc9=c#(}5mv3< z_Tbl&6kyo#y6rgo{9#kwx%wG6J|@jsBXWejpmDw7w^tbo zUf_>^uVB_~fKNyid*m*f60rw1N5+Rw3f&S38rZ)IhGJh$6Kmi6PIqcOb+ih+RJ**G zDt>|}-I!$DgKHIc-Z2QiVzeFQS+RU|=cKg;j z>`2$RQgFutt(6mB3|Xw+DJ0H&SXdi(h|;7Z(sVhIG; zns=axkz?{7XtHppvZ@QLqJ;ASAG}vw+%b4j)?tcxUWpn*X~()5c&~<|5>2r z4nh|1ydvv7J$Uhe7Gf&eep47(eC9(3w^xQgdM4H>0Tt<=>B)@{O3_!JrW%A+rAp9_+u4 zSIGarYDN_hwXp<(wL0iRjT97O{D$nm2!V%#b3lND!})(`L~DS47>gocXn~H5Mc{`( 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 510/660] [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 511/660] [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 512/660] [Word] Snippets for reqt. set 1.6 (#835) * [Word] Snippets for reqt. set 1.6 * Add paragraph events snippets * Apply suggestions from code review Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> * Updates based on feedback * Apply suggestions from code review Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> * Updates based on feedback * Reorganize * snippets mappings --------- Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> --- playlists-prod/word.yaml | 44 +++ playlists/word.yaml | 44 +++ samples/word/25-paragraph/onadded-event.yaml | 128 ++++++++ .../word/25-paragraph/onchanged-event.yaml | 130 ++++++++ .../word/25-paragraph/ondeleted-event.yaml | 131 ++++++++ samples/word/50-document/manage-comments.yaml | 2 +- .../manage-custom-xml-part-ns.yaml | 2 +- .../50-document/manage-custom-xml-part.yaml | 2 +- samples/word/50-document/manage-fields.yaml | 2 +- .../word/50-document/manage-footnotes.yaml | 2 +- samples/word/50-document/manage-settings.yaml | 2 +- samples/word/50-document/manage-styles.yaml | 2 +- .../50-document/manage-tracked-changes.yaml | 220 +++++++++++++ samples/word/50-document/save-close.yaml | 2 +- snippet-extractor-metadata/word.xlsx | Bin 20543 -> 21437 bytes snippet-extractor-output/snippets.yaml | 291 ++++++++++++++++++ view-prod/word.json | 4 + view/word.json | 4 + 18 files changed, 1004 insertions(+), 8 deletions(-) create mode 100644 samples/word/25-paragraph/onadded-event.yaml create mode 100644 samples/word/25-paragraph/onchanged-event.yaml create mode 100644 samples/word/25-paragraph/ondeleted-event.yaml create mode 100644 samples/word/50-document/manage-tracked-changes.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 048d4ff87..8735d1564 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -201,6 +201,39 @@ group: Paragraph api_set: WordApi: '1.1' +- id: word-paragraph-onadded-event + name: On adding paragraphs + fileName: onadded-event.yaml + description: >- + Registers, triggers, and deregisters the onParagraphAdded event that tracks + the addition of paragraphs. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onadded-event.yaml + group: Paragraph + api_set: + WordApi: '1.6' +- id: word-paragraph-onchanged-event + name: On changing content in paragraphs + fileName: onchanged-event.yaml + description: >- + Registers, triggers, and deregisters the onParagraphChanged event that + tracks when content is changed in paragraphs. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onchanged-event.yaml + group: Paragraph + api_set: + WordApi: '1.6' +- id: word-paragraph-ondeleted-event + name: On deleting paragraphs + fileName: ondeleted-event.yaml + description: >- + Registers, triggers, and deregisters the onParagraphDeleted event that + tracks the removal of paragraphs. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/ondeleted-event.yaml + group: Paragraph + api_set: + WordApi: '1.6' - id: word-properties-get-built-in-properties name: Built-in document properties fileName: get-built-in-properties.yaml @@ -306,6 +339,17 @@ group: Document api_set: WordApi: '1.4' +- id: word-document-manage-tracked-changes + name: Manage tracked changes + fileName: manage-tracked-changes.yaml + description: >- + This samples shows how to manage tracked changes, including accepting and + rejecting changes. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + group: Document + api_set: + WordApi: '1.6' - id: word-document-manage-comments name: Manage comments fileName: manage-comments.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index a0d075f54..c7d6801a5 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -201,6 +201,39 @@ group: Paragraph api_set: WordApi: '1.1' +- id: word-paragraph-onadded-event + name: On adding paragraphs + fileName: onadded-event.yaml + description: >- + Registers, triggers, and deregisters the onParagraphAdded event that tracks + the addition of paragraphs. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/onadded-event.yaml + group: Paragraph + api_set: + WordApi: '1.6' +- id: word-paragraph-onchanged-event + name: On changing content in paragraphs + fileName: onchanged-event.yaml + description: >- + Registers, triggers, and deregisters the onParagraphChanged event that + tracks when content is changed in paragraphs. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/onchanged-event.yaml + group: Paragraph + api_set: + WordApi: '1.6' +- id: word-paragraph-ondeleted-event + name: On deleting paragraphs + fileName: ondeleted-event.yaml + description: >- + Registers, triggers, and deregisters the onParagraphDeleted event that + tracks the removal of paragraphs. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/ondeleted-event.yaml + group: Paragraph + api_set: + WordApi: '1.6' - id: word-properties-get-built-in-properties name: Built-in document properties fileName: get-built-in-properties.yaml @@ -306,6 +339,17 @@ group: Document api_set: WordApi: '1.4' +- id: word-document-manage-tracked-changes + name: Manage tracked changes + fileName: manage-tracked-changes.yaml + description: >- + This samples shows how to manage tracked changes, including accepting and + rejecting changes. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-tracked-changes.yaml + group: Document + api_set: + WordApi: '1.6' - id: word-document-manage-comments name: Manage comments fileName: manage-comments.yaml diff --git a/samples/word/25-paragraph/onadded-event.yaml b/samples/word/25-paragraph/onadded-event.yaml new file mode 100644 index 000000000..655256aa1 --- /dev/null +++ b/samples/word/25-paragraph/onadded-event.yaml @@ -0,0 +1,128 @@ +order: 9 +id: word-paragraph-onadded-event +name: On adding paragraphs +description: 'Registers, triggers, and deregisters the onParagraphAdded event that tracks the addition of paragraphs.' +host: WORD +api_set: + WordApi: '1.6' +script: + content: | + $("#register-event-handler").click(() => tryCatch(registerEventHandler)); + $("#insert-paragraphs").click(() => tryCatch(insertParagraphs)); + $("#get-paragraph-by-id").click(() => tryCatch(getParagraphById)); + $("#deregister-event-handler").click(() => tryCatch(deregisterEventHandler)); + + let eventContext; + + async function registerEventHandler() { + // Registers the onParagraphAdded event handler on the document. + await Word.run(async (context) => { + eventContext = context.document.onParagraphAdded.add(paragraphAdded); + await context.sync(); + + console.log("Added event handler for when paragraphs are added."); + }); + } + + async function paragraphAdded(event: Word.ParagraphAddedEventArgs) { + await Word.run(async (context) => { + console.log(`${event.type} event detected. IDs of paragraphs that were added:`); + console.log(event.uniqueLocalIds); + }); + } + + async function getParagraphById() { + await Word.run(async (context) => { + const paragraphId = $("#paragraph-id").val() as string; + const paragraph = context.document.getParagraphByUniqueLocalId(paragraphId); + paragraph.load(); + await paragraph.context.sync(); + + console.log(paragraph); + }); + } + + async function insertParagraphs() { + // Inserts two paragraphs within the document body. + await Word.run(async (context) => { + const paragraphCount = 2; + for (let i = 0; i < paragraphCount; i++) { + context.document.body.insertParagraph(`Paragraph Test ${i + 1}`, "End"); + } + + console.log("Paragraphs inserted: " + paragraphCount); + await context.sync(); + }); + } + + async function deregisterEventHandler() { + await Word.run(eventContext.context, async (context) => { + eventContext.remove(); + await context.sync(); + }); + + eventContext = null; + console.log("Removed event handler that was tracking when paragraphs are added."); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
      + This sample demonstrates how to use the onAdded event with paragraphs. +
      + +
      +

      Try it out

      + + +

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

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

      Set up

      + +
      + +
      +

      Try it out

      + +

      +

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

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

      Set up

      + +
      + +
      +

      Try it out

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

      Set up

      + +
      + +
      +

      Try it out

      + + + + + +
      +
      +

      First, choose the Add sample text button. + +

      +

      First, choose the Add sample text button. + +

      +
      + language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/word/50-document/save-close.yaml b/samples/word/50-document/save-close.yaml index 4a5b6c8ad..d7fe03cc3 100644 --- a/samples/word/50-document/save-close.yaml +++ b/samples/word/50-document/save-close.yaml @@ -1,4 +1,4 @@ -order: 12 +order: 13 id: word-document-save-close name: Manage document save and close description: Shows how to manage saving and closing document. diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 56fd4e919ad19c6a5a58950be57bedf033d173f1..19617f33bef57925ced28f78b322f31420672e85 100644 GIT binary patch delta 14382 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 delta 13459 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 F{{eDPc)$Pv diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 419c5831c..c95c041d7 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -14225,6 +14225,21 @@ console.log("Body contents (OOXML): " + bodyOOXML.value); }); +'Word.Body#getTrackedChanges:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + + // Gets all tracked changes. + + await Word.run(async (context) => { + const body = context.document.body; + const trackedChanges = body.getTrackedChanges(); + trackedChanges.load(); + await context.sync(); + + console.log(trackedChanges); + }); 'Word.Body#insertBreak:member(1)': - >- // Link to full sample: @@ -15805,6 +15820,19 @@ console.log(newStyleName + " has been added to the style list."); }); +'Word.Document#getParagraphByUniqueLocalId:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onadded-event.yaml + + await Word.run(async (context) => { + const paragraphId = $("#paragraph-id").val() as string; + const paragraph = context.document.getParagraphByUniqueLocalId(paragraphId); + paragraph.load(); + await paragraph.context.sync(); + + console.log(paragraph); + }); 'Word.Document#getStyles:member(1)': - >- // Link to full sample: @@ -15863,6 +15891,75 @@ console.log(event.ids); }); } +'Word.Document#onParagraphAdded:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onadded-event.yaml + + // Registers the onParagraphAdded event handler on the document. + + await Word.run(async (context) => { + eventContext = context.document.onParagraphAdded.add(paragraphAdded); + await context.sync(); + + console.log("Added event handler for when paragraphs are added."); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onadded-event.yaml + + async function paragraphAdded(event: Word.ParagraphAddedEventArgs) { + await Word.run(async (context) => { + console.log(`${event.type} event detected. IDs of paragraphs that were added:`); + console.log(event.uniqueLocalIds); + }); + } +'Word.Document#onParagraphChanged:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onchanged-event.yaml + + // Registers the onParagraphChanged event handler on the document. + + await Word.run(async (context) => { + eventContext = context.document.onParagraphChanged.add(paragraphChanged); + await context.sync(); + + console.log("Added event handler for when content is changed in paragraphs."); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onchanged-event.yaml + + async function paragraphChanged(event: Word.ParagraphChangedEventArgs) { + await Word.run(async (context) => { + console.log(`${event.type} event detected. IDs of paragraphs where content was changed:`); + console.log(event.uniqueLocalIds); + }); + } +'Word.Document#onParagraphDeleted:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/ondeleted-event.yaml + + // Registers the onParagraphDeleted event handler on the document. + + await Word.run(async (context) => { + eventContext = context.document.onParagraphDeleted.add(paragraphDeleted); + await context.sync(); + + console.log("Added event handlers for when paragraphs are deleted."); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/ondeleted-event.yaml + + async function paragraphDeleted(event: Word.ParagraphDeletedEventArgs) { + await Word.run(async (context) => { + console.log(`${event.type} event detected. IDs of paragraphs that were deleted:`); + console.log(event.uniqueLocalIds); + }); + } 'Word.Document#properties:member': - >- // Link to full sample: @@ -17148,6 +17245,52 @@ await context.sync(); console.log(paragraph.text); }); +'Word.ParagraphAddedEventArgs:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onadded-event.yaml + + // Registers the onParagraphAdded event handler on the document. + + await Word.run(async (context) => { + eventContext = context.document.onParagraphAdded.add(paragraphAdded); + await context.sync(); + + console.log("Added event handler for when paragraphs are added."); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onadded-event.yaml + + async function paragraphAdded(event: Word.ParagraphAddedEventArgs) { + await Word.run(async (context) => { + console.log(`${event.type} event detected. IDs of paragraphs that were added:`); + console.log(event.uniqueLocalIds); + }); + } +'Word.ParagraphChangedEventArgs:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onchanged-event.yaml + + // Registers the onParagraphChanged event handler on the document. + + await Word.run(async (context) => { + eventContext = context.document.onParagraphChanged.add(paragraphChanged); + await context.sync(); + + console.log("Added event handler for when content is changed in paragraphs."); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onchanged-event.yaml + + async function paragraphChanged(event: Word.ParagraphChangedEventArgs) { + await Word.run(async (context) => { + console.log(`${event.type} event detected. IDs of paragraphs where content was changed:`); + console.log(event.uniqueLocalIds); + }); + } 'Word.ParagraphCollection#getLast:member(1)': - >- // Link to full sample: @@ -17194,6 +17337,29 @@ await context.sync(); }); +'Word.ParagraphDeleted:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/ondeleted-event.yaml + + // Registers the onParagraphDeleted event handler on the document. + + await Word.run(async (context) => { + eventContext = context.document.onParagraphDeleted.add(paragraphDeleted); + await context.sync(); + + console.log("Added event handlers for when paragraphs are deleted."); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/ondeleted-event.yaml + + async function paragraphDeleted(event: Word.ParagraphDeletedEventArgs) { + await Word.run(async (context) => { + console.log(`${event.type} event detected. IDs of paragraphs that were deleted:`); + console.log(event.uniqueLocalIds); + }); + } 'Word.ParagraphFormat#alignment:member': - >- // Link to full sample: @@ -18259,6 +18425,131 @@ console.log(`- Type: ${border.type}`); console.log(`- Width: ${border.width} points`); }); +'Word.TrackedChange#accept:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + + // Accepts the first tracked change. + + await Word.run(async (context) => { + const body = context.document.body; + const trackedChanges = body.getTrackedChanges(); + const trackedChange = trackedChanges.getFirst(); + trackedChange.load(); + await context.sync(); + + console.log("First tracked change:"); + console.log(trackedChange); + trackedChange.accept(); + console.log("Accepted the first tracked change"); + }); +'Word.TrackedChange#getRange:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + + // Gets the range of the first tracked change. + + await Word.run(async (context) => { + const body = context.document.body; + const trackedChanges = body.getTrackedChanges(); + const trackedChange = trackedChanges.getFirst(); + await context.sync(); + + const range = trackedChange.getRange(); + range.load(); + await context.sync(); + + console.log("range.text: " + range.text); + }); +'Word.TrackedChange#reject:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + + // Rejects the first tracked change. + + await Word.run(async (context) => { + const body = context.document.body; + const trackedChanges = body.getTrackedChanges(); + const trackedChange = trackedChanges.getFirst(); + trackedChange.load(); + await context.sync(); + + console.log("First tracked change:"); + console.log(trackedChange); + trackedChange.reject(); + console.log("Rejected the first tracked change"); + }); +'Word.TrackedChangeCollection#acceptAll:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + + // Accepts all tracked changes. + + await Word.run(async (context) => { + const body = context.document.body; + const trackedChanges = body.getTrackedChanges(); + trackedChanges.acceptAll(); + console.log("Accepted all tracked changes"); + }); +'Word.TrackedChangeCollection#getFirst:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + + // Gets the range of the first tracked change. + + await Word.run(async (context) => { + const body = context.document.body; + const trackedChanges = body.getTrackedChanges(); + const trackedChange = trackedChanges.getFirst(); + await context.sync(); + + const range = trackedChange.getRange(); + range.load(); + await context.sync(); + + console.log("range.text: " + range.text); + }); +'Word.TrackedChangeCollection#getNext:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + + // Gets the next (second) tracked change. + + await Word.run(async (context) => { + const body = context.document.body; + const trackedChanges = body.getTrackedChanges(); + await context.sync(); + + const trackedChange = trackedChanges.getFirst(); + await context.sync(); + + const nextTrackedChange = trackedChange.getNext(); + await context.sync(); + + nextTrackedChange.load(); + await context.sync(); + + console.log(nextTrackedChange); + }); +'Word.TrackedChangeCollection#rejectAll:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + + // Rejects all tracked changes. + + await Word.run(async (context) => { + const body = context.document.body; + const trackedChanges = body.getTrackedChanges(); + trackedChanges.rejectAll(); + console.log("Rejected all tracked changes"); + }); 'Word.VerticalAlignment:enum': - >- // Link to full sample: diff --git a/view-prod/word.json b/view-prod/word.json index ad4c739bc..373000aa9 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -20,6 +20,9 @@ "word-paragraph-paragraph-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml", "word-paragraph-search": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/search.yaml", "word-paragraph-get-word-count": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-word-count.yaml", + "word-paragraph-onadded-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onadded-event.yaml", + "word-paragraph-onchanged-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onchanged-event.yaml", + "word-paragraph-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/ondeleted-event.yaml", "word-properties-get-built-in-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/get-built-in-properties.yaml", "word-properties-read-write-custom-document-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/read-write-custom-document-properties.yaml", "word-ranges-scroll-to-range": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/scroll-to-range.yaml", @@ -31,6 +34,7 @@ "word-document-insert-section-breaks": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-section-breaks.yaml", "word-document-insert-external-document": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml", "word-document-manage-change-tracking": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml", + "word-document-manage-tracked-changes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml", "word-document-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml", "word-document-manage-footnotes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml", "word-document-manage-fields": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml", diff --git a/view/word.json b/view/word.json index c74a0f538..df24c118b 100644 --- a/view/word.json +++ b/view/word.json @@ -20,6 +20,9 @@ "word-paragraph-paragraph-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/paragraph-properties.yaml", "word-paragraph-search": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/search.yaml", "word-paragraph-get-word-count": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/get-word-count.yaml", + "word-paragraph-onadded-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/onadded-event.yaml", + "word-paragraph-onchanged-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/onchanged-event.yaml", + "word-paragraph-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/ondeleted-event.yaml", "word-properties-get-built-in-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/30-properties/get-built-in-properties.yaml", "word-properties-read-write-custom-document-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/30-properties/read-write-custom-document-properties.yaml", "word-ranges-scroll-to-range": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/35-ranges/scroll-to-range.yaml", @@ -31,6 +34,7 @@ "word-document-insert-section-breaks": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/insert-section-breaks.yaml", "word-document-insert-external-document": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/insert-external-document.yaml", "word-document-manage-change-tracking": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-change-tracking.yaml", + "word-document-manage-tracked-changes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-tracked-changes.yaml", "word-document-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-comments.yaml", "word-document-manage-footnotes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-footnotes.yaml", "word-document-manage-fields": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-fields.yaml", From 82ce398408368b98303f1c6c12c1fe0ed47a2411 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 21 Dec 2023 10:56:09 -0800 Subject: [PATCH 513/660] 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} zTPZ=oKEthqYqPAgj`7ng^h+1E=mcl5#Yb@?bXu8GME@Sdgren{#|#>WxYajTK;z|U-aZ$Mqp18F&vi(k=oFa6-vMh7T@4AOc* zb47SXr=j_X{nUa+c%MX3+7N_>r^sBpU~o|72KSAWOC6nu$dk7+SwKIaW3lfb`eCim zT@(pxu_@ItH5Akq4Nt&OqC~(+en?l)qN~g=FPQL^%EV}0X+EVc1&yk=k$^uK^cTpU z*ARJk-(4d4Zg8N9O4Vh=WM%Rr24o?+E=H1|5fIyh2Ub3DK)oZ*cqqq+`Rd4uUs5B| z;-|80oXQRse3N5#7r*M# zP5ZFKoFdg<9=uVTE?fGMpu1SVcZrKA!jTuDLFs{ZxuHlw5yDbE#7ht_0;XXe<8&mA zFfKS?kr<$zr5jI!7&(iuC{i>!C0lCMCE~9J(ks8?!8TpB4GYD$XES zpeWQ=Y5zv6`9KRfc)|L3gQZw8TZWL|-Z5FkY5~8<;sUW-bRrvFu?nkP|^6X+sb6YtwP@6~18QMv6uALu=f-7`UV&Mi9g*Olq zN?ZBzXG@q-Et4}issvmNJ)}(W!wvc?2=6(Lhmy1(&1{Z%dAx6BN$M4*nm# z3#fzZf#%5zX7Gk`!)k}*9He;8vmH|EQGj+|&=!|s2+%r4M}@kyhdrIr{?>41Kw7lW z5Vt{W@n|ZgC7rPSk-gx9#_G2gh^ZEh$Fj4GV@ignIX_Cc2Vs5yF(g1oSS)2OkGQp}CL#LK zZbULg-k$@-ReO!e)Jrk<#FiaAkFeyfc|6=&cNg*N&2Jx18u=I^@J=er2SkUSgDvzI zc0ArGtK9|=1EGW7&Hk5j1`VOE1Py}&0SD1sDA5Foq+CNnv-*#u8vqM7k|G9DRa`gt z{}CLK&j5@s>mnR`QSu71xnXoNKg63Evd@a-WXmm!Kn%%W97~P>vk7lfp>gxM9B!;_ z+k-s9t>D!=lfOUtx7W?{i-|MoZ0ydeN%Ien`;w4S?f1gTbi10vvnm39FQEGX@9xC6 zTDBlx|ErrX*aQ5NoZC*y4R1gK=}(Nl+PYJ(=!Oe{n-VVnKYSw*y^|afET>*VrE*^l zwqMCpOuHL4FuB{vz3d9s>rr3Ab+d1OIz0*N^I7w#`LL}C{8b7(+=_m1{$1OC>V`ec z*=^dM;0LCj;Ii#)1@o|L?(?;-8ZaL$)fca5Ec|R+_?=XY(^8rXr9cV5`q2_p!pIfY z5|&w~Wx(KyEm+M4v0Rwjjn2Uo(A6v_ zd;5@}ns+;kJ(f0YP)-3_c$iTs0wd^XjpL9W-yjqc-E{Cm*c%}PN>SX>u^Yt+^fXgb z5&heCz%IQfw%DYz5(TkiW<_So?_WbC(<78%w7>dE<6xx#M~Va*ua`%eojJTo|-YQzeIETUXK9s*MBy{7Z3 zqN$LsS0DHxC@PFYndESjzt{7JqEPpnq91y+k_?Ol?mm$JRySGsxJk(qv1dWvmirXcc~@~qp}$yu%Dj^Bhl zYNyAbb)z>r!)%jiNsv4-JYe-7r&*&9QAG&PSSZ_1^qva-sWss zYDk#s4aSq^emQzbz)We717~;}woht2AgA2xUq%Mc6yQO@uMrqG{!7<+KH19q<-Yt} zSBRkZ&z9%k$<7R`xbWIAa*noIokV$@5(u0InW{Dce-rjW0i;?>#l~vgc+TL_px-vTia z@qoZ3w1_PFC;}%?{G_K!Fl2{-DY-Crn1!!=%lym&5%* zjekBnWz#v#vqjFRUA>$fml5-@=yWrqRgS?_cz-;>ZsHP>;lEFza_Hrl5+L=>#TvB# zo!m~PxJWYXlb^@_o>LMPf)L2LKI5*tH6Jy4hlQ)4Y(q(D?$NHQnLTx6^*(3Q*|AM` zPW<=ws&9w}RRIfhEU0QPTykwCEe!pZXfl~go<`#*gDQgu}r3M2>!umlnj z7()Yt_`f7-2nd3Iap=EA3oN7|0|^BV)euKX;(~zibz=AY;^$-yM%Tn8{{L^5{{=xn zn1bIlBp`#pVw&oZ8Q^41L6ZLlvj5yd|8HTC0-H(UfnPP5AUVPGS}er>F#=Uc2ndIN iaS!wVNU9?1@))m0@TEdW-;8QI+xOTPwNc<1rKx>}> 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 514/660] 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 zcmZ8`Wl)^W67J#>AOv?<+%;Ix5ZrCCpuu&6J1N0t6?)_2xUL z>VEg0`O!61Pj}6a>FMX0?lkLqo3Gkv7-{7g9F>S5&@|i#jRcr-O6Ml<&#ng~1By*Q zypse&@H9Cz1tIqH;yRo{J(#8z%2L{w>z*o#t(;ttCgvJ*liQmN-?-DATDBMVLl8O( zLOQ=q+GyRX1-&Pn{jd#&sg-`)L-E%Kz~LgoFD-&M`i{)|*!PSCwW z&-3beJqdNu5JWOa4M484uv`A&!8%GtlO+wl$VHRUNtG>EVIcHnmGp=xonyJVJL}`b zTKk9}I#INi{vot>r3#KIHx-I;ukc$neQ|)FnUCWI-rIQF2F`~DYg2$MZWeA7wsupWYhGZpSjlf zSbbPrU$JZD{*dC>a;IPVWk{f3t|EQ9tb<$69bm_V;I^ILSMB3g-!sBK7c)dS3<8uO*<4S_l^x ziL(|x%RJ}52!wOP!Uyg2c9nmL3`}#>Z)f|7S!0tNFr#|~R|GZiWu!f!!Zol6;P1I{ z>Lf845HX9K-brzzfk2@Qa3~fH;0Rsf#vNK$Tk`z+kR|&0jD9*wYKrw(rr~6>!I{&P zKbCKqV4?oBvku>;SQVm;A!NS(c=ELO=i!c-?KkogI%MxP4y|I&ZW->SK=FEK6&k)` zjHP=IE99N3n(6-K+|bKEA=7bIXr>r=cJP_ZhH-W*?DZfEMs@62FHKesAa$V2hdfOd ziOny*qL)5OHrFDrh{LSto?BZV6Nhc!8qaQ7>b3URhesC*~Qvsk7(Bhs2#+z5 zufDwQ?YAx2RA_$TC(Cfk2Cz(UR_u@p_%S)S1+{qmS~MmQeiVx=nlY<4#3oYUr7GB- zbNQ;rKHW1uPEW<*q}wF8c=56$jTjNSP)bWSlEJyP=#w&aW_NATjhkYR+7cxaim6LTdzLJ}NyR(CCDI7P4O`u0#hIojSNm|mM9%H8 z${%!!eef{l-Ga$Q033ZP&JnBM`^G#xI5qih4PAOl9QPPN^tDnGL0{rS_7)4#D5wTG z5@#^>(2q_}S*&y+k4Rae954|LyUZ+cne$0)d{N|6>wU?VSvGaKoDL zY69_=iGSnL@Eb0mDbii)8iX-BdYX_UdQN1JHvOp{Ck5gjy&r_;D`MA8jMs+x?#=3a z?#~Z*9mSOD(zn0&9o9S@It#bmW`_6u*=~~99zDPPdFe0K_Lx9iH-6AE5K!53sWx=? z9H*jCemi8v4?GcM7kEW4>DZO6GB+SB9~UHPEccmKEw#HCZMq;=p{ji>t1C{j6)VSg z!`9~{+y)pdo`k{q%FTw%ys9aL4{PWxO~Oi{b*T3l9Plmez9nO+stjJRvy0T$YpJ4^ zFdv*(6J$rOjmn3q6fLZiNpw+|q!BZ+>WAJ;_eKN_Hibe$bB5B)_FvT&c`sRngPE7F zo)>Hs7r8WgbBgps41RQ6Jfp>}c*&fOCzYywdj&|hyk@cNl4cp$oLEcsd^JLLG+%3Z zpyeX1;p^GX_ZJFz(|XNa!a_a!TU<&%#DC;JVbb1E&5?jeynfqCq@V9XYf$hWy5%|wZu$|i{im{Q-A!z$FGPiA42*yaE!s)FM=JvwCrh-Bj}6_wgsw!wR+OVpw4+xs%}KN5+8p=8YPvhT z^uYHCtxqVk6{u}85a2arPV~|;;v(`B3*~ddyQe}K&(7;Y#n4HCL!_=UA}}D37w5k} zS!#x(pG>q04s9YddS{b9x5=Y3M<1Ffjoz0kz}dObpXG1|70~=irpRxrl;jB2d=^!) zrIp&BJZBW%Q892U4&PAG{?a(typA$X4pjQPw5yQX5omU(szUFKT? zM|K9uVJ<1=sb?BMV4 zwk$MlgN<6-yh6vW70JN@oFK8XwNi2yiI&3vNe0Qq#A?Fj2T9qrYJi(;Z?rRXOfCBA zrI9+k6{)f008eMmpn5?*d!XdasQ`mTfPq^CZa_S()ESSoO*-{{d<8le;aufVcWrJl z(^ZV4mj##0j(lPom4_BhDd~%#pl;!xcr=n8HOVMfjS)2RfyjDv$qyt*0=0|OH8LJb zDzPPA4spb)+Exp-(BD#Y25=PlPD+2AWP&L~(r^qjd@-^8c zH86M5#fB#Wx#amQkeDtZ~D%w0PeXdolAzwCisO1}e8<4O~JOndu3 zXN4an3b@R`%VbBt9PtII@*E;_KPP6xzTp$ngck;Ly?HzEfc%que$> zW`lD8L4*FPhAytaE~1w;_WDl_V8k>Xqy8fNmTJ=3uQa^a`@AzFly; zAXgu=@u>}~l7{&J9ZT32gNvQSYq7l=bxCYo>haj=$}?JHUS*sKo)`gR1L)lbpUh;m z3UprZ_Tdj-h+AFgsk=$;@z8G~78~|{EYu-|9GvMshws88Ie|60g@hjh!4MaF`Q`8( z>B+DI3Vrt{3$8wXd$HDv#wzC>+>X}e^x8#gm zG|?awpChKBEnu8}kf$gXIreRn+@<;e&e;hjA9aY%O2CFC& zi-tTfq=tT8aiXP2*+n%SxsmXl;4U$bs>nDw=2s0|9tfKhSE1o#%MQY|8xo9&Q;*|Y zFGJgzmFaEl9y5PP;U0oDooR0N7rVsZTZue?$``D6rWBPOR@7NPU1V^_hHKFls_kY4 zUK+gZLc-d9c@KWiz^TdXvo+%#DBScJDPTIzx%O;Hd1hfSfL4u0hNt!WmzM#u=UQs6``QD`$j?3F08OM?n4o-|NLkfpaqyRsU`CeYVE#B20f=xB*>Hl4EL=ZeBH zk`#$}pO(~QpPDGq#ZB+Ix7o!piJoQl4c?)Ehbu&)SQ^j5F2gZOG-q02k&bsyNTK=8EKKbO_qY^)|e{1`GE-%%5*?EHy_yg(n=bPp*k(E3^xDYOn0od!L_HCq*2+ zAejWMQ~KBbj_0mbN0CnwmT_HyEuq0f)i*|pnMR4VKvnl**gaAbKT^B$DZY?Gqwrx_ z8PHN@7cAiqsk7%Ynd8-M7=v(Z``-I-H7ILzN?K~U`6)j$wW!})%aV#{vdQ8U`~oR> zwWY?IPS%$yue;2U8TOy?Kt+X{Te@XYF{+-VAbtefDD{zLMK!|7Ee9>qFF133Ey7g} zzhulf`lyfY#H-ce*ff;2Wu}TS=nQx<0826Nh7>LLW$X429B0$Tf33KEm`Al)6y)hm z8{^MA;mK>E3jOqu^~%aJ`Gd@|xr|b|NrWBc0F14>UPXK3lDtRBm+4b)MI9DQn0c=F zjjBG}o6?9fLkV`lY0WEwl(S-NE&1wKW25`t?~8+4?Ka5*O1cU+SJ>BS?(pO-Q9$Ha z=fQHY)hKk9N3HEc2RSBRTIKaCdllxr=Ac3Wt*-=`?!mHR!S7QrjNO7s-QqUQYXet4 z-(h3b2^-ERCk_idEOU=a$@6#fPEa_>Gnt2kveM$_D=IZ9l!Y@1Jribv~HWxDXhH z4%6i&@Drv}Ji2S$x$d}=MU(Nd0P?X{1@BIy1iLIV*Z5pI7^Hnc;8qI91}EaTlaTkl z&Ys}+v>PgPghOQEcKB|Uw9O}Dv=hNXSk?$b+B6YgH|AU=g>VSR z(_IUiCSli6V419U2sn6+@8aQKqH0K>cJ5hqR^=*wqA66Chzk#$|5Tex7?tA@tj zsC|wKT;DE;Ef-s9bbxwPm~r{=vqwB+O~E$$dx%LLpiVY8QYvh9Y&vI2&Epl&EFGbM z0aN8IDtuIAk>LYipX<2j4BIwK3Td$V6RPn^p8wK0zeb_h#dnJv&>#Kt08d7$sp&@K z*F7aOCl`w~=Ay2(JNs}9IE-HJlsRPl_h%}ku~rFpN5o?kbD=zk^);x8t7U5aXqguIF;#czqRJNTNSBiO~w z=gDT`n~hZ{eaF*6&m(d`M`oVz-L>7VfRWLc8i|+5uD}~`WH#gImuzLO+Y&>TT{dhI zY(H$qnW}j%1K)-8lV&|ec&^f~2chCi54+4VztIO>DtCXimD{ETvbqmI#MHV@b>MNf zA3m2xVN{xCWpx(`4jk&XG^D6k)c&b|>mXs7%0V7KX8enYVD+fsGuE#eU^dke`|F4R zh*{<;;7z7wg7X)~LUCsL)kFO>3W8_IdyCcHa!Jj zoPtEW@=NoD9HBxKWDdoul`^+5-NryfCoUS>MOFt*hGF79L~;#tzd4evdsbT=xkXaK z9+UAw)#UZD@SB6rfZpeO5&=lx(x`_MWw2)CA8c}ZL^2@@O0}_kfGejI4Vz1Z!KA1_ z%Fkk^x zolf&6r3A>5dm+4{F`LL`QxL~_nZj08Bdfw9l5ERnw>@;?E`)hszyI#4>l%S~DvaumLOrBcMpW|Iywt>!2 zZ}{G$`t6h1XDr^dfs#_ji|jARVV~%AfaBdC521>{t7xOI!Bth*9XKf-HR&eL<1VVM z2AVX?1%U)WMo@4v`VN2oYcBb$ydz%qhAFGZW}^xA;Na!aXhM3>Wu4m8O*l8Cp^ zc?YK3aqrM6<}}`9>dfs$o-rwq*dI`bb3t#sTAnFbd)U!9HFp)=-?|fnnS#iIj7ncf zlBit-a@L4WGmBz<5L4B;p3r;V|1xh)<2UWBJn{ipUnY9~fL7PI zp*|AUfOu(y(Pi_mu)DNx6c6m=eRNmk5qxwaF`7+T-B0Fuu|MRNeIQr2;GpB<5#22+ z3c(S=LyV82RnKijOsvuFMZ}PnVw-UC*BmFl%(I3xw<+6bOS*uf5HV47JJ13>xLuNB_O&@!4x+E{6b1Fd znR*|+AGaxgOv`r_A+c_rx_7rF^La!&kGCJ--NDB-P*lg&25J0|NtFtJW!(g?bDGaz zKLAD|;=sS>_oPmF63SgIo7rs;5LgSaVj4gwA;<-xR?RsC-w4(&oKMz#{FV;>>>In| zO~iaFcW8Fiq%9Cs*3q7Rp}S8k^rzV2?N zLqRh_odblXLYytz%_!kMG2Lj|CYX-t@O9#u(Mb@uU247mqHLCBd@ozGpmJJUp`LHbR(w#@BBa(xM1=D|=mZ z&nR^@ERLxE&!CQpTNQx@?!nDL{_oi1Z=Lz8S^r&H@J?X}fJ7Eld&MS_n!3yW$6GeQ< P0f+K2pmK8mds delta 7166 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 Zi@~%qf+x5|V0>7>$UL+NsqFs|{STo*cvb)a diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 7e6959a6e..aa730f687 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -13380,6 +13380,57 @@ console.log(`Successfully set end date and time to ${end}`); }); }); +'PowerPoint.ConnectorType:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml + + // This function gets the collection of shapes on the first slide, + + // and adds a line to the collection, while specifying its + + // start and end points. Then it names the shape. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.slides.getItemAt(0).shapes; + + // For a line, left and top are the coordinates of the start point, + // while height and width are the coordinates of the end point. + const line = shapes.addLine(PowerPoint.ConnectorType.straight, + { + left: 400, + top: 200, + height: 20, + width: 150 + }); + line.name = "StraightLine"; + + await context.sync(); + }); +'PowerPoint.GeometricShapeType:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml + + // This function gets the collection of shapes on the first slide, + + // and adds a hexagon shape to the collection, while specifying its + + // location and size. Then it names the shape. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.slides.getItemAt(0).shapes; + const hexagon = shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon, + { + left: 100, + top: 100, + height: 150, + width: 150 + }); + hexagon.name = "Hexagon"; + + await context.sync(); + }); 'PowerPoint.Presentation#getSelectedShapes:member(1)': - >- // Link to full sample: @@ -14025,6 +14076,18 @@ console.log("Added key " + JSON.stringify(audienceTag.key) + " with value " + JSON.stringify(audienceTag.value)); }); +'PowerPoint.TextRange#font:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml + + // Sets the color of the selected text range to green. + + await PowerPoint.run(async (context) => { + const textRange = context.presentation.getSelectedTextRange(); + textRange.font.color = "green"; + await context.sync(); + }); 'PowerPoint.TextRange#setSelected:member(1)': - >- // Link to full sample: @@ -14071,18 +14134,6 @@ textRange.setSelected(); await context.sync(); }); -'PowerPoint.TextRange#font:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml - - // Sets the color of the selected text range to green. - - await PowerPoint.run(async (context) => { - const textRange = context.presentation.getSelectedTextRange(); - textRange.font.color = "green"; - await context.sync(); - }); 'Word.Alignment:enum': - >- // Link to full sample: From ea25317ece51f6aa183d27232f0bdd850abefb24 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 29 Jan 2024 16:45:35 -0800 Subject: [PATCH 515/660] [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 516/660] [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 517/660] [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 518/660] [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 519/660] [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 520/660] [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 521/660] [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 522/660] [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 523/660] [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 524/660] [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 525/660] [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 526/660] 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 527/660] 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 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 SM6m}a1E$e>a^;bq1pff17P7_w delta 18021 zcmX`RWmFt%ur`W>;O@bLySpX06WlEXcPCf_!C`RM;I4zali==7aCe70`<(OLKeJ|4 z)!SWN@|1L^tw66VL)WCk19=Seb{McwP+ag(Q0P!lP@cA|9uCen-yIxmSUl})D>Mw0 zSJ-fTbL!tQ9)+pgcYMMF(~G8Jp(uXb*C0ZpyIZ5E{KTi z`!$CS9kJN^3ONWv{Z%H zl#*svX=LKA#k&}2p*b0Bl%`ouex%TR zHvUtG!>??%zR*5JgfYNa6yVo{W5=5}_bB4Xtrp{JvtMTqy=|y2CW`+1PucauzudTp zH7#;)P-%na#pM=R8^9KON#p3-T87sWpT%?w{Y8*yI_Ji8q31yyVLr#ShAe)c?u|+T z&7&gmT~hN6Z3KYrI}^<}p{vZ*{Eo1WKXnjI^i?{vu;gK^$d!4%ale8mtt?ifR*4lU z_b0m~G}CSbz*f?!=%o^n@{sEJhkrTgI=Bu>)5R^fAA2Mx7od&RxQM?^>I|7CW&O~0 zE*+E(w!w|r>Y5x5Jf}UR|JM9n`3u4i{1q?Z0HVu(Rev?2&JADKocpN$oS;ap$cI@- zCpel<;Q8?&w{uZgT_CZm`DMz_AMa|G2V{Rn5At=+s=Ynvv0shc1`S5Gy@JPHR@j~l zLBun2yn)rNO+ZO%VM8abB88S37osdeS@w|Im$-&cK23R(^5C9(q7l<7d0NYfo*i=-hYA^VFoT$xmy#8bvRLb#@qbP>Z2;fpLz6}?YJc*(Rh><#>{Aw+ z**h_E0x#_E6CH_6mNhc?h}?)A=*BOi+0b;<3Oko(+)OD7hc*LO(w;G_KhtW^7_2D~ z9y)0=CfS^5X<`Y-6}SupWql@!tax&vmG+U-JL0&nMp$`F4p55uXF39nV9A9mOgYW< zj>om_QCLSH(XrY!TW=ck4v{p--rO5O%!OJoo{&Ksmb|9 z2`ZYn2^Lmp;B6#o7^Jy&BY$gpC@7Fn0wyXmuz`s9xl)x*x6rC=P^1d9<3GnYZmaft z?(I2R@pl%3MhVvD;^lMZH7OZq$9g25Fh^m_i5#&Pv{XfY-QHSjzbL>Y#V@rSTSZfO zq8*N|uyb5Kky9jCN_rE*{>y*z5X&LzkhZh>Fa$AAcnOTQ&ZUa@-MDPN^9+}=0Xuvi zhzTUWhT9?$!J;|B3bFm9w4^^>X`IC`hGP>R@Nye+|0IEZgOy2sWU>-df+I|>*}l8C z`I`VypheF^HBJM$^WH>^Zkh2x;sT^>vig)E6R1YrU>gPh<306S?>X4$At+nc;ngSz z5!4oU7k+?48F|t)O?pRl;+^`~GfyByfOlA^3VkNLZ&^m#or9E*CbH zkoa9TT)3Srq)}v|Ybn__RAXh3k)Dj{3@r#+;!JjE(qu`TlP^B*Rck(#(B`WKFrX5E znHwTn=e?-Cox~-D)YfN!3o8$bSFUhrX-%v^mVX7VF`fHawy9tr$@b?IyGsD~r>Dn% zURzc39b()ze;T?)^{Jng#2CzJ8+6ub6sw5msP=2#KaoWo%TN(T6Ajn$8#pfzVjH zhN&M2gCx!m;=jW0$fg+P!Inir{=nyMAbv>lfFXeY>ebSANgm>aF_ebCYn3VhoG<+G zxP5~F^ZPplncv?NvuvuEc%6fqK3hW1Q+q(1Hr(iA zvc>Q@P6g+di4r9CXoH=;l21)y>Z(0{&INxdOJk+ z_HsBx=Jy)$CX~+#^jC4ZH!9um8^>07_W&87ftuLE&TzE`boZRR|l-a3OLy%MrCI!r0+} zyW!rlpd2tFe=EMtuS7k0SWCt1C_WKS{mb$yXR8gxSMcZYwK1RNOjDT%vh4lW z(c4dI$Oe5Rbxe4x03lPPvptsluUzAV(>{OB+JCZB;J*Zq#v?hV2!jE4s_BNOhj1yt z)FSVLr;8esiEjdvz$cW&gYqbH^zIb-_!><$%tTCqztMx5ToiaL9G)9Y0tMkx!irq! zAg@X)>cN?E+i}NO#gg#IJAE6W|6%bw@k`XsB)dxKA)|IfD1B@P`$N#UP7D-}?8QpF{APU(Q|Dt0iz zVa;$F4x)1Vug`rH!tW6WBlJrxgv7o)GKu9q+q@IDUd;ci25a^n@!EQQEbWx427r)x z!7t}*BGkdaI8n3z%W?w#V)vT}3~k?qf^jiiReCl2(*3uDtZHpOs1obg6iX-ji=-__k&)ntiQ<#hr;|@bqvxrKG$^8G7@%?zUr;bvANXOpLlpAn zlDpc}AA#*oQTw>cxE0y$5$^6ojy?^sSWinb{C|-NKVx(=oAJMN)&Hl$-Zkt`$D{8- zlF~+7wl|+0*2Fg@+;XVrASP3kkAXppKZAU$ISq1(1?=X%oOoXp_dT6L<_flKDMmHphQVHx=s?!8Jhmsu7 z@LZU$c`Fous z{f!8E=`+HFgw7FD4bCDN3@y^Jsw&lgL4wCboI@zG_Vn?SgF`g>Ct&0u5$CU2r3@7O zS}Yv0hIZ7Q4?)%?J$?L$ZXCqAHO9Gc)KcCeQ4nwcpB%)oYF%LtcqC}pQO>2-0-cn4B7_jGxN)atkk#@1KH;TWSDWp<|fXmb`qED;;xcmH?J`mlza1$v{-|5Cf zG=d}RHApFhf^SRPA5?B)Cz?96z15v2g{YcCc&6Lk{JB-|)xq(mk$w0O2*7@Q|6kr1 zA)4iP4T+|bjVaH2pUHGoVLW z#&)S)I%nxb~Cs_ZcwzVbUr*riK1**nLA3)Je-| zPXfxrRa&t2gjuv=OCnYOv#uD%Jkk`Z@ zT3W`PzB$*Jf~-(`^#H8#1Y8dT2|;-w;+x~=AQ8D<2uOQALkqHe5mhhZ&}?Djc{F~f z3lF)x0U}0FyjeKQ%!xd>PM-)SPkbNg5FzycBZo3L%)4?WZQ~0|a-}i7`X$cxdU{DZ zg$NH2&LtfQrr+sfWH`}>2gWqeL3AhA?iwUKHl*yQX$X#qCx^uC6-Qq-^1nbd2g~Js zxZ1xS{nD}+5XbA+)chU_$2h?o2mHNQTt;U2y%ciEsJ}vB%c&=^D$*Z8)5*@5?=zDm z%zLIS2Sa#JOoI$m1s=cF@2YicOBtt9lF1+5fBBO8`-XIdpzetGjXjPQzKcgMYHoeR z;7UUY8SF5(ZP3J>*b`~1JKJr?MEBtw%(-S>@9>`XiEq49#loK$!mrNR1ZMJ%@z2?} zF=_u`JB-5l#_yF>En}D`t!|$^b?Af zQJ3J>@AKSCiG}oA@l#*jkw^=dndgEX!ON2KT;KhQlGEa!42My7b$FlpH(cFmi2or9 z40I`TW}b4}u~IicF12+14gdQ^R5C6?Bk7HhL@}j=tV?}L!vQ(zzl4}ic!0erDU~?e z9y2vu-?g9CG|s6RGs6chJGz?eJ}TlLh@#mbR7o2J0+r4qX#X4{M}xd}q>AT8L~kiu zp+^iW4g66zx9z3X{l(nk$FT#fr|x^fZToguA?BW`$ZE@wQ)}wE?5s)TkjnlkLH$ zIRhty2o)h6M{7y%k*qFiM>hmcRXYAZ-Ikg2p8`P^x(=yInpgEKI$WOG+4iu=PQ@RX z1)ij4HGS`DWWO&v(mLoW8l0@M1{{A1HA8=oAU-FzokwZE3^kY{OKx9E8{HrKsfa?x0_BLpN8cT&j5idaEuyTG)9iNA zWLG({R^&U7`!;J*I7Zp2GfS&XRCEpsiFn68>f={e2dzz-_OPqi?p;Vg7t>ebiWnyn z{*m8=p3-UZgf^aHR|A567Wu0cakGQjH*LFNi@=(faO9EEX`e?q;WFLV)4P|nU3fOf z^`wm-e>9`=nIq}^OM_8z(PhlERS+b)@IS1uc5N$T2UTO5l>2dP#h6Pjm?Y^C#`1he z7|(!KE5Q@aSzr%mlLJ**O*iUOX5S+aZ4us^iYUt}q@?x@-g7Z=BDzL`}-un2a*$O_ws;u$nGDIims( zQ(XE2$ij|0kHC_@bVbcUel|81X>5Amvpmnw1s~DV(Pw8TJ;#RL`bcpeZv0JQW9}hV zRgDBHqUVW^?Tn1xmFBmTw-vJn7yh{0*ZOn+h6X>>L&s=;1r(Y#e3vF@FQFL+EskOO z+QC=4b_E|R#c10Os*l@lkZv_ZH}};a-?v3<&Z=jK9D&XvabrbITa>RvPTXyE_ekDf zU^F?`-2`J%Pr?BC;_~$R#l=9L&0>MSOWxe_@J&uCeOXY6dz^55#Jr3oj`>UnBxQr9 z$qXmg2&%z%b89`Sl0wJ++@asV)Q0FM{l)UAot>KXk2e)mhQh)B?!j5wcBw9S&JFBH zzC65k-+(w$SIV=-WUFS{fsW5h2zj0HSxUo9UF?~>9@Hrp9#WpEumPW}7$OUrP- z@MPzLnq9alNKdl9ylk=RUHk`s*SvBR?LUk;C`(iBWzi*KeL%g5BG!0`)v&+)bbV=as*H7MK9 zC1}&jrwemoWVJ#tFExG*ddiw7e_}{W07oeg6JR`Ba|~u4gs&jT!ELlQ&$rv*k$ah> zW+nP&?zGcpRyT#K63SAq^RX7w{Zny)(LB|}V0b;WsOuzKRV>XopaaRo9k6ov7L4xC z6`pcVHe8VQ*T4g`h_*E)UfhX%eRdI34Ne+6A`8`RXvWq^p8H13`93om~Vvj2CS9w@@i*of4=%M>Y`Yg!s(T7`BGvdNSXeUE);ykmtIci+rZ%F?RC-i zHHLbTPdw;%JbMtg#!&vcg-P69|8{W4CJmS5u_I<5z_G@OY#%_Gu?GLei*- zja|ezX#lxAU23U0o##`+#|m?hQ|t2>^?&39jj`o=yLQEJ_?A4;Qt(~8CosVP!q?;m z)j9Fmxl+uLtZ5CbO-Y7(et2g)(QZwq-!XUvWH_r{sG_vzilhzKz;k$jWBgVQHb{S+%J60`k$rK?o zn#0|c`c&IHACF%gf=LGKMqKLL+Al_FdhMChBUBY)mh*SE*?dhO2-OWbed_xXXd$_@ zrK)Svw&V;mGZV&~9Cq`O{Wxusqvs%StZJq=b@T%_b6u^JT{orXqRTdm!4IEVPQsid zlh8*?2t0Wqwk!O{;IK1zZ}slm-pNKp#rhX}YW^Hz%~ED(3gpWP8Ov9zSH7jt;xXX+T5k zpFxubi1C0i-CkB!T~9tPIdC@9Fum2!y1njY9=wWv%DPxOufIiwu~>s7^W@p~r4>JG z8$pDOmtnXCVe4N3qDv<a^0NvmR1?SC6xyh zv?I1mVFgS6Ov__vqG^<0KqtBw!WnvT19$+g$AMeWP?}jL4h1tncHO7 zlN8mge*}4caZeU3UT?Gdft@B%uFL)CePOZh9&D>fV>fC&Mh`bGDDY{fe0~iHwea+<8&T=645&)n8#T=`fB z&vP=oc6HWGaL`g@oN;@#)Ada!<J!=2UKB_kskK`mt@di7+ z<3k_zisHsnx?kX$9oOZk7!5fxU#ch8Yf#SV5xVgX_R5$DYzU$qHTc*o9(QHooJq5O zHSHRc)WdYJbc_$U%Zy^>`!YA`{5;5%(mcV``%0COx+_=iw`~H}p{;7!y#qjcESLTa z5t3f>b`qghh49tcXFh+bY06uC30Co1F9uofmsZ7;$X_lD_}E9y!0XyyF8j5++bL~+ z@KV$0?zMh`Gj6*J7rT0UvFUu(Tf&v;XAa;~<33f5y|2?WTW;P-SKD>QfbmfQkFOxa zcppnq%eE~^ud=07x-KXtAp(XCJsF7HJ5{vcct0_`?Gdds%Q(TG-g4$P8Z@4pA6@7# z{7)*((W(LLgw<$sbOYT6`zZI~)`Hl|(gKj8Jv?b_)?C!e8CRY(>wLcBblI@^PK0@a z#D-YL_>_uVxD9=M4DfGS~3xdVG$**$IZ3zdFyV%z1;8Xinqt$*@Q*NiVkF@I1mo z=ew+L)YAd)_5J)HN<;^}IrPJx?uSjCg=xczRl~92*KT}+${LhBu7ajwVH{;|GsSh= z3U|Sa9fNt;>i(=5WMFHPNIqS;?LS7Q`BH8L1Q)7TplDG6I(64<+|aT z4%~sA4aY2+W~3L;1Nv`&mw@oVEMe=6cw(+8WiNhvZW}ftZIJGUZ1iGE*p;`mLknDU zv7v``c1MYj?cSYU<&SPZ3(bD{+!WFJl_du_p7(la2{u9_k5je=;Ju+0UcdH!*rJl)=HBQAQZ>oc99$?1{>q;>cOYq2rwN>` zqdsQ~*ZaSwp2_X$UmZ3GZm`a07Vma{qdIwbns%GqU4Ym5b^Y#`FX4~4_t*D#$|(Tc zy;e+}lTxSq_*zI!+X1sT?5(fxo^|w7YF_v|HP%v!j8jlWT{FgQjJ?QtjV;|jK5&F; zKOzd8M70eFdLsuM!y%#f(9ZbbVOr03-ZfU+ly~P7i{+ING=uJTh{v5mtIi1Zwyk0+ zlN2lukKu?e!kFEMA5e?&$iQZqGl0;`nk&1p=P{lLHIHUDiD!RuxzG_K*S2Y6)U|E6 zMa~&_z9jZ}k(^2Gcm*w?STi-D5i$ zE^T?l9ERXBw57v3hKf4?Y-BJoi&qZ`j7WMuqwe``4{bBO#Wj^ySs>0Dkf_TN*TLUO zsv`^AbB8>)gV$q?fX$_$Yqn!%x;7AR%~%*w<1EKphvKl%4Gx+VePafFTe^i~XtBd= zLavIdUK~iZ-#}&LqM4R+JjrOu{z+2v8mp1l=~Yrn-}?&Eohks7hP_Hz$l0aA=_!sI zo`}eAdtOxAl$w)DofcR3U}Q+e<9vWrJgMB`nt3}Wt;Lq@6z+ba#r>mdtE_Zh$Prj% zk-0yeo^qHm&cUD_zb-UDv`x5tp*;Z7Ik*HkC6+kbDi8bPLiuFTM-2h#tI(VVN1v( zT#(zmGIR~M>yxWi59b;OiZ?Ri>I1UJCZ^T_mIadO7Q0T+qlcOw&&sqenBJ|g>E=Gn!1D2Ord(KvZ7qTDs_OQ`d zQE2);#Jy;KF|j=XAbrYM4MquK9ndg1j4+Fryv`h?hF;ln|d zUH?iFh8LaIg{`;xSVXf!MHnR2_BbL8<_@%>(Y4t{60*4&w>xV;(?D9{_ymEOH9*Q| zl@oKHR{X^v#dX7FEU(#tDIz?hJo`9Jo8wBp*YbTb_zHeSw5X#s6D9P~!DM++8)pS> z(DYbsIppEK!dT_{b0gz#o_vI4e;7>+mULuOI3Z&=Aqx#`79!Sd zv{fM{1N5K^gh8oI$eO0u)Ksx~5?EPq_?fqV@$dB+@^0y3GnL@d*tX!y-%f1n^7j9Lh+4z5FEJTsl``iiHn z*4fPeb`(V%-)r#5VP8nf+CuraZxP?#~?UlO_* z_k;;>zWLiTL>)1?4-?5ivtLy79RzF>U@wyOHq~msg^b2?)jqfIVt*(Qk6j^bT8ndL zu&E~lOJ;(rcQ(wPQFoLb+TI#?4k}Utv&Vd&bl@NZg&Ik^1Eq+0BuTFq#)`AxPRd~_ zlZ)QEzd(< z6i0dVOY~NUUMdZ*QrE6dwEl$1_4=Z?^)`}XOgze*1?E)Ns%vNJaW6~+kuP>8| z0$i#L#0!z4n{)25qz&Jy2%%)GqMFx?lSi-mMjAQH?YU4ZoG2UhX`Rytw|7X96|rl~ z+76#}X1HorLFPX#@zxGKgfW2DSLS}!aWUQP;u%FBbQ@s3&AhjHzOdVE>2~-+oVBV8 zxoY8;XqZvmfH^po$!!!gat3a3sJ8kNfh>CDDbm~L7oO7~sD8^#mF=f93u#_P%@TSD z(f?p+;?wg0M?b6xC0^=-nAhrP^o=cv+9A7LRX*-h%TaE{<-qaF}2F(E?eU3F!Gh%4ojxWVgU8+PxwpfOdGM zWt&%Iiaj;$%6{&puPu40L!WUjE7IR=;;l>FIO?OKFC zC<96cq2_+Qw@!%^3-B6EwRfJbDxjaby=&s4`!(9;^xaUOh@T zt?tX|K_KokXd&|8S883JI)$&{nf5I~^UX_H8q#B*ARUtRRWP^x7o=zNh7cd3u~50V zF&-^xOrdg%c_tTh&-IUFg59un;Ay`43&5C=stVo$M>+H zuSz4Uwvj6;;L-ou4>4maqS`=h1nn`;{)o%8`AVHVQlb%k$X?vma}N8~V-SGg^F#7} zSrHFUatpkpM^s=xov1 zDcvhPsdN7D3N5Vj%opUVL_bNp^~?huQ5Kd116Q?=MKYe5jt}CPd&l?_F=J#d+rJfw zhMd|3&zh6Kv$TFKYCfLx1-i+FJ_kQo$;8W67K!qNw7_4eMauD%j=@O8+@f&#O?@N3 zoO6DhQ%IiuUprjhZMRY@I%wRjOZohPOx|@0|4rWZt>(0?EcZ~5W!z6`k|2;>U3;JV z>mW`KI0bB8?A^`6OCS{>ZR=zxjT#5C^MU6En&51~?$k{{gYNL4`2tE`(WrC0W7?vj(!Q2#nVbb>1e#u_bw{+>8l<3)DU@aYf z``7DS{rT<6)(7RG_4LuD#S_x*m3qYUku>a{*W{Rf^Ax9^Wc0_ilk0qQu(z$Pd$_c1 zOUu07ql_)!zGUB@d}@x>_>WN|0fUMBIa{lNC>HDJ!+Z_SxiJ3Yp@T8-iI8z zUY(wIV~qTsME~d0vj6!}041>UWT5rnV{|G(zB(Huhl0X}O2D+n1x|FvB8hl$y6~Sw zQCvJ;xOX5s&&>(jgf*%kS&76AjVCIaoE-7(MA$IY{I{xf1%)YM4#J7kUtm!?ZekFr z>JQ1LXvY>QD|e|fY~^&_Q6r__I*N<$v;DlTT`#9QQoW>8k$dBljXJ+w31>zvrc%u$ z12%kgTt3P&iBXtl0HXaPGSiFvN{*j1rrlqJp+(q73ESLcGFko=2D|};khtb%x*g`_Mdc;UA?P!mFi(z+>$T>X_^M87XI%e>g)c;PpWkzU_|{Hfu$rW>1Y z60*+CAuPcSfVD@5R{Qps-r z9Y9f@M5t?yq~qW0U!k5sz;Xz|qA_k(r$?33c&HW$cq^ieXk_CkNHQ=E*CtZE^Zefb zSE2ER@%J1rIcv7C_uIwcb!e9`aC7k3XH?hHz#wlA4^XSAoz2AEmaG* zY8vHE0C)&&mZgteTsUSctR-BxgtvuH#@U>)$W=hy?{ogv+E!fx)tK#}Mqq^(@%2or zb=8VTk(9TIhwUy1b8IWrgx{QDRR0Q_p%!;GrdDOC7ylkM(rZQ@w0t$TZdct`VlyY~ z^Mld^q6nK`Sn2NIh$V~4i7LMYJ2y#ZM=$nwsvO@fyem@#C3duN+U$XceyGC5F2}6%|AE8{j*L_qz!vA8z-r4k4ozx!*>m=i8NalYFum>3+EIRxGqgvZX-~0 z1)>HCyqiQ^v?onCNA_E$v_2ark(|g?F#Z|WxXm<%Hj6K_nWuM7L0~kyzf82Nv2bt- z^u(hJ$J{7*{3Nj^XTZ0csqU2(ji$KC4YN!3FLH){0q%e;zO7647=)l>k>Z7S=40T< z=;r_)GB#QlKJENK=wnSte%Ew2hM{5;2nd;kARwXOuLXwTzUfP3mFwD`C1xyU@Swxu zNNILpC;S5qOoZ3bzIY6idO*8;gp1L;d`=X|pflT-2mmAAlQG$NS!SUGI zF`RpNe=akhF%+pb8@EZj)*ZaPyZvgN*6tH9Omlv9kgeQayUR(Dcs2qz&?e^L3w&sw zih^e=Sy5@FZLx+P|NM~7oyxSDNXfk8L?cSeu^cmrqAPB;)}0xlaI5agN%PyZAk>W! zH)pc)S?Ss{1~j8&(NfWxUWyDC|L94t4-!w2D>~2>K3}h#J@z|L_s~iCNVhaYV4`47 zq~b=PVuU7!V`vd%xRj1aao-fT zxIV2tstRd5P0A~QvosC*+jmw@@)%dOrBS21+iQN9+TFK48J~V+-Z1 z9)6x$vpb<|w*7;LNirdRU8qE&fPR9~@JIHzRPV%oW+P@G36*P#IM0qz%O68TcPIS| zBUy$MhO6KoPmUf+tB^GUm24%lfGxEu$G5V94U!6~CF0%=GEhthtiV1mW`VXgD|XBhs?jNBMlu5BrSzWM zV-}&*GT6Hgsg8xv*u;zZs zwQtS(M#A>6G3ShODC)E;^+kZeDl7GzOb95-vpf%WZc=>0msPZ)e}Jq}UAHex$8uQ@ zPs6M2bLQ|K0YYAm0AI1{!8b976iT|MX`(-gJjRi$2|6Hzjdp%o=664OTlh7(Mdrj$ zCS4fnzf^NE8_R>;2{cDuYxIxY7|=J3<5cv~W{#hr^-U%v-L0yJ7Ff=9cA3Y5F(V@t zj7ISrww|^-^_P5{&NVT~vz{AO3vuTuh_BqvzXMD+Umm7LMkc$ePyM<>+1bz9>*bOQ7T z9I%$iJ`5ryu9M*r4ipqmg7jB%K)|_ES!2Ctx4eL1l|MsH(Jr1JOue$>(ta6bki3`q z?8912|Qp~1SPOfhI8X?9@x3Bd16G#g70NCuy={g^d#9yeFG%z-9 zcZi%0{+46VRC&#MIKHNlU?xTgeVzb_;X&gjB#Ze`7qX6o-U6nteQ(P3n0+w^_YH3R zO=E6n>3!VQTzs>xO^O}Q^$GmqzY&M6DFmj^-L63i+u~yQ9S4nlvE?^y>{+a5ZB9Z2 zLv~a3QCltvf)evUa`F$89R42?r2<6a4$nVOD=kX9NXbou`odoFKWE_{J)Vvj^8~EA zCJR8<$S|7pF~TsZh29K{)uJy?b16UUR4-a9>Zotv%*dzkM5-RXi~^#{lRP21iAf04 zbg={;Mj6fp-^K{g5dS4Ut>%@NYYvEHVks{g!Y{j*KNVR5_hw!Q&!DnLyfC17sNUIn zvVHuCgll!?w)p$SZ%ve;is^M*n3cL6+ zL%qgkaZCk5L6q%5l2{1~kTagvmS1Feik+;W@mZM3R$WP_^Bj*n4;Jw!b_$CgS(f&Q zhehW!k{zR`FJ&iP6#JoVFfhVge^NlQYld>$ro5m8{MABq!LSBD60TQul>Y$9H}wpn zQAjXuxU5tLm{{phXjhsU;Qb37tDfy-;Zpelo>uZKkiv#T|0L@7Jk`^DNo{0&kty>QT%&r9+THc!CFp{K+jHgVm*X&vV)xD$ht-K0@0|Mp}r`n z%i2H7z-_KzxI}O>j{h>Pc*zlkM3Qu#hFilQ7n0vX+h1J@jt^4T={b(9)msj#i=B2< zCFqPcWyeQ15parMg_48e!#5WT$9NY~i6lnqBz`yaY`0ECNjG@j44_k+749;Ob=rNB zsN6>@jlmXQF!qRAX2IhyXX~J%rLYL$$9M570epnGhTmk`an`Zm3z#@<4Hkw~sbv+) z|NZHVvC%(bVCVj*gdw&t$PDAX@5%%BE=CacdmJI1rvoYPUgLv%j1X+JMD(>{$scfs zASo>O@6b1a-`NE{Yz9M|B=9C6_7Zxe55dV{Vk z8PnE=%*^)~;p=U_Bpi-^+;(LHt!KI4A?4v;>_@94$vbw7NJG^Ux0w#lwfVwg`C3xL z5&IdWX3EOHb25@c(N|MEQ?<==A6XV}!wga&}jf8wJS6 zU`?Bhsme8WZk-|xS>_Tm7zs~o-1utu>A0XtSJxcjV;pQ%12>&^Nwxf&wWI?Ew!3Dx zQD%SzS#dFyD&GPvRS9y(a8=%~J{YMur*uLV-N2jh@7@+GmP*Ri+~xVSBVI`Z5ev2! zd3ad&aS|UE+nDd-bcn%(8L9Xz>h-`Ps`f&wV(iDW2;rg=-$2-1@xJiL6@6FpGpD8M zl`3|uE81u-w>u}`nW+-tbAg)(RdP>%wljHdqu_R=&I^s31S3>d?R&1K7VUls}u9#C%V3Or6d9>x};@H zCjp6gdA@qf=_c5Z-%p+%^y`gh9wD*T zLu-=C!>!}S>#R|X!+Erqs%i`ez|OBFbEw z#yCtko&MYh&J7O|38>YijG!TqMyzg`R;I4Q&O|E)C&SK;TVW1661dS zZeXcSWb{2KB=eyVKf%Y{j$Ml%9x|WBk=KS+tl>BKrEo`eO?npU#BzV8bNa8=NuwMk zWWl4oMxRAel|(6D6K2-hr1+fow!F?vPc8t^fW>++BC~`7Cma{3$a?hNl{50_ad${F zP2uvKHn}9ftLU6gQGW#t2W#|m*QJAWPkLp74h23g$(^#Z^*g8!!A7_VZZ(3mIlgc& zgcG0SMQgMr-6BBa><9(I@!>R%{qXWhopMAhqFqQ?-0iS5^L_ZRNwdtN!KqBwz{Idq zQGY03KwwcXh7e?TSy7<}r%*}tyLK`R^S6Y86;(NYexAL&sm~M;`{#E7QI-O>pzYv? zKJ~-)D3qVh%uJ)P3}L>ivRVxcv1!>_!}FEL=jq3W;qoqFdYbdoo|!ccQPlAK_fm%D za>%=OvrZJ=U>j9|dd+v7&bRV8|Emxr%<`7bpHrRC)*l~nk#rbWWa6eody=VYOCETm ziKU$iSVDqT-UGh?!v*^LUpa;{+oOt_c?e=0N! zjf3G_w*QTlBEzc^2L|y_pPa_&#(0IUBiF5oec(dzeaN3zp-d$JxJ5F|KB^u2Ur}7Q zsAIui-cXVNw>thanvAF>0DEB_k(fch3f1R3pjS{iktm8R4qHOh-#6RbsBxAA>q9T?sxDmM@5z1ub)CDqji(lBc zPxC}FGaXA^MPO(6_&!NRy_GEIK;_mm=lQsWyQWlXe1st=Ym)ot^B&enHX8JKB`;`- zgUZq`8Q{CbG@kG$z^UL8{m?>{1DCSJ?uh%GIVP4pB)9bGMnjL6Fpz$CI=6Fy0rM`X z&*f_oFMXLsa1ty9FM=_QVpzvE6SZFU6lU|gMr~YFk;yMLo!tfuM~f)dS1M=m)Awgl z9^CAHIucvw8g{&;bm@$OU0wgb?~W1&VAH{xEa2~eo`0M`Fk-JuUzS9B47hOng&yFNf1FNmfEH_2dC(&h)ZeVx)+36jV~&4tQz#gi&ey6c=Q~)UX!i zLI5poW>s)&zZ}`HPVo!FWE{JxgfpGwh}LJv6-pQWpwwl)_M{GyiWo+a{WCc=uJE#A zTm6v}>>pQyZ*`N>Y-qTLnE9*NN5lFFKhv2OPG#Vd9*HCnBQbNV(I$?*5ny{jjS{>W zzALE8Bt!hOKjWoyNmK%|sK%XJ#X#@WvuLO?0vsQ5C;JjoY4YK|$psI{cw?{%7#&>vMwGHvvQ` zr?vskZPc9Ugy3(g(D(_9-&9$_HW$&bp}_ctCH|(i-K@fKv=nyt*8& z^ft<$+?#-!11<_(Q3|k*$__MiUV^Y%B+N!+!mt`E`tgfC_tNhIl-rG~){3JEFoHTS zH1y|$FB)pl`3Z>{+7Rhe4Q6P>1R_le1b6=vl6Bv=2kOR$W%$*tqt+LtN+BGl4jwLq+^DErpYH|7pkRpo2CSq`tFEtF?IF zzgVUejc)UP-uAJu(}IaiaJ^im;?=_BB_<;WXl;Dy#3#)p9b4Ye6RZsEuJ>klbSeD* zre=8PoZrjF=pR@38)t5LF!v^RV!K^Ehhf^m15aPf=UBb)ulyS5K{&yO$|qL7DZuPloBc zWuMlYaAw!6pPcsU=V$r#hoatGtMd!*2{jWdE*4sJvFFahG(Rx8(Ro`yi zC&&LinADi$(haf+-zHY-#Gq2mx zr`JY!JY1AwcKX$g*Lr^rDycP2d%N%Pw04D?Pc^UJ@T}*SwR);`DD+|8-W3&FquW*& z-Q+!|WUj6~eU&}W;*U|K5^ry%ADFLO*L7Ytd0q0wOPe@$9h$Vofiu@g1u;alf!cvgDKQ5EOVxb(`FNDr@Xzg+Wnzs>mmX#SsP z!h4pKYfHpG)0k{qvRbZrY+Amfk#uGIr$@UCCt1eN z;=R^WznS-eN?-oQdY0oX#XRK)0{UG_T)6C%zMi{c>rlXB>Je}*Nl5U|^U{PRdn*=( ztNBIlZ2o2}``GVh6aS+Z_iksIY|EA2nkj$yx%!XVpI|iM zPRaOl*FR&Mk$py?r}ciu*)`F>p03vx_|CpQ{srf~^M(!%EOwHz&nzr7^Isl*oYiM>0!n+-wyQy6Mp|GpRylx zP{ihoNs(-v@B>yR8)y14o}Ap2sVj{*ID(Nu0yy=80DmT*%G8!doq<8fGBC`UERf~E zC_OnaOF;R@~kzo1r*-lJ%qb3XISVGIqz#LJg?C8k{qs1oIR+SvX~ec g1d;4wU|^d3A;*rfb+Uf0Eu-_~+*~!bqzsS(0J4lHcK`qY 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 528/660] [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 zcmZ9zWl$bL(=Lo#up9T_?(XjH?(Xik0dCyg9fG?D3lIqI1a}P@EWtTE&-cP_iC=oE}nq68oi%LstZHeihlpCS& z@Ke#XUathGsf;o+s|_R_15w|med>>Kjr4d8iV3T#VUjuGh}6pIQH}Ja7K!K!F=0vy?*NU`w*f_l(alw6NDP%Jk)NE6qib%rsRL85b~b3EidZ- zsT~UkSgm%|;v^aln#JM4x&Vwsoi;o6r}Xyn%1KDc*igcv?Sp1#xK{R81jDiWuXUT6 z>0F|MW8yhMXfb*0@eRMy=U=KIIs^vul!q_}3r%%TOc6C{zRG9YFIA@VLEB!5KK%ef zg~YeQiv;2aekMVw#MZU)2{zB~(&&ZD)c!#M;&uRO3RV4}x*zC0DkV)6JTcVA40=(| z62JL->VZG=*43iQ1B5M;Wgxv!a^C8EUz%AbAqOi+eS$|%aL-s%o=Yoqqx1RS{p+BiPyYl4c4sB}RNx8@ zWx$Q0g@<6~;r@8-wZUq(SJ%f;XIr7kVXMSEQTZQfjp7By0S2;$+521PSvnd!2OoH; z0=fE_^qKmAAAST3r;V`MF^O>}SjYx&TgQ%~gtB=-LrtVjMk}n27AlQpNiEpTj6R2{ zi->&D?-$T2yj_?7)y6ve(z_Uezozl?S4`h{)crUi^Vc3(vI+0ATM$T*;yL_e(#zs$ z)28{}w=f}bKq0-+Fhi+QKtTL`Nwr5N0}|F) z(Ic)H?ui+F~Z{0IO$+n#6?5w5@YMT_2uy8iXXb#xV7qBmY!%4!f_(OcuwiYx!7N*WGj`V zb$)RVk+KHDrr?`!sqSa0+l?{y0jE}`1Sqwxa?MD4tmkkk(K#dt5E%1DI)N0$ z?eI|%F?x$G+9hl>IS2oCC>PF@_T8umB@aq4yswJVWQ7Cuf62G>h;Mh(n&q8yzL^K| zSFk(3Ri|JXGL*`nQSkBF_O**3z(MZY%(uOFv#Md(`eI+e8LM7DQ%e2L2Cz*`^L+-t z+32n_3vEP^m-avJn$9BHc(`Ev6k_>3WwT|;F4yzB^|KdE;_Xj6{s)PlrQ$oN9raNW z?4_x;oly&@C?ga;p?#lLa(FDv_1>VcT|enkm6Qn;b*Z0u?_w&4k2>n2SiaBiaCdWQ za}^f1a#YgSe#yY^*uySx(*vYEtm;xOe0*RTmDBZKL)YwF%k{mOZnuZwM`7)QNr-+p znY(Jgdk4BVyDlH^82<47m0{*iQHe?N*D!ypyW&F881R@%uhL{FrVH0t}J;ZgwzW=xqNO~&DI_8oPOZ$lVY9rqrWl{!?G?pYXy)J7B{6)_ORU9^D)<1`vYLXX(|LNA!YtmB6G&U33g%#L_ zbcr#7L{5F^P(Tms0tw6D{gu>Qbs!Xu4S|=^GgJZphohScAstuO<=YNw>z#W1LgpA5zCwlTTlyAOj2oB)|9*5 zq}&g}IU4!yvbK^=+=alm`e<4rjpWK&%THUbbW4(1VsSBUOwUyve8%}lQ*6*%RZPx@ z`}`-iy#_F4Rfc9WAq&!9_^ttq*!0-w*(OhLzk}4K#{QCxSIlJ>zKlK_fh2D&0rL4kC-VpXN;mve1A zWv3>Dw-DQkAt>gx3*Sdq-I`>6uPkcexwTd%n3QKNII9|hC^XSHMxO=GS2TZbM^Gw*>> zea7r}`tgQ>)RH`Ura>c`1JIG7_R`@?Lo6Be8Ie_kr&T(tOPJLGyn~tS>cy1WKe_wf zq(v(mFR3^r3#DMReCIp9J(k$&?;-%>4AbOL;^El$awALkjO3Mrr*uS< zz&JjYVYvP_!sa-GGbNOG5cYaAp=Pq^y%t(=UxH$tGuZnOdreBTvi^pi>a2;Dyt40< zZc*pcJ<(qfRE7=$9%S(#Fg}rHih1->BadUib1tV}x$iy>nqK;@@k^{n`8z-5;TneH zV4nNZaw66*apIINDO+u56==NC;iAZzqO%H`vw7Mn&WPf%>#YlECp|{VOQSp$CX1(7s<)JHlD@PV$@VxGHcbvg-Q_XnFm58dLg&3CaD} z7pXJ2&Nn(?IULG6<%o29BkFm4`XWIsg7doPIJ)==^Bsrrc)!CIT2gkE+768k!p$WF z5&;g`)wB|F_Wj;$X6fE1r|9x1X`X3tj^39OQdSr3js|b`{k!VxoKVCQCTZEv2Ff3kwJYmP0LQyGIifSz8*L)gAlVq*3? z8Eu>R*EK=09*STuTXC50QG^O^u{ZGqK>^K4X0Y8!svxyFK-G#VE{KHwU3|2VUm3G=InGzM4JQ9-|O4POxyqU`$ubn3}_ z4!wpueu(-2gtt{6>nJfP!&7Q~W2e)CK;dU}P41O+7>~>c5Cq#YDsH%$w z#>;Yt*IKR;s`>hPdoGv;O+RKr@Dz4qJrkxiFUz$QS3P#b_)_r{;Q*fNA=4XJAcb`L zYx}3RDA}Gq1+J#X-`@k?61>8X3(9)Zh zzjuM0VY(KjR2ld~hg89L_H*gImL_EdYTMf*Gw@4KUD9W$ah8Ya+Go^P=<4%`I}niclE}9WI+QrFoV8ybZZn z{YX_VsPTkPM@)l`^uA>|_Q7nMH>xT_6`z6fbiUa;hTZlE=f9|$E+A=*0SYQD4*IGb zvNs*D2Gf#8WjW3%(d{;c=GRbo{Zs2%b)KQ#xcSM}MU{{Y=}HgKq0pfH2WENSnFV}p zFu&ejU9K82l_9uqsrr$`j2&B0U53k|qUy+!m|dT@y0q|b-(+-S=0CQ8xhd}E7hrZO z6y~b1CC!>2Zb?8*VJWXC8^?_O%7VHyS54uu^_5^xLnLmkQYTimjU*Hld?SoXUv;E& zR-;|l2%VT#-})SzJBknODwJQd&}<>)?_em*YWx zi=}`$3L4gv5VeJo^I{KtnUxyd1`4;&murd3zLx(}TMYnDaQ->}t{_@jZYd-=v3bir zr#^gN=8pk1D6DWP=4NeI4BBf+&Cph{Rw9AMh2rMZwnR~BS zk}LOe*tb9XQ0M%%rn$KR6|*}0Nw3OtN_ix6xL&6ANa zamR!VxSI2i=dAf6-8##U&zdRmIR!-ueuHM`UL_50Sp+xaV_(eKKZB@0JnlUks??$l zDPcdaiBFZv32OC>C@NQ{)QK`I+DU?QJLY{=?m*#6aP*NtgEyed0NO&_$1xN5*eHlY zin;ewt^cymCVpl5o39|&@Qm*wfe1rECQ{X)pjg)uxPo|FsB!Z3A0&IcV#h)dH+aEq z8)Ewsh_HMlHwIu{tv{8||2k7kTK;-$$pn~j?UwTjOJn`a!nt{7Hn^pCp_lPpathZ0 zskSE+{zUw?C6NYP#Ed%`HRaUBm^#b={DbR{W)P*@dZZ94rW~+d^U8P(GuMmuNYwNLRXqd!PW&nu zBuL~ulm&-$S39?`Q-ohp(YKw@}Omd9r$-e%U zd7XAbDukW~dreXt@}E(RnLahj!K%m|$9%W6kgqjr*W8YII}N3jE>l%&*&*5ef-OiY z1}J5;qqr6&sL|-9D&2q^2UH4V?rW5vzU-jBBEa_~@|iku!~1D|?#kEJIW(fc-1ST4hn&JTAWFg%^=IfA zNyL)06(-pdQ$R>XZV_V?Et(2%R3YvjgDk45*rqhJg;oP2{h^n_pwhyHgN1xhIFX-v0>zc zv){DB3d?#Sx^^i+Sj@Vc{`MqgfBKP2-%d1roED2{p^QS)YS$ zSeOsLs~}6Aht#5D#2c4%3dzdmu2{&}1^7~x>x)0%UyGT~$;Rta2brU#rIYm<@LRcs zB^7Z2Y@-SKoU)_Wx|j!vcu*6~DvDy{)49E;1>b5N)LwhuC;_n2j)dA4)xSmdodz@n zj3{d8(4r`8^mM0hIn62LD(65B6XtW6{pwvEx;qQA)fx+IRU;C56Vx@z*1-FQRaKLy z_@X5<>-82Qe_D`870f>{f8*UtB_LBZ4JHTZE{raw*M@Oc!zx9vuMA&QiY;GIg!Dhj z^1n&m$@H6wbFW&By@|YY8h*kX&xifcR@roY1|B5TejuIPwCE`mM$%fr1TrU!iK_O2 z#6f2{zk_)Z5J0Uw-Jh*=P5l`d@364Am02t!#j|flQss zLwjtCfuj;L(rsk2l$FyDIt7|C`j?LW*CDaJAD*P=X!(lAVG@|=YL~BRs)t`%HTl03 z&%(8WAq-Cj37{f9g;I*p?Tg|>k(NL!a|>>>mIP^?$V~u+-)M@1IG}m~eBwn%K%%EJ zoX5=ot3rmhYKD9%=1%7Q-8dk2R6jO5tU#F5JPjj7zsIgeE)u^*EPjZTLXR!_S6X}K zJ9UyDC*3LSUC$fm24T0akox4|3JbkLpsK?i+Hij6DFJ2Zc#_1GXjQgoCvi4n6o#Fx z|7hDgoE`m@z}VtA4x>u~ppcI4ogG1iK}Z@u6cF$l{t{5NFD0*LNO&#O$0hy`H?x|C zGSr*`DkyA~8k#}lP*m-GZ-r@ zfaOlkfNH&%xZCgY@lRCPoPV6H(J}afo4U+V_2wsLhZ&H>B49DEfXypMEwo>eux?Z( z>*-j|rrM+=V#qT-dgDmvVnm;!)+EV2dI7LJS6R6}3Uc~|RNBvwlxG=S5k50a&5VwgrJ)T1|tyxIMaD3@{;EaG~bfq8%20Z zbDw--hVTxf1}7y+=_%ZV+r=OerKVi1T4qckK8>0y4(zU z6z5>uskfH25t>jn!Cdo->!nDfQGUAUI8DS~;WgdsJu$4Tm&(Cvx4rPVPo6h(Y=5n< zu3jOz=KCs?eEBzM^dB#sZ?gV9a!?;-P@*ELg}YITdO;WUuBxA~FOz|>SRWRB*xYPs zd7~W1__`q&cxIS-2oHt9jbVm-m0H_{iZHFjy-H0~t%~EUN;g|$3JJ*Z-nd_D$X0d_ zy$Sf%Tz;tJqAp0$CQmd{g#`H%RlOHR${1B`nk~C$l;5SF8I+<`K!y^;TAj`cHkbmO3{7)PZc2W`pv=mleX0&(7@8X}5|56n|PREsA7-==vMAAF9gVIl38~ zNf^R!AoT$2>;Ot4{c5cXcIHq<3P_8^z^jwwND_$J;rN}>bNz+fk+_dtKvr>0fVG1i z|E%T*C8bgfuyP}l_=Dc#dwehEj}GVq|Gh2$e}XOle3v=&$>O~@6ziFr3CMT}k{Wl* zf3+YX06fq!q}HTY*L~LrO9*nRbnu;a~;E2Dt zs>@N{+mnvBe32F{h?M4K-9VrX!3*gbnc&8t=TD*5lF{$(or2URJ(O~syz!HD|0P2{ z7;Jv+72PS_(8*KU5v`h^QpNx#bukTBoJBs716qfnWAIVYiBZb(5TCH{M{kM1F*%f4 zDPZ3u-6c#;X#eLw9xKdp1=-UgM!gQVPibUd2E!GWkwef!7GY&Z(Me%2y=Zhkg|Oz| ztJDv%(?yGW(hLg8h}C#C_pnr_P}XkijGD7Fl#oku11|hx;y#qwl0M#Tb9}sD`HC`Q zV8K#6Q$XGiuj!x98+F$&YIcUdVG_9a%z;$Lg%J{kaz4)@2W;o%8r1)M^{{bTA=!H_ z-~!BX%fE^U%SJ$^US5Z2Z&(JQDt4054TfT6FKRUT;EdzAq6@IWC!K)~qbp{Ygs{wv z>4#JBke)w3>Qj5{h$3Pp!Cwo=Y9|cW0DJ}F_qyJ9cPRu6>!H%5X6B<-!9A)6q73L=bhjW6UiUlhv)Lz-&AK9jz7KbDFlA zl^>d6^+5_kj2`6v=&Kmt{3x*&HHil_o8D#Jy{b@VtLAKYG51Sl&4ju|h@l>(1tf7Q zCDkOIvE;(0Bzkc(vt3pFCkZwNV5fu8=*5xo9Bo`EL@%UK95AY6v=5SIG?KQIGIdP4 zOO`FqNYPjco^>m!4Exd(eStZO#nUiriL?}8canUSgbgP9N;+VcOWfp$1s{_e>I)ao zHIXr3e2{#ktzi{pi&f9v3e(jn%P3|Tz+K~aI&4g-A^1)iXojw1MLMGaV9{TzyQ3tg z+oT)(A?#>To$y+YT5=v(N-kzq!Vr5Du&NwUs6J6UP8DY&oO^eLLwcQymi;TM-WPr_ zUP8+PMyJ0`ktM_3;~}pM47=Kx4rLld`Y{!`&6Xt3LV3(6vAL;-euJOl&pe5A!e^;X zx(rR`^sKjW$j_JL&oYSsNPcqxtCnSJdYMU!;*xVfx!s1mxAv>nM;sSYqBUbfU`jkn zBMfI}#(bv?9b6R+{Z4M>=|f&1Wq9&SR=y{xCJUKLxL_{ww<=YZ=G@RB$d8x+iY=@5 zl@W@98b(-#x!@k2>b)m`tWEVIQ*%yYGg-al671av!NfZ;`A19?*a$C~c1mpU#y`D# z->Xj`YcQ{SW#@#EPMSlf#BxFloAK1n-i;t7Lf44%!XHP!yg%1AvdX5@zMDlK#hOD0 zD-Blk50$V)V`YlL8^GIf{1H_^#SXGN3BmTZTkEi``_4+m(9b7sM9WQ7iJXNCFF*6i zCSLrx#!QJIVoy8XR3J!^ureX==cP@OEFnXO_A35cs8xaA0Uhl=l>RCa(HiCw zfsj3^aA=H&6fbtkERKAXMA><8PXmf;W5a_RZ&&wb;^tam$X!;haN}$avo&;BeV{gBBJ6stz68anvd``Oe7nD zc3W)QqpJujWV-m2`2!6`7Cjmt0f8qP`o}V~yT%+f=9(7Ak|r^a1S+s`yGjB2x z@X(v)+2+%1DKD0JYH?>QNw^|OT;Hy`w>i{xrK6;(cJ4Vs$0b&`w4Xcj3g z3!t1Yac|&#cfN)rVKvI+U35T?_!%%EmCy1o#`BT{J2;+8>20KNc1u&58#U)M9++6t zTBBJ4tHJGef|gZkVkDH>q?O$=Lfhb}i)x)FMk`U3*es#_xtSB}aAEq~I73ac_#Kn_aU3(W+ z20_a2I8K|z%CF57+t{`3BUKB6N=%tAKW^$%&Mos*7>jH0TR6Vo`A{`Cck2US`hhe> zHwFQCvFMGc*U{nXZ#!=LlGk>FedSGssGmjjm1Nys<^=32*%imKxRBRdz4v3tGro6r zOxfst{Rz1jAqq#=>~`taBLQv=>lAgEL^sb?fHh+m16dTEH9yQcJ{(~U*NIh@F=bzS zy$}g8<|SIm(^t-(%I!^9Hjx4#=TbX826ULhaiby!g^L-wOw1-o<5nB3t^qCt4$gowrLtUz|UpBM!?Rsy(1 zcS7p3?kkSxFAS{94;HA*V7yqKRlt9oPEIIm&v}9Hd+8YeW*^mweKrQeN$9JRDpmCr zBT(GT;#YP4;YzI1I|e$7gwe=S%lqDoxNsKjD;Zhtd-uj4`W&cfzt+4Awn`=!TV&FH zuEOFtSy6rPQ}3rb1H1!R9_`jq448Vm#1HXC1&+a|Etcwj;gVQ*suGT(=*J7Q?qoz(y^=C2@}%Kqy+p!yu;HggnT47=f5g=tjY(jJ`zETAQzrrP#NMN_~98#Xfv zmtl900gv2Rp-oF(%~)_j0&XbcTbxwqFvb9Ry7tShbY+yhF@1@+n)a%UgwgmQylz`Q ziJ+Vx7Nsuo0m_LgO1gWu?XZA^DiyB-qPA4D)u&&V^V3RSru*D0HsK)TiqkQue5}3x z2W3$8!~f(k4Xhb$4abX?^!z}GqEA+vK`7Q`tw|28KnbPS;W}roJ8RmRT)vQ0nmXxW zbzz`xR^-c!DYMk39H!T`?snfxUVS^gYxYl|WnPCL5;(9osE$kd2p)#3pNtY>2rnpV8){};5|7tQ+WGzdu{)TPjh4R9tyg+n$oX|9#MjAcezB4cZ`TmKJB`hZN%s(MgKKYyD7%|$O zB{KzO>E-a_y21Z{+d$-hZZEV9urMP4r|%jH{m>8)3&;=aeQvBEmRSJ(q24z7a4q6ctfvysl%F;U>x6+yjT^)aCuenl^ZL&?rMb>B1)oPQ z_DSl1%Fox=XGX*`4;D?*j$SGur3MdHQnUH1d2Z?UWsGYmlv86RTWaXRi73GN)c9~6 z*~JYn?d${2f*=J?&rN5&GRAneQ4pOmbkRU*6IAhXvudr&USSWkwMX*C&hwJU5NU)6 z4#w$ZesQh6To2Nf>-!mzk*4P1s!O}GbiS`G8?FGS*=-4~DN-1rN8$JC`61W;EpkC# zj)~9%wlmq0KtH+Rw{oc+xCY?BAniw`8!O=ry8El#i(!XFcOzQ&IBUKoYv!psrkzD( z1g%yRy4ss$B59WSeekt@*zg@BXbP7CBNgjMm8}^9xe#)cCuyqul7Ma9s=4Uwz*=#> zGhBtu>+tWH7k1OY%+k-7TjlD}M^z}Gjmbk3tLa&f#HD|-S8_;$)&hVY_8%}uC9#dd zfUSjleYk9dM?pfsX+YF{y1c9#jHH}m7Ac}CZEHL5K0N=`ADHSKa~~g0XQCekmsVFy zB=j#tCqsQH2`K^9GH5s!$3vO`x--Vv=dZ)T))skuh^yYDLrjOdskIXzIEMz&P9C?p z=6M}(i_q-=HFp!5n+SL%kY4LH@S%q2h}`*pq)U;uBmoctu;cGU+$TAhZweKdJO2c$ z7Jfrq{W~{>u0t#K8M+zeiF1afAqi%Sti036?MJC|WYuYu4@CB!ny8lDzGj1F#6zvS z4>kAa3Sno_S$O~S*gNIc;eCF ztI;?3_$|zUB0%SoVf*YMU~*n(c||w@b!3g!e_KbtLsw1>vpAA`9-sVlfNYgOde}8~ zYga!Q-_h>%LD#U!k=ZSJBvzp|TFSNUEjz*N&tIR)c9+KTduUf0ivSTFM`dB8K9f|q zj>(OD91l;DcX9hQ_fgi@dXwK_oT%h7$JaClk10({(6*1M5pQsPVl}o2ZySt2PCZYm zvH-q~!)!=j@w+Dqhvi>O&IROenoA<>G(bScp)Kq6ozZuQ3$lN9{0T12l&G<1yofRu zf`~NxXN-)^ltzg%6H3~a(3h(W&x^eB7~9wSH>;DXmqcf5uieF1aWD%mg5>=AgId?aV*r!P)nIG7w#f+axVzv> zsaZTBU)LXJlEJgOJyQDXsCu$odvC&*X6v-IpVj&a^N&*awek~1%)5ez2A5(|Zc3Ksp!M@q$A(!+y*mlr?5wd&Jt12zu{ zk=NIX>q996Bjc5c?8)`N=H@Ic)Vw=zSK*r{?l+d69DX?NcS+0SWqOs>cHsO>4=bL% zj^D4FN>mi|KM|K_mfR^`N`NFCniGKXUR@A>({ud#-!&nB=py&>HY~g7_G9lWG_kf1L318^8gLED@Clq=^cBw zCU)LtF{7S$PGKwJ=Y7+8gi-qM^0LdlFl)s z8p8B?I9+s)s~JWf+KRcnCj@UQEebf8 zs2WTy^QoIRC*-Hr9VT8Dp83ek>DXSDs^9E&VRY4~ zb)Z0>KaXi+!yS|cz$|k*7*@t}mr=o$%H;B8&eTrZez^xHU>WfY4Lg0+S*>PgI!~6b zX&nHGlAk+WsDvzsrc(2Q+$}8SKa`^9+B<{R+pO6vnb3P}Tk$V;82Q z1blTaubKNUh_B8?qljNSzO;@CSpt<-%Kks zNlsB0QLa6xkPQnJPsxAgO*%9%fyb4~4LDulu&XLftN_m;xn?1|i?hDz%I>%-G<>Uv zK&U0Rlde}i3c4xoYU)cdX*22DhEkCwO_mOdx`WG^z|oL4q6I>)=cr3hYe@W^7Kp7-?Ry*1EzzL z76dA85r7w3;A8wyl~#kIl(#AAG`EqRhKChl1V8IaN~z(L=kf-V&MPd+dz7h7_Hf6SKo{&*By-?qPZ&;Lsa6oDyONJJ zEBFu-p)p*I!Ok2%;P+L1tI>mV9PB%b=VKOvt*IV7|BO0O;;|xg+nAp66Q7?T1JYD9 z8R+J5*-*c`z1k52p(c{xfl`)-jSp1v%(S zch6G$KyQI-qP9P-IBx9k2=>oGwN&Tx0p{3fSCCj{P|72a;a5DZ;MGv%z={DwsF zdQ+C3-1N0mC(nUy&an&sz|x8@OJYHAS%79IE8rkPi3kTuke2)Ne`UruCGpG__*JwBSVg1?@-vuyFBJF} zft9f`T+vI05w+XMyZE(xO5@YRz!`VF!{%KZmff|ZDx-NZ7L8VnA6U`fzZ zNRi_~;{wwBnGrgo zp)M<&7fr&Ie@HQgsxZsr3a@n8FOcf4j;=v0)lKL>!|IXOVK3F@9}#@eZRH|{5Hw{m z_K^QMYeJmcNFj||#kzjS0IPMKLn;Wzm-%|{bFA^nM==$=kN*y}ncVMNarB}k*1>1{ zoxsvbjJJNc#VCD`)$`E)#~YwERvg|4Y$aA|dGq|!3JqzBmy)m*9vY%Jv`!7BY9)Pd z-$~}V(lurDJdR6pd=9}#M4GfReEUbm2U@`13q`0qx)=vdUtOXffQdzmWtnNr6FG0f zi_RAXUw!F(pBYDQePV=M3A!V>e-fFR_dZz#%yRqo<<5gPwEYyr34nsC=)iUr)X-f(8k4e(+vmxU09$WG(l6O=n`?Je^ zc)P@e<5QU2kTHaRV(%Dypl*FJ)moklCY;K2=nct!LljK~aRRXNKM1fp5*?%w8*vOI z!8%-zV2?egcO2mw3s3*pn&sSa^M*Dx*vFwRrEht6a)y@h6| zJJt!Jc^WAo{sV3BPwx%g_y;;=I{o{tQR|u=F`b%_gJl`!jD-Q^XiGpe*;gpK44;wf zBg~v{%@igx0z?Xvri5%e(eN6)S?*wIVPE~Q6cgn3A1zWTTU=F+sFX3xO%iQ;X^9X0 zRx==iX+852x>`S>pRsP2t}Zl8$Q+zc9Dt;Jq5oLaQb$nRr5O{#>ktkE4V+4=G99*Uutj)TT3XtK~0!+K}5=}@%xX+KNnCCrTIn9yi zz5vx}5k3}2-D>Ud(*ZZ5pjQL&oT4u(Ie!Aq?=l|hvyHDDCxYK03g?EyV>$5QSFU&l zcy4Jqt|}IM4!=mnY5TPb2Bn1&Lj;F>Vb$CdKziRGe!4GMsDqpJO-ilc9UJRfCap<0 zplq;F1Hud?j&HFLl`k>hBq0j(?H4TnqcX>lv96vT6ClH~9Yq$t^rG zm5{LG0$nUCsRy!TfRf8P??)NPr*i<^b4`eKFH%-cIxm!3>bqzQZO(bIjPzHF;uP8> zPlwVIz+~K;SYXU-E|(Ky+vX@Ae=B(9-sonEcYDpOpoB1s+S>NKnz-QjcYh*Mn%!O) ziT1aaucXTo5MELhG4FF*TUdHWEdm~}geJd`!9lTB&>IH1U6z7aIk#xY3uW(c_iS1p_` zER7I+Wyr1>n2n-%I_ha@i2m(6sm^_;Hkib-VudlICdDR-Z{c6WGr$Tkn&EzuSQu%1 zVWbTc7>CGoh;#U4{1-H_CJ+Zg5Ph|f%rFPA)E2JSXZ^HmJk@#b7rB;kARw+bUrB!h|o&S{1E)?u9H!43p2H80fqrPjC-|C-ph7 zkBGr0BE6oa5#jbeR1j9tSd*6`{i2EQjjtcXy z{|MlumVe;!$e@1^ZvVH1OQ$C4s6Z9Ur0(eO5&rkz1O)*R0Q>&}Fr{+pib3+Edh0S0 s{&#OcLO|GmSc3j9(0||hslB?wP}|C>ueyRz`D&>GdQ@;dn*UM#AEbA(KmY&$ 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 529/660] [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 zcmZ9zWmFzP(p|f_rce?h@P~xVyUz7J|FGyF0;Mg1b8ecMJOEdA{BA?r#6+ znKM;&RZpLu?wUGv9o9p3H9*#?!oz-^C~vPw(1IrfbnP>kv3zqHKm1?i>kvXi6c6!H)9A56-?@?! z@aL+nNN&>=bK35i)muUAN+jfHK!+*>D%Ayt~ zE6t#Bh@9IAeT?~m@Bs3}4ZL87BNj#E8*J$V4zEUJe&m>7f3EA}Vh;Skj}o%HZ^970 z5(txsS@&V**AI)|B9>V)l)DX5<5Zz^k|~}b!wva^5WY?0{+cD!G*O97Y4JvL#d1?T z?9`=%+Cxxnm$+PSgT^0_nOURxJ)M{4yq9F8-(gq9yG7+1{ryt`;gjBEO+X*R8WgDm zzzb9@QEE~Y41ZN&@$@O?CW;%xZp8bn!j(JICr9h^gME zx0k(Y4S~>gEcC@Vg*-3RdV8HpBm>!3pa+rkC0Q#lo5?&;{)o>h$Y8e}GJujYW#InU zgZWW~-` zfGqHBoVU7OOM1i^t|M|yjA5X8z37r1Az-=5ODt}oPe7=hn}UysR5^G@sx zVHGy*fmfAm+MC#>@@1_@=zUa!tvIg`6%|t7!P?*)rKPwVGC>F)tAPQL4GKwbnq^Ir z0s;aF9x}linFNSlWkwIVq`xQnvXy`-4GOK@tu3X$H(EH~S>?v84c(jPL~1-~cQ=y% zPD=UGF*mhH;7UxOs=S{0hZk2WcJd>5$DdoG^oK}?~b7eox4Pm!I! z6T&<4#w-5<`!j9#6G9We5WDJlzFz}I6weGrH#~Kko_#v1M!oQWh-%*jQ6k1Dyuxp7 z%jVMQN5)8eYTl@BP|ihJWJY&61?8zL316q2``QuyH)Ki+v`3Ivc-V1@AczXb@ z>YaeJp%Y*xj;r~YReOhQy;cPONooJi9p~<4!{F;_WI^dtn0JGvIp62utWgT2x$C_% z$N0OC>6u#e*8VE`{JimFZo=_`#&2&k(^Xrh>W%x-hGbEtFVv95i zJRql&|9JJO{Xl-DR^AquppQS-Sr6~4c1ZLvoW6X(kijuHdtHX?VzIaxHk4aNhDjlL2pkfk$G&cOT!6+n3Ak_tWl=KTIFb=ii?nQgS|C z-(zwP^np&`<@ZPN>7(HLv;N29^Yv{E@yF9`i+#$6X4l*MDKYkQ4(#{$n}*kqt?rVS zn^UHb_qQee_oFHxp$d27K~>?TImPDXbvjDFp5?T;#fH~!oJqV+x1Dgh+Te#9piz)z z)k#?pWHo_SAohmc?VFIQV4TY(GJ8I)aoh;wQoj5U1)ol8)|O`f@+DQbuivLYOsvC?S~u<4ihOL1;wvv$ViaVOS)y-2a01uE*3>V)?*eRW7r^ zf*aN+=pN`&jgj>x9^bSnBe6~J%;Tj~{6kQDipd}u+}lM|f$42}H+*9Tgpu=7+5s!N zCsjEZFb6hyz|68=(jjCk1?%)invzQJCi_)cIz5__*ZM@|O?kY8K4u%Tk_sD@d7m`6 zdakDg5u-T>QRY{}wtHqC=lv3)#Ir+kBvu{=icdKSDJOAqwYqcx6St^sA~HZBVIh~k z!vWKn8yLR=#Qx{$NyGrI%d$uKbUK{CTVU|=^2B0=41sSizSSHMMKIxRPa!cPmu|=f z)3}~jAmf){V7y?O`GqhN)|1UDc()KgT2#oBrQ)?A@S!FRw_(mB$*j5mB){mvljYlG zMj+og`78AVItdin>Nmth;@r0&YXys`KY5x3!!j%ZxJD~0{w%2ffMMLSR zv+`FujMA=fg&lbHNtzwH`DckE^=wCSF#1Wwa?Iqg)$o0jGGv%1P5TyX#&Kl{0o{h@vqN|EbUgZtU4|{n(89^AyA~%s zi~k)XPaT^tS6wc-8NOUbN6igo^FXmm12W#w$NwbsxSIW_t>-^R(uNskcw}wzc)gX z723o#{>1ZdZRvr4freXVo`*R4c&>dpdFGW^EPX%v zEczCPG=Zck$-PEq3I6*&zytS84jfv!>)vzNe#qZbZ?X|WfH3T5ph^06aSm<*iAt=7 z+7$S|d^K6C_QPLs`<<78d+97ev&t$u0|IfVFtUcKX@H@vjMB4?mN9mW{y8iSM;69S zs>&)xyq9VV+AgcNtQs@@T3Er;A#W@TP!QaP@hlHS&EOlazb;B2ge-c` z+wb2*eJ98h{r8bA!O)fmx^<2lT@?}FrXIUGJCRW=fqq+Vt8}^~PNH(JJTvQ_Rdj7X zMKk{>J^bmuPuKUonyrfxfb&{TRe&WDBr+2Ch0l?o(4H=iH|jbRAtn@&wWN*Nv^Z^b&rLNMDbipc=(wfrzpwe$V^p^|GXTB^z#z_uCS08hd6_c z`&&6H>Vy)<#+h#u=(crIY!eh(S}Zlzf7e<=XIz+W=cd{&9x4S5sFV_QIwW!sRF^Ap=9+f!C?pl)O z6F`~{>pDf$CL?|>D^6!RY~Wj%bC4@&WHnFmqs*+Fp4cQh{DZT@gw3a{%ux_uj&I~D z&b^?_|3ljttKJW;tDBF%pe%6UTuYEo?VaokC-;xNphE^Qbo8+>^fs!Ys zX0I0IJX(LkaH3C+N;T>H+G5fo z?Iaiu<{l3FQvC3mlxlDcO*df4U-t$26+jjNK?&IG+tlTrb)O4c0IT=AE|uW;_2EP@ z4*jZOou}ar^6R~r`s!eoMesO3Wb+j9cswD-r1{-!~I|R>O zXjc`leQ@`>c?Tm*u!Q2y=hna(@sX_@`v-Yj_%ejy_EonS^i(*3wJ}U|D_ToQ2?h@Y>=f+QkF;5d-qI+@7!^;6TtMo#{Et#Z2&n})0 zFfV@VFkVKj;2P71s-p=6yR%_)eMCCs!wHKMJlnE{Cr4d@&38Uy@)#Jqx}Cc}jK_*Od~n&R@2Q!0 z%q7zB()YMbIeq5A0~}Xn&r-X|XzlkT@yQjPgpEN*t3L&3jl!@CzmOjN(0=<27Fg;r zPbML0gn`y2<(hMAh}6pehW8kTI_ulVGjs)nDz?K3G!4kiP#{qx8<3njZtAzNt-YsU z-fOJV5;Sw5=>&pgFI67;E;dkCVDWYw)uAZ$0m=c z8264b)%=K%1&C~P^T_i&zLav>I|Z1*0Lg4BJxT_D=De~@5%Nl%#y~b9%6vI3rHuVd zMM#LePe`ng0ut1jF>lVLVTO~`GIGgH?hUZAMduo| z4wfxOnibd4rVYmn9;xTq(Es_x4!tm{@+Whmbu6e;7WWR0H3%Jx1th9vetRuphkoeM z=q|&B|Ldnm*gGS*FOA^YX9OLM@}EMUFeerlC|-6^6mN_}Dmb$EH}a<<8YA@G#zx0P zR+Ik-9p&TILUKDQi&H=VwH%7?rm&eNZ4&HbFzS34@5*~2Jj8tDk)T?E&IOpX@R+q< ziZ=WXF)^tME&nbYg|d=aRJ;YAgTZlW34||)+ed1cAfxoKc$AQL#`)HB6(<}$9T)e{ zu#WJ=S$ZBHaY9(pAeu;YqBp)2nqL9yAS%wF+Es+T&i#(!hz{_Q8}F5(r=Z_5bqpdQ zqCAVBFjXL1s=PTU)Kq_HYdk|1NA5eKAuy4We94eEQwqOXT-3yQY-7KGF|{`4!-O== z7&&sy^?(=7PU}5w8dbb4^GG=U7nFZZxzEZC<(EobD}JJRSXNyBEG2P$(L*J=+P^W? z9DFfHS$gO+fC*r+{B$W~+;y_t8o?o5hdJSKysY_?xfr(BS!qC<%;U%C$|nr&MA&<+ z&8xZpqb5IWE7VGXkAr;RA*}N4P+$wqOrE})RqjjAQ^Od$Fw{0Nw{5geUIy~YP72zH z#N^FF1Xr3RnV7(z_!&&BV`2(2RB3}b#_&fp5m6Q{erZ6y+rxB9`S*dqmf(I9sNR=4 z?Kq4Ql!9$3(Bf$%O7tajKWq5=K!wEfkkE~tR7vuLul8Hn>s`fo!;Y|+X+}ZCeDI3M z!B4Q%`(I>9!4~-Y*<(U%`o*w$Caa@4TUud51rido;HWr6a`Zsy$R5SXy1M!J$*D&e z5yUvh1To-Y07PR2errPeshh|Q^~{Z{!}SuBz)!lrmpNve0}983)Xf|ReUib0Orv0f z67}@1NzU}^qL%&3A>HR~1k*<`xbUlr+J?puMud29@b_fyvwi9r0;&F?D(b74;sEGq zOeYjf65S=OVG@7``IhqS;X#uj;>|}P^+rE_{0SHU?O&NRllC`8VDLk>?HJw0cC^4# zdy9-%@+2_|g0Wbj3}XlW>tFO}9E5yeVlTz8_0OD!&(GnD3tZWM8Mat_!T8BPLdqNA_7oUzwc>-oi3>3)pE}8Ky*ygQ?5_|H)m_- zH#v(|mXpg_8v6@0%4G$9=gyldGGY^&Q*s)8pFP)?mC-$gf_Y5jADhte##_AKlC{4+ zA8Xa*OE!F#ZphgdS%04V%7u6?{R(`lSd3f$>ycoBS>so(sXAVY_7}_h=D9&Y=qX=L zLh~6Se;aQFGJg^({+r;6^h4)p?8AsrGV=o{t}i+7!=+$Eap3dFzdW7Ks<@+f>&)uLV*#pU@#K_-_kiSnY>YcKyvSFXBW=Tk^J>r2x!38(( z+00ZZPaW;;Gtm@E%f5GN9_ze!*$#J#;)C^^OLUby+vKwx&4A!$hBOcC_T|0dwVX+> z-sjwO&d!V!+Qe%>JVyaDSObGTwx?09=X+&s9_nJphvhnMs>f6mdO3D1omZnry%AKY zU+4vo;aODm`m}DnaGPM zQUo`vS_K(S)(Jrrl>F4qspKSb*1cmwXF#(BBK?_Pjv&N|ROt}VY4IpaR5agn(#;zl z4@(tv2k)da%OxHvd!h{8nq<&~8cI9O63TnTD02_v6YVhkCM>Pi(E!+2$@JdMa;rU& zfK{9CA!UH&(5bl6XJ0o`%Pc0LY5q7 zkwF*SQ!Li^LV~kJ&kE2C!)H3K3Hyjp*okKlIH*lfSUVpp9lh?Ux`v1;E*k2D1epS+ z3>4KuF05cIRki&5b+&JLbf}i)k^+pRRE`vcMEy9#GbGN&yhM@y=qChBLvh`{-N|BBKS)4~o z`x9miz3^X2B@s%BS!tB8MLRBJ&K&(?=ubhsixTRepgNVp`S5=tCFT;7{3JPJ-}CTqd~-;xLDcng=0kIAEditVYL z*r|KxtLZzR@dA8ojZl1I?4xAn4y#xW^v_@^3RBYWL2ea;RA%42SrBFLrOLu>(3%rT z`!@G&$waUjltpvAl0o74!B;|jjf+%tVjRKqI^vOo$wr_D%ypy)02GiZp9$*-qBn(x^LV|1uxF)E ze63&u#~#=xof9aRV%~F&lv~3wu+qqA#y)}bL_U?}O;!238#%G^?ij&3tt(zh-Vu!7CJ=+w;P0wVL0GC%89I^n`JKVS0{^T%EIy~JMDEfV6>#mL6d z#K@u=J9YjFd%hdz2vdQGyYT(1I1}%p+*H`KM%z;yvMCgfEOJl*E&fMDc{lhDD&&{P zBcLZDEQMouUwKYiy1b~#OuCQrF2_bH0BpiMW_)W#ngQg6$IJ>3>wzQ z?1*I5?Sq{DzEZBDXCk{A@sIpzg8kJnQ_Lb`8yY*5{i0NYhgipPRlDSMEV}a9>3%<9 z8glKxSPt%kb`6c45FxPQlDpc3SS}yqJP=+k%M?)lfPgSihrwV0=L84#q0)^P{qeB4 z_ias#(bOe2wUPI$NTOnjl(5zKNn0*{Z0U~WWTz3*B?^rQ;pSzwx$>QOt;9LMC5Psr zx9E;`zp${;k_8-v%>eSJ&4_sYstt3yj%qtP)_d#`C25Y$IPo%`#(ZG(n z&;_-VkX=@QSnXp~;xQ7bpXO;L@(a|Bs1b~bgGDe(f0RE)D0sxW16e#Totd(3XBn~5 z0yz?-+%P!wMgLsx{E3VM8f;jj*?|ToQ{E%GvBTCXmK>0FOr1Y%FZ~AfZz!J4$to=U zaJyzCWCm+O;S;TOrHcG%@!S`M02g`=c{*gLuLp}46N0l1o)#rOcZG;hUs1)MAVr3> zc)tfR_gzb|jnNqq5?OCyygXh3^V{5{3x#0swLwMFG#6#*;->E(WGC_?WWh$>a(HbT zn;#UVU_W=a#u+Vm?VY5*dEN2VWI!Xqoe?9fckVP)1&!ycJvgk|n zk){oGE_X;G=ow9;!1ts2A`f({Dwh_2fKq_`^cGiR$_mHaBRe)0yKjViK#8i5*T+i# z%w9TjGL;LKO2w1;ZNsDr1o_trORcQ{frx_cm%0pxeh49{iiF>&lJ&TW{{SY-;1>%$}mOMg#xv4*aUI_OC}uWOnC}Qvyo$2 zs?RFWV6Bx2e{?#k1gSPWGgucQR(hLAIZa4u!Uia?LZy&N8@22Ax8%QF%&r2CH3;NB zEgoeR1t#pi9|<1l;gytBpKo{3wSv0PcY{^b%rJx*1`t2lV)_O!^BBP*t1%5AiX{s& zsp4>K;TGF9)QYeJoKo6{usFv*h-RbnQK4?AIF)uYaB42xtrm0+QJi*pP1MXnX{8*N zi$lMh?uYCalVl4ob6t=PtX}Ayfz;Cf&6N&I7<8OwVCzG!l>`$TdD`wf^$rrW0vMXd zF^RC8VQw1wK*Q2axJA}cG;HPiY0ko}kVYzXQ1Rj{RkR2&A@C{{tRIBEc&fUrbgc2! z<9lacBz_A{rH>fH0NXSvjpU87&_CNW3@EOsCwSS>n8KQP9f*`}N&!S@pPTy_$i?~B zmC$*7Q%lAMnXww6cs^Tv8?(2fXiQ;t zy@M%ahJ%1U)h;lZIohqN7G6kwivU;T>PAGzN(JV%P+d{nn14a)tDHO^WlKK&t*^+l zkRwu^%-kG20aRN~C*}KBm~%fEs!t00HZ+!pKQWbm=Rq-}@aqu7D(7E}uUJ_2KDU=+ zds36Q+*;))T*`$A>>o@ZWc%(RL8CMiN(IY|Y z3whq5&hH*%lmJ;Uitut_C-SD={4V=CDh(8&O$KOzIFpTrNA;~JPg0!(Tek1e zVtr}rAR37ZdKk9ig>191U9|M#TlG;MX)JF(DX3eF*M?-3NQxAf2AK1+c2-0DdNPpd zR0=Hr4i_+uEnG%gh0;yHM?5FG+#4bZ#*7cKVVz$+qeL0aQ)WWpKf}WFlMp45c>Og= z_#nc(j!H3xBKe@PaOcUtg-puIqqakdiA4~kC=%Lh6Hk$H)^{LDwHGMu4h7~>T`0=? z$sf>4ea@5c=UF}}_Vy_u)puKnO>~ED#u^wKufhPg7+0%(4_PIr4}P(c3r%Y}WB6Et zEQjvpzV1#1l^Tj{?SYRJrBj^D?+1{j(8KUSAlxvNfj`hr$}?1$R)UMEYu~6;84V;J zlCk;EP^8ep@HwY>D&2byCXGR{S}9)Kd;r;htvY|XS5s2x*>NWr;T#s|Hnkofn-_gw8M zM*$O>e^G|)^@S&vh}w4<)SxnOuc8I4i9>D9rghD9Q=F=qVOC%(`&%B^>8t#L{V3Lt z!=85PSZ629qCf>Xb#T!2Q@jq6Uh z$W1A)i(z#)Q@`TWFwGP~bmn;0eeE^HXLAw7{NKu*P?qFj<7a3xK!@{SkqI5>9&wk8 z;+C=?W|@APE%p3(eChecO>7P5kqe~XzLkxl_)+5)Vh{TVvV#EK11%_x)Hfx5bBmx64Z ztTIB#vVW+^Y-a=pAVG3%YXlSG6otNal-4%lZELnMN$fek_VIA2sBL( zv_`fmU*$}I!r6>YMbG5*Z#kJ0ssmM0kt78R!DGqpj^xZ%Aw)z28B21!Si(2%y8L33@^rO{1O>AYV!{h{mQqUSwAd?I^%#s@fuviT zsQMXFbywREreP(&@>k@MRm+^VwJ#8)Wj7axmzo3`Nhr$e zxQJrWu7mKz%p`Bqd%J{*ImSKYQBzF(G4g*=F* zv5quVlj!a^c;Jkrq|+4f3F9#0r^mADb-b)1AnQ0dN+N8V)Q6oi#WLvH&KvgQX+^d3 zpGfxl=Fs;G)2_n~=OS_R?g`J$V3Ur$Ct?!Ks0yVFo)uVJ)BCP)3?sZBGHX`8yVVaB zo6D)QN2rueI=ft^Pf^yf>DOMp+UDRtfT9G!MPc1w+FLn1MG@rLK z<+fb8^?#u=#cm?{$-(mp)b)G%(!EVkG-}b6ebLr%k51h|5mg3K@x#?b|A6`6| zj+3b5TdO%@JvKN@go}ZTT>3BrlcGl~XL@#j;}MqR=c*w3jW)6L9(x-uzuHo|tC$z< z5Rws?lJfV#S5Aa6e3g3C(+g!spzzEc^0i1?475H-%HR7cx+FB8YT!6EXr7%xd39B5 zomMW`2|q4`k!O&W9Efmi=|H48DZ_0Sx>h$7i4&i0%V9^u%k5|bv$)pZ6%u$J#mvk{ zn89@Um$Njwa~&Ih>~`8OWcZY+A)Q9?2P-GQT8a5ZB~(a`V#;vg(~$d5oG&A!TA7pv z$Aa#c6ar$7H#g8S%-Z-07mJJbL5FJ|8TNL_ve)Y(%=tEirpGJ97Fr-JVOnmu*f4Br z?c&IJ0td>C^9lWk#dWgA5Erdt>_OgM7PcJH32=|jIqSkS7v7fbex(TCUQY+!v=^r_8cOEPG7rf}s`$$7Lwg47=yJBLbzsl~* z%RelLiUtaTxqmd9(`khGadajK;}iD*bM#-w*bfvapbgaDcsh$?;hBG8SYV$0=3`^< zWT0!^HSY@x=9M*Df!=ycJjJdK+>?(Wr3v}$gb)1GY8AjHI5@JXY%F{fovM#0+Q#0o z`a;%8)j>dnk!6+`(^AS`J@98Hc`_=dY0IQYPK%ncmJF`fZGzhCQtFZG=zGl-P!t9Y zqPEpjYPQKS!m@G^w_0cMb=MxB_IyPuvseiKoj{Mikvl^Ba0SRJcMd+pn#}{ zc=h;In(c1M?cT3z<*-f=NrMe=lEVP9D>?mGwQ4vsd_E8DJYUXyzrbeVdASQFz?Z`b z@AXzd9Yfu>pQ=ZWqKfX4!^`CtKNN^5*^$He;payr@oo}s{%+%y_2h{$m~m{judkk8}DNP3&T25xph0;<+$WX|jm4dhXV>|yu7>U2ttv z=IilX$yCDEnt2b^qpJGaO9er{&oRyA&yVWk>(dJV>bah7@~aq`&JJV`ZM|9QQgAT| z9fBVF>|A&}S%0PRA@O*PSc7N3s4lSgP5y4H|8zZd{I(%SNlrJ6ur#&cME;r&#A@gz z?@T*aFM?atmt#>wE?Q>Qqp)bInVT`rTgL1@>wi#&hpvZT&S=inAf*W&Q0ZrMtOR3P z8~!}R5z%693dQBx*3Km{%RAU%`We=Lm9ru@evd_ zg8G7%!f0~X2*4xPY)^Jv&q1q5Cv+d$s(lf&3m;Jtpwq%>qy4**tm|C#o5)$*jG%LD zH)e))=lif2X^K(Ml2x;9Rkd+b9*5g+zME3xY&HhU8vWKGE^W4G_{hHqfO#Ay{L6Il zIHJ49^WdDhoh953n{!FHR9`<@#n8~7YEtzYH|j!bBy`CkLj+f>D2(%_@cfNpZToE* z+cPe1Ym=4cIJJR@Mx$E|+SN$EdJ(C#1K8j!)pcPjsze4yAGnG%9=p^dQSEq1^{R8Z zAfT|?fDbxtdKv!OF-7MdsD;g`LL@#c__W*cD?`q^%sKN12Rg4x2XoO^KYdroHM({M z#>n{DgpHdcvJQFUy%{Q_^8C3b6_(kRYC zO1J{a44#y!%1I0V``~CSU9SE?+hUECa#n`3IGKvZQ2`=zi;%N^z#pzY&`4d~%h}|( zkchQcrPGeylGG$qXHk0b2ky84mN9{%`a`&7kcJ#kY*$n<)5C|a;ml3?vhl=+j{Y~a zB`;A@q-xpX(--oJ2VTp6ul}0K@hkjyxWV6dgA&!xC#dr%*Ups4Iytf@WW$-`)-?>l zV{%2`*&X1p%S!c40hfO1dVb6E)2_+V_Q*0ceA6c%s0GKPwl^(u+6m5bstaKWLy6m( z0>ODzrWW$5{fii%k^a{b60VR23lYK?w>zGMLuLU7@m}aJnW7$`Gy-95^V8Zt^O+kQ zI!;G0`lt#mH00kKQ$)g_*6rAfk}eF6X`)Yh4f@242^1Vd09Q1hzft{VYBjRrZU!Wi zoVu1O&ZexDS(fQLXPa^p3s5e@$@SS3oIaTPpY*@}Xw0w7MC7jt*od@f^1)SF*^LTy z>LfR{oN`*JMh<5o)Xm_a_PWA z=C=e~dqv6hQy{*bmyNDP0i8eMQN|}U{uHt4S*C@0wgYTknh@OP_jB6|NxT*&la!Ga z^-~B8wR!)}>eC%hH0}G2P|V1`qGCif#R5M3x>{b^T+b_Pl#*~YN)sJ|pj+9Z4#Phd zi3r!ZEEj!H^reNbg^xtZ;{OWP4h`ukW7u5Szd-l+lL7Vt^l-;t5|filIL$m+88@Ex(bR|=Ow%eYp~PqaZ0*vTyu2&xhFStHDoz^-o` zINrO$EETC8XrJm^BS3P6fF^HYx6q*oqTfsgV1Y{%+Annx3f`g==>3L{rE=~WB{)|> zOSU>ozmBbGTkFwCJTP53YEd-$iKTPYDa}~l%RP_0a?QxDLSvGpBV!mderEZYJZ3RM zi}%maJW)X(OJtmIf$ZC4<9ndPtHL1z=|eyF6_ROE2NoFFQ3@(ql##!_7SP$kT#*Sq zzyO4tOH(X(YY*i%(=<_p7Hz>;H{q{PYQZXOHcs%_l zy-G87CSr|*f(Xk)jn^jHJHiwpD%3Lgf?IVa ztJvCG6MN)(s>Y3HOy;L=!%0sM=NQi$cLaID1NI6MB7paQ2A z=wu%P>Fcv0^G4@H^zVEhNprAMsl&c?D<_Iyt67a^iS!+KnVWxiYDJ#VdR*J?oCAs- zso`yZEqK$--j25|;h}n%DTq3eV4>4OTI67I$0AP_97K<5oio}Wl9>1=S0FXHg-Gfm z{_N!ZD~z5$A@Fj;6lM6_SQz5>0m321(a$#I0hWzfFn9w%Tab<)IZ31z_gYZ3FGu_* z_dt5l`EHbL=Q$0Cfc2=F`mt*zJj$V%W4J}591_}4< z``1j*FPD;kloMvAC{U~7bc(SHPOfqZErwvI#~5FE#bcVDW>cV8&~{j-kOn+zaoSf6 zO$ecqd*%nI5;Nf128NZ5J%;!`CGpVH42dqjRe-ic4`aFA&ln4{V!!A3djNKfnhj?< z+6G{bav{Q4s9v>NcJ@?{K?grL5Cs&nidq*tWi5jE)+~+xII=Rl_|$iwCJ>y<7vT;2 zm_u<=!;vQlNpo@d&@^HHJm?>ZhaE|Jp-0~chVp8BS^9W66Emo7ps={MagQ}FU=FXT z^35LkQ`V$vR9i)6A%!wtEC9sBP!2jf;-yFo1BT{MP>t0M!k>Y)cLpEz;iEe@Phc2X z(26F!^?F#}_<1s~NGfA$4`DM9VLiS7_lAhPmta3(&jeurcL@c#%SaU{=Df9z;94b9 zx$&ekZbH2`s9GI*v?fO9OG!``#^}30*|isjG@GWC*nCitC6lknFThWLG{bw^ftXqE zT<-`;5%Kw!CY3N@=ysS&+H5C#{97i)K-cFPFQua6hg@vgQ-lerjzgAX^j2Mxx0D zQ3uy31Z%NuMLa~ilmk6(JjC66em2Wf-*gI(pDhQllp#J;X;ChR#@!2S&@vzQDjn^Tx`U2DLH0s1~vqQvg!Wc&HmS>qBUa41Nq|ku2vVrHl?LZHW7^0hvB3}7t zfs-oR3gtVKYi8adFzgbT2wWTfsCnUVumRbpOZ)k_`X>*OQzmHViUoCd?Dx9A+XJus z_Ld3b2lRglFkF(QkgybR8T88u`%O(pI|eb)ayRI+`mctdv=Z;VIW%|R-SN|%ig~<;*VU~HW*_%&)-4;^nztx`Xac>v zvg*_|wB~~6wt&s+fNLnY>o;@oms3~XLdhRmTd%}%dhIo9VD@HWSBsq0YLu5C_4K<5 zo4CVQzvYpsfQpMG4h27s9-rj5Lwv1zpe{$7f4-LkySEa-$%(Z{-L{V?jWoB#> z0Oacr1C-l)f?d~%IVRDxa8CG$exAPU`wxGS z13 zVfASodrxzWoKsl;RtV<$8vV5Uc=S%Rbe+s93nfFmUVh|;ASuxapp(Ro?WpDsKql|i zL;K^@MA$dvv-3#2r>ML1W0U+)!xcMKqcIRdO-9^^L3q#rRZ1QSM@K0fE1qPX z&WqP|u<3kru>LLnKsc!v4ez_^S8S&ch0a0I1W}=A!Xpq4L&I8z z*u1PNT(+EAkR$AJPeP+YFH0s`xQ6#v~Z@+DmH;v^LPgXWS%|EKc5TVO)8h9YEU!j{HY!vF43P!JH_ z|0q`fw>h130*9s$6uWGKyCyy1e^!YcBm{)jKV9(u2Kw(+LoT69lOJ*|;q_mimhe@J 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 530/660] [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 533/660] 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 534/660] 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 535/660] [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 536/660] 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 537/660] [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 zcmZ9zV{|3a7A_iR$Jw#%bnK3ej-7OD+uE^hJL%Z$*tYF-Y<2khoOj1NBY2%EEHu$nMMq_l7Ayfs*FK9G!#A(#%l}=z9xfCrMYUMES!zqQ zTK7$}eHV(}KfxBQu;R;irMUR~PT5toZ}@rmPwtzi-<(=WG;o;5qr1r8E zxK~&Aqu7KZq)KP?@l0xq8IIrSejiTVNmln1N5kO$+SFytr4jrJ=Fqk20!c`s1}m_A>E!+kZ^c7Ztxla4<@#S}n^yqW@6bJ{dVz+wus`y@v#3SLN;7C2 zBj$HOo}z!jJpnwi1FzU&h(+P~hFbeU$2X%gA$ca4MD_h#%zZb1Ek0;&Snf(koVt~e zd+}=Ql2;pSQ1}C~vuibfX7bWp_K}PZIP9x_BrD_G{GMOjKpYS;a8SHm}2T)R`4L+WFu>Tkf zmatrByZg*voI%N7zLwwm^WK6bH-N+rVrn)FeNwG&E==XA*Yg}0icY~bS+nyMAPf8$ z{S0zH*3R;C*QWF*fpfsyliuAQ0I-!rN8vW(HlQ=pd=fi@Sw+lx z;8drY_9eHgeB0<1`W(|>D=jESMh4e+ur|0vYAx*nPcoFlXk>tAgMinYW!aFV00TpS zO|n8H0d2&tGoyxH(?1e^+et!~287q`*Ok#f8ZBM!t#hN-g&!<(A~c+dURfXj6qfJSj1npPqy_U}P!lzNt3&IC3rpYco2;rP~ z<5YZu4$Iibhim2+Vpp9k^lLJ0QSHAXOhy}nRhZDWY$=<4 zW{k$A=8fqAK+iSH%egfl@1@=u^!&G48EU77nQ9 z@#~o$8h4tbooSE zd5=0uzo5auzP`Zzb4u2|tU2J0^-U4x?{%Y~Zs!WRf^kdCdZu~6V(u}6Rf$>KYSouc zwN3n^i1nqWOSnK<9Y?NA2KoT~eI^$C^zr?=f4lDaJn#AX!}Rrf`SbNDE${37GcNB) zAJheUoA@d{e-`|F)&F{ay}gek{(8A@wNLxf?Ed&XC&qlugZ}w>*ZBUm)AQ@??wslC z^J7K-^Q0P-RE@p$q^fY%l4kSvJ{zOoz;fQwYQyU{$s}H{+d(i}V-Nyz(Y^+P zvYJ9E68pgH@l8rsFwW-^nZKOXIBkM*saSoAfz2c}YtOKM`5F8cTW_vS4%5t-u6usu#sy!4HVn@?X(&*#%aCs{luH|qqgrPW z8+&WnvrA`KMKa)X$D|1|OFPXdHJZT?L!{GW-bYw>Y?r~ImtuZ4zNuh(0V>x0M>Odq zC?T1Zs1NN-Qv((GFVCy{O7T z0XZ#C9CL@9|a8_9IBE@_XTkDw*L;Wo z@~_cfUrV#R?jP!eUq*<}r6lIwIpophfw0KXOVRL^VN9uXsbS^)XXW%|XK+jU-2G{+ z$^{f=Bg;LX5<+ElpE9LU-I0Kbo3YlVDOm9Zc*z%)Tt_S*DqU5X0&7i;22dDNT>)fh zzAO?KB0^8Fr{X!RAokC&P^IOsnwVn9ql(#K&v{f_gm4v{_8y>Tob5f*U(rxH=Az=A z4y~*^Qeh8PeVS&EZt+#(L_OD$9Ef^Wxtgk*9|=`a>jijpHL-FfZ=#=>WrPrMP0^s$ ziW3J4KdLDdbZeLWsf$Cc;}h)#fB=~4dZkcN%zyON8Z>_!%FT-qrm4g_)W8Us5)Ph2 zRf#IsQ1+2c(rWmANEtFLl4kq}HsiRl1cPkH@!6w0c{v^X%`U?hV`$-I)>DU-nZy5y zR-lf_m#;3D+5%f4qod}Aw0)#ltpT2B=;MDDe%q<~BiL2#MhZk>S|<3K2eRQiU-DCN z9a8#;0K@m*geK@w?-Uz37Xjy$c8<4a9P~9EaT}o#&Ggu|9#Q;=03np#-~Ma@Co8r| zXbQveZ)@!ZgMx%vWnKh3`FgE;JA37oQ*?KfIz`*Fz~sXNqo{&?MMpg8F)aH$Ark$F zK$t?%l;qwZvjqPA9OQv{1(6?Hx$8c1*nY`BQg5>nfC13#=O9V?_py%d0ttUv4Yw=s zfBSB-QR9cZ<~C7~g?;TTL9@;(ItKu7s4%jIt7!lst&B2rPFB(OjQ#~Ii$oO0PN~l0 zw5b%=H#|!~5hPf4jG3*15#VPj2=X`%R=_S$C!E03<2_09vp9(Y@lhF3R-(rlG&K6Q zNwld$qjcw6g?^T43)-%#x2_vA{a#wb(IIat4^R-?h4QQjM9$)yY`87S90D)-EI1t4 zM*hSr5dHU)tw7OM1iE!i8r_uOVW*$EIy;e3tNB65*~S_$0|wjI5AU|5Pjr?c7v5#KWaPka<&4h!1r{Iq-OsWWTj0 z(a&W{Gw+A?G+O~17P~4-v+haQ9qyHh5*6kDqHvn;oiF}UBEL8Y9fWYVgKE;m`>M!K zu%bJIHvTt+>G)Ovc=;~4+5A*paQdo}%1bkujvM)w798Y?npn-#{3x@lW~V^g$A7T)m@xU2l{tzMD{zfm#krT1 z`9rj=3Z_%vi3(UT`DT^5f>M9uPAevxm6rIyH?fQ4h>|}8D$92hQeSmqFY8`UO_=ik zeFI52Y(py!>uqw`(m=_xGP8G!3LdRL5m>QjC%?LWvIC!-h#RrDY>Ijnw!TT-cs&-g zF9?9jwj;DFjt^s+07>m}8PRqU3`Yx3$Ng!3IL%76Scaxs(B$uj0s{&Fi-4dcO!i&s z3eS3?;#RBAhi;YN#LbapF%JFe5uN7#b#-k^{bc*eUd0EL@!VLTofENh(z;D-Okrtw zJ$0-bi>f6BwFVnzR|go+L3npHuYGXOra7pS5h_?hagV4ia87)5C(r&#-WIkTZlq(~ zEe- zV^C@Lretu9>WviJT6CsmPn7QV1`5xT?1Tf~H8F5{zSq2~KG1DQiEV4Biny*vI0$r+ zT)4fv4f`5Cn+7AWB>RN6DBEI&U;lb$&pr3gY+sNVI6mL|D^uDjAaiWlr?D^i6Q(-D zwLvxB0FY}2e7$24)u*$V#W$s&i*A#>IC^jO67A*z|B3_nTJA2`OHAi#(y2gSuK&r3 zk$8GOVKR4gBl$n1_VSS zZrpJ4fGsM0kT5GI8IbeK=Y!14KRS(9kt?~z^&#qM0)g&qm|S1c4uvoRmvbIuR8iU3 z);DHpO|bUiHl4g%!UuA2&^+B=GXTem-MK&1O7!04FKc?5avn6Xalj!Ks}SBa#-Gjo|`v?zSgG9$(A1^;n{() zm@lHIsX@+%hSekC)nD8_vwzc_09u=k^G`l^>9E%q93@a_lk1v{Z`^NRiL#%Nc@=R` zcJ+G?e;7{{^Y~zL(?8R*ADDkh!%9D5Gv)Q02M==Gl)p;tr=oN`f=CimE4v7qf=<@M z1Za&SFpIyDo`h(B5CH{Ndd*WwNSdG^bxFAv+!~{`3V+}{MER+-u20;p7botYhHLsN+5tJD($}b-_ZIU+K*IwgP#^Km=c!+TuK%;OQ zB$f1huZYu`&b>M{dco}Lx_u#idAubwQmO9o3x*R=)kNtLNaRt?Gq?cezh*8+#RB6H zQBx$MH;%~PuLB5>;&52wrb-KVk^T?Nc1% zbxL3aX0{cAW{?62P`zPODE*GTzMTj;2Ia4y@{Ur8&frb|jdqDZ9l`XqLlq&EMlqz3 z_4{4WCLAxdzghobWsAx+W*sbBiZCy(qfHx$6Fl0$v!x&Q%?`CVrYej%**YH3C5!z4 z!y1H&!2%G~GQYo-utPoeXmXd~!u=iQ5%I|g?9adhz50xzqEPXNYO?(c zx~dFlQ+fOtUHOE8U2q5Qbp^GLf7IkhY=zn=aIp}NJcLz#91HBAn90-Eu*!V{^}aNY zvkOD)5_8+e>J(%luI;6vj7m)3Ek$uYAP|EE!Z3dDzwt#+CIN^?CiYScJO8X{_-q|g z%~IUPQR6QRr`nJ}1P*%?;|5I1LA*AF?1HkPyNc^dmG6v|Zve&;UGT{Ri83C%e)YDc zfkM$DI%3E+WTNp7?~hdN@2{s?wS|(6MAD6UyCR#f)8Dz^FQwn{E0+^C|9T{upx63U zXsS+@q5Q@0zI$yH5PB(;lhAwxE8N9d123G0NcC-bx<(@p7N03kPik{31FH!QyXa?!JALT5m;10W46tbh~Z zM5uBA1$0?F%Mz9>_MY|dMkYd21wFtz>CAJ9hs&NRL$;+DG$V)8&a#B_o-oQhLixlx zjC=@7t93ToSIhK0%yX-~kN{O%9>HZmtKmEKMXO)zn+hx#r%K2NA9Tzj8khkU<#j%)*J}&IFL=ym#UDZCRk+A1^1SU^}mr|?a;H*jKF3)ZV3B`P}qrQ;W?;HQCK^l zDxJI^sJe!VDJ~o8ga(;{Oc^L@gj`sG7^-T8g_~?Y3h0n6E21Gq3y^-(G>d67-CCoA zD6wJg3_`6~MuJ9Wox()RHbpZlo`sa2F2!#n3*(3bY>7B2B;KLt$V5;j}ZM}V^TuNqwuQ-)5RyjX)R>U zXux~&03C1Pipg<#RQ&kfx~aYTPrlmz%Q-I}TO%Z&IQtlxh2v_LBmE0#isH1)M}S-9 z5S7^vZx(nNT&eO%8Sb?E}olwURT4iUr`E zWF3#1VWY-2jU+-tiOVDfNJDr+MO1tyb~J;g+U7mPqf1V}d)bNjg;FW(J(T|XvXn@1tR$61vAzD z?nX|myn9B_PMeAtOeZ6)Zi}Ej9}1NH-+e-Q7vEKLiUtkL)1ib-y&K9_!Hiel@FYUVAt5aV6ze7!scr+ zgftnYR5+y+4er^FZ6SpgNrU&XmZ7v<*S<_+53($H<8 zNJNpNN=WfPBFg*04-lchJ)ZSM#O3FuQ_vUe;5H|k4k{$+a+skLOuQc3RLXXxMdN<+ zRE8T7P|Q50P=TQ=L7`xL&5ue}-#^LeA1dW5dM2~05r-7c;vIt4BTUgtjBRM_kPb`I z@t)!xCsplIH!m)#z{FWS=$KIlQ+5^JEMk^LD6gGp1_~BXL;;3x#&mP#i+FB`|Y}q#= z%AZ5(x(wDZulS_IyRm!fLRZvILUuU;Vs+2e$)^aUewyc1h;I;gqDD|A4i>>k12O(+ z;lNSrPDJs7OlHdZy;b-s3&d!Ea^ukOH~mYw%NH^ZNFd0tRdO@QGZMM4in&np$TPvad_7panBbgk zaI`3KxhqA4`b#SR1Sv9PB>Fvxx$j$wZH>)|kjQ!q;}q};nBV88Tqy*5Zwx7tX1FLz zmp1?WA_JYtkCFu&dCTFnYixf}lmY$R-J0gKV72#B{ucBk){udk@E(j9p}q5GAu4G+ z-|c}BHQqD@QNOP>O1kGie-*%`yF9;zosgCUjE zECVa(lIXlvA%g@S%o`d9X{(X*L+pj0}J%!Cb-YLI`Ou++vHC=h-q%89`Xh?tTr zjmeJ(RdtMLp%B^EJ5)pHTooY3`8_`T;*bYkl*2?>97S!!g7peklN850<9SKXlnP9_ z9~Al$74FfxZ3({=Z+TMi%C;DX;i(n=%DMjD{Hf0Wl>SN)dtnA{N%^x>3#=SnR9z@g z8;eaK&yoqtIa{8B(rolpmWoIP5~#H{<&R27l_b@UV+QR)$VzV$EvE@CP0$DdRHza% zX{UDm`H}j!o7q*su@;Wpr`4mpvdDzp7xb0nff`vwNkw$OkE#{ajk+JKqGpCB%rFR# zZ;S35z|3O=ji|;n2rrf@$fSzJv4dS|*H|aQ&MBpR42^XfLO35=hzxN@#i_KPg;jgy zZndOyjO4V>YocZrPAlcGS{nZC{4jLClq6SpmFtRZaQ#Z}0-%=p?_KGzL_j8Jf&$x~ z@~tG8*vK>XKdJW+AQga+JdP;@6$}frkVhJpZo;jyj-nB3w=WA8ZpAcG=|hTF7wMuU zCU{GV6vMnx=BlSjl zkz6|9fZ`-zaLWASR~C&a)V_Bxh0I7$ziKy-%pB!jRSPGyp;dq@dVMRZbFC8nR;a!t zVcfqc{asF;kFvFp{@z#QRmc&cUS?qd77wC5uZ!~YJJh8g6cxV0p$&~C=r{~rd7=P< z8Hry9FJ8IuYI4oOvhTH{0@IV4#O2gM5citu*m`}5ofc} z@Th*26iBL*VCwe5S8+~)h9ovuc8+2Zs31q6E8obri#tTiu71><6p+UA7Lo#b#CUB; z)(NFZv1vdHe%8)v@ZZk{vz^LTCn5z*^ z(k}XsB&iMprQIQbJgQ421!4RFZPb@MNq=7DQ{wMmlG1&5h1f**=;o})C#%tbt;RKK zKSS5a>4V>Fsr^T$C%DbxsD0027zY48uE zlkyxDx|QH^`o<3sl`5lw#8WCJ{{@m1N(3(F?4GG1rqOKAzY?hBx*~yx?>fZTxy<2* zD9Vy~@ocs%qe|bg5yorL%D;}O#SzwG-k8&s&mYC3)KH>R1^N#EG{@R5rxS(odIPHJ z$B{E8gb^29sX-QY1;i8^S`8^`J6G04Bl}Z6uH@`GY{vmmsdLb$L_6LUDDeQ*Edh}- z@f?RuG#Xh2%(coI}RBX8#!a$rfD62v{+68ex8N^09BCFYj;$EE z0SPW6s8(=hg36@{dF!?dCVE@S>uN;Z&D5_nJwh{$0F^nB^-z05@zq>Jv2a4U3&N5- zV)6n-2Gr?1RANF0c!b~QqPV9lid&_hWlO(2om>IEzL|WxK7UzgV`9FYCOk=0BsGEV zM~T2h9eRbB@3eUy8iG%?#-fjhW#Jr9w6md7T`4I}OV{E6(1}XS%cbH0iR*ryHN5Bw zF%Hx{aY^!w_&S#j|4UBSu6jJCK@tjIK#!y>e&B1t%bKG6V65(0{r>hME4g^CzlgF)r8;fMPRxBZg4?6f;3den@LtZs*YP zN?pg)i?aG;?kY*u8>mIL;_^KsAR4U}au6v1Q5hpt_gdPH>~PTKo^!8yf4mddELPM^ z88s9KQanYds-4&|e1DllHPHpZDdlw^nh_)dZOBUh7#Kw-4D?1-hkvk2bFqmYH|h(rYk?%M(QL0xbOnP(J<=X%AT+zbA|Zgi>aBDS3u|@ zrUtC^_ksKY`3~F{L)ysZl$ASy)3|~CYJmZr)e>cBvR6x5@**2hYJnAA;2xY>Z~Z@~ zuh*PGReFei_JMTNA~~l_s!x;(DZYj@rBwtSob8J%REH-1NoS0Zx}xR;T8~)stqGW{ zx(G5pnxeN+4HvKMiUNUnH2Cm>d7wr6vEN(U8XjwI-1Rb6wei9-FS(LOB9B^ks=io} z4Hc=vbk`zjMZ>8>DQMnwuXIW#KZpbcG^H>TBkr zgySM21MBi!xy9k|(_4s#t|y8}DST?8AqC^O0zc|1zSScSZ0fGJ!_7iVe&??&Aghr% zZ|_*b%gAjhjVv<>G?Gx1*8#bRV$f~^aKy|cgj9Jr|4eQb;L){Xv+!v30xAfunk$=X zMgqz8TMxchuTS7wDfFQtWYHxiY9(M)8sJ`zM@UM%E&Uxo<0)*jVWN)Z9})%ERlW}% zWQDT=y5qeGv=>S^|F+VK;s@^8bD#|(zjgbi3 zru1W`&9Dr)cJM}oysW8q{YP?pckKI(Y2RUwbD21H|BUBus9DF}6F!AzOodVg#|kK} z>HSbVjutrpo-;2G>S^;s#^iG9>J=)Zlg_P>>Hp`t`S(GC+V;>t*9kRxpaVliB?sNO zTSeMLKDEf;g7p2f@WQUN`wHc@|Kpu0ejDCTc44mkj66e)IN)v@$+c?5gRw`3XFVal z%+188=l%UHju_P4{q^_b`3v^{gKfyhG*Yn806^oSzV&60U|@uZU|>l9039ASOwKNz zHm1&u9=0}<>Obu_I5GT)XTL~pbmu5jt??71UJ46@xDcgaE>aR{vH;@n6e;8QPdn~X z<1O=4KaY#WAIa|G-(PZg7f^f$I$_B$G5JL2)WZ4te<&$+Pt0Dsw+o8q&Zldn!^yL{ zkbvNQHM`$v)n0o?FLO~Z!J#y8*R8i01BFt&=M7vbwfhZAup0XCN}aIF)X{Wkoy!b` z2|^e0`;y7S>MX|7{Mj|P-K+H@ONTPCl9hbxG)Jw+heimo(XbKAp5~y^^oZq5FCOna zB2xTZ6-0l~CYL>8?!pw-SW0)7@}eArGlFKM{C#khlc5aXrJnWl!r9>{JoATrEi#q^ zt&dU)559}82rZ@?IL-{2=Vnpf+|*fTR0wv#P70wF7-Xad!kt<=5Nb}#aNC7%)DK5v zC1%=k*wOHEJK8`kZwz#Y242Q6GxHH-FjjM3AylfwIyy1~$Z-*#* zyD7q4XhUFnx<+iF1<(?v<%Wrmz@*kLjb6lapxnBg(vMo+Bx?$F(JI9p;_YK$>lVz# zfdTu8Hf$%?{!-)@ytP7fo!L1@TnR!H-eXa6CV;3lJh|B%+>M(fcmh1}D}H{}>FMX) zBe*#KBM0m$ zU?u;C6WjF|Z3x2_z@l$gN{sMV*?o02#DcJ7uqc>2q{W<0Bh-(hD@hoaxF57Y|9zbO zNPz;dTKt27>#ISkDL{bGWTjlq+Fu5I7EKO&e{)@%)O=Og(XvnKFBK8lnkl*kDe z6sFZCfQff>Vo}vp{46@t5LL2^xo7o_tc$7>j}R@#EIF>VjK5~^&s^$sOkDGhNr{{m zHDetaOrP5nwb!-OGuO$_+8a}K-{lAIkXTz zKSGI5lSuPV8?T%fPqd+|Q&G4)LPaOJbItr^#`qU?@#FC_f(`TMq`+f+^1r@iEdYhPviDUbnb z8j@J_d<(J*4$Mg5bhX=4Xv}Sj0eY_41=lrazn?Drno0UzyXc{MQr%E@tsv+}6xUMm z`m8>=Ijisw_4RUBSk1_EaU^?e>&;T1hK)|(5cJ${=fdO3`a6RUfyZmq8aV$=b&0)y zdZN7n|90l|V@r;boNfeeWoF5V{Jjtquc4Q^H|t!p3~W_jjYkf>YMob)!Jw&OZb7?j z9k(OW|Ducx-;BJT(_E-U$PhfD($DH#3r4p#3_HdW(PC~6$M{)}MWMqg0wzgNYRonv zvx`I6HHL6QX{RZxp`I=^)u3JJpct8wLm%5ym8^N=eK=ZfX2M#S;0eS5fnIq_=b|kXmZ>Hf<>&|o$kC{fK-uA>N&Pm z`zB@=IjSN+r-ju{`*$r>*STbZ&{^CJuWNiiZjN>D=ZF|-no-b-Rf}zPjd61UhuZ|- zU72w%8v|vne%mmYHd`!g^j|oTc>+4@+idA1yt~Ki(1N+0CCnb1^RGy${sENA;o(0u zr0TV9)Wy~asFK5maIP3JXqU~Ag(PDKFEyORoGj{G@VCK9duqbJn?Z6 z{(k50EIIFT=j;#;R9=-%=92Gz`mW#`bR7ze(TVd(TX!d9XJ)PXuEs7oh>R(it|p4V ztu&!Dm8dizfW*XO>X`4I(V?0Im zr%1~n4LMM$T}kC!FCVUkGdJnm)(amh>fi9zf@DdN>QxK;Z{(Fvyq5nS{XL!IcjQE* z!QW4VU#diB$csp~&XkBcd9r6@BiWPIwG6@IawR|69bhoa%k)h_E(6jH{FayJ-P2_q z(d8((rY}AaOO7Y)A6n$JQ=Ao4SHcp868E)5f{Ut5t>o2*S8+b01Mj~`xI!B(Lku`M^X1mQB0+K@}Z z>4UD1um3%ysjw;=p1(F=E83#j2U}@vKPKFbdkSiL@>SAYdM2Rc*4fg%&Z{eRe{G_@ zu6?T|saKc{B-2Vg-wCuXOA2oH3)}TV5U+#ECS_zr#t(&}HXqnqe|g}ErTyF!iW~ih zC5Bg1EaJnhuj8f7_q@SG`W2~0X`+J{bT3=dY52z?8SXZp<*FZozO4AY_?a+O{2xy3 z*pQwwj?IPr8)UCPnSB5~%;~q})YM;HxvX0HXn$YxL9Re@r7HjK_Lo1r$9>z#z6?$* z$O7N7DyK1*<;BUi>j%fGMjK15Q?)?2qPR(yG4!#z=Hn%;mheaZ-;FndH&7jV>mA)Z zAt>us`?Hw~c=d@xbo%r>xagagHckTFEfY5$UnCU3D}!DUnadp@BU{V2-rfhGxdZCM zHZlXzKwP&_bBV$M-NN3ekwYEO-ZNUt%s?7j!sq!2M{F3<)Ng1|em*auLNbpovbwCj zd?&2#Rl?X0-B zh^6z?Da}|vD?CrU^3BL@!sAk#RukSUZ@~XC9=-A0QT*&iM^1K z)sf(V^x;JP#blb)fkj4kl!8hY<>c@0MRc}MH)KLjP}?vgf|LW`wB)0`Rdd8Tc|yN^ zLCeI_Tdq(+wyKhY^o3cbTNLGseg|Dn>FCc9Jf8m3US(N(Q}ISZK?D`y#+y?~@vAsO zE8BbA{_(SqY~AwM1ABQl-_k12xDrZ$vyuw^W6zLX*QwQXFs>Y`mak6YWlOU2Ig$o9V$yqRVnr@NN05WUP4Ai^#L zXvmDvRynBr@#wQ92ho!{=d6yW6ehmuHE>OCA(Hy2KYMxq@X(8AcwTPkq6|b$#i4#* z04!oG{aiyH(5f*D8gBq#2i);1FNM_NQ46B(?S%jA5tLbSIotTv&*?jowEEUoeU}c; z!KZ@mjxUU^o?0k7ug>z@v1V=$q?c!YM~fD!LBc)%`90h7+qL8$<)pb83gqepol?xA zvzvSZi(x40amIIE@wn!f`7{U?ls(oNgh7uwtd4a<69S0T-o-(x!4YL+k6}Li z6drn-VbSG}O2CfjaXh#C1!Hke{Legp4?9N9#tR*710Y9*5J5adpIRL|h&|n7$iWW= zKmmcMqSnn$SqCS+Gf(3`iKq-KKJ(M3835z*O?b;b?pU1EaP$RC(p(%iJVV&O05T-` zxHCmB{NxATa6zpvOFu7Xau&4>1P0eG_Nm4d)bTA6d=a59^z`b2D}1K|XdnCLu|YsI|Vz^zur*6C;ENw3iRQ9_$8sXv7iT zZI$rKzY3gH+g2(+nB4LX1EE)dguuGUXU!{zqb=}$U0R~knlK(hr)S@f$(_A;a(Ir|Onf3y~a3lOTyIzRJ%n3S|cb|95_ zuTUdR=0$;|M5%E>B2B!Db#D z%;KVgF!#@CPaJ%*<$e&6`tQb|j9=ad3n=cOPe=R*74t+7ubX=p^nUIM)*Tz!+K(6z z;S_35RrR@RceG!}25!Y~V_XKnBw{utCV#yG#op<5{y^h)qAbSh3t3}>=4boeX zdgjBF&0juEE>jK#cg8iIyB|J(w!@!o52{+v9ngnZJM>y(Jd?=B+046}lQ@`^54oCG zwdjwRY6@4B7N%Mj4&n+inu@a_q)DMco|HIcP?GsoxFx13X;7Gg3nsI^->wWTM&_XM zs4AD^a<;$j=`JR{a-G;!(#6&5gxx&aC5k%-!G}7^uZ4K!Mdx!8KDlL&GM6@@D2g; z3X0%5*oh3xCe4cGy^&17DC(|+Y?B{rxMHSjGzEgG$%q><2oD(`OUWas=_o~F1l0Ou zZ~jD%!*^bfrKjE#n`9iG$qT(Dz3A|;u~n#i?d`erQk@s4`)J$w?r8Hz;*oGl9}3P-)$igI zkxF3NstvOn7+uGe4gnD7ZK<7A?8PSlEQZF7EU`sdRhV2kwIE06)!w8g(?a>V>Gn)R zn;~S3)&zG8COf*KwtG;?+J0t~eK)l1fk!ANH)H!j8+7QSkQj9_24ur_Rs*C|Kmio= zx|S?i;8!Pdbb|(y%lK$HynEG$?5{TC7K|?LHk1~eXt@Qksp6=;d-V5iKd(~>B!sOi z8L)9Q+Vm}uUx0&F;7Eud0_3JzDRyYTebeD`^~W6-^ypjBO0C30@yYQCDG6j=^rLfj zO6%BwakmI=%ora9Me#zmJWfty$B<;!(Y{|+lYQC3z!%ynd$gq#Hcv_PBn~0^jK9G1 z(et(!YoI2HXyQRk zGbib3QWE_C`)L2u|H++{r%6okzwJ2~7{>pk|E?JMk`(!|l5RBVAOaal>bka%vT0#))vPn?d^aTG+4RA0ptADz{|I59GT+$D1 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 538/660] [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 539/660] [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 zcmYg%RahR)?>5eZ7MJ4g4#kVRyK9l+#hnF;ySsaFcXui7UfkXNWo}H@P;O`!m4*&7qZf=j7(}xAxn?Qz=OA|dA7l=nuSe^Wng)6NQRNg6;FIi z$)d{biLHe~%)F)gL3sj4b{@ao^uXy!@=c~{Iu#8k7TDYw2BtP=%}%{m58Xo6NYLUx zKub!E1xcpCWkuXRsR{a^m6iZ|r~6Mz$uu~LI#EwdS>o`cu$kU~l{c7DyUEwXrof*o zs1>8%Av9PTj=u87t3jeDz{5ZkIVTV0zLDxhRy()44%Bq9gw16^B@qDv>sk zZgeP|1Y6;b`97^sEi&AOaa+v&h!b}~4Rm4_1xcvWK9ZOH3&CvnLw%k638igyn1~bi zAjR&nyPvoGB%Sd3KGlk4l}1#~nn)X~R;ymzGR2pjhmzzlw27;__?K77e-TOKl+@hC z`T)-qynO#yJd|PV{ugCT;tl4Bv^Q)8KMa&7iYOz8rzd9gQP=dS|3ldThhnp-4nPc5 zd$Z`%;UCiPScW}g4&Ga^`Bj0Xg!B#@dji3V2UWBU3#@W7E;Zl*z+WftQpE|T0w zi})B)13MG_$+uA%WZIL^sY1Wno%tGHwO<}s$peDuB(^d+i)b_J0*^P6!>D6`XM=!G zp63p5palc-W{bB(BnEWsR+uq{HmS~dHGQbC9Y~00;H9T&&vLb0-M>x1Y4+Qjr9-6O zue)wTt-$>;P6Q3vPdsIQY$hL_390Ym)}xkASR6tp2#%|f96QT*dFvswN=KMF_t2_| z$VVFH#8eB2kehIP@WZn4#WBIB~%K)SfXms4m<@;e)N~*sz zgOm+em1d)urx%%3wcwEv23*lBSB2PB|K|DBp+<5~lXt;TrEZ+3fos$X^-HVv5)ve! zjZl3#(Y9zToq8aNz@>tX>>~L-{UyR9JakON{L-L+?Jo$d;eaZY)w)Gakq>S)J zn#^18#-6+Mjstpk|9LYUAeAX9TL4E|Nc_ahiZ_TtXJ6Vmi}`I2->qNUUP% z3Ll{}(PsUMcC2SR2iT*MvGNWffy`i+i08LDzr~&S)WSBF=rjz)T0PUQk~b=p6S*?3 zd&N9nhxqMgu)Ztg95yD)8eO&FZh#be!*oq>1ex(%%!rdqx}6zEB0nGw6Q}JI+wTH# z<#l>5fFJnt<6kE?%pf}1eH^)b-G^_E32e`j$dp7-D@3XfUvk53v6|61;Vy7`UT$)!|!wM`B+4%VHC|RWm}o z$t}?itFpw+bIr{j@{4(;*joF$JVhvy5#r!28|MMc3Qn$GZUV zQq}bl=kv5`@bNSRysEw5+1Yiyo_!Pz5q-QiecXLy0q=K{0v|gDz{lPmfZz4{zA8X> z3t(A4jT!8He7t#jjCH*|Z+3m$p9n~t2$-CN+rB9CJFluVdbghp+AaSid?Z_qs@nvr z#A;O9@TV#b16`84i(Uj&PpnvZN)}!%5=y$ZFS;cE2D40k5uQ0IteQCj9jeyYMA)&5 z{586Jp-oZgEym3^&m=Y##wl#m{BujfZYlm|gkw%l1YSYsQpjPfc;e69@LiusyoYg1 zUnt0ZPvwpy$8ew$Lllu#lXu$T!>2i^8-x!>*Jy0t-iYbAtw1|7Zmfote_3`QzjkM zg+^9Sd3FhWh2T*X8nGS*ohzn4=Zr~SEOu6Gg#M?)?H{nzz6>exX~&;;&g}JTL)yR} z`7&G*PK)4ml&LFtbhYbrDA+QRA6MIk^uw!4WEfOuzwjYOgSn->)TX%8o_rS%VEK)Z zrj=j3bi?k*u%PvLTM2hTA5y$fA-*B^aS(fe!jBB|*q(`Gk@~MMU#19Kl-`}1m7;#- z!{}F-K=|iYrC5=4Y5EwXrCy8FD!&iloCo{!Nk|2-n4Wd3cDi`rD7;Z`HwYNavW4urizKTYBrqY*a`>$ovSTFde zn%X6f{o|+;^W9?%X>OT@;YkT6l1aak4yI7mJAMT;C*qqL#Rf2 zm|n#Kajf{qQL+B|XJNKoe_FRo-bH;Q`LiG@4d@8-cARs4GYhzfIir!DIhaRdaz31l zl-@!CgoE$?{hfc1P)JOJ3;6rN`a4WHn`nE_VGVslb72HO7TcCtd!pA>W@N=KhFK`*b zphAlep;3(NgB{$r@B}4Z|88l!ekZ1^GSwM0_VDb(&HXuqEJjAWHlG-Nx~^YSLTcNb zV&TFkC=n3;X-`^-wyXvvW(SfQe6icd+U)(T^%J6 zYSbtG)9QBLc!6M0;X`<&5@O6;8ynsFxUvlCDiRYv=~}5@vd76%cIIB@9sO#;<5Jm<0IlA`RlMM?(WmkXpL?Sm?=X@WXeU!W_TvM=i9xTI zUoaZyJ`@Nqy4Bg{xWXP?x!|`%g90u8?YYrCpqF3B+tzO+i9{U?Uzx27+Ce?-5E#iv z6MSeuuSd9I*GzfBU{w82a)G>}vxypYx3r~+=>+7vV&~p9`ZfPwi-@N+=zirncpYsa zfg5ZgZjqcPFdnW`3vONFOWKfC3$D;l9$!$k?Zy^hBqKP_%4)KMRhXuED)_0aLo#cd?(+kp-*p^q@;;z5u3Lv%P z)9p$Iza8#tQRt=hWCAAhUfsp?Ma%YKo#Hs36sjij6{^%*O={8V3Q|4Awo$@ic2$Kz z*jV3H5)mAA9%B}~SUHh|9d_QSE`LQQpqTyAat;JiE6X`)T1|YcNH-ErGgD{)VY;u{ z6R=DbJBw;ejWgz@pWQ$GNXyh=u|sW~?jBR>tp-hDY0k!56hF)#jM_V^F$Hs?mPIej1vnpgq5zBtS%H(|ZUcqU_2*}Dk-ULFb z$adn=Sg}K?VZvpuWSROv!8<^!nTGekzX@bz@o#Te)bhryhEu7u0I!mpu)rTR`+iqW zXrk?szt`}qTj4&~2-0J$tmK82@5ThqRNecYnOYPwFsc$;zKuw}EorINDe))=y;&~3 z{t7WVx^da!cJ$Z(T$^(3a$%g1z%80N6TVYLnIk{06t{8;b4yjG!_Y{uL2+pBnvjJ5 zlfMcr#TnGtbfFn~|0I=SM-^fnSImJv+`A40T5%gxJK{UO<$C7xv^LdsbxKGoKyM4+A=dw=m(hx zm@LJ#Bl-M*ZQX^*+xuD2ox4T=^g*qqIKW_9_jdWHGbV0RZ*9K$8p50bqtB87t{ks6 zHN21f_LaEi`-uT#6_S^@w@b55Hq>r$@#mOmf-e(b3>ew=*^Y?|wyt4yg0XsqJJTLC zyq;GQ0e9?|4*hL_1PyXkDv4B7^Y#(fw%+mEy_0m}>C$qn0I6t+Uvil1#iZ~RfE*V_ z7mZB&op(*%8OGs$FB-&Y`LA$$eJH=UwdLxHgIsC=^TAKCXIUug%CPi7qRh3LOYjJT z9Tn?t`i=9!92bJ;AKor}D|h*y{XTKBPdp#RwXCp6REZt}q&Wmm_Xy|Vhw5fV_3KMj zf_^2v3oW}(`-tMGLT^rmQp!vMmU9^SdS=)B3M{G?w?zD>u4y8^Yft^*I$!Jqlsf=SCYBp|Xl|ZYKI3!^6(}4+4D&m*Hl8L^ahRnI7o34gE(Lxm6koYcHF0>*Dj0nWDM98zOvg&hIfszuMddL!XRoDf)HpSuhf_wABVV3} z)ofwi^@U``CVX`U>?~3@K+JpNB}$devWO?V?Ud|5qgcwL{!{|&8P?6}oJ~09s~b07 zA;TxJq}hBOxwwKV#9f>CLwr?vx1bdO?(Gs(lM-neT>m18XUml~uP_@!AIZ0D zRO8w1F&2?y|1vq&f>+BrfvAI@Z`QYE{@=tIdv(9NrXYal`pkHW-1Z%+`#`_dBMzBg z<8D!6dOfJG8d99OKku1N%1@#@Dzh$(%_s%g^UWMl^s4cAaM%F2w5zA42H3~9snt>B z_Bt;k`xSOcOmByhkd}7fk-VPmm({Yja0f0QEEkzP1=P__R${mzU;SHk0|_a z?SS7>k7J`Wn>X+e?16|(C^&iLjG{MLS!^>69B$svOfXrw_UUL;H6^c^z~khN#%WZM zeJH>GbJbNm9vvIgvk78xTjwNQCZTsx1j`;5)ZV1k#d9?JObo%_i<3dvCx;D~F|{mo zPIEi0@IC!(bSRxL=65tQb%adr2QmRog<+j~n8VApUo&)N5`n?4Q(y&MhlBqUEx2N?S&Ufa*=jJq)uV?qVh=* z|7ItJ4b%?r^KT$fNoyK~!^W9xJm_9&OxS-PK#RUGB_yIIFsfq=f8X`M7T5IqC0|R*W7(517#+jJx@eSbygc$S z6OXRi_(0tG96zp0oDi?+_q0{6U>LTki%Qbj3?%pc&j=+qhNDq96Y`aZSPo_@eFrH% ztW?+@_oj@KykhVphV6M&yc#?m$|f--tohS8iT^z2tk)KbkkT35Pq?9`G1Id>A@k6w zO`Bc*OlqS*hK1&2GVh#SU9L6VONQddPE40IztCMNfsOIdrc;Cf>h0-g(P=V@k&p>s z^w%vF&F}Wss&JIZwXqC&#lOT6Y%9F?M+pN+{t!>onZJlsB)u;{ zD~U&^9GQz^ya$it`Nx`qEZWM10@n|J_#1=q%a6dAFUk~x=IVmNlI6Z$C>6{sYw*;5 zn&3j`t92Bbn+9KKYvC6o(WMsU%YDmZRh?_CZ#>}*$|0TPpHGN)o!3S;vv5WMpX!$Z z#b0-45Lc%knDW%2!(swTu z(De*>jn#SDL>EEzL`iz~(-{!8|IG|b@fAu*s^8^r60UKQ&eN6*F2(hAz#)Tg-C zHR56VdWr z7$*!Tpjj|fh%yWhifq{=D8~9micg9uRk8Dl9j#^4fGv;O7^PR*Myixm7Uw zFV3}wuOZ-al?gY_IBOi`R*KRX#h(-=mD(1CJjFVQIl)!eu4VNB$)691#|_8{5dy)_ zFcq@-@pFRg?c?}Ax4<_-pBfWhw^wICsEQkg1C{#cHI;u>oyXMvH!-*=TR?96DjEa- z>pS9dOQ~k%_tSP4I9dVgqIDT8P7p!@%Xs2_lDGV0!Vw;3OXaNxM55ADxw6^ z-A^nubWIX=iSnbc1vF^_68Y^*N;0cmUB6KvLiLrE;eD5W_b&+8D1|$PZQlzfg>FJB z;Kn&O7dI&$e*pD~FWI>v+%Z*zF`d_F1LJ*-VNp8Z9_l$fvW_qY4#0DB zO;$~)lYa*MJXEjn6;Tp2ez@G_; z62wrSqKO?0X;}(-{Rk~Qg*(3NRFTh}fgtGMD~f@K>L;WZwzHzs{jz(1$cj~^rk*57 zo;UjdJsEweuPszm% zshI|GXnkWEX^ELXC0ohglzwU<;{*`_$`|0fs8ES-sVMOMc9?RKP+}2+niMSl9XC(> zg;f!PpyDp7fc7+&yhd~X$}V3YSY-(Rl4yAeN4y;% zHHcU#{N#CdAa&D-j_XB__)4$TEF_l|)uK!uN(2?sDXSzT<4w9W#W1h`u`Y`19f|_E zdJvT8d=@PL_bXn@w`2$1_A&YxBTrHYj!op<j}5Ejb}|*iEs3+I1kSu3rg5atDd2)%H=xsdWvS|R3Wf9e3w)>I-OV8w=&fE+4hoW+4CH;gUqu(C&5LuPh zh$FbRp^i%Aeg}l?ePe5D3SaYJEi`$0-a z8|ZD_`rB4nkP~B+Kt*HdhLTOXZCasXV)We9iK&qAnhB%fF1N_|%o8BWfjvARSM4 zz8*^I1-g|(hJPU^P$7ZBebypfUZvM{Nm~Il6_f<4Fh!}jg5#i=K8`Xi{~{b}3;5Ul zD=57&zgwA-?;@dn75mZ^NkjK8&1$Iyy1%G6;=7C46|Y4(-s`#avI*?qAVi+xiTiPy zMiUY)_6^lcUib$VMWrTJ4x4LxvE;~WYfrQh66vLMIAkcLGb;hHk{=mmLG&Ehjj!S6 z685c)iCn;bbc_a;7g<2FF$1Z?&=*Z_bbAJqQh^`+i(4K}x^fVRj9ns(1f-*p9gSgR zFRMKZ&=Ts${o;_L!YSnPOTN_tPRtnu18?}$3eKU)O>XkhiOc9B;D=%z@z-Z~=a7`h ziuLB%13!aTZXkeZS29$is@}vz!K|GYd=X5g(PSlFPFB#UI7~PTJt}=EdRQ=_n?ETf zabEx1H#W@A7hJ|DO-gMHDSS{))RAJE2PM%Rl}Zom?{FX#LT{@kA%$q_TFHt^8H?@- zvE^byN*pE&wVirvjY69l*JxSHJZI!M=p&av4k|E#hXXoldTDW@jBD3C!*e0%ER>82 z8&(yrtb>O0K5oD0JNhPQkZi#Qd2}D3AnxtYlm^P(zeyr>@bRLlHX6`i(8)GZl?#H1 zD+B6w?l$TMaC{h#Aa05@DeuULV8l6yrac))fs)EFp0OA0T3?1U>g=Z+q^SjSt6s`REd3N0c zFr?0aLv&_CCoN}fGUl?PLpdPBXDy~Th3=*8IdE`pU&Z7abywI|WXOp6{0L*>G&>=9 zO{-17lypkf1Xo)2@qBU&O>T7PBp%OI=0ft`@jjiYPdt_A6Z0mI`&GOL!LrgXnxG(Y zN2!e{M7Vp77#kklk~H4Z0QpQ4N)XZnD7BBg3@M%|?M;os-ObbbAhSSu#_hNd=Nf;` zW(BvK+>b_{^=eF`@?k`)>-~15?@hS@r*WW&nGw{fMwFQ#>RsS;KYCsF!I;l~qqI#+ zJhNUCeL0|uu)jtdtz?<^Djw6y|Azsh2Pvd0?ync=I>8f2?r($Hc*QkNK2|nx^}r>I zK68tfr(YhvC4AKp!%c0Eg_6LPPD3SvJl}0`$Sb32q0vV1OJSC1(
      ^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 540/660] [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 541/660] [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 542/660] [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 543/660] [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 544/660] [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 545/660] [Outlook] Update snippets for attachments and custom properties APIs (#884) * Update links and clean up snippets * Map snippet to Office.CustomProperties.saveAsync --- playlists-prod/outlook.yaml | 2 +- playlists/outlook.yaml | 2 +- .../load-set-get-save.yaml | 98 ++-- .../prepend-text-to-item-body.yaml | 2 +- .../20-item-body/replace-selected-text.yaml | 2 +- .../40-attachments/attachments-compose.yaml | 192 ++++--- .../55-display-items/display-new-message.yaml | 6 +- .../display-reply-with-attachments.yaml | 24 +- snippet-extractor-metadata/outlook.xlsx | Bin 24570 -> 24677 bytes snippet-extractor-output/snippets.yaml | 543 ++++++++++-------- 10 files changed, 489 insertions(+), 382 deletions(-) diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 74310b4df..e01967dea 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -385,7 +385,7 @@ api_set: Mailbox: '1.9' - id: outlook-display-items-display-reply-with-attachments - name: 'Create a reply, with attachments' + name: Create a reply with attachments fileName: display-reply-with-attachments.yaml description: Opens a reply message forms and adds sample attachments. rawUrl: >- diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index a5d0ad58a..9e2b0fac3 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -385,7 +385,7 @@ api_set: Mailbox: '1.9' - id: outlook-display-items-display-reply-with-attachments - name: 'Create a reply, with attachments' + name: Create a reply with attachments fileName: display-reply-with-attachments.yaml description: Opens a reply message forms and adds sample attachments. rawUrl: >- diff --git a/samples/outlook/15-item-custom-properties/load-set-get-save.yaml b/samples/outlook/15-item-custom-properties/load-set-get-save.yaml index 3a12f3b83..8c3d77bf7 100644 --- a/samples/outlook/15-item-custom-properties/load-set-get-save.yaml +++ b/samples/outlook/15-item-custom-properties/load-set-get-save.yaml @@ -10,88 +10,106 @@ script: $("#load").on("click", load); $("#get").on("click", get); + $("#get-all").on("click", getAll); $("#set").on("click", set); $("#remove").on("click", remove); $("#save").on("click", save); - + function load() { - Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { - if (result.status === Office.AsyncResultStatus.Succeeded) { - console.log("Loaded following custom properties:"); - customProps = result.value; - const dataKey = Object.keys(customProps)[0]; - const data = customProps[dataKey]; - for (let propertyName in data) - { - let propertyValue = data[propertyName]; - console.log(`${propertyName}: ${propertyValue}`); - } - } - else { + Office.context.mailbox.item.loadCustomPropertiesAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { console.error(`loadCustomPropertiesAsync failed with message ${result.error.message}`); + return; } + + customProps = result.value; + console.log("Loaded the CustomProperties object."); }); } function get() { - const propertyName = $("#propertyName").val(); + const propertyName = $("#get-property-name").val(); const propertyValue = customProps.get(propertyName); - $("#propertyValue").val(propertyValue); console.log(`The value of custom property "${propertyName}" is "${propertyValue}".`); } + function getAll() { + let allCustomProps; + if (Office.context.requirements.isSetSupported("Mailbox", "1.9")) { + allCustomProps = customProps.getAll(); + } else { + allCustomProps = customProps["rawData"]; + } + + console.log(allCustomProps); + } + function set() { - const propertyName = $("#propertyName").val(); - const propertyValue = $("#propertyValue").val(); + const propertyName = $("#set-property-name").val(); + const propertyValue = $("#property-value").val(); customProps.set(propertyName, propertyValue); console.log(`Custom property "${propertyName}" set to value "${propertyValue}".`); } function remove() { - const propertyName = $("#propertyName").val(); + const propertyName = $("#remove-property-name").val(); customProps.remove(propertyName); console.log(`Custom property "${propertyName}" removed.`); } function save() { - customProps.saveAsync(function(result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { + customProps.saveAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { console.error(`saveAsync failed with message ${result.error.message}`); - } else { - console.log(`Custom properties saved with status: ${result.status}`); + return; } + + console.log(`Custom properties saved with status: ${result.status}`); }); } language: typescript template: - content: | + content: |-
      -

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

      +

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

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

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

      -

      Required mode: Item Compose

      +

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

      +

      Required mode: Item Compose

      -

      Try it out

      -
      - - +

      Try it out

      +
      +

      ADD

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

      REMOVE

      +
      + +
      -
      diff --git a/samples/outlook/55-display-items/display-new-message.yaml b/samples/outlook/55-display-items/display-new-message.yaml index 8f619651e..c4053d058 100644 --- a/samples/outlook/55-display-items/display-new-message.yaml +++ b/samples/outlook/55-display-items/display-new-message.yaml @@ -20,7 +20,7 @@ script: { type: "file", name: "image.png", - url: "http://www.cutestpaw.com/wp-content/uploads/2011/11/Cute-Black-Dogs-s.jpg", + url: "https://i.imgur.com/9S36xvA.jpg", isInline: true } ] @@ -40,12 +40,12 @@ script: { type: "file", name: "image.png", - url: "http://www.cutestpaw.com/wp-content/uploads/2011/11/Cute-Black-Dogs-s.jpg", + url: "https://i.imgur.com/9S36xvA.jpg", isInline: true } ] }, - function(asyncResult) { + (asyncResult) => { console.log(JSON.stringify(asyncResult)); } ); diff --git a/samples/outlook/55-display-items/display-reply-with-attachments.yaml b/samples/outlook/55-display-items/display-reply-with-attachments.yaml index ab7faa8ce..bfcf8495a 100644 --- a/samples/outlook/55-display-items/display-reply-with-attachments.yaml +++ b/samples/outlook/55-display-items/display-reply-with-attachments.yaml @@ -1,6 +1,6 @@ order: 6 id: outlook-display-items-display-reply-with-attachments -name: 'Create a reply, with attachments' +name: Create a reply with attachments description: Opens a reply message forms and adds sample attachments. host: OUTLOOK api_set: @@ -12,32 +12,34 @@ script: function run() { Office.context.mailbox.item.displayReplyForm({ - htmlBody: "This is a reply with a couple of attachments - an inline image and an item
      ", + htmlBody: "This is a reply with an inline image and an item attachment.
      ", attachments: [ - { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", isInline: true }, + { type: "file", url: "https://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", inLine: true }, { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } ], - options: { asyncContext: null }, - callback: function(result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { + callback: (result) => { + if (result.status === Office.AsyncResultStatus.Failed) { console.error(`Action failed with message ${result.error.message}`); + return; } + + console.log("Created reply with attachments."); } }); } function runAsync() { - // The async version is only available starting with requirement set 1.9, - // and provides a callback when the new appointment form has been created. + // The async version is only available starting with requirement set 1.9. + // It provides a callback when the new appointment form has been created. Office.context.mailbox.item.displayReplyFormAsync( { - htmlBody: "This is a reply with a couple of attachments - an inline image and an item
      ", + htmlBody: "This is a reply with an inline image and an item attachment.
      ", attachments: [ - { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", isInline: true }, + { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", inLine: true }, { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } ] }, - function(asyncResult) { + (asyncResult) => { console.log(JSON.stringify(asyncResult)); } ); diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 072de58ca36158f02979222180e3d7d95f384528..aee6413fbd323959e806172af5c37710c7a360e3 100644 GIT binary patch delta 15627 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 delta 15507 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 { + console.log(result); + } + ); 'Office.AppointmentCompose#addFileAttachmentFromBase64Async:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - base64String = - "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsSAAALEgHS3X78AAACRUlEQVRYw82XzXHbMBCFP2F8tzsQc8Ixyh0zoiuIXIGdCsxUYKqC0B04FdiuwMoM7mGOOIXqQGoAymXhgSX+itJM9kIRFLAP+3YXD5Pdbscx5oxaAIW8Ztr6l2PWmQwF4IyaieP53qdfAqQ8CwBn1JU4vpWhrbxXQA5MZfynANmcDIAzKgcy4FKGXsVJFf3nLgKyBQptfT4KQMRz2N0fcbxqmRMDWXflx0VPnrdArq0vekQ1Dv0UeHZGNebHhwjU8AzwKM43RyZnbAf58Q6ghudeWd0Aus0+5EcMIIRi3beua0D3Nm39BEAx3i7HTK4DEBJn5YxKOnaRA5+ErpMBWMpzDvx1RuXCcxOISlufAjfC7zgAsqsvUvMAD0ApPaEtGi9AIlUzKgJo60tt/SyKRkzLrAXERluf7W1gOICWaMyB386oooOWsIHvXbSoHuUSFovtHqicUVnH3EJoeT0aQEf5/XBGlc6otIOWBXAtPeZkAIJ9Bt6cUU9tZautX2nrk3MACHYr1ZKProKRtDw4o8pzAPjWo+NtpXTTvoteDDg8noDAcwbcRedAkGdFXyk2GEDcegVAFp2gyVDHjRQ4o6q2smoqtR5Hd+qMqtoALCWUUymr1m43QMZfOaMK4C0SrMsDANJ2E5FNcbdbjHC+ENl+H0myJFbLtaq4Rt8dyPBYRQV1E40nMv9rl7xrOw3DGb+Whcqu3i/OM6CUOWvgRlufNmnLYy4m77uJI7AXtdNcTDrU71LEyv7v01/N/ovL6bmu5/8A1tNWZldH0W4AAAAASUVORK5CYII="; - + const base64String = + "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsSAAALEgHS3X78AAACRUlEQVRYw82XzXHbMBCFP2F8tzsQc8Ixyh0zoiuIXIGdCsxUYKqC0B04FdiuwMoM7mGOOIXqQGoAymXhgSX+itJM9kIRFLAP+3YXD5Pdbscx5oxaAIW8Ztr6l2PWmQwF4IyaieP53qdfAqQ8CwBn1JU4vpWhrbxXQA5MZfynANmcDIAzKgcy4FKGXsVJFf3nLgKyBQptfT4KQMRz2N0fcbxqmRMDWXflx0VPnrdArq0vekQ1Dv0UeHZGNebHhwjU8AzwKM43RyZnbAf58Q6ghudeWd0Aus0+5EcMIIRi3beua0D3Nm39BEAx3i7HTK4DEBJn5YxKOnaRA5+ErpMBWMpzDvx1RuXCcxOISlufAjfC7zgAsqsvUvMAD0ApPaEtGi9AIlUzKgJo60tt/SyKRkzLrAXERluf7W1gOICWaMyB386oooOWsIHvXbSoHuUSFovtHqicUVnH3EJoeT0aQEf5/XBGlc6otIOWBXAtPeZkAIJ9Bt6cUU9tZautX2nrk3MACHYr1ZKProKRtDw4o8pzAPjWo+NtpXTTvoteDDg8noDAcwbcRedAkGdFXyk2GEDcegVAFp2gyVDHjRQ4o6q2smoqtR5Hd+qMqtoALCWUUymr1m43QMZfOaMK4C0SrMsDANJ2E5FNcbdbjHC+ENl+H0myJFbLtaq4Rt8dyPBYRQV1E40nMv9rl7xrOw3DGb+Whcqu3i/OM6CUOWvgRlufNmnLYy4m77uJI7AXtdNcTDrU71LEyv7v01/N/ovL6bmu5/8A1tNWZldH0W4AAAAASUVORK5CYII="; Office.context.mailbox.item.addFileAttachmentFromBase64Async( - base64String, - "logo.png", - { isInline: false }, - function(result) { console.log(result); }); + base64String, + "logo.png", + { isInline: false }, + (result) => { + console.log(result); + } + ); - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml @@ -8118,19 +8124,6 @@ } } ); -'Office.AppointmentCompose#addItemAttachmentAsync:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - - - const attachmentItemId = $("#attachmentItemId").val(); - - Office.context.mailbox.item.addItemAttachmentAsync( - attachmentItemId, - "My attachment", - { "asyncContext" : { var3: 3, var4: false } }, - function(result) { console.log(result); }); 'Office.AppointmentCompose#categories:member': - >- // Link to full sample: @@ -8371,34 +8364,47 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - Office.context.mailbox.item.getAttachmentsAsync(function (result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(result.error.message); - } else { - if (result.value.length > 0) { - for (let i = 0; i < result.value.length; i++) { - const attachment = result.value[i]; - console.log("ID: " + attachment.id + "\n" + - "Name: " + attachment.name + "\n" + - "Size: " + attachment.size + "\n" + - "isInline: " + attachment.isInline); - switch (attachment.attachmentType) { - case Office.MailboxEnums.AttachmentType.Cloud: - console.log("Attachment type: Attachment is stored in a cloud location."); - break; - case Office.MailboxEnums.AttachmentType.File: - console.log("Attachment type: Attachment is a file."); - break; - case Office.MailboxEnums.AttachmentType.Item: - console.log("Attachment type: Attachment is an Exchange item."); - break; - } - } - } - else { - console.log("No attachments on this message."); - } + Office.context.mailbox.item.getAttachmentsAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error(result.error.message); + return; + } + + if (result.value.length > 0) { + for (let i = 0; i < result.value.length; i++) { + const attachment = result.value[i]; + let attachmentType; + switch (attachment.attachmentType) { + case Office.MailboxEnums.AttachmentType.Cloud: + attachmentType = "Attachment is stored in a cloud location"; + break; + case Office.MailboxEnums.AttachmentType.File: + attachmentType = "Attachment is a file"; + break; + case Office.MailboxEnums.AttachmentType.Item: + attachmentType = "Attachment is an Exchange item"; + break; + } + console.log( + "ID: " + + attachment.id + + "\n" + + "Type: " + + attachmentType + + "\n" + + "Name: " + + attachment.name + + "\n" + + "Size: " + + attachment.size + + "\n" + + "isInline: " + + attachment.isInline + ); } + } else { + console.log("No attachments on this message."); + } }); 'Office.AppointmentCompose#getItemIdAsync:member(2)': - >- @@ -8555,21 +8561,14 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml - Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { - if (result.status === Office.AsyncResultStatus.Succeeded) { - console.log("Loaded following custom properties:"); - customProps = result.value; - const dataKey = Object.keys(customProps)[0]; - const data = customProps[dataKey]; - for (let propertyName in data) - { - let propertyValue = data[propertyName]; - console.log(`${propertyName}: ${propertyValue}`); - } - } - else { + Office.context.mailbox.item.loadCustomPropertiesAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { console.error(`loadCustomPropertiesAsync failed with message ${result.error.message}`); + return; } + + customProps = result.value; + console.log("Loaded the CustomProperties object."); }); 'Office.AppointmentCompose#location:member': - >- @@ -8829,16 +8828,17 @@ Office.context.mailbox.item.removeAttachmentAsync( - $("#attachmentId").val(), - { asyncContext : null }, - function(result) - { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`${result.error.message}`); - } else { - console.log(`Attachment removed successfully.`); - } + $("#attachmentId") + .val() + .toString(), + (result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error(result.error.message); + return; } + + console.log(`Attachment removed successfully.`); + } ); 'Office.AppointmentCompose#requiredAttendees:member': - >- @@ -9177,16 +9177,18 @@ Office.context.mailbox.item.displayReplyForm({ - htmlBody: "This is a reply with a couple of attachments - an inline image and an item
      ", + htmlBody: "This is a reply with an inline image and an item attachment.
      ", attachments: [ - { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", isInline: true }, + { type: "file", url: "https://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", inLine: true }, { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } ], - options: { asyncContext: null }, - callback: function(result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { + callback: (result) => { + if (result.status === Office.AsyncResultStatus.Failed) { console.error(`Action failed with message ${result.error.message}`); + return; } + + console.log("Created reply with attachments."); } }); 'Office.AppointmentRead#displayReplyFormAsync:member(1)': @@ -9206,19 +9208,19 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml - // The async version is only available starting with requirement set 1.9, + // The async version is only available starting with requirement set 1.9. - // and provides a callback when the new appointment form has been created. + // It provides a callback when the new appointment form has been created. Office.context.mailbox.item.displayReplyFormAsync( { - htmlBody: "This is a reply with a couple of attachments - an inline image and an item
      ", + htmlBody: "This is a reply with an inline image and an item attachment.
      ", attachments: [ - { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", isInline: true }, + { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", inLine: true }, { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } ] }, - function(asyncResult) { + (asyncResult) => { console.log(JSON.stringify(asyncResult)); } ); @@ -9529,21 +9531,14 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml - Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { - if (result.status === Office.AsyncResultStatus.Succeeded) { - console.log("Loaded following custom properties:"); - customProps = result.value; - const dataKey = Object.keys(customProps)[0]; - const data = customProps[dataKey]; - for (let propertyName in data) - { - let propertyValue = data[propertyName]; - console.log(`${propertyName}: ${propertyValue}`); - } - } - else { + Office.context.mailbox.item.loadCustomPropertiesAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { console.error(`loadCustomPropertiesAsync failed with message ${result.error.message}`); + return; } + + customProps = result.value; + console.log("Loaded the CustomProperties object."); }); 'Office.AppointmentRead#location:member': - >- @@ -9848,7 +9843,7 @@ /* This snippet adds text to the beginning of the message or appointment's body. - When prepending a link in HTML markup to the body, you can disable the online link preview by setting the anchor tag's id attribute to "LPNoLP". For example, 'Click here!'. + When prepending a link in HTML markup to the body, you can disable the online link preview by setting the anchor tag's id attribute to "LPNoLP". For example, 'Click here!'. */ const text = $("#text-field").val(); @@ -9950,7 +9945,7 @@ /* This snippet replaces selected text in a message or appointment's body with specified text. - If you want to use a link in HTML markup as a value of the setSelectedDataAsync call's data parameter, you can disable online link preview by setting the anchor tag's id attribute to "LPNoLP". For example, 'Click here!'. + If you want to use a link in HTML markup as a value of the setSelectedDataAsync call's data parameter, you can disable online link preview by setting the anchor tag's id attribute to "LPNoLP". For example, 'Click here!'. */ const text = $("#text-field").val(); @@ -10107,34 +10102,62 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml - const propertyName = $("#propertyName").val(); + const propertyName = $("#get-property-name").val(); const propertyValue = customProps.get(propertyName); - $("#propertyValue").val(propertyValue); - console.log(`The value of custom property "${propertyName}" is "${propertyValue}".`); +'Office.CustomProperties#getAll:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml + + + let allCustomProps; + + if (Office.context.requirements.isSetSupported("Mailbox", "1.9")) { + allCustomProps = customProps.getAll(); + } else { + allCustomProps = customProps["rawData"]; + } + + + console.log(allCustomProps); 'Office.CustomProperties#remove:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml - const propertyName = $("#propertyName").val(); + const propertyName = $("#remove-property-name").val(); customProps.remove(propertyName); console.log(`Custom property "${propertyName}" removed.`); +'Office.CustomProperties#saveAsync:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml + + + customProps.saveAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error(`saveAsync failed with message ${result.error.message}`); + return; + } + + console.log(`Custom properties saved with status: ${result.status}`); + }); 'Office.CustomProperties#set:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml - const propertyName = $("#propertyName").val(); + const propertyName = $("#set-property-name").val(); - const propertyValue = $("#propertyValue").val(); + const propertyValue = $("#property-value").val(); customProps.set(propertyName, propertyValue); @@ -10751,7 +10774,7 @@ { type: "file", name: "image.png", - url: "http://www.cutestpaw.com/wp-content/uploads/2011/11/Cute-Black-Dogs-s.jpg", + url: "https://i.imgur.com/9S36xvA.jpg", isInline: true } ] @@ -10776,12 +10799,12 @@ { type: "file", name: "image.png", - url: "http://www.cutestpaw.com/wp-content/uploads/2011/11/Cute-Black-Dogs-s.jpg", + url: "https://i.imgur.com/9S36xvA.jpg", isInline: true } ] }, - function(asyncResult) { + (asyncResult) => { console.log(JSON.stringify(asyncResult)); } ); @@ -11130,34 +11153,47 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - Office.context.mailbox.item.getAttachmentsAsync(function (result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(result.error.message); - } else { - if (result.value.length > 0) { - for (let i = 0; i < result.value.length; i++) { - const attachment = result.value[i]; - console.log("ID: " + attachment.id + "\n" + - "Name: " + attachment.name + "\n" + - "Size: " + attachment.size + "\n" + - "isInline: " + attachment.isInline); - switch (attachment.attachmentType) { - case Office.MailboxEnums.AttachmentType.Cloud: - console.log("Attachment type: Attachment is stored in a cloud location."); - break; - case Office.MailboxEnums.AttachmentType.File: - console.log("Attachment type: Attachment is a file."); - break; - case Office.MailboxEnums.AttachmentType.Item: - console.log("Attachment type: Attachment is an Exchange item."); - break; - } - } - } - else { - console.log("No attachments on this message."); - } + Office.context.mailbox.item.getAttachmentsAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error(result.error.message); + return; + } + + if (result.value.length > 0) { + for (let i = 0; i < result.value.length; i++) { + const attachment = result.value[i]; + let attachmentType; + switch (attachment.attachmentType) { + case Office.MailboxEnums.AttachmentType.Cloud: + attachmentType = "Attachment is stored in a cloud location"; + break; + case Office.MailboxEnums.AttachmentType.File: + attachmentType = "Attachment is a file"; + break; + case Office.MailboxEnums.AttachmentType.Item: + attachmentType = "Attachment is an Exchange item"; + break; + } + console.log( + "ID: " + + attachment.id + + "\n" + + "Type: " + + attachmentType + + "\n" + + "Name: " + + attachment.name + + "\n" + + "Size: " + + attachment.size + + "\n" + + "isInline: " + + attachment.isInline + ); } + } else { + console.log("No attachments on this message."); + } }); 'Office.MailboxEnums.CategoryColor:enum': - >- @@ -11803,27 +11839,33 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - const attachmentUrl = $("#attachmentUrl").val(); - + const attachmentUrl = $("#attachmentUrl") + .val() + .toString(); Office.context.mailbox.item.addFileAttachmentAsync( - attachmentUrl, - getFileName(attachmentUrl), - { "asyncContext" : { var1: 1, var2: true } }, - function(result) { console.log(result); }); + attachmentUrl, + getFileName(attachmentUrl), + { isInline: false }, + (result) => { + console.log(result); + } + ); 'Office.MessageCompose#addFileAttachmentFromBase64Async:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - base64String = - "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsSAAALEgHS3X78AAACRUlEQVRYw82XzXHbMBCFP2F8tzsQc8Ixyh0zoiuIXIGdCsxUYKqC0B04FdiuwMoM7mGOOIXqQGoAymXhgSX+itJM9kIRFLAP+3YXD5Pdbscx5oxaAIW8Ztr6l2PWmQwF4IyaieP53qdfAqQ8CwBn1JU4vpWhrbxXQA5MZfynANmcDIAzKgcy4FKGXsVJFf3nLgKyBQptfT4KQMRz2N0fcbxqmRMDWXflx0VPnrdArq0vekQ1Dv0UeHZGNebHhwjU8AzwKM43RyZnbAf58Q6ghudeWd0Aus0+5EcMIIRi3beua0D3Nm39BEAx3i7HTK4DEBJn5YxKOnaRA5+ErpMBWMpzDvx1RuXCcxOISlufAjfC7zgAsqsvUvMAD0ApPaEtGi9AIlUzKgJo60tt/SyKRkzLrAXERluf7W1gOICWaMyB386oooOWsIHvXbSoHuUSFovtHqicUVnH3EJoeT0aQEf5/XBGlc6otIOWBXAtPeZkAIJ9Bt6cUU9tZautX2nrk3MACHYr1ZKProKRtDw4o8pzAPjWo+NtpXTTvoteDDg8noDAcwbcRedAkGdFXyk2GEDcegVAFp2gyVDHjRQ4o6q2smoqtR5Hd+qMqtoALCWUUymr1m43QMZfOaMK4C0SrMsDANJ2E5FNcbdbjHC+ENl+H0myJFbLtaq4Rt8dyPBYRQV1E40nMv9rl7xrOw3DGb+Whcqu3i/OM6CUOWvgRlufNmnLYy4m77uJI7AXtdNcTDrU71LEyv7v01/N/ovL6bmu5/8A1tNWZldH0W4AAAAASUVORK5CYII="; - + const base64String = + "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsSAAALEgHS3X78AAACRUlEQVRYw82XzXHbMBCFP2F8tzsQc8Ixyh0zoiuIXIGdCsxUYKqC0B04FdiuwMoM7mGOOIXqQGoAymXhgSX+itJM9kIRFLAP+3YXD5Pdbscx5oxaAIW8Ztr6l2PWmQwF4IyaieP53qdfAqQ8CwBn1JU4vpWhrbxXQA5MZfynANmcDIAzKgcy4FKGXsVJFf3nLgKyBQptfT4KQMRz2N0fcbxqmRMDWXflx0VPnrdArq0vekQ1Dv0UeHZGNebHhwjU8AzwKM43RyZnbAf58Q6ghudeWd0Aus0+5EcMIIRi3beua0D3Nm39BEAx3i7HTK4DEBJn5YxKOnaRA5+ErpMBWMpzDvx1RuXCcxOISlufAjfC7zgAsqsvUvMAD0ApPaEtGi9AIlUzKgJo60tt/SyKRkzLrAXERluf7W1gOICWaMyB386oooOWsIHvXbSoHuUSFovtHqicUVnH3EJoeT0aQEf5/XBGlc6otIOWBXAtPeZkAIJ9Bt6cUU9tZautX2nrk3MACHYr1ZKProKRtDw4o8pzAPjWo+NtpXTTvoteDDg8noDAcwbcRedAkGdFXyk2GEDcegVAFp2gyVDHjRQ4o6q2smoqtR5Hd+qMqtoALCWUUymr1m43QMZfOaMK4C0SrMsDANJ2E5FNcbdbjHC+ENl+H0myJFbLtaq4Rt8dyPBYRQV1E40nMv9rl7xrOw3DGb+Whcqu3i/OM6CUOWvgRlufNmnLYy4m77uJI7AXtdNcTDrU71LEyv7v01/N/ovL6bmu5/8A1tNWZldH0W4AAAAASUVORK5CYII="; Office.context.mailbox.item.addFileAttachmentFromBase64Async( - base64String, - "logo.png", - { isInline: false }, - function(result) { console.log(result); }); + base64String, + "logo.png", + { isInline: false }, + (result) => { + console.log(result); + } + ); - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml @@ -11854,19 +11896,6 @@ } } ); -'Office.MessageCompose#addItemAttachmentAsync:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - - - const attachmentItemId = $("#attachmentItemId").val(); - - Office.context.mailbox.item.addItemAttachmentAsync( - attachmentItemId, - "My attachment", - { "asyncContext" : { var3: 3, var4: false } }, - function(result) { console.log(result); }); 'Office.MessageCompose#bcc:member': - >- // Link to full sample: @@ -12140,34 +12169,47 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - Office.context.mailbox.item.getAttachmentsAsync(function (result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(result.error.message); - } else { - if (result.value.length > 0) { - for (let i = 0; i < result.value.length; i++) { - const attachment = result.value[i]; - console.log("ID: " + attachment.id + "\n" + - "Name: " + attachment.name + "\n" + - "Size: " + attachment.size + "\n" + - "isInline: " + attachment.isInline); - switch (attachment.attachmentType) { - case Office.MailboxEnums.AttachmentType.Cloud: - console.log("Attachment type: Attachment is stored in a cloud location."); - break; - case Office.MailboxEnums.AttachmentType.File: - console.log("Attachment type: Attachment is a file."); - break; - case Office.MailboxEnums.AttachmentType.Item: - console.log("Attachment type: Attachment is an Exchange item."); - break; - } - } - } - else { - console.log("No attachments on this message."); - } + Office.context.mailbox.item.getAttachmentsAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error(result.error.message); + return; + } + + if (result.value.length > 0) { + for (let i = 0; i < result.value.length; i++) { + const attachment = result.value[i]; + let attachmentType; + switch (attachment.attachmentType) { + case Office.MailboxEnums.AttachmentType.Cloud: + attachmentType = "Attachment is stored in a cloud location"; + break; + case Office.MailboxEnums.AttachmentType.File: + attachmentType = "Attachment is a file"; + break; + case Office.MailboxEnums.AttachmentType.Item: + attachmentType = "Attachment is an Exchange item"; + break; + } + console.log( + "ID: " + + attachment.id + + "\n" + + "Type: " + + attachmentType + + "\n" + + "Name: " + + attachment.name + + "\n" + + "Size: " + + attachment.size + + "\n" + + "isInline: " + + attachment.isInline + ); } + } else { + console.log("No attachments on this message."); + } }); 'Office.MessageCompose#getComposeTypeAsync:member(2)': - >- @@ -12397,21 +12439,14 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml - Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { - if (result.status === Office.AsyncResultStatus.Succeeded) { - console.log("Loaded following custom properties:"); - customProps = result.value; - const dataKey = Object.keys(customProps)[0]; - const data = customProps[dataKey]; - for (let propertyName in data) - { - let propertyValue = data[propertyName]; - console.log(`${propertyName}: ${propertyValue}`); - } - } - else { + Office.context.mailbox.item.loadCustomPropertiesAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { console.error(`loadCustomPropertiesAsync failed with message ${result.error.message}`); + return; } + + customProps = result.value; + console.log("Loaded the CustomProperties object."); }); 'Office.MessageCompose#notificationMessages:member': - >- @@ -12519,16 +12554,17 @@ Office.context.mailbox.item.removeAttachmentAsync( - $("#attachmentId").val(), - { asyncContext : null }, - function(result) - { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`${result.error.message}`); - } else { - console.log(`Attachment removed successfully.`); - } + $("#attachmentId") + .val() + .toString(), + (result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error(result.error.message); + return; } + + console.log(`Attachment removed successfully.`); + } ); 'Office.MessageCompose#sensitivityLabel:member': - >- @@ -12834,16 +12870,18 @@ Office.context.mailbox.item.displayReplyForm({ - htmlBody: "This is a reply with a couple of attachments - an inline image and an item
      ", + htmlBody: "This is a reply with an inline image and an item attachment.
      ", attachments: [ - { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", isInline: true }, + { type: "file", url: "https://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", inLine: true }, { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } ], - options: { asyncContext: null }, - callback: function(result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { + callback: (result) => { + if (result.status === Office.AsyncResultStatus.Failed) { console.error(`Action failed with message ${result.error.message}`); + return; } + + console.log("Created reply with attachments."); } }); 'Office.MessageRead#displayReplyFormAsync:member(1)': @@ -12863,19 +12901,19 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml - // The async version is only available starting with requirement set 1.9, + // The async version is only available starting with requirement set 1.9. - // and provides a callback when the new appointment form has been created. + // It provides a callback when the new appointment form has been created. Office.context.mailbox.item.displayReplyFormAsync( { - htmlBody: "This is a reply with a couple of attachments - an inline image and an item
      ", + htmlBody: "This is a reply with an inline image and an item attachment.
      ", attachments: [ - { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", isInline: true }, + { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", inLine: true }, { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } ] }, - function(asyncResult) { + (asyncResult) => { console.log(JSON.stringify(asyncResult)); } ); @@ -13221,21 +13259,14 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml - Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { - if (result.status === Office.AsyncResultStatus.Succeeded) { - console.log("Loaded following custom properties:"); - customProps = result.value; - const dataKey = Object.keys(customProps)[0]; - const data = customProps[dataKey]; - for (let propertyName in data) - { - let propertyValue = data[propertyName]; - console.log(`${propertyName}: ${propertyValue}`); - } - } - else { + Office.context.mailbox.item.loadCustomPropertiesAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { console.error(`loadCustomPropertiesAsync failed with message ${result.error.message}`); + return; } + + customProps = result.value; + console.log("Loaded the CustomProperties object."); }); 'Office.MessageRead#location:member': - >- @@ -13897,6 +13928,50 @@ } console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); }); +'Office.ReplyFormAttachment:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml + + + // The async version is only available starting with requirement set 1.9. + + // It provides a callback when the new appointment form has been created. + + Office.context.mailbox.item.displayReplyFormAsync( + { + htmlBody: "This is a reply with an inline image and an item attachment.
      ", + attachments: [ + { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", inLine: true }, + { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } + ] + }, + (asyncResult) => { + console.log(JSON.stringify(asyncResult)); + } + ); +'Office.ReplyFormData:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml + + + // The async version is only available starting with requirement set 1.9. + + // It provides a callback when the new appointment form has been created. + + Office.context.mailbox.item.displayReplyFormAsync( + { + htmlBody: "This is a reply with an inline image and an item attachment.
      ", + attachments: [ + { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", inLine: true }, + { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } + ] + }, + (asyncResult) => { + console.log(JSON.stringify(asyncResult)); + } + ); 'Office.RoamingSettings#get:member(1)': - >- // Link to full sample: From 51b93b9837e822630454ac6f255e7ec24edb15e0 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Thu, 30 May 2024 14:26:58 -0700 Subject: [PATCH 546/660] [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 547/660] [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 548/660] [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 549/660] [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 550/660] [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 551/660] [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 552/660] [Word] (comments) Expand to include contentRange (#892) --- samples/word/50-document/manage-comments.yaml | 50 +++---- .../word/99-preview-apis/manage-comments.yaml | 30 ++-- snippet-extractor-metadata/word.xlsx | Bin 25091 -> 25222 bytes snippet-extractor-output/snippets.yaml | 131 +++++++++++++----- 4 files changed, 141 insertions(+), 70 deletions(-) diff --git a/samples/word/50-document/manage-comments.yaml b/samples/word/50-document/manage-comments.yaml index 17c2152e9..a059d4062 100644 --- a/samples/word/50-document/manage-comments.yaml +++ b/samples/word/50-document/manage-comments.yaml @@ -23,7 +23,7 @@ script: const text = $("#comment-text") .val() .toString(); - const comment = context.document.getSelection().insertComment(text); + const comment: Word.Comment = context.document.getSelection().insertComment(text); // Load object to log in the console. comment.load(); @@ -39,7 +39,7 @@ script: const text = $("#edit-comment-text") .val() .toString(); - const comment = context.document + const comment: Word.Comment = context.document .getSelection() .getComments() .getFirst(); @@ -59,16 +59,16 @@ script: const text = $("#reply-text") .val() .toString(); - const comments = context.document.getSelection().getComments(); + const comments: Word.CommentCollection = context.document.getSelection().getComments(); comments.load("items"); await context.sync(); const firstActiveComment = comments.items.find((item) => item.resolved !== true); if (firstActiveComment) { const reply = firstActiveComment.reply(text); - console.log("Reply added"); + console.log("Reply added."); } else { - console.log("No active comment was found in the selection so couldn't reply."); + console.log("No active comment was found in the selection, so couldn't reply."); } }); } @@ -76,7 +76,7 @@ script: async function toggleResolvedStatusOfFirstCommentInSelection() { // Toggles Resolved status of the first comment in the selected content. await Word.run(async (context) => { - const comment = context.document + const comment: Word.Comment = context.document .getSelection() .getComments() .getFirst(); @@ -87,33 +87,36 @@ script: // If the comment is active, set as resolved. // If it's resolved, set resolved to false. const resolvedBefore = comment.resolved; + console.log(`Comment Resolved status (before): ${resolvedBefore}`); comment.resolved = !resolvedBefore; - comment.load(); + comment.load("resolved"); await context.sync(); - console.log(`Comment Resolved status: ${comment.resolved}`, comment); + console.log(`Comment Resolved status (after): ${comment.resolved}`); }); } async function getFirstCommentRange() { // Gets the range of the first comment in the selected content. await Word.run(async (context) => { - const range = context.document + const comment: Word.Comment = context.document .getSelection() .getComments() - .getFirst() - .getRange(); + .getFirst(); + const range: Word.Range = comment.getRange(); + comment.load("contentRange"); range.load("text"); await context.sync(); console.log(`Comment location: ${range.text}`); + console.log("Comment content range:", comment.contentRange); }); } async function getCommentsInSelection() { // Gets the comments in the selected content. await Word.run(async (context) => { - const comments = context.document.getSelection().getComments(); + const comments: Word.CommentCollection = context.document.getSelection().getComments(); // Load objects to log in the console. comments.load(); @@ -133,14 +136,14 @@ script: .delete(); await context.sync(); - console.log("Comment deleted"); + console.log("Comment deleted."); }); } async function getComments() { // Gets the comments in the document body. await Word.run(async (context) => { - const comments = context.document.body.getComments(); + const comments: Word.CommentCollection = context.document.body.getComments(); // Load objects to log in the console. comments.load(); @@ -191,7 +194,8 @@ template:

      Try it out

      -

      First, select content in document body.

      +

      Manage comments in selection

      +

      Select content in document body before proceeding.

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

      -

      -

      -

      -

      +

      Manage comments in document body

      - diff --git a/samples/word/99-preview-apis/manage-comments.yaml b/samples/word/99-preview-apis/manage-comments.yaml index 85305a279..84d544585 100644 --- a/samples/word/99-preview-apis/manage-comments.yaml +++ b/samples/word/99-preview-apis/manage-comments.yaml @@ -23,7 +23,7 @@ script: async function registerEventHandlers() { // Registers event handlers. await Word.run(async (context) => { - const body = context.document.body; + const body: Word.Body = context.document.body; body.track(); await context.sync(); @@ -44,7 +44,7 @@ script: const text = $("#comment-text") .val() .toString(); - const comment = context.document.getSelection().insertComment(text); + const comment: Word.Comment = context.document.getSelection().insertComment(text); // Load object to log in the console. comment.load(); @@ -60,7 +60,7 @@ script: const text = $("#edit-comment-text") .val() .toString(); - const comment = context.document + const comment: Word.Comment = context.document .getSelection() .getComments() .getFirst(); @@ -80,7 +80,7 @@ script: const text = $("#reply-text") .val() .toString(); - const comments = context.document.getSelection().getComments(); + const comments: Word.CommentCollection = context.document.getSelection().getComments(); comments.load("items"); await context.sync(); @@ -97,7 +97,7 @@ script: async function toggleResolvedStatusOfFirstCommentInSelection() { // Toggles Resolved status of the first comment in the selected content. await Word.run(async (context) => { - const comment = context.document + const comment: Word.Comment = context.document .getSelection() .getComments() .getFirst(); @@ -107,33 +107,37 @@ script: // Toggle resolved status. // If the comment is active, set as resolved. // If it's resolved, set resolved to false. - comment.resolved = !comment.resolved; - comment.load(); + const resolvedBefore = comment.resolved; + console.log(`Comment Resolved status (before): ${resolvedBefore}`); + comment.resolved = !resolvedBefore; + comment.load("resolved"); await context.sync(); - console.log(`Comment Resolved status: ${comment.resolved}`, comment); + console.log(`Comment Resolved status (after): ${comment.resolved}`); }); } async function getFirstCommentRange() { // Gets the range of the first comment in the selected content. await Word.run(async (context) => { - const range = context.document + const comment: Word.Comment = context.document .getSelection() .getComments() - .getFirst() - .getRange(); + .getFirst(); + const range: Word.Range = comment.getRange(); + comment.load("contentRange"); range.load("text"); await context.sync(); console.log(`Comment location: ${range.text}`); + console.log("Comment content range:", comment.contentRange); }); } async function getCommentsInSelection() { // Gets the comments in the selected content. await Word.run(async (context) => { - const comments = context.document.getSelection().getComments(); + const comments: Word.CommentCollection = context.document.getSelection().getComments(); // Load objects to log in the console. comments.load(); @@ -160,7 +164,7 @@ script: async function getComments() { // Gets the comments in the document body. await Word.run(async (context) => { - const comments = context.document.body.getComments(); + const comments: Word.CommentCollection = context.document.body.getComments(); // Load objects to log in the console. comments.load(); diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 145e2e26d63cbda6c75447160eb1eff07da1a36f..7ba5d4257619144b3b1ba9561be76a3e45417e90 100644 GIT binary patch delta 17460 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 DY75a& delta 17319 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%0Asa*!C$A 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 PMNN)QQf2!a3sM3Am{OA6 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 244e8a934..2064586f3 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -15626,7 +15626,7 @@ // Gets the comments in the document body. await Word.run(async (context) => { - const comments = context.document.body.getComments(); + const comments: Word.CommentCollection = context.document.body.getComments(); // Load objects to log in the console. comments.load(); @@ -16111,7 +16111,7 @@ // Registers event handlers. await Word.run(async (context) => { - const body = context.document.body; + const body: Word.Body = context.document.body; body.track(); await context.sync(); @@ -16144,7 +16144,7 @@ // Registers event handlers. await Word.run(async (context) => { - const body = context.document.body; + const body: Word.Body = context.document.body; body.track(); await context.sync(); @@ -16178,7 +16178,7 @@ // Registers event handlers. await Word.run(async (context) => { - const body = context.document.body; + const body: Word.Body = context.document.body; body.track(); await context.sync(); @@ -16211,7 +16211,7 @@ // Registers event handlers. await Word.run(async (context) => { - const body = context.document.body; + const body: Word.Body = context.document.body; body.track(); await context.sync(); @@ -16244,7 +16244,7 @@ // Registers event handlers. await Word.run(async (context) => { - const body = context.document.body; + const body: Word.Body = context.document.body; body.track(); await context.sync(); @@ -16790,6 +16790,26 @@ await Word.run(async (context) => { context.document.close(Word.CloseBehavior.save); }); +'Word.Comment:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + + + // Sets a comment on the selected content. + + await Word.run(async (context) => { + const text = $("#comment-text") + .val() + .toString(); + const comment: Word.Comment = context.document.getSelection().insertComment(text); + + // Load object to log in the console. + comment.load(); + await context.sync(); + + console.log("Comment inserted:", comment); + }); 'Word.Comment#delete:member(1)': - >- // Link to full sample: @@ -16806,7 +16826,7 @@ .delete(); await context.sync(); - console.log("Comment deleted"); + console.log("Comment deleted."); }); 'Word.Comment#getRange:member(1)': - >- @@ -16817,15 +16837,17 @@ // Gets the range of the first comment in the selected content. await Word.run(async (context) => { - const range = context.document + const comment: Word.Comment = context.document .getSelection() .getComments() - .getFirst() - .getRange(); + .getFirst(); + const range: Word.Range = comment.getRange(); + comment.load("contentRange"); range.load("text"); await context.sync(); console.log(`Comment location: ${range.text}`); + console.log("Comment content range:", comment.contentRange); }); 'Word.Comment#reply:member(1)': - >- @@ -16839,16 +16861,16 @@ const text = $("#reply-text") .val() .toString(); - const comments = context.document.getSelection().getComments(); + const comments: Word.CommentCollection = context.document.getSelection().getComments(); comments.load("items"); await context.sync(); const firstActiveComment = comments.items.find((item) => item.resolved !== true); if (firstActiveComment) { const reply = firstActiveComment.reply(text); - console.log("Reply added"); + console.log("Reply added."); } else { - console.log("No active comment was found in the selection so couldn't reply."); + console.log("No active comment was found in the selection, so couldn't reply."); } }); 'Word.Comment#content:member': @@ -16863,7 +16885,7 @@ const text = $("#edit-comment-text") .val() .toString(); - const comment = context.document + const comment: Word.Comment = context.document .getSelection() .getComments() .getFirst(); @@ -16875,6 +16897,27 @@ console.log("Comment content changed:", comment); }); +'Word.Comment#contentRange:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + + + // Gets the range of the first comment in the selected content. + + await Word.run(async (context) => { + const comment: Word.Comment = context.document + .getSelection() + .getComments() + .getFirst(); + const range: Word.Range = comment.getRange(); + comment.load("contentRange"); + range.load("text"); + await context.sync(); + + console.log(`Comment location: ${range.text}`); + console.log("Comment content range:", comment.contentRange); + }); 'Word.Comment#resolved:member': - >- // Link to full sample: @@ -16884,7 +16927,7 @@ // Toggles Resolved status of the first comment in the selected content. await Word.run(async (context) => { - const comment = context.document + const comment: Word.Comment = context.document .getSelection() .getComments() .getFirst(); @@ -16895,11 +16938,12 @@ // If the comment is active, set as resolved. // If it's resolved, set resolved to false. const resolvedBefore = comment.resolved; + console.log(`Comment Resolved status (before): ${resolvedBefore}`); comment.resolved = !resolvedBefore; - comment.load(); + comment.load("resolved"); await context.sync(); - console.log(`Comment Resolved status: ${comment.resolved}`, comment); + console.log(`Comment Resolved status (after): ${comment.resolved}`); }); 'Word.CommentChangeType:enum': - >- @@ -16910,7 +16954,7 @@ // Registers event handlers. await Word.run(async (context) => { - const body = context.document.body; + const body: Word.Body = context.document.body; body.track(); await context.sync(); @@ -16944,15 +16988,17 @@ // Gets the range of the first comment in the selected content. await Word.run(async (context) => { - const range = context.document + const comment: Word.Comment = context.document .getSelection() .getComments() - .getFirst() - .getRange(); + .getFirst(); + const range: Word.Range = comment.getRange(); + comment.load("contentRange"); range.load("text"); await context.sync(); console.log(`Comment location: ${range.text}`); + console.log("Comment content range:", comment.contentRange); }); 'Word.CommentCollection#items:member': - >- @@ -16966,18 +17012,39 @@ const text = $("#reply-text") .val() .toString(); - const comments = context.document.getSelection().getComments(); + const comments: Word.CommentCollection = context.document.getSelection().getComments(); comments.load("items"); await context.sync(); const firstActiveComment = comments.items.find((item) => item.resolved !== true); if (firstActiveComment) { const reply = firstActiveComment.reply(text); - console.log("Reply added"); + console.log("Reply added."); } else { - console.log("No active comment was found in the selection so couldn't reply."); + console.log("No active comment was found in the selection, so couldn't reply."); } }); +'Word.CommentContentRange:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + + + // Gets the range of the first comment in the selected content. + + await Word.run(async (context) => { + const comment: Word.Comment = context.document + .getSelection() + .getComments() + .getFirst(); + const range: Word.Range = comment.getRange(); + comment.load("contentRange"); + range.load("text"); + await context.sync(); + + console.log(`Comment location: ${range.text}`); + console.log("Comment content range:", comment.contentRange); + }); 'Word.CommentDetail:interface': - >- // Link to full sample: @@ -16987,7 +17054,7 @@ // Registers event handlers. await Word.run(async (context) => { - const body = context.document.body; + const body: Word.Body = context.document.body; body.track(); await context.sync(); @@ -17020,7 +17087,7 @@ // Registers event handlers. await Word.run(async (context) => { - const body = context.document.body; + const body: Word.Body = context.document.body; body.track(); await context.sync(); @@ -17057,16 +17124,16 @@ const text = $("#reply-text") .val() .toString(); - const comments = context.document.getSelection().getComments(); + const comments: Word.CommentCollection = context.document.getSelection().getComments(); comments.load("items"); await context.sync(); const firstActiveComment = comments.items.find((item) => item.resolved !== true); if (firstActiveComment) { const reply = firstActiveComment.reply(text); - console.log("Reply added"); + console.log("Reply added."); } else { - console.log("No active comment was found in the selection so couldn't reply."); + console.log("No active comment was found in the selection, so couldn't reply."); } }); 'Word.CompareTarget:enum': @@ -19177,7 +19244,7 @@ // Registers event handlers. await Word.run(async (context) => { - const body = context.document.body; + const body: Word.Body = context.document.body; body.track(); await context.sync(); @@ -20961,7 +21028,7 @@ // Gets the comments in the selected content. await Word.run(async (context) => { - const comments = context.document.getSelection().getComments(); + const comments: Word.CommentCollection = context.document.getSelection().getComments(); // Load objects to log in the console. comments.load(); @@ -21067,7 +21134,7 @@ const text = $("#comment-text") .val() .toString(); - const comment = context.document.getSelection().insertComment(text); + const comment: Word.Comment = context.document.getSelection().insertComment(text); // Load object to log in the console. comment.load(); From 015a041622755eb3dd295a07e0114d63632c0544 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 13 Jun 2024 13:33:05 -0700 Subject: [PATCH 553/660] [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 zcmZ9z1yCKq5-5thyK{hpI|O%km*5sGcyK?s20b{z-Q6u%kl+&B-QDeTZ~dzK-rK63 znyR+ho}TIH-k#+@kYPiRwVLp-V#~I=)nHwC63~WYCL4x-PU8pUQ&te-eyV(Ve4$>E zL;1gIze)qAAl%=>+=y!PAAVNqGj3jG?NS4OJRWZz*0L^M^J^Gw{}yiN%V7$;Bn)O4 z;B@Mi94@RCky0ppU&d*~LRFZ~rgvq3d*1V<-QAaqh=GNOkyk5o%jAt6RnXROqtW{p zU}a=+$jbhBIyq!QK>Cxg`D8QWqS)LSs!JSTO+?- zj#)J!0`*m+?MP1m-whc-{Du$bD2Ql4D>E;c zDju0E3~hZN`Yb8pPWp2rG*=|1cPQRhrXIx1!zWmu*h{MmD^t0Niqi4%Gc2z$OivEr znIlOh<3N^?UE?`;j$ULt-TWqI3ob*_#ntlGbsCSt39ZEuxSs%YaG!X>8nONq#OIs+ z#`Js2UhEXJp(S;M;GLM6*|SH_06J8^9Tp@G z=HAGCDR)T?GF80?@`NrH4gXzY7b%nLjn?e=vj(JK@>6JofZ`=gH!Aypkb+$|BvVhMmx3yF_&|)T-_MBzDo;i?`rJ zeL|=^3EfBjcVb%O*%t;iUr2(S1q zLmr^l2PD+5Fx6Ery8w>!OvQuhwWM*A=EN{AVRfl&tya0-P{BWRaT-{VIH8bOz8ChT zFhM|2$bfB80H6_v6*i2p3)p8gn2Ucbx*U}-vG`v^(Zy!>6g8+aBk0P3q$|wN=cLmL z>I4X@5Y6E!mfcSvG`{Y&kubqvZt*5+)UE(5>$Y;q4u+$anrJcQ$hyiZodP|&BQlh( zuBS)SPOayWN=PO#aa;NJ=4Rrj?k(H+G0*Z~yp1_|1(4-cjnPx_>~DszKw=T3ps`fN z##>Q>BU^&Hf>E(ADPQ5k=M^YXWrCiE-y& zt7hz$axV9Kw^T9Xk6E>+C?_onaoqU~M;C&0QM_pra9}zjw8Skt{xn6JkSE*EF>m?JIii*Sy0!-toM>MP zc+2lO*+?!R_;0q!{%QrIyi%)g8vcQlZ+7{?$k6de>o`;l6J0|-#pHCm718(G)P9^q zEH=o~a&wggdM7f$^LvK*6G&9GKG;N1d`c$Us((st-8xR(kou2?kLIvLxx>9nl9*z}?lvb1~u zOaAon@$Tib=Kp-P@yTq*vFZ+g>3PaN=U9I2KFR*VvHePcn`Z5vdF8(2Z0M9^@yrm( zGqtWyz@@=h^CbG}qD*hL<468$RL>irAroB@3WPszCva2J{b)KX)|Sp+>EQL-MSHxj z)SaU*bw-{nB4El?DwS-%M5F=nxV9T9yUO7n&NW1&2=`r5^sqKxEo!K**Aue7Vs)PvcctUV(O6Y|c`Z1J^m3F_{vVaPi_cT)%EaC5#>G<`Eoh(C;m?(zvGa?hqHwwF1?zz0lm!S-?TEEdyLZ zw=`fT(+OQzNPmjczU6UkI}+(XY0{`Jkc_o9tO}`7uI^yG(<0i|sv_yX)e-ma-{wYU zPV<;s*qh3mT?K17!N6og;dS@Yg|s|xPRJJrICI|tN(1yGgp+0J8ZjH)jPVGW5B3jp zkB#i{*qgaX$QSo+)LWyyuKIffM8?hRDR>)0`|)g%;u7wTVjFjo4>^Bi_?Jr-P&>4w z>=Mg&^dksh7c7{#R}_K;g%l#~!<+LY>Ec>oytxzLzx;t9vx1A-hbG#5_Zt)h`N4{E zNA7Vq1sXV=*nc70vV#>Qf&lWty;JSiMixD1j*8~Lg9ixEAYdXp4$&}7e{{%unZm1n zK{EJ?e_^@&!O^_sS6t(+9w-w6%GbI)g;f@1tH4)ON$6UV;3)SB54Xt3LYczcGJ_R7 zEG;MOO2F?~DZpNCToZfN9w$dj5T^W65mcfgmq4*{lYtnyw9Zu1DJIhV&DeOip2w#> z(xj6UPA0@w>vGPvE7MB3m^imt%1;x~id;D&Pv1=74cMZ}tdv|>iGzJ$p{P0shMgH8(iWwE9o(u;Fx5^%h4 z{=M;g7_BS^@DWCrXi#^lONu}dRwV~8^Xsjj?2$1AE~$M@_6J+tI$w`OF5n>f1J9K6 z(-N@hC+n6tAqQtl3lhgGQ2804`8bdDLzXlz=alOEVTX94i>7A>Kwagi6Duvo1#odK zaaVYze4jdwD_?5AFRO-Y&d^`_j_#-6sSt{CUwS`L4^+>5LjG!A+MSyNTvgAm z7d0%5$HOx4w#sm)NVj*KjLXcZ^t$< zTd{ltAB^vBm^}O6<*Hme>nUx^71mf=^cOoq*)xJ3He;%DAm#{-Ynz9~UZ0R;oXgUk zvi)(U0O7m&``LLb2TPaEZlsq2e(9aAk#(xV!T=c~n=lBYQA@SatzX+s_P5e2?&~@i znD=VEvrCs_8HZ(~{_Q$UsA=XM)8^a;lw=o}+iJZU@IRmrW$*uXnH{-fAd8h+a;)Fp zC-6i{F8+BL1)*U;VlDtZ0M#Rw+Zhh-G;eVTH>I0P8dSMErVBq{zj)e|6B=rap9hA; zA$*i>mf5x{NgB)^=-UleI~OQ3Z~lz>?%w<&LOE6tR8pNqk9N0{_%>XvL!?Mkyj0!c z)}XUoarajyB=mFIx%#AXyT8?aaaQ69wmt5Q9Ksi&1Q`^5(os+?bC7bmN`e*yLj}9?<8hp&ZiV3*hRFVT0-eV8nh?Xb^Oic%Z1ePyNvj4v5{| zjTNQ@?G^`>NTkLSzw}D8yFTQb&(0X13D5jBU+CCCE!=0lD1Da+IrtpB0#M@dC$$=d zQDPRwt@_F(l9&*sofYF@FW}$VW=h*?w_=Y?$C6-Q+mSf4P|q1=o*=H!tqLpin4F;t z-_?b=Lc7m$Tv8RT)vJ9R!VcebL$|IPE0ql!#^3{d zQ_+=RJ18-lr2mAFcN}wZiOgog{j^ed_FZIo89X=56!*W|@#N&D%@nI#Kfp{bPIB zOqsu2AvHT}JaGjJx>yQg=YlwSyer?RQ~OnqaAB|<^iw^SOuwker*kJAZ)s;z^jIM% zU61HtJFw_J2o<0*r^~ zEqN8Cej6;(60*XBQ>02@16T(ufzMdX$9DocZNnS*Q&F2-AGB-qE0ON>2yKEu^7*I! zYy3}w7Y6GIW}V9%vGGR?8T|?^B~>OQ{0(e1Q6$;@cT4}yfepG* zedwWM-4m=C^M4X(sg+RT=dk$lk8$`MAMBA*|Axn3mx?)-?7)>pZ-?8A)NKJB*toi`i&UFl~hM;BzKLR*rhOGfpMR**m0KF;)&YFSnq={ z&b zJ>yc`+ElBMqWopzigKlVCwsamx=k{wXsD5@1iD{zYxteG{-w?Lpk_^j%sjLN-|pwW zbXhP-V49WMZxj+!`SBF_ur|fAq;8|szZHky;R13KlYviTjYU~3Sbl-3%I5NCeR6Px zd3Z9CbowotVLnuJc%jiGQFKgKgO>hyp|dGum`2%!cr!*h_$kibmAox)WC9PcyU~@m zJW9ip4vCrblok+@7@=U% z&7*yg2@~QZ-GMcUrHvm24?{=|uH{$b2N*TyX`dNgP$;BJfwU2S!Guf=@#rhLcG%yY z+PutG>H`W^VHc*>^8dXU#rCPYUB=|1`JjC?6g+1Jrw{Qp&dC_^xLf%9QJUc=n9k&V z3NN)CSe3A`X5`+yQXux1`!;4XO(?m6o(FY11UhVNBz|iG*LK zylNE{Bx7Pk)aN=oVERKPNqaG~*}uvpk>Cl)T3rtmLXA#vtkPl@KI`D?;fZ&3xX4a3 zE`#pQjwn6+P8pOZD~iBH4cVsJ8NTW8g_s>>4;H97`>81#Wi)!9mYktRNt*7bsNtMkW;QDL|a(eY~PB<`zW> zNwGVV;^phEF9;}!(M1=Vqd7PCmZeK?)3o*bMu&wlW-yxLbr+932pt3izQYK+c3y3A zc)C7zEkk(uqY4D14Xoy}7_|&S_cae}HT|^#HTZ1U@2YfAIi?pKpOz?b&c+ACyV4^L zhi*fPL5+GNNO&zxsGi*$Ft~)Kvg05kEXm<#%q_&XsR{z@I!JsF#Jmpn#JSd7&I*b= zF+SBNu~g6V7AsUS?;qlCrPCXAA|B)1CKHjxg6q9O5G4t@^qoH-YyHzEhO_z9XF5RI zov#xEem!AyN9s!tF?s9by>%*K;_qC*!ZYE97Tb{cF!?@51+Fc6q<%3wFMon3N{c@m+8W8X^ zcDc{`6F!VZN}NqLzUB)Jl$Ho~zt;G6D*KVt__$$=+wwCj&7AYS|D&Zp{Tu4-OY8I+1ow5Cw>e4hy|7 zE4(yq&ic_lY6$wK06vML(?6C7Xk=f^tZDQiIr#$btbm1Hzrq4@R_%%6v7+AwI-OU5lF zR5HmB(dD3bgLN7Ix&={QiE4CIS-hR{>|TkEwn>m){tY9--&QULh0q-&=Khve1(FT( zdeGf0D_wb-*l;ezMRv0iGmsgm?;RmR~bHV&wWMxa1O!e@Z^CG-B>6SaL}#xwi* zR&f(QHysy!5g&!k#3KPD06NZ!HK(k&%pRQ2UQ=a|&PQ5A=!GLI!FdM%bYYSIbx0I@ z70l90z6ZF%>}JB#G&*Pq<;}krKJ$?s1L;13Ys=|t&;2dkBpwp@upSV*fak_^Tf)xr z&SnXvKoZJGI}pu~sx}ybA|BiYBNZf?nBmE^$4&j8&LbvUf}-qs$rQzSh`rpGz&u%u zcsUxZ5M=70fZGIL#5Mo2eAM%iLI$;3L5z&t-d$HTF;ff#>+t-Gm6&5OKt7T{y=>66 zkGQOlsXmsm2^|)UvnUv**Prp$P4}w?B_h+HIY@00kKV5}>TfrAM3 zv<@$?c267y0Eny(h8vX(54vrcsUYmpq{0BWgDAyB8QQ=AfC8`{oe3eWcQy1eW*?CP z7AZ zeTP4Fhk`Icq7$my-gV1!dGe3nQ`OSgK$9E|5Pk6MN}_7(e>7#|D9PJ&kM3dIPE{$T zE52_2L!K`Ajj1epj(}dKxx3S@P>q$Obn0i+Y<^(5jq})xCAJlg2(wEzfsUwahbu(7 z3FD>%J46y3-Fe5{`l3>hKlmojj=C9MJ@Bv2M<%P>a`2img3cg*k8QRWVldHn71Vjp zFpoW4Cq09W5jsE9;YFxc17n2SrW4nPb@r`~5Qv2DhwTSRX!u^M(F5CaJ-vh1eNG+? zCE-Qx5{AQlJ@W5|WvN~R6&%vQ8r_!2QY_6oRXUZFbH>x^H%VL$R#u{!^ZtHhYQ=hw~N&|0*2}2st!O_#h}sObxUE}Cv<-Ptxt1{rH`y2ZLokE6loBFIhg2YHSAtf|yzwk|JXO z6m%^kcBr$HI5qO=jgW?~Kz2W}1QD1fUyngV$`KEt_1LZ0W^^vR(~?W_9pg-8La0!-%pyA~@SE!sLqX>5=ZE(&A!?zD}DDDI%EtkTrj4nQpCL)*~F` zt0#XHjJaZrQn1LC*eMEF^vi8g`ujTyQf{&+uf{SZfdc*&8DqzS7x{_e*a&x=x89E>w#{Tc9>6H6^6Z61WG zvjdDxC4%yd7pam(L2%&wUrZWEBW;?uwaA<6>?i>@Dec|uYb3tz7(P54*iJ^^^&wP= z5c*>3dHgWS-hiJwZdsJ*@gOTYET}%bK`~`cGD83m&yRdcfdKvJ+hQcKo(Efau;+veW9qvbbn-mo$Lxn?-D3C@=ayO zgNh;`{B0&<`Fd2oIG%evGW!84k)!b-%ms&~nbsSUBETF7Kq~ZVzayK%KX_CtS7$kC z=pEI*`95n0;sO(3NLy!HWn;2pfMoI!u~4C|^D$@26H5%Qqo%`v&k0rL(lWzAKI@7;WOfDclhCD2Ab++Um z+<5K`ii}@YqO{?*bCA?dck-IIE4vbXq$EU-Fx!Dt3)ZDb^i@>I;6X{Y6Q_uSH&1@Z z30uv`)xjBtXMeB6SSpy{(a*reNVaolliAw#$B3A6ZM;@#+q0M^D2GRn$RKhf5 zZ;JC}7?~*bzD=h4XSd9i(elpDh$U%bFJ&5l{Kifdrii^d`3t?lNZthSg4eR!qV+N8 z9a_eYT5fe-fCyA91b1528w~YsIar~eFf>$hz~Snf{(ny8E#(P^tPwPp1r4r?=xJUD z5^;+2P%AFDLayZWR6oe+NlBJ?L8<&38y`RojYFZjbKw^ZV6*7xOAw+tj<9V*t=5YpUzXJZr-N*YXQ6_SRz+uhREm85zr|>%2pkEk0Bw`cc z`EAl297>hXu>O5&2qJU09V2tNKRpL|DZGVEmj9ZnVr~A@!L@#fst%>}PnwnfsW%u$ zz3|h@enO}fQcMHBOTMJLlfm{2Qi8h!C*L|^-VqFi5^-jV%MR6gOtv|uSR&ff0 zdMaGWmYE|E>7r(o5VB7(d*XSO^sq|u=uqIEFqTrjcQSePiefi=_j&M42UCC;a*iX} z3)Mb#zepSZvUO;^{bdwKF_S0a0ddzuTy|41Q4M5g5$AlitB6aHo}oF_&lXP=y+|Bi zv{cn*)dlXsGvViw7GZvXb0$A%h|^5ANZBC4&dQk0NLOP=8D5YjV8OURweFLr++&M> z;U)Lor<6#*?UgLuZ{$XWP6WyPB4R;_gSr-~&`T%~b+788z#JvROHSX42axxe7z4ub zn8U4|xz}GK@MJND?FCu1qzwMaNGgw_7Kq*#up^}{HL$)5vKs)_@uxzBmJ(i|+EhN+ z_qj0T0eE?-rUcq_)N0XneaCz#64E1zX-uwY&`aI!WfFA3I=hx(rXT>J^eHN^#cKbN z1TNF~(+wPpKq47%#xG9J83GDLKJ~IIFq;IqkxqhAJ48GOmfYpP%_4ljf~6=+*PN2r z7&(|e6j*``6YOP1r}7;-iMRj?9gYW3Xr(t6GDxTqK-Ra}>8{^!P`7BUIL5<(LjrU? zgkvV6pfSa#fMzrxU;^TZ3Ci#~tF>B|h>8_b=A9f$n%e<*5oad0>~M?Vw<1L~PFfQ3 zDdjqV9WMSP0WAPf^Xw#iO6>iv@G|nbJ>`g8H%a~pSaW^n2i5VNMIT^)3hDwz%BJIs zMqseW_3utL{s5x}2lz7gG%>T=70*eEF6PdEY4s0^3Iy>ESeaowrBLHir)&Xq@`5EN zVEtNX30&YsSJITesk0kJwaOPUac%{XwRej{M)Lo45cuH_y~wo9qib)jZIzS!i8oAsSoA(2k3*5N55%Nxzuh-HFVUfRCbHw@8^y8T)A1zSLuO_+ zGnb20QaKc0M+qhXAbktiWg{o4djiv(Y)=JuXfc5=0UT0ZHN)|E3JizSj6tQfCIFoo z%)?&QkfL`qmvR83@JjHoWQc`NYaoK!pGX9S_GAs1w*Gqd?a(F=FZsF5bXK!=fS2p@e*b@I@(whrmKBSodOud z=0Ts)qEIJuYrM2VifJYc)OR2p2#P(I&cIPK+WCqXpw{?>xkp3}ZAM=uOj3`-#qh~D zJQsim170_^TcsmHp&SUZXsX_*Z27k86k=_WU`rT-MtKkvC_00fEHi5#F%)R$w=;cb zDPeEq%{m!x@~Ie8f_P6e0u1P6nvS521mGpOn$#}gisD6TxwOevKa>}5blvm z6^0*^B1OVi#i2L|gMx{OuD^{elE{BjB}6kMdy{@8-9gpsARQXci(9fh9QSt7ud_dm zf^aTJ~;!R`=smW~#AK*ZglR;fuaCg1G2aMS= zCDkl_ZaUtjhnYRG&174t$%!&rCnM6COZBQs(VcVNRLm+dKR$zCMho^Q{41~MY!vZ) zW6h<`jTl zvPUCCJwhRhIWnJ(q%{+zy*rh@&B5m1on(xd=!vf5B1o54OD@@Bxf3{>h`>;TWEa+z zSIC)W(j(TX0dNGq)a^=p72j>E9nO0T#uFw^ZboV&N5e01H{Y^Orh29%SU1(u)f#?x zEJpa=R7hQg7e=WDNM!VaHTT$d(3~WlMh+C=Nb>n5P&l8MoTt675M-uivhuf<+zYuO zf{y7-0fa4;x_hqh)fBvk+1se&BqgQFM{aF}Kv|ZkVK#-&;w@K#U<2I&t3LM&(xo_p zA)%fuzDVhqrh_sSzyt`<(Mx<)YzaX|M`#FyB;1gz;VeHM@fJH`=mAUqqa=p@<-uRk5aKroPVt8>L(u2X$P_)8?DM4Mwg#)!d;ryPuwndoCV zXw7|;YF9iG0PtCr#UL0(>?51;{0x?Ea!_E!OmZu&P2i+u*2G%h3sa0SV8TXW-=D09 z?_{C>#$XGfLt&|X=0vmyS&q}2FL-do0ABJ~Fk#L<;-&m zCa{{_Qw!mTjdI`cbbY+}ejZ`^D7ub$ze;=|M>l^~50ZYh*^@(uB~y z@#6l(==rK+LRy*jTuRfT_QiTRZ#Tid<*v`RV~vqg1sl=0y8Pm9Rd&?Lv7EjER5CJw zo3R!&X;T4@eCYSxO21;kF%8wYZ&NZ)x@mPq0*Z;&TiCFHDv$uC%{a!qc{Li|G_=pK zM>C8e_4L78Jf!bT3d3S?UQ6H*J^h6F+h6PjB%yC~Jr&`STK7R@e5EVXVrveO!(W?3 z$p0$F4wC+*NJz>W&M_%Y%|lZ_0cGRP2gB<3rY4W16{$0>4`{(kr#uZNLX1wRsur~6 zhfO4|nf@wr48)oKJMf~fqDqkk?#eI0#*xsq5~-*efyaBS%$jeJNRv%&cFV#Mc~;yDO2?!3Cy!P+CHv?UyNK;Q}>QM!HPW^J=JKZIut0 znacx)+IJXV>f46lPZ!V3Kno>%qDVH6<`x2YG&LS=H5-FQ#s1$zC1u|UQ$g>g{usJ*`<&^Hudnts%cOrBTs5B4 z_+mTlHc$&jzZq~;lcMFOx}UeU$GW=NFX$VG&WSlI{Vb}ErQ2^E&EN9j+lc;;2t&h` z4nv_NO#MXEB}AhrJ{H1R2isSXXx#r$3jX+{Gz|qx-qVb-pBxV_pkP30jVt_Xo4j&E%>=8r4Y zzJwWjm%NG%Nt>lfLcCaRU-%HUsjW{nk^d$30CPwa5LdfB4uag$5xRY;P4JCFt)eg3 z->g;rojKo86_2!lQi?W$!qXc+rbUEu>=_C6cSkRYNz`-SM{=TCa%-f>nKhLDi@*c2 z0*ZE{(2wNv`fb1DvPfn~MG2~B3Ty6X;Yh>BoQBd*abYx3=m;S^iD}*=a0uEYx4jE^ z4xj)LqeeRu6w7~$9s`_}DcNX^cHlVm7;WbH$LIw-f7rmXtQ3%yVE8cpWI~_ZpY`!a zDYvR=b_*%7P@vT{}OmN$`2BE@D^xZLzN2nGD658B;LW z3gJQ2x0q$W+0#zDD1jf5{dKj|78$1C_x@EYjLe^+p&R085viL+>_tM=_m5go?^M=h zk9ihE&w*T4C3NRTLooAOU1<+-ij05%p|;cZ)?bq60mm~*uEx5v`QP+chU~7!Xj0yR zoGh0Z$8y3s<~K>Hzq!Q&{aXssdNm2Y5zh%(ghg3#Af}x;RmboFG4H3;s`-VPu>`gp z&5^%$QU}qs_NRn$J|1cN-#!L{0(_{32I8oWINr$`?!U1%PfU;K5lfN(!8}AGrq`pq z)s%#jkQ87~>@w9<)Vf7$x$c)NdN|pktE1jK9*?%IjFfVccuZFlzIqe**^9qB^A9o! zTn8F;*#BjN1E;9Kzsl(X;%A!jdL#b+eKL>r3Uy8i0cupi=#{=tGjZo^!TM0?=}*2KOiCd>YUu8xIVd-~+R7Tsi} zRx5mAz&4%StHwa$q;{Ay-d7!!qYag!c;KS{VB}$1m z2!IVGNkIB8JMF0c7m6PeG%9Do%FS74$|d0O^npy*wSDd%%|6eivW-N>#!+4q86XH-nBKm-Xgzm_Pr{4rZHN#zDpt6U$~*++Hu>@0zGW3g39zf_vQE z{&8#XS#)TR+TSjbi}*geHjh+1-xjhNo|&wxkc(txySm+7D3ANj4vF~jckwz_M7wyf z&w8z7=d?xNaN1qQc#KvldEHwpx!f1tj`($}v5)6hXGphs@zt#9z1>`&-xtsP9Chit zx&b|VRrTejeKkt?F{@!zL(rn#mWGyb&VN=e&4}|=_iNd`&)z?D)(>@9Dvx7$TidW7 z>^DQJ`;3`9C#~O#Ry8-o=h2$=*ax-UkgtH+>UNSgU=l^Xx-;hbM(~?LqOqW|Nd_qoev^d-{jw z?KDOWhfpdGPHQbRP~|k@3K908K@=BRh3*1>!Lf%j@da`52!J6K$l&>1H|q-Ai53c zMc%htt~(f3{c|e(cP>zwd}gyoIH{s3Ve}Su0SHa zJ|yX7A1Au7Sqk|wkpE!K>3E&aNyrtEG6l{*vgBkt&BFd_7Z~33vF)lmk?=3+zT_~AMP^S$3tFKRiz_n<4K27K24$5b+D?|ksn4$2^Mj?cQPqrt7&dYd zXa-f777oCZ+^j|vGOZxaB3Bm6Bzbaxx4L7p_tzrLtMq5&ER>Z^p z(T;5fI_VOl#Dw%y=w{aJ2fGn36LGR55)nl=jo6MwM}@FrM}jd`ER}|sT(;Q$aL_2= z=R7`_Yakh>(!)SIM^s0aP^gNU?L6#ZCIPnLT>5+*B+jv2Lf`rtbmy~<79lSra=)BB zN*Y6uGiKzgraKJ@0D0|7gar;fH9f1DYFLddBx*HGo16xuu}0iQtBoZ^Q3rAYm?N zuIA=EjBTkc90Kz7wbOooQ6~~k6t0p-(YaPbKD?2%k$j9h#R0RCk~RmBz`~P7X+bK5 z6(z(eJ^yX0o3Gg%bj|_>3SfN2#fJI1DU_tdS8fEOLj6m=t$=Nr4dJzmfwbQmbH^LT zHh7Ob(G(P?iD90dGctRugqT*@G3fpqGtUX%E(&W`_%1vWb4!DY?*$6^9bwA<+bw=LkTy(cq7kE1uy_ptC{FbH)AddR!udcGDF)ZYJ^(tY%0U72G3ny{}bM?pQiMS<`M2n8booHqfA>x+uM1@fH^3eKEXcsPn|Z;`rC zaZWGX>;+{td0$#cm=Rm4=Fd8On7Va31;e(k&4$c?mQa}f5Z3P^j1tp_1uz%~>;jv| zAFC?J`>+PdW&az3YM{S?9uAl3vnVUvVcffW&F z)L!e@qGD3vL|$z_=d?1|u0P1h0c^e4YIF$~xNxt)-L_pfi(#!+G{7HlwN!fPSw%ndn@hNvyfIXOo_J zSpv@W{w}F$NNzk;LpmM`e=pl2Vp8uXN`hOrVL|i$u+{6|*${)Mi&D?p{E$wa4BAWG zd+p!6i>sAyFwX$pCTR4_nXqFQEuFv#b3lm7;GJl0&IC{Gf#`;L5q|1os=K?))Wr2WpPMp;EqDnu9RgYun3sN(|?ii!D${Bn;Xy22Kcm1n;* zi7{)8Vlhz?!hD6Bq;_7;q{m!(pu^&!RLmIZ3{q3s&kMdqJPLacv3pPK6X6AQF8deY zXYSq}jHUmS^ZM{qNL2F#AY;)Y)G_(N*^xmFCz>( z?Mc)IXd%c|xJbeawcEvhk=Q5SZqK!lk)0jDg$|38&L!o@5Qw-c+7dMru*T7RMW~TV zGDNx%fS2G;QhG^?V+|!Iy5a*xJbdxH`UxS9G~QEb3+>U{C!kWdIS%h^8L_nuP*VMk z4fOpyZ(&_9%H@56PsTM$q-Mgg}eOqHudei@Ftp1Q&&6^{0*{vWe5Xqq%Ep~o9RMPO( z7Ysi=9qG7=n3$jK6~o%KWO^ZEOy7FDX-ojv-0Q&F8Jd9Yt%9UWs!-_pb?fyd%eF!t z)%VteZl+F|P|j2%E|*lw4lviO(;=V8SPn zrkxq>@{cRNs`mgKo!Cq(qY2(a&=~y=5rI*4z7WH1L7oxi$WR3h^|_|>I1`k~bh@KY z;7#P#A-^U?W%)4de6S>)p=U|NiM24+joH8dA&6OnRyPmjX7>0pCEhv)MuRzU_Z2Cf`S_n3bxN2f8B{qvn;G zCulc1`p#vB{@oFzu;6pmxkVj#NNJ|$YX464YpsQseY~mZ&%`D*!42z#gH_v34q~8M zA}4VNt-I{~20s(h<0>i{Mp5@4$Tv?<=WQ&jI6$^ScZJX^AB>jakacR3~vwtm={MVZU(^E#$!Md6On z7sV?JUNV_O#0x$29_uxc!J{tvO{i?$Q>T8BD?IC49Bn4WM%|d41gvBfs@fHP!6S;p zhYJYK^33}`IlVFs_#cq}y|hQKMg$34HqH&H2$oeB;@|4b35-k#OxVKxDlCH(zi%~V zY7RBS|8q=qCY&NU4+cSlFp946vnmhM1}?%f==uXXu*0ervHl7I?4*keld)wp*D$ZH z1PS{39m{Si>%*=`#P0NAac6N$$u9H~|R@1fuTW4AUsQN2`oAQW=RwhZS_;@2BnvH%U?hrslC%!O(Wj0l%0;6R8Z6 zVKf9=6AVf;zPp|%LhW_~Qpta%14Ny58Ml~7)PJ;VotD01Vex3D0!Ovx}q zVJs#9!zcBUd=m2FuF?_8FC*Ld5MJm3thNEjkY0g=bbI-5d_l9=nh*=2=Ex|z%yWcJ zj(vZs>s2OVm#k)~HSlXZABD)eb|Ve20wZ7yaHboe#8kCq12XWKxNUmz;Zr5#oaPLTC`f^j~vF)nI`&jLLw1+1iEvHUsAHT6W{d zw;^851-HD1h$k&W*nQk8fM~LMf{ubJdm41&EY#N|N~ujoa@vQK{+&O+ns-L!crhEI zuWm|AeGy(*$n;lcZG@B;hA2E8wa@6AS-1D_Tcn#N!gn^w?yaKy<{ZUmV__F!Y1Sit zbd>bOhEGgKOP;?&|JMpuwWuIrYze<7G(dl)g#;NZ^t0g%Zou|PjQC_0zt~y}s4jt_ zdn32?70;V(z+u3Kl@=cRmgU|{=7(&s@kAHUki?wuHK0zah(j`;05;c?8mVb~>cpFH zLd}F!BPcmJ2!*saU&`MH?5yNvvALv4^po*7Ty`PT9>0XZ!I#0sYf@QDstZ-4RZVG* z1CT<)V8)eWGwiQ{D;xzUMYbU)XcRXUN!r3qA@vKTB`BC7)gYKXCK}9MkP*D}as|Gg z#b#2dfQ`s3{dqjIC++=tFthhJ!v!@Vn{SV=Fg-QdM$2mb;#?iu0oR&NHV-+*zYVju zO}8djAzYG=Lb@-BnbX}EdtQ|wx8D!%7-fWdSNQl5B7V~rtdUsl+23Ba8s!T{jxYg% zihoYbCBcMQV9pV1} z3*9@$>M#_aSw65Z5)ru66odGG7iA$K2tHGP|9dpS{w7jT06y@b2{rBin<4xkT9xSk zkuL-%7~>HCFJ%D%f%8Aa&z>q+)Km;gQVq!FUpMcfRm-hccHBtwwsndhs zOfmkun!%W6cu*JW;0<*=u!tE0Y05LI_NfN~}Va z5|^sg62BS~cQ2y8v5c_FUC%{&qO*=}xh;C#RoCOXlfV@7b9rO4c9ZZTI)xdYM(3n4 z(}_!v?}pB*vT;-T!nZFb6O@gIjP0r5H^=S-%Nx+&K`6iWD1|&1%^XZCs}dV5GY>8M>WWzh*88l8Z~|hW@EtmGn`ZbgW|KwL&P90OfON6HuU1$w z@l5$YN_%YOjOsdejjs?_AgR0uXxjR6hEB~TrMeP~^>c(KPuLhVaDah>xODD!R@HEs z5w+@Dd_f-gS(Y8ORAu4 zAB-rHwl;I$ZVaj(fyC;8^aJ<`nPMs9q{;;gCXOjetlx^~k39Y->4lh7<{SDEX2WTu zV^2RcAS&A06%EJg`EFtA9lH&6$}Vyn#RJJ6-qNHeHgtoH9_#^Yr9 z?t6c8;G!iJtwsWz_7^Ge!LM*JEy99XsH@F_VtxKF2v0=@&Eo68H6KoBuTj?a8w**d z$k9m3m~w>e`N!SB7a90MG#RvyH0S6H1=o z+@~a4Mj6NLTw1Ckajj5>0$`vGL1ue!%F)E;(E&3(F_(1RrMZfP+GQ{;*^KF_^&bTe zAm%ahcDOZB#scVkN`5x``@bgCU@Qtt5)(mnZ!Zq7;@eGtp%Vn*u^N~W*`W}#2LSE% z3=j}fKN75w$v#tfl?5y0g62%%XE)83zaIdbQLLgd(sE;{$wBTnMKt>w)^g)VHzti> zi4=B)D0j5eq|@dS>0Cx&JCSiB-q=ZiYI#T|N$+&V z$`IOI*Q{0pWGxIr)5!7Qs_E`ah@BwYUKyO_s}en98hAjx>t43NAG=yY%@+$sM2}5z zE}CU#iA6;N5fy2`4a0Ixh(l#O-?srh>e~#c2aYCf^E@3=ykn=b{IMH(gf?XOdo%NKs=b5NEi+QV?dQ7`r{ZLJ1x%$c*=?cwU zdgK$|2fiJTV5)u0s@=g~WJ<~YCmJ`mrNKfn)VpEG5|ckehR=8ock{%HzrJa@WAEG3 z+9NvzKC;#XtnVyh&nO%?lgK4IBr1YAU1*Lv{JK0?sgtX+bD?Y@JAx7$;hl@-n`OO! zmqDbVRQMC+5UiV~7^&XiOL@Vo1`|)S?Wytp0aF(LbuOw@t$#bO_8TZus?by5L8(@) zs5W`eSQlbaxM^?#HU+YzZuA%;I&#r zgZ;1iB|14|Lsr0o3iW~d|HzLh$3hCG6*tXegmtI}mAzE1fArQe|6ax|T*@H68^C+n z#haR5`|`I#>;nk`;^PD2KaWJ6v*r1$Q|Oo&-Scs^cJc9eQzJm~(fslF_izjGR)CH3<8RFC2l%bN z%U0mywnoqQ{kUcEnJd8x4WFds-}0FbqI*hRACFT*PuU{w-j;GxvD=>L6E^sbydfV= z1`2FfzT$cy?{oF1IM9*Z<>$t=-(h8Xu;Q6<5OYxyFAy^CPXrU+xIEYtbKbxQn^$Y& zAIcE`EcN9z+;7@IEawuT$3FByYP?uJ>eAx^?pYO>YvTucbn_R2AYwo3Q~wVb=yyH56M^%SypOPztceG{z7<4w4hRWHz%YbsuW3IaX^m)8<6uhl%x{7a6^?LZ}!3Sgc}u1u4@{ zUyV66o5HIh)L7*P6>W@z2S1mxZvfGKT2YnVlakrDMVzM5q9gFODqVnx!bj9x4OTuU zo;GP81z$l5f->~=|7v`j08az41;wH49Bpg7bP)Q@oVdJq^P>;%`HTc|^%)Zv|{F3OtbwRx$ zPcP*j+rXNeIrIS#Nw?jrJU4Na*uF}V|2nJw=Vo>yK_1fblY($>EwPX^&0cs+$HWdgk3YuSzL==K|U&%&Yb$hMxp1Bd!G_)~%wvo0RJii3blZFCH^7a%-pU<$?w-Mt0~nUW(=tN;Hv+s%Q^(u~`VJ{J z?`bSdP&M}S@2?BL_InEhe^H>KNUR;^#1K`(b2bsVWOG7Ua0$EJ0S>Zd6&0Hm@{ zV^E~v&L2aI{Z;o66?M|kKez%E+Jyln)#Q{bd6q(T9K&g)2OHV8k7^T!4Kf0a0P-h1 zOpFC<@I#=0>X$+^$1eqxC;2dId(ZGxX5d#!VR1xvLGg0NH~Sgob;5d!wKZgy=T6*of(R&#F&h%1E_a523^qh`wKXosUA-l5i7-h@6LX zk0a7@(6{0tVm$J;Lfe{CWw_BfAUS*eJ}fpXf<#8Xoj8*{MJxT%`ucQyU*e(LEog;MN)@{Aqu z=(_?;f7_g1GcBS2xG8Km6Dc#Z`-|AktVQtm-VXq~O7aDPG{jJ`)jFIu*8>MuI9UP< zZ}b$Y?s}&Dggx7N&AB5hAiJ1YT0A~t8s6E(1+y+l_4JbQCyQq%jf>_SIN`|_HQQSW zh&5%skn0f_I2QD;_kt|G7g5S>DTsb%snh!$SKYQe#?6r&{{rQ!?xOAim8HTDzW$lT6J<=S$Uc{K zaZyNlh&oyzDtzQi)f<2q{H2E9zKXl6GOl3sM}wk25tD|Z-#QXg;w34w@jIp~d|JoY z>ng!FwOvj1q!8lFsQKTf?|L$dk1_jkPx9`hS0ADlA6-e#RbRW_U*k6Fbp1+=O)wpq zTNNk}-N_^S!qY27GoA)?fxG@zF7*fzVmlN*6o}HivGdc^Paz?*U@N^8$YA$vO?;aG zDdFoKPi8VSW7yX46Bq;c)^eNX#b@Et;rnJ4lZ-qGEL*KEX5fvnXf6FJUU0~)Pp{U_ z((LlsO`lTJSyV1+UDxJwUlfMo?m%jP z-mY2{h(V6KVPqyvU`e>bJREURS}k>Y^C>DbK!h0N6GdC>UGPnxWJux4EM=b-)so@r zDJ2vFv4?U!)W$vL-*wzr=KAZc)-dbRk=49BW2}2Lvmv_*?B=Bczs6`W|JWX`hQ%>O z!9|HN9}&6QJQXY!rws*qM2dpkl=-HA_nuhEY=M=D4;f`&z_A5_VHDm18;Z`7E7s#s z0UVBC2R+<8(5_O^MO4x=H6(fF3^k~}d@gtwQs~EsN|s#W2{}cbk*7qMB2yC7)=x%z z44^RSmbL$cZH1Y7#*;=1_rxi!dqt$?q?b=7g9(mg_~oDM-&1=q_*7p6;T(Ey(KZv5c{{dM7mfiIqoOTwcuYebKS9?}g<`46Z$#3E)xt{IY8a*p&u zhI1lQQF-xuT0&?Ae%=Y9kWaZ)Eh=^@X!@75xv;aiU?3=7lo~Pbb+7RH@rP7Q0xcO` z6a1Q!S*`WW>GND6yuRZsDSY0Wk&;?wtwc!u0PMBBU^M~_98cH-%($>^u7}TxLYsM= zzrnMxc}W}gL$>ui3syM%wIoIiQvY6WeSEE|2z|VrFR!q3Jr-3?4L5#7f8eqw{Jrzq zE+jbuSn9=g@&ZNF<|4aWr&Qv}H3f}SKGT>d112a}LXZgy4M4JFL>ZE|?ib{kR8;>c zj7Cn20SxdQN*VbK2)TvytO&3voadMhr1IdcMei-AhzB%9f_5x07u2lCX0$0fJAE)u zY`F&{NpI16rgs>9vW1y!{{AuRp+p0GlLLqG6~2)W1MQ+n%GxP%_CSc(dI^z*)} z9MF+4L50$i|KmD_!lDS?=$Pwb`oFO+4@HRQZM5*+krIN#a_zAe{5?+pn%%*I%dX#m z4fkIAL=Ff@T!8FseQSsF7b#7|@o+Qlii0OyxjsVhBa!}w3jO^=*#?K{EdW#y*3 ztSIP+uaC%NlW(@EAcHAsG0+OLLQ9k8%^z(dhM;c>;IYU$eWQPcb|!?2(+ae!i2e_z zevOG^v)UcmZEX!4Rao-VaQpci#@}i!5!lC;BE(l@u|A>uRaPJ0tyniSFH4dg*;{$(?`ukm;1J=S@UmOP ziaA0tqiM~%AOM|0#I=Mw<66%;T5=);X8^?&89b+r$DtXRYhX_(+DX{r-&hC%?yj8Y zDsmb8KI0&^t&jqU#2hjB^aaI(SB|h8yc`qW%}hv7qI;HBg$PsmfEM4_FHaVB1Q8CO zSClVmvhX1#TV)CWNGF^W67w$T z_Jl1=K`8+MiVdWL5ex8>VT&WvrbUN|9|Z~N(}FK}a$}SGnnA_CKgq+QZnO`Zvf*U< zmX6{$E52o(f$e;GQn(CLaI#1GY(xOWKtVwefU6wdKa4S!j3x2q2f%{O8k=uI1c-$I zMINhw)Uc%h<6ryZC2HouWyesSw%@9YhN139{+3{X;7>|~zF-U?!SdFGPp+FgS>YMD zmNA@%<&Kpdgq`sw#Dn%h<05}locPU|wJaN7vgacHG5S_Lu&3``vvnKUQ>jRBC_ zyBi~gVC(MQdS#eDkDy20BU+ky$QjY56w@4Ddlof5$Y(yZaTa~jqbT(F1%aEVA z`m*0tD$a+n_|UaL6c9^uFc8H50nRe|t)M&LM*)GJikjluQz5IR0@H13PD}o^X#-4< zv{Xb(YdNZ5J6K1{3lktXsjwSRwmL5)@o14Ulgu)8ZDplKZ2=W=%~>ogg{37n)xo#Y zxS1#VE4k@+Rf;R~F$4aN1nLGl$!y6mq3;)bijevj@|+aLm9{hnSl?Pv1@NN*6l7cI zjR*$L)9|$tGSKCx;vb^G$j&>))))B#$ALFtR+R0Mt^UP2ugKhTwYu@=ux3~d1U6XY z*t_A9T`N&ldBO7Jp6$80NA;dsamdJU_QV`ax>4-Y8*MT9P<|m|5F)M*rjLK72}qI5 zL#Py|r-?LAi4v{GSw%vN5==TnVir>Vm5_=S=vEN)0aBNE6=xGitm3@+rj`%PPr*eg zv)xbVl4gez3h!Nx5CUqo_P7R`XSX(4p2HN)6G#nGB1GhR=u5Ov=J;tuzzfB>#|Dvi ze!U>Pc4w&%z2a7+ClQ`q>8BJ$NO9)p4EY>+Z6aRVhbuN$ez9l{VC&=hi?KmNLE+ol z(!gIzBQktJK>?X+qR-3LBPO$NG*6VZA}lu~MwOnVr_57DDCX20!ufv9v!M%>%eGoR zMf2|*8Psw&maAByNO!e>@F;6(OG>QZ&;R#4#cwGu0cNdw=2)Z~raT>Hwwqn7uyA2= zmoXn9q=0RTaD)^f_=6QGRp6p2hmT8Z6zoWTm6P_Mn@xTdFKZPI{E+mFdz62qsIE>| zinz|vmUuNg=xQS?w2xniQ`b#K7R&dOnZ{Wf3H*IMUh`hE6XdQ(tMIM@93_&QS7@HK zmFF`=Ukp)VCr~5pQoP+5wvK%lloNc;1Ngk~q06p>S&sey3k$`2+iySM@EzZqQmQtf38CN6=7b!#aiuQh&}O>&Hv!SLO_mx+kok zLZVV%5@in-GYF?hwy2vkrpZs|dB$OCr#l&p-BW~nVUeu)&kYTS~keI5&B_iLXzIe%FM9XpV1#@W1 z-7@qFD{@jjdgO`X9)Ss{*6`^4A*jW^IpWiS4wYsC|IS)W?9W7 zQW((j+Kpm>oFx=klXLJ1tNtIz39r$7x<{Wv-pAT1+%Z{qzLlIN<$&o{Jf=tKc0aan7s*`weL!<{>((BUS?r7D|thi~8w zx@rWQdPXo}X1?{fXI|zg@VIl`Bbmt8!7tN|e)*Cnyvjl2$&Vp1I-N~8so1)l9R@}2 zXAB}kgb8cEBPqu{lrSt0U_SNHH>r4Pw9t(M!3CjfTHK7O>h zi5pQhq=x0oQp^adrEGI7nv5aA*Fhd)b)bM*l_Z)EMCC&zFmvMO=nw#LrIPlV zH|+(OK+8XwXHVyx$xs+0T*X>JriuP$v^YS=`%6gZgT>0WIph?Nr0N0N-hNw>$r1s& zLf6m!*?@A2VL+64i0AWu>^!FpSDEWg6N8+%@WrB7Te6Tm4#|t>i~WotsEC??6P#*# zgd5Q<_Y9Sn@Q#Hp$zM!WL>Th@--GWr#9^B7?aF*r%Wk;vJFtaX&^psh*WE*W%IoIPs5~#;Js|Y?$9eQ zVbD{mZC1L2JXz&zHs>TCq{iR360pH!a4tp~_Aor_dnItCV3PSh*atsEijya`!2W7< zvMM|sC4+E8oxyc>#M(cPmtUjEAo?VIiUn1)iMj%~MzkK4@2}6v0=$*eJs>aiPEdzPkl5}O2V)@A=e*W_ z%{-~H^f`GCFxUKM85z?$HO@ooX-to)p^trAOG#z|I;SiOq$E7NP&#~h$uaJO`~ivH z|74%z6UL15l$v*w>IRx*wpKEGw~h|-y%UJaqFLOaAV6P=QGZ01jU_u4fMqvTR9TkayxcSP1h)N&AN&mFc%Ac^~U7>+4_B z`HXO~{4XxUQksanNj$a2Yed5&G#`!VZ>E5x>a)ocir(}eTiI^2Iy1K^Ez61EN-2bm zXG5z_t-YvCGS*pRn|aVbB6E4wO%py;Y44chMSTtlf*IeuO!3~}UGU8BoWQLPH^Mjc z_HqWgLRsaRKfXe2QFsXP?+v8&Sv?ibBqRV1p+Wez81Yx(T@DM$%#eICyop4DlV+Jc zlMw_sR!EAK4bcm%{P~h>JQ0GgWx3)$0T#>pc*`2XJgOYhx_Hw;Kn!jH=PH5bdhxpG z`{IaL8Cm)x1H4#hTQDBnzMrerxyHpledF!oyHzF5G#7MuIbAVV(DJru3AO41VS>>B z3z;6JL93v1i1|YtT5yp6`VddP60AY89ua0E^I#0oJ@H*bu%#sD4J&IsQUAm$vSHTZjtMfk08D_9 zv=c1IK@Ns?WNmx}acO__ZzA>H@QpmiJIj zBq3huG;OY~Vl?VDHfpXwRx+=iTrrmog#id=5Uc)T zR*k39f`^7LCeE!rvVJj8QZXS}ac|4F-~OE`i<)W)9efxEj9`@Fdk8i*oQ;=37TdX@ zfd`D>)n-iUrMTd?2OVOrF{{#|(_sby$+hD{MuvW{&V>k(b&OovESX55K=r{@5yd%%-=9U{${%Y)VgnEqFjOFJlyJGF2rR6UaJXaw?nW$s~fcqJ)USu;1p&&4a*AHqExe)S^1 z17D2Tm@ZAsC`$QyqemDQW*;WQJ(0d;jgRjkKpBoPCZ`D#Fw=N?4*n`_iKSg1{lbSR z`YTw}KW&JXMeF=qL~O0JCWfm)sZS`n!&p@qEf`1wPwJp}qd_&cq%(uPt}m z$*jK{E4Gtw^C^^!#L)t8K#2XxJj_8L?b-MsBr%PV;3=e{Ve<3BO(_Nrd0}6)G}`d= zF{W;cX-pGUJ`G=atlOinBlEfvw8Lu5SUK`7BuHqmBgpAj4;!*!q-Va%Sn%jfjf7ai&#yH%CD{|Ir6(FrmJYha*jlb6_iDpUSGZiWvS>2zPwV^8fjy!B{9 z0tka*e@JW2nj6q!z))mCNg<`s;RjI}B>V0t0fo0p84wyk0Rc7Hgg>G~UgQl&duvu{ zM^it#eFH$`p&cCr7)FxPh78ETtb)QRQ`*bD)8~i(TDPip4fceLBd&Gh$QhHtD$@n( zFp37fg0+Q|(}8&a={Mp76(Jm|X85>pz}US#H2U|DpD=PE{=c(~kzov7dEenf1=LEt_Ft(P?f45$rY(f#i31Z`6A(nnjmQ4g zg=Hgq!H}5s3&v8$*pqaWRan1*a~C&O!N{gW;ewH+YexCN&#>Pa1O$NnM+@$LxGWYq z=$Es)J7>{0hY=o2Qh=7@5j{C1fn_+z(7xMHNz|uNmUz!)Fw{6A-b3C8p?rPp9=$5hsf(9D&Z!4sY0!zj8@C z-Z_7iJ#b_`0%*hOeW}4PXPeer-3Kehl|DW;sT--wdbz(mIGn~kc-&d8QGJPZR# zO!VYc+f&I1yD%;KBDx~$mcG#h-7wPHb=>Gu;EaJonZm*s4bo%jtr}oc@*fh`XBn@ZODLVc3=(&FJgLGwv3|aguN5({F&OR|4LZv8y;1C_@1#u(9cUu*y6=qpL`&O)kxV+(g0A1 zDg%3zm29OSZCi}&_t2q7amMw_MJnPU21vZ zD4UILyoDr8k_JO3UF@wvKv$Y$v-Y`K-QNJMIAkihFso6OVEM&8p>BDhUC~C(pS;6n z49V|*pD@5vY#3EI^L^BH0Q#RCC8{<)6zW0SxZoJgWg1^(S1 zGY@c0{*b+ihH_op%BB*XR7faQu?PW%kmUWd;Q0M@#{bBS4gQe$Tar_0tT_vMs(_%>!&6e5 zm3Zf2XE%N2h!6anlu$6&jgHMUv{mqC+2A@d5lELry5D}O0Z$_V|FvT81^RWOCS&1 zHUX2_FipuFPJIl+jWMY3FrW=bZF&BpJLZW3V>3-98N31l0lmgL^fi=0@d+}2g2z*a zSwBTJ^d`gFZvf7?r%%0*u}1<37`O#bGX5hkOTpxO5e>*A1I#D>M9s8#iEj7myDM=3 za*rM(w5d4hb7vlT09mvo1MFwIc{IE<)X#J2g@h(6Th(`x7w~sPr$qe5+0|va zu*z54=ejlW#9P2R59xe%`;i)#;W4j#g@=y$hm*U#Vh5GH6c#QY^)*2}eGuS7+NCAH zm-URrQEtpBg>iKcL^dnb-ax9HexMots0-)y+l{WMDjXqdF|icMimQmt^&IFBAv|z@ z&cZIi1I?o5)3qs+L&OQ&UbCi!K-k;v#)hheQ?Bt4=Ic&v=S{+Hbhs9-nM92gQ*kI( zfMXBAh;l#PGmkMz2#Zi!+I6EA(<)|1>fRq~WIslk&Aze=6C1OFt3ZPku z*E1q&cHCMrvFg)U1ry`abPVfWbb}oG6g2uLK+E)&+$&}B%CR}gTNKYx4J|$Dtg&~| zvPU?^%5oX5&TA9@B2G}_5zav-wePe&KgSUThg4qlMMJ}u3Nt zqOr$LbAI>h9seoB6!8Gx}TgT2|L>m!)eZj~xHtfJXbV z-w}-w7s6?l7+Ae!i!;UbymdU4bx5_tjm)bipX4-}`Kp>4E1#GvL4{;5KK`FQTUVpg z(1Hth8-B+o+jkIQJy&nEhWe1a;{!3V`tet9=0h)sp}#Kw!cSdWDnjv=;rj1=|G3i*l42lt{oDCN(+-bP1R>t@~?|s%2y&v8z34q`Jen2*aakB%!`9dV} ziO>)bZJz~8D4+F8?$*ps&K}k#PE77L*8OT)c59qizNEDuWS2TKRLNF^@e$vnL!fk6 z$?$8{rSh#QI`KeBqlEWcZW5!-@x?8mwO9SP&`{DIC#stkXtQ2E#dImf+~|nIYBO2jBhku9f8SI*3;{y;2OZYQ~Q`X{>}mT7tHXKh*UkT z9O*KDsTsuth1hu+3Mu`K9AZJ>kNZBXBaARj+{*KyR}g&%3_3~EsP+f`x)EGFjF`!$ z1huL@ne+BH8uV1m8i!!~D(ogp;)6uuPVOcs+%v@(<;yPYAIYI+H;vP`Q55q7Bw3>E(7Y~l{S2?N?LD`qH|f14X07YV z9pRHb7*&x5Jdn$xvT>8XQD#9BVsD)PTN>tjU7E#{*k-e%+m!N8iyCwo;)ZY{=v$6r z+!knuUlzd)%T{0Sv_pca`aO8X4I?s`H*|v;DIj*UjJeDu_%vhy4$R}(0b961y=GIp ztP*d(WfNPU#7Mqb{v>%KF3{=?4`p^L#S~~FUYH(CR)?h9?F?X%*UG5zOe(r=_W#1PV%g*6m7%T48>-y!ACuUW%tUT2gK=OUk$w;Ns$ zG49HZyGle4bugU`)-L0#=JwLj9l?oy3F5+CRq;%dv-w_&lu*%*Tjx#QUDq*myW?`lD*= zsEY$NU-0k>-YWy-bP9iY4Uf{o?H#B)1NG+8<=e2Xt!~j8wiIdaDp_xzR>ft&*`aC2 zxxgm3SJ6XrQHk4Gzuo|BH(}GVfU{%$O28A}^KA@~BhCG}THo(J@r5mG=%OBkS~13r zVCK{bz`Yq`W2meLZH$|po>q=huQ!-=5AM=RzIIH;PpO4Cru;-Z-jXWM14!jAC5 zk6sU$J|O>7u8N46#uHqK3;}WcJ;7X*2)yC6*NOtZkogFe$zFxmxnDh%D@mA;-IZ;( zz4_|U?B$~ZT2&K?q!*()eK|$)OSDGM{nso{l0XIsAmjHfoCLpj&(PS7HYb${WW7KB z37x}K#VxKpStyySnc`Z>k(bv@Su&}Xt>VwJRrPwl8L$I8Z8o373@)CP%r!YpAnHv{ zt{PTxdb|WCpormt`Mn?An@1|1Zwpy;&h$591m4^|XBQTFc)s4q3cMZ1l;9rPxHz0M znSQrhyJ2^8@C`xfzLINeqMIVAvY5ZDPAtO73wn+0&Is(G+G<{L?Bw3&FF;CiceqoJ4-h< zUs<6_%w^f+e51KrQ=!SY|IKl~5#6}He8!`f6IG3CYu{TW?~UGWVJN56%^>n;yGN7~ zuUhbFW&a%#c$r`C2+EZNRcCzM>H`N)w>Qlrse`6HUh6%+MYT?$jWM;TQ@x$RQERlT ziu+(RQEMk`99c8z52=-NU-O_SYl>mi(C0LH(zE(+ixH3C|j5yJ4rq7bfsb`NR>;m&8R4UB5NSC*ndJ?G^UsDgDN2 zny;8XGSb&a)X3`*Pt> z-tXe}G7WD!Fsy*0i&}H1^1@1i(;V*_XF=58zG+scqIuU;+LTRQ+ za71O^XUQOfr^w&FTEx1RC@ng&DKKcP_#;z{3MK44PN00%NI}r8wM?Eg)DGdf3dyXloCLU$)w5?%F3=PkcPe<1p>hENa z#;RN)acW3%pLpW5_5%^MYkO*LgK?CW`mAU+qGqk7xN(-5;cP&W???v5PUehmlI2`i zuBYzX*Aubf;d@Sr)eQco6$uNrUs?Dkap3!|i}WR=>8#XIIE?Nq6ah|hmk0}04G(NM zUCaiJ1%kKYpQ{+0=np$Am_HlLNezrWE3!1I8a)x&7_`sZ?+qk7ynh|##+ixCr{s=u z(FRCfVUFEB?KezBst==|%g|*-;up=rhh@)e6>X~0sd^W`%g_W`ERN1IJOnoSa9T8aVm9{i3b+U zc;iKjT!y4gi06bH)WkpZYCq=#!H}N~*H+ z=VQ-TiT+F_^{(b?{ zPJHK|N%8w5bPnsT%nSLnHvdn=I*y3wiNxYW+&%&-_6CLR)!o(OVPKEpvv6L{&sMFI zNUqV#4xY&MRW zW;2OdioTnymQ)iBUNJA__ecU~G6toiLf9}M;N$X=6xQ}Lkhjam`BjAU)^Wb&bvZ*o zb~^KZz1vvQluRScJxa!=W&uYfhQt)gS71OVd(T5X^TrXNzf3NZm=c$RF^Pb!6+;W1NH=i`{nRr-72b%YZwTqic7`->Gq@ zFGx;IJ=qFVr*mPD4Ktjt8$Fews84O{i0wsb*I~6v0(Zz|S~bQ_Pt=o&gvLV!DMn!P zB8%GtK=E4|JAk&({U3V2tzm~iutRd`@{W{Ul7GZV$XN_iQSFIAj@#h|3*o=0ZXXze z%Yz0V-rUiKl<0zXbHR^&<$~?%x11D=F!V7NTu|Y$Z~~M%Z&-fo-;#ul2DAycAxuuS z(NYVDekk$2+~ZG-Lm5V%_FT8e;*U);E~@ZNQ=9w{ZcVtcj48RVtN^ zCjX{f@0J}mKe3{nU=){zI+t*HIVXu^#$k>zXzg6C!wXLn47z|w|Ckz8;CQBm?DrT) zZG9GKDLR9!{V=o(>7!LI> z!{YR+VP^cawM@*jNRIUwstnaaZqpwpm$Dtukl}l2bvWHVLsk$I#bi3Ywo-=5_<0+x2?^%@+z1)A*L|9yFrR9Gap~b- zuK9{F`0K&mPSM#f3RVSoR5na+Q}g&osBSj^&WD%{ZKamHg}0VQ&;i;tt~*H%f~Y1! zwb`!iJXM!YIv4;=)^t0JkQjzQCpU#DilUH|%Gxjf)#I<@Hq$#2Zy=`g^WUd)HFIB< zSV+k;v>vei^JZ?7l${;~S|2KPtvLep12omKNK7rn7Q3)Ds^kxa*w0<$to$FZqG<6- zGJHP^@T&5Wek#ku^z=G~XWpAiiQe-?^hW^_OxbGm=My}R$b5v`^90BO>{RxpCy zXN7K(()Tji8;fc($A7RVy%YMw8+DgYR*#p`FIM=5`E>QSPVMESGK2e#e0OEe4c|d^Y=P_60 z6RT|A#MyHdHXPv9{{8Z2A~N+-J!9}^i?lNMWAQp=p0D)F2-_0&3zD}pWryMp$hlhgK*#X;h2yg9pg|_CdrkMB1#ravqMol~$@*JE^y37* zW+Sj6nBDvzlt7W;VfN@_50c4?$l=-f1ZEOaVK+Ddz z5^mFwU)A&9!4<6ux#;~4IG>_GxJ*}iZvGJF1%7;{HM|yAK z3J7wFUqh6ez!n)(Xtu`K>?EN%+~%D%CN)u3rjRGs*vgu>&jt)MLS%M zG29TD|AoTzMJa}Fk$hqpo5AWpDiGA#~5aj>SLBnh)|07@l^Bt$t=WJnNUzdz0JB3y~iQ0`NEu%8K}qu)IBK zSCR=1N_8q~6?!}+p9D=Nv@RDL7sHot+<>A?v0|bQ^>rGShVc*kC-G*j>&1?68@&p~k zeY_^<4tQxsuiFqAL}WBbvHJjZ6Uav>q*#$r2(xdHNI?!%Vv=dOW=QxlkHA;JTebaWXa@n1!A{=Ue{>E4T^0Jw~uCEU2pw zC)HLe6uo^5gZ_Ms6`|WR&J*Fa~btI~^z3jV__*8G4n*_2?elBc7&qxSke4n-7ffiGhZ29K|km zRDm2hjldjc!T5J)&!j#^Zat3c`@xF3;G%QHXXvY{?(ZS?1)xx*0$RjSK|b)?Z~Tp2 zB!T`oIyBPt_p+6>ZL$3dy;p?jf9%)~9$^@*oMHd%96Mq@2xX;Gab9u7K$Bbi|42{^04o)tKIj3IW0Ue;csKa4E%(CEZ* z0ca9k?5glUA`w`O#D-K+m=6zPJPT&sqr^Dn>3Rh8Q-p#sKQu|& zkxQzBisn)W-6(evrVsf)hzFSe)4vUM8X9o_{|q*oz7h->A_PQ&03tyGSRY9A-@~nt z5O|+T-+wP<- + // 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 562/660] [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 563/660] [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 564/660] [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 zcmW(+V|ZoV4xakdwryL}Q`@%NsWG)qZQHhOw=?zB?bNoX_U(87?ENDv$;x_?y^`!V zapPdG<6!k_Fi^OYkj=G8+AstlU56|d48OeQPyaWC2G~%4nacPmtctA478_!E>}(?_ z7B(u<%9ky7Ihjr-X7#r4zfS~jIahkjb)Aj%ZhD*|8mwg4INIGZ=2VsP(S93@7p#qV zQ7NFThayYe;8QxF%0w%k%9#0u z$foKs-evQhcAQs*F|m+XK*9?kRIg5a{D{p?*5HIZd>3jS*f%D=f$+op1+_h~!cKRs zg2Be$11)4Gj0i*99Iu8eMeV%eTN}Sfjl#g*P@a+2`T$z_AGs7V^~MAnU$B`!33nNv zko>{j@WSpyL2;y>vAg^rV`mSOk~hW1e~MZk_&5Wf(GvO1FFFw<9(iI#)b>o7dbQ#M zS8*ja4V@nYGD#KS+E6xkWaycetZ>^jk8e4^7T38*@Me1!H^F^5g#(`=2LDC94Vnhi z6EH7uZCt~q)){xD)ga;cSHEMGpKYqMC?EJW3?7D4bpeBnYha`xM}F^`WlSxKq7gcE zR8Jp+88g&5)YhRBXDe?E<_oiPW$)xksa?i0W0nU)5{vOTl`);1z8C9!)BONb%gU>2 zd=5y-n$gW40(;AOb`O22!jC5FtopvpPraT|k-Rz^LFH^6aS8G)av?*nd%c?9!{v@p zmJ(zOykZ+2^lY6$Msj-70Mge`?dV)f*b>qlnAW3^+6z>zQZotLv{=cpWT4F~YHf!v!eYj{Rf&_Dx$Q$r^#= z%ZFE4Fh;hhFZi|msIe1)fl~Bv;#JLI)*A;aJk&;To+we!?4ZhD!=GL2u8AR z`9J%Z=huR&N0FLQEB{y>LnQ;J)JacW75aSjkyK=&&0PoR)I}BIjE*m+Mv&)w=B6zm zj9}5MljdVuriLF8xBSh1t0FEuDONOt%&>&+SGi-LHQLFvpNB|ro)aT7-GU=}Lkq@L z9JOeAQ3ezU|{Hw1`v8aOcB_2$7 za-MlYxWUd@ZGVnZP;sn@rmG1v>zntn61rv2yJ0_>`&3V7dEh)3>k42l-+83~g^Xoz z`UHqy1;_lUck8$_qmRt~PzYj(3Vb$U!ABYi^5{-SwrJ88Xz!98nmzY(0;QROj;ESY z+J|cB3kxPs7_u3Pc=A7{7IN~hz#k45)3sW?0^!=B&e2rnh-Ok$rtNki6re_JwGj88 z7Ph&%2&yutl~#GxFx{j~WpLU+CNOd7Y4a(K8e?1o8(>kYB^rJCZe)6O8V2z1+#NwK z3+6c6Dw%nIf?t6!A1i}rH)DV1HZmmT;b>M`8x0pe(8KRb7YV#+<_J5bo%H;7Jm6=t zuv;?QE8_zk$e=bY&goYMe)Z6tLrX?rLu+#=&}auVO!(nGE#=P=>nr>PCGkODW}6xb zu$nMS?<&6#qa>e`;CKUGq~>RNT#~t0iqoy;1M)-!7)MSDT6d zNE1<$hx@!`6DCDZ6B0nli8r^zpwIV5p}fBL=e0Va&)dF_Bj(Sy1Id@0G@*~zHqe{$ z$Ng2E(8s?%tIrFE&yT#%$G7*mzW0wfA<*;9Q`^PJ7gvqQXOYo_;Rns<=W^W%=lk1y zpWpj)Szk^KD5VB@;O`Da-_6ebT4n9a z`XQ)pIxstxQgs6j|r(Z>Utd)xo#x`WLRJ=X0Xh|J*) zPrq1Xkev=ZLAqQT7#jR5JY0NUog{%m2Aar)nm^j!#11n};AMy=G{dn>kdE^YLlpR# z;NPmb_p2!oy2oP`$6FeB36v+*P#sX^MipCEi-xo?eO1qd*(Og2Fv!8=6hD@SP}~sk z2>-XYSWP!=ZMBd!Y95}I$;x}nD&DRDp-4z!3qzRfVmaieSHN|@d`Hs57Z;6D0OCXx za7Brj>ecPkVT|!|3|XbY|B#EG$!s390fh6=WFVdlU|Op>xWHI#5pv~{HJ1jI2}*@e zRe6?pXvh{3eF+;6-3mh0Nz(8@1hYHdPG8C9qKZQ>-)j-_#I%z|)tT>~Co&s`KKzfu zoyjxW9>c9fzE4$Cj}N|TU;4DNK=Eaxg5C9hk=2N3R2H^)It#WQUZ7u810L5GD*hc}UN`o|ZP|qe^>bp!$J)R%Pqgx!KN)u$xdo7<*mSJy-_-5T-8BtYwQe0N>Sp z;56x1vc-DUUhxZbJt+}esk{ankDRR@GKq6_1`qomuqA*Rl#EIxb5!y!cNk=jccHnuOvPg4j zFDWC!hB59iOf49@V)9kT@L_mI%~V6@@^u57DoJucrz;T5O0tW0{`5#K7hJzjXO zI(g;b)GHpX0g2T&$!((I>)|e8ee;*5ma0El1yj!X7p+Ea^7h*t88NV{h;AP$JF{tUrkpw%|81276UnW`b{#5&>tY zyHgCWhQGN4rtcON=p5senxS(A`(XhZ_mL;GjojW+5}Xb*+NCRF-!4#@GzNkKDl=#C zJ#V@M`3mIM2#Y}ui*Gw9CxRkPcpj^=kq9dZ?wRrFcNU%ph%YAs5BK6s-c4m$fZzP4 z^^)xx5Q;rZU7m+#t5zajJ!=g2x6rP23C0Iz5(C@~J%Zi5xI0>}G8R>V!&nLT__T8$ z^%S?=iXXG@7HKPbo4y(82KFGy_Ql@B?aKUstx>P=Eo@Nv>l712-$9N$b6AJus2YT# zWcwyUvtW#XC3aE09h<=P>u9b;TEGavnH%j95MjMtvE>yv^AhtG`s5qnrPwsl@8Eg# zzC+>g2(bGij(E+_c*y|}&n2@T69m6R$D!^&x&$*`(DT;8;Z0ht6R*!+!7q4c>O=cY z@OS+Ly-*I8<9RI2WA1zVWGX2#%4XzpA3vlUSO`*)w3Qi>`BVjz`JJ(=Sp?@%QTZ9_ zhHf~li>+U9{c&&EnD+LldXx=L;k;hhBcIMonDo zpBIjjL)cKss7HPc0QO98d@^$hmg(j!_oM+*zU(xFU#YM@{@8io)ZpB;skT@6Gtn;_ zO!u{uI#TsYD*L$MlgK@UMr-+Nwkl?~2LuB$weo;6qJ$dZSE7&V)ED~i+27};jx#{r zFGIHsB5np6qex&ES%T)u!W-;7+_jn9uT~>%_E?7G71hf&!HXQ%)$@QK-fgiDs zoJBUBE3S+pdInBHNW_+qkhQ)VN}$7mW&2KCuPMEY{TKssgpz==9*Nc?+d5wj*+I@O zrc(#)P^ncgKw6_k<_$JurJ583y|z})bU4| z4qiv;O2kxgRaMhpzj=DIVE=BiHj)VdDG8V6mlYDV6+S3PQj6!c@u*1u_%?6nrc%!Y zUD*XnY?@Zey_=GAjn>hn>QI?f1_T%CGv;kib}}zYr;cDxY15A0(~P-I#-ZG9DnO)1 z`L8y?6<>OZ$a2QwJt|Tqf-sv{V6pKa%@eL>@{A?4CbD+%W_mh#bxTb$FWBq2vI4T) zx)7&;E1pu_;##s0(_ZoZZag;1!a+m=cI6nqqH^*v_PdvQ#Bt=Hkg3Y;|D;M}SsV)| zk`54=Sz#PaT`~?DeMMZ5)X!FAkoR_-4xZBKtwdx{#AD7LKO~$p(X#_8*L=S!cf!B( zv0T{lR0)U_TLVg*a)kZratBn4|C3hEnd{GKPQkDIj$-b7g3ZHhe?-K&-$mjX^E%Ko zg!%VRO~ZA1{|sXumSN|Aamvi~P~>VGPFq=h1)zF$DI6dyQ$V6#ErPJ-t2QzjxeGUw zHmb0Xy}{8A^qL=08}B5X*`DMmNq7qM7-O&)8u6j>lC%3H1c|$AI@*$Y!{3BIWohb6smd}^FmyS&vB=ib2- z>er*Pi_r#^7EWXze?e-@zbn#C>F!kUU32TNP-E2w$eHgkSoe2S4H=!6B)zn_i}=Ue zc{1ww83&^_F|z`oB)Cn>DmI9pI{OR|i#PsoyTXGgB(!E;WfZ~!W`xHA-Mk(Doi!J9 zLV3%tIX+E$2Y;$v|3Im@S{bNln$C+VR86$e@u#%taKXZ^ERuDktE z^8sZ)n+x#uBtCMoZsP4$%vRwd$ttoJ&Q@t2@z(2;)RKmZ^OE7D7Ht)}Uwk+_x3ns? z={{tx_ZzhUy@$sqKC;rzP92wY>!{K5raiH~vb5$FA*5~FC{%-vDd6*nViDfZ2 z*5$VC8~3QBAfo>=6z<#yTOoy-RC}0)r3mZa&!w3g^Tfoct+V~A%dy1~d_RL~E21F< zD$inG;K>M%S*QLKexe%x$BM|#_BvEbS6QN5cS26*_O7J)+Jm)2Oice4?4*g38Cm6V`k9!9^0&g$4K=Rups#+6o;JX`uMmMTX?VwrNQPviP{qj zNBIM5w=iZuv39917DU`J=zGb^5@8)BPKSr=xi)L8wawG_19A~5IuD?fTGP~}Z>5G5 zak7SlSI55z&J@!a_IT8g6M4tKO9wX|JuZ&%XB;*`GP7ggbSi5oSy7-Pm2O1k!fLnDW5M4u z#Yp*q4vx~nVl#pmJH4!JnpEYPz~;t@%!cT3z6}#s&yAr%t!2pPUZ2AN?mRv=s1JQ z(!!IuCp=4C%7|&fgjr%#$18dz)1Er2wR62!8ROHDKI*xwroGBJxUghIIOVr43F6{b zW5Xv!(!@hc;gkEi*pvtg_zXAhf-918Lksv)B@gFAo;B4+LgxbRJG+K}H7bK%3ozpm z1gdJ8P6Hj|My1wgB^QU*fb4lp%1>?fRG2yR$F$Chbs(9+xF*;kWh4G!N$YO0u?js$ z4?|2*rFfHe`{0j1t4o%g=cl zW3Pe*ffhXRErNqse-vb$Dqnde1~^R}S+M}K&hX)H#X|ZN`=@86!daH)+IQNBH8t!Cx#U=8M1Jc7d(koPh+nc(G^daAw(c zXTRp5xrGNyL;Π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 565/660] [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 568/660] [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 569/660] [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 570/660] [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 571/660] [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 zcmZ9zbyQqU@Ft9FaDoK);O>M32=1+@>cA+Qc!qWkFy~6`CxMt!Y$n>wmWOfuHDPssj zame0Zs%J~O(@G*xzJfa!1qBa%TSA9U+v;;#PJ*mU!U*+^uc=dm&528n4qZ$`hfg@H zkkm#(|!o?Lz6xh%bx18zJ(JOU%n$2>9hvnLQ@jpqFpp1d3HSXKPi^>KQ~QaoH}dHjYrjcD~O3>e7yACYU+#CTYni8|rLw z(gZ;`Fw^Dd!YdfhdwAbWOAK7l$8}K8Y0>}tcO}pA<-#4SMG&AGsWT#%@(huejdCpi zjOdE+gdT8zh<6sc#~bkzF|m(`ejga0+|>uX+3ZGmH{*aR=A4uI((^+8ZQa3XX2yV) z&bNUU5ZQFjTOnIQXRKN|YeB}rT=LzoSmzoIZXP7bOn22LbObldyOMkxTo0k<b#A&ujN8AU@Plnx;$0_}_9q|K_EDm6OdJkhunFt0_ ztFyLxUDq35Bz|u|lw)5-?n}=uT56!+&bLT=;wYG*@0WRUVA8Bf)vki`j1WM77;za~ zC=A_d!5tuo#%+IVn0Q@fdDe|4oSo+msA&WJNh@yZ{3=VPj?QtWq;M}#4INQAzXkpp ztSdLu@79-n4v&i_O?tLt4<#niNyY^fWxfpx=oi)Z(%oAj_BRka=y$c?ku;?&=&|NP zcidq8mV>6xHLk{9^jeN#Gsb!MuFt6$a-mY!Dw>VmALck1$XnqkQJ)^-{2K-wzudF< z+&J53eJ=$ew6m@0M=>>c93&jzr+*}?<8{HfmIQZ9F8fC^&I4liA+-x`|&z$ySIG~-_82e}0EoTy1(Iu50cSETrBDx|p$ADE3OJ*2`}mUz0^$fC5&{nb0>a&z+0D+;%E{cs z#Mz1Ye|}h*+-{{1U%tDUnK}3*ae6@61X&_|gU6tnwpWcX)t;`=TPUQZ8mtGF7&lqw z<zCt_g)iWpAuBjaPon0OBq+Q= zp)b)M+FOjuE)hGHxpEIbr4xgzwOa>#=gmAC@SY*op!sdRT5ODRL|n78jfgRI%-Y$B zJ(^|=Jik8S{*bB5DCLjks)~W4DwKNdoh?R-QiJmjt@tXNyBve z#Vz%NZz#6qD_MgHO5ChSq|t+*T2pRbJxF0Ojcn|@!CC}Oi+ERnZBmmIA3PAA!B$o4 zEodIMpdH`Ua6E?Dxzr8h`@4Te=qF6!fLWjma;x4qTqoqz}=5< zr>`4c_mwdLrQOQY#BGQ80UsECi4TzGdN5zcL*5>H%wM)RP;PiKil6L9j*iL9y@s*% zEC+MeIK{4^n`At{tPm%f31x{UejMp;uutclrhmy1I)Z)Kkid^r+&WK@p^x}F@M|x7k~P` zz7PF;e?6T7fBXTG{QP)0y{tM1+D3yu?u}j^yMPrhZ#7-7FCabO)7#iHXr`_3+^I3! z0^Ce?=PzKSx3sf*1TY61$jGlU6SUI|X7sdh60;D08Jy9QgWEF~__o`GQjl*AoHt?JH*+fI@7pnS2i$N~HLFyw=b({PAC{3$# zf?HbPfdF!8!7iCMq8SndJ{pOny7J;j*W45QW5V~=-i6pS|LV=Mf^xee_Bo-_`Ye`e z==w9Z@7kvj)Z+oO8WYtX=M+8cmV_~`$|Ug0S^M>SEyyF0>r2|TG~NT^68nGf3?JCaWQduQX4dPYkVlP1c5>P>ij+|UbCs>j8vwKET?z=bKg7R zojhboh+s&Lq8fOUuuUwg3ZIZAk+W!SAGa8py%9=p;crj3_ixh+=&26qSx#U5O@?bO zg)~j)GW;uE(OE0e?C6xgl=Nf6nFb?a8WFc!-MWCjz~CfI*mi6hN6aLp{q3&&CG>kV z^al`I&|LPX)ygfYkBO3a1BkceyIeRg>Uae9BwI1X6ziZ}i5_^IycV8gz(q>NRbMSH zkBa{(JH}f)?(gCrj_ui!ho@D)S)gikv9ss>n4prW-n=MtFTjxk{JC$p3~#mgYj7eiCn{cEby# z&Ke=xG=Df?9ROO61NGIs$NwP+N}i_K2iQd&64F{l+S3t3iA5Ll8**I(>n!tqAeyOV&MTQ9NLim=K%T zHZLpNAlHz+$^{0^d%)3-M}A9^3mz2-Et_{F#wVh?aRH;9B^~;(L-U}?`Jvc87FB^3L7INOo-D^bRwM|% zfl;QwM(z-&;X^V}J*`s&-85j_r%J4cfCtg-{D#2WEMleq=6&_wyaxnJeMoJ;!aX;c zQNp<5%!)(|f39~jZn(QO>s+%lHfZV?&sNWRW3}HY1|t+Z`Ey-`PKDX|F5PbaAY~fZ(RkIFkLxn3L`)DGasixm!GyG6iFJg+&P!PI7jwH**5d8Ff zZ*8Ak45voZ=Odw*xxkkpY5&EGI>?E41t~-jbCQxavLnbqphlN@z+BK!47x#vvMQh^ zU3Q+BDLtg=tSw6!R z?Fp}kTkC5s3!XDqPw1o|A?j`X&i?>}Vps9o8mP14y(A<=MR_mTN#o)Xy`S46SY!-C zg2h$ODIo{f@ip_HW#-HVh4$bEgB>?5atj&*19c?}5HmQ;pDxABQE{uxaDdlx0!Y<@k77=TNMvl-8_z78oDm^^rMIAJhU(%_2YfPr-_48~GD!5@?SN z`iCwz+J`^Yms;>^C=IHoa_Z!$a`v$$DMPSapI?c1(!e7bc?g@}Q(xJayG+6p7k(tX5 z%evV9O!a?sYTO)kC22FXreZAgYJUm9Yg~skob@I9#tIW$=t>x#m?YZs{*2hF3qTwTfnpD=Dc z4v(~nB?-bz^vtBIyf}xv-fq?o!)L%Swf6@!sBk>^qp#zglOE~2RBKGp4t^f?N4-TT zS;b-HXhBDV=1RYV&2=&6c||oosShBbu~k{j4fLT53bhx{yfYIBwbNCKDsDo(>S4%) zs!{^ah(mb~_N3s0v(_M*^!hUJw)wUCz0`H-*! z{LjERYht;E?yC`HRwNO~DV<#YJ^nsCzb_IB`2GV`#Cv+RMOkvv~Psq9kmZidvXOeu2h)RjKXZtY*NusWNQ$hK(o{ zoAEPD!cEG>7HHBQo1M$h2C_APca=~cl*Su_iH4G?X;eJ|=^C}fumtO-b!M>Az7Nl$ z$~9K0J2J(bXa^||iP_p2p`5pJbZyH%3CES9?t>R2PAPy0(fb3kop@7O^jOn;oW~vk zVzc<4mLfh6KSZKBv)`J}lw``e(I8`uEuip@2{O$)(FR}M>M!y2DGSjd0^wO-10+ zoEpkrBxE+!R+`Vw6}fd6TQ1g6wIkkvtx;-cImIFZ1k~9ncCeYst2m^Rt7*dy8~XNS zV>6c}&u^UuUITmV7oLcK6HIH^O?2Qi?HR##k|kj7>Xe%^i22mTs+Nk(zu5dRe*!g& zT-^k>f!+v|JV~Il7thdfV)|HX6}ZZ6UAf-6$Oy(BIGO0%Wae3dVbe_cLBAHdYu6i9 zoo4Y!d{T6EBjthr@HUx)II0Zr&^Ts>djf5o+@}%+v0bEpvw8#`u+z5@nw20qCsa&W z0ky!D!#+I2otn6c2^;{vvbTgJJ>6sGSwTptHVV3YEEH2LC4X{7t~E$|Ma#bssZyc9m1xqzT!X z^%)ZW`?E^u$|P3{!vf(N>2|N?>X2e^fZ4u-XIDa29qidkR>zhDaq?xFTHP{sDzAT~kJPiex z<^W*={W#LhnU$Q2BjIV!Q&SExH@8i~KCM4uxJy79KL-a;!=GP1xg_6Xs|d-#}I6 z9T-L@sjBQC_v(y`ISc!MI2o^ulI#82Mt>6M@Tk?_IlPQu>ZawC>W@5f4D|xTggitA zeg~>#=O{_Q@?MyiDqU%#gJTpGEr6#{s}tS-Wb;HmAZ*mK5-J zl1_C_joT;<>Ii~8V-fV9D)%h&-9A;yuneolYbTc;++XdBw;`B`#cs48G**uZpJlj; zNCH->?{%zd_vUK6Zoj)h51b(C7gbRE4JEknJ}IFBwHwKJc-%t% z(;M0m?id;h(?-AON8JoHD4J*6N!{jlpQ${^glu8GLgO^P;@T?bQEoIvV(F=E!r^)` z=@6sGSX7UEhSi<-OHKIh(=g|$*{hcU>r1W3JmNJtf0tK>_;y0S4X9ytZ+|5VZl&=X zI%3))?9r02z%ADsdk0E4Sc^@JFG}Or5(XKw6r|RV(pshl7jc~@9=cPis_|QTMUfO) z{=;KU(7{S-^iuZ+Og_JH3<_&_y;u#&GmrD7qcL%I!-!;b7p;%w9;!5r39Ds3j94e2 zrkiiU_E>~IbRE+}em#(603Kg(tB=eyq36DJ(TTh3iNNG7uFgIFV9mM)5(mL2mG8m8G zWZHzFXs_8#9hi(Y&xEXMV^mWQeRr`itPxi|ZT|SsnU&|N`Q4HL?9I}$x~U;yze-cX zSeMG!b(Y2GWVn)fqoIQ-|8h03Q`7&d%*yXeu9;1FzjZV~VakhtUOzp<d?{J?D* z&28US7yWR8IF-z#lfBffsMW!Zc-?hxU*j^^NzqpI0YoFloLX5LGqxg_=+ka$7dv5_ zzogLqZi;J^N-$MQ=NcCEyhzS9q`L+c!X%yT*Zk+A#IL!k1Z-=Fp+}R0_pSa%f!Jzc zyDsI;KZ)4{xvThKa#vQ@R>GroMs?tc-q<7bawI5X54(0u7;1H?ie-|^BG#+Q{jWk; zm3lK_Fwo0n^>;aYgIF_JMOb`)N|Dl~?GGy><{O)o06D=m&9Qwg9H_-r5KY}FVyJh7 z#!v%XGph%&I5?6aRYg-m8`lUo=RT<>CVu{&N-w^LV{73QM(M}xp?{{A|iB)pFC1n9wnbQ!nan8$8491xBtYvnOe=?2mj zS&Ez>uEj#rl*?;lz%H)>=r((nD}*|Uby&O=D^{;;zXD*MeaP#l3z=%s=3DeGgL^A4 z%YVhMR90@{c_kDUQ{U(Him0V47c(Ji{zoVdo0Ko4L1p`b;pGb%!$CgoR{ao@^McI4 z#xfAvThy^u!!7V{rRbZy%gM0~X7L{yzj#ml{)8_(gz1`pRP9L0@j%{Xs3A|^$L5r4 zJY#s|T3DLJTfwHzJK{1(6noJp3lVP4KaVMhHmJ#(y*Jysy>BpOcri}v73#QL2l&}i z5I1VILVc_(Loyac?h8B$oPx~rtvbSi4ny*H<~Xp~7d97De*lb_C1>`RlUCJIX8E=N z^FPd96P>xGP@|B>a8{cX+Li^min9Ys3@f2!v;4Ex2fg z0SLf(LEr+FRx7xyqaB4`tI2|+7P@vMun~zRjr1~qutszX>le@L;SxP1Hf%(JaxZNR z{WZ}5gPmsyxdI;+Y>GVn2i?CfwU-@EX3AA^S^7BNmV#YHdF#{3=s%K4E(2M=Kk23y z6s_+f^U|K3SG5hW6Wmg?oKn1eR>`Gemzs8nydF^PcrDKArw6%QvsL0M3|zd&Pb6Z4 zt{a?uG{=|Lo48Z)wGd40E}cVw&i>?!DRTfYc-b&2a%5n0sW4M?3ehYz*s;0pbUc7V z_5qKv#US<}(t^gPug*UZZ1tGWn{vvtw*)kIJ!a#e}TV z<_yWhSiox}zpRl9y1XA^a98TfUjHXE0alk_DcAN-eb!f*y^7MBy}N)@cjrDIMb6Qu zkMiZn9p}UsE}CUwJt;wAK>@2#RWz!WK3*zar#duO1%4XLX0$$4?$-|s_T$gb`yu74 z!9Dk>(mi&d2vVAM0M6*@V0Bzi{vLny`no!=@Zn3g>W#^v*CUc3O&0*?`9D&V25^87J{4RAA16@uqkWe#tY#&j zXDvXzn)R^AeHqkoqrb?sp)+VfHV80RZ~t>Mao&BU?&;{ll*Wd$~klDJa4J4y5-amBID5!`uZUjJ*J zf|Jx*hX(@w7a6iZgAtJAWg)9FGA=FNZdiMv?Zk-Pr>u+$3a!juyfx#s56gRh?=p_H zqxmE~(4Mojb3HTEzVFM|^?NI?$C)%uQHunsn5ZKksDc9ykk>6bm6AMPS)PzmlP5{E z5O13VJ`Ma{_LHTY#V4yPhKzh~n>tX^eJ>b;*guGq_PxJ*3xvujpBgjOBs?3|uQ2*2lp&~VV$=yhw)q!>`tC9MOJ z^-Yb9I6chNJ97xY#K^8RoG3GUJiw4Dw?dXmtIGLzFNo(R?ccCx$ipFjQg?ve^!bN& zGBJ6+9U#5rO^BaT^?D6bJ!gr$2W#VD?I&RwSaTN>B3Y~y0X)s#PS=8Xwsd#3Wk6ue z(979Qi9?1~7>?n}51m@{86Pv^3mZ0);*~z*0E1<2GSCPm^sO9|Y$9J>6$4Bo{rNKm ztbDyi%Eft(q^xzO39IR0@#@Nc`KDajX9nI!piDlhH%3GAxdrmf8cEp2PQRJ5r)W(V zgAG3;suW%K)PHIO&?Y(pSxJPk|e&=X3D79+XtykqKtfQbK2m*o#2 zlJ9z$i3cOO!G%fu5mBo6chX8u-kwjcG_F!>LECg6mn;4DuUkoV^8MdOS4Cq}!{P0( zl5!AWCYai208206A`#48Gl8!V>0$mz*I+4k+r}O1nCJ!StZ1 zVXHVWuKqM3wR@c0fq721cRSaIA;R253L8JFd7_X#rarI5X32@y|3dyODKlJ+^cWUyZTh{+h3?cE5^zc*VyxY=c-fT#g(P6 z)PJH>xZK?M)16t#K+Aioz|6xEy`lhp{0bZI2UpbGl)h(vWgM;xn*cQV)>kbH2)n4)W^ z&-g+d1 zq0fj3Mm5;~S%)|rbN%L4&Ke_Ubgra7=No9j%lzeQ9Dm^S<#L3Oz0GOA>zuwU=SZC2EKxXi71`j1fuacX=sI!K-$&SmsZMKO#m?U*{bv5i^#vMo-v##J za6WdSggsjVmC3lmtHqqj;o8)Swfb@9pA}n&$?m|GK*>yS0agRjdqIDE`2t^sJ&DrH zqvI&jvZZ#?Tvbh1$s1G8#7ed>c%`WTD-L&=icXt;Z^j3B)|0S$ZgvN<&!G+Ao<_v0iSYvGA zf7Y){2A*lXKM1O%Z!Dq-rC9mOrX(gpcDX3u8aoI8qkF?GN7|B>CdHo!kAC_A+xNI6 z6<0S9knJ-|>*#F92ZN9glPXVzM?OJT`~=3bvx|3D#Ox{b+uq4tby*U=IvVE2N|4>v zui6=Eb%Tv0OvcEILb5J4rh2K_i%Dy*=<_#G&wPD=#bWw?ab~qfZ0d<_E6S)E8kL4y z6Y;~*#;i-(5zKhY30P@S%itzQPOgJaX95_O`7dkTX{Hd3J+({=L0x_2EA?m-75Evu zI_IJ#%;slpYn60M{cZEAPOl}|r*`!g3610VU#YWPU5af>kGji+KPy@(=Y_l5{#LVS zI#d3Zf~~}NP~J`m#U<+~{$8pNz(raZWMV1PubS5?*PjT}stOLXtujx{l4EE=h6SEV zfeVZ+KyL?XZrn6lzq9fPDcYI}cv(-|&>Og1MG+%7(xp2ZMPjj%jD9}`B_=jiV<#8*ve5v&0J!ywgVo=~iJftjR^j_lu!wR@DEyb#nVp^&UGjmSVc=*? zCxX$p7=Bk4^JAQ{C0gM}l-YNhEiw+8U;wVt(qJ{IIC>vA|HT<9ueqm^?2<>hGBZ+I*I^s~z!=di3@UtAQICuGI|*A0y^A z5v5G8md3q=#My~zzvGpu%frijP*yY$^?3pDUUf(PJ+&)+Tn-M{w% z=JJT?q~*S>>&FnXS@tGK*YH$$39&u$h4Z_i{8hlz(W@X*^P&58rMq~;V{mxJ?9RnR zpD1qAatO$_YjehXE}N=dC-By|L)h9aal|Aj3JO%MP63QeAHOumq1}3(yUdwlHavYz z_{AIEnPuw+IC7n>cHj0*It?u?f5c|aa`DAq^|IkBJpkZZZZzUnFn&maeF8sLCfiBcc*NyoA!~H`ly3E%Px*hfCr@x-^5)CKhHzwV+^`%Hb47RqzZO_r&$HA`wWZ| zLCnvos~iTsMlZ0V+%uS|sLLW(zeEXS=o9epk$N>A5 zM^Up=p~BuqO3!oy==Gbr{eN@95bZ#vYV8flQq7B>8OuN6|7xb{)iPd2ke0&e;!15b zu1Y=HP?4wCi@N!+*s{`Qe`Us0m(!)7LD0nw*lLvDijk3!5_;C~Zq!$da3#(N4a~xE z2blX4yolb!$Twa73q>k$jepGGjfhOG8eYvBb`-qb)CHp}N}S?3;WFSnR`?HL)=TM5TT4p68UfP6V~N`56cW=(w8 zW`e7wij3VgH2TbmZM(yRXAJwE>kKIJ<;6Hf9L{u+dG`ml#^$A%h1+2ZV4|Z#-wvtR z0EP10gl&lRF9i8s9-!U=y?VK^49 z)`6GsmzUt8E4FdAzXJsf##u_0C>jyp6N!*|C|6Ecb2<&0;f-b{mujh&VZ7ri1y+se zi-q6HEXsVFaPkCh#dOlWyT|ha<6d2dT4^Bi0dj5|phy zz7?ZclL!sfXJ=GNzM=3eq(Of92UI~?$0|t3L}jdf34!)Cf2iQMY9vV8hGA6#p(&E4 zk{lq=gm`?`N7nHW>Xh`S(xK!U*N-5h1mo)m>zW4-nkLXi3~H~GY`_AKD%SDx3@e^G zfBz9`OgyrZb%kFkz2iYa1_7H^W6k1LH1!{1a-eE_Yt3Gc2%(F&ne{+F1*ei%qz?v+6*R`7frk|t`Wr;$A z^7NxGp_+I5XJ2M*b8_gSl6BLLh{#v`#$M8d>^k5MeNottx!Wc6JgXR9AsmWwVhk6l zbp6=KY%I-=q`?>NK{2n<$*ayuAk4Lo(ig^2WhBgm0{w0xb z>|)JQZ`rA6@EuCDc=%!Vhq*u$C*k0|ZM19reR;zW??q|ib-CykQqZX7C~?l$flGsPnAx}OJx$Zq&UHV- zz9{zn$>CuZ{MbOjB&~|r`pWYH^!zCMcX&3eK~1klKk{>uYi-<@_idY*W^jq3JNaPO z+T{FMZ)m7Q=QT(mvW1AM&P^i@O7itsu zdS~D|Cw1*LcDP>J_4exP>S@@29R4GFaXc;2$jj3)ili;pO{sEmjj22s*hv4L+fXr; z`+Gv<5528=d7CMU-tf!UM+vf|ZLZfMZG7MIuNCAn4}{kYRwf8S8SvGy3JDrwpvD%S z=Q@X-3<|2#2|bY(?SXGgsrv{FP3}t&Q=S#u_52woC9N zMXTulKEd&3+dwv2!pw@>a~xQw3r0X%zs^WaQO6x;OL&ZNAXaHQ9^aaYK)Mq4fT|DL z?ewR&^&4@3^uvRUyhVo@MJ65{zV1dpyjI7w1rn2?9r~pjGImEs zC8lYPnGCc#yeOoI&Ys)(&(O_nD^^e!r%uj@_WL_Z^5d949)AeuCg@Z#{&rK#y+7%c zjLwm&Yx=fIJhn~0-OZi&dY>S94ZmoIRXN1;kbEew4-fimlRM}F3E!T)L~SbbuKfck zzoHQPgETuuCUU;v0=vG$sbS>R15KhR%Q{6oH95=bhSW{^q(_t(kvUuak9 z-l-bm$10Ky=7PQDp{fW48oCqJc1*qv%U|xV{|2dhk}O{Nzn=7rJSka_vqGPFII?yG zj4F6+eZ{&D^hDVYdEIo(rgGziWNSiov#H?3rd1^N$<)CY#fUw%ePyJ*8RRBJX$=!# z5~_k`{ta_!ND7oK$Ap{QFilGG4XCHxM{f5G9W)IiNDTe>DUH8TbsV?~ zH8aH$eK|b9+JSbAy9wP5Nt`r1R9a0d79O%?C>huTmmp*@0DYpG71?Opx^O9d7DUja zFYF&t*vIPH%to_|AsKf*4)zu&Z&CaRvd3Y*vW!d9az4pJnA&2dRRmECQ(dEZFPfBu zWwl%B5n{_fl7AQ_AVYsoO7cbrXx( zw=NVrR*oNpH(@7SEEJ~0am1Ar{z#QHs8te{mGJudA9ya8-cdYF@U0`ZQ= z!4=BD*;CC0i<}ale<&F_Wy-~QoHc+>B#-Q?WARYolC=(ON@7>WAGSM`zhcv@Mylk| zW@#ZryTpm*px5G6qJx*YdEH}Cr#V&aR!F|N`1`4Uoo1$aaYT8pD^+q`VE4Ecce z$Xao)_b4qHm81ns?^zTuOV{nSCu1k~Fqruyi zQv2o^Ij1c-XKzPTxISoIjc&$K)bus^AYnLlmTfO=2YHL1sL?~zn!irm!f=gBB)F=4 zrsYJT`d7y;E$3a{Q8CJgJQ9teZ*+Hj8H?ucgkmC2Cj9vu#9I|2>ws-KIrKv?$jc?$MCz%!5 zQ-MFCK2sA_f>J?bqLdVd^IX@k|G--k;?a*|)E_Z~tqz5O7a`5g19o|*C{;FuftdWT zf{v+h!wjwY#xag?Abu2lzxo52M6EVpGU2h>#<1cdy$U`t=GvVR{0iZfUyljnM@SjP zoq7Gfa3F^7JY*a3L0r=vi4*%c@sg8Na6b_>N}@gCv!-tXz_WH)J^_5~9pIuLI2>j> zT8~R*pU6-;Qcm)6#==;x-BOyKDb+&e@EtSNX6{dL93Wbpq{J>Zc(~KY7m))v4mQ{F zs}jWtUL+#S9kx3tkD>X+ABWpXgy2*p*0PJ$lOYo#Vnck!TLX|Y$k=`&7r^0refij#XU<{y;gj(&O*@ zg1~zV;0NLfZ;==aF&;4PA`bHu0!3IMH4znx&qO3Hj=sm{!WPZlF|~9q_sypg+tHuF z&t@ys4|17$F`^9J-rT>(4mA)--xu+(ce%!ihvHa_xE$VN5{p+6cqn8UUkNVo&LPO+qxo%#*tDL>lIGi=Ee#;<`YMF3Vj@l#9-DAN zP%LT@W=EZm1{HzTMR=H3Kw{>Rf!ajoN_5xm8jcz>0k;y(;&VTVa+tTz@AVNM(Ig`G zmr>rgdJl#^*!DNf>!pRS;;~mrbZY_YNoD<^<|+ZZIU)Y))dgd_e3N=pgz0fukZI^R zHuzvEK`5Js%p>6N-Yvd6Trkjh+C^@gcgyO*zOd%ZRR$v%DT{0wT})zeK%$G@c_1gq z7GH3Jbd!=viSiY1BN~c&9{>JhB(KRU-g{;z9iie4)=zl19SJVW1yF}l+UAg0m~=gW zgk9i4di+{cnx>5rzw zmp=)I$o`Qx##?HI9-)T#r)kZP9GejNdK!`)xJdwQ;IpVWS`@`{6_g>ogLF;M~cqhE%5N3#A!QsdoY!)=X^iC2N ze>xTV!+gHwP)%@5Xk|9)E1VH{rBg=AOZD{XPhg>(uOG=h!IfgO7JgHM8!CemINSR3 zVibb7mUp}_$Itu(z5W7RhEi!)+XYnR8r1h|?F>~)3Rp-^f0(WI0@4~JnEDXRgnb@q zh36k%fYgF*2gEe3o5)tZd5NY!uV(dXMzzis4E)s?{A0%G#^7&bpP!d1Y9@^i?Jq0Q zSCUV5ZBPG6wzM9?SELbEPWPNYMGlwz`CeuKr2!a%prM3=H9-8Ox;}>zjYzk9Y0%ip zEww5>R;3ZQBRWEuGVd@Ac#Ra1p?)dmX;DMCi}=+bD%N zOdY5wBK4HiuYc+*$yfrDSa3tA>X0XzQQz@`&sEK!I8jP}+VSi@YTfdCvr@`y^u{^) zwNgUKAi+6CIV#}F>QcrH{wb&d8L!&VtO6r}k)g3n>mWeEBi=QqQSzXuoFjt5WSWt+ zWt?)DP=MsO!yrQ|9+0*{5Qgi3VTt1M$S$V8K=k*5{F3E2i zG@}z+15l@oM1Vm_ z)Y3z5fK$SPgfTy~&TSx4=70p=#qtTS`j6%iBB)_+8ajehGdU>J*E>5j!SkpgcCC+D zuZ|Z~Pu?_{Tkug;+NyaxCvl{GL{$?*c%$Ne)O4EmBDc^x2{68<6X;iS2D0Gz7NRuR9;bGd3$0yt z_~z5N{~UsV#Q10IoVLqX)Lx7hI}eqN7=GEygPK?=rIfKYles)ZHn#jG@;9F>7VSe? zrasR7dl^Fha#YE3kUP|u)+wO)6Y_ugZbP=JCfxtIar&aI1UZr@r^86_|6aNK+=Kt~ zye6jTh(bBACDyQiWl)fYgkt>6lHnjeYflhl5dUu}>i-jhfOzLkBnFTW{=dof{~cib zBT*CZ3+hxnF%uvKg(sPK2#|vcmrBHwp-R-zrGqMzP7Kpkg({ax+|=bI{2x;Mta-t} z{qH3G|LWn9P2|w~1?8-e=&DCg_@9@^LP9`TLP0=a{NF*JZ>frj9eO{Y2vibZ^#q`n Q)e`yiso?%;{x{}-0kO8bvH$=8 delta 15585 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
      2VV_mJ5+(g$-&n!rVC(|bny3l*v0sa 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 Qf)?nH0X3|x?tdZue+n>T- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml - - - const entities = Office.context.mailbox.item.getEntities(); - - let entityTypesFound = 0; - - if (entities.addresses.length > 0) { - console.warn("physical addresses: "); - console.log(entities.addresses); - entityTypesFound++; - } - - if (entities.contacts.length > 0) { - console.warn("contacts: "); - entities.contacts.forEach(function (contact) { console.log(contact.personName); }) - entityTypesFound++; - } - - if (entities.emailAddresses.length > 0) { - console.warn("email addresses: "); - console.log(entities.emailAddresses); - entityTypesFound++; - } - - if (entities.meetingSuggestions.length > 0) { - console.warn("meetings suggestions: "); - entities.meetingSuggestions.forEach(function (meetingSuggestion) { console.log(meetingSuggestion.meetingString); }) - entityTypesFound++; - } - - if (entities.phoneNumbers.length > 0) { - console.warn("phone numbers: "); - entities.phoneNumbers.forEach(function (phoneNumber) { console.log(phoneNumber.originalPhoneString); }) - entityTypesFound++; - } - - if (entities.taskSuggestions.length > 0) { - console.warn("task suggestions: "); - entities.taskSuggestions.forEach(function (taskSuggestion) { console.log(taskSuggestion.taskString); }) - entityTypesFound++; - } - - if (entities.urls.length > 0) { - console.warn("URLs: "); - console.log(entities.urls); - entityTypesFound++; - } - - if (entityTypesFound == 0) - - { - console.log("No entities found on this item."); - } -'Office.AppointmentRead#getEntitiesByType:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml - - - console.log(Office.context.mailbox.item.getEntitiesByType(Office.MailboxEnums.EntityType.Address)); -'Office.AppointmentRead#getFilteredEntitiesByName:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml - - - // This API would only work when you click on highlighted physical address - that has the word "Way" in it. - - console.log(Office.context.mailbox.item.getFilteredEntitiesByName("sampleFilterName")); 'Office.AppointmentRead#getRegExMatches:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml - // This API would only work when you click on highlighted word "ScriptLab". + // This API only works when you click on the highlighted word "ScriptLab". console.log(Office.context.mailbox.item.getRegExMatches()); 'Office.AppointmentRead#getRegExMatchesByName:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml - // This API would only work when you click on highlighted word "ScriptLab". + // This API only works when you click on the highlighted word "ScriptLab". console.log(Office.context.mailbox.item.getRegExMatchesByName("sampleRegexName")); -'Office.AppointmentRead#getSelectedEntities:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml - - - const entities = Office.context.mailbox.item.getSelectedEntities(); - - let entityTypesFound = 0; - - if (entities.addresses.length > 0) { - console.warn("physical addresses: "); - console.log(entities.addresses); - entityTypesFound++; - } - - if (entities.contacts.length > 0) { - console.warn("contacts: "); - entities.contacts.forEach(function (contact) { console.log(contact.personName); }) - entityTypesFound++; - } - - if (entities.emailAddresses.length > 0) { - console.warn("email addresses: "); - console.log(entities.emailAddresses); - entityTypesFound++; - } - - if (entities.meetingSuggestions.length > 0) { - console.warn("meetings suggestions: "); - entities.meetingSuggestions.forEach(function (meetingSuggestion) { console.log(meetingSuggestion.meetingString); }) - entityTypesFound++; - } - - if (entities.phoneNumbers.length > 0) { - console.warn("phone numbers: "); - entities.phoneNumbers.forEach(function (phoneNumber) { console.log(phoneNumber.originalPhoneString); }) - entityTypesFound++; - } - - if (entities.taskSuggestions.length > 0) { - console.warn("task suggestions: "); - entities.taskSuggestions.forEach(function (taskSuggestion) { console.log(taskSuggestion.taskString); }) - entityTypesFound++; - } - - if (entities.urls.length > 0) { - console.warn("URLs: "); - console.log(entities.urls); - entityTypesFound++; - } - - if (entityTypesFound == 0) - - { - console.error("Open add-in by clicking on a highlighted entity, for this API to return something useful."); - } 'Office.AppointmentRead#getSelectedRegExMatches:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml const matches = Office.context.mailbox.item.getSelectedRegExMatches(); if (matches) { console.log(matches); - } - - else { + } else { console.error("Open add-in by clicking on a highlighted regex match, for this API to return something useful."); } 'Office.AppointmentRead#getSharedPropertiesAsync:member(2)': @@ -11393,13 +11260,6 @@ ); } }); -'Office.MailboxEnums.EntityType:enum': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml - - - console.log(Office.context.mailbox.item.getEntitiesByType(Office.MailboxEnums.EntityType.Address)); 'Office.MailboxEnums.ItemNotificationMessageType:enum': - >- // Link to full sample: @@ -13053,168 +12913,35 @@ // Log the attachment type and its contents to the console. item.getAttachmentContentAsync(attachments[i].id, handleAttachmentsCallback); } -'Office.MessageRead#getEntities:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml - - - const entities = Office.context.mailbox.item.getEntities(); - - let entityTypesFound = 0; - - if (entities.addresses.length > 0) { - console.warn("physical addresses: "); - console.log(entities.addresses); - entityTypesFound++; - } - - if (entities.contacts.length > 0) { - console.warn("contacts: "); - entities.contacts.forEach(function (contact) { console.log(contact.personName); }) - entityTypesFound++; - } - - if (entities.emailAddresses.length > 0) { - console.warn("email addresses: "); - console.log(entities.emailAddresses); - entityTypesFound++; - } - - if (entities.meetingSuggestions.length > 0) { - console.warn("meetings suggestions: "); - entities.meetingSuggestions.forEach(function (meetingSuggestion) { console.log(meetingSuggestion.meetingString); }) - entityTypesFound++; - } - - if (entities.phoneNumbers.length > 0) { - console.warn("phone numbers: "); - entities.phoneNumbers.forEach(function (phoneNumber) { console.log(phoneNumber.originalPhoneString); }) - entityTypesFound++; - } - - if (entities.taskSuggestions.length > 0) { - console.warn("task suggestions: "); - entities.taskSuggestions.forEach(function (taskSuggestion) { console.log(taskSuggestion.taskString); }) - entityTypesFound++; - } - - if (entities.urls.length > 0) { - console.warn("URLs: "); - console.log(entities.urls); - entityTypesFound++; - } - - if (entityTypesFound == 0) - - { - console.log("No entities found on this item."); - } -'Office.MessageRead#getEntitiesByType:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml - - - console.log(Office.context.mailbox.item.getEntitiesByType(Office.MailboxEnums.EntityType.Address)); -'Office.MessageRead#getFilteredEntitiesByName:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml - - - // This API would only work when you click on highlighted physical address - that has the word "Way" in it. - - console.log(Office.context.mailbox.item.getFilteredEntitiesByName("sampleFilterName")); 'Office.MessageRead#getRegExMatches:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml - // This API would only work when you click on highlighted word "ScriptLab". + // This API only works when you click on the highlighted word "ScriptLab". console.log(Office.context.mailbox.item.getRegExMatches()); 'Office.MessageRead#getRegExMatchesByName:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml - // This API would only work when you click on highlighted word "ScriptLab". + // This API only works when you click on the highlighted word "ScriptLab". console.log(Office.context.mailbox.item.getRegExMatchesByName("sampleRegexName")); -'Office.MessageRead#getSelectedEntities:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml - - - const entities = Office.context.mailbox.item.getSelectedEntities(); - - let entityTypesFound = 0; - - if (entities.addresses.length > 0) { - console.warn("physical addresses: "); - console.log(entities.addresses); - entityTypesFound++; - } - - if (entities.contacts.length > 0) { - console.warn("contacts: "); - entities.contacts.forEach(function (contact) { console.log(contact.personName); }) - entityTypesFound++; - } - - if (entities.emailAddresses.length > 0) { - console.warn("email addresses: "); - console.log(entities.emailAddresses); - entityTypesFound++; - } - - if (entities.meetingSuggestions.length > 0) { - console.warn("meetings suggestions: "); - entities.meetingSuggestions.forEach(function (meetingSuggestion) { console.log(meetingSuggestion.meetingString); }) - entityTypesFound++; - } - - if (entities.phoneNumbers.length > 0) { - console.warn("phone numbers: "); - entities.phoneNumbers.forEach(function (phoneNumber) { console.log(phoneNumber.originalPhoneString); }) - entityTypesFound++; - } - - if (entities.taskSuggestions.length > 0) { - console.warn("task suggestions: "); - entities.taskSuggestions.forEach(function (taskSuggestion) { console.log(taskSuggestion.taskString); }) - entityTypesFound++; - } - - if (entities.urls.length > 0) { - console.warn("URLs: "); - console.log(entities.urls); - entityTypesFound++; - } - - if (entityTypesFound == 0) - - { - console.error("Open add-in by clicking on a highlighted entity, for this API to return something useful."); - } 'Office.MessageRead#getSelectedRegExMatches:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml const matches = Office.context.mailbox.item.getSelectedRegExMatches(); if (matches) { console.log(matches); - } - - else { + } else { console.error("Open add-in by clicking on a highlighted regex match, for this API to return something useful."); } 'Office.MessageRead#getSharedPropertiesAsync:member(2)': diff --git a/view-prod/outlook.json b/view-prod/outlook.json index 8773e99a2..b05153dfc 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -46,9 +46,7 @@ "outlook-delegates-and-shared-folders-get-shared-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml", "outlook-mime-headers-get-internet-headers-message-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml", "outlook-mime-headers-manage-custom-internet-headers-message-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml", - "outlook-entities-and-regex-matches-basic-entities": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml", - "outlook-entities-and-regex-matches-contextual": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml", - "outlook-entities-and-regex-matches-selected": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml", + "outlook-regex-matches-contextual": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml", "outlook-tokens-and-service-calls-ids-and-urls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml", "outlook-tokens-and-service-calls-user-identity-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml", "outlook-tokens-and-service-calls-user-callback-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml", diff --git a/view/outlook.json b/view/outlook.json index 5e06b795d..db8f7ca00 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -46,9 +46,7 @@ "outlook-delegates-and-shared-folders-get-shared-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml", "outlook-mime-headers-get-internet-headers-message-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml", "outlook-mime-headers-manage-custom-internet-headers-message-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml", - "outlook-entities-and-regex-matches-basic-entities": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml", - "outlook-entities-and-regex-matches-contextual": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/75-entities-and-regex-matches/contextual.yaml", - "outlook-entities-and-regex-matches-selected": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/75-entities-and-regex-matches/selected.yaml", + "outlook-regex-matches-contextual": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/75-regex-matches/contextual.yaml", "outlook-tokens-and-service-calls-ids-and-urls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml", "outlook-tokens-and-service-calls-user-identity-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml", "outlook-tokens-and-service-calls-user-callback-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml", From a1f3aa89b24ca9d1935251685601c723f11aeb66 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Wed, 31 Jul 2024 16:50:55 -0700 Subject: [PATCH 572/660] [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 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 { const firstPicture: Word.InlinePicture = context.document.body.inlinePictures.getFirst(); - firstPicture.load("width, height"); + firstPicture.load("width, height, imageFormat"); await context.sync(); - console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`); + console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`, `Image format: ${firstPicture.imageFormat}`); // Get the image encoded as Base64. const base64 = firstPicture.getBase64ImageSrc(); @@ -16431,7 +16431,7 @@ 'Word.Border:class': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml // Updates border properties (e.g., type, width, color) of the specified @@ -16464,7 +16464,7 @@ 'Word.BorderCollection:class': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml // Updates border properties (e.g., type, width, color) of the specified @@ -16497,7 +16497,7 @@ 'Word.BorderCollection#outsideBorderColor:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml // Updates border properties (e.g., type, width, color) of the specified @@ -16530,7 +16530,7 @@ 'Word.BorderCollection#outsideBorderType:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml // Updates border properties (e.g., type, width, color) of the specified @@ -16563,7 +16563,7 @@ 'Word.BorderCollection#outsideBorderWidth:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml // Updates border properties (e.g., type, width, color) of the specified @@ -16631,7 +16631,7 @@ 'Word.BorderWidth:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml // Updates border properties (e.g., type, width, color) of the specified @@ -17401,7 +17401,7 @@ 'Word.CompareTarget:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/compare-documents.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/compare-documents.yaml // Compares the current document with a specified external document. @@ -19403,7 +19403,7 @@ const newStyleType = ($("#new-style-type").val() as unknown) as Word.StyleType; context.document.addStyle(newStyleName, newStyleType); await context.sync(); - + console.log(newStyleName + " has been added to the style list."); }); 'Word.Document#close:member(1)': @@ -19422,7 +19422,7 @@ 'Word.Document#compare:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/compare-documents.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/compare-documents.yaml // Compares the current document with a specified external document. @@ -19518,7 +19518,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml - // Gets the number of styles. + // Gets the number of available styles stored with the document. await Word.run(async (context) => { const styles: Word.StyleCollection = context.document.getStyles(); @@ -19530,7 +19530,7 @@ 'Word.Document#importStylesFromJson:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-custom-style.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-custom-style.yaml // Imports styles from JSON. @@ -19927,7 +19927,7 @@ 'Word.DocumentCompareOptions:interface': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/compare-documents.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/compare-documents.yaml // Compares the current document with a specified external document. @@ -20537,7 +20537,7 @@ 'Word.ImageFormat:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-get-pictures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml // Gets the first image in the document. @@ -20564,10 +20564,10 @@ await Word.run(async (context) => { const firstPicture: Word.InlinePicture = context.document.body.inlinePictures.getFirst(); - firstPicture.load("width, height"); + firstPicture.load("width, height, imageFormat"); await context.sync(); - console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`); + console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`, `Image format: ${firstPicture.imageFormat}`); // Get the image encoded as Base64. const base64 = firstPicture.getBase64ImageSrc(); @@ -20593,7 +20593,7 @@ 'Word.InlinePicture#imageFormat:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-get-pictures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml // Gets the first image in the document. @@ -20620,10 +20620,10 @@ await Word.run(async (context) => { const firstPicture: Word.InlinePicture = context.document.body.inlinePictures.getFirst(); - firstPicture.load("width, height"); + firstPicture.load("width, height, imageFormat"); await context.sync(); - console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`); + console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`, `Image format: ${firstPicture.imageFormat}`); // Get the image encoded as Base64. const base64 = firstPicture.getBase64ImageSrc(); @@ -20886,7 +20886,7 @@ 'Word.ListBuiltInNumberStyle:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-list-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/manage-list-styles.yaml // Gets the properties of the specified style. @@ -21029,7 +21029,7 @@ 'Word.ListLevel:class': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-list-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/manage-list-styles.yaml // Gets the properties of the specified style. @@ -21065,7 +21065,7 @@ 'Word.ListLevelCollection:class': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-list-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/manage-list-styles.yaml // Gets the properties of the specified style. @@ -21176,7 +21176,7 @@ 'Word.ListTemplate:class': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-list-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/manage-list-styles.yaml // Gets the properties of the specified style. @@ -21380,7 +21380,7 @@ 'Word.OutlineLevel:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-custom-style.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-custom-style.yaml // Imports styles from JSON. @@ -22704,7 +22704,7 @@ 'Word.Shading:class': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml // Updates shading properties (e.g., texture, pattern colors) of the @@ -22738,7 +22738,7 @@ 'Word.ShadingTextureType:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml // Updates shading properties (e.g., texture, pattern colors) of the @@ -22798,7 +22798,7 @@ 'Word.Style#borders:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml // Updates border properties (e.g., type, width, color) of the specified @@ -22859,7 +22859,7 @@ 'Word.Style#listTemplate:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-list-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/manage-list-styles.yaml // Gets the properties of the specified style. @@ -22958,7 +22958,7 @@ 'Word.Style#shading:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml // Updates shading properties (e.g., texture, pattern colors) of the @@ -23018,7 +23018,7 @@ const newStyleType = ($("#new-style-type").val() as unknown) as Word.StyleType; context.document.addStyle(newStyleName, newStyleType); await context.sync(); - + console.log(newStyleName + " has been added to the style list."); }); 'Word.StyleCollection#getCount:member(1)': @@ -23027,7 +23027,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml - // Gets the number of styles. + // Gets the number of available styles stored with the document. await Word.run(async (context) => { const styles: Word.StyleCollection = context.document.getStyles(); @@ -23488,7 +23488,7 @@ 'Word.TableStyle:class': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-custom-style.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-custom-style.yaml // Gets the table style properties and displays them in the form. @@ -23702,7 +23702,7 @@ 'Word.TrailingCharacter:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-list-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/manage-list-styles.yaml // Gets the properties of the specified style. diff --git a/view-prod/word.json b/view-prod/word.json index 37f0b1a50..c3af24568 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -13,6 +13,7 @@ "word-content-controls-get-change-tracking-states": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/get-change-tracking-states.yaml", "word-images-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml", "word-lists-insert-list": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml", + "word-lists-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/manage-list-styles.yaml", "word-lists-organize-list": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml", "word-paragraph-get-paragraph-on-insertion-point": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml", "word-paragraph-insert-line-and-page-breaks": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-line-and-page-breaks.yaml", @@ -33,6 +34,7 @@ "word-ranges-compare-location": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/compare-location.yaml", "word-tables-table-cell-access": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml", "word-tables-manage-formatting": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml", + "word-tables-manage-custom-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-custom-style.yaml", "word-document-manage-body": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml", "word-document-insert-section-breaks": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-section-breaks.yaml", "word-document-insert-external-document": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml", @@ -48,15 +50,11 @@ "word-document-get-external-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/get-external-styles.yaml", "word-document-save-close": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/save-close.yaml", "word-document-manage-annotations": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml", + "word-document-compare-documents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/compare-documents.yaml", "word-scenarios-doc-assembly": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml", "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/multiple-property-set.yaml", - "word-document-compare-documents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/compare-documents.yaml", "word-insert-and-change-combo-box-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml", "word-insert-and-change-content-controls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-content-controls.yaml", "word-insert-and-change-dropdown-list-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml", - "word-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-get-pictures.yaml", - "word-lists-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-list-styles.yaml", - "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml", - "word-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml", - "word-tables-manage-custom-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-custom-style.yaml" + "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml" } \ No newline at end of file diff --git a/view/word.json b/view/word.json index e66ed8d05..fc36e63cc 100644 --- a/view/word.json +++ b/view/word.json @@ -13,6 +13,7 @@ "word-content-controls-get-change-tracking-states": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/get-change-tracking-states.yaml", "word-images-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/15-images/insert-and-get-pictures.yaml", "word-lists-insert-list": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/20-lists/insert-list.yaml", + "word-lists-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/20-lists/manage-list-styles.yaml", "word-lists-organize-list": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/20-lists/organize-list.yaml", "word-paragraph-get-paragraph-on-insertion-point": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml", "word-paragraph-insert-line-and-page-breaks": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/insert-line-and-page-breaks.yaml", @@ -33,6 +34,7 @@ "word-ranges-compare-location": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/35-ranges/compare-location.yaml", "word-tables-table-cell-access": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/40-tables/table-cell-access.yaml", "word-tables-manage-formatting": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/40-tables/manage-formatting.yaml", + "word-tables-manage-custom-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/40-tables/manage-custom-style.yaml", "word-document-manage-body": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-body.yaml", "word-document-insert-section-breaks": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/insert-section-breaks.yaml", "word-document-insert-external-document": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/insert-external-document.yaml", @@ -48,15 +50,11 @@ "word-document-get-external-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/get-external-styles.yaml", "word-document-save-close": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/save-close.yaml", "word-document-manage-annotations": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-annotations.yaml", + "word-document-compare-documents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/compare-documents.yaml", "word-scenarios-doc-assembly": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/doc-assembly.yaml", "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/multiple-property-set.yaml", - "word-document-compare-documents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/compare-documents.yaml", "word-insert-and-change-combo-box-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml", "word-insert-and-change-content-controls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-change-content-controls.yaml", "word-insert-and-change-dropdown-list-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml", - "word-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-get-pictures.yaml", - "word-lists-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-list-styles.yaml", - "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-comments.yaml", - "word-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-styles.yaml", - "word-tables-manage-custom-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-custom-style.yaml" + "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-comments.yaml" } \ No newline at end of file From af277afe1a4af281d46e45596126fd82e89abc02 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 29 Aug 2024 12:02:28 -0700 Subject: [PATCH 574/660] [PowerPoint] [Word] Map snippets at class/enum level (#931) --- snippet-extractor-metadata/powerpoint.xlsx | Bin 13554 -> 13927 bytes snippet-extractor-metadata/word.xlsx | Bin 26937 -> 27549 bytes snippet-extractor-output/snippets.yaml | 747 +++++++++++++++++++++ 3 files changed, 747 insertions(+) diff --git a/snippet-extractor-metadata/powerpoint.xlsx b/snippet-extractor-metadata/powerpoint.xlsx index 93e9517e267d71f9ab02a7cb574543501637aedf..b026df301c9895d2451556e867e015b994737620 100644 GIT binary patch delta 5935 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 diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 927eee6296d1c28a51eb9a06895595a5d7831103..530eac3d29ed6019a1f7d501f49508e6718535a9 100644 GIT binary patch delta 15365 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 bTL{Cn8zoFx2*G%mCZJo=BBXr%kLLdYO~^eb delta 14720 zcmZ9zbyOTp&^HPMS==?q0t+kzhv2gK;ts(BL4r$gTUMQofztkyz9nOGHdt4Pp81H)?2lL915L27Io{Mxp& zVmj=}A5l2D8EH%JS3Q&zn%FtC8zSazDIYUV46Ty|(k+e1! zngDYCdpQFQH#2#=cm2sUH_OE(l{%wra<2}#S^DOtiu`AeBclArX<7#ehtnAC51EoWHa{?^QwbSR{ zG>Nz(nkXS|X3c7%a`XJX{3x7^^?9LizY$i+v9bc#0jk4c+Bd?vLaC2>aAGcd4Z{j?7LI+ zdcP->gK4+2u;pD4T2OZfCJoxR$b?8+Ax)rw8)JQ=i{XO z$i`>tX;w^@>5Tk664Z0m9~{=03~sJ~+aLpaTicfRFW3nXG@?3I3?3v5{{GxYDJ}$r z?{*2+SU{M8;{qp9-zw9Q@CSb;QWsj_WR%MU%TbQLhZo-{`iGc}VLlYTqvn%t^q+(p zJuLX&HqtMIU)nkTE(VwP^L(b)%J@5u2@XsxlblLR_kU=jFi#{K+7Hq$4NIr)7+*|_ zr783&$Qma3Ljam$EHbc7i#&PThBENAh@$vRvE(ProW$g+mp=wo=Qo|+T^A7QHz2Jn z+$n9+rDnk_z)G|#Uu=&yp~e+`Kcd6CEuHX4k#2r(J&W}_9-D3^m*9FgI}s|@xH_d! z=N8(AYdS0-`1uk0EK`L~Yj_Zg|$RqM8&;@5p*8&;DAFJ+vjhqj(1N2qPt zVJ8VNB1Ws3QxuX`!XKHYM=pB_qI zUP)hH#?!26ox%-trKM8->Ivw{SSviGl?Y3$q8yHtan;y80f?P2=NR(yMYC-SG8eji z(lOxk)fD|_H68Zuf;#WBa(;d(W;qP_LEf+qBd6wME3&nyh(Gf1Kw(w+uKyIYVC__) z@5Xkqx`{I>kwm)!zWA&6xevT5egG2{^U`a?yvUYEWLVU`j$VKv)y&ried6d1wNqWs z7hwP6)PnSRI9i`omzeuB3mT|PJ_2=ja^}Ej?onS4?GT_~NG$J|({4xgwHn`!WoJ5s z$y2>)7~$f~B&$gRIj26MAu|XAdZ~lNYFVj5zn#na5bd*YWiI5!^J7f5A$&4{8#=mA zk$yUirWcWMtV%o~dE!7oKzMoipHrgI(YGT32jA~KegVTZhtC+6X#LlF{;?hA0Z+fs z-BHsvkLU+}$kax~-=3`Kq=@A+G{U3@%ClZ>A5Pj|?jEnkOkj6+Sua=Ou)7@-n4S3Z zc^~ZMK34p^{rTyt&*a%d*#GHh_2uFvv;F04@#N+9qDq|lrT*o1YiAYXQkLC7dS!Lq?yw^~6Byk|$YW7;9#*s1Omxcr zDb!=z5~f+f(c4~RqkPgEdH(MCUdn7GCeSg&jzjd%V3FuQ&5ju>ky9+LhcnYmlino~ zv0)zXA2{*CAhKeeQUKfCFZ3B&q1(P*N*-1Rc8G2FL-X5$@S@l{WITqpi^&PjxMZQ-<` zP_oXY1V_vtZiEuu%01AJyfY>RUI=XjJ5O_l7A&>Ot|X)Evb52daN;- zj4tHsg_cUj9x+ZC_MwM(lVkRXHVX>xqq}AP>=|v#+vSTj06ks*KXg z+-jq!7TLuMaQj`?k?o(n8&Y<8=l3T{6}D!_kk&xz82@d&;-_Q-06A^6(|Zy?}T@2C`deZuHPq`BIC1?|Y@q8Q@k|2V9^>E)ObtOVpE#8rapNMq``i zhrVOkB$rbegl6|u=#6KrQzb^GkW##|I|8Xxr)iq=(8!dj8?jJ%j1ZAe?07jwCQL|a zQsrN@nM9hh!q$UY_fb>qmauuFJoOHJ3(p8W9_l`I$?^y>pn8X1i9~U$ zT#SFe3|V$;`FhKC;wzG#xPnisNi1@-=FKzy&9;{G)|5wV)^9VRcPOF{;KEN33y3WJ zSF-9IJASWxi~UOaB)?(N?dY{5WgbFoD?sZtuf@7xDN-_WF~E2UVfYL1WIU(51##neTaX zMC;#{&-!&Ix4ppVjDnbA>YtdX)+{*Q$<<(d{>M*H-o=iQIqR3d`u}zfo5YvB<{tGf zvHYM|JmcXLq1!+q`CMU;fxN94Vy=Dan#`VG6P44}c3({cD7N%zdNybfO4&^Ue1BDh z3Fdr>+3xj_|3MCgGkIAWzZKUhL5>2k$dxVhdsHNBF%Q=VRqvNWb@DW+aQ+R0WGIX0 zKK^zDUo#GjM6ngKbB})cYvw?ixX2it`HsbZLDp0iMHI8x2X&`c`-}Ilcbd~J?Sf1j z#`NWdK~}gi0oNXBpTOCHwx#4onj>wt`0M9U56-s~OhBijx`2CO+(PeZB|}Z!W>vOM zHDj1A83rQ$EK!UXKXYQ0*~WGH@4`xVqi8sMmY6^i(*3?i>)+cRvrn6;O$%;poqWc+ z=i*q%tH-Yv3Yr>OUotXM^iQ*Nq=>AJo&8RPi^vdnC`Q_Z!t0`3M>vE(JuPq7UPAnA z8xo*(>KX<@?%p2E>Y40+Kd;oAszBOE#SQC}Fz)j)Zkl&#EpiBJaJA-J9c!DHszu(& zgm}j|#UUN%gpH)zD2o3z=eHN*P%|kMIcdkDp)WN2NSa0AqO#p0o2-DMD*SFT1v&bs zne~(&7iQg>bZ|Cka@0ntP3D6lA})26Lzo}pU%OePtE64rw)!pyDIPVK85BqS84cL0 zM?oRsx2KQk@|d4bkvZP7$e51V`f9@KmLEw>IZ;HsgGvSGy9V!VlD+piQp6;F$U4^> zuhL-^1{JB|S&!mW-I-ZKN~+#6hmPQl*UbAhAyK$#)p}Xr&iI<} zYqWZO!Fks%ldO!Qn#DMowb8>4kAf9U`~~@Fb6kgdJyD2$ZY?4=6?BAtbgGet{M)ud zTy~&dCmgiZSr4z}_`AS$nrY_{shV{80Fn$@Stv+Y zmtr8~ZATK%Y?b452WQ(-w7>Z051l%S4e(k7)jJL${ z2p7z!Z;So=LT~?uM6Z?5Y7rm=D`SE>cp|}c1Fc@j^eB+-!q;|QB zsE&C}h=hkn@n)xR@L^MLS@`!4J_^{|re@gh#{w>j|CQJ#*9-pBJbTTSrikPvW?jYl zQtrj+9`k~VD&ttOniw13?7^e-vu&H^^#*;VljTrUjk+#}X(vaR@;H9TCPX^a*R{2I zUu+KmFz-Idm*I^gW?>VL_rG7psw~O>+P_s+FfSJpt#x`?LJOmxKME|hs+lr+lUk7K z;iI)}@ILy;=SVLE?)w!z(x(0(L3J8qFL-HiH=+r=hG}>rEy%NV9dQ~LMU6+WjN_2H z&Hu3GZEcmAdhjnG)=^h<>2L>E^Xf`@nN}UO$S1ic*OqI>6ft{KD($Haj_5n6`7>Y~9dE(_F z%Lz4=JbdUDK+X z6xdC%G_McxeebBkM{8?c+*3qm`g!q_(uAwtG1p1;IS_g@%E% zdqDk%X&WOj1&(X_3@<5AHIAxrBFjT8jp0nf1ZDml}wk7Kg?#&uv`13C;)tIQ_h zsR#@=8c9m9h^s;0-&+)euwJYDiWybW^uWD5R5{9Y(J%8caXK?KX#()QV@2!AMv@+i zZl{jh&aNn4hHo&38G`1Z$eSafVAQ_YWPc=P({VELCC7WtKq7Wdj5%4k6B0pgS2SbL zI9;ZH04kDD`1Bwcqp#rISj0ixw*p|9Z-7Z1ld^?R_X)F=*|+;RkgCl5&X=tpn^5?^ z=hoO9m09VG9wn2r)gVp8xh1pxJoLzl5whpiGhDBK;oZvdHI_DG#x*fsv@+EvP+8xC zoP5}w>jk~J>;0yMt$mE4;>W574rbysO0JTgM@R74InlRFO0is&T3Z5ckeN@uH| z@eeVc_QEPA88be?R1|>|ZK_Cim7bw&2L6oaZzBbC1)s#!56zgF04zp+47&cuz^Smm zzPVdJlXNjlmWheNrnbJ_uA<@;CRNbfP_VF!FG6~)_7uHvcfM_f7WTaWyKok`v%_$+>L#XFW7+wshcU8Y#1a(zf-d zXC7Y<)W}&Uk@wVMR4o5(OL72wm<#z~ibG4HXX7^JW`%CkP}F_i62Ka76d^c`S&$nb zoJ^`9(=kn6{_9WDL#Kw{*D9LQ(u7Wco#YjIks zLu4C$ggzJ)Pu@jldPMgUZ=t=hv>Dq#CTA$i|MrFP-REz0J)!#PY?94`ilJltK|(kQ zj03M!^6VhPs6-gQmERg~J6R}Ro*_$c8y8WVpo5kb{-LCyks(-6Ju3EK?Ed2sKNJqd zNVVp6ov9>Zr8%00ckW%|nI0pVFU~p0uab!g=b{jxAm2HTsp-@v%G1aqqSHnqWmeS@ z%elBobmEEcwhR->8M0^R2wE99$enlGUZe z_r6yx_jK`BE)YB{z6@L;Jnde+#v$Jy3QH&9tC=W!kSwmhuh%ln$mOK&Ch6Tko$!R4 z?e7IVg5EVA_t9St^lD68#pFOm`e*8i?fl&hM1Y%6T692ey@w-a-i(lmu@mdG`6^iy zGV&g5Qx<7bO$2CFMvcj71{J-LfJinD7MLA1Ceu~w$U^`a`w#yyD8eSk<1@$m6)Bv; z43g$nl)t*`OwWNrBG?GvVe5z;R8HJQua>%@cSIA=!t*yM1*ocnfWP-z=Y{&caIC@9 zc=Zh55?FFKGn8=A9xdZB`H0#>)Uj%bR;ZMxm!AB)vr<0GeJBl>dnECB}X(R}@E_VN)7eOU5- zBLY-(y{yggiMVmV-ovm{>_j4x@do7Ok-=%HTK&fke|7E_zlE#mUuwKbrrcpF{uGYA z{dSsgb6AA2KN5tvmW}+Lj49_Qc!Ciajt#&V%UA;9BX=su!|(uk-6vBeQGp&aK+vaZ zwmmXVB6Osj48G|!rm?W~FDSH$A6m9*bBsHTx7OM6J)CljFcTCLAvnOVXoys5NDZs- z-r!;yO11dbc{L6~XQtLf+(?j}A`3c}%({g8;t}%0VWFo;zk_h1jSZi<$da2aRLQg% z8JCfVNg~b(1|(b#jabkg-sJ1)a$bOcJNER9E#^I>SxE!s|EXq^=j0@c3}3)NWs5Tl z>4O+C4VD=Blq)Qnl46ireh7i?#4}3$2oLW;J$oxLkZC#8WtNP@kc(ApJ7u?P{nsZZ zd=HPwhKj(QkJTi9 zr>%bqp*;LaW3=rFwDAy+FH^u6vW;h0{vSyH-q^_aGerr= zt9gQOeCpTd9l=4>t|1rq1>ORlgr26n=N$Uy`YT7^s@qmJy>A2(a~QCyTEXbz#v;0Z!b>wzH1_4reRRD^_%ddyvV zz$W|>8My|?n+QOn4KY`NOwsQ9Cuia*XsJxS=cB8VSV{_q;2Ll;wBu7~6T!aGUwl%{ zI*ff#74ODn!k{$xelgw}EWj?$_@(7cZcSjDK4oL_l%1q(TQ6M2Mu#ibE8Ju)q+1Kg zujNP<{YLK|pRcYGb6RMD4MePQGRNXgfgIFXqzVB6_)F2&?i1W`gCOcF-;AM`pA0mf zKE5W(@n48+zLOIEepMet07kq0Bf<`P?jspN$j%&Whb$8mknY4J0a5YP(=B^LfZU1R z!>u)jPKzGL>e|wYjvj@KsC)!G9CrkJBdvw3|J`{v}%ZH-ZRN7 zxpX5&Yl%k~dwPx&O?-BXUq6wCw%`O$X1|(sL%24J4e;)7d9m(WJ8GxIx`AZLS{5en zV^;Z>j@hH>nQ^^MKhDlY+<5#mSx*e>qV(OyGU)C(If9?VN!>g_M)Qk2mg4Q#l$?JF zqNwL$^NQMN7H&b}6BlG~N*bam+j=dm{y-UlUjiYTju8jC*#u+k~k$&TkAzz%n>ji-?QGtN{6F6|VqsJwZq#gV<@~hOOYoTb& z^q~tz0bF-~mUQ(ZNxFEtulVp81mRza$26nxoU~EWF?VWN=xr|t*-w-l+`o$SN)qn)N3cqZr7I- zORVc4%z|AyqD^~o$;{JmqGnR)=`s@5u1Vgy*^d9IWCkX{ zHP6|j()rN9MvW&4m4~QInL+5#d$o|wP{ZSFnlm_|VEFx(xBvF1TuVg_K(1;RObD6h zL_MMuT(?5oFUJnePyT@&iL{`QEuH3I;9*?wWX-3XzCHbunWWJ&H3CHX`mrrVH7&$7 z9t^(-bDC;iR=+}NfnT9mt_-jjz%!L)aQl!51`JJS*;^xl%9Wa!pK_cPColoapf89L zkz-Rz91(URMY-xcms#n8pl3o@8zA&*zqPa_>om)P)ZV?(1ngfbjv+~OKAB8T^G6;_ zCO3dmb*fk7hB}S;JpeEU$_U6_0)|{VOiG^=)^}kd>S#(=Fp}>63jQZM;Xz*)n3L^s zzJg6VlEypHQgVcu^QSy_j-biAvqJZ8_?x(D+P}0?==L8)sX{^=CgaCp*iuw)%fSu| zscpI0>%7%Xmf%TrK-FcRl&R(rvZ?$oBUjE_gObg<9P@91&^fppgH#+Cn4)C7oJB;? zBsifN1ktj^X_imT8=p(x#WcSl<1@YwrCSBf#OzSBN;O7@!xxlUb|)Tc^m!y|JB#O^ zeh?EK*X4x>5aC(86ZM6896TjOIf6%A@zx`xd%{3uWP=XCO)_2rCNsz!4I|kxW)EYz zXy#Of2i${~Lwi2?Y5+pbWWGW#rLIy29YH@wUn1l<2g*?5uqdIB(CThm+W_xdxU?6hvq*6NWjk{95>Z8#X8i zejtFg7T5@V2kyTI0gz>ykfa*_NJK)(6$l*jd>P;uV%)1RwyZ?&~5J(w5*{ z6bi3aW=E|jLXqBzVc5m&r@hdL%^-0gP7`CpGku$nhqVbs-i}X;BSrq3(NPkYjbng# zbJ0>)I3r!nc+j?6?R$kOGm6cGVm6dTBnc~bk)LMd(tg`aoE01pDVM9;6$DY?iw6P+ zaU~;^*dt$6KDY-V!%p@GxxBZtG&F;E|9FWnzvmiCOzoe6mlH~CC2~q562hfV!(;;0 zRkJa=byftvs0e63C0~JACwdhVWF0K1)yBD(2j8!=$=4?hlm~z%i5)KJNROy4V5R$9 z2NFQx33D4z`NRy#P#uyb@I*W^31mqHVA(Nbv&{$Jpx~Ru$go%@x|ycF*Ad~vZzUJm zau43sh?1Y7)DcR2EfYyWXBnfHV>kZ%v;pEMS#6stDoz_rf5PO&8%9M9S{WGX*SSjB za#kPDqn7w-cZgUp<{GHAa%HLws}d@`U~s2(rqSEj&h*FLo6QfRZi@Ad`yK0g_U1w2 z4f=_EX}qUudGnZ(cwN|y4v!f>L4_HKFHcPgxB*s< z?1E%h-Pt70t<(QT!uV@LuiKi@<H)O_LeHQfq= zM{;HUYt{yZa5E(t+y@lce0nbw9%I^1Zlb_7TG_e0koB8wHnkb0F;?zTQj*JB9vqen zB$Mt(5eK$O{M5xG)cLg4{6sd-9MYZTj}mrirXdk~kE|Kh!HMUBN`7f@92$nernAf^R||hA0T6)&*g(-8@)p2 zf#`2)B?!V$Ujc+5tWB|%xM!Bk+LgDAEpYj+f7t@_sgx#=GzTdWjQ*R$Ugcvfz_}O+ zPGsk+(XLTybz>wTvf&b+$*7TkLV_R;8yVX;%pIHeRtaEul>sM4KfokFXN7`81nYAr z_4S}%;8GuKh(;$R@d}?SCsFASN>{*LJ83pfgD)oT8!p5Fo?L{D%&}rg<^$7yA_oCR zXc&GMgfG2@f9`Qzm;DS^TSo$r8rV&acHscn!j29Z9KRvHhPr;pe)gQ9{Y`mfP2fUx zmXRKDDF(-}Zh0N!ol1zoX)82QFFW0^HQ}x^(hwHjMhKt#J2fVnzZ3uC(h!W{{cNF7 zkpt94`1<$#2e0HU)z%>yU(RGoa?r*JL&pA(<3}-*O)ovf-su+p|SCt0L_u|bI z+pA$?y7HTbN_dhF1By{>kvW_Ib6v9b>z4O=(&9k7aTbR9ETFKS7{X?LVrj?#HzIg< z4fr7^So(dBZ~cW5zwGU|dag8CyJ)OJug9E(a2Z64-FpR{xc=fpoeDPL)eo6Y)D;Pv zr1NRA8YT~)=l3)Zy`gKgaMjBYn=n~WRG66H~(|3{Za>@$2;$_Bu@iaEC zKVKsX;T$B%Ud8N7Bhk#`?}}23R-mb$Q5V>PUH{xX5}q6h1{= zPR6bo&%O%VSA7$^#tm;6(Av_T$$(|y$gXWx#n!9oj+^dM7J=LV_?L3TqrsY z;u)mxR&U1Z{$Waf`2i4H3}p$2Y|9K29(TjST!dk?x(8#hy>eQ7i-9UupTkSZ65{}+ z*mOu6N8%Xiw+!w?fwsI^EbRevQ4GcMxX3Cv7>;cUOXzk6Ax#tWK$!TwjxP<1UE2+5b3+f)D-}M7~gVNF<3I*;j0sKQ-Cqr zJQ$0mhB>@>wHgz)CaOW>@c@iZ0U_+LJx6hs#-0ygQJ@CfCXidktEwNarKlfoV+zJX zTSO0QQg8T&fr~cp(u*hwtjS)C9e0G*SU zZqN;>{VG#$(VZ1pj){uYP^bT-X?&vi6+!I5 zeG-dT#Ja%Jl@pjw_(sB$IeoHS`;#Z-IP!LmBNf?M^l}RKPh2CAMwmKeG*bPe&vbQ5 z8?mV;Sp;^uzA~~=efSq%2G}{t2Q#fpAYRe?jKaFWk7NRW<|J5gDzx1_%aZR#Ai33f z6huDI{ny1#d>jlbv<7mXqNx$4<)$b?wh00yF4^*F=}f+BYzW`{$l^W6%xM}C2*FBR z7lr9W3dg=lo%^;yYKQEOXnAB~R7vWgo&k^%bP2{ecQG-UB6L+v~-&z|s7ywibQ zi(?l_72>~nkCMjro<3rwaLJF7WP}&~M!6Yc1t73=Nt(J^G^_?nuP`4} zC_~l%AZIIQyjOf2nq6Vp`FuzOn%KpSfnsoF5gK5iNtp`3Cj+HrnsX?~%}-J<(ZkM3 zRJ4sOo~RmY-?b9<{OHp8)$fS$P@!On0o&vu0*7_0-F1;_qDAE3sOw6%zmtq-dteCU z_R__hGEKV88u_t_sbq>mii<3h3sDOO69qLak+L%+>JgDyhbSSbYj==tW9NGDm<9C& z`=YUF;1=oSG5}zSp1jdjluBYgQv&_RU-Iu?+OBhl|W(B6XFg4Fr zZz6yqNF72Hjl_6=j_8r5)AmbWD3buSlQ>;Ko@ATLXi1lXPBCQdn9xom_aI4* z(&}5piwL}axel2FB9gDlw~I*;a6H6!V@hp}k=o-n%6zz=OptE@{xXN{vyq{Mowp?| zNzrjIc?%ifF_Re>AJwI3V44?Ct*XCfTRq%3`Ao^8b)Nk@*KjeEeHF1DYyAwa) z{=}bDqXU45<%N)>ydFGhE0X-=4?=UGcmRCjX)^;n3I$|DX2t{bkcg)6CdqqtVRZ*n z(bp&FNb-IQyf1aDYRG|`H1ewd^FATlj&J#IaDbR=bl5$FJ32XwexH4lEwHd<3~<8| zSSv=)>a37^6#uX6!h7eTC+(2*yU7m6yJn;HE2T_+dE2NAye9=L>)(fp6zo_suk}C& zEBm(VGV+w$K`j$s6DjmQhJqg%*~wMh_9@hsZr?K)itx`mG!o_RB!gIeBx1o?4&f|; z+uoG<(lFUjrCH?fe2#3C8V2)8Q##;5p$9#6(GSp*i`LynLdF5fOm0)Bw7!3(e+JGC zf92QL@(`g1iMS-ghb`ZU0KTSoFoWop;+Hg`+KJ|(fQ=KKbN(h5FkYW_vxS`(E5`&+ z5QXd2xW9`!6ZtobX%$MXqaP9GXi3GSf1zi6F0dT%fvS^rS+aG0OY+!$mR_N@sQnx% z6CIP?I$ep_>O5Xg6S6GhgE1CLEvg=l`#LMFp?Q!QI965X41UGbEL|9JI$)VGQs-Jf z9gdh-1U_=jP~KF5t8&9hgWwDDm4P+!d7$D;&a}y_>6u-b?-k>CoalsyXvp8Gsj1M> zVHtgG%XI&<^?$s=fp^RpOBsO$W7<#;g_NiEk@jJo7w9Xx#jqv<@oHcICS} zol$&Agq8HlvMQ-Qw`NT}Kis|e^xZqGuZ!iw&ONOV@A9SSSUoQ)pY_sZ*m|fQtiofD zf!duJR?KDF?CQTB72Y9tRFEOeUiInQfqPY1I7sfAVE{jjPPJvOsn10vXrVH5v1DUg zXm`JGS(u+7o^(FN7m)duwz$RC!XxOrmb}Vl;0Dgd})?f6cj2g<<5v9*(AhW6D&|jMx1F6z9IO6@aj*;qbsx$@YdWNRT8iHGn^3V=x97N z273CPr>U!B`F8kJpMQzfa2V^n{!)z(yT?L za)nrygSOB8Mb8P$W2OEWxp(Gh=kNC~BPL^`3uXl~UJn`8TG*nPpJp3_#gER*?aK#; z+zS#74(i1H?k_jyg{t=dCUn}_pj|v)?wqKq^0{4Q#iZUA(mbDU?DcpV7^OEyM~>Eg zRQid7e5~!`lt5-c2kUTH6u=8R!8{ZOh#XOq#SzKN%cci0%KU-Ufm082j3+zh!Jz?Z^&+3=;hf&SL%W{0MsL*y4!3<)0n*oA-}`0}9YlqQPvP zC`c+763SolZVm0y^^i4`JM_usjnB|ohh~2zn}(wcS#dqv~VpMMxwAL5FMQh z3g#ewzP9?u!5SSv7Jlvf4f8WhpbsvD-4=owDXk*FI+Ytll(&a&4J|c1Ly>5SzsLIB zV7j5R2V*)3yR5TMD2dh;Ij4>_ItOW|bf*MKZco%v(tk+&&>6KQ!e>KEqHlcKR5Z6# zpzyqpv&-e|*ZlGzI`~s)XEZTol$WID#2Eo-A=wqbPQar6olYwK&Cw!(W zB;DZ83_GJeT=cX%QYpI!RqBn~3W-W01=YO@cTYaUIZ@9ufJ&DMogkoCz}`tP4mKx~lw$i+#ctYA+D?@#qatpdMq>dC$;|CJuek6ybVd~Eaf-jl_~Ts~Gn7$jg$UiR}3 zbkYmz3l+zFv!q=}8rJFfb91KR@q8Ag{~>sm<5D7jcYBu>_$KS?)tB_dhJmh6ZPMg1 z1NKlTv`8?6(|gGBB9?Dx{)x|eRjn`lg<;Z~Y)neQg`#erD($s0g}nQvuFBK}_5a(W z$oN?U5t!ihneFZW?f^qXAbZ`o^S_5?LdRzrq+!tnfVDW1o=k$gH4Wu|@o)ee0l{4Y z0fFd$p|4ku(1Z|c2-1yCf`=YM!html68?vTIDO^>hz%a)f8lBY2?4- + // 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 575/660] [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 576/660] [PowerPoint] Add types (#934) --- playlists-prod/powerpoint.yaml | 19 +- playlists/powerpoint.yaml | 19 +- .../powerpoint/basics/basic-api-call-js.yaml | 5 +- .../powerpoint/basics/basic-api-call-ts.yaml | 5 +- .../basics/basic-common-api-call.yaml | 2 +- .../document/create-presentation.yaml | 2 +- samples/powerpoint/shapes/get-set-shapes.yaml | 22 +- .../powerpoint/shapes/get-shapes-by-type.yaml | 4 +- samples/powerpoint/shapes/shapes.yaml | 43 +- .../slide-management/add-slides.yaml | 4 +- .../slide-management/get-set-slides.yaml | 14 +- .../slide-management/get-slide-metadata.yaml | 2 +- .../slide-management/insert-slides.yaml | 4 +- samples/powerpoint/tags/tags.yaml | 22 +- .../powerpoint/text/get-set-textrange.yaml | 25 +- snippet-extractor-metadata/powerpoint.xlsx | Bin 13891 -> 14139 bytes snippet-extractor-output/snippets.yaml | 413 +++++++++++++----- 17 files changed, 407 insertions(+), 198 deletions(-) diff --git a/playlists-prod/powerpoint.yaml b/playlists-prod/powerpoint.yaml index b49e82491..173fd9f1f 100644 --- a/playlists-prod/powerpoint.yaml +++ b/playlists-prod/powerpoint.yaml @@ -1,19 +1,21 @@ - id: powerpoint-basics-basic-api-call-ts name: Basic API call (TypeScript) fileName: basic-api-call-ts.yaml - description: Performs a basic PowerPoint API call using TypeScript + description: Performs a basic PowerPoint API call using TypeScript. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/basics/basic-api-call-ts.yaml group: Basics - api_set: PowerPointApi '1.4' + api_set: + PowerPointApi: '1.4' - id: powerpoint-basics-basic-api-call-js name: Basic API call (JavaScript) fileName: basic-api-call-js.yaml - description: Performs a basic PowerPoint API call using JavaScript + description: Performs a basic PowerPoint API call using JavaScript. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/basics/basic-api-call-js.yaml group: Basics - api_set: PowerPointApi '1.4' + api_set: + PowerPointApi: '1.4' - id: powerpoint-basics-basic-common-api-call name: Basic API call (Office 2013) fileName: basic-common-api-call.yaml @@ -24,7 +26,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/basics/basic-common-api-call.yaml group: Basics api_set: - Selection: 1.1 + Selection: '1.1' - id: powerpoint-create-presentation name: Create presentation fileName: create-presentation.yaml @@ -35,7 +37,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/document/create-presentation.yaml group: Document api_set: - PowerPoint: 1.1 + PowerPoint: '1.1' - id: powerpoint-basics-insert-image name: Insert Image fileName: insert-image.yaml @@ -85,7 +87,8 @@ rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml group: Shapes - api_set: PowerPointApi '1.4' + api_set: + PowerPointApi: '1.4' - id: powerpoint-add-slides name: Add slides to a presentation fileName: add-slides.yaml @@ -107,7 +110,7 @@ - id: powerpoint-basics-get-slide-metadata name: Get slide metadata fileName: get-slide-metadata.yaml - description: 'Gets the title, index, and ID of the selected slide(s).' + description: 'Gets the title, index, and ID of the selected slides.' rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-slide-metadata.yaml group: Slide Management diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index 753885a9c..601310029 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -1,19 +1,21 @@ - id: powerpoint-basics-basic-api-call-ts name: Basic API call (TypeScript) fileName: basic-api-call-ts.yaml - description: Performs a basic PowerPoint API call using TypeScript + description: Performs a basic PowerPoint API call using TypeScript. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/basics/basic-api-call-ts.yaml group: Basics - api_set: PowerPointApi '1.4' + api_set: + PowerPointApi: '1.4' - id: powerpoint-basics-basic-api-call-js name: Basic API call (JavaScript) fileName: basic-api-call-js.yaml - description: Performs a basic PowerPoint API call using JavaScript + description: Performs a basic PowerPoint API call using JavaScript. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/basics/basic-api-call-js.yaml group: Basics - api_set: PowerPointApi '1.4' + api_set: + PowerPointApi: '1.4' - id: powerpoint-basics-basic-common-api-call name: Basic API call (Office 2013) fileName: basic-common-api-call.yaml @@ -24,7 +26,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/basics/basic-common-api-call.yaml group: Basics api_set: - Selection: 1.1 + Selection: '1.1' - id: powerpoint-create-presentation name: Create presentation fileName: create-presentation.yaml @@ -35,7 +37,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/document/create-presentation.yaml group: Document api_set: - PowerPoint: 1.1 + PowerPoint: '1.1' - id: powerpoint-basics-insert-image name: Insert Image fileName: insert-image.yaml @@ -85,7 +87,8 @@ rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/shapes.yaml group: Shapes - api_set: PowerPointApi '1.4' + api_set: + PowerPointApi: '1.4' - id: powerpoint-add-slides name: Add slides to a presentation fileName: add-slides.yaml @@ -107,7 +110,7 @@ - id: powerpoint-basics-get-slide-metadata name: Get slide metadata fileName: get-slide-metadata.yaml - description: 'Gets the title, index, and ID of the selected slide(s).' + description: 'Gets the title, index, and ID of the selected slides.' rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/get-slide-metadata.yaml group: Slide Management diff --git a/samples/powerpoint/basics/basic-api-call-js.yaml b/samples/powerpoint/basics/basic-api-call-js.yaml index 3e9f4f31d..851297dde 100644 --- a/samples/powerpoint/basics/basic-api-call-js.yaml +++ b/samples/powerpoint/basics/basic-api-call-js.yaml @@ -1,9 +1,10 @@ order: 2 id: powerpoint-basics-basic-api-call-js name: Basic API call (JavaScript) -description: Performs a basic PowerPoint API call using JavaScript +description: Performs a basic PowerPoint API call using JavaScript. host: POWERPOINT -api_set: PowerPointApi '1.4' +api_set: + PowerPointApi: '1.4' script: content: | $("#run").on("click", () => tryCatch(run)); diff --git a/samples/powerpoint/basics/basic-api-call-ts.yaml b/samples/powerpoint/basics/basic-api-call-ts.yaml index 37a27057d..45a2a18db 100644 --- a/samples/powerpoint/basics/basic-api-call-ts.yaml +++ b/samples/powerpoint/basics/basic-api-call-ts.yaml @@ -1,9 +1,10 @@ order: 1 id: powerpoint-basics-basic-api-call-ts name: Basic API call (TypeScript) -description: Performs a basic PowerPoint API call using TypeScript +description: Performs a basic PowerPoint API call using TypeScript. host: POWERPOINT -api_set: PowerPointApi '1.4' +api_set: + PowerPointApi: '1.4' script: content: | $("#run").on("click", () => tryCatch(run)); diff --git a/samples/powerpoint/basics/basic-common-api-call.yaml b/samples/powerpoint/basics/basic-common-api-call.yaml index c1b11fb51..2043ebcf1 100644 --- a/samples/powerpoint/basics/basic-common-api-call.yaml +++ b/samples/powerpoint/basics/basic-common-api-call.yaml @@ -5,7 +5,7 @@ description: Executes a basic PowerPoint API call using the "common API" syntax author: OfficeDev host: POWERPOINT api_set: - Selection: 1.1 + Selection: '1.1' script: content: | $("#run").on("click", run); diff --git a/samples/powerpoint/document/create-presentation.yaml b/samples/powerpoint/document/create-presentation.yaml index 1133c3013..b460a6f93 100644 --- a/samples/powerpoint/document/create-presentation.yaml +++ b/samples/powerpoint/document/create-presentation.yaml @@ -4,7 +4,7 @@ description: 'Creates a new, empty presentation and creates a new presentation b author: OfficeDev host: POWERPOINT api_set: - PowerPoint: 1.1 + PowerPoint: '1.1' script: content: | $("#create-new-blank-presentation").on("click", () => tryCatch(createBlankPresentation)); diff --git a/samples/powerpoint/shapes/get-set-shapes.yaml b/samples/powerpoint/shapes/get-set-shapes.yaml index 8e9209ba4..a34376075 100644 --- a/samples/powerpoint/shapes/get-set-shapes.yaml +++ b/samples/powerpoint/shapes/get-set-shapes.yaml @@ -19,7 +19,7 @@ script: // Gets the shapes you selected on the slide and displays their IDs on the task pane. await PowerPoint.run(async (context) => { let finalTable = ""; - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); await context.sync(); finalTable += "
      getSelectedShapes.getCount returned:" + shapeCount.value + "
      "; @@ -44,9 +44,9 @@ script: const slide1 = context.presentation.slides.getItemAt(0); slide1.load("shapes"); await context.sync(); - const shapes = slide1.shapes; - const shape1 = shapes.getItemAt(0); - const shape2 = shapes.getItemAt(1); + const shapes: PowerPoint.ShapeCollection = slide1.shapes; + const shape1: PowerPoint.Shape = shapes.getItemAt(0); + const shape2: PowerPoint.Shape = shapes.getItemAt(1); shape1.load("id"); shape2.load("id"); await context.sync(); @@ -58,7 +58,7 @@ script: async function changeFill() { // Changes the selected shapes fill color to red. await PowerPoint.run(async (context) => { - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); shapes.load("items"); await context.sync(); @@ -76,7 +76,7 @@ script: await PowerPoint.run(async (context) => { context.presentation.load("slides"); await context.sync(); - const slides = context.presentation.getSelectedSlides(); + const slides: PowerPoint.SlideScopedCollection = context.presentation.getSelectedSlides(); const slideCount = slides.getCount(); slides.load("items"); await context.sync(); @@ -84,7 +84,7 @@ script: slides.items.map((slide) => { savedSlideSelection.push(slide.id); }); - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); shapes.load("items"); await context.sync(); @@ -97,7 +97,7 @@ script: async function loadShapeSelection() { // Reselects shapes that were saved previously. await PowerPoint.run(async (context) => { - const slide1 = context.presentation.slides.getItem(savedSlideSelection[0]); + const slide1: PowerPoint.Slide = context.presentation.slides.getItem(savedSlideSelection[0]); await context.sync(); slide1.setSelectedShapes(savedShapeSelection); await context.sync(); @@ -120,13 +120,13 @@ script: // Creates random shapes on the selected slide. await PowerPoint.run(async (context) => { let finalTable = ""; - const currentSlide = context.presentation.getSelectedSlides().getItemAt(0); + const currentSlide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); const maxNewShapeWidth = 200; const maxNewShapeHeight = 200; const minNewShapeWidth = 50; const minNewShapeHeight = 50; for (let i = 0; i < 20; i++) { - const rectangle = currentSlide.shapes.addGeometricShape(PowerPoint.GeometricShapeType.rectangle); + const rectangle: PowerPoint.Shape = currentSlide.shapes.addGeometricShape(PowerPoint.GeometricShapeType.rectangle); rectangle.height = getRandomBetween(minNewShapeWidth, maxNewShapeWidth); rectangle.width = getRandomBetween(minNewShapeHeight, maxNewShapeHeight); rectangle.left = getRandomBetween(0, slideWidth - rectangle.width); @@ -144,7 +144,7 @@ script: async function arrangeSelected() { // Arranges the selected shapes in a line from left to right. await PowerPoint.run(async (context) => { - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); shapes.load("items"); await context.sync(); diff --git a/samples/powerpoint/shapes/get-shapes-by-type.yaml b/samples/powerpoint/shapes/get-shapes-by-type.yaml index 770e0581a..2c8607caa 100644 --- a/samples/powerpoint/shapes/get-shapes-by-type.yaml +++ b/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -15,7 +15,7 @@ script: // Changes the dash style of every line in the slide. await PowerPoint.run(async (context) => { // Get the type of shape for every shape in the collection. - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; shapes.load("type"); await context.sync(); @@ -33,7 +33,7 @@ script: // Changes the transparency of every geometric shape in the slide. await PowerPoint.run(async (context) => { // Get the type of shape for every shape in the collection. - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; shapes.load("type"); await context.sync(); diff --git a/samples/powerpoint/shapes/shapes.yaml b/samples/powerpoint/shapes/shapes.yaml index 9ca8e45ba..7e256a947 100644 --- a/samples/powerpoint/shapes/shapes.yaml +++ b/samples/powerpoint/shapes/shapes.yaml @@ -2,7 +2,8 @@ id: powerpoint-shapes name: 'Insert shape, line, and text box' description: 'Inserts geometric shapes, lines, and text boxes to a slide.' host: POWERPOINT -api_set: PowerPointApi '1.4' +api_set: + PowerPointApi: '1.4' script: content: | $("#create-hexagon").on("click", () => tryCatch(createHexagon)); @@ -18,14 +19,14 @@ script: // and adds a hexagon shape to the collection, while specifying its // location and size. Then it names the shape. await PowerPoint.run(async (context) => { - const shapes = context.presentation.slides.getItemAt(0).shapes; - const hexagon = shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon, - { - left: 100, - top: 100, - height: 150, - width: 150 - }); + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; + const shapeOptions: PowerPoint.ShapeAddOptions = { + left: 100, + top: 100, + height: 150, + width: 150 + }; + const hexagon: PowerPoint.Shape = shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon, shapeOptions); hexagon.name = "Hexagon"; await context.sync(); @@ -36,8 +37,8 @@ script: // This function gets the collection of shapes on the first slide, // gets the first shape in the collection, and resets its size. await PowerPoint.run(async (context) => { - const shapes = context.presentation.slides.getItemAt(0).shapes; - const hexagon = shapes.getItemAt(0); + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; + const hexagon: PowerPoint.Shape = shapes.getItemAt(0); hexagon.height = 50; hexagon.width = 50; @@ -49,8 +50,8 @@ script: // This function gets the collection of shapes on the first slide, // gets the first shape in the collection, and resets its location. await PowerPoint.run(async (context) => { - const shapes = context.presentation.slides.getItemAt(0).shapes; - const hexagon = shapes.getItemAt(0); + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; + const hexagon: PowerPoint.Shape = shapes.getItemAt(0); hexagon.top = 50; hexagon.left = 150; @@ -63,11 +64,11 @@ script: // and adds a line to the collection, while specifying its // start and end points. Then it names the shape. await PowerPoint.run(async (context) => { - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; // For a line, left and top are the coordinates of the start point, // while height and width are the coordinates of the end point. - const line = shapes.addLine(PowerPoint.ConnectorType.straight, + const line: PowerPoint.Shape = shapes.addLine(PowerPoint.ConnectorType.straight, { left: 400, top: 200, @@ -85,8 +86,8 @@ script: // and adds a text box to the collection, while specifying its text, // location, and size. Then it names the text box. await PowerPoint.run(async (context) => { - const shapes = context.presentation.slides.getItemAt(0).shapes; - const textbox = shapes.addTextBox("Hello!", + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; + const textbox: PowerPoint.Shape = shapes.addTextBox("Hello!", { left: 100, top: 300, @@ -105,8 +106,8 @@ script: // location and size. Then it names the shape, sets its text and font // color, and centers it inside the braces. await PowerPoint.run(async (context) => { - const shapes = context.presentation.slides.getItemAt(0).shapes; - const braces = shapes.addGeometricShape(PowerPoint.GeometricShapeType.bracePair, { + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; + const braces: PowerPoint.Shape = shapes.addGeometricShape(PowerPoint.GeometricShapeType.bracePair, { left: 100, top: 400, height: 50, @@ -125,8 +126,8 @@ script: // This function gets the collection of shapes on the first slide, // and then iterates through them, deleting each one. await PowerPoint.run(async (context) => { - const slide = context.presentation.slides.getItemAt(0); - const shapes = slide.shapes; + const slide: PowerPoint.Slide = context.presentation.slides.getItemAt(0); + const shapes: PowerPoint.ShapeCollection = slide.shapes; // Load all the shapes in the collection without loading their properties. shapes.load("items/$none"); diff --git a/samples/powerpoint/slide-management/add-slides.yaml b/samples/powerpoint/slide-management/add-slides.yaml index 634c3c2a4..cd099bbbf 100644 --- a/samples/powerpoint/slide-management/add-slides.yaml +++ b/samples/powerpoint/slide-management/add-slides.yaml @@ -28,7 +28,7 @@ script: async function logSlideMasters() { await PowerPoint.run(async function(context) { // Load information about all the slide masters and associated layouts. - const slideMasters = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); + const slideMasters: PowerPoint.SlideMasterCollection = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); await context.sync(); // Log the name and ID of each slide master. @@ -37,7 +37,7 @@ script: console.log("Master ID: " + slideMasters.items[i].id); // Log the name and ID of each slide layout in the slide master. - const layoutsInMaster = slideMasters.items[i].layouts; + const layoutsInMaster: PowerPoint.SlideLayoutCollection = slideMasters.items[i].layouts; for (let j = 0; j < layoutsInMaster.items.length; j++) { console.log(" Layout name: " + layoutsInMaster.items[j].name + " Layout ID: " + layoutsInMaster.items[j].id); } diff --git a/samples/powerpoint/slide-management/get-set-slides.yaml b/samples/powerpoint/slide-management/get-set-slides.yaml index ba5abe517..4b88a165b 100644 --- a/samples/powerpoint/slide-management/get-set-slides.yaml +++ b/samples/powerpoint/slide-management/get-set-slides.yaml @@ -23,7 +23,7 @@ script: const allSlidesCount = context.presentation.slides.getCount(); context.presentation.slides.load("items"); await context.sync(); - let allSlideItems = context.presentation.slides.items; + let allSlideItems: PowerPoint.Slide[] = context.presentation.slides.items; allSlideItems.map((slide, index) => { allSlidesList[slide.id] = `Slide ${index + 1}`; }); @@ -31,7 +31,7 @@ script: if ($("#id-check-usenative").is(":checked")) { context.presentation.load("tags"); } - const slides = context.presentation.getSelectedSlides(); + const slides: PowerPoint.SlideScopedCollection = context.presentation.getSelectedSlides(); const slideCount = slides.getCount(); slides.load("items"); await context.sync(); @@ -51,7 +51,7 @@ script: await PowerPoint.run(async (context) => { context.presentation.load("slides"); await context.sync(); - const slides = context.presentation.getSelectedSlides(); + const slides: PowerPoint.SlideScopedCollection = context.presentation.getSelectedSlides(); const slideCount = slides.getCount(); slides.load("items"); await context.sync(); @@ -66,9 +66,9 @@ script: await PowerPoint.run(async (context) => { context.presentation.load("slides"); await context.sync(); - const slide2 = context.presentation.slides.getItemAt(1); - const slide4 = context.presentation.slides.getItemAt(3); - const slide5 = context.presentation.slides.getItemAt(4); + const slide2: PowerPoint.Slide = context.presentation.slides.getItemAt(1); + const slide4: PowerPoint.Slide = context.presentation.slides.getItemAt(3); + const slide5: PowerPoint.Slide = context.presentation.slides.getItemAt(4); slide2.load("id"); slide4.load("id"); slide5.load("id"); @@ -91,7 +91,7 @@ script: let finalTable = ""; context.presentation.load("slides"); await context.sync(); - const slides = context.presentation.getSelectedSlides(); + const slides: PowerPoint.SlideScopedCollection = context.presentation.getSelectedSlides(); const slideCount = slides.getCount(); await context.sync(); finalTable += "
      getSelectedSlides.getCount returned:" + slideCount.value + "
      "; diff --git a/samples/powerpoint/slide-management/get-slide-metadata.yaml b/samples/powerpoint/slide-management/get-slide-metadata.yaml index 832f1d030..7636d8435 100644 --- a/samples/powerpoint/slide-management/get-slide-metadata.yaml +++ b/samples/powerpoint/slide-management/get-slide-metadata.yaml @@ -1,7 +1,7 @@ order: 3 id: powerpoint-basics-get-slide-metadata name: Get slide metadata -description: 'Gets the title, index, and ID of the selected slide(s).' +description: 'Gets the title, index, and ID of the selected slides.' author: OfficeDev host: POWERPOINT api_set: {} diff --git a/samples/powerpoint/slide-management/insert-slides.yaml b/samples/powerpoint/slide-management/insert-slides.yaml index 28a4950b4..1fb1a34d1 100644 --- a/samples/powerpoint/slide-management/insert-slides.yaml +++ b/samples/powerpoint/slide-management/insert-slides.yaml @@ -40,8 +40,8 @@ script: async function insertAfterSelectedSlide() { await PowerPoint.run(async function(context) { // Get the ID of the first selected slide. - const presentation = context.presentation; - const selected = presentation.getSelectedSlides().getItemAt(0); + const presentation: PowerPoint.Presentation = context.presentation; + const selected: PowerPoint.Slide = presentation.getSelectedSlides().getItemAt(0); selected.load("id"); await context.sync(); diff --git a/samples/powerpoint/tags/tags.yaml b/samples/powerpoint/tags/tags.yaml index 08b0be75b..0c5c4fa5d 100644 --- a/samples/powerpoint/tags/tags.yaml +++ b/samples/powerpoint/tags/tags.yaml @@ -20,12 +20,12 @@ script: // Decrement because the getSelectedSlideByIndex method is 1-based, // but the getItemAt method is 0-based. selectedSlideIndex = selectedSlideIndex - 1; - const slide = context.presentation.slides.getItemAt(selectedSlideIndex); + const slide: PowerPoint.Slide = context.presentation.slides.getItemAt(selectedSlideIndex); slide.tags.add("CUSTOMER_TYPE", "Premium"); await context.sync(); - const audienceTag = slide.tags.getItem("CUSTOMER_TYPE"); + const audienceTag: PowerPoint.Tag = slide.tags.getItem("CUSTOMER_TYPE"); audienceTag.load("key, value"); await context.sync(); @@ -56,7 +56,7 @@ script: async function deleteSlidesByAudience() { await PowerPoint.run(async function(context) { - const slides = context.presentation.slides; + const slides: PowerPoint.SlideCollection = context.presentation.slides; slides.load("tags/key, tags/value"); await context.sync(); @@ -64,7 +64,7 @@ script: for (let i = 0; i < slides.items.length; i++) { let currentSlide = slides.items[i]; for (let j = 0; j < currentSlide.tags.items.length; j++) { - let currentTag = currentSlide.tags.items[j]; + let currentTag: PowerPoint.Tag = currentSlide.tags.items[j]; if (currentTag.key === "CUSTOMER_TYPE" && currentTag.value === "Premium") { currentSlide.delete(); } @@ -77,7 +77,7 @@ script: async function addMultipleSlideTags() { await PowerPoint.run(async function(context) { - const slide = context.presentation.slides.getItemAt(0); + const slide: PowerPoint.Slide = context.presentation.slides.getItemAt(0); slide.tags.add("OCEAN", "Indian"); slide.tags.add("PLANET", "Jupiter"); slide.tags.add("CONTINENT", "Antarctica"); @@ -96,13 +96,13 @@ script: async function addShapeTag() { await PowerPoint.run(async function(context) { - const slide = context.presentation.slides.getItemAt(0); - const shape = slide.shapes.getItemAt(0); + const slide: PowerPoint.Slide = context.presentation.slides.getItemAt(0); + const shape: PowerPoint.Shape = slide.shapes.getItemAt(0); shape.tags.add("MOUNTAIN", "Denali"); await context.sync(); - const myShapeTag = shape.tags.getItem("MOUNTAIN"); + const myShapeTag: PowerPoint.Tag = shape.tags.getItem("MOUNTAIN"); myShapeTag.load("key, value"); await context.sync(); @@ -113,12 +113,12 @@ script: async function addPresentationTag() { await PowerPoint.run(async function (context) { - let presentationTags = context.presentation.tags; + let presentationTags: PowerPoint.TagCollection = context.presentation.tags; presentationTags.add("COLOR", "blue"); await context.sync(); - const tag = presentationTags.getItem("COLOR"); + const tag: PowerPoint.Tag = presentationTags.getItem("COLOR"); tag.load("key, value"); await context.sync(); @@ -129,7 +129,7 @@ script: async function deletePresentationTag() { await PowerPoint.run(async function (context) { - let presentationTags = context.presentation.tags; + let presentationTags: PowerPoint.TagCollection = context.presentation.tags; presentationTags.delete("COLOR"); diff --git a/samples/powerpoint/text/get-set-textrange.yaml b/samples/powerpoint/text/get-set-textrange.yaml index eb5263b48..63903e590 100644 --- a/samples/powerpoint/text/get-set-textrange.yaml +++ b/samples/powerpoint/text/get-set-textrange.yaml @@ -16,7 +16,7 @@ script: async function getSelectedTextRange() { // Gets the selected text range and prints data about the range on the task pane. await PowerPoint.run(async (context) => { - const textRange = context.presentation.getSelectedTextRange(); + const textRange: PowerPoint.TextRange = context.presentation.getSelectedTextRange(); try { await context.sync(); } catch (error) { @@ -48,24 +48,25 @@ script: $("#outputSpan").append(finalTable); }); } + async function setSelectedTextRange() { // Selects the first 10 characters of the selected shape. await PowerPoint.run(async (context) => { - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); await context.sync(); if (shapeCount.value !== 1) { console.warn("You must select only one shape with text in it."); return; } - const shape = shapes.getItemAt(0); - const textFrame = shape.textFrame.load("textRange,hasText"); + const shape: PowerPoint.Shape = shapes.getItemAt(0); + const textFrame: PowerPoint.TextFrame = shape.textFrame.load("textRange,hasText"); await context.sync(); if (textFrame.hasText != true) { console.warn("You must select only one shape with text in it."); return; } - const textRange = textFrame.textRange; + const textRange: PowerPoint.TextRange = textFrame.textRange; textRange.load("text"); await context.sync(); if (textRange.text.length < 10) { @@ -81,7 +82,7 @@ script: async function changeColor() { // Sets the color of the selected text range to green. await PowerPoint.run(async (context) => { - const textRange = context.presentation.getSelectedTextRange(); + const textRange: PowerPoint.TextRange = context.presentation.getSelectedTextRange(); textRange.font.color = "green"; await context.sync(); }); @@ -97,7 +98,7 @@ script: let finalTable = ""; context.presentation.load("slides"); await context.sync(); - const slides = context.presentation.getSelectedSlides(); + const slides: PowerPoint.SlideScopedCollection = context.presentation.getSelectedSlides(); const slideCount = slides.getCount(); slides.load("items"); await context.sync(); @@ -106,14 +107,14 @@ script: savedTextSlideSelection.push(slide.id); }); - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); shapes.load("items"); await context.sync(); savedTextShapeSelection = []; shapes.items.map((shape) => { savedTextShapeSelection.push(shape.id); }); - const savedTextRange = context.presentation.getSelectedTextRangeOrNullObject(); + const savedTextRange: PowerPoint.TextRange = context.presentation.getSelectedTextRangeOrNullObject(); savedTextRange.load("start,length"); await context.sync(); if (savedTextRange.isNullObject) { @@ -128,9 +129,9 @@ script: async function loadTextSelection() { // Sets the range selection to the range that was saved previously. await PowerPoint.run(async (context) => { - const slide1 = context.presentation.slides.getItem(savedTextSlideSelection[0]); - const shape1 = slide1.shapes.getItem(savedTextShapeSelection[0]); - const textRange = shape1.textFrame.textRange.getSubstring(savedTextTextRangeStart, savedTextTextRangeLength); + const slide1: PowerPoint.Slide = context.presentation.slides.getItem(savedTextSlideSelection[0]); + const shape1: PowerPoint.Shape = slide1.shapes.getItem(savedTextShapeSelection[0]); + const textRange: PowerPoint.TextRange = shape1.textFrame.textRange.getSubstring(savedTextTextRangeStart, savedTextTextRangeLength); textRange.setSelected(); await context.sync(); }); diff --git a/snippet-extractor-metadata/powerpoint.xlsx b/snippet-extractor-metadata/powerpoint.xlsx index db60e01cea6059a16bd60aa01d2662184020b1e5..b1aceaaedda557635634443ca52b9685196f7d5e 100644 GIT binary patch delta 5425 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
      2Y36Jh2B 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index c98bce98c..b9b075a17 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -14101,11 +14101,11 @@ // start and end points. Then it names the shape. await PowerPoint.run(async (context) => { - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; // For a line, left and top are the coordinates of the start point, // while height and width are the coordinates of the end point. - const line = shapes.addLine(PowerPoint.ConnectorType.straight, + const line: PowerPoint.Shape = shapes.addLine(PowerPoint.ConnectorType.straight, { left: 400, top: 200, @@ -14129,14 +14129,14 @@ // location and size. Then it names the shape. await PowerPoint.run(async (context) => { - const shapes = context.presentation.slides.getItemAt(0).shapes; - const hexagon = shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon, - { - left: 100, - top: 100, - height: 150, - width: 150 - }); + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; + const shapeOptions: PowerPoint.ShapeAddOptions = { + left: 100, + top: 100, + height: 150, + width: 150 + }; + const hexagon: PowerPoint.Shape = shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon, shapeOptions); hexagon.name = "Hexagon"; await context.sync(); @@ -14149,8 +14149,8 @@ await PowerPoint.run(async function(context) { // Get the ID of the first selected slide. - const presentation = context.presentation; - const selected = presentation.getSelectedSlides().getItemAt(0); + const presentation: PowerPoint.Presentation = context.presentation; + const selected: PowerPoint.Slide = presentation.getSelectedSlides().getItemAt(0); selected.load("id"); await context.sync(); @@ -14170,8 +14170,8 @@ await PowerPoint.run(async function(context) { // Get the ID of the first selected slide. - const presentation = context.presentation; - const selected = presentation.getSelectedSlides().getItemAt(0); + const presentation: PowerPoint.Presentation = context.presentation; + const selected: PowerPoint.Slide = presentation.getSelectedSlides().getItemAt(0); selected.load("id"); await context.sync(); @@ -14191,8 +14191,8 @@ await PowerPoint.run(async function(context) { // Get the ID of the first selected slide. - const presentation = context.presentation; - const selected = presentation.getSelectedSlides().getItemAt(0); + const presentation: PowerPoint.Presentation = context.presentation; + const selected: PowerPoint.Slide = presentation.getSelectedSlides().getItemAt(0); selected.load("id"); await context.sync(); @@ -14213,7 +14213,7 @@ // Arranges the selected shapes in a line from left to right. await PowerPoint.run(async (context) => { - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); shapes.load("items"); await context.sync(); @@ -14242,7 +14242,7 @@ await PowerPoint.run(async (context) => { let finalTable = ""; - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); await context.sync(); finalTable += "
      getSelectedShapes.getCount returned:" + shapeCount.value + "
      "; @@ -14267,7 +14267,7 @@ await PowerPoint.run(async (context) => { context.presentation.load("slides"); await context.sync(); - const slides = context.presentation.getSelectedSlides(); + const slides: PowerPoint.SlideScopedCollection = context.presentation.getSelectedSlides(); const slideCount = slides.getCount(); slides.load("items"); await context.sync(); @@ -14275,7 +14275,7 @@ slides.items.map((slide) => { savedSlideSelection.push(slide.id); }); - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); shapes.load("items"); await context.sync(); @@ -14299,7 +14299,7 @@ const allSlidesCount = context.presentation.slides.getCount(); context.presentation.slides.load("items"); await context.sync(); - let allSlideItems = context.presentation.slides.items; + let allSlideItems: PowerPoint.Slide[] = context.presentation.slides.items; allSlideItems.map((slide, index) => { allSlidesList[slide.id] = `Slide ${index + 1}`; }); @@ -14307,7 +14307,7 @@ if ($("#id-check-usenative").is(":checked")) { context.presentation.load("tags"); } - const slides = context.presentation.getSelectedSlides(); + const slides: PowerPoint.SlideScopedCollection = context.presentation.getSelectedSlides(); const slideCount = slides.getCount(); slides.load("items"); await context.sync(); @@ -14333,7 +14333,7 @@ let finalTable = ""; context.presentation.load("slides"); await context.sync(); - const slides = context.presentation.getSelectedSlides(); + const slides: PowerPoint.SlideScopedCollection = context.presentation.getSelectedSlides(); const slideCount = slides.getCount(); await context.sync(); finalTable += "
      getSelectedSlides.getCount returned:" + slideCount.value + "
      "; @@ -14360,7 +14360,7 @@ pane. await PowerPoint.run(async (context) => { - const textRange = context.presentation.getSelectedTextRange(); + const textRange: PowerPoint.TextRange = context.presentation.getSelectedTextRange(); try { await context.sync(); } catch (error) { @@ -14399,9 +14399,9 @@ // Sets the range selection to the range that was saved previously. await PowerPoint.run(async (context) => { - const slide1 = context.presentation.slides.getItem(savedTextSlideSelection[0]); - const shape1 = slide1.shapes.getItem(savedTextShapeSelection[0]); - const textRange = shape1.textFrame.textRange.getSubstring(savedTextTextRangeStart, savedTextTextRangeLength); + const slide1: PowerPoint.Slide = context.presentation.slides.getItem(savedTextSlideSelection[0]); + const shape1: PowerPoint.Shape = slide1.shapes.getItem(savedTextShapeSelection[0]); + const textRange: PowerPoint.TextRange = shape1.textFrame.textRange.getSubstring(savedTextTextRangeStart, savedTextTextRangeLength); textRange.setSelected(); await context.sync(); }); @@ -14413,8 +14413,8 @@ await PowerPoint.run(async function(context) { // Get the ID of the first selected slide. - const presentation = context.presentation; - const selected = presentation.getSelectedSlides().getItemAt(0); + const presentation: PowerPoint.Presentation = context.presentation; + const selected: PowerPoint.Slide = presentation.getSelectedSlides().getItemAt(0); selected.load("id"); await context.sync(); @@ -14448,9 +14448,9 @@ await PowerPoint.run(async (context) => { context.presentation.load("slides"); await context.sync(); - const slide2 = context.presentation.slides.getItemAt(1); - const slide4 = context.presentation.slides.getItemAt(3); - const slide5 = context.presentation.slides.getItemAt(4); + const slide2: PowerPoint.Slide = context.presentation.slides.getItemAt(1); + const slide4: PowerPoint.Slide = context.presentation.slides.getItemAt(3); + const slide5: PowerPoint.Slide = context.presentation.slides.getItemAt(4); slide2.load("id"); slide4.load("id"); slide5.load("id"); @@ -14474,7 +14474,7 @@ await PowerPoint.run(async (context) => { // Get the type of shape for every shape in the collection. - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; shapes.load("type"); await context.sync(); @@ -14484,6 +14484,29 @@ shape.fill.transparency = 0.5; } }); + await context.sync(); + }); +'PowerPoint.Shape#delete:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml + + + // This function gets the collection of shapes on the first slide, + + // and then iterates through them, deleting each one. + + await PowerPoint.run(async (context) => { + const slide: PowerPoint.Slide = context.presentation.slides.getItemAt(0); + const shapes: PowerPoint.ShapeCollection = slide.shapes; + + // Load all the shapes in the collection without loading their properties. + shapes.load("items/$none"); + + await context.sync(); + + shapes.items.forEach((shape) => shape.delete()); + await context.sync(); }); 'PowerPoint.Shape#fill:member': @@ -14495,7 +14518,7 @@ // Changes the selected shapes fill color to red. await PowerPoint.run(async (context) => { - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); shapes.load("items"); await context.sync(); @@ -14513,7 +14536,7 @@ // Arranges the selected shapes in a line from left to right. await PowerPoint.run(async (context) => { - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); shapes.load("items"); await context.sync(); @@ -14541,7 +14564,7 @@ // Arranges the selected shapes in a line from left to right. await PowerPoint.run(async (context) => { - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); shapes.load("items"); await context.sync(); @@ -14569,7 +14592,7 @@ // Arranges the selected shapes in a line from left to right. await PowerPoint.run(async (context) => { - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); shapes.load("items"); await context.sync(); @@ -14598,7 +14621,7 @@ await PowerPoint.run(async (context) => { // Get the type of shape for every shape in the collection. - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; shapes.load("type"); await context.sync(); @@ -14619,7 +14642,7 @@ // Arranges the selected shapes in a line from left to right. await PowerPoint.run(async (context) => { - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); shapes.load("items"); await context.sync(); @@ -14638,6 +14661,31 @@ currentLeft = 0; if (currentTop > slideHeight - 200) currentTop = 0; }); +'PowerPoint.ShapeAddOptions:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml + + + // This function gets the collection of shapes on the first slide, + + // and adds a hexagon shape to the collection, while specifying its + + // location and size. Then it names the shape. + + await PowerPoint.run(async (context) => { + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; + const shapeOptions: PowerPoint.ShapeAddOptions = { + left: 100, + top: 100, + height: 150, + width: 150 + }; + const hexagon: PowerPoint.Shape = shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon, shapeOptions); + hexagon.name = "Hexagon"; + + await context.sync(); + }); 'PowerPoint.ShapeCollection:class': - >- // Link to full sample: @@ -14648,7 +14696,7 @@ await PowerPoint.run(async (context) => { // Get the type of shape for every shape in the collection. - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; shapes.load("type"); await context.sync(); @@ -14673,14 +14721,14 @@ // location and size. Then it names the shape. await PowerPoint.run(async (context) => { - const shapes = context.presentation.slides.getItemAt(0).shapes; - const hexagon = shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon, - { - left: 100, - top: 100, - height: 150, - width: 150 - }); + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; + const shapeOptions: PowerPoint.ShapeAddOptions = { + left: 100, + top: 100, + height: 150, + width: 150 + }; + const hexagon: PowerPoint.Shape = shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon, shapeOptions); hexagon.name = "Hexagon"; await context.sync(); @@ -14698,11 +14746,11 @@ // start and end points. Then it names the shape. await PowerPoint.run(async (context) => { - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; // For a line, left and top are the coordinates of the start point, // while height and width are the coordinates of the end point. - const line = shapes.addLine(PowerPoint.ConnectorType.straight, + const line: PowerPoint.Shape = shapes.addLine(PowerPoint.ConnectorType.straight, { left: 400, top: 200, @@ -14726,8 +14774,8 @@ // location, and size. Then it names the text box. await PowerPoint.run(async (context) => { - const shapes = context.presentation.slides.getItemAt(0).shapes; - const textbox = shapes.addTextBox("Hello!", + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; + const textbox: PowerPoint.Shape = shapes.addTextBox("Hello!", { left: 100, top: 300, @@ -14745,13 +14793,13 @@ await PowerPoint.run(async function(context) { - const slide = context.presentation.slides.getItemAt(0); - const shape = slide.shapes.getItemAt(0); + const slide: PowerPoint.Slide = context.presentation.slides.getItemAt(0); + const shape: PowerPoint.Shape = slide.shapes.getItemAt(0); shape.tags.add("MOUNTAIN", "Denali"); await context.sync(); - const myShapeTag = shape.tags.getItem("MOUNTAIN"); + const myShapeTag: PowerPoint.Tag = shape.tags.getItem("MOUNTAIN"); myShapeTag.load("key, value"); await context.sync(); @@ -14768,7 +14816,7 @@ await PowerPoint.run(async (context) => { // Get the type of shape for every shape in the collection. - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; shapes.load("type"); await context.sync(); @@ -14790,7 +14838,7 @@ await PowerPoint.run(async (context) => { // Get the type of shape for every shape in the collection. - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; shapes.load("type"); await context.sync(); @@ -14802,6 +14850,33 @@ }); await context.sync(); }); +'PowerPoint.ShapeFill#foregroundColor:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml + + + // Creates random shapes on the selected slide. + + await PowerPoint.run(async (context) => { + let finalTable = ""; + const currentSlide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); + const maxNewShapeWidth = 200; + const maxNewShapeHeight = 200; + const minNewShapeWidth = 50; + const minNewShapeHeight = 50; + for (let i = 0; i < 20; i++) { + const rectangle: PowerPoint.Shape = currentSlide.shapes.addGeometricShape(PowerPoint.GeometricShapeType.rectangle); + rectangle.height = getRandomBetween(minNewShapeWidth, maxNewShapeWidth); + rectangle.width = getRandomBetween(minNewShapeHeight, maxNewShapeHeight); + rectangle.left = getRandomBetween(0, slideWidth - rectangle.width); + rectangle.top = getRandomBetween(0, slideHeight - rectangle.height); + rectangle.fill.foregroundColor = generateRandomHexColor(); + } + finalTable += "Done
      "; + $("#slide-tags").empty(); + $("#slide-tags").append(finalTable); + }); 'PowerPoint.ShapeFill#setSolidColor:member(1)': - >- // Link to full sample: @@ -14811,7 +14886,7 @@ // Changes the selected shapes fill color to red. await PowerPoint.run(async (context) => { - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); shapes.load("items"); await context.sync(); @@ -14830,7 +14905,7 @@ await PowerPoint.run(async (context) => { // Get the type of shape for every shape in the collection. - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; shapes.load("type"); await context.sync(); @@ -14851,7 +14926,7 @@ // Sets the color of the selected text range to green. await PowerPoint.run(async (context) => { - const textRange = context.presentation.getSelectedTextRange(); + const textRange: PowerPoint.TextRange = context.presentation.getSelectedTextRange(); textRange.font.color = "green"; await context.sync(); }); @@ -14864,7 +14939,7 @@ // Sets the color of the selected text range to green. await PowerPoint.run(async (context) => { - const textRange = context.presentation.getSelectedTextRange(); + const textRange: PowerPoint.TextRange = context.presentation.getSelectedTextRange(); textRange.font.color = "green"; await context.sync(); }); @@ -14878,7 +14953,7 @@ await PowerPoint.run(async (context) => { // Get the type of shape for every shape in the collection. - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; shapes.load("type"); await context.sync(); @@ -14900,7 +14975,7 @@ await PowerPoint.run(async (context) => { // Get the type of shape for every shape in the collection. - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; shapes.load("type"); await context.sync(); @@ -14922,7 +14997,7 @@ await PowerPoint.run(async (context) => { // Get the type of shape for every shape in the collection. - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; shapes.load("type"); await context.sync(); @@ -14934,6 +15009,50 @@ }); await context.sync(); }); +'PowerPoint.ShapeScopedCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml + + + // Changes the selected shapes fill color to red. + + await PowerPoint.run(async (context) => { + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); + const shapeCount = shapes.getCount(); + shapes.load("items"); + await context.sync(); + shapes.items.map((shape) => { + shape.fill.setSolidColor("red"); + }); + await context.sync(); + }); +'PowerPoint.ShapeScopedCollection#getCount:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml + + + // Gets the shapes you selected on the slide and displays their IDs on the + task pane. + + await PowerPoint.run(async (context) => { + let finalTable = ""; + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); + const shapeCount = shapes.getCount(); + await context.sync(); + finalTable += "
      getSelectedShapes.getCount returned:" + shapeCount.value + "
      "; + finalTable += + "
      "; + shapes.load("items"); + await context.sync(); + shapes.items.map((shape, index) => { + finalTable += ""; + }); + finalTable += "
      IndexId
      " + index + "" + shape.id + "
      "; + $("#outputSpan").empty(); + $("#outputSpan").append(finalTable); + }); 'PowerPoint.ShapeType:enum': - >- // Link to full sample: @@ -14944,7 +15063,7 @@ await PowerPoint.run(async (context) => { // Get the type of shape for every shape in the collection. - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; shapes.load("type"); await context.sync(); @@ -14965,7 +15084,7 @@ // Reselects shapes that were saved previously. await PowerPoint.run(async (context) => { - const slide1 = context.presentation.slides.getItem(savedSlideSelection[0]); + const slide1: PowerPoint.Slide = context.presentation.slides.getItem(savedSlideSelection[0]); await context.sync(); slide1.setSelectedShapes(savedShapeSelection); await context.sync(); @@ -14981,7 +15100,7 @@ await PowerPoint.run(async (context) => { context.presentation.load("slides"); await context.sync(); - const slides = context.presentation.getSelectedSlides(); + const slides: PowerPoint.SlideScopedCollection = context.presentation.getSelectedSlides(); const slideCount = slides.getCount(); slides.load("items"); await context.sync(); @@ -14998,7 +15117,7 @@ // Reselects shapes that were saved previously. await PowerPoint.run(async (context) => { - const slide1 = context.presentation.slides.getItem(savedSlideSelection[0]); + const slide1: PowerPoint.Slide = context.presentation.slides.getItem(savedSlideSelection[0]); await context.sync(); slide1.setSelectedShapes(savedShapeSelection); await context.sync(); @@ -15016,9 +15135,9 @@ const slide1 = context.presentation.slides.getItemAt(0); slide1.load("shapes"); await context.sync(); - const shapes = slide1.shapes; - const shape1 = shapes.getItemAt(0); - const shape2 = shapes.getItemAt(1); + const shapes: PowerPoint.ShapeCollection = slide1.shapes; + const shape1: PowerPoint.Shape = shapes.getItemAt(0); + const shape2: PowerPoint.Shape = shapes.getItemAt(1); shape1.load("id"); shape2.load("id"); await context.sync(); @@ -15076,9 +15195,9 @@ await PowerPoint.run(async (context) => { context.presentation.load("slides"); await context.sync(); - const slide2 = context.presentation.slides.getItemAt(1); - const slide4 = context.presentation.slides.getItemAt(3); - const slide5 = context.presentation.slides.getItemAt(4); + const slide2: PowerPoint.Slide = context.presentation.slides.getItemAt(1); + const slide4: PowerPoint.Slide = context.presentation.slides.getItemAt(3); + const slide5: PowerPoint.Slide = context.presentation.slides.getItemAt(4); slide2.load("id"); slide4.load("id"); slide5.load("id"); @@ -15100,7 +15219,7 @@ await PowerPoint.run(async function(context) { // Load information about all the slide masters and associated layouts. - const slideMasters = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); + const slideMasters: PowerPoint.SlideMasterCollection = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); await context.sync(); // Log the name and ID of each slide master. @@ -15109,7 +15228,7 @@ console.log("Master ID: " + slideMasters.items[i].id); // Log the name and ID of each slide layout in the slide master. - const layoutsInMaster = slideMasters.items[i].layouts; + const layoutsInMaster: PowerPoint.SlideLayoutCollection = slideMasters.items[i].layouts; for (let j = 0; j < layoutsInMaster.items.length; j++) { console.log(" Layout name: " + layoutsInMaster.items[j].name + " Layout ID: " + layoutsInMaster.items[j].id); } @@ -15123,7 +15242,7 @@ await PowerPoint.run(async function(context) { // Load information about all the slide masters and associated layouts. - const slideMasters = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); + const slideMasters: PowerPoint.SlideMasterCollection = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); await context.sync(); // Log the name and ID of each slide master. @@ -15132,7 +15251,7 @@ console.log("Master ID: " + slideMasters.items[i].id); // Log the name and ID of each slide layout in the slide master. - const layoutsInMaster = slideMasters.items[i].layouts; + const layoutsInMaster: PowerPoint.SlideLayoutCollection = slideMasters.items[i].layouts; for (let j = 0; j < layoutsInMaster.items.length; j++) { console.log(" Layout name: " + layoutsInMaster.items[j].name + " Layout ID: " + layoutsInMaster.items[j].id); } @@ -15146,7 +15265,7 @@ await PowerPoint.run(async function(context) { // Load information about all the slide masters and associated layouts. - const slideMasters = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); + const slideMasters: PowerPoint.SlideMasterCollection = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); await context.sync(); // Log the name and ID of each slide master. @@ -15155,7 +15274,7 @@ console.log("Master ID: " + slideMasters.items[i].id); // Log the name and ID of each slide layout in the slide master. - const layoutsInMaster = slideMasters.items[i].layouts; + const layoutsInMaster: PowerPoint.SlideLayoutCollection = slideMasters.items[i].layouts; for (let j = 0; j < layoutsInMaster.items.length; j++) { console.log(" Layout name: " + layoutsInMaster.items[j].name + " Layout ID: " + layoutsInMaster.items[j].id); } @@ -15169,7 +15288,7 @@ await PowerPoint.run(async function(context) { // Load information about all the slide masters and associated layouts. - const slideMasters = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); + const slideMasters: PowerPoint.SlideMasterCollection = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); await context.sync(); // Log the name and ID of each slide master. @@ -15178,7 +15297,7 @@ console.log("Master ID: " + slideMasters.items[i].id); // Log the name and ID of each slide layout in the slide master. - const layoutsInMaster = slideMasters.items[i].layouts; + const layoutsInMaster: PowerPoint.SlideLayoutCollection = slideMasters.items[i].layouts; for (let j = 0; j < layoutsInMaster.items.length; j++) { console.log(" Layout name: " + layoutsInMaster.items[j].name + " Layout ID: " + layoutsInMaster.items[j].id); } @@ -15192,7 +15311,7 @@ await PowerPoint.run(async function(context) { // Load information about all the slide masters and associated layouts. - const slideMasters = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); + const slideMasters: PowerPoint.SlideMasterCollection = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); await context.sync(); // Log the name and ID of each slide master. @@ -15201,7 +15320,7 @@ console.log("Master ID: " + slideMasters.items[i].id); // Log the name and ID of each slide layout in the slide master. - const layoutsInMaster = slideMasters.items[i].layouts; + const layoutsInMaster: PowerPoint.SlideLayoutCollection = slideMasters.items[i].layouts; for (let j = 0; j < layoutsInMaster.items.length; j++) { console.log(" Layout name: " + layoutsInMaster.items[j].name + " Layout ID: " + layoutsInMaster.items[j].id); } @@ -15215,7 +15334,7 @@ await PowerPoint.run(async function(context) { // Load information about all the slide masters and associated layouts. - const slideMasters = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); + const slideMasters: PowerPoint.SlideMasterCollection = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); await context.sync(); // Log the name and ID of each slide master. @@ -15224,7 +15343,7 @@ console.log("Master ID: " + slideMasters.items[i].id); // Log the name and ID of each slide layout in the slide master. - const layoutsInMaster = slideMasters.items[i].layouts; + const layoutsInMaster: PowerPoint.SlideLayoutCollection = slideMasters.items[i].layouts; for (let j = 0; j < layoutsInMaster.items.length; j++) { console.log(" Layout name: " + layoutsInMaster.items[j].name + " Layout ID: " + layoutsInMaster.items[j].id); } @@ -15238,7 +15357,7 @@ await PowerPoint.run(async function(context) { // Load information about all the slide masters and associated layouts. - const slideMasters = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); + const slideMasters: PowerPoint.SlideMasterCollection = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); await context.sync(); // Log the name and ID of each slide master. @@ -15247,7 +15366,7 @@ console.log("Master ID: " + slideMasters.items[i].id); // Log the name and ID of each slide layout in the slide master. - const layoutsInMaster = slideMasters.items[i].layouts; + const layoutsInMaster: PowerPoint.SlideLayoutCollection = slideMasters.items[i].layouts; for (let j = 0; j < layoutsInMaster.items.length; j++) { console.log(" Layout name: " + layoutsInMaster.items[j].name + " Layout ID: " + layoutsInMaster.items[j].id); } @@ -15261,7 +15380,7 @@ await PowerPoint.run(async function(context) { // Load information about all the slide masters and associated layouts. - const slideMasters = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); + const slideMasters: PowerPoint.SlideMasterCollection = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); await context.sync(); // Log the name and ID of each slide master. @@ -15270,12 +15389,58 @@ console.log("Master ID: " + slideMasters.items[i].id); // Log the name and ID of each slide layout in the slide master. - const layoutsInMaster = slideMasters.items[i].layouts; + const layoutsInMaster: PowerPoint.SlideLayoutCollection = slideMasters.items[i].layouts; for (let j = 0; j < layoutsInMaster.items.length; j++) { console.log(" Layout name: " + layoutsInMaster.items[j].name + " Layout ID: " + layoutsInMaster.items[j].id); } } }); +'PowerPoint.SlideScopedCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml + + + // Saves which shapes are selected so that they can be reselected later. + + await PowerPoint.run(async (context) => { + context.presentation.load("slides"); + await context.sync(); + const slides: PowerPoint.SlideScopedCollection = context.presentation.getSelectedSlides(); + const slideCount = slides.getCount(); + slides.load("items"); + await context.sync(); + savedSlideSelection = []; + slides.items.map((slide) => { + savedSlideSelection.push(slide.id); + }); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); + const shapeCount = shapes.getCount(); + shapes.load("items"); + await context.sync(); + shapes.items.map((shape) => { + savedShapeSelection.push(shape.id); + }); + }); +'PowerPoint.Tag:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml + + + await PowerPoint.run(async function (context) { + let presentationTags: PowerPoint.TagCollection = context.presentation.tags; + presentationTags.add("COLOR", "blue"); + + await context.sync(); + + const tag: PowerPoint.Tag = presentationTags.getItem("COLOR"); + tag.load("key, value"); + + await context.sync(); + + console.log("Added key " + JSON.stringify(tag.key) + " with value " + JSON.stringify(tag.value)); + }); 'PowerPoint.TagCollection:class': - >- // Link to full sample: @@ -15288,12 +15453,12 @@ // Decrement because the getSelectedSlideByIndex method is 1-based, // but the getItemAt method is 0-based. selectedSlideIndex = selectedSlideIndex - 1; - const slide = context.presentation.slides.getItemAt(selectedSlideIndex); + const slide: PowerPoint.Slide = context.presentation.slides.getItemAt(selectedSlideIndex); slide.tags.add("CUSTOMER_TYPE", "Premium"); await context.sync(); - const audienceTag = slide.tags.getItem("CUSTOMER_TYPE"); + const audienceTag: PowerPoint.Tag = slide.tags.getItem("CUSTOMER_TYPE"); audienceTag.load("key, value"); await context.sync(); @@ -15307,7 +15472,7 @@ await PowerPoint.run(async function(context) { - const slide = context.presentation.slides.getItemAt(0); + const slide: PowerPoint.Slide = context.presentation.slides.getItemAt(0); slide.tags.add("OCEAN", "Indian"); slide.tags.add("PLANET", "Jupiter"); slide.tags.add("CONTINENT", "Antarctica"); @@ -15329,7 +15494,7 @@ await PowerPoint.run(async function (context) { - let presentationTags = context.presentation.tags; + let presentationTags: PowerPoint.TagCollection = context.presentation.tags; presentationTags.delete("COLOR"); @@ -15349,18 +15514,52 @@ // Decrement because the getSelectedSlideByIndex method is 1-based, // but the getItemAt method is 0-based. selectedSlideIndex = selectedSlideIndex - 1; - const slide = context.presentation.slides.getItemAt(selectedSlideIndex); + const slide: PowerPoint.Slide = context.presentation.slides.getItemAt(selectedSlideIndex); slide.tags.add("CUSTOMER_TYPE", "Premium"); await context.sync(); - const audienceTag = slide.tags.getItem("CUSTOMER_TYPE"); + const audienceTag: PowerPoint.Tag = slide.tags.getItem("CUSTOMER_TYPE"); audienceTag.load("key, value"); await context.sync(); console.log("Added key " + JSON.stringify(audienceTag.key) + " with value " + JSON.stringify(audienceTag.value)); }); +'PowerPoint.TextFrame:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml + + + // Selects the first 10 characters of the selected shape. + + await PowerPoint.run(async (context) => { + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); + const shapeCount = shapes.getCount(); + await context.sync(); + if (shapeCount.value !== 1) { + console.warn("You must select only one shape with text in it."); + return; + } + const shape: PowerPoint.Shape = shapes.getItemAt(0); + const textFrame: PowerPoint.TextFrame = shape.textFrame.load("textRange,hasText"); + await context.sync(); + if (textFrame.hasText != true) { + console.warn("You must select only one shape with text in it."); + return; + } + const textRange: PowerPoint.TextRange = textFrame.textRange; + textRange.load("text"); + await context.sync(); + if (textRange.text.length < 10) { + console.warn("You must select only one shape with at least 10 characters in it."); + return; + } + const textRange10 = textRange.getSubstring(0, 10); + textRange10.setSelected(); + await context.sync(); + }); 'PowerPoint.TextRange:class': - >- // Link to full sample: @@ -15370,7 +15569,7 @@ // Sets the color of the selected text range to green. await PowerPoint.run(async (context) => { - const textRange = context.presentation.getSelectedTextRange(); + const textRange: PowerPoint.TextRange = context.presentation.getSelectedTextRange(); textRange.font.color = "green"; await context.sync(); }); @@ -15383,7 +15582,7 @@ // Sets the color of the selected text range to green. await PowerPoint.run(async (context) => { - const textRange = context.presentation.getSelectedTextRange(); + const textRange: PowerPoint.TextRange = context.presentation.getSelectedTextRange(); textRange.font.color = "green"; await context.sync(); }); @@ -15396,21 +15595,21 @@ // Selects the first 10 characters of the selected shape. await PowerPoint.run(async (context) => { - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); await context.sync(); if (shapeCount.value !== 1) { console.warn("You must select only one shape with text in it."); return; } - const shape = shapes.getItemAt(0); - const textFrame = shape.textFrame.load("textRange,hasText"); + const shape: PowerPoint.Shape = shapes.getItemAt(0); + const textFrame: PowerPoint.TextFrame = shape.textFrame.load("textRange,hasText"); await context.sync(); if (textFrame.hasText != true) { console.warn("You must select only one shape with text in it."); return; } - const textRange = textFrame.textRange; + const textRange: PowerPoint.TextRange = textFrame.textRange; textRange.load("text"); await context.sync(); if (textRange.text.length < 10) { @@ -15429,9 +15628,9 @@ // Sets the range selection to the range that was saved previously. await PowerPoint.run(async (context) => { - const slide1 = context.presentation.slides.getItem(savedTextSlideSelection[0]); - const shape1 = slide1.shapes.getItem(savedTextShapeSelection[0]); - const textRange = shape1.textFrame.textRange.getSubstring(savedTextTextRangeStart, savedTextTextRangeLength); + const slide1: PowerPoint.Slide = context.presentation.slides.getItem(savedTextSlideSelection[0]); + const shape1: PowerPoint.Shape = slide1.shapes.getItem(savedTextShapeSelection[0]); + const textRange: PowerPoint.TextRange = shape1.textFrame.textRange.getSubstring(savedTextTextRangeStart, savedTextTextRangeLength); textRange.setSelected(); await context.sync(); }); @@ -15450,8 +15649,8 @@ // color, and centers it inside the braces. await PowerPoint.run(async (context) => { - const shapes = context.presentation.slides.getItemAt(0).shapes; - const braces = shapes.addGeometricShape(PowerPoint.GeometricShapeType.bracePair, { + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; + const braces: PowerPoint.Shape = shapes.addGeometricShape(PowerPoint.GeometricShapeType.bracePair, { left: 100, top: 400, height: 50, From edfe801b73ee63f16c83b49bbfa4016627f04e99 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 24 Sep 2024 08:56:05 -0700 Subject: [PATCH 577/660] [PowerPoint] Add manage-hyperlinks (#936) * [PowerPoint] Add manage-hyperlinks * Tweak * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Run yarn start --------- Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists-prod/powerpoint.yaml | 9 +++ playlists/powerpoint.yaml | 9 +++ .../preview-apis/manage-hyperlinks.yaml | 74 ++++++++++++++++++ snippet-extractor-metadata/powerpoint.xlsx | Bin 14139 -> 14265 bytes snippet-extractor-output/snippets.yaml | 38 +++++++++ view-prod/powerpoint.json | 1 + view/powerpoint.json | 1 + 7 files changed, 132 insertions(+) create mode 100644 samples/powerpoint/preview-apis/manage-hyperlinks.yaml diff --git a/playlists-prod/powerpoint.yaml b/playlists-prod/powerpoint.yaml index 173fd9f1f..f83d1184f 100644 --- a/playlists-prod/powerpoint.yaml +++ b/playlists-prod/powerpoint.yaml @@ -54,6 +54,15 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/images/insert-svg.yaml group: Images api_set: {} +- id: powerpoint-manage-hyperlinks + name: Get hyperlinks + fileName: manage-hyperlinks.yaml + description: Gets the hyperlinks found in a slide. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/manage-hyperlinks.yaml + group: Preview APIs + api_set: + PowerPointApi: '1.6' - id: powerpoint-scenarios-searches-wikipedia-api name: Search Wikipedia fileName: searches-wikipedia-api.yaml diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index 601310029..208333651 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -54,6 +54,15 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/images/insert-svg.yaml group: Images api_set: {} +- id: powerpoint-manage-hyperlinks + name: Get hyperlinks + fileName: manage-hyperlinks.yaml + description: Gets the hyperlinks found in a slide. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/preview-apis/manage-hyperlinks.yaml + group: Preview APIs + api_set: + PowerPointApi: '1.6' - id: powerpoint-scenarios-searches-wikipedia-api name: Search Wikipedia fileName: searches-wikipedia-api.yaml diff --git a/samples/powerpoint/preview-apis/manage-hyperlinks.yaml b/samples/powerpoint/preview-apis/manage-hyperlinks.yaml new file mode 100644 index 000000000..ecff3e67f --- /dev/null +++ b/samples/powerpoint/preview-apis/manage-hyperlinks.yaml @@ -0,0 +1,74 @@ +id: powerpoint-manage-hyperlinks +name: Get hyperlinks +description: Gets the hyperlinks found in a slide. +host: POWERPOINT +api_set: + PowerPointApi: '1.6' +script: + content: | + $("#get-hyperlinks").on("click", () => tryCatch(getHyperlinks)); + + async function getHyperlinks() { + // Gets the hyperlinks found in the first selected slide. + await PowerPoint.run(async (context) => { + const slide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); + const hyperlinks: PowerPoint.HyperlinkCollection = slide.hyperlinks.load("address,screenTip"); + const hyperlinksCount = hyperlinks.getCount(); + await context.sync(); + + console.log(`${hyperlinksCount.value} hyperlinks found in first selected slide:`); + for (let link of hyperlinks.items) { + console.log(`Address: "${link.address}" (Screen tip: "${link.screenTip}")`); + } + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
      +

      Demonstrates how to get the hyperlinks located in a slide.

      +
      + +
      +

      Try it out

      +

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

      + +
      + language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/beta/hosted/office.js + @types/office-js-preview + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/snippet-extractor-metadata/powerpoint.xlsx b/snippet-extractor-metadata/powerpoint.xlsx index b1aceaaedda557635634443ca52b9685196f7d5e..a6d8a5117305c6deec9f852984e107c4b3eb2f01 100644 GIT binary patch delta 6164 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 Wk;a&UkKNCo;H07)xV1umE&c}+eyE-R delta 6007 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 + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/manage-hyperlinks.yaml + + + // Gets the hyperlinks found in the first selected slide. + + await PowerPoint.run(async (context) => { + const slide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); + const hyperlinks: PowerPoint.HyperlinkCollection = slide.hyperlinks.load("address,screenTip"); + const hyperlinksCount = hyperlinks.getCount(); + await context.sync(); + + console.log(`${hyperlinksCount.value} hyperlinks found in first selected slide:`); + for (let link of hyperlinks.items) { + console.log(`Address: "${link.address}" (Screen tip: "${link.screenTip}")`); + } + }); +'PowerPoint.HyperlinkCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/manage-hyperlinks.yaml + + + // Gets the hyperlinks found in the first selected slide. + + await PowerPoint.run(async (context) => { + const slide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); + const hyperlinks: PowerPoint.HyperlinkCollection = slide.hyperlinks.load("address,screenTip"); + const hyperlinksCount = hyperlinks.getCount(); + await context.sync(); + + console.log(`${hyperlinksCount.value} hyperlinks found in first selected slide:`); + for (let link of hyperlinks.items) { + console.log(`Address: "${link.address}" (Screen tip: "${link.screenTip}")`); + } + }); 'PowerPoint.InsertSlideFormatting:enum': - >- // Link to full sample: diff --git a/view-prod/powerpoint.json b/view-prod/powerpoint.json index fc79f895f..f1ba45bb4 100644 --- a/view-prod/powerpoint.json +++ b/view-prod/powerpoint.json @@ -5,6 +5,7 @@ "powerpoint-create-presentation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/document/create-presentation.yaml", "powerpoint-basics-insert-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/images/insert-image.yaml", "powerpoint-basics-insert-svg": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/images/insert-svg.yaml", + "powerpoint-manage-hyperlinks": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/manage-hyperlinks.yaml", "powerpoint-scenarios-searches-wikipedia-api": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/scenarios/searches-wikipedia-api.yaml", "powerpoint-shapes-get-set-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml", "powerpoint-shapes-get-shapes-by-type": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml", diff --git a/view/powerpoint.json b/view/powerpoint.json index 66d395397..bc13a10a0 100644 --- a/view/powerpoint.json +++ b/view/powerpoint.json @@ -5,6 +5,7 @@ "powerpoint-create-presentation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/document/create-presentation.yaml", "powerpoint-basics-insert-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/images/insert-image.yaml", "powerpoint-basics-insert-svg": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/images/insert-svg.yaml", + "powerpoint-manage-hyperlinks": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/preview-apis/manage-hyperlinks.yaml", "powerpoint-scenarios-searches-wikipedia-api": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/scenarios/searches-wikipedia-api.yaml", "powerpoint-shapes-get-set-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/get-set-shapes.yaml", "powerpoint-shapes-get-shapes-by-type": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/get-shapes-by-type.yaml", From 3f67f8d64dddf7fae88c8d64402bf7e76fb09a51 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Tue, 1 Oct 2024 17:48:37 -0700 Subject: [PATCH 578/660] [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 579/660] [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 580/660] [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 zcmZ9z1ymf(7d;3B*WeJ`WrDlAy9Xx(cXt@vf`!2~c!I+~aCf&LgS)$1VCVbo?)mT8 zIcKKl^y_-{>ejuls=B*^+hI#PU~99G;9s7SA)q`YW}w$jKny33N)c5&3dSHg1Bm}G zbqvi=fsD<2;G(V8U`A;y27X)TqNwOWP;(i@AC)s<eLizl{1QZd(unSuOf2vcV8?_8fkWAM6 zRKV64usJ|;3-6|=aaF*(sJ=WGVTKi&!RhZ+0b+VhmleAFC;S4BSN-_mBOGL}(`0H( zmJ|50P9R9Nkq?(O$N$~UJ7TBg_ zM!)$>TzI=FQT!AVJBf7}nO4yJXf-aPAFyGWQOf(cf4y)@$y~;Ft|xR6ffl0rP0&2l z*1gjK`s}~|m2<6okb${K(_IzAR5Ij5$P zPXStrI$U9ib~`7!umB@<<0lQ^N7|qXX(^#zWsI-G^?0Od$rpAu%19dO9AS4SRW^4q zx;IqKS-;DSg|_RRuT9^&lB!v^oQR8EaLn#0-)VIJi?Hl0|5 z4#waJ(q$r z81EB_~5VmjT-Y{Y4pU-EXgDj|4koI*$RHut+0OIOYuPV-^}zpmMy2)YKDTdE!$lxgOK_Uo_w$Uy_B6sZ>2>I6>x%&5 zGAPf&1uI~2S_}pT=KcMDKPkD!2@ZS-;Z5eN2ysfI&yGuogQ-pTUwzPTwbY6nZ^uuA z60}n@Ux}zwfdODP8AT1jSriT7A7cNW9>m@rPhM9{yZ&9zb-ld+gB};BHkO+x-d+!! z-yd%tYq~^$FI&Ks9p|q1v#z&`*P;Bb_p8LNptt)=ihoBdY-0aJm){O%9v{oZ65rn+ z*#6yK&LzIT?Uhjg-|OG(swVH99BXcc5~;>RjJ|c%0SCNK)@)w7GphekVEO39b%b8o zIIy>_2Q@C-_ZGAp?tr=ShA0t7ubSL7y834R`HGsg|FaCf)Ryq!R{dyDLD?`!$TxJr z5sh5n8E}t`eRtmk+dG8XTjUx#ZGcd~gW3x?%t<>hYJqqMd^*GtoC?D-#&InsE49044FYXw1dgw zam^N(yDK$<<0W8-BvIH6ob8FY?hRnQxK)GoD`3E~U0)M8q`zYrKcDq~qF8heZ$j;a z1~X-VKoM64^1q7LkVc;Q?Z6O666}D5p8_oMgu}J!IjU@eRatk*qv_!~Ce8b&w1!!V zuwq%^N|;ReZcfoteTh#|6?!50wK}^Ljp5OuedSvS&yr$;Wy54C8y%~QQ_Z=vdmhc! zE!C?1!yJ-3cOc#DtlI({Sd~IPe!Go5edTsW;xc3so-InZ@N$@ ziM8eNX4Wav9w4gZQL-0+V3jLYi>@C?I9gx0fWB%;W&TAC`!7zItw2PGenDt|Gtz}{ zK%X8W9NLIg(@fT9j;u7TPZ{`((enP+QN3tYnbs;m^5PohavnLhA)EnQfuRunAHDje zf3HccU(cWKRzAbYi7OeE?O7mMA)o>ct|?FcUXw{En#!e$F1cRb-s5Z$SAjvIjM1cb zUjy&dE=W<_pk6VCPl-iQ;H!-A}2u=OCw3TVLPCt4wYqtUNq&=!l zJz}r}<3(P*FMHP+9G6QJ^==$V7F)blMiPN!YKG z4)RkCGF$Mq@RM68-gPnJ@3G!N7^*ZW6fW}ogFeTNnPd2H6fA(lDn)WWa)5_@&a`Z) zC|q_RjAWH7QtXGf9&u=-MuiM4yL8|OTf1JRE~!jGFvd}_&}FuamnJasJk@;`?7Y70 z-zmlIr*M7BKp?MzbIxdK>Xz8-c_yvw(2ALYHfum;)Oxeh-Z=r@9t#t7%IluAomiEQ zm&?HVQj_nvGa5%ld#7<5h=YY-8%IAqvkr?fgBJn@59zD#0C{>0ogdFG3P&u zo#!m*t19*_I_8)OSlwidTw{3=h~&^MxQ*(gjiXKp0)$(F%()}1`(!R6aBKzkiV>`2 zq5zC)BazMlWsX4OJ53S?#$`#R+r5-I!VLUhoU$ubZ?kXSsMQ~X=S!hH7Iz3%d9{o?T_!nyKJbQc=g4c z3o5F>@%m8?=^!iSB2NrIQhQgPw3-!&lKFyXSt>u+BdmN#PMa+!wejK7zt~@*507FXTma^tH$fu9A z{VHEE&Z`0FN5+hxKd*#2d`_bs%5N7UkA;S4 zysc2aSFM;{D89n#L?PBysA|_7hYqlbPZ_~sqNzmVHo03;qOzCz72CLoVUq-p(-5uh zuX&23P+%`Z`jACAN!26{Y1~u3Al&oUxh>?Baux~$$i^J${c0nJ~z%&{0#M$r*nztt806Qv@Vc*XpxwZZ5}TP z7VMI?&2v}$03HWaI*Z1ORcoN z9Ne;{41DIL=`di|GSTFfJwlVl z1V!6Y9g0dNoz-m)7fl8};OM)91TmN7E(qFOT>BVek%Mt$s{z#K>&?s=mxP1)XVzNT zf{?qC{y5na3!zZ`+F9n3Id|Ih#b0c>UY&WXbEK!rY;<?BR?ka<)@Kcur3X9tMR5&xc0AphuN zfE0mb@ABrugq=Gh7>3kIb!n#KLs;m}Vk7O0Iu-f7+|g8V^?zARpMu}MV;?HesYorK zg-<#wooRc_Olvu)8ckvT3MN2JZh^xNr2=4^sIHWg2B_=q920@^H2iBd284`Tr^Qg@~ou zD}aR~ZAMTk-Ndj*ANBjbc=V(!2-r(4{T=nYiBdRpET1k3N0>B7;FOc}L4G*J-HIc; zoLI#928|+s>05|9$S?9giZwGp^vx13QyItXRrSrB*0ebNPL9W}IVSaVsSycMal2BH zp)e@ZkE0Uo>jA@r<#6`CE!E8=Jg;imCOD04C^|sls|__9?w?)h0&Y*bGZNOGi{7=} z+{p+`lI9$5{14ym&=tlnJ};UnH>8TlX`MlG+uh@#vbtAQ(wg;K*IOPLHiTWu(h@7m1GWkOG(HNGYd720~eGhG^#ziJ$~d~Ymh z7o}$4mCyH;W+PKhD})baIF^26Ot|B0q4Rq7P0}UHQj;Y%&avqh zqZQzI;Nh0g;(%^DuNQ60gF3Yq)NvW1FI|NF#9O%yqS`cdL!oh$7s#+s>x}9^Yx3N) zGI0$xlLpwDyALqYu={qv*4ew@O+Fn5jYs|sFFpw$gaaEB(P)c3c2rH zXYn*bb4^+;_j}i`ORBIwalkS2MR=;M-p>@pwD#=-m!vN_?;ie6!Yi+r_nQlaItXce z=%`u4Ya1%!~T$<9O2^aXu?M}L2a_GtfT(*)@ z(s66~UJno&36VwG%ZP|k7w_^OO}lOW7>@{<#<+et7^3v3MaNTjP*nVR z%1S*LB35{DYbx9mb{V0Z)f4FU5Z3dpztLk}_Ps>|#xI1w>oxoBYW;M#5ntfgId##xnfeNs8V(EVZa%uin>y|mk({D+D_gf<{PQVh zdp%B@{hFB7=628M&6AQ3aL!XXN0ppK%UM`^CE8pxo`FiDIs%*%51jVouF@KRddsyd z0t6aqW;dnwmek*7TO3!<&W^QF`*fk05DGuK6wIfTTHk!WLUlbvFdr)=2%Z}g@4tsE zV_~x7Y<>bQ%d7D%5xV^7zm^hJd+@QAy+klU#A0Yp>s$V%0kuT4i22{l^UVptqFW1` zYUTL-dx@x`R~5+ymQ8WtXglo$miZfQsyKfr(EV5H)3b`MazI>5ueZkQH{ZZUzf=#< zXv|n2f$xI=k%p`L@QrqKNnlT)K(LPeqy@X;*O@raEWD^(ar!ie+V9#G*#;IfU#H^? zr@o7new%7d0^DQ=dtgt-k@xvlag@jZ@eB*(s7ccxTU-LZeG;2*vbx-v9e#f$62yXC z{53DT^FR1K=HXm)Z3Z^wt`%Wc4zV}04n0?XnaouOA32HMJW_-7_D(G8M}3uoCLuJ> zMsqz*BvcN|gh~1ntcy&)iFm^(GMU7N9uB`YWl`Qc~HOglGe;jVPqx#!qrZgKC$5ty~WAN&FGk^h_*T2 zf^AKe>0>MK_DhV`y5Xe^li3ETL zfAZoiW85PsvNN)r>fk%d3Zvp!yw_1lrSL2_V9z==oS--@{WFf<@b2P@4H!HZiqZY1 zBGu+7-H>bCfLI!ch0$?X^SL(t(wZQ_?rt`+6?-~wYn-fox82%%XTrI<)?=A5rvvzi z;qWY%|5173_@ya5-tYb@;`4d)u7g|Z@MK*9rm@M#zlRC2-|R*qjx@Pvr^d*~r%qz_ zpXK#z8lozyWG#4GA@N?Oi0*m!Lb@ceb9+*B_inpbVV}RKaJD&egL6AhaDAy5pKwQx zX@4UPF;biB;*L3yG&)#62z7JV6RHA}X~5jlO+fVCSJDqRK2r9r;sShvkfT8Y9{kzpp5{_z3c#|V_7R3 zpr?}yKo^8=^db_*kZ2|DB$lg znrS{A(exOZFP`BSveattOPBI{uZS$xgzY1Z5BC6%C^x)$(Fk^ zoysfoZjZ+H4)x2ybYlJV=sE&Hu4QA_q9hdDl7B-xtrT7g=uN@;Ou5(0y z^mi0UY)@p{dK=*7gL)kOUPk)Kl3(E|gt)u5kLkgKnY^frQRRMb!v;5SB@2g?o03A2 z_wt0l=EI>Kcy6jBA zeMO`rHvzwF@~O+U=Q^B7w(PA5Q(W{?m;)z*(Ngf{c>TtWvUvWT>@Xx=s;Gc&xySKjLjW$Zfl)X@!;!e9G{k@ZJVi1 za_!hvSo3Xd1L~nu^FC2|-xCG#|G(1E%V>{D4hUzqYKtyM=)=yWSn-(CujqgrTJbI8 zGkl4I0J^+3D!lIf20~Mqwqy?ET6|ng_2ydB?V3sekAcI~*Is zt-e(n#qp(HMaB}L)JHr11@b4hGW7~*AC{Vc3TOP#0dr2)5*k%>PZ}+c-#o;G=Fg;` zW=W*C^j%bjCly_*#@c@!zUua5-}{Y5RVj-&pw5k0q*b9@!MQ2^{tp<rdE9Rk04T{^;K1zp+7goB}zk&Lx88h7@>iM8aQsK4^`d$%Wb{XT32F;XL z&heYUsTuy1U$WP2Y)BSCWBA$5H44sC`%H=!*?4priFob6gu#La*6%IS*mqS@QS~Xn zW2t;08I-m{={MVuYd0zHjvDhsv=m-*TEKc){oPvlS6(%Z(sVZu(<-H>>+h^+DS!G7 zn{fP9jQ#&JG(?{RQh;s%xpV|Y0{xneoIpmMjraYW39S^{&X{xhvxm&DFQm%1iUnX= zdK=yimsWfOMUlIL?%Zt^=Yzu_KNrBG@EL7LwcN-@fB#2aCXPZ;i(0Lm+7nfaiED5G zS8Egs);qDl5bi%tQwqEJ)F?hS+pH}oAUwiIn^5k!Qrd_^6VQc2Z!kaq=QH_-^+kKP zWw0-AX388v4);q=-+@`LjG}eEn~N0MafY9Y4m9ek{S@T-#pjCf{30rS7gpA?*B)${ zMgBk=Ekg2*_@sOEbm7jwGXy_wp-^W0)X$1L2O`*)eIq zq;$ax?9VO(i|k%ZKx28(Mhh^6{=741PQ}rH^AExKP3>OSw|Jmk(wYD4$XzdVW}+Qq z)uNea^lLBcEd?W$U%+F!*r_JX#0dS z2Jxhy<19Hkv&QkIV;VG%8uFfp?aB?Ei$L<~3(En*H7Z*fl>V(bUgV1m4mK#|Hm+7% zyo&LJ2M>nxCNHkVXrhfbDBJqIK*FOs*}f*M)AGchbj~z;dHGsw1!-U2B)a6CW0tsM z>ni#8-`lk=1QyvtC54MZ#dMQtmVQCUhG(O{!UsBm9 zRs{^I9U`(~p=5rr=|zWaV!E)H0vl%jb8M#MM-U9wq#G24PSZ-45EF+l@RB<7 z*&KH(h0bCL`E04F1=m2tkq_IM359J;)vgS~awm&~xn2=*-|G-83@diqySN_h5{O02 z2Y5VBIyIWSyh4;=j|ojf_}0h9)E<*nCZJSpwUYLnK)=P04$V%1Y>u}#s)YT{h~pxy4=hFbbR3(qdruFq0!Q{B=T0tqD7{dW5oq^n+J z|1Lui=vT2~*z$8*V+}Sm<0l7z+JoeMkV+K&hxnvMFhIFDOWAW~F}VX(pCrTOho;ay zQD0>pGqb$C-zt;xOE~kmNy5`=S(;Zf;hg?2&T)<3YwFpoF6Hq)(C)X!*K_ha;*gUn zkBc5!><@~cC9j?Veo9=H*M&BRepbE^g>!AK1qmCggEYifO~$*%R(EP2fEQXE{x=ztfn!x@nHv4^y$Jlw7GMK3EiRA}sH&nIy%4|2*0s)6 zGfEf|Fs7nVZNrts6A`E`^jEydwnMR@TP2JDxpS`uZWb~Ua|l+=TU5Tt4lYCROXzrN zB<*Ub7n_g>$etSpkY3RA)m5fioo_31jU|>>lUruqxBc`Q?LXkiteg`Z!l1ZIquR|b z1kyMHp<11FqhLvGM>Qo$x=d2CjAQtmN?Q0AA+%|x8LA9WIX_u3dX6KXSQue7NB=gbmhoifn&0eH8$pZ+TEZO6Hk%em;+T5MbssmHm5W+O0A zfa;}Pq@~q!PJ-{SoWJUSv6k6U|HM5cpnThrp{V55DyWHYLF#>7}m$^y+7Hh}x zy@z5L%XNuNmo44>lS_&JbC2$=!t(iY+n>u9Y?RuRj^Ycgaigu%l4N@x!K6WB^}Lqt za(j#`cjMM7zRvSsvO7Y$G7tWFr^Xhv&c*s%>z2S~JCB+JJ~f=LHd|jCN+;HG@Bb7@ zcFnH8UgWpWvDOdG<$N|9%OVHT{rFxdBHOg1CDm3N%tz5Iq1@)1dH13A&J^YkzLJ~J z|R#o~78GNDVUL@@Qm_Bx4MD$ZrJ-tlElHI#IX2MFU_G#CPvr%b z14mg?4UNNDCJw;&uNgTEZOWgA=b}^NrZg~u2!E@z{TQ&u9ffNWU-Ym;7#-N!3+X#( z^}3MNaV$yKo?l2+eu29w5e~T18ea1qBg+BH$we1r8visRQMph>IY+R%EJUzUYQ3F_ zY;rPHg%S1xEaG(v;RD+VZ^i+9e8=9;6k>nRD?aSIY+IAePZ4z4?G_gHoONj z8icJr*oo|fI)y+8xQ~SA42KE*vAPmTw;}lBB=-m`=X%~I{G|d6rta)pu0I4fuES)| z$*rjEIX81TH@+j0>?*?UY&&rbr3DCFzvbpqh*8q||A{9Tod-7B(H}b3f$mIgmuZjqL||M$yRloqnZic}>&2`hm0$EQ>wIvVlW(QLtawbOztWiR_#UQ#k0wsT zYxLS}y(`f{-p5YaFEdm5`-R4dejoo4ECg>pgO;jq7NfBjrMq5aZ?o^E#uoKRdVxKd zHT4@~4Wx9Pdrd14|3|LPKxAt@g40MQji?pENiq^Qpla&Ajilsh=oo%GSPsEn%lqX` zdR`X3eXcXOok}SQc2SPRmUF(qtt0BiEuPgeyj$o@v?xH?J+E9bqC3!KEz9we=8mj* z$zF0ZkOux7I+=bey*~vc{$LJyIShr!BreISpuGAB?3ykM(76a~2(}p&i=!G%!rm?z zm=lTsHGh{YggnIKHG}>0UR2v^5(U)U0~)(036q}mP5CEy(i*WpTr{vz7F{bOC#!#0 z)JGgJ6pvh!cLpV($Dj53+Z7?L=aM&zLY^?TNLA!nhy!4W(a)$>yY0{&Xpq-)DVrr_ z1r@OFwDN@q9Xb+eI>r9Bt<%VgG&BO{+7)zx6E0#vaK-U1(C6*TY(CTPw=+!v&(Awk zz+Uk0gFwcRip!TcH!TcQJ@@!f$M9aE(;;Ui|7DamPDkVjG&0wo5~qawkFHhY0Y$j$ zx#dmN>+H1^>W|4bZHK5&c^>oHN1gfZPPBbOrxgN&jvMAID{Yc%^;=cfj)!YCyAx1g=~1sm|4UFf*@5xnF6aO5oZPf$o? zX8X23XVSj(Zlq2?L|_o>d?y$0gop3D9o0naJMiT6_=Z8_Ch0gfJGH!8zmM=bXh1|u zzN7_3tT7i|Y(7>8o54T9Bdu{ZoND5ObK-RJlB`feGyij4-TpBR-N}ThRIA~@r!VP3 zPUx?=0v5z-lAfiy$G>gJtYL2&Drb=F46OZV#$3$SZHuzlSU$Vi!zaca@}Tx*7dG?{ z_yK>iPDj|tzzz~*T^f&(;QQY?bm&TEMJjRWO=P*Sp<+7HFtFozqWN>0pjAO|c&UEx z#ja??V$*vJ*_(VaF=p?RUlW@2Ri7Vh=>g;8Uq;-+o5#ezAXYWQ2$ta^51LC=3Egz- ze5Mq~^IB=kk78GE+boFVCFkE3ep8&CpaJf0kzQ(6BAik?vRDne=(|>*38q-iG~cnX z8$`JKIOu?~^s+(U=`QnrGhEA!8@OJ|gr{+N7Q`6duR$9p+Z z{N^=M{D|eeVfAIo_|$&tU4m@Y?H14A&6>f$BryNRpD9Y{-Al1+kmiziN@(HqcOCHR zyQUdloz{6#qJOSYQ9Z8_fQDRV(kFu_9n@)t8Yab-1?wmKof$8NF~ z2dcdAx$uGrkC7iDsaiXx>;iKxRUgCC9V-e;KJ-l|)COW?f*n2tKccnvcrD#6F(4{?wpfVw`aArJz+Y3)lgWgm?l__cyIL@xIBL8%DSI zs053@Rlm7N)*&>buG%9I z#4lT&Fq z$U_xI$qpPpjaP8Mqub$a&Xjp%5X1zL!r(z^glF1TKNQ#`+~VuU@FN?E-ukol&r0PW zG2@qmLiBe;6|8-!a~sX~*k$J1JhBG~ z*~$Z%PvUk=IjG6E-d{+FvOmdv33DZ7Mp9jzam>NpiZoJGoihW|vN^cv{;gR5$PMR zylNU!9@Td2;Rp`JwCI(?hk)aQvckOJu0|Z$ZOAWyy)e!if>v%KKTz?FB%&@f`ZH#O zK7E=}DG&a8kz^c~NsVIg@-sIUez<9|vm#aM4U?n%z!zls;l^Y?P&H#{FBW!Cqh!z> z5OG=j{XvE;l9Ty%crRSBQixl-lhDEa3H`_-$I1#3oa6Fz9=FkCjE7oKI^7#>Eq@df z_s%K;%p(4DP_gl|-DKE6zSHLChYTghnBo+1S4{<`GX$Xk?fEg~JXI2i=`PE@5Le^v_EkLWM|Krie2yM-M(A^e7t zE7h%E&jbw9@Y_RX!4$9{|2JerQO|InrTNuS4ye#a>u}Ubk*}TZqekiBqgC~B^LMZm#1u|Dwpl8=d-39&M{Rx8@xTj@oMFHk^@faVGcuaJ z3P=XmUsL@p*dp=Cx7m_H5$o<-=Z&*Zdy41qA8&DmH#jp~SB6z#Nka~{2h@+5I=VM} zllj#`0kA1_ZCb{LZdk*zd}iiss(vVoU-MNObv18{LXsmmYSjeWKSjf(4Yf`3)%sTD zRZ=*0=Kf=SRAN5WI5MYO(qumTkrJ`wWde+;I5MX!Han&@pO>RCOv0G*J7ue$Qu-x% z8;6OV#3NbR`oo3w2IfLH_Zt&B5CL7PcP@_~fkH{;$%*zOj{H}5s{Z~0kO49?L$5CH z9hu3?7HNI@rfz1L*Zzl5-neitzh3{0{ad_%9lw`Jlnz`|g+DiEPJHtE(Gjt5{@XxX zqWQa$^_V9G(uPhUa>dV=2}b7RMeOgHBA1`4d3?HlrlFnnY^Es5`Fd*@s;-&^GOq(e zKcSUi$08x@ddX*ccB4ybW;0+SE{{ag7U)W@tge$^qO-F77JGT|VfyRVQ-Bjp0hgtl zO)9KOwFRTpW11F*Y8Hg7>0BOsDRe|y1HyavPU>cyt)6u1}p%^9lJAN5O9hY|@;$-nA_BiOVM;$ws_WqEPIYjTQ zh#AETVoh?duUtJAsn6+bx00OTu0zz};EB;bbulfh&tO5eOwcn}3 zAiN}3>aWr^JQeP}DRn{d(kjKFh|)kw2&_hEbHg_#Uvz!*vl(|drkE7T*S z815Wz=o927NTZyGZqPygD50i=!4o1 zuV(APSmhjk3qt+}-P9c`zhygTqU9}i3HRh~aGBp^K6~}JwQ8SOov}~YT~Kt<*(zvd zX{l?-!;UB-)^o~HRuPxj%FYteZS(=n@WSlRUA5GWp({6pKRiu14SI+!%X@?S z@xpShiGJ3XS7d#SMST^C<9z`0-p`-{2x;3H1tKgx4^_ScU85B&wC5UoQBQ%i{&|{- zRrQkvTzVn85f{t9qggq54{Fm|H?Vd{x&6eJJ%>qqnfec&M{xH=VhFYDCP9VKOlIw> zIZU*OGFd~D#G|&o%y8dd%||y1pFW!uGX!DyaXuq4ey-r21i<@5x{I4>hNQ3~%jcFx zv-bm{S$|rxSviAGyj^44<${4VI(>!VzM;hO6@`fK67TQ=-JY6ta8kPIuacLPQP$SY zSko9PujCjVr4o#6^(mZ5>Y6Z;qX{7w^r z>n__5{Qodb(MQb5-FHbhS!05ybHd_&qHFu+?r~TUrJmlUIjo%72t5Iv-!5lLUj8WE zlGC(Uea6kP<_?3g%n=%Fg(D7w?+>TvFT%SbGVwezyaBH!sO1_h+?LAupziC4@6)j+ z-Y>O%6Y5Yt9ohI+wjJg$A0)rZa=MTX;A$IwAAfelXMP#_ZEJquw0Ta7esJ%kkQJua;im<>z_eBRV zJcIq&0I!LUcrj%WF;Atcry0j#Q(;uI+P%SDRV$8VBgBID8gp+z#gW#%liRS8_}$8| zTY+@rD-b0CWuM3?q<}p7FdQ#H{J7({VDKgpbJEY80b1(EsgrJb|2xUDxSV1ngRcFvWhOghFsW~T#0_ot0AU${P^pS_O@Q3Hs^sb^ug#V=~e`8FrtdKB5xG@2ok_PCDu?XxmD9u;|E- // 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 581/660] [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 584/660] [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 585/660] [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 586/660] [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 587/660] [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 588/660] 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 589/660] 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 590/660] 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 591/660] 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 592/660] 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 593/660] [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 594/660] 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 595/660] [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 596/660] [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 zcmbTdcUV(R(>NTuqJW@5dQ}i2y(0t_1?d7psEITwq4yF%K#GwfC`C{}st_O|z1M)! zixlYzO%RY!0|fly-Jbh>e(xXe_05%Y&Yazu*_qurv$JPUeog+uQt00IcYFc>=;#21 z0RX@`zy&gD00jvn1CWzW48P9+YSNKJcIgisNW#;|nEs+6Bhjz{sQ#b_0LsYN|G}%t zZv0D*#2>uZNOa9)l7HY=NH~uC@_*z+I|3;Gl5;@10#vPB-CX}X^W4`n z=g~0!T?=?XI!LYmdA(!nW^Kpw(80~y&C9{fokvxbM^aoup67;+m5rn8??NE}sX#$d zTvkz1mPbNTQA$ElLIMEb4Nw1DWAd2rcmLooWBC4~S&ZOcxGew>BmN(&VkH03*!Cp= zKts}oQe09>{3XTT7LupEr2GdjNhJG|hK!to)SUp@KP@0{O(OrN-Oovs|CA3UQTS_(xk5a`FH`_TTzQh>K^F{Y6jeuWa(ab!NMrP4PF* z_%w(9A35K182-Vxb1wbGOY(`lzvYk=&m;ej%sh&}@ZaTsd(UtD&rzoX0LTe>l7Gk~ zjW7jup7bAjGLdkBJefc63nZMR^&jwiRF6r=Z?7W%bJV01B_(;pB^AYG6eZ;T8p;1z z1^_rD0|0cq0P@HH0ATO8r~QWCvVO}sM>-^b-&5op836!K0e@e`WhBLAq{K-eB}c0N zi|Sw3-(|n0{06f7YBJ(3E<8`fBt#{(d5jEo0KYk<#cgF}NxlI9{K8U3J9vA$D~gG^ zdWl;7_DWG3Hy1H~D|Zr$xEMgmU(w&i-Nnw^ipSr@+0{$YUzzU@GDQ;pyI72m=MNHZ zxH6xK&O;tmH%~hrSy6FOaXv6D4-b!$r|lC(gL`U!v6JqU`TlCr&(BZPPfFCy(_TzM zK|w)GTvAL@QiMby;uYZPZRIcG>c#)3kiX^Jv-7g?baeN2baUnTE!WE0&Bt4rkMDOw z|G=MmTKSMP{ohQpBZZGYY$H*K{coHkd;fRNzdPlBV{-rdQU2dq|Ed0?<$sJK>8wOj zLs8q#)l0+mi5pl(Tug%JkCV8VI1lMi68j(Z|1tCrJ~c;A7e6acJ1}XiM5X?u{ip1| zXf<4{?Co@YT&(Rp!GDSUchP@Q|Dn-6u%xuazcje_$B6#f(f{ZT{(pSzKOFx}Z)oS~ zXyyF3694k#KUw}q^?xa(=4|EVpz7x0PUHg^BwmJ*SaeDrs;`B&qA()<^<0jc*~?SH$#Zzcb_`xnhWuB!OE zg+JS}{Y%aNYUqC_{Y#dT*zYIwUr+3x;oy%_Qak|Dk`(wmwt#7WZ36rs{{0N`NQsIA zllRG(poP%5iKrK#+gA#Ha(ly&_NS(mnz?NAzqriK9RsDh=V38!DvfM)=*KY*N!G}DojlT%Pqkbshk@;6XX zQ~d$de*w)OaPBvp{|A1vlNc#Uzw^{o)c=(KpOIg)q^V8vS1W+=966AJhk}d`K+Z@; z!ASP2lPrf6$f^F+@DCG6Cz75d#c0l*r@cVRa>yts$SEnPNcxg$f`8A}l#EnNyb^b) zFY8;;@OfO33`=}}j{k0X8_-~Q`3Hl)1rUb!$`7+oRX4)lIFKPWaNIojb)^y;+3Fgx}#5H<#Cx$GVI)yyNU11+s^Y# z8EgZsJ%?$TuSsLCDUi#^@-5cpmrS-B2YJ4mGEOdjm`7xsk~cE`HhqP z9ypBIV2rh~53>4hwJUANzJCp>uo#*k(c!RF;muXGVP&JAX=KryG;^ZT&CMy&8C$l1 zYkr7t>DmOFSWvG{POPdYggUT7)jQ9ceysExF1pNa#9d7fI7FBBx*OIshJeFi$8(b>6i57nO=()Dfmuz?fF zRl@@zcl&{j=J&m(d{I{(qZs>jzy#q+m_IEyX zoNJSTE?UH#f`)Q4)TTLPc6xLAj`I(b$Wru9zE6Nq{<#L>oS(FK_m1M8taI^2iG0b* z4-i8VAC|F3_~yf8BaF)j)rBhLvtlxZ>fW(hCal8f{ih)Twyy-5GP*Ob&#|xIn$_{T zm9hOPxMnZL=PSzV(pU6uO)N=invdptrMOf(8#pN@HE^)y+JVT(f9zR)0^H8+0$JIyxph$mYuMneTsFIG z(Vu@Z5LM6m!a@S48VTQDilwgDR0YVtWe?0!W#C_Hd$vfN_znFMFrHQ(YnzJ?=n>e}z4 zjd7s0@WagR0F z6~c~oUQ}~C{vgBy#^FDSC;@%xHZ1>?nV!YyzsD_60lQA<5oi2@E<*%f?Y9OkwXicT ze+1$QU6$N2N9Iu2UIcPA!<_{<_Cu5Hhg-h25_z+y4p*aoB(JB37S~o)-~$C*?t^oA zQ_?q82Z0R^wE(WML|TsV%})~|YTgFVM@@v2sQivCYycBfk82;ot4FgOfU7#0$?}{{ zwPg1lXclD#?|9$cHO35|f)d|(#Kn1jV=dA8S?@0Vq~Qq8wX?J#P)w0DwA&OEJCOkA z#6$DZGp^K)5k{UGX!~;s+|2Q!hec(cZcXNgE+&#f0!_ycj-2l>#lD5yv2tsCN@df= zEi>(K(D2s7)VkPA&=nHBk~rlbq&wGvJQi$Ef7reNc|$PQ{i2UNHg6Av%*vztyk_iG z58^p`50o!-q(3H81C4LwTv8wTxMxloCEjUVwcK+%dK7q6Er5Dkk}&@9b+Wt#st9&2 zwKTxBs$`Q!0R1DqOp*+Jbz(nafC0GvSUeT%Cf~OK8Q0QUo&z;O{BkFpY`dFLz%2P?G#S+G)5(jRP|LcztrmgSmY4_Cl-?K1rSk5}4Hm zL8ax_U{;Zx0txA5NrBWuxj^oe2P-8pQw8RJA>lP4>SC1-a%(8aUs)*`&zL!vc_6=4 zZxcT~b}2c16~wVGMeA->5pQzA1Nkw9Ne%${Fi8MAy30YDSn zb>UsPQZ}~zy&Yk3RW)#|<2>Mcu+@76+n5;g$aj@%5xB+0ar)K=R9f(;d&qc@OqcCz zk~)%*dl{xJBYURaS`DSiv_K?(XXEYwHKZ8D^XYv=kA_}6>n+D>52X-6Yux8U`l~-W zUvQm_CDyi?2&!syTl< ztL=i8PD>qka`5GBfBLB|nRc=SC&JsGFJ7l!lU32js?g^~rB-H^;FPXoxj#uPUctO8VmV}Dj?_g!T{D_6wu zzYKzmgAGL;CQFW4+ibkI0DMP!o#W-vP{*2iMUFvDwQF0#3O!=e>~`hR2Zu~d_pL6 zyYbnnr;(85dim5Y#8Iw`xw}`yb_QXQ_zSR%<~ExHPN^#u@$bnQ5Z*m$-G#z%dNCgx z)oH2_s$O`zOP6fRu9^_4IG&cB3BNP8&Q5U07se+U+Zp4Uo$xd-7-tqHGU4-=44jGk z%WToe#shh$?l&1bc?lMZ6IlXMmQSMPGI;tChxtxXj?{EPZc!`TB95%If~z^Mw4pPqPCd5luBGevncH9YvbcDt#}B#glx{K=>$>$N zbD?4v^4JPvC4d{Nab$0}2;tqt4o|H0zx72MZO>ePqYE044x+gRsrQHJbj=CBQf7Au zEC_QozD`|(w)=KTUTo=s0s(VK2mzp*e(+SMnY>`S{EBllepai-C~k!gh9*x$dxT;PL3T z?_`O-9|r^#R7xjg%D-6(jBJYL3a_IJ-1z7m40<0KYkZqQbI~UuOT^Oup67UQ0uZnM zQABk z``7%2!-h>C0Ln7Q?Jgu*Jkou5(Kt`;o|p{gTA=jsO#TR(Q+RbMsn*Ir*m3b8kC({~ z`@0NFQLv#Y#7{+NHOxfNkfPLnW?j{BrA&f?#w=9O{5mn>f@J(KMYG8*eml7jgqFGnwZTY(Q#=YRNV)9-cW_;TDkRY1MV z5vMH%Jdoa=L3X!}p$EDxK7+Dqo$+Q6hIGt3)My8Y>xrOs5rWMvLtkYiyFZxvD$`;) zc0BJ*5oep(bY-3O?J{E~zc5SiJLUrl;C`KN(2ehde9h+l!`Fz^{6qms8_ap+Zr)Y8SY+&4q~&uH4i1e z@Hm2uVRsujtLz7H@(_ijPoGr8rQISAC*&Dh^@bpo1g`~fc~H$EyLwYdrN7OAZ&lbG zar$7?oHRq&fiE`Hn+B`Jh#{D1&8RCgTqxhqKO5Db?p57MZJ)2W_R2->oE{c=tlpkg zVVTFS_pN&wmRGOW-V5@f=;a84yr1;v8^0u*k4UlVu1HC=pSPX6Y;|KwS22s;-)n&` zk2lnv1`8d{L9l(QrZ`mHK^M6wDZ6n2ZqvEmFHmLM!!^qRJICz5p0ZQ4rv+;E2tId& z(UmN4ueWwr`T26uS4Fej1`QcZ@x~fuqhe{d;ZF=xHjZgcedL|vedq5*0goX04yW(< zIYIZ1eLp-{P2XKLZ5lZCP8w$2l9XpD(b4>>q>lVvO@8Of+NNK-$4IhZQQn?0ScZ^W zNL}*^Nz5h87l@^bGPl@)1-|jryaFd5nc~~~BzuY#FiMYtN5jivh!8?);nNXW#V5@- z#&a3xFM;;N7J$YZdA(~e#)QJ2fg3#=zlP6zHusZ|^iGaSw|nE^gG@h` z$x$;<7s{35nGArF8L8Nni)!Zv9Q_tzP4oVN~FF~QzOsaXX9g8;Z^21$-*qB)b}39ApTdc^y^*{2XvTs9xVCDY^1xjn}2b) zy$c`qhD9VjSf{k#Dd7^3nE7s^pq#h_X0NVG{wkb)EZ088m5qG>+{mORFnB1aE}bPG zFhu+U*ncyY=~Lj=Y!9fCe^=?LnFLlH-RnIuy4d4k_Q{C>Fg0V{yzv!$PQwkJNH4Ao zTG8Vs$~2eH4RyC3locz)3YN?4^t>Ji2R@|`|@w)W<)3WzGt zaT2^%gnIYL>+UNh+?Fb6X-t0eU4rJ+E8W^SJRhT3wehXbxLSLup{+en$D0M1xj_Zw{+HkWS3)*9QEBT{P7btVY`ztAbE?#rL<}p;9 z86H*v{M5}2?Eg_~qEQwflpH4>1ffDhf9kxLCX6!7Lu*LaXNbarzrUrW^X@OX;nKGWeT@3_;*J zcFhEjPp-V7(mzr%EwGAtIH*wCBqR43RIU4YR~*0cW}e{L-RHxC{?N#nXK&Tb0g3j% z`}x5SOmN%+-KE}&_~fJ2OV*oS2VmyjpEgqn)?8uXB+xK=afkQlKHML2TO!-So3nT| z<|ZOdH;|UtmGA19Rb#b{c&(SA1Sw+aV9-3O=}ezH--Ze5jz7~OpyL{?5JL?v=!!2N zos3m(;+(y+y|{SBI@?~S?*wJk_)e!cd~gy_=a(6zo)v)aISVivJ}1ms#d#&>y4AiN zo6lEuZ4t2$mIyP`@_MJPs_5xu>UzGkXt5Y~5pO=?tFV4|Md*d}d(XmE22@aP^M3bYXcd&R>AYy(*XN-z#G- zE_Gqqi8Oz8Ed{6q%#Z-mj+NX(8#2Tt37FUhq9YLO9AO$1JLvb`dX$}jTcMh*+jb>4 zibzXNuDAnlim4`|sEyS5$JvjDh?i*qg;hb!(F^9jMr2fw;er|ic_L~Oq2lNEQUViH zix_w4GNBEA(acTobCt~!Lmp<)6KIExLj8`7VD!CY7cfC;vBQy+Hd9UMrlnf0o?lzr zy!l6of-a;N9MsCFf*1FYDz8PH%`ZX7s}4XnpibhEGr7Ym7)ct)^nsw=WRS5+d@S6a_qE|_K3&5HC& z^=k)fe0bgSP&RW@U180%0#@enc7opvweXm&;}zrxpWg1HV|9V6(9!eLN8s?5p{wsP zByp|2;DBQy*TmxdVrwBS=_ODULL)Ns{JA}JFD&*TVAr(aNsDD;XyJJm&Zp?!mbfV| z^_4Pt*0O0RO%`&Js7hF+I4{uM6yo_~s8VjDyAJ&|E6&VZxo9I>?U_aTn#)y{pj;^@bBzD zqmDbsO&<_JFB%B;sOa|hDv{n+OC|m+wOZv%p9}Ka(0Y1Nir>CR@1Q;sMaEeciioH} z)kwqOgll9CkILITKrV3_=p65ah^sY}0g34cXgb6>kAxZSp7NrYXMXngZ_;UOBp^$b zBuXtGU$cEuZyp+5|25+J1N4Z_g#|+(0F%((B;37l<1x*vV@Q_LT#|C2g|dF`4w5@c z@oOQO-m>LD^mfEUdqcj<1jzbU#)*nh$2row=TL^TL5a6d7)EMQ9&|Tyn-ebRG$r)? zJcnRP_qAvz<-3L*zW@M@`yvd5PN&zlLpP3*J@;6SX^*w;6R0@cizK|cl6P4KgyQz> z#~0-9AE*d<4~9KJUcnqgY6!Ouf=q4iijeZc)9a%lG#x8p%U*lvTm<7bbeygshm=J1 z*~sT=-8(M1dLFc%fDB-)ibcbve&iQ43*JL|u6$GLRLcMn}nB-`$3r_>n^8)<&^ zX&agWL<8JGOTr#NQ!TF_-hCMtSP1U+16Tk_m`xlN7c=@}sm zJ1ri^bYl&6)xV|HcPe&SlOhu|)$5=0&}n05SCl>SevV4k&npP>%NAEJoh7dX7H;hF zcZGUQkF;b95`Zp&M?2Bruf2oc+GnPJ0X__JCGTH&@k+ht7oaG5R|Mzw?HD)7yi*@Y zdvsz>2nfj0dHIZN6E?D%&|>dUI<9Ww5kH9@_ys_=P!iw$0@QV5q2m;{;tX56m+0fW zmtEh%E0$&E*Al6^K#(r33ys^Si$K-baoJRm&`}g`im#rFgnElMS&vZMa<$2gP_cK_UKvN=y?^YO6dn! znyD7GM%KqgPK86XghebgmLI8{JJLL{{q01Fwh8oIQdgl+?#Teh{Ilyo|J)DhJgCH} z+F9!@6Ez0lq>gv7#CWZXrwKCC1D3Z?o5Zw^;Nll5qA6A?gnfNUJ&!^7;US$5OALg$ z#`f&v1nuIgC)!ki==}5i_T%sQeAl&s}hX zTWHMO)BRU3ir-h|ulFlyLdwO# z*(EJS41?ZJeazfO7EJi$IRG~Yp3NB9*C~U}%{@}vI5tK;ZT=WnkcKP%B7}Kznup7A ze2%Mp$UDx2(@yV5TN;0c?gGijzMZhV7Etx>fKUIGC37K1G4q*KC5rtHY-a|><6h|uE@FVj&8 zDYlC9=;7;}3>{zh70=nVV$4kaIB2`#j*Vkg`RX|6Cv}%ojxt;vrlzhcjXH0>NW}OC zy1r}RFfg7R@3K{N^)NR+mQ~mM;k@TEiEFsUN#Rae>OC5xOi$je+RKpAboIfo(kHOl zkIF$hyXfALCK|o%)jraFB(DP9_E^l_I^dpIG(%zy2PD(cOz2rSRiIibL(*-T2_0!W z#hByE9am2nb>WlVvvz6<=r?<)pEm%Y+R^n821qsPXz)Cy?R?X%iOFBsoi z`nX4bV94__8`8|Bb=l@#a5r|4iR!{&RnU{?xcj_n#{}~``19?%P)v@0Oso}ZJU8~! z)pG3l)XP+ytX^$8l;CU&nYSG5S2(7nXmV0=OH+mO?887g292?;;ky2~> zf*);9SBapCPh!`Chk7MnDMpm||y%La)>Nhip4d zPDi`~4a$Cx9!94h{Q_VVarf9s6Yqu_ha&Ho(rte0?7cFbM%`w65vXYyAq`d2Z$aUo zcRpl4V7Ke)#t67$$fthZ^CF?-s(yX*tL?()lnqz;tNgGaFOI4; z6xSMh?H9mxG&Z6Dv|F+07qtlD?FywmWmbG<=oqGqT6Bv|k?g;i!PL|v^*umlZB7tt z->pM_gV>)t-U0#(I6gUVfopLA%lmswDZGm=4Y`l796cKt36~ge4wWx_k0T|4zedm8 zT)bID7tcX>j%mjeS`Fj|63>!tr6lD4P0Hu%$` zqvN{Rb8a>Ze}UkWi=p{Cxd^bFoH?RQDn5DN$#hM}-CD0{&GP3nr3+MZxvWTux5tn# z*8byf3l^ynvT_~hC!02%-h)pWos55+#4h<>89zzw96JGRS1eQpMwZyUU!drGE5`i3f>2GH!F=etg`Zoctj zp;^95r1)6FPRv%JowKmN7SH0Y*xZc+zdDh>Pc7k=)!uYVjX?haa497DxX5R_U|>G- zna3uwDxY|(GOmlz%{8`c?f*%~HHbx*A^ban3OoPQ>N7PLIQd7t{l;E2C27i?SCotJ zu6@n?5Hz%RdO_p@3=Wz437o;uA)Ql#pvfnaMT#qBOKd{R-y`U%61eLrw$T+L zl{!*n;mEo0_5q%A(B!t8TY2^G%D*_Ozu#?su^lziOFtY&fS7w>o5ZveR!A$N{ouPR z^0*^+P&*M;a-^xY0g>v`*q1x5G#CbAy0Weio~yw}i84j^>pYN0#v)!m-B2lL9oFSx z3SIgN23LaYu-Y1|K}dvhrxePJuV;c@=+&G|;+he|KKoIOQEL_|@kDRl=dZz_RbiW| zPs)=E24?RPkVGG<&d3WBZ!jOs=4Qwr$m|LS|t+E9k303knfVnNPzrgF5j+JHc*W@K7j}dZmg%O zo~p0GO!brx_2No96lb}^r@GrSdi{5bJwbh9-khr1ubh$Ypu-6acg4+c0g1Nh0?^V= zwvhgb2bP&LvA*3-!uFcoRN6@WK>i)v)Ih+ba4e+MAJTr;Ahs7e;j{f@QK#<6N|>f9 zkmgwGROM+i-87rRz8aE zGp(hcMPV~<6@rg;XSMFv&^6q1N61RiHBs!&#rNPL4S5nf=i!dmLb zkTJu-nUvMf5bTLE$PA*dXVgs@28flftIg*wdw8 z&h2>}YKJb+UI$hg{pw=CVm^X(yF-u5)}AZ*`09f4%l3$o79N~t>d;x*0*4An`w%so zW!JigPH*N-;`e|q2Za>TK*x4dJ2`cf3R%&yJw+;x?~ex6t~fai2OeU%BbZc%nZ*~J9h0zK>x-k7x>Z&!!pBvJT zTIDg;lfo!U^n=kMX9`Zx*FuUu&#!3e*Qh9d7L=swl6P6S{8O|3uY9z1z#4&PpWZ^6 zO@AQ2RgG0=R;?aNr40g2Wynjl{giigC&bm*nhZORV?QmdB9A88t4G%jV}plbj|eIq zm$k}om*(ur6#A8~HFGzB08pZ`B)*jlL5Vqrid4&3p?EHg(fHr?`(C6G4UR zn_W8oGc+ek&Y|s9rBxWi*ok~SCObvP%pY9nXFp61k0;N0Ks}pzEZ?%N%D6F}!(B@s z!`)(4OB8&rr2cf$>1Y(w%+GETRYWw!CGJ|GR=I)xX)otxJSI9#fgpal&P)MvwIfuY zAl}r}tG=_LLxQi=3NJ zIs?7YRUH#%QiDZ$syn-j1+Sd>(u9vEaQ5BGH*fBe{e;!2a2V@}8p#l9@IRfc5kAhi z+6uE`eI>=$BK*I;5*?eH%13!mXOOHkPAhIocAWk1CFF!bOIeHvo!W-1FVADH9iYy* zzV7R2UAnEiy9VoIMR=rXbN}QjJZ^g90p?}|o8361yNpqcJ>FhOd0+H6=_^wv#nLIQ0$&L(S?jNDEPowoY@=dy5w!nXPGYI94&p^5xw-9;M#wIvs#Rt-zw z8XtEvK`Xxi9B|>j09?a6d$YT-chGN$K4rxzl(?oqsfO|;Yo464J6!cj8?Ie+f%B33 zvke+fM;Cv5sBoQ81`QE!;qutYoJuSOhNI|nv`;c8I`R1_!KhVqOo-&ojj&@we!Mk1 zIj=Gmq6JTZVPcOWIc@vGOhI66pV_ku^@YzF-s-N84Z{%W|FQ%PLY7t0XE}Lv_hr1KZRmbe@Q<%VMm+PDwr4p+%41MLf9Q;`hca(CIY zfd$+_QrcRFZkIz13HNQ3>t-)eklxXB$DN&XR1=tGdbNjcDfIybYw~gd`X9ranY1Qf z*i;3YyuE41;C;0JqOxfbZ`iE@aCy)nho?hF3rcTV`}a#=9JblC5R0#=~fNxPuN%a0Z=`BlxA z7;9?sLj=L>MaKE*;DJd0cEPI2xje=&YBiO{mN6}29tpq-<)Y*Y;}Fc1JkFU(O-AUnBOv$?@qq$VNeSgJBz%Q9fejL zSGv4vn~W}O?%;@E5BQKb#N&MwB?a>dYkO4S4_t3oZ{^}8AUIy~FRnpVQAD8t!VX~# zR!|@PtTbz@0RB3o?Na%d*bt*VZ_t2n_bWpxUGVD+l)icCrKoT?Um+k7xT#;1%rM}x6qZ=@fuV_ zWxi}?g-_<+`C`%YXrU4;Fdo8kq;-Y{EgEB$`@9_KXy6X#aEzH;$6X(4>$>AwX4D{bagA1%| zs#&BxqB_Gy(yG&bSXNACZ$7fCB2QMb>rDZ&j2{plgT@db_!~oDyV+f(p8a0{nkn*i z4~xm;v$YLdLTE6zG4WRHo#hkj=7H_tscV1;(p#picCR!`bQeUNfh(_la7lR=`hzV8 z`}95MO9Ro*-cz-qZ&p*dqfNF;kg;TCPNxYF>MC%=P-zzi6IhV!Og{{@%+{9uAoHVM zN)Wg@c`Se3<`Z((SY)ykW&4N>bw!&^DbUDKM(idP>1($W4*A9UQFBS#J+#g!OMs0G zc1rg{Mr(gyb;gIn6bWc21O2LJ1)1r@&pM|{InBARy){%iZdYw($~)H;W`a?QJ=E#$ z45f~9o?~7bHC&!w>G;39MVo0JX(ec$+-hZWdXo$5X*MQ!^0ON^W451&tZ1lLG5IPx zUkBQ3>QOp={+Qiu1-t9$tF`=;%D?cbZG4c!9QYYzNYS%6yUg*CW7gdwQLS7#!%>R6 zI_^w&s>-4HB{SWW9E<5Y4L@qfo)2pN$bW=IslWdWzheyrAx|C}Pp_GA@r>)Im96hg zZ+gm`5XZi&*(b_R{uCTns#@6FLo4CAk+N!}#o_g0|9t+t6k(*W(ZXsgPG{D5KQT5B zhKIaJ^`bi)TY&Q6A9o;cyxy|ydD&G-CS`PoUs>6CnZ1edvdO+@Z)piXG{-0nZkQeZJO|gNjh!%N z%hBd=9vpRxN^dIBVtu)Xw!;g?EV#&ToNa+{4CI999-~{R(S5Ni(G?O~2k7#48;D5k zyK4w6zSk%&_cgjHM2hH4?)N5R9(ig=s4Ko!{=now=135qetI$KX)yezE8llKYGgw7 z*VvgFQN+t0HOnBqJJtN1AcOT^esk?v(c07dA|{WHM7(Go*szPcv=a^GWGgE zd#;A2<6SxM&tdR2ohx@GZge~CXVDQg)6W|}uvJ)$AH(ZrWJ9kx`0cJiD{|(_(vTIN z@ZB}z1F1th@8F=GjS7c13c@XSYjy5>wSa_kdf6DI3_g3+(I+`<*!81)0EK}&|1$nej_ zbgfYE%LI=zrN8(}T)irH{r!a8iwoL!Yjl&xzR!tF-u;PAY{3e2V*ETT>7tRuM!K;* zhKqTXU{Co}>flBDMZ*J~_YII|{y#f)Kq>PW_i--KzFWX@jQgC}IBU+$&4C+j%ft$q zu0`_#lZ;N5S5a$_$9QlnyUZ?TBBs;R#)o@5c{3pe9k8$m4#~WEz;KB$+WV|*{ivg} zSrKg2F)oNC8V|73!Q|m**L~BTj?G85U-Q7>yX&U?n^tSNWrC%)7cG)Z`B~RsnPBcQ z+stK%@{cWsNXC9CH9cpD^T(2J&1&kESeAQt23JfX65QgEAb*sWqyiR^N$ryWDNCKEj~lljD3K5iwHZvKd5X zJT(|EU+miDWY2y*X_3-MZj|yJmCugZfwC~~ISaOdm11=o(N|H^@vpyrvT(up*0?`y zC?6^RcqM%+-}w7;r+}5JLO#Ug8r1E>y_}{9SfVinRIqrqct=n3*rK_n!6q}0m1|#O zV-L-X$Aq((gjx2PDx-2rO7c%*j289*G~Y zP{M#!9Ue&#!{JZAK1=U;ftcc!NH;*LFCAjwDs!4t2*VH4&Mj`G!C3qwp(L0lA=I>e zzWfkvCc~K!=RJ}VZf53M7Jh--Y2c$rn5AVk?MkDPr78c{T*^C~FS|9%4<1+L03|T@ zmdK#6N_&{Fnn*jD$t&b{(Fgp$c{xnaMi^Zvw&<(B{KF1rL1F39(&~!za`_2@jR8 zcBZ%O=qXt@-@zZ$>Q84@ZLu8`Kq(@on(q;w``(LNvt$*xF!x|r9xZ<;8sJ(Q=$fza z9W?0kP|EV!ZY<>b2k^$kx<9Q&Ay%PUNXO|h@K*6{abe|787=6S9sP3a87ykZ`@*|e z(7?k@g|bwwESoUXvAE%}=%OdVf;moijNoH?rItqOGP}CTAAlsOoAD*L0c=YTm3w?P z65d;lQzSH*`k5up$44Dd1LcK5dd}bZtlEcEJoVc%2^@NsmR|S-z7FSZ`1E%8B~Iks$;S?lTUlv()U!RZfVUBES&Ud8B}Zz`wC z7TZdD>C|bZprKbJ8)(0a@FaR5d*6jCYw3=OFHF?=>lxjAM1ef2(T;!EA+y=c5FDR3 z{*pyO?I-7nNleZ zOZSu@D}ERko4(x(S!O4KIB-D&w?K>X+4Wh{|E$BT!N(4NFPl=>H+g4p%9k!BpE zok$IbW~Q&A)|UtLhP(^c!Sv?nB+}o3;-i^+WEAXfO&)qE-J)Ue6#OF5brW`Ii_8x# zC2eHzC~)pVr*VVSrfVtB%CsPZ-yW2438~PYLZS#oJ*hI_=w-y64h_9;y?1J^R@}bW zziVCVV&9p-2ed-&Q9Ur(d~Gk?+d?@xCsfPzrWM`TieIw1R!-Z!`X-uUF!fNdKQ)sl zT|q+?DWYU_Gc*7d+IhyJB{XTXj8@3f5cYeI2^mhZuMOPRk=mZ)`TS!j!&n)82XFY8 zSsA2fG0wa-Ss@49ZFhpO!5{CT5^%ZF<`*Cn2H6=a&vy(utGF~SlsOeAF*Q+n9D;>; zJ<{9oT%QVW(fKzQ;rQ8;2S780QT0j+xYwrh{x3RDUdB!!Ve4q+t}%uFC+q3I02wrR(Jr`e6TMvZ0dPoTF-iKXqa9LvCCLBspmRa&2b1EO)=Y=x>xtY$6p}b_2%-F|0Xm) zANGcKO2;nEefE|^tR%h4t1OVO0-Et#Nm~?XIf0Gfa(!l95i(KVWhSeDYh=fKP1JkQT3rcBn>_17m$hSSGzoW2)cx8%+qrk1tesmxyippTe<)qLvI3H@eg1 z)I(joQC*-9$Q>7y`r9Yv2N)%Z4d!Kc^6_|zixXKU@bm8)P+lii zzKb&GD(yDxl=SL7U^3{bq|@7}lKTNNVScEt2+~(hJ)hKuv->k%Bu|gj&Z<6ov^G_a zZoJpx%>l`Phg^#@i9M^5E?1oV?(gLXow(HA-be!(-{mEX5<26@d+WC^hJaS-AYEC_ z*6dTw5hBIk`pty+zs5IGw%X@E_D6Nnju+BY1#lCu-^s(GR4gYDz0MR<&Bc)n4x>sO zPecr#uY^d9QB)+tm=I>ou!_$)&1rbuY}O3wW+_4`;vRi5{JZ#(f&I$2W*RRq!d5<9+wmeRL)|ob)e9lf1<5F9IbnLdkER)CCD$dx?dYR91^1ck{!_=XDDu z?wTy|ecVdyc1`~NrJzBSe5JzG+u+-gQ_)F7hSmkq=r>z8_Seoh>iRUBFrJVpse6Go zKvXufhEj{>^kqj?RYaZqqw>vk%i)_+&=*!A{0R|ISUz=Y*(V|LQbZir(nB0U@>+n{KN$@iNk zsUqn=s!*58Z1pWFTFpP8hu!z~>W;W18(M@Ck-{4(OCCmVBrM;4*sUA7=wZe@;$roP z0wC;=ktuW{ZshDY6}%`4sw!{f2QK@1E&?b1KZef3AL>7j<06qw+2bmuxU6Jzk~lM^ zIQz0PE_)pgN!D3O2%+o|mwD#dE`;no?qsh!^Kkrr_YZs@-^cgy`Fua0_xt^NJzpCq z0>~8Ytw{0gGDjb6Du{){ZJ@PxQGZ*-Zrh3`jGiyZA}c=6OWJB7d#47%T!j5BV>R%J zieZ}FyAbKeAZ_lqi{*@GdFdH{We0^xcQNo%KX+ zic8!#tnY#VT|A_b>*Yvf>L4kvstVI$iC7zH)OO!JPW(2>?&^`pSlTA8t@xqT8^nD=FF5AeYv56Q|=Q*-JP1Bj-jMzDy^V zZ{DjOGT)znj?2v0kgSleTy1Dro(qJi@g-thUkT8)Uh&p9V3n^Ox?WuLAWgmF3E zOfVW*c;by*KtHYL4}|EjMBEY-8`*dSCd(>iOg%obRzT?u^Jw+;TguipM|+|n$`!-;C#LKP~rGTG`o7l1~K|kNPb2T^AIa-~Gzu@N{CN%k26~ebQ*pg#U?h z_*;w)F*4$|WDD#tstY5O>igyu=Rs>sGt0s5OcpS*Lg~TKxoq`+lVlIRl#6l9J*&1j z9~2`g0;kNMxY!?e2C1IgdJ+5N1`Q48^1_3OZ9V!mwUp4WWM#fzJ z7$pw&?r>9)zxwEE9kj0{57+tuCAn&Be+v8jYuu-(l~F?JGUX((!w%Q`m{9qJIiYsf z6U_nXz=8O4=sHzY!JM&GpLK*@;aO=nQd9XIo@jIKPoQy`8ln4|lokRLu`bz0!i4wc zKOfZB+96h~t9Pr)S^;8+&QqYlZKY(}GvvwlvDYS1Y38KR-?frAH5h;cD&XaGvYftW z-H;9R1?C$|rpPGzA8ODrp4r@ zhUqfpUedK$GhezHa=tF~Xk_7@@fW)hwA<0n?WjI{t2kMh=(R9%_x#1r`@+gikWOz>JE|fy#4~$*2f(sc*Vt@HZaag_zMbRMO#o!%PLckw zavGOee13S`5^#TfGGqbxv1v5o%iY2HL)jyfa2$W|^L8_^+gFqvap)s0X8Qvb4=T17 zp3U~NSaSwjmg7;Db>DmvWY;`8L5zzk@CZ!#Jk!A7X_a-jzcHEUr1;V-E!ChHoHWsz zTjh59g^r=!>6$z)whmvbl4u?&!)`l{Q#xe68~+b^M$-in8herR&>^@iHn}rE|JP{? z@K9gQ-2j{}bFgg5f!go!5k;{ZxHsTTTDKF3JL=Tzoru{dm`5%0^s z$(Hax%SPaE_iR?nIoqmCanT^JbMf$IJDGwRNvZxriIcyo;a}GPb*Z0Y|FR( zb`&!FD#gutC|ik0QYj61FxzTewE(-Eop-V& z@tyH47sY)^Z;$C0#p-c!cM?zGvlCUj&Ehu*CM{l!KK3^^-i_JgF^M!8y2?4cnI2@3 z8t@+_^haH32TR+A*&vy>Q?iHMm)R5|l)&WIEpsu{pR$2q49#O>ZlD?~9(2>kVaFLL z^s>Z~tsazu%a+Qqcg;8nHm7=@opO+tc<&7=+>-a0_IalEFIRbqVC)d}D{2k(~tFjWD2NvyFpJKb6awjwW{Vq`2seh_uFuDW-#e~DW$ zqCdkL5f5QWnC76aQ1(1t2MYH&Q?++MRaaLaE93xu+d*c^%vDH;$vh@RC>6%?xu;rz9%NABJ zR?GEyk#kjupZReZ?60KwwB76uG&E(@1O%1!s*6e@C7AF>qY^<6hA<0H;CRd+@#@P{ z3D#>EF;W@LT{lCD7UjcBFEz1&-4IW*_Lse6PU31Esr4OXGUo<8B-s^_R%U9|>u0Y$ z6~1Gf)gulR5&;k9pCaY9U&J?uq*T(lwf+2hCw;L`ld_fzt41rrsn?&NGS6D(6D#wS zt80ee-RNTqnhY*-E*EA|G8U&XoTq9-*%Agn9Q^uySb%KLPyE#{l{PgrN(PNQz}G@M z-YtJYd5j<)_!Uz(H9@b+fcqw~%c>K>$2UY*V~8dtODAHT?z;HffA3Z|10+e11#|QV zKhzwGYrI*s?u0%C%h1B|PRp=goJCT9^vZi#J@0qJEVO=~DD_%JM?L5B)%Mwy?l*+A z)F?zr!E-GA%S3U@L6pN9MY9n34iK7#%nL2tp|B+;+WxN0k(%e7?N*tC4ECo!C{)O7 z3oCnC594ERA9z|j-4dJb4#uzt6_azM;!90eDr)xgZb78Ig($9pio8C%nR>l-LLelM zFVIRT7;JZ~DB7nunre*5^y0fs5Z|%u2UJ5${z~>%($8Ng75A<0)J!!p z>>Z9N&=h!{*#`svzO(5lSD)11^!X=ztqG{sl(F*j6?LP9-%Rr>t;mZ8fd>`H;Ye5# zI{6z!!}b21x`vlv_qXu&itPTl8~y;Z$H_RlIOPu0s-!v{kIBz!GG8r?hb)ItsuZ0h2JU-Wao$!KNqIpUQ>vB{seON5J>~ zeX();cnv&gr;(HsQGwPbZ1-tAB3gICaChhH%iTJ^i+!R#f4Q9jVP;}xeR_ooIN-BS z3O%uZSF!kP_&6!d3btX9TnJpN)=jn$p6SOi0;D%Dc^8UKd{^Z!nOWAPiHE4lTIQRN z4l6_sIxFq#)WlAej(|Sk20ovm|NdTjV&lI$Z!+%vMu`*EVhSB(62{AyLYX(sS6%NL z(YY4{W}^tHGmHBDaapxw(WAI)bnM$}4VMMy0)EPjL(D%BdVns)Nn?h8aeQZcxV@hH zqvGR6&+{fQy2QzkX$FmU9PHuk-S%)dW`{LX+pAYbTAvL*V!CGc(Wo}*)Wq!DauwMk zks@ugCUyHNn6aM)Lhd^gC1B@C_j){713L(iuuMqJHS)nU%)Kj{J`Mb_hW!}ddOwm8 zn5S0S?h^7N8ufL&u<}tLf8$;^zv(uU$@&$nECH2xB-*TAEIs34=yKvea-^!C=`_i^ zG^v3b3g`Cs+RYXostxwjgk1SzT{cIG+vS-XF4b{DSUBWjOZH^VigxRDvMG|52eDLPV{N{u1-r;AebKya_iz4WUwq|&?_8lPDZuBRJy(Q}_S8wGQ<)q|NkvsP6 zJ^n=FhZ>HTxBiuEz}S8Z(g)yGkuHIU35vhEHMx(bAzqWf*q4lhw=7?!z9@=tOFyN- zTRrYAk-qB@Xgt9GEMxl}yELl!VXI@7_v?uat$5^G0&qJqGPKHgex%2mT8-gyIYL0A zh|jN*+-dSrU@mc>MII+o^izc44Zx*La(lQ$WqKx5?Ba-k+75g8GOjID?5JG+Se*lq z%{qb^73tq9p3V`@xG;0KJ6$B4Y`1%_#dVpU*xu@_-v4hHNJ zk!R2jiY)d5^X=u2=m!crP<^-^uAl{p+9lAroS}Y>WhH~|G?#Rn(*c$Y8G0T0M9t4& z8o#8p@&sO+LnHCEccg#~byY~7Ho-E?#~F~_jhomf7^q-r*JoN9S^nj>s!9{~`;BPM zjaOY}LgMC1Q`L{1wvtBbTik}3>?hv{eC_tm_}-DUV?AN{H-A`vHd`M&cF8=q2RoN|X_JPP9(~+tj^m5rwl5EbS$# z&V}#!prl533MgHlAI@hgpNsLoN}l$RM;@!8CG5|8%6fynA5?sp?W_p>fOc&bef*I* zN4N7CIeiY!a7DGIYBF0`(wy@h+QZe-0O{Wai7SgjvP9vu6R z%Dv}H+m?8?~vdSWjA#V}=wMKgr=a`Zo{8dQ%{ zhEr~xv{}RL6t$@TsLHJlrKTrDbo%`C{t%>j{={DA%F~0?Q7Y1VB-a9`zypg8hLRM7NVexq1>1USka<7b#>JoU4StR~&1w$;)a#7CGFw_2)x{sx9ecI=2Fn+Rt z?HDho@0?3m(^#5kGvFX*oLRJEIFr62nj!p4%*;lQ`zFV;Ifj2hkY{nhJo^C0PWC39 zj6l}#1CDAY$j=QB2P2P(?nbj>u8pzZ+ZJ=IUSj{%3TbHiDxq4J4x9lw|UVaT4XpyxBwwj>@>@GTM)SYE9sT4 zHi<=kY1_mAnaarN<}how7CW!jo9PG49KT^Jz;GPwuQOFZ90+(`&SrdT(r3M(@|49v zC~6QR(*C6crPLTkH4vDH{4V5qr+M(yZ!(0dHYIV$lcagyJH1}vRR-?p4vnW3=!e%e zV^}OE(>LgKDL~ddrRI?ZZw1I^?4)$y&m zj9?x22ZAuag>?~Hk6|l2&hO~{41=llA|Y)4%z}iLfv;Rz+k@3+Eg-MKfpA@n7>Qchm(?&|S(qBf;*oW07+* zPzq&1nA5p!PO*RJv~-FG4SjSodK%Vftob!>{XZ%u=Stl&tnRUanmWsONIG2eOT;Zm ztCLfCZKc((57+**k~AIO$ipr96q`V6gf^%7q_oLcd zG3Ci=4EJ9$*p=--eCm>uczNfo!iw?!cA$XphjuaNULj9>E2HT~pdF}93fPewu2t{% zG&ULfj0_ni>%JqGIq|O^qmm1T5#XZURf8K>a&!+!uOz!(cN~nn%9JS%dK^{?B$*59 zQQXU8{PqlD$~lp#sdmm{r&8ar+=4Qs4!Vw(mosy^T*p`a@os+3kz2U( z<1oM)8rf}hoP=!H&j;~;xW7L}OWl+uM$d4O>7?>zR5p`_DPMYaP!a$AZ-HJwUw?vu zzpeD6GQ*4&3INYnQQUTse4B7@WMNi2Hk`kXk{db!4@13pwZcP&P6tan+SmIfx@|b_hZlG z9jFV5|2Uv>^oROC3exIWElNnRhE3~nvz;_^@4KO zK&_!hXN~(ub05$5e~WiU8qY%`mF#JROi}P(BcHzi-ZD4H7ky5rduF;Ms%b6_x>o0F zop+KCw?e=78B^Qr0oS_ElAh17snk>8Cg~U1Nf@fLiH~w-yut;B<9SmZ@ZO3dI+j?0 zpx5BU4)pixCvsukK7~{CF>Uy&w|5@0Th`|0mAo!(pl8sC5Nyn-yQev!)Ds=6R@BR zwB(=fyuK3Un{wX+bN^Tikt1wEXEE&=Bu6};)4^lgZXhJNTR`5)&JEw(-)+s3u*3WG z2-RCZ%PQ$Iqn4|3ucv$TUlJ*O85%Wo#XT8$nrTXawfnc2wAztF2{>KM4Nl?-5(GH) zmKGgpR;fF#R`V!(A3F{ZaSGx8ltLRw!M%ib6#V9gm5!)LB=yJFcL$*&RAk)S-$-k{ zDX#>)1ZO%g&<{$bte??!t`~d)77r?*+-nIJxf-9S4pHJ0

        *x(#R1T5via+$e%v_ zg~zr(-?et;gI^@=i@G6b1m4^LY*?AZ;s;>QKgwQIo(7kF9|^g;J`V(f86D+mq@y16t zFuwssiWP*5iv1p1=iFx5^FAvN#W~F6-K}F}s8N8s9TlaLS|}H>?D}@k0RGM%PPP0` z;b#up46L!caC$B2#CNW1@*d8>#8p{OYSZ(p!-7|Z6s)9$Xixq7r@aU8Fb*A6@}h_n ztg#{^FgmMy#7a+;h;=U%c2~|3pkOL^%n<4H3Mdr985J{~0Q(0ObV6fpK}^FKx1c)D z1yVtDQn5cTvSj@by*T$7hX1JA8l#T2npZ72JSfB;y8o!mTh=T`Rd|VZ;B(Di-~-4v zyB0(a@dnNkb~EvTUDy~T1py>tqY>BfQwVwYRRecmgyvRF_M+}ycI8@8!;*0?QNgi4 zImM1zHg0yJ6m{^p~g1coBGS}p?f5rA959v+ewe5sSTju9{8?B zn8gP{qPFp$bX1mCjN1kfT+YgyA(Iih(%>#AC;8pu7U##u3JVmrq%HXtL8OH>QVl0k z{k7-b$13mc5QmU)$l}xj5RJK{O{N>2X*E@IFpM#GN0NayxLrZScSAHMVN38R@Nc;* z>*n4y!fR`@xZ;(*WkIE2?BD`uk_;&mws1k!OK5G|Ay3^+Moi@Hmxt`aGbtR_aMo~< zu`ZqDwvDPfL%F6da zSrD(XvWO;Qf?Gur&HvWH*2am1kot{U+& zX(f|_UxyXzLY4_d2IpJWX@y}mkSynDJ%+=0StZ-jvcK!OHOj84o&&yY@|=InJo04G zH%paF=q&w|=nJUuKQD@C!Yv8)!W-Id*Yj8GO!K~;YStuLu;|C23skt{M+)ByHU)={>XRVh%!NSn>s%0S)Mp%)GN9!_wf9@ry zS2WHL9&A~|?4PSwB<~0r*_Ly2|6O5kdGL46Or)sIoSjl*A+o#vx`Z z&7Am=D^5>dcVFBN|BcOoOFsxQgi$6%-BmtDZ$TBH@YUVbrO#8msNB4#s)pEVw_D#F z`fu#uh%c&lCA%MmB8OeYP&qE73c$_YTQe5>Wl1omKlHMP=^-3(W~aN(*~@Rsnc4pv zA^VUR^C@HMW2wgub-#Ex&m0Mh$DR{M@XrLaeC|Dqcv;F+sLZI&z}S zUzv6h#Uk1^ke4q9L*fw!$F(+jYPFBl3I-XcgZPXkChhR8QLWWd32arf|IY9&l&$BW ztXy10@J{%O8lw#I_@Biao7^&VIc5x{b@rQB_R-kS0}?D~!c1O*{p2_3;(EyZfUuA| z7qNH7@-ODUzuc;;s>zvp+HT*`eg-+ba{t5O1b-Y5J@X^HlTQWANX2uE%Kg#t`1{UZ z!X`Y%-1?|iji&}Mm1g+Mb$B+h0yqpgHbSH8_VMqTh@XH*BSRV^|Ab7VJTq<=bVB?GsNolr1y~2YJ!t*Y%RU6R^vr8;f<;>7ySBoGMRu;NK;Mw&C z5+qNFEvc9c>{Wpfa@%qC+TDnWP@D+hh9LV%v*dDqvAK-em%W70>Xq(r)qxLekZf9n zXvNfK#*=d;VLEHzSplh%AhQ!IcK3GJF=`OXcljI5E#CuoJKzEUn?{RnZ0DZ zNUmv-;90=aZa?XU`yg(WK-r2+#QLigJ%vP{#tRubh1iiamNe%F{`eQl%+`h!Aecz9 zzOGChy}S$*mS`>k+AhwaCa#jgALt3SgM)FqIfWLYrr7><;8}R2f}3feST=TlkB4Xp zocx0K#4r-_od4eWwN4wvl4Fzbq0aTNKKJcRJ?9ViYlAl-)1`=1@M;S1VAE`LhyF=z z1@WQtw^ueG{U>Ol6y4oD60F?dLAJZFmssO%H(K*JSF4oIlEwXQ>s@Mc0~-|D&>u*JAXv7IKW%KJ-v?mg0Q zq0vSC@L-}ow#ApXak6*f&&c1iI60_q<(A)BUnA`hU4g6k=@h*zPEKh`^3(XNdTGeA zCrX3%>!Noef7+~F-gvDIhY+lrtb_ODmzsY?%IO+b=XX;;B{#bhS!Nc%50`A47G(WZ zEUj2{1G6q0@E&#wHW~ZwByIl%GB$2<$oe*^#bNa($D0dSSR#G^Jp=#3cQG2ip@_pL z;#)b0#GKVyVjp+IpHfkyE!LdUI*m_g~S)6Djk`!VC)hBs(CqXT!wJYK%XWm8b zH~@?r0(6LbRi_f&BXIR}w;)(38(9?QUSE26jA}SKKXRJg7{P!^$zB-C^fr8}a?d}n zA6057I5b`q&k^g`JrmKT$t1LI=@0y&$D zaY89O5_~@%m`^B(IgXDsvo5Lv@N^wRiG26daL0zKr%%5Q!rDQ%5sIYbrT0VrHV^Bf zc6Intc}}ppWa352OnSTcbV9;ae}tB$ zYKP}ovE;{BTQACguSUYf&~fVE{`FM@G3)KtYoUr~wS&2C-T_QW#h3d@mOTx413K-| zfpIdjviKiyrnLgff7u&KjR?g#OV(t<965g6&YPVJf*kOl+lBmwT=Go1)wuEri|1GL zHHE&1jIMlp74fH>zQQ7>8P2_wsx19yhu;8e@h&8Yl!#CKSnJHh7nmrDdDR3cfFT44 zQJsPo-5;!8xyUF?L8%<44l68PTqKb-ajti)V6P+}2;?qD&=f60nc-{8_ZB;Yooi-o zhx=IMvX3?|OcHBS6jW6bH+S#iC20Fgu@ZO$Yc=|HsCnykvhR{4Ey+(DwCXfJd7V#! zH(J1l^Uvj9D1Eau5vKY1tnZ=jMoL>dY88vSk45ppKWcgxXnNg^kJOcs)V-J_aTC*e zLWFCoYR0~Q`uxMf8`3wnMeLsNt<;RIS`(SFwNN1w09Ykks?;o7Q(H$ZEx_(`59JSTLQ-Y1|^SxtLCQVuy?hiapGFh@H_C z7wW=FvteHQvr3*Nfn||^stI;D?fgZAR%Dj&{^SaCkG240rGDn~7f~Dh?yTAy!g7qUUsZjX;>On0z{L+= zcMkYlL(;PyN8dQs1xj&z9VS=k;U*Y+V{USbwa1nF2}L?1NzyxP;H+@4S`%ay1mbd- z5Vyuu0t&4xH;{fkx@R^KAx)qE?SC*0e7P>6cBZzgz=Qs-TX~Pj7YeiGjEbCK3suBrGU6G$vCc*|Yx+`vpR(fZ~VxZmPq|I!u?aZgn zWIRNT0y95+aajIfNwMwcs?X>%&)d{Bx0#cW8H`T@Dah|%Ye~pIo6r0zBT)09`MTMzT+*C*!4rndi2~$l;%S6$?cq?!Rhm#SKzo)Z-8)}S;pV?@jVsM*kv>{AsDz`7Vv+(X93uiRc<;d+Y(-?i)q#}o7%Ebd z=o}uC!|0PZ2>(zR^#>y}`7hNw+1gO#*QFn@fT%36%Ko^+ZepmP7d zh~LCanVn+!y6juZwpK-h2Ll-vYva2E74+W?Df5OEhW>h1ZHCp3av zhmzdzbE=Y_NOp17WyxH+4*?f^wcZam-46U~_x_{0f=H|<-}+RO6eUJ42%MyTi2N}{ zi^^#h_4@QHTe^Wls4G@4-(xR64ee-6-*SBUb2qezH4?a_()I?2OOXe97_T!_6 zfijJy@%_Aq;axE zp?0CY0$Zz1u{=dGaKMgumt|4rVrF1W#egcV4wtfJ{;>D4-9-l8&wFz-A;c{u-XG7C z=bm-ugW?=(cD`y~x6ABdo|bS^+Tk6(897}Qv;DG9piyYDjP&V|Oc~^>i;$?*Vi2X~ zcleJg!EQ?3jX405w=8A3^Uf9nlNs2pQJoWd+25#Ib@kJjC)AR9BMq|Z?pHvxuh;CGq*w#{I? zWOvT?xej%20&u*aH~{70FLY ziQd5vK#und5X$-HF3EosWRKK3DLqn1bx+fE706zLh*B0kQ06oogwwIJAIl9MrFh21 z)_iQcD1_B(B>z&&i*%aL%8=i!^eVLeeArd3AU{--iY#uZ`dN8GNXnr*^1--ee2!W; zp{|0%dM0bQsoYY3qM!+nc|@u%*J0ww`^FA+g>gNvyBn4OJUCze_AW-4r5>fm$>3}E zHh9-C8Wr)`i9Aed!snLX5{L4+EV6eOF4?yWrEKL0_{xVBu5q4*E{F0AxchBjT2=md zVa&_`bt~j&n?6Hs^HAzelAER&z!b?XYeX@ zQ&~LrsvavOayX--5v?I9C*b%HTFZ5HgxwEIJy%gHY`^U_aIpa7%dEw^^;P0kgQ7lU z{Cz>0xIJFnS-HiI_@d^s z*X>r`qXLs_i|vUCA-71brP_mw&b8tnqOw7en5f%rHiW;gK7zp8plk5jPXrYEctEUo zfvi*QaVRcvi$N{w#9IDuUpuuS4T@(kgFHFy6w>k60_ltSyM$oNq zTS*Vblg59l+;F=(ziu=3Yot~O z& zM@a6jhw5Dl5+^%Z>By>$*^9mEH!W`PYy(f7FY5oJa%$0|>@CA6HzDbpnF*ZoRN#tj7D%F1S==~*Ik6Kv(OFDTfVRv5`#J4)k+~%BY*`QEc>AJJ0#k$&J?b2lmy(d-ET^ z-J4So-hhfBJPD9vN90?BuU2dOvYlaFuR2#{g*k~Xp~{}}w2<romG>K zxWnRtVKXz$UaxXj9Ln8%Ot4(hUON6Rhabm-dg5@u4*91MGQ1U|pD6>%a-O*L{>lS-gGA*N>a!iUXy>&e}u?T3}7?_|ebl8g&xo_8@(NW=H_ zN7in6TF2rSKPnY{@ZBgc;?Ff>2v0~Ehx>O@+taxEzV7Oo1TQNLGIrx!8Wp0w`jj3A z9ARQT+8E~1e=D$r$-igZ@2%IU;x0Kixzw)Pr(9uQZMbZuZCKS4$(SQ;s5THqv|XS z1fW|D=#T^K4;_|dKg#ho4?rA)Y-&gA&uh_K*^uw3{85};57j<}Pa8@G@=op+*d1*K zvkYx-Or4%FK55Z((Qvz_fHE2b2`*^-aRK8j|6qh#s?=IEkQ+rNkES|&Eakz%q5Iuf z-TfVF+w06TE%Fxb;<_2cazET_Hf6{&mcZo7o=tz6t8eRL8>(OyFB|@4tlZBOsZr@m z=H#jQ2Knyva$f)_MXV){=Y7jS_!U4dxD%ssgyA7LA^33D&&(S?vLyZ$@U-AULJa z3mBhpYiP%!abRc=mW}@EHo%$RFcj0?VLiB}4x_H*tw>myq)5uuoGHr5+z|>F97;={ zEeA5P0Q@(0Aw@uS_S72BvONgj$U|iFPnAm~FVA-~?|Q(&;?V!Zw>PYB;Sb6e%+P^{J@Vo4|MM_FkqO#PJRM zX7%Qvs%?PbPsw9u_o%LrRm-{xvi5TvALgY4UYKsW{NRNP)s}mrdaiU*(IRFrz?wL% zrmz1l#P}0Azv=}%q*8qZtMsHzjgmZOo<3B`ei-Lq2O5tL!e=@~@?LsFRT8=J|4!pm zu<9dKC^Cd8K~5mp`6sd0$))NZS1>Idaz@I5Nh+VBli-x?&mRng^i`2c=)iM^MY@Y4 z&97E^GM|HL$H9-QszoaF8-+I?_|`Vvj=VN%;qAhnd(DKxM4Dk`pKWgpa5yz|DP3e2 zx6gdXnmvAF$WCw&x-D`Hdfzzy?4^vP_1J*C<+HBLU(AS|64IgeQ(?O}V?8w<^&6!% znbotheFt4D_K;)X%dzu2lh6c*t$I7oHO&3mnsMIGOKZXf0rnsz)7w)!?HdWTF~tZ? zP5s~zI`h4%+84j{KzpgHS_aI-ST(TH#{kZx$lDo zQ?1b+o}+3{tL;SqN+cCV8zj`c-_SRy+GI(*Y2g=jo>kVjNA~8kT(RJX_4u|%Z$_V7 zskY`ukzXZQ@Z88=S-4b@g@@kE2j+Y#HL2DBV{>bCQcBlJ(B% zbrDsn5(%=q=UtEm#&92{cK%dPFLOvD%5JeXF`9Wbx_1p-;Khwm6aQpEb&Se#N0^TG zH)q4*T8N0s&w>Ox-G66)GL>weiUOXwSj)XBkHl$u_+w;}p0iE9hY87EEO1$;tno!9 zWIUd+SMjY7&`X|jb9M@LQt_~i9|#|53|8(YF3BkL0GED;+2`A?^Y3PNJY zfDvD2K_jcT(|!-GR$6*OzYAR<@#6s1g|1%!Cz?T&LZ*$G)%0)SsJNQf$n6)NBbBL2 z&8Zne@l41F`PQWXNT)jhA=?=7#-jM;WZX3Y$hf(%QyL+l5m9nynWT;S*Ll2tk^iDMz>P?mi0&Z z#Z+e3qwIJS^FMpfoz8_vRE}H3^Ee^&yvu5e%3a`r8ven8^=d)LErdG3-)iK=pW<0f zuS>oW)Wg~@emv3wld5LmWR3NzpNYIo_M%=vla)tT2yY7_&-h&^%)bXv>80w9T`|&Db8CuoU76W(e?(?XvjWk2>Y1?RAkU_xAgu{&1KP_DM91hOO%F!--Bq8k!Xz3YJv?p3`Px)Hf+pF`swqlj6_nI8G+TmmpGR!7Ry8JzLM>E|qp5*YOzz zrjhW_$VzAA%13LU-BL?oihK;W{un|2(K0A&D^05RfpJj)b^*M9jV4ycGFb*{lJ(i~ zQ1P5`iWG|1dOx(x_~}Fwe)nL2DC#|`dQT23J#u}x5G|gyF-*G>B8glIuSV%JnY-Raw6+CgjmWb zUCLvwjfp~@^W!G5dl4ClF}cLY6BDa8;bC!;yVy2&0rF!~=XXsT!5RgzYYLPK1?8~{ zPQwd}x%lO15EgC|0<$LWqzcczzz}xU>_|gIX!{;Fi7ym%CTD2^N?UdXgPWptu`4zc ztp%vrrX|3~8Vj_AQ(l7N>nd6-CrOr=xU^CjZYvvPVukrYQSfBw(IDaadNqvz)o!7i z6MZEr)_O+6XxZk(al>gDyk9(uq`}RSZ4W~;!8woY0W6eYJjv(T9fPvjht$S)lt|T~ z$#z%2%MKYw8)51xD$yR;nK4D%`_@@JH+2%>$#}}~?Zdn&tDy}v+fKo&4%B?{(E|1_ z)E+Jwi9168kLI*EpCcM~P)Vn(L^Mt^x|tUbsT!||vH74L;cv|XT#b!a)*}?=XQXD# zLRG>>S__6q4*+o?obZGZJt*Tdj?LR27?yI1Df0*{D&G?J+3ct7b+ixN3hI03S~Dqh zds|=8hO|8<#v;9z1$}g+v*)qI8^p>R+{eF&GzE?&mNCA5JL) z3LiJ;JU+V!Em^Jiy(ha{*LaDRAsZ3^W+d2hck0BW8&`K!rGkOWi8D_ZMt~EI>C(4p z!YPRaIbGp|QEZ?g`L3L`DSI4MzGD(}AZn-9TQD((4+uR9sXgHB5s@0e=?W&Uv2xct z(x$xrlE-2^TS;`NK$pz)EjlE>b8Q!lckaaR=&OBskKV6fVazygWp$P-|6aa2l(~0f z2dZbtC|2b}*7%rbRP&Eez2ako>Xu za3bu{dS{$ZH)5I)g=YkCOGfNCNP|UZ7|td)l|%Yoz(=20xo9)DPch1eq@?PZmn-dZ zm;-zx24whZOk^H*8z`)wT37@EzFFTQ{##I~f8|XN{wS zAggPJES#Yqk1J+7LELHT4hgF=2^4NLIvU%p^%rzQdFiZvv#JYUo4oKZo0DLZ;K1`6 zRj8u4^jrT8B}wZwLe}vevWU8+Ra5)g_y&|WcECRU)DPAM8nX8)YUf(8ej1VzEB|4M zE`kF6CC6NwFL~`)bEWEu>{{qgju_&R!b?;Yyr4B~$#1aTg079tPxmM`$do&!t$fPv zgL-(}WF`_{B2jp#U?o0`OM+8BnwmZ{sX{1xL{S9&dvYdH@(NoPy^dF2uraLs==O5M zKCAZ=1&C~_F@1mFDHw1+`jQ{a#Plp!EhQvkAYc9d0%r#)wj=d~?Gv{OWX3^}T+pz8 zTA{~NmLDRG023(R$d&?7{*Q`dgFAJ*lNU9E5+W-k5aezkN$1@;bm`N_nrD#p(-4^~ zK-$|HMgGcDyVC1hms$RlwfmYc@KncZ1~$$&d8;hjW#3FXO*4X!mW8dV@)jgB%ME{1&Sm57pj96I))O7UmGWI+Zf$Fi z;)b;a=cPiqsjP}WN`vw1T@UaAF(+aYu9`8$P~SFwOEo1^Q*4o z(HZrXAD_a$-M9e$kLqtQ!bpRkdm|~K({;nIUc&GpQte4pj~LBe$qgMNOg&kyPd9AoM8(JBqBD$ zE(CgsE%&Zl0A>GMbykA($z==Ivt5^fdbE{ISW8Fkh|}|f%OC~e6+0yGX zbnfv?{eK)+k|HGc>nfyj%PsfqTS5pC=DrHKh1_qmb#uQg_YjgK*X2$wb6=6>e!p!( z?wiXT%=(?*|9kB5*x5Pf^S(S^uUC@bH~~{Eas-Eg(he5qtGw9}T1>%O{}>V$69+v> zDL$7Uv+T&AdsMz{IjJ)5m3BRqkhyHHs;iObf7h;2H4nmvXB&>1_a050=)WO-$S7YHTRHu?nsV~%;MBEj zFAjIw{t!w+X+td5Xj;#UDbNykaar%-KZYjJTJtTxky5_mqem{3Q%2u@;S`R>#VTm` zLL_FeKNg;~%2xreJcXi?7sdELt>dZe?CYBz13$ z?jlxS7%bXIx#oG-aj6&O(9!y2R5QRwtMe?nW!o+}INd+BT7TylUh#KQG^}SA;_No3 zo-S~v{TsW~Kt2VR^|7W6Out3LFrQvAo?V?vMZzy~;9`G1v3({d;<&|1;O}~-0eNKy zdNp}^@-8c0U^(P71zK;{^)M=vpx1%gYdt5+iuNPEW4|xxf)HkD03mjus~?g%)Qo!s zRP8!Hbq8#_AY77JcOBpDS{)(cwq>3Ev&&i!QK&1zNUzpAg;(=+N&S>KXX22yImb3u zAvbA3SV9N`X1$AMuFnLN4>CGn%ythbbwi<+a?Iy)fmW&2+r>E33lwN zMr{$1A2;!^&aC4;I!oq1hBK?S_p#7hNUhpQ&5-2#NiRh7Ofd)pdeC0DiTOaSssR^w z(rs<_bKRl*np*0W)V)2IJxkN>r0$1__SyI;qO+&qXecznAC@nq#XCh0dA?E6T{~jO zow5a5@ndRb`ZK?!Yrrl}ix1$=TD|Cnwx;bIY^+n*r%7AIPdv(dZ6DT4@tPC!zOhZL zRAMW^5id4!YQ8h!>Nws(B+&l0#cBT+eq0#SA?)eub0$+GMFeB@`J)Z=1E&vS@Ce_c zOg$zRK!x0Iv!%5;h=2ASCf3_3f#fAy))!O*Vea>Pjeq%M(V{7Nue>$oNyBbI9O<0@ z7*3zUP9P$46)MN1Khq~ft#p3V$bQ3#qZuT*Nj(Rk@9Q18SLO6k>36&dSB1)i#Xv95hEQ?QqM@ay~wx`Rby zyOtD&@!jL=^kocArMc+`ZCt&}NeyLhS%0x_+OgDd)?ln@dQfc7gL>&Cw+3+$fs04p zTeDQ$SrPVJM;OzG@_3b^2k8(%&Q-o>+sR?BQ?z!mm7lyFM?XU+;JegAR(>wEfZIe& z#5{Mc$wi=*8t(2WHq-b#Wqt~0@w;TWmuyayc(#EmB&zT%H9iZ8?ERn?GFmgKA&BOp z->`8__to~Fb}|O-#yp{yf0BZBzBK#_m(Qv`21$vO^<<^{_fyikk>TQ^R|j5YYJc26 z-D<#%g=a$W^ZE#3zbs9|N9Pj?2zS%71ECmi)>WJI@9FP|Z)(GzxE*T(jt|J+feL-n zYY%j0U{V&XbFdj*?3VFq&BaaLKE0k&-90tiP+9B7E8n9Cswb$YKSin3Mr@(fI_6Z# zIu}Gj-_tm1isd42Pj5k&Mq8on1#bPs^)9CWro_s_#h|T^wMi%T?Q}-gvck4l>lh5eGXnHB6kv#rqejUgwwp8;ng>(z5Ng z5r6GrKED||^o8ZKn80vgIQxosONzXT_EsY8)UtdwZ@&LU;9b3QT=G+5)sbAf z;8~6bw@z`Ep>o}&dbP1?r;^ol6<{5>kCXoxJUE!vWIhLr5#u(qkW&1*+!y?RVBbS; z0uUl(v$)*OJ@-Pi&Ae?w@5kqUc|S;?EwTMVLeK)HCmV5LeXC1P!P8}7lOVQ(ty-9q zIQlJ0iMp9G-gv^*{(^_O(q4mLWZyD zYVPf0SM;bqPBL4sAjN=pL&{~?^C*_x#ISK{+_4hUl`J#<)^kq^Uw3?u^M-xHAIFA$ zY%1#78jb-ahC~T6cX4`sJNtWV`c3Q~lJqqW>9>@mgSMw+6Rf1 z0Otcp7NR<8;{d#d!l*tsk|I}J5+`#IH#zTvlH2kF*+l~|OxJ5+{J`)j9*Y}ec!`>mbfLo99n z70|?!74}?Lj)-f>q@XSZXH`pUF}=4iZjp2r@(P#E6QJoV7=`tPrMpgG6eK14ygTcO z4*HZYcpYHSdwKFu-+v}2YOgyqttgTvQw(_graZA052ovS6O}36@kkERHanOK3MedP zDXE<@)@4GydW($;2>&9Rwls5s?TX#zi^zE%cjKIGycU;2&xltLDShQ zS8=G^QKRiKAJ5-8alqplw224!ZOaT65+F(ShP@@ zAW%O^Yn=zf*v86$+R42{Ip%adticH{rKru`L_c}%H`ArF0tzY*#?0p{N0(b1sV!!9 zPA~X|TBSH+ip;2CkZ!dPUyYlKJIyhXHUAhy{@dQYMXh*k!q>HS`dfEseKgK#Q=?-z zCg@T@r7{?_qG4-tK}yfF)>M_$>c|=WHcwjMkKxs-=7Rhol?0guBwvxvVxJQ-q3cLd9t=Sf34 zni5#M1A{IzbhKpO<(#HP|uj2g8<&lWf*nGh4ThkeA>H7oFEocL`2KHa6+mh81_Bu$cboNDeN+|TXt zzUJIBb#e@39z)*~Q!ct-3}}CV7_yg<`qH0B@KddLxnDQNY#_?jmt&OR3-6G6zhy2!Jx&eR%6aoALct3Ad%BG2Nay2H;C-^|cQT%{gvOuQ!!?{C#;xsHjY+CTlr@Z2Tq5Qpbm8&rS~KUsARRx1pX z;lQ+BoqvPN0zB|4)1RHswpIZt{*Eqc*ceS)wUBJ(U`(LovTAShKDUYZNRgv_*|zE; zPl1o2YRj3 z2B|z5vCa+mR4#dLTWmEOzSFFm;oHGx33X?HeS1W@CcDpr46BwvtEbOi%%=tFu{u4a zWKBX$+bOd5@sm~1GEbk=}^V2ho2!s2LBl+7Rq}$&!NZ1>yTQ>CrOzb{R)iz(Lj+G;3c&07nz)Oe#F-sw!e)LND18V+*`E^ zCv*)ZZ_K{bl4`GoaN763FVJGXV`qMp&{wC%k2OdOKL7ZNlnIti?fUKO%-%|l;-LG#H~DAJP@nm z9pm?4n&&rhs==Gdoy*;cS)HjHrn5|7Mr(4qsm&OfK;~aV=dd7h2Hzz8d?J<5%wJPn++dI-?A-m0$Gs`#*B;oQsTIB#(*YB5nuCLWMKFRvcs^gcnaW#NTkUHH+;SzprQcyW z*-G1Z*jeJD6*{x7J+?0+6T(`JcmRgAG?Q9ZW@uj@Sl;EnpF5SV3l zYt)yTQqgd!-ewnymY^DDsLyuexZi{mp=~@Ega*sG%&;uRDP3qGyNwGp&|T zN;g^oR~NO>Urdw#j)1s5%-fhXxVy+0J=us~GzQ9#pUl|PbmJa=OZm0)`NxX#ksEhb z{ieyW1~jR{Hst!1nYW3)8pm*KG#=h=kY*T$(T8Bk)F;epk5m0UinPgL3-euu+h>Ba zWS(|sO2ofu@A(hAzDNb_LdbY(8}NLNosyApt%&=|wO4H?JBz3P)6xs2E4N+)ydMEi z7DH+bU!{27uuCN2?xG*V5{?c)L$pJkuxi5j69()k zVsaf%XFf?oT`ZrET}}+QC$fBC0X@XNU+rrQGko0S7J)XA4-lf~d|8k!`4>MU?;tGRdzqXxQa zoSMVsc*nv-kvbF)e0c>B`KPL2GXfUDEqLN}QcpuXJK{#2BX>O}Tz(vgNrQjH7ou2! zly*^xA!SUpO}qHUr1$J=A50+<%jCorFA>uw`B?cB2TmrhB4JqC!+w*tOZ_$5r~?dQe6 zzyFWni6!ZR1&<}0Z?8PO+TPm>-xt)%GL&K(5OoUNF@TUb8wvslN=3^m|KyfDGydx* zwp}_wS}F8u!Yn_w%Wqd4ovA8&nOMe}W<6-Lk)gfs(Ixo*F%Xf!LK;&F zp}cCtMj_!9!7gSEZZ)oN(aOmAAX1Ai;F#Oqr zH(_T+$-4OzS*h|X<-d*sY8ZZ-yVRTXHswuzaskwigAwaVuJY~<5M9^h*AE%mRA<1( zhrqLA-jJK7r^zd*xo__6nNj%v^}KkPu(6n2*Ag|L$e1(LZ1U>~o>WnZ4UX!}8f+XY zbE(s#;rE}6N-&um*n!XOlGx8kj z9fKuKyA*Q=$D4OZvu`6;^kWN@+&Xe*OBaK^TAouAbc=nDRi0r-tPxQHT?*rwf8Jx< z&fm_t-RShCe#urt%#nU>dx5|ld`z;Rk8MVOmH80rj!iFXM|Olk-1oNuDcv_jE1EuE zBAx9rxQGi$zN_%LSTyIQNGN={zMX?@J&$c$`p@^&ZV!2;lk*!MN9BMbxsPfA9FiH2 zPmlA3zN;1W+kdC#fIhL8+IkVJFAW>{I~*?|dW_RP)|Mtlql?W~a@7-hq5Xy2qiV1a zi@|w44`>cYxA$Ze2@&nJu@TVV^jP+ZZj$0}JrNCfH28b(?qOnCNz-zi!DoFl9)0b| zzo}~?A~k~yC)4MtVU(>x@BDO+u)BSbJKrw&JIt@}00)#s>Ij8eu((NndankZ3PYq) z9Aq^(A8}bfED+i$_nx6~tU7m1Xx6{swNEIUb!(8(Om5P`6QeeH774HC6e=r$6L+tT zZ2`x0OO4D^Z3L}|@X=!*6rq)`9x!nP4|1ZW!Cx^hu8YKX@kwCd2Lu2UVJvGY%R{OG zw!sTY>Qx_BAZh6TAY>zq@HEZ&NYx->vlgqmck5JitU$+E%08fbec}4G_xkS;n zuokns9ijygoaP ze-*(j_KKtNh52q7@6P<&I&Q%vboXU{y8#KMFf=eVJ$dTOI0iBe> z4S*gk(1cuB=gdOaK9%l&47F3eT96d`%oR}n#{Ror0lYu|^SXm$r8$i5d=OO_RSHW@ z3(^r6cd0xB|EsyPHs+I~9=Izr|MuAmMjIiBgpwHJ z^r|*->`Cfki4O-`k@1H-923=fHY5~MF<&`PE4!V0vB9DMGV?!9D6)YS}E+(dl7 zh?)X{-~Nd_%Mmm4-n69qY#1B5u0M=TXnN2)^nv&u!C=GNOVg34@XgBp#}kM@h0IfH{3q@u{RfPHT)(}$iVEoRRd+sXV#b8lori#pgL2>S8&B4sMrhbFEWR}@!(I!o7d^TBBBfJPMBO)kvoNrns)-rdj-S7X zR0$!y-vbw|O7-!yrTd#xxp|_RY@c1@y#21`yzw#z?+Cg{>m~X)N*yTu8l!x}iSLq{ z_q${@Y^A0oC9JCsb**X``QLQ;B$?QwxQa+zp5&F{uv_X~|+YGG&Q! zS>NvR=Ccj1o9QD0S9_TZ`{F;7Ee3*bkb-N;4~>=lf& zCgi>Jg|<)@`hlk5vG8A;5BFFtRwv-SQ2CSB{!N{iU-zT8vyR-Y)O3!2(B>6M56+4$ z1i~VX!aC<<1}7s%o8#)SJj+}_+@q=#r|d|n<1;`3_}bm7&v7<=T9nv_$U$F1FJxQI z4O(wP`w;rC3fYU6)s}e`4vMSEyPd5X-(xNME=sMT8EFEvBy^xYx_;|Cr#>?rh4;fkKytkR#2N`I|;F0Ikv)E zEjKP^9lpT_>6lW-2U{=aJa{g(gcE5s#oavkJ3Mgse6B7E54%{j%ljY;81BM_m#(8l zRX7lmK%&-f4{2n0=dRUwD~KCC?zc=9W>2gAL$Sz(j_wS_?BA+*qR&@onyhI_dv|0Z zAV#e)NG0f|`GGd$nXz}=tnY4r_X7XD70aB_m2QyU| zgCC8Q@yhXfzR?~SQ*F1<2&M}z zVQGGs?wPB2?Jufi)lL`@d!*t%@A>DYz zA@u^>W3z=gtNpO^>Gm6+nj1V=FMbjx8vei@*Z(#`2{*ID!t%i&ibzF;x9 z+o7KF;+0PmPt7fk{7z}#weYI}!TEhZNMODgFf}%GduM`i(?PO4n34vyT(yg6T7zEi z%hxb@0LMo3Vkx31NhQPuBX4fxT?NJ{Ec+Ym zUcU?aMqRX56*_sWlRy#>h`l-ow14^Oh9~3}cE6j#fG# z%pae@cMe5VNsTvMzC|W!yf{2lREEiGFRXXN3`BVPl`_CxfR`~=H!5i#%OlWKET{t1mxIAKv9H3ZiiUhu8BKbZ>#>AXzRk4k2Mu^iyo zX`-)3|8tF6LcjsXj=+v9m7y#f64iq>f74dPMBnh37sw)l*X_O`i$$+|M9SCS@6_X) z#XcTHvKI?r`VPUu!O?^w86~}RT9c0$6X6U(aj}gV-cN;Pj}JT1_Q@4WHsMBv=$r)O)oMzaAv-$-;1W zRz4Y|vnFgw&k~MR-41M8i`-iBnZp)K;lFS-@Ms({4EeAHC?`ctU;5KkPP;LIO53rT zQIZe-4aO~XM)oy9*+U2;*Gp9O={vTqKX$#NZDc^zB2x4p!$sxk!f=Cy?SREStTZ6C zD1s&ux;*8&Y@G71RW>G?Z>fsK!*kqoVa*gs%$0$SEzNAs%lCdRRw#H3YCa(zdou843K&A}?EFr_^ot$!Q~{+6;fPMK zKoo5ib=U4}y=8b$g)_gy?nwxHL3udGu^3Go@Hp1*EDgr>2!6gDl%)H#FT^%B=S2?e|%ZSRr*Xw_<2Tt#;H0@9!lbh(YR+VjH!z%g?1XSue!~vU!CSS z9lHlAlXwuyOG^fq-hLXQqb=&P^Hw38e-1^%)6gzU@8|Rl;jDhXbF2P<_t25dbJR!r zOkNf03({Z;2X3`wkIv^YU^U>a@<;Gk+Bra;3|`XEvPz&z)nS=wQo*zlXD6rcpg+w{_FUx)4IlXr-y{s3W<=JV#T5l0kM9{lE8%|evjJJ~&=Eb-R%U4^M%PEl7!;0t*@ za&PBUfE%TD!6sdG^v5sLtlJ^l%Q-!Bjv@DvA?$*X~*y_i=Ad(7_+dkKslfGKK&Yb`qX>#;`qM8KJ_?#-I*#} zz%Xcj7~Mw_dLML66{|=7@+t1i`G=&tqx&x1xbsLpif1e$Sm9@x7cSb-l~7cO>|~Av z+YG+3vdvl@r`I9eUSa}f|1FZS1Vw2jB~y39KF7l^^-M0BYOzN>vY*m4td*!RBiJ*L z5D*8N9+wh9;S+WF%4^D%sdM{Y?|E7%2gJGhFP#BIIWC*;_O|$Be)zr*Sa-cSNzuHL zPrEi;yUn7mWE0QO_l`pxzI;IA$>^ApYsX-?+=9~M#Nj^j;-_e(9Yo|YlSA3Jy`0+m z*#Y_%*%q(-0VIaZbrks=>=pLF{Fh z#A=f#UZ01Xu}f`+o5_=M(D%u+sp!V6<#X>BD^@IEg(0KzX~l4JhobcfDA$jMHxjv? zw&%X~3QCCFw#Uq3C!{*6P<;@xNsBfqve1jmdYm)s(jqhaE!?|RFfqvN=f2fH|xo@M#?fNgvi8((yNAihZ7#zGWZWzSJh?u@P6mg!pXZ73e|pI59syj)+O zP2)V_UWEvM0$aF+4}$2Ps}qe)9ot@wk__;rq8_;^KN7kJ!f0>pe$cH{>NG7VFD}dM z+0$A=UW3Kq7Lsl|KwfEUeV*Yk!hpLpEFOXpRW)G>zJt8tu9taxmgwCt8jyjRQzRW^#>+~tmixm+#+w>pzfFwIX@nuCL4SL1syTTj=CZ~X?OW>!>}d4l zBDx)dVzrTMTh+7$Em0IGb2?8$CZHCyTT+K?02@UEoJnMvM0g8)PMqEO8hQ$Zc(EH9 z^z$&vlV&}#E{t`CG&7n0(&wdl`1}y=qpx6trmpLH_i-=FZJ1AgaFjqS`FFY)>!Z0B zp9=@4N$7lF@E-$H_Q)P4GFS0?HF?5YeM{%K2o(L&a)3^43afj);Flt<8<}x_h~Xj{ zuOWQ!=}Ga1rdpV4@_GL1g%xji;0+0~QAz9%YRe<10KS`&ab5<+XE7&B1(ev+-|+&Qt{o`Si2Uj(b7sFpXgRmRx6RDaFx)%iYUib>1`^&TpIRS z`=MMuo+UlJkKa07l+OY%c+pGb?MNli&c&$oMQd7Tu&r4bjN>E~_lqs$aHAC$>6O=1 zj_KEABdj_BjSKQG9$EU1Z`2MPy;)T0w1TPvpLR*?3BK=s22aOZ3sA9nN_ou4I{>=) z{gb!7U(r!h^?Qg*?&;&V^c)-G6keA8)?Z*?{=QZj|13SEIGckzNB4J|2%n)w3y#p@jZJz?|L|2R2FpNl^lh3us zd2A*{c>?l zgHhtQPSLA%;}yyO zQR9UYKjF}HH5xxqd2B@!svh5CjS;_S8(|)QQGu@!YZBj3z$7iyIgU(O{e!aanUQ}K z-2fHV$@J~`{yqM-w^us7EEux!=vWb{GW68&7<1#@tJSgAW&lIBZC9|D8GA>GjC-f6 z4i1SSBcNnsoEn^K#J**{5aw5z^mDD*68i=mUqE7V#l{wfYgwb>GaxDe{LhCQ=_JV* z>id`*_&jVdyW6$-j6eDVC)2?z&$1jp(! zluiu;z7?k*M!C}kpqFVr6p5ZFZiSgLiHFXMO!nWj?qG8g&u?So z`%dlkhhKAvD%Dj;Q^wxIY|05j6J|76D!wRk_C5M!Ge0y9`O8KI2X}xrMGijIKf|PaBw{vBC#fydKHiBR*G@d0L!5#n?7Z-n7Z zw*1kD9&#Ii?_a;sU)Ltv-RYv%`D&)|@IDwPjT>|3jf?v+h!=F%keVHPvYh&qvgb42>#V+DnYO0;aDZ0CW$aIp z%Cy>HSOXnorlTL(SB8tk1GKP3Js*jSzD4!e!O&;4q6a@N==LNB$zS~AEZ^T zyl$mC>b+`bnNPAB@@-I6UNocqS9|3fupt#WhPqs4)T}Bt*PuGDyvp zd_1W;4U9EX-j)VQ zLrvVP1^mRd`#|!J(DaAv1Wouf`ZQEjFT_Kj1(D&pX+tcG7&FgWE)Vd0#~}al@!Sl&f3b2m_0V)rRkQAfpCVpUf;?+}-F)>BKI|Y! z4#QvCz^L~8$FtGO0~q>MawMfmeo==HxAFlueEwj!2++}$;ZBR}398l)DbZ8Jmeb0? ztwxP)KR_>Fp~5@PUR5)sTg;E(^TfJ5;<1>InjMyW1pkTVhbqkk+l(2qJ`*Zk`w zR4Pc?`9Q+S?PC+6DwNg|hsn>TxvyJSm^+6`Az|9%y_T1Jm(o}Ei20~-8|RS+Rd$j1 z7E=n}W^vKqh5uwz8Hbm7Xp~h^c}jSBI2krkD zrdkO`!~L_L+r$!WmF8n1^$J$jup`r-!VIH86xqR>drk0kb8?O8V!rY+jJMf3z_~=f z@GwE_K&|4}Z414r8stuIu0q;OId^yxD7hRP56Eu3Qk9ts(M~~#d(87A^+?5{YF~WI z+kawnKo}#LX}4${6i#ZDnCx)AaVTl8I~mR2N25#Bjzg%W=`G z{|&0G;{~u|Xl5%KF9j8$)xF-yD|V>8iCx*$wDo-Jx$yi?*wdm`(0?a-!pe1=qZa7M z#ia#@Z0W>fc`hg$KWf5nsU<2hN9Dh+`m+&UOsVgrpFv#I_bxbB*V7ec=ZJNua9l)M z*O2$K+(N@R6t^gc@ZU$9_}EV`9o#P^5BWa~sqnrxur0TL{c~gAPceqledVpCL-W6b zv0cBZFz%l_v~d9m=0$jMK`1Y!f3B!@3-& z^s)a~zCj$MHcY0Y@VL{hQg(WhFMFFQKfYRB7y72wj_o(%d|nebEIv?1nr(N*oT_^l zm`Al^D;f~|+grKY^~8;|-Z8v6nfLicu4ne2%m~f#>s=1&o7MG`D9hCedL~^4^>dNB z0I0#b^UnQMZyyky(=UJOc@3$3#cnf}D0Y}3a_-0K8#BP91FCY;h;vL}blBPQrc2TL z3D=T}r^BaP;GM$}&qG|;mWwikFsaU@>$mvFS7Ghjz;%hdO+~gX%<&ZB=>W22=o#H|3-icC6Eizv3iCDX>_r4l!Frljs4Iq1;Y zSASk8BJ%0-!tj+M8aI5wiJ*+xEIq!=4RZb= z6b8J+2B%2e7x(0NBIV%f_ur2+&!Zf$2s?DUJnCF$QLq|RdL5+%ibrt|WSX6k4dy

        >P`nw+lUNj;xhEo3IV^c=8)b;`5@YLd|N9vVi5Ujd?H~*V##H zhcQFTiY(kp=717zlFwiSb(TJeI`zhK$f==iMDwFTDI|4KV6hRKi(V*zoq`+?=%wW6WE^Z zDenbpb0APaJXJIMGF`;Wng>;MI1 zVtW<5_w&x?*l`!|Sbngdy*7mG%br^bLhyV*%gxFGm$x^&vHhRc5KNl7f*PAQ?!1-n zvCwm0gt=p)a6I4$pkTgMGP=B3qxg=a+s8ht9q!T2YgCTM;TM2|vbc!Y2%vPDP`=cA zOKUi>DsnU`-P>XG*YwAZb4;bL_sm@yRl-a&Qc)BxTR;zA7o)sm`#{@vrfMnZ?ZSCx zhB`Ij0Bq_Hg$-HLF5_CO-G^m)GPy&vTD{$jw;#gN>W|;*Ul1x|715#@>R-*Q1~dwJX2$i)oD<&x_$7c-gB}A_GML`%wjlY z%9og9d!Ps3v3rN~HL@|FpNTgrZqCbWSFd-d8$| z#^RLK$1AMAI*VW2d+akYz9tYPU}hEb-F%a+plN#P05YcL!t{bxyfe^_Ur&ir40?Mt z8SZ74HdLQRU!VTVk(kE|dnUJO*ssg|w)YLlxb!Kbf{iGm)Z^|k!MW&Mof;LNA2=PK z=?VDQJgX+_v9JdmMvf#bdT0p!#H81cX9Z{Vn9b6`L5wjw*<%|mif+H~u{Qk&@A-rQ!%>2HlxmWg9XBB zpKdiT{z2ag=E-SgTg>u?8gqaCaIL&vp=#M4Gp;I|-3}ugv!U+~Upd)~>%DyxK)0ZQ zZkFrat+262rmecyZkASK*4? z)@#-z4=%2Er@TzokKh|+uxgdpn05~lSZ8RT{?~r*$O+nQy^njFh+ir%X`Y1;0lVO+ zZl{w^cHjI?c6>edI6xq!1IgP~oyjZ8?eeXn*;&qgP zwznb$Mf*Ym>2**pt=|g2ddsSxONXbVpQNneene3{Px9zI^qx6E%p!i%>1wuhB23X} zXqs)QPE{hT78!ADi5hQ}J}IW%_jZ0(HT0M?)^E&UI`B={MWhMNMKRmP<7)L1KU0|F zHBByD(>)pSh0OM7Ff@|B3qd9n7dLL7F9l>|n)STnNkeyV^g~TlEoG?B_1L?dy(oy(qW3t)2%YI0~gi-_qrJ-nfa zD1Y)h>nARa%r6^PKLn`mVSh=PyoPZv0!f|=o8EU@hAX~gUiDVzwSSe!>as=FT0gc2 z^=>{$>61)Z=tY%|gtJpZ96WA5hkh9h_w^x2uAhYR@I=$3aFl70z;v3uUcuDL5z_)9 zM)gSGtQd2ATrRu9+|*7}SZR$?b9u>XBb;h~0;*kHSYZ+Pw%g-U9MMz#xq6PfkPP6? z1{+#QRJtY?F;(;sxZq^{EW`9zP%(Tkz5RKpV=dbDC~7042;l1SAR*Y@gB0BdR~UnY ztQ`6Gz$1&AGO{oC210&Vj5ICJx2zuJ^$m6Mx(xbVsQOm$D!DH{{BmDD8gtU4t=`EGm5~_Q#15Fng>4m{1XeGX5t^_xjRMh3@{3H?_4-8R31q`?dx`Sd?LUEC|r<9|wO!_o);4nn7uUk@wTR<`RC(Sc! zI!eCYKatq*x)T0s;;|1RkKFS}ll_$X-i+D$AhnW)MRfc^>A{Z?5YwJ453ADcx>6lf z4o9J~ke0@Sq0NeBm#^nv#M(%xion!&PV{^BBc*nEC zK84}&g-lh5=_+CfzHxZ$>jt~z@0u)>_AEf4orHV8&4c=t$6m|oR%xbhf17ZaujY9 z@u&rhs@siqG1k@KljqGIjPFjKES zkn*x9LY(mJH(9|N9)o2D{YGtUKtBiFra_1M~&`QfSrqQhZ9 za213b@FJKy?i%q+?qGXCBpRO!f2kCHNwO+n zyjk(a{lzHqWGMgm)Jjcl?@FT=*7Vxh7&9TCZnK{RE zMIt`&<2)Rj=3~hs^#X0HSx1`CAXA7+be~%b$M_OC@J%=*`)X+@%TfU5Rp{AD#%Gg3 zFi@5Ho4`RI-_aUzt%pfnRHq=kY3e7RH{?1(s!BIcw?OuDU(8PIt|Z?LlgfjFXnjnL z;a}%mL+76&ZP;$eR0>s*?C+*r{!8+gT03hzd_O3RBG&o6F5ab~$1Z?}T;DYx*(wCQ z(JXf@y+OC|N8ZU%kMVPT@w8d3lXSh+)g65v#s_mjb0VQ5pL56fvIy0u2H=GL!ls;( zTRLbLa7>7Pnzvc%mTc&Jz4Oc5D9{fApu8C!2SI#C+!{^~a^8b`(-8$P+0Lg=)AnJU zBpAET#O)=cup*LO7Bc4DN$Jfn-`YJ64Dt#z>VF)adpwi>|HhSyC`*#FDaR~Cj$x}L zA%s|tt0bq8oQBy-Ipi2ZIW0MbSk7mY(;SMNPdRMM`LsFA*zEJWzrX+YF!#OfeZLOZ z^}K?q_8m|CH6Pzqro&?#+W4c>4~yjLcJ9#StTJWSml}X5J=U$w7RcudZ)9M?OD^;* zMRmwL*TEYvC6TzUD)Rz@3|=Gh?4K~0VbF|?_}>2j4~Be^i{)w{ArlqK=wj-iGMn{} ziX{D3e#GRi1P#z7CMnfM7tX{HqKB%fs(GR7)?CXLbt|^%n8?C@A@^be&sQhm6t94b ztjn2Y$5yN@9qapvnGdJD-xVZt$3yBXD3(3j73h?mQR*Y4cr%w;Uc6&}NMqUOrJ=^S z>qZU99O;{?pc9^#)LAL(!m@9&RdUF`QC-@a(R8!ip9`-%W_5t={p^Koi|@dV%4LdB z{?7Eqt`UYB0L~KqjPs*{8$JjJlrB9;D^=@+miaPdv0SKXAy-CDvGz57GC$lN`c-_5d6 z4D`zz#2U~r>K(Sr4k0yv?VAr@$p4mf0z!wcL`F2RJE!nTuiA==0lb9!izek)XvFF-d6SEwUN(IVXe0JcVl9DuW&Q~zCw4tMzn zYG<(08~?Sl5a;;vuwZsaJdIyN(YLQKt6E%7vJJucG+ORo5-*`TSYa&OEvN0)F)RI$ z(1@Ho>8PY>FXgEw5mG_D=ncOJ$w6PokJqZcd`~2Z`r8axlICL3S54HlEN0D`Kj@ZF zr^)m&)SY$Jr8y0+zwk-0us@df@2W~DR^)mYu-MKd4Go*uK|&jUJ$XYgdfBEQvbyor)9k+YrXPxOrWf)b1`ZLvY-*qF}C zlgNbF%_?jpIQ1F>SWaY17znNVdl!=6&iR zN0`?_`rwD}darf$pE0eEe)yMr9L0D@RK9+RX^y7%A?V+AEH4@6{nZ_?9lPMsv-5D2 zH)Cn&`=};Fbf5zfA3QK6Rb45yByn<{Ye$J2sb@=l{Sdk=wFT)ICoM|JrO<7LT~V}wg)`&s?lAN^f&+cHI>38PKehIoLwku1=zaN?0^ z#xqGy4o7Tn%k6QLlMimyyU0FtNv(v+-63n+l)6prNUERbiPnYm=|vpeEc>3J5M8(- zQ|*$Eby|H~(xi4}=5nZ|MH1qpxNeEKY{rU%cvha+ZJ+aJk{#O%P>N5SXp`ey+Ufg8 zRaeUHBxL5aPpr2U)+{5(GF&hr*UXb3HDSF~t|JQddP~ z3u>u+0(xgtrn$GQ-N)8LYx(9Y{w52E@&~_f^g_L1xYKj*)xR~S!}A*MKAw_>Vp+up z(vPXIOul=cu zV4r`8LZi6ZF^krxtm;fBrz_^sKJWZT@%mL}z1VZ~RR_dF<26lIzmv|_U7X=ylYwW+ zO8mgNomOy@7)H2joOK4JM^PEjNYK$JagB=A>%lznIpZXX`7Y-~XjzBzKbIb6cWC|j z#f$$#g#F<&A38iV_}WYR7|#TyFwHdHG%NJs%cL>+DYx8Oy*)jeHvMfelbg!F6wfTZ zt;Bu1#w*dTt|wDMsnl@KJKB<&NQd~JFF4bf{gA!(XyYE#rdPRvB@F2B_GpA&C6MV}@ve8&i5o}2Nzqc73*O5_L5jJ;|!%NGi^bH4=Y z{lYBr-51FVM=W9%hpi|}Oo;dUU|jg-bJxN_rOof$0Wwq8u`Uy@A%{{xvviwYLW;l= z6L^_=6wv$J;eSKdV?^+CHtKhu*?j_?J@Yo~l&;&$t>aEVCJL{n=6;mLNe>OpfJwN* zf;BS^lp{gj2d6JLp4YtWt6KbR-`LHsW=fGTiJ{y#o8ZYl_@gBT5)H(as(DX~ zbbzZ3*0&U680Q>qkrfpHd(VUp(3qq-y$aqFW&-_fTipZFAdvj;;6xkXZ}bUQh< z8kl{hrG=qhf+_10i!03n1SvMOh|f(wYZ<-YMd-oNjKj$YOC9$7FmqpqsoPyc+E%D) zO}5M4_$hi;#DEXK@6~BuQK&F?(nD#*N4g`;-~ARB;VZb%tLW=UI|7W~4=Z!1B2~R=# zoV|cR;E;o-o=)mTw}nn`uw?J^WLYm#e!%9z&d;?X*2H@fI9$W=>M)Zxhu-O}bAPHV zuhQ|X(e`NRjnH32a@0fSQ2wY&IKO>L<@ z&42<-ma`Rnv^g_ZFAKeWWqrio?MkO!Hp00e?YbfABoTXRbyjvH>50Fn^>D|pccNE6 zbuFhIebIdh*@KYMHcCqzkbL*)XBoQkhK0*xD@P@HE4Ho;>H2R4-3lH)j!E2krQwH5 zQbeDi<69loD2VlO#yyM+-D3LToOlK)PE|eMJH)G%jami1UbZfoX5~+QHUAdzCz8qc zmUViI0YPFA<0xs$K4JDsGu0GZ&>2!(b-b&0=x}OfAzCUDWpeqWvexN3^*T`QGBn2N@3~d{etVgBk;GkA!kkP~3xIV}<&xrJmzwwsg_wo)d*Sxg| zXemi^Fk6tdql{ISG4;&&P_nhib$>rM#VQKaIOIEXRZ>$vZW=77C7yCf06Y?nq_jwX zI+|;3f8X)qTkCAy+hUjh$=ll7cc|y}-fJ(Bo5}%kgk5(8WIZR@j*|S$Ca~oE!VLwY zRtHO9SPdXHcO*&81f->%8rlemy}b|!QD;MB*$MIgo1;7cPwmrQ()Z`HlpN`9B+J4z zaZnb{&(6QnBj~cexn%CW_wWAl$!j>hDkAXDlQjdXkCkH=s>ZtO)I9Q8b#P#mbSk;{QdZ|ZB^n-zr8gt$Q zTn&%GKR1h-s!1!jpPtFrpY|)v?NZ9rGaK%!#Tr-6KYM*_v5Le3m&jiz8hwlJJpE!k zFLlZ;R3~03zjl;5835Ak3v%J?8O|_ogeRyz%)<3;_V>(r3RkDir7Qj1ipEmz4aC^y z1H(TQ19xnd@uhs^+$OJK=2f^LrZhJe zlYjT0K=LzlSmTZ`NNtiu9#=I z7;#vO@xU3k=Wm?|) z>`R5^k}sZ}A`lUuv!Qe!D#)G+86bIU{X><{BtbTRd_v8gC!f)yy$rF#&^fjho!f?5 zr>tC!w!EBOv6l3G+O8*in^P--U19j{uz3Lcxv6zPkh3<*^a0+*GStPYA<6BZ)>VQ` z4pkrmd@tjf)?-cRXm6do`n8|@dyihk$BR{av@G>3e)?;hR{6cuGtDe!(o8?2nD6Y+P1vM8*ve>ky2Z0RaAr)s|TP@lRRa1%$lb~8%;&y**afk zUm7Wsz_(ETT4I0L)<5b(UcG_ss;~Uscud%FtOoaW2j)lVlWQfd7);HyG}@VF8*J3B z?*L~7e5jOZ<^6=A=c+z6itCL-N}9`X2x-!AqjSPYII*^K?gwjduKZ#(4Tx=1rCozg zYKl_lj)priA^}q`%vZkJ)xb0a`FBC%oioCwT8T3)mDNaWkA@ zj5IZ?e&iNzX*V?f-S_dc4=^KU(azG6ISRD zfIj&&eKg>mA1sQ#M6K=o{c4tUH!zj>&fKe~XZ-?30#bVPjm3=~z;I(t@pKTWi>j8= z#`=#<(_4<#&jF4L4Pq$LueUoMqd&!pG+8|xuXHO{tx*m?u&_s!vi7(6Q?+&52ivdS zj`=7;_lJj;{$(z`p%-csEQ(S|RK-EVZ?YkMcd8u`iHE?)c%qF0-#{>~GOvxJuK=EH z%5S3GJ=U-fqmyA|5bHHLz3lPks2MGRI(JlxlFHVhKc>`_E=0JF9FrlgYOWwYV^2eG zu%^JgD7R3e5{E}%YA_<<&CuqT7ggd9Bfl0g>XtdnJUZ~8CV$3NlyTb6itE313r_0| zcD=j{S^nmuE^lA&<;K~SY@7(0k;WUl;DS`HyL|j-CV!=>IFt%r9g$_?f17U`x zP$f4>68PN*J!H)1uU(uHuQ+l2LZv7@;`A0^Jg-d@^zCMrjPzOQT$CRf9rspDg$YnS zB6rHzeicTRfIZ(9mCBb8Ki&vdt2EdEZD=!K$m;~)F`W=eU2p6nIWh32ke%H7BWMM> zfW67Zu5IKe(GyN7yJR(n8bgjQZtW@1ez-B8u4^PmOI_RH+D6dj(%N*j=OgM*H5YW8 zYR`>ee>)qf9~Yc~@?-HyBy0yr-2y4;)g;{Ac7twe9> zKp0kliAfw1O``s8c$*3H?!v=VVF~EVcv+L-_)FLbaK2ymC3=w0cQdhZ+pup+uQ62#Z@iVx%fEHE4^RB4%5F>wda~S68&HJ+uqW`U&OH*ORq3%~wX3@&? zgxVe*oyc>}V2Au@QwPhz-2L`8j`s9;yc@5R;CaP>Y-L2gvb(V9=iHLXZlU9WhwyD# zB6eD%qv5KVwwY*>q@3QLJ=_>999;eXk45mAiA!O}Zvr+&&(HIc@A4JzVSnj7Y1^x4 z3eI&5_JdAR1!Aq2I)*Bs$Hl$`lnoe-U9Out7-&YnvSXTPq<@_CK&>ATssSVrOl-62 zK`BcgZL_gt>hkQNEVpFF5e{{C3dmyRBj(6RMq{e#fXuQy7kc5@=8x7jTS?Jugdw~} zi_F?S8hVshwIM#dALGeI2w(r@vE}JY)I)l=g>4@YGAe!4_UHl@4==MY{G|af1L+1T3L#yXARBJr{z;8gA2R(q$s9OpWX(Xyi6L^))8UX*CX;u z8DW_+zrhm(=FfO;KTPw{!tM3~T#y z9;=AAVBY)?x`oY+M60;A+EYDkPc2dskDQPkq&p3?_h)WZ2;KZ0dVStg$*3|#(I);t zIdd1+iGPb12oKL{ZZyp1;6J=X`HziM6`0(S2xF(>x++EWZT(eYh~DL)EY;743Esqn zvunYwZ_WwXc#sAX5S21nCAPm+uf?tFLYBdiEwZ8TXVWz&32Ivb4<4;WTRzYx+#etL zH~DWpeK0eqz{V`4%YB)p0(+q}QTw2Up*J-Z^;~Fb9-{-F59~0Dn3boTDv`nBS}om( z<=csSxZNgt8bjW7R=p2E@f!HtX8mjbqx;%>EW%{-Q%G9S*(t z;i}6wHP;-P(;~KW<2`DJ{Z2kSdCH?{ST#OlJpJH>qo)QXyBRnGsNz1(^OHia4Adr8 z98U%=-eHD^h)3oaToFkIhX*gl5S;<@fG(sB_jz<;PtJKH`y2I$yY;peB3Te;`h#+Q z)9NArT7wH9q4(KW-&k?z&mh*;J=~^uA}eW?F4cyXVdaZAWM4~gh+qy!*QPYyj&iJcAZ%@(29X%``n68QJL+wt!%*2cy^?em!`(|Wd0zxt${I|n%T0TZUfY9Q}>K37cw z|Dg{haQ=D_FIMR#;Xd4W9`i=yoC$x2&y!OSz_T0)6;3dIG_QPiV#BeETcT-PMTs|E z{$&7EoEq5P!<6qrjz1QI^zY(hG_u9(V6F?7)({1lb4>ysWo>^dj!DeJmueHx+&VC~ zdFG@jd~UG2sN@w^!16}XW$PoHj;>duPV0A$Z#ZWtb`IH*jHiOWo zviAt9|C)En50-8B6zG@|`xm(Fd`{fJs9mM^fS=T^_&Z;tPtFyipDHdp*koJ)uHjA6 zR6D3-7}J*kRseF`)`{%l!ah{@kA4tJG|^P}H78;3GSqVJ=qtv98+6``CUGLR_+hPA z%DkR{<&<1rD0{Dyrt3a*gl@nH{OJRuiQ^Rsj;G8{H79pqL?x-|M+qh$U!d!7{|pG2 zDtO0i(9~&rnI5Q0zwNnvg@-*jm1I&#j zV`KAZrL;IGXMtd5M0a{X2e4+}#`a$oS7rh!97a^YIPe$E(^$Eq=+(4hM&ZGxpq>B$ zChAbg=(KHPJwvx4v-r(#G*+Cy&;5@*F6Rgc8fg)Jxj(8!RiExY(x++=;@H~`MgF>v zyS={QlC4{^ZAS|`D%s7lUbF-A%x{uqnUJL|0FiNS4p!#@M!};iX7v zL-6ZT6Ar_sQN@d0m+Jq%hOEPmGr8)kqqQ?~(opApTKVS+#C0MQu2wScDtB0hCzJt5 z1mH_(>sUw}8TWtlnoo=H1aTQXoSJ$A9wlw31q=Ah#qk)jst`yEtD!p+=jeC+0yui@ zp*J4$q#RgLA*72XJ0M2FfR4Z4~8#?Ik@2x?&ZE@5X}a}(=XQ+o*~XeH2i^O-MZcRkk+G{QVOrny@ZL6?&I6%CThEsr^^b-)1&2acTqor z2xJGudzK1Q{^)a#`r!#5k=NRfYxL0pD8x~7i#+P~i1_&3Pg6Guu0J>EaDuakkR!0% zaQ@3OB_jkV_0Ja0l(#$|C`9Wb?e5S+3XKDaK`Eb+{hNjxh!bX1Z^E@myZ4_8&Du&G zkhKmYerom9lf!1JSsLOTL`O{E_i2R^eZ{jOE&YlC#r2=(saI#^!*%YemloH}Flh!k zs8iI!wlzeIM<_K{FTrsL_aww6-ZDYqUzfCaxX;fGTWmFEy%ERcrwSu8^sAJJ3f_Ef zaC7BUh3_g)RKR32bZ(*1flXO%+Czs-#Z^`qejW=GZsA{>1!RB`&yR{p3FZ`yD1*uQ zy3A8IQ0vz!F2MrbcFUR^MDGeC?DMuvl!Bp%-(a;-f5!mWnZ636pnUnNFG(N8la9b? zF0@cZG#KgiTNMKe8rFaBtfd8RyJ2la$HE8wzxl_Vj!RipUtX$l3A2I@@JR;j;qdtR z96*M)6%7=bfBQi??7ELY*ZQR6A6CRBoi8r3(GY|MHU@j+NulhN zS{Bz8#$)D<)UjbxYTRtTw^xZ^&1jPL?vys4{FaVSAD?3(RhB%^j+lb>D6zEYF83&` z{D`^I<#VA)D?MPjY(9nJS)i~KiuS2f`hM@o0VEq;A7jQ=EY5Onm^JtDSQk|Yi zYTv3*tX)RjP-qQ;GLz5)o`4f&a0Mu*5f;DQtYSTJKzIdrwjlpWQc;K(bkKE6P&&uo zpG*%0xgX)^>}5kiEoAC%S1RStXifv1hzYAjfT;))|x6CLW~8d&#tyR#Kv7rJ0g^W(e} z5prQX`b=jj-Q{+JdMZ@D+D@b>5ya}At5PgfOr(|&(H~GIPZVBP zjXfR~=uhomRsZXhbZmzLntfpKjsM`7Z<+BEDV8wxZYE7Y;zg3s2g2p#iQI6>m1qW< zi!c)8DO~5~D}A9Vxb*5k;L+pO`JH>Ci!?PduK8lFHY?6;VH<`s@me#cKbglz{>S!1 zc6~B;Wn5eXuRbf;GUhGx(8e}QY{}*rsA<Iv&B2K56fy#`Lyhn$fW($Y?@G@N9X&KJ@lfCsNA$dT-Pd zNggecTV0S%%mf2a`GQ`fCHuZ0w;pL&!#BVmYMmFnt6f}rncr+ApU3O_MvC10$A!OG zdBy50^}w0uzCPrY?byGBNgwxtl9nUhLsaoRl@hN~Ic2+}A6(X4Gu-F21e$`kA~mkb=lsAk+oRjF z7oXE(hdIue%BMj>aeW0Dzu4mh~AkpWVWRr`HMqi|BW-7fGOt ztCeoEa>KaGiSNogWa}S&;oZq)PeKjxYxbzszuZ3_hy z4#s$j2`*N+zm{RKDh^c2wa)n-=t~rn((vfjGpKJ{PXqYuPM9+Ya*w*$q@z5W&!Qu< zjZa3l_gEKhR&DjBFl-RUt5Yp$2GgPEE1911)vw$P72O=P)Kf;JL#77cTs{Hg4mYrt ztQpvueBigeEpeh#vXnxyk%CbQ!lYM~ZA4hy$O1UT|dIqKKx$ zqndO}-R=%_G)Q(kkJMgnXr8I~*mrOh?cAnpzm&;e`9=L1NDuXJn{+d&Ht};exfm-1Gk|6vR-0WPwF|>-fT>rknDrf)AnP$&t z!xbJyM{eP*W?~&xK1?djD9cvO&Cu6Z-_}%K!IOVO+HW?|zEs0$4NRA<-ADv_pw3{I zcPtL%lGVt#HRX@7h_;Ko{k?kzp)!<@$cuNT7RL;fOW1|uQYaeC3zf9zRQylS)NQl# z^vyoYm^)40Rns$bwt1%>jotN2x)YbJ*(Y!iHt)s0xoL$<(0P)(hB=GA?k+6*zBE3q zB(knHb%JOM$#|}LMj-scxMDxD?8Aq;%)Kbe7%~@@k(dGrOBD=2u`at8|tD>b( z!kJo8C3*7OGe5Vx9yI1($uDjQ_=YvqcK`k#TZRqZ8P883AvjkLKWQ|;qn_*xuP<*m zH_m);vW}MMC$MMoTt@&eti-h;rqWvR-2Rx?XvIH@yIY*}nqTFO>2rJ&Q-1}(ZZ{eC z^=V0O)5zK!-lo9P?>Xumy-;^Hynv}Q`h3J|*96gbv3Br4z1FAgbj9=L(-N;$PZ($| z@$himL=%A5N22_Xa+>(4CDxR=*d`H=e2&3&MOKgQpB4iU)yU%Q%S7x%U?+Y62jH=SKHt_D1;^m5^ zDpwPSP$SG=^IlUe6zsc89-IkwWsXf7m$ST%E;R|E)H;UxCi|dfxSF?!;uOo%8#YQNzE+p12Y~_z44o&JrRqE(xMcU%G9&!>;WsTes_U7wfRS zEh*uMbA(sIE1sz`vfh2CZjv+ML(cY|w^fJCi+=4Iz6!9@fT&drvqbFE)M%fOEmtCS zE|*?NHcx9*c=nH!`wVvh7mx-hLJP_nqD)14y;C6BLkm@Zt52Vc>{6hQGAGSV1m5$Y z#Tbr~6SCQ_0fMK$X26d>LPw9`LQf}KQSj|%k zWW_|Kd`8{sy6ha<3!Q%lPTv{$U72v)2U#Z{8Nfx&f0a%j=vJL3(LTqqkE0h zeD9%j^W9_o{ZaUqXIrTfxdKVXl$YN#%isk1hEMXR!ZfG=kbDD z8=YTl7%X(oZ-nV(R#E-`(PEsDH^drCcHzXic3AirT6lfKeu(!&WiKt&t#pa@sAr1c+JeZday4)~+~5LyyP)bE<*J9|RP&&mhJKtA9a} z{gl6RQ-bm-=|%&ohV5wwDLC(K7*LUm0V*e8Xv5$~;yQ%KV>eLx#mG*+p7I#4kpr|n zPmtK!L1n1Qc$aw)OZfJ7ee0e5vJxA*4|zaHCZk|g=AW%7dM$N&o#O@9kqX@qfKi6f z6>{hy##H{QAu-!czQ9-QoXmv3x#IQ9_ef2@q(STShehu*J}&MW+BrW1ni8$JZeI{B zx_bE=aRU=#*lW?~#aoFgDeI9Oz_@I2vieFWkWK_Zt{sR-YZ&jqoKvgbj3aYCbo)hCza6xCiaOn<7@ie_5QPDQwpB=kq@_-dq1k6uTp^@}w(T_@ zn!X;qwcf{&L>jcRcqq8|uR~88(@ayZbl=nlxl^~M1!z3f1Og`JI^cZjiqr1AF)wBA z(=*_B1FlEaW^tENBwKxE=olJikknjR>wCc@oSVST7J$oz9%Id+wdoAX=w6?v^|(=1 z*PVN8Qy|l34?qLtY<7+2@1rTRn%|4t?AWa!#P=7PKY7_(s4|zI=7@cBpjLqH1q}CW z?%VFO+LSa}M2fnKtlVj`nASh8?f=+f0c0lP6w{gV5vpA4>i1d6CH#clM?>M?a`#Jk zc>Yp2ae&MsIyf!11>%0aoeaKU+%hfg6m`;Cylx8-?cqZ0vpK3@@>8Ox5sfBbE2>y{ zZBi)%f3>fklGS2Wmg%5F=I#?U(UjA@TsEil>&SzhbSkj@FC?bB@`aR-rkiZu6nem* zhGrb9<{(7FFfVY>V00YgG$5f?ET^#g*UTv+>a?F*6R0@(H;w#M1Lg%0ODci@KGo^# zauLxhq`Aw_c*F2SkD1|E_NY-^0F?30FW~aiHn7t zL!KKW(`>gjUO0`_(_tXEPCNe(g_G#u|EXE(%5J~UJVRg4=H?&UC} zkOIW2mVdCt!uboGAZo4wMz3?N={mGZ57y0J8LfNDkyu1SE0=*n=~T;IO1=6FlC z)mvaf?Ys4#C_M6*=6`IuCCfhb7a)b4x}cVBlxhUxwjigLoQ7wBmdC)P#nvN$;ya{x zCh$_A;te&QAtX1UMZ88hpj_m2v&b|PvMbWTk{p3@EUPOc>=YJ?%4MCp#cI;6`t28r%Z5XUc z@8n`+&7vFUnfCa%2@8lHKo1m9@ABPMWy=1qr?=82LtHN+fww93Iju9v?m6treNoI_ zNyE{5Ao7Qub$;;6O3f?PS90witX}G_xYXYv-}T$5XPWQE^(uR)<(S+mZE;zbO=z+b zh}1D#xJ{QJNAH48GR^9zF3;5Q4&&UHNJkkc6LR;{u|38}l@2O5IhtY64&#KLWnKm< z0uK!p?$SGUn&*w$Bc|g|qWKegSK1VMu%O6x5>d^_yqpO8@w*w{0g9jckF6uirv26v zrL^<4CVjIlTl5`j^eh7tsk$Vj^EiN?K0whUWiaKi@bV$4p2kG%+pfhjChEaRVO3`#&>Dil*3=8x6{JXfev&eRza{>S0-FL6F zj7N&C%`s1+QZL!`DQ~sAHoPO0kG{AdQCki0MLW@Y84IVeCC)*WaS1bX?8pXgPZibhj{wD< zHwQU8DlC_MQ6Kx4V zMVwRJtu;1ye2YJs>>%3)m8((~Yy1@0iM|gwz>bpdXWcgao9XK~kjH%Kain9EFwU;F zZ1G#v>G?}wgxT3F^xrVc%HTD^`?nCsiscmYy#5Dyr4>Z3A?1sM%+l*GyPbOAwtM@} zXThI64*E4ycVR)P=ar!>zPX}-0w&*)EIB|l*2iw6}v(CH4^>kLs3rz|i#lnJr%*(o%!w4a5qqsaD$K91!? zprn1UX{Ed;I_7Ks0(oDRoC{U1pa|W${BUKOf07>3damcy8+ay*f3LrivN&f_?(vRY zUh9x+dq%^$x?-f`)$3dxko)w#wiWRd9a+^RmogyKI=tYYq2%9}kaZkT!Sblm^SR0| z%!fj{q2jBw!<_e?TsyBd7x6b)VAl_yEKF_%i292`DkVEvdsh@ddP0$LH{kjTGNAR+ zAHDcSvwx5kF?N$-Z`I|ktM^2C^ic$=q0z8m;42&N|R(LL^~SBT_BvKQ^*+&xM^1yP;` z|7($SJwzS4yI-t0*$t=+7p@qm-PLMb86f!RC7v_ zyrZEi!%K#$E1SQNQs>U15Ts_v{V{=cTA-wCa?=vc&~&EDom*w0^jaST|d` z*HrH4g89r3XI=KzYLV!|jB?v#>u?gCSU{tw8v9T&eT%EtAMjWcB}X7613SW)-| zH@F2xfhd2)xmkaPQ#8%IjhJ=gD9HEeHI?bfHltHy{+aXzi?&}yIO&+Dl7H~#%8{~bpfxG>JRxb@R@R>Z75nl( z03D|BD5Kz&*Zu0pZ1nczXc1@RNHne1clEI%76G}t1 zDel8WLR=HC5An$Ap~=frAga%D2z-&JjH~5(cJqi+b;2Z5wYy?nM%d58OkcoLBb4_* zmW<<{nVC`h7=Lfzms#*29Zu9n2(10F`K#VN*(&=7J~<}{41|v^wmk{Sn?-H^+ZZsr zWjlAQ<>WGyhod9=Qr*v*$L+e;bW7H(Y<)la53&sYvBW6W+EJPO$khReB_ZW@0 zj*_Z=YZFPv#7E(yzsh+gk87^P3?l95nF90!Q*XXr6e%#NdedE_2mRQ{1`QZHc6GqzmU%H&aO8WRp8aWf)Jrs zlDsNQ`xIKpqHITle?!I-%12O!p%)YKbKGPef8jc~S}T<~SJm0OMKPej#E=OH5yn)d zcg3a&Nx{XD8n>Qy{ocMxw#{_XyQ#8s9<{70#R2RD6aBiP==NhbAzYEMIC*P6_J9V`?&LKJ4F9MK|r<9HD zjLkQHYrpVwbd@>*U`}1zwR_DG3NWkkfM|orlg0_Rwc&457x@ZfkVd7tO3O`yM*sg(K!n#vNpb z_c*~Wlm8%963z=ZSD0&4zpneAnC-DEWb*%Wo(~)x3(686aVJ}Yc_B*AH_Nc?zomub z3U=YPHKh&EhNHJ=HRjc$8Ym}j-H>6@$&*8hQX#iO`$Kn>Du$xc}x=e1Lg^&#*JY%hcUq68U zvGS=-UfB7nDMIc?_I_yPJ?ILJOtrHLbr;B2z}Ewx3jQb7P7yqyX&`p>vR6_}RXQCp z*^pW~={hwwr49alF@q{VLYEgCu|TOIU*NsTTCNk~vnlvIWC$&1wE9#9$Tef`+totaO5FbG>aKMC+V zFXYm_s3=3?qlM@RGav27Sg_(<#oS?e9%a*OmJJWTjvJTE86Soc`jErF>vc0TEj4BT=;L_l3%simq&jZf?T__;o+=~{q(XDhBX~JtNotW zOHC~mC0=yFYXjR2KTTaCD;80oI!V?uL@g`7IPIth^EvJV8ilzZwaxU|^xf$EsuJx~ zA%Kr_iu3SkO~=CCkNS((d87A>ja2Y6t~f{l>}0zWx;*{K^6>uCdfQz)tPeeeHaX^p zi+8+E!M@w;@q;96Xn$MZeCF9L6<5RT8yq2@G$Y!}#>3{ng3ozv%FrjxaQKlSr%wEQpx_~Vyj>>t3PXK*BVev~ z%SlH`@L{I2xc7{Iw0Vp%{;GxPtZ@$(H^;|PbDQI3O6RVsUreQ?*)C>CcjZeT3c19q zI>(=uOw8c*elXERe$y&g46dl%fNT8pRK!Fe&g~A+?={IQ{hppO%}Bp!(x@mg6PF~x zbxY{%>pb7YZOj|A2^RHdHSn}dlU)ZZlKL^-e16|YHTiDs} zE!R+9!wS{)!iQQjW#TiMJC~{weof^<+BZ10(fq`J2PUF1AW?N5MQ%T4BcjJ97y_Q2 z<)x%5`sB--N8_aVrKR(VM&OH~F#g!_5`o8+Z zTXm-ENwS+`j_+SCRuWo^X@8VejSag-$33b^BG^+pWAwlE$a9Wq)Fku@7%!Z%abTgH z8O^UW)tGR4duOB#wX5iR16H23`l?-LJ?LP?YDFNaxRv7`nxe5 zt%tobHhrj(@$~K|DwZIL z{PLvm`HmL?>gr7R=CLe;nuVh=w!Q5{q`L@ zA)&7`BF>cZG}FcUavLk7Pn}`KdsWXC$AG13`s|AAzf{8B#{C`Hj^~0d&?NQvvsq|;}sq=K9Z96oHb zEtDL39yLP2sM}*|Ra8({7TCn|lwAl0^vL6e&M$?l1qM};MT8Xsp|&Nw3d>NpCLX_}QfY_d65FaOYF713)~}j$4>MX^?ft;dQm?(VKm6Oic6|ze zx`~&>xyx7+s#^K={NC4o4vFG7h+)7u;SqX~OnaGjbHopEdd2eZgnnUr;FJ8&G`QSL zAxY$0ov)U06Ku(AHU!}k(+fTd3@rPwX)2tlicSZQg6}qkiW06oYA`P-)Jw5yta3S3 zDx?Mus#5>})20kW1$O-wac-)R<~P!!i^SVS-WjpjT%9w6zj<7hDB)$3$FA^~4J6p< zhn78h`ybmgJp1w=_Zx+Aiq)SNYj@t-su*y}emgMed)oz4TgJ0Ph0uS}Yk&43BF4sr z1K+fOIR`uU-%HK-J$?GJ-RwR25eKSIA{iV6*#@z=uID4)wz5wCXrPObf^=@>tc)++ zZ*Csm$g8eNcl-Eh+UYuYFT?zvl=^!7#QqMy4phuCPI|yKZ>f2M`f6)GcT@SVOH|uJ z-FJrIl5HF)*!-QvhS+-POi7_f|Jc$DK8h}VHQE5qlX5F;P5oFrcdZS-arlAic>xtju@g@0^&Tz^{mUC zKP`%M_ub{GCuWzvuRB{M^noQ#$dx72FrfzI+NkOdN&wcwDc|*4P?Ei;!?xkusFCbX zqS&@3@2)w~7J#SGF?BbA80xnE-KAmM=xgEgWkWG#M}Bv~I=$(!FpKP3Po+q2e~5HJ zy0{9t1@@twbL* z$sCWj2|JuI;?6cUlr5c|vZKIci7dH3YB?^V^HyI7Bo9|JU@W(Rqhc`Tu`hseD3&>~Sih93xwi zQwbqN_Buu8F|yZjPGvBRA650N=RemVQE0-MBo+UEbWA>tD;q0@6IK29k?tyqM zT;9b1Ck3E7z+S{STdX=6x*W71Z838zLSUrah*-kIp?Z+@(sS2m)) zMGooyZK`ML$prGhuT|~4K)cjC)(S?Mj;S%XDdM{TVm|(Mr9JjP#h{yE1i%Fg9G)s&H_7NoR0j z2GDZ0KS0_obHL97Wk6V96CNFH53>TD3p6uqZGT+R|DcD9J^wqFRp{ujK`eTrM927m zXCdJpK)Lc)UH<;pYbK8A-e4xD{*)_irvMYMd>mA=7D7e!qsVvax>$JwM`(;HMEYJ^ z7S9Kg3TCmghp}4wFVXs7b>NQILA#n3t<-^3`<;P#26G4Jw=ZIMmevb<;dZS&#H7fyiM~o4U!$W@|m7c7e{rOd)LBH$!&h3tZfPzbX$Y zbDLb7Z9H`TdDq{%5I(-pN8BID(F{mh3yf_N{fWy5&*g$OHmdaJUHmp`P_v)~pGSc3 z`#u@0LmtY#fg#XJKZ3-j%DQR<0{XHYdcajMfJ{%BRpS zitY#pR}A;d82pc<9cYD}k86Fbiierj&>BPsC@ASa#B&Hf=DZP_uJ&z)YV{+~bcGz! zg?LF{^~MWoOdEn!L)(`b25QraM^&NT8mnkeS`A!<@+QzptA_YYX-RNWh-iawBT+Fa z@Oyc`m&_qw`0pqD)r0G^GMKgqxz<>hjh+dAXiYY$P@v_b2ET2%cx(j8oi@xM-PWfM zFVzulb$kk2lb(U-09GXcLrKi<3Zt>LyfFH5!@gmPWy*o`L<8#?EhJI#1*+SabSGZ! z)NFd6{JR@lpn&4hv`_UD04COOl2axSl{>J-Z0WXVZ8PfUSg}vF+{5A~d z>c_#zKaZbohHh;Nf^aD*t2$-ZNt`E1D@+fRx&uH&@Z|Jd&R>xYs6Cl`1&Z>s(H~~I z^R3bJr8f$d9ME12Ugf(}^BR83mI=owpQ#m*6y;mmdKg-fqbpjNznAbvCc)MM2jW)G zlb>dN-+8k&otXB%3@(Wk$wZjO-(`F^L0^N=0XE}O6`&X?)tT$``$Ds2Di`09_ViE; zY?>wa#9czVkZebRHB7y6X|7o;;8lZbfe?e{%q5{K!I4#^*3X8=F&;n~O&3C%!V%;a zD7bYb#odqP3=$e<3KM+2X{V?aMb6jwsM+NFC4gnl;;%f9_8=+I4NSo^KVEXB{Z{TJi`SDE2kB5^?i-T;{bkn^gqrKIrj(9gFy z$`C3#VP3htV%LfwN`G+QE91Ik@cB?J#q1IH2C^deyuzRQg6A!e!0i&N)PU%J zllw)|=l?ECJd;Da*7yUSfGb_f(R-{CHE+cq*p_WL^L=dF z0TJeM{S54C>{o+&F)wA6B~3K?v!FMT7yTwSJHzbHNOZFUENAPA?5}*6VQ>H`=j>1 z`p91Dss|7LJ?wZ8yW8+>3&EugBlskCrwSr^g5LW#;dp(c=C8d(o*Z&#sgX=drCb%?~G_%sUsy4*Q$+;;D<6i9@PKODTmZZ{t5j#ZiY z!_W?0VC`%L5w`tXZ?`--;9wfDJU{}dx@th1w`%rPs8&rIsvERA1 zV!-xFj5ZhLWi#@aSk~S2x%3a3fles2s6(Pv!Q5u^iu4EIyo|Wg%PH0gIN3Y(GGXhV4woH0oi zSEx-frRow>(|va|j~Vd{yk$~zyA(Od#AeIAHg$i0ngf0k%m_SyqM^z7ruWO95 ze!X!~bDrv0NB&Z3LC&qwu4=A*Sk^@23S?pBg9#zBDSL8cbpDnlk_Y36x#TR1bORT$ z%W^7PQ_NPCv!u)7dqb2v^)pd&T}b-+G|+$cgrq+)8?!{PK^)>P@#1?68UMG;SMQsR zBItm8#?rsiL4{AFW!eSh4$BgEcMs15AypDl!-0VE!jY`&QoOL4;HorMUTXwmVd*?7 zu4?w@GkL{qW27wIuI;Ei`zr5b{fGa&S}{d;#h~4Q#g(RpGMIAjidj~c?0A>qTlNFu z{6OpxSte8{)A^;YQ*7-T-OKneVi~$r4XnK~qz}33Qkqa6e%o+1m}1rr0chj&CDdnA zT)3l=G_HsJTYFIHjLCcf-3XpS(dvCj?ZGey7Rg$PTpo+vS}4U##X@7DY_EtcMPAqB zJYvx)S_U1>MUTm0C1gv8l5V5(S5W7Cv##k(PU31mI@hkXLhd!a&9!|e`HV!!u#hM* zhEt|Sd>kdM;f~5yfW`|c%v^W_0F*$|?}maSGk*pqbt5=nB8^ENOJC#Qw>(J=QcuF( zUI{%QoEHu{-zj~aS~C@$y)DK-e`t^$A7u66AbO4bHCMr-H^M6L(!TCGZQQ2`(rsm# z-_a60{@Z$^D8(&wDH8LvRRuBRvjO_=a4#lU>~yFp=g}hT(fQT~<4r9;-%tp5pxE1XJMdb{EtgK000p=tA)uo&kSkQZYwcww#~*v!e#%|i zuV6{Q`b8C+p9o5A5WU&CHm@>+8Y;6QPnA@|PwvWp{KHIq2Q2{V!z&0;^2CapEf4uc z-c!q$6_SHjDt>029CDt-`$YB_6=dtzHA!VA5CV&{FNfv2`CT~SZW2M*(xxF?#j3Ax z2iO)7)bSG_4i{P~MzZed)Oih?>TKBV89gT+_1->4w)OAnwz(g9<24lf?AteuK_*Tx=k7OT6h3%^@^Ix)~~c4 zK}zpKGRWeoF3~+x!_Je*cRHU;kk|g4cKZS4x0x{l_5XE$9aOC0iF0zmf<;s6XQ_^ z{6joyI|MMML3y*au?yR+UkVo@xn_#a#)Cx$7-W+A)_nT-X+mc?t?Y2KyK~gn6Y;1L zjp~K1d5itLcnwPNioLS30)?9Z!)HZN^x%SNq=#pD(l?2S%m9AL_`FD6NlVW_vZC*OC;ahP6;U=890F3`MvlriXe9^yiT5lg# zAuOv-6lufh8n2qpJ%AljXqR7M>spEHaegT2AwB8N{Z`rYyPrN?rgF#Zqvr7>A@X;M zN}sB_eUmvMZacQNvD*1@hQNjTwl3NDSbln8fQpw!cG$;2(48d37P}}rEB=H^PbL|;!Xfzntnps~&fxg$J z(W@<}tfW^C;A7h1zV0I9bqe=jm!-9pxc?Rh&wK>TSGxG9@O5%0p;eT-{K{!-YIxAs zrhcA(boa_or6st?F~_SrMqPe1zxhB|?=j>;vlHO4d?z*3l{y!XMV%H#X<8!#YJ8E` zw&mlz2Wec;w~(Mb+ggtuOw72?@jLn-Nu!5UaD3DQ-kz^y5YV4$0Smk?bx>5{WB1&h zn=Pw}l41eIx3Quw>!$_c@aYe4~yllMP0NYQH$b#v^JkL93ms<)85IWqSFP7O@qUi zH>Yp?_v2~Qm-2{qev80e6|;87dnDO9DGpxHVz+m1$}RqY+SCxYl6+nBGi2Pp8!Cou z8(+X_FrxI){jNYE}3g9j(@cH z%Ln&weqY$HaI=r0K5t0LQS)8h>zCYsHX;c|MOFr!a2~QfZiw#!v>IHp;NGeFXEBqf z&fw_vYnD~EwzBY6VZ@+i+)SG!2tN`wtyM)~&;7-WX<^rB9=gs0YIyNBZaFuYCgk9q zb;)+%eo<|!KV)PW+$W=4I9%5o7I0d zwMqL&Z6yawce~bjGrmWddE2;`{HWf`Pui$WN9IGdY+3q=zs1gqzCz~>jbHxeT)b~; zS(^H%PDO_Tb3cHr{LH#anCXB-kGQO4diPq5didid>KhMP|mJ7KEb zq)Gnuag7~+6i=SK8GhU5{W#LtHWo(oA=#2WvuPv8LU#ydU0=Zkhy1{}TbGo1e}0Ri zX0Q!YiM|;-q-vh539Np7W7=QG>Ap3IK*Z^aeGHdTuFW>GuG8I~3u!!>SqgQ}8&eMa zk!2r;S8Z_EnCyH(8c;OUO_#bef2v{Q-LpAunA%KI<3Fo_BVF*&i{@4?(idZEEq{BB z(7hZ?$dPb;;dD+mks0*$mm^KUEDM-Nsv$%Jb+PCjt#2?Wo1gjN*{zkylG0KeA9jgp zw;~MBiFsUuAd9R_`WY0sT~%;UHE})iumri1-m8`tJQSdqBdJ=%l;l}&rS4gv&RgdM zNZ94225$~>#JW3_t)qZ1JBz9wDAxCk$)qY>x_WV8K`=jsLnon@H-OH+qMf&W)i?Xz z;Pn(8j;xKM+(jz`jr~!Yz^Oh~PUp*-8=P=-OW!|DsU>@?zIDjG1f5bG4Eor5k@}LX zj{8V)hjpeY8j|6Uf>dMe9jw6p=_(deDHS5#_H^G=3;TG=##!G5XK+I=0q5ukv8VBR z>YXL837eG$1_w>kpGNk#YD{q-%Q78+Ae3O zpe*ZcEA_S432XYXoG6Hj*MS*+ecLJ@W-C8cte4xkINQsvmg}(@$DM3eOd>w;oGRZLj+FXoSj4^CuQ}%BB3ff<(K|fz zkM1%_`W^fpMIHWzP>tqB+}gBtiW04dh1k3>Ob-2$_hHAgs^G$ZQ*R%)Ki<9YdZrR? zL}u_K^pgB%vL}zuI4q~_2uI5wU+7n-TZp}%(Pz5z8-J|z%hs#zz499*p38Qf>zyZZX)!-Ae?jt2PBh5O$GFRzh1im8jv=j; zfURt+`4;q?7EiWCPmW@0M#3qpt*M3{-DU8NclS=)y|#&UCH zZ(7I&=jDK1?7~{1GTpW*K$dWfE#HDF6an6r9HmvvP#78kUbzcbFtrH#SmEr`z85mdk+mM_mJ(6Xl!sWflxtMfB!>Kc6iCF?(I&J zs`mnH>KpJLq){)oQV?~y)LWHJAD^cA|B0rv5ZOBpR3Jn1$?LsK9OEk!%?jdLE^gmM zY|T9~f$&W3ZB8em73otsQK|C`+~KwP{P&Z@!QiV}p8WaL!z6y6WqNe3x0jk!rnp@9 zbEC|XA9cQ%3&@A7)}VLh7nAV^;>qdxir;S|cKS8yd!)aVnu*lKV4eimMMGRY!;xI_ zU^Fib!*qyYoYyoseRR3ie)G~;Z!X+q1wCKYi;yOl9c=^lF*cEjNfJifYQ0XuUbze$|F#ko4K~AxR<4 zk6=o{LShWv|ItnOewkp@(inLR-UpF-2$&dms)NMzC!Lq}8CL^=x70+pGx)QDeu~al z56p|da4W)mkOx1-;G&T8Mu=o)lfTnpE(JV?7)D$r#zJ@@PVTn1|Db7V+qTcZ`FX$b z*L@2i?q#!pCzAA@ob5!>f-^QyZdzaG3+I|$5PP;u4?tLYvCFYQTG>@5)Rjf+IRoAc z7u2$*PCF?q$aW|~7%{TUhMiE8ik4PY3AwJ@J~F_1@%<^#t$1>`C4K)~Ji{s#q+wA? z+*w~m+zZDwR#)~r9HAw|95GE&G+TeQVe$!Jgp%u^(MM@c=4ed5ey;nP-HN9hp+ue_ zSrhj8>4CsT_~wa#jgPGIEx2=+Co+H*UiEVTAsTLXpJ;8SlQ6RHtl z%*QPAsRn$rfV_iydfr^JK#K-C>J{e(wu1&McC2{=IEK@c3niB-Lb_-J1aOBMH?Fv1 z6nDR}6L)8>qge9xP%tR7ZXOz6V?mAc%0q%94({Q%jMFq?ty-#yw4>0XBUXd)X0fsj z$)7eoY@gq}WgTeEA)lk13k<+{BmgJD)LI+cj;wgBJC6W8H1|z#s`GMrbx^=Q#1y~$ z!$yj~W1>r){pUpLP$|ltwFfg-wu1RU6M^egjro$96GmjeTlU z0?QUZ&NB`+Qz2;K(!wAB*JZwF`~EMsYDMq*-*k+0D`tmGA$a6D+7y>!V_o<+ZTp&s za&^K1!PJB3+>aJVJRRKc4Q$h9X{K16!26yYZ+(vOV*ix^_(b7C#2{1vE*t=&-b|f% zI)0Td_Hd+N$Ci@sviv{nuBQ|JioNgOZ@j{E)S?ZvB`wkqb>11lo`BDSEEk2YG^|hL z!V4*nTnY1J4=WoOyXCbGuozV5Oa;;}J%P)m!&^Tf8ba$8BD{UNM^){r1~9 zyW%9DE%5VJ`*?nC%*5HxQ@cxErX@Eia_=@Qx$3TJaWQbF1o?hFj@i}SMx&++gF>|B zW}Br8Uj7uCB8hcEuGU2SGP<)7LnRStKgWhyU>lxH*K zIdCJjwhu+Gdvu51axbvRU6tnFZ)r_A30Wz-rm8L2p2T^SAEkCExgGuwh zE`Hr(>wfa4xqSAP?f!)Qzo|n^rA2!sF#}HS?{;%GBc;~${BC*`%!rc*f03?M;D8rj zx@ZyTQ1`*raILwO2c<&`ZO2-fK0Rv^jE?0?pCyG#TbP&SRLR5#S*KT#{+6nLejjN& zg~MCc$L!7@8DsS){%Qp4H4oG|;;u1PmTK>$Z=crLCq|0z2n!p>yNi0(?47VebWRNL z3_VRMR@!co=Bdv$LI6T*jmlQ$O{>6#KlB1-UG9V^TOy(e7*K zKZ|r!lM_xhi2RRcTCZ=i+t9&_*K-3Pmm!XWXOEi6ug=(XLE7l+C(jl0PT&F(<8q_2WsZR}$WuaWH%(R*KraeLce%b-Ca30+~| z4c|h;(a;(ks6MC&$lHPhEdr}BL@;q#9 zBR0fr&l81olxEpVmssr-_@ObdBX|X=@{g{jHK~BgJ-wi(k^mq2t^)5p-y$W7Qw>x2 zK{VHK(Gx1Q=(3m+AIsILPMxkzJrQEd4FsDLx$2AZy82;Ev5A)-o+}##wB>vR#S((1 zQ%!UDat=iHl7K+4SqnL!EsLArxh)q;6vfTyZM78%VIy5YdEk>{VsAI*Vw~f{vdhlHJuXZPA`4#8zgVD9u5+l9vvi=^W{6w*2I1pFHtDFDA1{w+n*--;@Wsa z|F&LeDCIVsaRwnzuHfsB*?3b9i{`GU?bX27uX+hSy8sTgGkw4NzjMzKq%x3Ya=Uw8 z|7^xnKG2|jWEP<0p?fm5w(mb^Vlq~SePI|-%c|K0aX?;4+OHtuq(AsE9c5URl0JOm z_w;6{LBvu+&VEwC6iH_yT$*fhfqlzGXh!@}-=(`u_Ly&FgMS?)1$&h3v;PmhqRa38`9lg{&atKgI*OGH$X7EyDd!*oyx zEtXc5L2nz1L&n>R5{-Wh+~b{VHQ7a;v&9BcRISK%8{0L1X$x|1xH0+k^G(1wsUnny z#-$MhK4#iay!4b&I=nms1e?lm!tzxW8mxnbam_YF?wCMCW4~8gZhl82ICR-->mOYO z_qLxjs^$@H#+oPmgLnq?Ya9FbO zGT&-WbbA5fa|*J%J4)m-ezTQ+4Y#wPeh9|T#MO+jB7RXb36K6;$imjsg@TFdois4= zn(N&SA$8Tt+Ad>(#1K1-w>|kB5lu=UoB6DO{@dWFHGNPfe$A#~HRcG-gy;m(L0*+z zMs^I5XA0By-Q8p`+lk_+#wIE#x@lewS8k1xJUe?U0rJu`*P{CVq|)Hsjsm+xgChYK=r9!N(>w~EgF2LE+`FxPiB57tJz z(ZTQp9-S$tqgdCb4bDmkM`3hHbh4>rztL_D71Fn&CPmH%@>Jkv;_xTU4Gr~uOp2S;l}rVS#RDGyfgZ&NCKSEjJ&C>P}?~3?9`ySKp$de8gm1 zSArNoRs?KM=35Yfw*CfDt%lFbBhe#{Unmp2+_O&RWOy83vN2Fcl~-fLTpAygS(;BW zK`Y=Er_%IT=a6L4ksTSl0r`c{b%I$Z%;;G9K}~Zd^{eDqHfue*mPuIxW~B_EhL{%O zSl@e7eF?4Kj??%Yy54M#Yh0dp+qE!yC`xIFBdiO)6Wk(pl8|S)3asHE_8M5p4Jv>V z+~PR#S!htR>}#x*S%tlvvcUiBbjbl$VG%V`GJWgHmhH|HSNm7qG%++oV{G2I~3QlR6xzfN_ zCu~r%vymMiwSNm+BCJ7Jj#$%^{cY7RAgc8xp66V9Z$sHvss_%pa($qa3nX2>1J$QZ zwz47L({3~X6becCQ5_mgc4zsjU3uN3<56aOT-!{a|B~Ri^cn?GQ7EB3W5--K8f@0? zP_LLP{yBe=y4Sr;Yj)7RIpEU6o_h`5c@fm_GE;K+H<)3t~ zMZfQx6;^(!^;lCTmhViykti08afi-nnKuz%>mqS`bR8bW>*gu9_Dg1d)yGN%o;cO2 z)Z+JgAWhKJw5(gGXNh_$9fOrzCjpROL(n{6jEE#Hw{Pjex_mrP`qT24b5gy+1VUc< zz1$A8E~2(n%EZIc;_fv17UEqr#FJMuf|dAlZ=cF9MICsuu4OHmr|aa)8&&TVdy-z) z&gCHBVqv?xzPj%AdY*T!fhK0nOz_<4B!YpQT?W5LRA|k2J9s3S+@5uJm3}QF1^*rY z{=R_O4=Now2|FaUPGduJ4+(I|YSg5^+Gl2w`RilLN@NL@LUP*J{;dqE-Pdm5uge$u z&3Gyxxrq~hC39`*t6HjxauHj2cG9aV>z|d)CA=M5TJF9}GbgS{dvpc5YvfAc@X~=f zIXSGGPp#~lk*$UZ!cEO~EZX7iOPK`yQLnJ&1T%~~3W)1Unx=Hw* zV1de?b6OJRw2hMJe{@Eb=ORo_yzg==P)`uu=o;28X*!q2900EkU>My=%QjCc22C{oHXS?9;o`^P9RK`#nla zo^mWeA4$ApHx~@cUD|8bTI_|~h$P_5Ql6TuhQI!5bIY+L_f*BIaOaJp8EW{BN%E_q z|4O#^u1#hXkB8nooI7a}CdvjjtN)nWRHL6-S~u|J&l-3>R{rIh^bjx!^a2D74TlC- zx4dcn5JJS?<8!Z^`PQGiy<9nbxct4W)sG1AHJftfYZTmZXGyiUdYH2zn2dyOy$wC z1K0$ z{pSCBY5b2)Y1yu-x}1yloZX(cY}Au1ir$gQr(PnDfg-4(B56xkiFR>v)|Ko$9dmLF z6rDuIlUncF4IkKIFKhAdD|`POW)CQI-Y8nMDw**d*eX0Tz=F8{(b+lrzNw!T)A?bT zZ10?3=uspLNG&!|h?gn{^OLPTp{ zijG0OgZ+P6bZ>n2{abLz7zkf8TRvR8u_~R?V|nTOA6-wz^&Nj(+v(4TM#9P$>+$p% zGe?(+TELv80u2NeDv|L(;G`-8X~?$vtGYPdlgf?CxGX|MkMZj|9wE{LGlr@P#jle#XC- zF@x29Eh&4;Q{Z6qEO0WEz!##t?(Mz^4@5d9OPm-N^%@{_F5e!4L{O#1KU&V7U74sZ zVg=qdf}XAcS?93+NKhR+UEy+Zs7QbG=CB#%o>Sv%n`NiF+6^iC(@bGuP%gmy75e8L zX;7MH^EB#1&3_Wpi?6CYw--fcA2&o!^J|#+T)Wrvx@Y_Kc^23L<|S)gFljv46ZF(`Re%*3c8rgS27ni zFyZ$FhcZrK79Ww@AYR$O5?v`QcRmB2h0#u(Br&!~s5aPhrF%@*p>+>!8bRGu(3h9u zYf~G>DEahb+oJwO%bhZn(s_`|Cg`gDOf@SjIg2fX?vooaBsE?j{C}jJ>ZErFw_>PFhtOCRqBl;F+h}%h(Dwt9sl;k)#^d z|Frv_iMdjGSDGR7mi|9K3%U0uzxcCoXC))wj&Y5D?bV3RS>jm}5Ye4TtZOf0*@VCd zq%R7n=qIp(ZiYEw=h8um=fl@vF8WTIF$)Zjda^uSI{p6)79m`_jgelcP`{GGW69u$?c^zMhJBi5gm| zb^SRBRkLnv&Pa9#1{3T>2C1js2bA=Ml%7SSv;RT9!)dZsv=Jy1kZ4y>+^lDh8#G5^ zStlJF%{?N92P4Nl4LeWdW`94f)B@A+d``UE= zRQ1rE9nigIYxz;MVxy*>*bX9ESC8T6X`V~Lj->orj zpX2IlOAQJNT0P(wb&0-kw+tpRQg|oisfJI@wdC3`!>X}8$C7MU?Oe}jbXj0T+^}ph zUkBDjXJ=AJeq2AtNglV*^j!b)0FprhEB5RAAjcMH7Eh{&UIkV}etTUFHFs21aEjdY zPhxx|*ex~l2P?z%P1Tf*DD-t^+ZS2ifv!+5QVfA9>Z5`{2zFJ7BkhrAwUv#Y&#kGs z=~0k}q|-V7;+#F$ z=el2SZ+@V*Bnp(51dCwCd9@o)?WFS`ECM<;UQcWPSP;57=QR6f)AuJ#W)->v{Zhw;XML zdKX^Gw?s8-La;XwFDciKn7Eksxa7i04J@K;H>u6c zpKiQPtT_9G0NUotfL_m!%T;2Lt>8c{(+R&&d$S7IhT3#}7RQ@~p<)9O2Rm`aw3MKP zQ@7_oA*vW>R)7b{U5^&YL0K&JcfMJ zsSEO7U?<7Ag@DXRcdWuXTA3#6?l<;RW;3%z@)*mnyk)v8mIod{uH=DO0i+$2j|`)+ zl>rhr)9=_tyO3xJu3@^w>aoXKr@HJ5Uq?&Nt(a|PK-*@SO&KFSb^L@CzgL$D8nxiX z{7O-2JFXLxGy)-8?bpV-Nxgq!?jYCrAC$yW#$ZZOkEQG0z)q-XFENbbXQ>p0gh4oa zS#Wh#R=-)(_`}D}*V8Z1#}H8wXohAOQ3)6M71%;E&gupQc-^d0=i86DchcWx(1Uq~ zbVY|F1gDPNIq+F^B_~F}^DKA4<*N15)5xqIu7^Cn{1^$dMQ8;>rzklM_)w@5JR-bR zAK*MWfB47#^rX0hktF%4$gkdWN+f0P56=Xyy;x1w|&Zl_pVMChE#LJLy z5#*q3UrxgjJ^g&E{#gNLCFgWFH%9|lv)GQIv6v{wdUNwf+zCE6S?;#cX^od|F4rJ; zq$yHMo9L>q3)mlmw?F1pT{#xs{0rPKO*LVo0xJk)i z|MniAKJdP~h?bQ0+b*D`5Mx}^+3kFuU5o5NySoc#pchst?j3qx?kz&U%$SwOc_}z^ zoU@jppPku(hS3zLK%f(XS*d;b!wj1_Y^L$!#d;G;%sS)tEPeh3|MRUk&b~ojc>+?R zi+<7H#`Ywewe!V;3jLh+*9<5k3B46m@Fv+Z!Zk1;D&r*CCM`ez5cLOh6%HQq;;{_M zQjhd|QxR*GY$g}`BQa%q%VsCAbiIuFfcPtTJM}Kva()FYHOH>@{JqS0Gn({?%z^W~ z^h?!Y?OtW`JzfT(dMda_jU8@2O+8mo0yI+Keh;~J{$PN^v$Py$inwx?=Rt-1q>XlX zk~I$xDdv^p_7wFe^wM7@j;&v#aQGTir_ZD9qs?W`huR2`*XguMOugBI6*o;`#dPx+ z7jKbd%dF`G%;A@PAYW~SbcbkCn(0Y-Mqbu!sIB3P%WO>_4!_Ob2MOsDsAz*~the}p z2jdQXB5|1z+?ci$J=e=O*ybcdG=0IPCi+(ynB}uUTP#;^$Aiw8S)dZ zLabS&MP@msfKxT~AC64ay!!mw+{47|qDt@J_Y;O#Tka9jpTy6~2iRqpw$|>(?3w*p z9K;jDLK_Ysk!Y8l=R3^0NFK8>8V~fBu}C1MZ@nAB1aUAR-&RYKj!`{7>S8O#w)T!u zgh5b-`WO?vC~RJL*Da;I1M?K9lfHtk!ChdKXU=?_5nVg49fe-MBb{YJ*7LOg-nYXj z3NG|s{Bi`J-gs}~owUpLcns5$QkV1`$(X1Xx!RXXRCdXRYIvaH z+Ya`C(~I}V;JV^j{{!hU^cYp+Flt1u&@fh{!S_#GtouiTH8umQe zp4eZj8l(-Bpl=Y)4Y`7Ge4u1A`AyO*h;iUIGSI(l)dve{hg<~=fS4%iW!wjc+QuxJ za&BERr!U<>gMmI;ht>vh!7SKgowmaWGrD98x4twlD=n5W+Q2(#;Tzh`#IDD+;<`(7 z!64qQpm_FHKOMtdKArmw?!KoOrP8QLS!Y{Tud@mqJ+oI&?m`gnsU7Ab@Vf2A+VV^* zkVc!i1voTIs@Q;j8>Oa%_>JUlcEalJcy@|9R5`vWmgV+zv%`Sl{6uh1z#9_QV7odHi<*^~#sEims_hAEwq=>Jz|$W6C6H zY(C^TY8|?l=}&9f0(iCC386%GO*XWo@s5DmE;L$Ii-5+(CyPw7&-+|&bGuV^n;hhh zMMofR-E|phoHzU3u*&L6X}vmfm(%rey!0X!HNHvU{?Gn)WA%+f!gJuFTmq9WS*(WE z_sxbgo><{}w_$jLb9-5Hb9mcdQ7199Wu)UjIySf@u{4D%t#rP-VUkW?k#?z$ru;tw zG7Ht_KeSHG!>Ejc3ucFrVx4e_zjt2UYVBR)0X}7wzn+|B-my3vBtS+2Xh0OLudW<2 z$o^)B3ckh{!84a;Ax^uYa-Q4pjTz61e<|9QP#c#&Ka#ugLSo64(9#22^}<8B0+F3xcXRI6+n(PK zHv1I}1bX2XJU`IuOomx^jkEBtU3bK=bvTZPALbz+;wqoXZ|n~Mr+VB-xZOwnM+KT= zecZwU^fBpU#ku#jFU)=MRT@j8o7ys`Fkmh3ktNxa*z_910N?wx`GovrVush6_26AFh1M=9!fL>YnnSJrucYTLPs ztw!G)Jc)7Cd(notNyx1Ih&}m{ZuK7tW%L81+6+iMF4UY=`n3o#)lO6YtYG}bwF(pt z>$bmBgy32PmIik$iYxSI+fx?DceFQu14XhFvyN8&%$exO{LG_1|XrUXN)frUBjIIkK1@hpSS-P3!aLfZ?|%X<`y6 zkAcT~voQm6xkRj~nec00J(TZk;e*xZ+}Ok4`S0(urBm+%xLYscp5XxmD>31jy-XWa zl-ZVxA-&lwl@fnG=I*gPvkJFi&UD4iB!wufBF%;Fp0y%)$bru!OSNwV3KkJTB=i}8 z*dki>Dxv}eJQA(1_k;IiXYk9>04$=ZYkJG+Rj%ucK26r$+4D%ggTVz*d}D9&d_ZI= z&aORWna&FeO@5iHZ7D(Y5%(SNkuR66qYel-a(_>NF?^XnbA6~wdRpiU1KIX&s znspeHvCKvFH%Hvm!ZlqNse7JlMh*x7z^FeCumLCx3_VK&g|*QZ(z4~XT_zO}K-tLugHvJn%M#nvM`?^eZM`@c8y zq=b$YavA2lyA}3bsKszCqE*iU+>ZE*HSaMyZY@>e35|%ucwmVN`BaW$l5*|jd-}31 z*xEuQNG3p_ZVbjvvI353$1@dtZP@qrP|mg46n);~jP>y*2wBpTdc&5F+?zw@Iy*nR zaXKc-mBbGX#q%wR)H_D@in+m zwe_AXw(!!g4hJf}z>2t*3MPNa9nP~^ZV6j+3kl#PWvHOct&O@2b@lkRk6bpDbD^ePl6P|pRX_%DGuD~B4?<2v7}q4Qgrxq{?SQygT4!$ zKZ^te`bYsX-xXKhZw*d{_2=_l4oloaXqWp5;woZE29aE|U)tzq4uS|!(j*y0=rsrx z9XOg6ppGTA_2%b>E)sfajGj1t-H>o1bE{XvU0K*d8`0Ky(%vWyY^!yEzT(x(Vv3TY zpX-r>GR2tgBcf)Pgw7HX99wm1YW(k~0v_wUeeM;r5B<1I(1$W~=4pGmxVYFtQ*sxOrYQv`&7qd)5jgCjVljpAw5b8nRDWdK!7mS4=BG`PNX%9M6-l+!lJn@g+WT!Qz z9{zlAKWb(kdzLDDYBIk8zJk^kC+=;kG>%PwbvxFVy1F{F$D>AYI}Jtz5oZX4@wJ{+XcKxGPvuLPk4WgGS)9{-(r}E*)T5XtRE9NichxmvCD37B82EyBJZ%Is z8J<@GsD zpz_>{$@rG*B*rdNaiUeuMCrD-H{&O%WqvYGpBoH=j%!jVuuy(nS~DV_@e?k^c(%6R z-+1+d&nx!=TWJj)_K-Zfo1MN4h=U_BEiorrj>vp z_A(*xKL&pI8+%(si_1_G_YMcoUnJ0@y1rdr!{+#?H(2sQ27G-~krS-F>C*Yv~Kp zqv>ww{@+xe8(%-J`<1ZP&If*5nLM&4>sT!F5on|yeACd6xlJzHDUS5(wOS0IXhbED zc~(jPFr@7v6H8eUPuY6xhT<6L_68ca2pq0sJ^|EMWyVyFrBef2xq|vS;q>5gPk^9WDsC)6UXAcZ(d)YDLQ>~q5KN|%)Pe`QtN^jm`Dr6 zMy(YVTQ8V7`RvN-c%tsZ)v}lO;xwn;7L6qwT+jkcy zPsAK4z}ECRpl`>bm&d6NOQ$GyN(|S8`RKO?8D9fdes?a}F%FquQs+mnEsz1jX`~CV z@EN7V%3)5m;G=DmLqA)z(FDJ%_VO=pm%2E;p5?j(df>l;2#Wf=F&3@A?Y>z)61Yk& z(+LenNt@Y9lx;8e&$w3YtsALCZ5M`O9KLR3zoNT!{dv26>}{pJ)sU(po1@v=4OzThiE90)Po$hv#m zuyXcVR8F(>DEQ^jlqKMA5*hk#VbP zELGzl6$RXFCMlz6O1y(%7m8Dx-{mtf$fOkYeE7nZ`VC-v;{)cKS!Zsyukpv}TSXR{ zE!c{OjLe%NhfG1;8gd@2#h)jnsN+2KPaG2l7e>Hb%dc^CqvfqZ=`SrK11&LWM!JaQ zEZP$ykl_RMP9P`oK5-}F)xLSzzoXX}r<63~fp03k8&$CzL)D#ZsO=IqA=CI)F*UWd z_htXF&+~11;Lu&iVV|D~7M(cIjVO$dwt5-SsgzO1I5a_pCBmc)$K*vOyimW69>IE| zfX5V%;=sCbT-pEw@FEB61@lxnw)wP@Io{j)GFz+tKI#vyMEWd?-eAAVF96E*2Uf5C zf2jr&wGZd!ruByl>p2B(Ya%}OEIp>A;d@@oA|xdv0mpuVmX@u6tv6y?tj@qOvGTkS zFa>07lzgN;lP{hFn+fjE9C#FbI(3P>c57nEvum>JA$d&P`6f7KJ|nD5FxY*=LFMZy z1PCojx6yehSU;lb2*tG6jn^ZfXyL9LLCLK4EwAk-r-y1w=2MBEdPPUQ5Hu3B4M$EO zT3AzNN^SLhzHPdo~=PTLTT* zTU|wMN<8bD5*igxe^74nLFy*fIk(R&3KTG_zu3*2&x zxw4{N){o}9)4K0sa$dcx4S02CJ$kcQ^LdLZb^^cB{K>om&O`n}lFDke{arUdnTLr^(Kl@9GHmc_ zcgw6*>j;``P2OZbs#`rXDnE6Vv)d`C$kIr^#DC6BqH)HGiq0$>0je;GwQ&a^9LG`= zrO~>MZ}NmU??q6yTh2T*M;s6J5cV>Z8}e+F4Z0{Gz0#wqx?@MNz`x8af;r5&+SLqE zQfGPM#V$C8yYdSdS#VuNvNNmL!*!Y9O}&Qz7^t(L20n%i{x z1cK;QkP_(4ewJEB6~XF(U9qvcJX{ogI?KILAjA6Fn|e!jplx3^%l15<=7Xi=VcGB7 zB8owK(~9O3Dnv?Rd~D^Wu); zEI~T)nstjPX|mHa0exjt_r{n?N%p|Y@cInsD1Uh7xm)S!4WdqG3>f%Z86X>mtroHL z+s(9Es&+#DyxlBLH~$9=$knt)Z3k0JDp%h;%uAmlW~Wu1gMq0mw0Oj$Qxp2I;6&v8 z4EojKAdle^cfVUcvLX%HN4Nd6ekUoXppT`>IxxYW`)EKo5pNZSyys zNCI+N+!@bszU0dH!)4BWlTy|m;h~->q7>s(l?B8@;%6+U_X^bX>`T)}%F*jhaCn-V zy_6Ie!;WtlD`W$}BXEJc+hK{SST+pH!!n)^HI;;?iR9Ba6&Bs7all-ovJRM3F-MWQ z7u*|QKw|9d0^3!?%3ns*niuWAo1LCB$@KrL_uN~Tys|)%5X%+FBj=B4yL@%O6{6Gp zCZjk?`%|3~`{$bs@{__P`&2rboN>0AuXS`K>_l|mQ>%zMHRnYR#=RF*2PRshQjTDk zs5cflm^*&e|>U^*!}xLV(h$&7^H3C8sb6$!jaMj?v!P*a3vtT zLY-BL?TyzeyW7?Jji#i!^ddjAUqFC?fBOK+X0AN#*9)SCBAax_Wj(jmp1lhBvoTx4 zv1~9mIE2oOI@O_Av>wp~nnumbyySA83E3fnPwnS$T~$MFMt#>l&Ag^SR;PW~t^52D z+HUu(q{QW(Hmq0U=5(ESVAFfk)v{F5E&&M2 zPz;SpgBarS;#qqO)w~F@x=OQEzDJ!`*(EE($Uv7q06@L!m*;mQMdf{m)D}U(981u7QWyfRQm-$;MHJG?y3iEP}iBC?!Pti}CIy<~(^~XJOio5p|24 zh!!hhcK_h;y>7v9{?<*)t~PWRcjLHXFFX%q|ASTje3nCHeSsrL)|^dbx&36W zc}2~-p?$Lk5?t$V6OkN>PjU=-ox1$I%OA1oc}wbcJ>xRRMR| zLf|5^O@g$BquKOP%o~%M4X}Fpd@EQ)l;U2EJ5_qOyu`3tDFJ1rtqkqK=}Vk|Tov%u(J7UC9AIJh&+ziuJ1 zXefo;GZqvJ!u5OucyRT<;bH)rvr}vR3>uEx$ zHhHWo!IW${Ih3qznD6MWdxqp#NK1{7Z73zU1O^vW7nrX}H5F;ydEC4YtAJh6)*-Fq z5h84Sothz?I(%jUt8=!tayfW59osjlv%N2|b|>}myWz(Npk7jTY)HkkfBQ1kFqADjpP#Mqm%0cOu{$NCiS)I7PbLWK^$04F_ObmPm*Hp(*h4-V1OmH(rw8Q|b=6YLMltZ9 z5+j*hQ!C8=$kH2Kj~YBL~3xsgYX@wmL-hKaiTlx2Kj+}cFx14xL4 z)*sFnRx@Hrr$bH1HFI;_-8yt02F*q}GRd-v(A{K-i|R?eS{-m*THTvZ z;0j5CB*|%Mb+QM{0hhF{A689I#?PgSG3WU$)us-w#NAvGiI$lSTp!E;@nk?wzJDE3 zFTt1-3~0ic3k4X%-)mIv4tppL`lkC0o&wqhvF`5Un? zVtUm}CYc|(cQyxqs6Gy7YlV!1FM&M?KCP8qOA85EP{*0#*Xy?w25R~FIl2`ng7iY< z6+rIL)|OvNiN?X=Fd)9o6T{9Nh{>td7|O+TOZw7IPrpkzlckJ4ULZr?`BKDfX;Kwg zkCvjmi*v!#cH3xngB+JPkXOcWrb&;)BX6de#pr={m}zN&2DjQh*RKyW*D|mBt*jzfO}s4gWEUVV5usw4@86p#t%8~0 z;Kf2h6bWQT40)YjTRkD+HB+9FnjC^S4fSgk2D3u8)Dm>h(?@~$S=kPPbGb}V?_$Xd zEJ<;+ss3By{km)RZ#dqe=P%qH!bCWnx+D9sj4dqmL2Ila{Vbeop*0H_L7{bm_-R%M zU%PbKH;d{zNu{69lmlV{-?_L+d29^Daj%(kFScaBK^xKXeY!!Ok zJcQaV&&8F$>t#*5eqJ&9@xt8M65$Rw%DZy&y^nss@+ia&9a}uS-7-MU{5R#u)3&^~ zF+T9?K&KiT{~;6rOG}~^hjnHTnkS{kk?fm}YEd=-rK724JZGdU&louFVDbaiMm7uz zbx+xI$7#~Qqf*tjS_FLYmERZGTVyu;JX&~3&WYA`F&}r|SK4t%I3(co`JZ+G-RvZw z#TazTh_L?^_3$s136MvFT)Rot@CQhHr3k8)`mFwf`3?mLI=Lgy76+^ z&Gdw-IqYk=_Wdv*pTD^doIZdpf{*;Xk>X6^eoP!pinuV|_2!2LTg!dVj`E?WaD0Qh z4@-Q<;s+((`uSYD(8FU`VZfo#dWZS-Ud5rZryJc(yy>?bhH_NKb7FNKt=p9tP^ zT74YVfYr0_Zx{68G~_e*7Fj%>usw6~m*zv9BXL_enGVZC>+P^DkFfjM7|Rd1jI2N|_A5gQBF^7qiOgSXQkf4J37Hym?nQtBZd zn!rCB{Q98rjhc}spGvzxZ-ZS$y#UXQE_bExcA_ujaQ8S0)5x?sM{vBxyJsI#|I&fH zH_>`w>a+`Vg$hG0=fx6RzRR%u$M6l!^(@Tm9|tA^1l&Zr$5AdbAVGH&ulBWxiOQ|u z?;?H`{h-AoGWs&D=|2W{>|0P(Vb=o1LV2LdHoqvN?KsAjL>nF5lukI+Y!RIvlFw<* znvfp~Iu=IAclck6HpsT{(h21(oS?sP;}($thKXEPUMe<#7q*k15NwJ>h^V$vFzS_kP`H=POR3 zwqm9Y{Y&>8d_Y%X!+QS8#PxlQM?Kdir*1_1taAjdgy1{&<4f_L-Qzh>=IRvHbE}6X z8bM5`cEFxnOSuAbotGT`6U=W-=GlYA9YlEOWfLB)dxw>wo~VI{M(E3M7ogJMqkBVG zYt{8nV>yjyu2GRz$2>s4>(B(4!#Pw|bcu;oht0`?cf<7Pm*1Xy&j#`a+%M~yt3k^x z`A}E79CQ|qML?+1E5EDL zf=Y~in0->;p0O_7L<)`tqBC|BV}D+3eqe59P#St12p0MskU01mB&kQfy0}2-!dqOl zhxWK=)K$Oazlr>(LSshugQ|lYN%yo|B<*zxNKuBj6&HUFp8XEdl5$_F_Hg=?s zM#&J`PlVdifCvlZv%&V47ZK9ia9C1>hJLxpgEC=02S>(#6bwIL| z?A%9gXt678OOvqVGFqlGSO^{*;b9tQ^qKhOh06)#9i;;(6IYu1nz3W-nH}wW=iC-7 z6mf>qyyzoL37+r9<8KLPav2zjLw{UC2geFMQ`#{9z*CCyA6?Xz6FtKh^S+FuI#cgB zh-k6BUk(Q?19$dR@5p{cT{q*GAN0|@%Qzdmzleh5Ijjji66K0Lk5D2W4i=UEdv>EP z>)hT?ez7pfUh}E3dx#>u&**sS1@QBlItJk~{=J2pV!6Sy_@EA)DSTJOq^2lXiK>NH zV@cfe_>1{J&T0AtJjD{R^bm2DmQGirhL6e}0vlU|g>W^83KsVR>f8+PwT>Jg)HBUx zxGsl$d>5UiZ5dExyQ#Qw^4TA1;Z3;m>(37j(f3N2;lF$3iMRX0I5*;VI#%5vkFxf` zX%pdQqnTA1C3^o&?jm+sr#CKl;rUzB)cgNW(EW6Jj}qP{GQjbALIUfoaqB2K)G>X8 z{FrKw=TxI1md z6E{mz1w&A5?kawT)VHl^}0QSFm2olO3-i2UYYzEthtFOGroJRZ?lIb8$DdPS0* z!V)ujliIS+nSaGg6`6GV*8p)CUt0tmdj{o)6;kNX;9~|?l zDyk}#tXyPS{24fYE%tOPh}+1kqk#tz66fpd?ne4DwH=i&8&ys=xjFl}+vIq8v`POP{OgMC(mc^l zO4+izgJEa;YNF6&(wjf-_$|8Xj zk^@HL>z8h0L^kFhwakU=5w^T|l5L+WC}-uSV9heu5Qn93Si5vl@3ZnLeLRyLyczwYIB9r9p9j|5R|stpb4l*CW_`HVY%-WWq~R+F5=dU`TBf zAvo(c?X@f)ptBH<76p`>5%&5*6^gvixc1I2Ybg!a3vrknBkt0o&Qr0f)zS6wI@I4?H``g#(3dX}m}K?4P~ ze}|Q^AU$RO(#>xW@znZd#`$J$I?H5hc+(M~EQF#_}MRV<4`<4aQ=Zis0Y5&@>I=WH_ zLDFO!mKSxq73Gy{sceD}yI4dgk!jKMlM22bh%Xf{)AofBG_ zjHCL+gysW6(LqX#wo8dC1mK2V%gIkRJWp6Wji*(n-K(W^ohrN0Z#Fga8CtMc^;{Qt zG$TC3k6tfX$}OJEB-4d*Dui}Q@*aGK9I_CH$W}l|snU*eWLEe7VX^M?8GpT^WnbY6 z2V10@DTgCJ!f<97T13x{0JWsqA|JgjgQ{hpG{!f1{mB<2NXw59dhWclU&1G^2Sz;Zf8b?c8-H1m(WfAMoxmy+h)NQC^Im=ja?QrO?x6f$_!*$- zHGZ1aHUFLZMa&O2A36iQOZy$Ek9?v{2F{Yt-NXCHju&U4bWfJc=?R z;(BGr{&1cR>Ro(}y$1-(I*6x4v()h>$dz9Uzt4#ne_l+1Z8%C3@BPQnn#a;)pb>m$p1fvS9ui{xo<4mYLb2N(yegnfAE;dHM8pU$E3ppo4|pFwTN& z^Fg+(lXw7a8`8I26;GLc0KgAqf`{`aY+*@=X)htHK8=k=vqkxr% zrHrp9Y&7ohY=}tIet>;QJl4~}sXOceSy#-a9MNO;$^6NUWyUf@&T<})2VJ=?&8{vj zq8@P`)UnYO`j1^aS+QQ`4rmFwNC{I0X@%hyBv34rw1bqK2kpuf6o+7-+rR91|1^{r zRyQZ50+V;yJ&!XG4l${vZ7efuK?bjh6BpiksfhlV>$vX5c#e@DaI2|x2!~n3{?IXn z-6`gaLnSp=;OZCRVZ1@|S2yYYGqR;pjZVo5GqaPasqMMfl#;|F0tx%5m2h3jNBKF< z2m3PnT+4B8j%WNDsPx@FgY9Zof`R6aj=u5_~ zqtCW1k>tC4rgzELh+RWbx*V>)oAaX0HLfq4>uylLLEfqbG@==vW3>+DnOu_TG)>H((Fn~MESlfKa2AG7+{23OJP z^o&pPJb_@b02S_w+2l6en5E8g6qy6-6a{qfCCUx}k`b45N%_+-~S z_gEp|kX3yhv8U&2FtQK?)q(yE9zf>O+pt8l6x`@?c@0qIN4R&|W*3n-r3PV99Flr> z@y4r_w)+o4fPHMzekCMR_OXB@61WwfA{NlX|QY8{p^Zg zSo8WW1ba}|l#DRbvn^BH69-YOsoN+TmXSpfa>#jFrES2c-s>yRsE(bNlx{b5)0+0d z)IW9rd54p=DG4FOTpOz8a+&VX6XHak&;yzL+LXSA+9!i;{&QE=#Vcxmsq9#8A#czs z0ScU`Yt~RKU6`V$pPJ~~9)FaHP88#P)XA%#6o4rV7SMY2;Bp7)h+IuWi&G{^{_AZu znpJxF^FwRy+;%dqzbncwR9-&owC&fF zfp_dt1ERYeyDo+9YfFf4?1k0cqwl|3&5b6^%mKbwM_A+6LmS7N=+1*2si`~{lcfAh z(sa^3EW^yB-$PcWW_#!()*T!R%<#D)p$N4Q88yF`>iD_~UKW{cyxU3@C+iyP=;yj; z$6u0MVt3eTO2h|BHx;c4-U)?8@<-~7rBX{y^-1#EUBqy5B@vU^ktA|r!3OU$;MSAA ze@#1@w(|bwB73|B52g9^IjT(yDUBSI0|q%=S$CGu@0(n21CuOX&KRco{Auh)eCi>V z6Dm0}i_T(QIw>JC#X@zV4b@!3)#$4S;YgTnEKu^x_p}NJwrd@>vA0K`VyJ3fIiH(n zj#3&&Gog9OC{_d_OFr&IFGT?F3@)> zk=^h7>c#46Z*;@BhgVZdJk^h=*C99=6B|btn&)kb4zZv5bEj3<#HA2eO&tGlFt`p4 z{~9IGW=9^P7>m`~inJN}^&XxG66d@SWi}rem_qSQr6oLem4O}y(|K3%a*&LtC3*^d z_)OLJ@f1W(Lugr3Dgk>DxZ`A4{xbn7K2AuB-(cgg&se5m{a_;0^oct z>wPyn82QmglR?%25)An79QlC-gjT%YEe-}YEGaqU@L0MiU{iSuZu-cswal+tGLPTA*Zh6q<^UVup69Rm#2U*fWu>s~FgBvBp?f zufD;cLS*Ag2qZ1U9cSFNf9)Awhew;oPc^5c8h!Cq0y!t1%h)9y9K>)Y=L+MYKf7i| z7t(&qzxtieht(8I+Pb7n=(ZVhls*~K!q_r$2#nbmXRKrRy~+sa!tufyiOmg2xRkzU zMc3t8`^ujeEq24{5*}(GuLe`sJ7*PYQ|z{XuN3OKquBE@zwLn&TQbKBV@eF=%W0G% zIarp-ymeBGql+bRgf6TEX>_^fWai{2J3rf5!sdktXYfw?c*m6Ot0)2267c(@4+0^2{{&B6TH8m_KphmaS^$H zy>p-1Tr`T|_mO^Af8OP17YayHR@H8cpQ_P2bXhaW(X@(P9~Hwf8HrquGc(01Busr! z=I_RM(YHwanRWxCMb^oJ>?a+Tg|{Zs(Ld&`jpcK;n^M+Om?-TnW^a?+FZ=&n5?-ke zljUo42|h5z49`)yD3+uIax10mD{`uZd0d7r;HvpDg)J|E`sk0!;sHD{CD?nijQxQaPxbWbgQv_d2T9f{4lNz zp|vcl+ix9lyBCC8jpeKKem<3fYNCi8p3D0GLOW6`g=q_nA;jdl6dr zuadwQ3a~OPA4Aqc2p1NafI32x#_IST*?SZIRr*2RZTN^~F-F)2z_Q1y2_d9VFTWo$ zCKVD=h`X)C&&R4q5KDzcz3Z6)zG1P5mCjIHGkk9j&^XmiQ6a(b1(DK z;rNT@LH1M(o$|~g?Ek(DRRPYs1!cQ!gJ&{cmq5Y7*qcutS6=is`t7ZWe6~5yM3TrF zHAG!X=v|ELI6x2Q0qBLEX2}i^&ku^zvPWFm0S9j})QtQ&+jXa9TVCK-s`=~=Os+o*?lpoKdIL@Q2FmA#m33Eazr`BqO#c`bG4Q2GslyNl=w@XzgXKHK@uXTZg7@-GH^&`obsMMSg5UpqznpTz#OeLq zaK|3J>c?EI23}m?BuTuDp`Q5?KTcy7KsGae_Jai>7t#=FlnCNrUr*~i&=3RU(97Lc zTt$E7&R^pEEMPYga+jxF^TP>l*NsLTOb%ExGwKOwn+W?(%nhyBf>3S<&re9Hx zv2%R{-T&wwB6Xyf_HiFN_jp)5e4hLdQL)4km&LY|T};&&C)@}h;`2~V(<`km^1+(9 zsUCABl~rm3FRx<0*m~meQ71qYqMxBG7u!&D+S{BWWG)vQuNNy@R2LiFaTDdbxHtF8 zCFT6|X2#ly20q(j?lrd0Yu6_-AT!B0MTo0RU=y?J$Urot$^y44 zMI9DB%mtOkjW?W8)z{NMMZI7x^}D|C*@Yz$@={H)#CnWt@_t6HoqQ8D>J8jZqlSaS z(JR2@yXRq(!%9KOxTKf$=HxhNv}fDxR1dCqpO%5V=1SN3i&l{pH6FdJ{A)nAx&~df zmM(ZB(?GO#PUw{%?7KDKhe5fb;*q=-ad}rUG%%Fd6`in&1Q8=jD~*51yjl~GJA8C? zNTFNlw4gmuZvd&WK>rJ3MZJ_BIM;zZOZ+)jEgmC%_4jIe`;d33cDIopf8R9+Q=VtZ zj1pK6U;+emrJJa259g(i$`%~ZS-AHg90_T-aIn`?X zriiZo@V&0;GGx3l)bvN%G4$|{#NE7=smYkWe`C)e;isO-aWnQFnqtbF{IK(%ok__0b-qG zD(yP}<620{oad^av@@NPI4<=$2(N!LY$D>xKk5H&xRTcM;3EICE@V5Z%>nCyjz+Oi zS)2+GVs(`*W93<1cW)T$4}5>ve)s8}V+TpuDi>lRVTGA)2i(2wsBV*ZO34zYqT=*v zyhfR|*EfyJUKi99ZfKqvb?tGdMkQ6iS-oGZM*kdJ9CH#osFez~=rb!UZ-kl3P}1J+ z%U$_C57BiS2sioQ?DgdPD56p4N+6(zT(H0gXp1)Bm*5m~3(pu8<|G+|$>W&M zY^td@T2IE0x5>K+53+RTKF?RZGdLTFE&zaRC2gQ;zBlif8A0HN;fk=b!vCnvk%R6R;?Z?wCP? z;2viC5(ym*>Cs75n~KW3d}YD47E)%-ULrU2zcUNpGa?b2If zeCGJH>6Gyx&k6G8j3Iy+r3nj_KY?>shFv9hTR!qi@IWcRU(gz*!&3D6M@PsJQeF zRhne`;J&k-bIA^BnsGTLR+5%ORl?IitzoFQ2&Vw&9H%8HbRVz4aBqj-x4h}K zBUv)G;E?jSeeA>9{A@|OSeo0|k>^;Tm)w&RrO5J7L+w6$h5dxDHv?vtex|pyH+?(K zridd0w+lGpsI{~Vl=mqJ&`z$2(}2ohj|fc%X}eKR+>FuKZdriJ_eLWl?@6KS%l+v{ zh%lwMhn5X?0rMlL8|Yt@X&&a?*<8I|I-~O00orfko<)nc1^YLp?fqPdaxkRwa4ao! zqHs~CdgPCpcg)Up{8DL7i3!rGHuXqyyc~~hj^n7StqS&6yY{rT5J%&p=O(`_|A%;b*}kBtZp zLC4!K5jRY7q1ipSB@a2*Cs^fg%P*G1<_dlv)Ferp$jyLK5_`_=f1@e;bm zJxtnIch6 z3mYBVsGo9dga1c9Xhb*^XVz$z>sHwi0{UlK4|18iA`+Ok8$=&*M&15Sx`jf+Z`mAt+9A{ei-ye0ppve$u_bp z8i@*5KmMW<7g=ez6NH()xkMRjL%N*NJvLMQvW&8bo<6uvS2f&&PbNkAYw)gjU^(Ht zz4NYt$>ex|bR$%6DFt_~EmxDGK=jsn8@N&SW!xO`hx4>%BXx{D#{-`dv%rS1C0U;= zn2bJmdu+(im#4__)bKn_6LLU0HFaxYr{yEA;)hr%MJ@eag@nB&mYVzPqWzvviHZtc zftoRyOB}ebfgB0os$YMxOG*F;`e29??&;X&qBB9I^C{nq-B6H%QY7l2`}h6>2@gF!J$tS1`TQtp>!UE3;Q-39rymd=*uqaW zD98?2{p);(Tlrb)FVqu%o%R3;2(ahS8^B-pAA`4iY|%36f2W+BeINIjz0D*{c74Y3#r(FzSAzsFXjB+5GU3~zf`Lr>eD}lY}i0uL0)wKyQwfU)x1-F zT~Tb36EDHaKAAiaA``l)jsKJXlQAB+;>+L)yJ!~oh!hfQ6f|=6`iSfjO7?s1YNSE# zgQw3Jwc^ptOxnyR)S(2oak7nP<%jwiJE|Iizgd_jyD~&rxX_X~RhoBB+Yx1#qh=2$3cU!$L@V2d&9Q)J%*Z{(Ht$Kco-m=(6wklipCfY(%Kn_vvfK1XC|#7$Krdk9LEPGEWt5Tr_AqYqzaU|i9+HN+(Y(l5#QX%9WeI$xidrb3 z|8&dPwBLu~G>lp*(YC^$9xH>nO(k<~UD~$E%^Rs{vOQJb&{ZQ^4K^z6ei~2t$c-G- zj25b4R2Qb8F$fL7`ZGV;6cWOi(4-Zx_me|pow1N%!lyHjV+$BF4zAKfoDE{1+4L?( zZR&VzRf=5vOl zDrHLT4d}PkG__NMoe{ph8xL(;9=*RK^q$fE7)5p`w$$W`jJJqV*5zLKJ~BU(;@9?2 zr(2r%d9Au=Y4xqC7bopP2hk@Z0ma*raALS6`KHNdnGNzFrkf==cYf@WF`f5%#L}+g z>kzz`mT7ffXO>BoN6k%`l!`(&Wa3B~XXNi_u)N@;F8uC3p7<;x}KUI>XK7&!>=fU%FxZfQz+uRCrOC#6lgtvD4>3h=Rm$=muaJxuX1)%v(lk;P3w`@k4z)nu+MTsWZ3# zbi8&{(Y9=IYjg7^A1{nr=;3T!OUA-af~Qdq7MQ?(0*CQrbw8V9;Aqe-r$3xiH+<1) z6)jd;PUlwpgS43sBDgGg|2f_SqLsCen{}T=>Sr0>_cK{FeUF z;C|;dKFn|vC+i?t?yo)6ElKDCeegd9nTrsXoT(Lo%R*!Uv?Xypxd~EQw)%l=jdNm( zY?`c<*zI!`^8|cQ0j=U9mx@xF#ZaUjG9%~E{3YOS*J8!MYXojVQ9V0 z6!uNQ0(wI&-FdV_Q|9%=hEued`8_F5OHnW>h$SVP=P#7fjpFo~Y~n5!JF@AYv4}Rj zQA2oGkbXNVG7TtX6^L8Q0j)=OWqK520gCtRXlg;Q+G5}4%oUs z6~dP-VjmF4SLdUoC3mgcp{{b00)t|6{5P3|2)fhgk;>1kn|Dp}A6a+=9haA^A;Ytt ze`Qj+5bm?O=iyT572mKM?KDO$@d_J2y9BK3Y#zfE&-{6=efB5g+(Y;-Oak$g0&*4~ z!_iZV?qzvZ8eC{z@ey)UMZPrFIJs<~0DA$T+JZA4yV)(^T6)jNSIj!h`>@Yl91-%% zWm*JkaCB9PyK!>c=AS}Ce%y;Th2}{ZK0rS=)rI)vm#F!E&wBAbEJwYAtR__Nc#u{BUi_2`0_uT9)sj@gp-`aqc1x-!#IvubpW|c4Q=x%Cdy+uDuxnn4mUA!wfl($NaGPn#e#AWP3;wllyLY?PU%TQnCv2kjy&1jzp76{;yj&RWjOS) z^z6|w6kB56k{X~-JEP;8i4cdxBV!k&wZ#O94lEsuPHk=oNM0Zu7p;{-+%-j~~-Q>z}^}4E&rA>;@Hlx(x zS8r#rj56^cu}KRH(R~0jPzCA&ok7^Ab%Ux9A-6-f?e&?79DW;)ETkT?7Y)-QvbBM? z5Tb;g(5+yyFD?}qW8VsU5J1epL11y1!`D9QPO_PiC`cneEoSOn=08B+9LFve1G&%O zB7d(SmXdJzi@xnWy{90PBmd7GYEh1p9E{?HN*UNltzQU*45y#npZ(ac>{44cPv@|U zptEqb#lp@wL^wxGx$NkJG1(RSvSA#f?l|oW@(+Y}66gSjv1p^p+{lyoi?tGJ=dXya z4u((eF_pu!yYsjZet!7utxw{04NvFYsUL+al0SYM>YA7Pi!dbXm_BLFPyu!LNiZ&D z?c!x}Tjah=4`<3(g=qzWEq^1FI-U{fgJ`9~M|-NdD`mR%cgz#1#l>3hgD{`=Rj74t!#`H;g6 zWWraVmlMaB7*u}c!S3hk19D!-ue2u^5$41n zMGf*!Y0xc%rhQ_u=%?NWzv8AO+Z~%d`1wK1W#%tyt1(!4o+0qdTIoo;gaE$cF<(rm z0Jns@VErWJQLu-{gEP*KZj}6QwrwJk=hxv21uuBb^z#uJK~2*L5Z&MJqMY#Kr$c$c zpl2ILag739$A#Qe!6}^EgC_|M!7Ja<-`@?`TCUDzH{vL5(FXB zClX9OwF>j%|42z-Bd@uuN)a|IoOHQ&;3Gnww)z3)U8p9LKZ$_FV$);59*?SlL!~lh zmU%mZotmuT-s)-h;rAihb9<+F`@!lZ%OBbLPb701_jQl0m(G_<3m*%3JuOll0&(2h%Y$=1F|dV7km4miN=Ua z2Q;#?f##0)N52p3D>SIvfS#Sis9z*Rc-$kXezt#=o0;`@`7mx7ov!}!7inTGUd5nh zOujF5cTcfupmPiA~pv@QI!Y@r)@gOsz(Gl4J)%2~30QhHTkVIw}O*DulUCI7cy z=g<@Xt{Fi1gFVD2Mj*N1&X334G*!>OKTlt6xRBNVzV;Cg6ol42=F?D>Ei72TS4ZI* zVoal9{L7A4OfEDI2{c-tv~zOy-EHFj8cuuP?4^+{OhPp&P@rIy!Z7&22$Q-IkXbzc zK*|~Vz_mbLdm!t6vB&@qq9mXp?XkcfY@x?~U#@il;< zxu>GlW!$IO^#%G(t)TOKzVC&WsYmDYv?6wwYMYVo?tLX|!z;B?|D)+jFD`Ayb<0oX z=N10Y^Avv#OSQl{d&s_?XPjEK=cPOKh-m$V>XPE5=#EohYrzohDZ!Qo@0+2ki=7(_ zw>{~T^w(v=6WwQyVw|rxqSy#rw3m#jQ~&nw{&2(OxDtU2p^C6i%@q1K*XE7QO!QnG zy)eWM-KhL|k+0f)*F9a**&_*b@2?u@)nQjOf_2|3tKU9ThRBJTJD3F#Lk>N@US7UF zR$3}Qpk40iT*X<&^F2)No{<^xgS-p4B!x?^`(8ZRgA#qmbk(goi?wwn~dC zDjR|mf%Wj}H^4-%+X{$>+PKqt1?Gl#Y@R)k=_XtQCdYX z0At_Dd2BK+EuNxLjBu*{)I__QL0dnKD4bt3lno&U8Qtz===83+rZhKv9aE(GKUXtv z3(55`6^GS|^o3TK=rveME{gZUWCqVQ$OfA5^ahm8vv7NVn zb^ffxEcY4Hul-D6b;#79$Hzt z|3@>juMY5%DL1f*v?SJ-1pjD{<%O3`wV&RE3ZG>J7C+m7EeKj>l~kSui27xl%!cILwQ7q zkL+M#n%BwCb^W#D&#dp0rfBdluA*<_#Te^#RAo1}Qq&im_)C7k%3@TLVb~gE+#ZvC z?EsPoDEqz@l#{|r5f4d`Y_+jX60o8bQA=x7&X+{=-Ku$57ep;r{CnK}>xN=)nfnAc zMq*I(C&3E+D{Ian`!govY#se{AF>xVL}UGFMm~2P^0MBlTMYMNX>Mxd+%ks;5{!Z+ zD)BJ3s_j~*kz-8v9#Sw$R8Ky`KxaQYM$FflQv0_yC2>@0_Quo0$i0z6y)J=TR6Jg= zWm+ym!IrBw#lI)5?3yBD7E{`65FIJG8&u`r)f%O)4vA40oAChEmgPe~p~R}*M;q7( z36h==XKDLy-KPo800KYl*Ua|{$nq}P_ehq$9&0ED(#G^!KapqQA$_1~PXw7vDfih@5ZhC?kT_Nx_?qU^0fWwumvbcOw3j7>Z3OOc{L7n*VR>0nK5Pk#)V_^OGm#Tx`RL^uPn<~ zti6-|JT0m2nz@VELGnse7p=jb;CB-$N;rnl{-FDY!(s}_|B@~XzYF6?t+ z{=kmTfgCdJsiLmE9BfkUHO)*@yWdkHH?vmNtk$QuuQl9SQPWuH0^*TV$&z5p3y8Cv z<(mTY48H!@NPN(<|1h1}52WKI7#=1Q-4E}O)NpEongj=<9ggB$=%|)lLz91bfBc(U zA_I$nys^>3L6fJc?v!_5gcJ(gU6-8OvSoh}%);)(oEm;Hym8;A<2kMSQh%pENYW$@ z7jxc3VCsOO+LW2XTcLW*UL##k;os94JB4ZOUoN7?QC@A$B%@q#W^9vj_Jg03S5o%ZN+w)Ia%=UCP{gn3Re%QL zO<=T;JD>woVeXkYa#_Q{~@}-mklDSR8xV+N6DsTF7HdT-tBU#iopbdZhm=EpL};|O&*qqQ}t_Jx{CJDMzNr#J7=w# z=)-D`1H~ullzRltG+*E|EVi!Rxt+pQgW-I-GB=UiuR^bF$B=IjRVVEU9ElExk^_Ed zNbS)ZvZjLYP>qwZjFNM_#U0K&?>F;;s&SJxH`JqS@A1^UmCmt=j z;d#`Yt~(!GEG0%X1ARx&i*x`^j#f>s&+v8=2DdoHOeEnN zZF0L6iNhRCESd2QQb}Zj%bHhJB**%ag@yzLYv{`G-^$f!Z00a4hLIp1H}_TtU|Wdl z8Y%=N@?A)7<>s35tIz#Ldw!NU!I%6wT-n%Y&cM99tPlw+iW^Y$XQ0?-6(h?gL;65B zndLtJkI5qls@u4#+umG!TZ{s|m2?yDMvG#itQ-9u%^Fc-pQ)Ujq$VG7Mg=Nq4!vUw zP8;EgDUQwC*E#=LX3;0{s4aI0bTP;V*v(&T{PSA<&HAIZ zHd@t$E6624(ANr8Ak6Ho2Oak6H%|Ln$j6eE7Vt6>f0TnutFpZ`&c7e)OMjYia|I3Z z2zt}gQGH6Kq$DuLN3=n%CRxcHy2{Da@zoPhN>Ebg>ZUG}a8_X+G35+Byqvw0uweZk zjWRNcbJ0&AI)!(v-XxCgN1m&OPEE?xOs8|{bd43C{Kog6B#|z2D`aj##*Hrv{n;!2 zeMf&eFRwa(=W5^H2Bc^`tvrb9SdX|C0fIpMCOf-AEiea_)~1@yTS=Q>vRga3IFXAp zo1myY-yr>G)O$&1M>55<;$YE0uYiIrtL<^eyDnyH*Oij4tM4XmY1xBEB;%U1@AeHV zAgz#S*<%o+s^gFnRQ7za{x;g8RQ1G+oOa$o{i_wH$2zBYw*(ZQ*o2^XW^GZC?zE4-eu{DJv;=fiBUk`VmXU0==!tw zvG{@dE61zrPM2{|#@xK%p+hNLL2L^%DNjmWcuQvc*KS+D%tI#OKh;)`Pk`J6UQZ5PX}@=Js6VTz7y@hK%EjX?BLg7Ban07F+YHuuk`-tSvB zPpbaw;Zqtcj?!J>{hJs8Bz2(obg->+1=!Q5YQwAW&;^}H@Px!(x-0wnLD{}w%ndTs zx_@o;G3(%KgUvH#W(Xa;bxj0+ql8qelYw>5DBHSmF9jx9kONWcDZZ8}>{uWBGMqXZ z4OJg}zFYCqqD;1J7qnW8uEfM4r6^h?FyYcFDB6A;d1sCyGbYa|H{p|N7zBk$j4~9+ zwTTTUw!b7J9aky?mCn40T<49gE~F+;fsTXdR%WTZ(Gwd@6SBloX_Z&iIA1A|>?h!o z?Dj1pJnzOjda2wqY^H~k&gAf~sNI&P^?3DE^`GRJ#`VDBQ?PIzM!-;#02b?b=O$g= zQEw+~Kp7sEd}Tdsy~6T#g`w%J-X_tC#7x%P1sxh<=2f~{8GQK!%|=!EULWrS8iqTU zD-6)R)#L3Q{Fu|wb5ADLC%E1G(rgf>gN?Kf3|uy(0TlKICOWV-9KjmoODsH@%jQCK zNm{1f$D7^~GKxd~M>A;s&ZHbiG$(eFUabl&;E0w4+E8B!R>K-n2sV+adiaws>|qi( zC^iale9NEaIA@RGx~;xeT{1nMEGJT0Dj2f;;(K)q!OL-HkR>r0H`F?%Ite`=&Z zIK(YIy8%nM7d@?Id`X~Fe(WRRs)%g=6rGIM%drP~l@+b1h=o$KXhD3PK-Zvx*u7K% zu@Cpx);`-m@GACA6!RM&`jM_9!JSfu{0MC=hwN1nKxWM(53&RWHc8Q2iz;?6b>k-2KackYaDqhkBT3Ac^GR8YY^0J%Y0u#Pn86e^PEC zMIjC35+N*evGmjtQh!$(+rH7N2arS-(OfO}EZ~ylHNL&T;Vdi<{wcf+Uq$*}KUpUD z$q|0}*O&CmqP$?HRp01@H8J7=v7W%u*&2?dt2+ONFoN-QBA$G@U6*z7X>A&Dy1eho z*p0pwgtKrCu$?PU(3ZTFTg-T^Gg!=H^#_X0 z1G9euKv!q2-%91p_XXXr;#rTG7pHZKN8078(mN!)Uu(?;1gDpX0f!v;hljb{*%F7# z*{RgK69Q!2e%G5GpYG}pxf{|#f3}TWsK@*U#xFE?H6)xJMYnpMz6_$bo+WwUy=^S4 zv>2wkPAlxR_ak_QAG7AN)*S_G)DAj_<${^QySgU}Y;0u`p*l+|uu{k7=>d-qxa^z7 zom}|>0x5kHaXyIRWmm7I`ztBcL;U3vHVW#+=dpk=+k*$800gYjk-}bU>!f$UMxaW# z>+6?(v2XD*iVQV14aIuiFcdkGdq28G%nLGUAnIL+nTY-VdlsN z2TUdz+J~TsRu^+9Se_8x^DPaaZG`*QRi|yDe+%pgrm0@)*$*qkjH2c!$T3JYD5Ml2 zv1&6hyRdd6dNA9#c=K%!6XnERx+pL43FOsh0>8+G2t8Ub zin&!jS@taws&Vh)e)`?ZF+Wb+m`UD{K9TPKXfEw$-zKd~MXK^gz=2D}W%eWu?t$CF zAr~J;INq1`dRRqIFsGO+_Ns~CE+Xj1|7L9e4dT-yv&&vjRb=5<5JDg}?caHUB5%{3 zhn;_hwa_E`PPuDieDU|BZozXk>ypMdo(}7RFPnXWtqJ}aaF*2E6in?A>+M{7yWzWp zus6X4ANU5##niOKKCj-(Zqj-txi(m1X+X;)OviG%xX#lLY?^k1U(GC8Y1JPRL&``@ zRCa1e0d-=akd(BdFJM;}dWIah#qxkI=|#xP#nr?NKmSXafb-P^p@l_7qS-fUBaO#$ z0;=$zT$i7}O(h5+@G9yi7v5=J4c-MfF`;?L0l*TMx4I-t%pqz0X-O$w&{DDPSZT2E z1I}{F3UDsW(2zedY`RocFNZovy*Pa}(Yxq*>P$mc$62w5$Xx81E{Def{6>hMa*#52y7Cu!L~VT)G2fmH2zJU_J z-xksh3u?=jjBH2KJx`+wCYk%yL|sjozUhZa?+lHfbk6j{%p{V8F@OrrY6juRgnvUg zc*%{9l}s7>;eN6A?T^=PPr_+=-zl+C$jAh<1V6$Cm$v*FAyFw($bao3)Q^6J0xlzq7WIIG>+bhT#0PCzo0o#TDbWB=n5) z9CXL9%i2~Hu07RmAXBt?D|bu-f>Nj^f0}EX=yu$_x%FyOSJb!~Bbt3s*V^doalgBH zn5h?ivD$;4;uLY*VRfZFK9}ES@r^Z&v}dpWib3d)^Pm6GV4dN5STsfG-_XaJ2qDlz z6?90uC@KZ9Nqz`S1kVwUhvaS!D}gTZ&*}#-$D@A5K2iKCY^1+)zV$_`Ya*9xYqeAx z;FDNVSJ8jECS#YJV#&A|{)Qq%jx+CC=Q=s`v6j6Sq&Qak2BWWlH0Z@=%C9lXGDqgx zmT}9a7`PO=;N|lhwo7Zz1kW7mNa5QNFVAvuE#UtmJ!s3j6dNtWLciUe=)oJewG3SZR8 zS_^_CwzlhW72dyKQvoY0siWOTd%Pv1aORQ1!1kC$73>%oaeTnJ_)hzj$_n{HcmlM# zmI{G?G+sy~1Q!qVtdlY?=bB2??4jf~0uU9vgdmp!-BV*AvRz=BwjH&Q+sTcJNL8`0 z2S=^Z^|eWQCZMqvt(;UYco>ctr>f@-6PepL_u9kbd)Y{OhqS%Q3iY@FCHVm6yYZ9n zAx?)X50towm~B)$jnO)vH-JI6z!R8Os#K408o<(JG z*D>M6bFHLwEb+T@NZQqrZpf@ymjW=SFQh7r2P_iL%J)@fHr;Cr;GL@iahke2uk&hTeC7`<g4t}hyhpR!SVL@SIS*5L=$716&!=*=jt)5CYFw+EU$8S`RaA^g{$9ML zf=Az5)VS7Ix_?}ChSZHE@Zw5w>A3FTzLx|x-21)CA0lR`b=L9?ni$baYWHJ@%dJ$| zYR7U633QUe~~outz7P#UCBo9qxZ%m)%EZ*lG_WJC)tz35s3IB9`^Dmuh`bhriYAgxqf5^gcM4{|>|CF5SNPL8pd0XJV47 z`=dnzPsmHkgUJ(Ae4t}f3#UVa9@C@sR|8P4~=hSeX9T>`(pL`?ZxApv&!wGKe+Yb(}qaFiMpJ-nQx) zho>(m9UGeKXrN-trH84(h5^WZnMfm+H4L zt4Y@Hq=%WSBErhlpnn%vKzQ8D-Bh~$I)5ARkiH~Q)5&IeJ)PiI)({00~d zc05bHvc18&NMt)`y$nQ{dBh<3f?sL5O30CQ=yk;6*u~mAvb8Z;kv9wbdW!sxw%5JK z)98nuC@ZwO?~bp0`e(idVU?bMRiRk6+2`X{6LJTVU8z`gDhZ=Lsm@E0Zatzf9;!9f zzHoo@tJ(O?@n`qnj0Q^u`8~Lzn6u(8bgfi-Fmhjju{*G0r+%*Pb<}JEb?SsEtVNvU z+{Mp8_UO71<)J>b_p}vscTpz8Ug6nw!6FkdyU~JO4HnMDnIccsS)J7tlOBXHR zW-gLdyR|IU#k?1k)*Ta`9N)nSNbye{o8!&NHz=1$pM-$)26=tDF49*VSIf zS3$KiP=%rF=3kwB z-dLd_9C%4x;HFLZ;8pLaQQS{Xd2IG05?Uat?C+)Gxu5ArPpNisu)Zxd8eY21+ayfM zR-jFO{%tT(B5peQEbdnD)K}#P zy#yci&?b*n=k|kG2p_^Cn~fx#KjQz0#!${u`?jXil4>qpbfT^H7DMpn+R7zrPiuuh zS^?!*9f0;B$gpsOIeGKr3zXygh23g1`#n3|iKe9lRgW}732IO2v+R~_OpMqB*61(v zHw6_}=anFnB^>$l{0CdwQLVqnf#tobIjhqx#MeXInjyZOAVXCFeMr~LEpqkR>`&JV zPR#%{-TN$hlh)dKzNKe^%8sy3m=Yjnkua+(SGtCx@OjT$>Ohi#`%#i=(t+lo8f4S| z7rRH5weX_es>M8cJJAcv6Pdeh!5oVIi+cE+UiLSx6d}LHbPKqBo}cKHt~O0{H$Bz( zdUe|iB121_Q~Le(%*t9y+}JnQ;Fj^&oVQ*<&VMw0hF=P>R1w;=mpx7vy?Z--?N-|l zv~u-Kp-||4sW)+ zmcwFzm!00DHd#$3#ObB{V6kWayC1|88dv}BMX#26y~?jUC!$dq#gEcBJ2f}OdY{HU z+y-N1=$)>*m(tReLu&=% z!eYk?58`5jLuRyO)d$M}wH`lhT9naz1%it#O6`YmQyiVYQ9z_L7wCr@YUHnbho2oLl$L)OO zwnGF6ktw#V*2sF>R`S=B+-{+eG*5tilE>|vELzWnU;Yw2wddT<7TZEcqAEn%4KI_P z9s_HW@vlpiP-fA2wc0Kn4sXCIX%XHEJ`8TsB<5Js$-Y0Fi!!mnoQfKilckzx@&-b99 zcLvYLZH5H@&|lv7^a+6p7?^4#-Ue)EkDae&6Q{&F7L5s%wbBn&Po6 zf>E#~`_6}STip>8)d6P$JrKqg9+IFuGIJTn0Nub*cyiXF*ORlf+zaC^ zX%|A;o2&F81zPUu=x?5ydTYEg|G4rUa0arKiE^3EbHYOZdPJ=(T}}dB@Eg&DNV9k& z#Mu+mYu8okM!dX-U~>o*K|ixX-`W3xj3z<%cT`soj=sPv`=M33a|iI2Ar+nNQ`Fw9 zF_k|b*jTk1_{E&Sum81g>roj~7yrc>1VfRQT5~)#eYgJE@MygfEDq(LGSBoM6qaGN;I-7-YY!I%MfL=ejvCzjcbfjGRHSBObVEMX2fpc`)Sk zDTQ#BfK#q>g)4Mjf^{M?<2F@iwzcpYWRYhCOTo#L-RQDCpL0dShM29MSYJnI5xCc% ztMMgG>bOWs&Pr!bk&5{SNBlkpg_W65l_$8%2E9&yQ&|CKOJHA8ePj297w^~CV}ZZ) za~CoZ5l#T6Q^v3W#_!k%*oRMYdVjQR+uN(M|3jD&&SLvsu3uMW(H#9|FNnFH8`|04 zP(k#sEl7Kw{ukmGN6kKrjTGs!SajFO8rhYO3kY!BAJX%i3@Gr}uN$_yHy`T<`pCrQ z+9F1Jvle}#mvm{a@wuhUnD(tt^%fy5B0XEP!GCVY@zc&_(~^#%IMCd#70IXsvJd5A z`8Pa`gt&W(YMk!{uhJ^X0|pL~sW0KU$7`!WB$;i!gc;m^%p`-oYj*d_{%AfVb+7tZj5^qnIsy^p#t`(92 z35m2nTM%gH)o%|N7Q2wv0ne223e(ZUHkXx@&NY&om2Gs$((oG=Bs^eGH^)-H+TZ)m zF#Vk-{r>20)u^b{*QCvq3x?m+Q-}f-cIUOtXjNabCn=@_o;}~&sgRC}bSr)LO@r;n z4e_wISs_i^T7o}KhmaUlyAa6UgB_tjDlR3Rt}zxA7ir5n%m0pd*=KIVD*Q)pl^bH3aom(YhElDs>%7 zPw($t^&d@;{JQzTTWpb%NqD;Mw){L5@ECOpJdE#HduW+9HMt@)Rm&x5_D@{{R8i{Q ztiu0nb>tcl)x{C(Fy?c8sHHx?L7;VACjNU$*N6At9O$X08!N1WiVfXe*^fNL%*@}2 z1Mk9*yb9+{4{@c)IfO9K6uBZ)&kL&ReMdr&(qzB%29^QY0s2@~^YSZ8Z-ksQ26*?w z7Y^>L{4!x5`Cp=`G2+?ypD9(T@2<*jwSM3n>g2R!O>D#+)YO&uLk^Iq*1%$UX`QoF zgvxnQJnl+<3?7_YGfh3xKF5F#TNQg8`d$mtjiy$(S5%jsq5Rc#yt~D`#X!P7$RJ>; zqKvpxOlri1k9=s7oIYN$bxl5F(M4*^65P)oKf*?66)4?ihLi~$8fU3s6WfbntXQou zr%%-<;{{=+^9UBBb>QikwenH$K?Lswv8QTCwNXhJLQq=7%{O->e| zP;h?h7OOf^JK&+%7u#>q=C*HL6X-cIh~jGs_(@vm;h;(q29s7GJ4hP#l_s)~bdd7;8?M4J(CiDt=g)xb#TXsWqR8 zbYG-rg^^-($V2KMb^V75m-wq9VXLyc0M4J>P}r}fXTM$E$%9EN*Ey!qUoTImFrFv1 zFvIP81a1OA$0cveuuj(ib%MW_;^mJ$76LDlz6;W>)0+!&v5iw_02KvmlgeTG0hK+q zzG$czK2P0!F)r?V_tJt3F-T*5Uk(G})Yj|hbt{PudIRnJPqvI-#-UfEr{d@q3+ zMg*!~Q?*KHaE>$DMF~>B0ozhGM;$J#ITd329IGRq_WAPn2@2Ug-+B2*ASKfDc36Uz z=O`3(QNK&dH}CBY+00B;xA*mG7dlc7W)t6xH))=BQ12aPh8fpa`y^baIez%%RO+@n zua}zVC)<+pI`MX8e|@6!nPbKwh~?c$3Zj>BiOYQ|kH_tA{P@}Ix!rj}HB-p4^kHul zm6@Vh2Nqz2$M^(P6$)IO-E4^L5adCLWZ=x!8;WW}P578rXA*$WLw@@!V6JKCLX}wZg z`1g$QO_FXFFI%84XN>;OksqlIdgK56z%IdepoCUaQW%t}16;f%G09#XdNib%H%Wh? zGwv2w8z=4LA#?=EO?fs=(ITi=X*4DcJU`sAwfR!Ark#bWj?ban&kZm`T6kTfVZ%TG zpf4c8^w+OVGXWAGDA6%U{jUA zTv>4AVzJ?u8;uD&3f4u-yForS>;<)yn*cyW1fC8!{x59BMRwcDPT(mLdEn09)xR{B zy#4RVT>NS0Ir=e1d#QJCW-sIrvpNHCx5*&tYBgh}A}yxX6~r_DKP;C`{jWnR+Kp;&Ij4Bd1T~^_eQ{mu+n@WG_5;#A z5&W|IR5-`N5( zjz`Gc6a>jIfD2}_H9g<`rR_hOFFtYjMC9YPT?id@TA-q}>manXYBQS3B3roe5L)j z`61LDl}|9c00-jvd}!yH`AG=*8gfvA`~o>5O}Tyk-L0&NH2@nw!_P6bk#aXaw<#G> zQ_-`x#3vnJdsl(8{c6i)0#hskb{K>Mo~u0^7VOd_!H6!hwOq8(%qUxT(JPXDVVXeq z!K1Nv)I91fgqdPk0N>YF>0Oqb1{?lI^GfK@V7!|HB;KF9?lOtapg}ZCKgKwvI%mFW zjORuqF1_{lUx1ggRqZxxp;X^R(wAh&r;6NAWYmJHNlXMQP!eY_SE=2QYT8b8G%Gx3 znM-hjA|+S8u!{*|nw#)nGd$?G<7bNnvjQxEQpT!_3OPY}Zvt?A?KfFXvW81P;{A z8=auWs1bbUu#y-~0PUF*P>}O%#H$=jc#P7r)|jtF|Cb*jcdytuke8i>Eds-mL&dg! zQ6AE}+lW3|%r(gPj|OeEB%I@#KRyv0D6m-7q`M}`T>P{-@NJ%GX$!coTa7&_btG7- zqWmb5ax0R0-Gktvb-1^}U9G0vF^(6E>sD+2_rjOQ`&92aYmh!m@ag{506}#7e>4$D z{;4JqfyWSSWL^v9O4>^CwY~;Wz?H7Y{Yi)&LcQXEa3S=_hV4wT)mzN&6t$v^pf9CX z3JEm!4D|i=DmR&yw8OqXI>oe0&4ZpFN&zr)3A5u)9&^K(!>BP&AqL(Ub_ZOJBbw&j zL!fF7%QP)#icYp;(6Kr#==S4jK=UUogzwb{pgqO2(QJI6rM7{6`y&tDQqiy;TC zVSwRP9P#q}ixVl9un(4E%m^~km$BSTzi`pRMDL{ojO@Rm5vg=mK6wd}1=NA=?#Z+c zj)n;I)v{r?lS)773H|eojU=JSaOYGRBvRR23{WqWk=pYYkV8}!lKGDv4KCl^ijS$V zW6M~}%b_okM_PAc9%d(oEXWglkKKeGdbT||Hccj*yQ;b4eT(!L_7^nz%R&xvo^`%&Cuh1Drq1_)m}rq4^TgBOjkDIYW-o=h6vvPIXXdmE zygvAZ?5V5*SJ}67G6m_IxmXy;EwfqZ`dTIvu z5Wg!p*jQaV|AOT?`26mO=l^>+(8D3J94kh?M-hYe-|GgC&!*WR1v@xj(==zj}pB2R-f_dGZb3oz_T6 zd3Gy!pel^?4t{kbgLjuaMb{Z)F&o~XtN||)Bu+-gq-G~0`-Xwh~>^R{su@%n-e4=E6 zDryBr0IgwY&<=4~@i6sAOK^U;cM!c*&({s+42wasU1P+%H)~ze5=Zy%1sU%BvCMCX(f*IdZ_ecLaGe`Qpb=G(P+EYnJOAq5 zWOMj*!jfc9U~LCtT?R-7LwVT?=A&_O$T5%n!4mzY_s4<@uIo)Zw?4MrhGhTDO`T2= zP0ZSv*DqE)u>3K<{Xj!$A-IZ9l}*vq@RD&~-Mo$npJZ)?l}puv{-Cm|WRs*cBSWN5a3?DbyCcoV1Hhx%4680XF+Or(VVLyV4n9<(C9>kPF<57=i%x zdh(%2r?OlBzw_Rxl0A(>Q!(zL9BUnkP6ys7oEEI$^6G0MX8jd0{k&L}nP3MYX;&HE zD61^C)$t26tw`9oL5?z(5-!V&Wm-Qg{>pT!E|D41ToEs{Px|t8Cb+=xuRw|Sa22|*`_W|3dS~~8A!@O*I`+= z*$)%}Mmg(qrh{Aj*ZP*?F0^4bk8!5}RBZ+e+zB-qyvAqD$|ny_JbsDy$Fo&uO%AYi z?5or`uUk9cj-ebu;*nAWztVFcj?8G%S81KO?^5&RSW+at|K)cDUd#(LGjmqek$V$3 zj|l#ok!u=5)950L`6xm7hR9wG)4RR!UUOkDFJ#J}HLs#6Z_dfCp(l;PC7E`mIT3v@ zk8la_a_`@JP~278cw6plqsW4RE3b5uO_s+R)9UZ{EEefbq?}lZE#UN@QrnRe_CJ+c zf+AGnlV)wSpdIfxt2ugQDUunEg%A4{9U)03-$a2 znQ*4CqKU|A(wRs%DyBs(=3WCqKZm3&`{r6@=#tc$B}RRS##*$UWuYrfT*n|lp2%gU zVVp1j`j>nw924Y{lGb?SRdF;Ocd+#MUA|j!0C)q8Ef^k9PWaZ!LZZ?q41Q(GFix&6douxSkNAs zAZtwuA+Q8V{c_z<@+lS2Wxm>YPu{s<%AF{iHK?1{1Q*uSesqS)UYR#+<5;OQ#NUD8 z3}YL78nUwvSF|VWd1`z4&X+S085T*;K1Fb(3y)<0*GdJ>!8QZ~o{9H?r z>+>44K_H=$kdl=-V{XTXJW>#i4YNeXYWxfXbrAlBU zq0?k~$YEGcU@sPuF`SYkaf3iXtSy>egN+xDSV4W3**_Vesk|W5^r21WBroDEp?WG~t zj;Cd7)f6TisSLl0nipAB_2;H@HP_>Bboq%_l@#Fp~DYT3Tq`^!1og8R2bER4_ z5x|l|S3+C3Cfw3jj5O0X_5-ezF2F84X4HDDO!se?aX@C%IE$;yA!&WWcOXCG$LT_U zFB9`2)i?DGwe*=g*yq$(M+L0qxS-Xrg(Mm^`3+B6uGkeBdU@nUa6JxV@L zVaPN;ZYFpWyGY<-#5>aW!$y+{WOx2nV9C61%spmVrh#To&u}$Qh&6RgL4di5_WN6P zz*JYFFZ}uG8@ZZskJNdKCyOP!Cp|&tf3(_w{($-X864g( z&Sv510Yt02p4Z#zS6k;I(bIcLY-tX>k3xN-EPZ*#`q`^VQuuiCXN!b*Atu1;+(!GK z7y3Hs6;>n`^j2!#X|uDHfhomTx5^F+03fc zUfQO5GPcp)!@oomt%mD(C{z%4x=t_nF5AFYF-gSnxt2Z372axw#i^pG0tl1S6IILBq4UW1tQV^%OK^&#WXoP zj6y?okns8J-(X0NS_^mF?sO`ci%P6Y&dRE{_jPD(B9|KD{XIGaxRAfCPN)}}2!55Q z^TMC)_dJd>dn^u-+0};}2^2nO>I-6xQDG<0+4gPi27C zewp{FAz3};@U(j%F~ZBGR{7Ew9;5Kz;)~i^ZszOt?ocl8(PDx~Ud{Rz0&qgO#nOJr zW|2#qF06lsZq80R@T*l1BIy&Lz1NH8Nd|qC*)k!Ev(@)q^qU22&bZ;+AAPv%B|bH- zcWp1Y*YgTYSGF*aM0afnZ^nJ3#|?I@)S7{mfMNC9Tl2tS8{%286V!BK$GBgAf+;JE zFIE=KXcb#nAEn%Dwnp-NNEKnpJlh;Ve$p!#+^28=&0_kNWtG~H$jhSZ+d!~Etib#; zoaWaY3j~OuS|Qw$b}OF)@M&rT%CmN-}G|Lo~yBaOif_Y4vjXg#&VVPsH^X?=#mIzW7c zwsHVq>jI31KP`uIHfTPTjM+Y8=f9uql_+W?-T&*g!G%|Cy?907X6?MPplDt_>bpX> zB#|GRw>;$kCnDaXEBWV@vSFILa_5WC+fJN)!o@rP$I*HJQ~m#MoD@mO3K^$DvPX7C zQf7$aWS%n8!Lhf)DKk5}5S2Yo#<4lsBzw=}9D5wjF^+@dyuau3{RhquuiJS&UeD*_ zx~}`>owGfaf5QN5LBJxeegQL@vl6Mm~cs@4`zSC5bIX)>>eJq)OS$(_a7lX3h@RN)2E7#}gPy38K ztzS2I?96*MJRKgh{~|Nq;?C&ob`JI1$rg@#%)45pw2K-gz>_g9zf!%VQO9A9LMWcE1JiEVFte}9h!N4KXQ!{4l@|XQ$9++IY#O>xSG^@R z?}Oxb;pZo2!;Nd?ChTK*id%Cjk<1jahp|cn!zX{Zd)3Mh|M}A0sd{-xnjy)YM>rQ7 zioh)Sbh?_b)3n7Uv$L{FcaL;!Ib9#b9 zS1c{|-pr`Bw*Efu<08NZQPH*nxWrn|`~dM0LBI2Vre6!f*JUO5z6?zn$x zcQzg`@SLeixVPP(c-GCzRhI*8cME#>s#gpyb-Cn_X8OEW^!~RZ*AU58DjLkCs zyito7Z&ihPLhd#-zB&zZz^ZY1C);YF2PtL~XO$CN+cOu1L`6ROSf z(Yjp>ow(UXQo$=AFnQ4)yJTsuC02S9;-W73&Gxnp{L_h{B!N1A+gqprxLw1wiZ;FP zVYTD3v560u$)9W$qD6E2T9=@K?j~65eCrrV6O3jIpx9I!r7rVaDNJT?sM5ZAI=-e7@oYW^u%ae{gBEPDztR+TjpV^)ys>aSFgQ^U9T(A%j zP55fz!ys0SLq)G#gRVd3qxcK?_f~Ub5yZe19==yPc#f$Hn>y4y@MHRWGIb=EJfXOo zInh>R3{nTb62L54x*iv$x$|U%Kde1i{=0MI=Z6D&GOm^L66*>g7JIS zQnt$6G#AA`;UmU$&VCx~ts$35VA-nA1)MiL+hux{upn=uK{tp>RZ}A^HYr9Z5EkHP`j<1+N z$S>@31Vc7d1^(U`L|#iv9ihu}n>vE`0f=|uoe5f6Aw0UbD(d(AjGgtHY?tkP?3gJO znr*rc0Q-pqO(&y$Y1jPHsYqLG)EEl@KCU8txuRTHgs_7Z)qsBlF(dG9#td%R9|O`Iyz0 z4Ve#=lx)T#Y|6hcaq=B%d>>&Wk09&%x|Z}E@OhC3m0_8*=J64bHod!F9_><^Z{H+{ zf0ud^T&b^A1xePJ8u{3G;z|xfDyy2|+|ikR#ypGLmc7wn_hN%az4ZqiG1w81t=P6~ z9-GL!9S}>D-q2Fx78zF5!tX>dS70LQk1XoXZ>5;mfYxBS{$1{g(j?(&aa9Xk>8wj9 zeWm0|4r8wMXH(sUyDWL5pFodEZ^odnFeu^f(YZi?UA?a06R!okMXki{cTF_o$hM^U zeDZbh1@CV2vvyenD>1P?Yt^yTn~Ae$Rw7Bo<4D?2af*(3rxk`?qBTg0$mCQMk2rI5 za58MEjzWD2*iJHXIo>Oe_b{ube^(|XW|d(XYMhBvua(7|Z3I64>%A_o_qeBXK-*lO z;Cv}>JrJa3yrD7;=Aq~%J5Q?M#;v9(yM{z%2B!QfjT;xmy`Wk+)&%GOGWVdT{Z0z^ zULr?ivwp4p`q_;tdcs@8YN!YinU5m+`atZTHQ87Si->r#>o#s(xhea5yB}U(YW^yz z&3J#|V1m>-l7Mb!8F;7fE1cz}FS@OtdYb9d>s@>H=+De^y!><}Q$oI$cJqW#$KYk_;(*Eb&h*ZcRC%5pU*-yWzN9(x*3 z@`fgrfCgHdlO)V^mJ;O#uO`r4|F{yOC%^Qe~iJYf-_xUP+H&R*Orfuq~d)*2M%wv`$clj9xpupSb8w zS2g>m|E{DWX&JGDWP*W*{5#GQs%p#TE2pNuz7?d_UfDeTS);LDOdX}~KhGHW49l32 zJ2v-2Lh3J|L~Kh3?%@(Y3Ble)Bmn*Am5*qpsj#t~MP?B_69jp*Z^O5EG z{j{5OW*LTsAGvO7-u3CTJdw>|v~G^y))bAw`pyhNWv36G^X)auUq0%98CYL~ivIO3 z_5cZ3 zfZr2Kc~mnf^H&Nz#{iLrU_^vdh@Y0^Z#V^pm}5ATzWU@$trka5TZ?1z^5UaRrK`zQ z9xBI`c@cRyQ};O3O(=_S*QF?C;o`mv9Ki#tiG%7Mil?Ls3Ry&ao!4^fB$dXZa1=vW z;Yz}L%+4U@cFO7PhI7Pltr+-}u?Y3t+e_im^FZpOZcTbkrj=|ex%F$SL z0|^}+pw(Gn<57N#lk2nJ-Jd>x@lyCX|JosE=G(WmTj`2-QuQR4f-KzKb=(%Vpa*pL zeMtC-jrFfQwdc6qf6d^zg~MZ~DHILt1M?>kvucPZUU*d@#uvkIz2bpGZFTxvu#`pg z++=^~8aO_g1rYxyi zC&~P+c`WT5-!(9F5m3s6VB=#2AqIH^UkWzXc4P?+KMT{4et30-+6Jno!=iaO8g~k5 z=uWYGECtIPfe26i@A_!*$U!cL9 z_5$YYS9N;YGz{wT{ym04Yg&%zY-Z8<;K9eium>V$mX1n^+97)k{hVKl*WmpJJOP89 z&0ag|bQ5H5Vy!M-M%V6+@9^h_nd#q8pPqRx1^&|HqH#v19x*kken;ITQ4=>;-RFT_ z%Pg097>b9gZ1eOq%UP-Z_E?gPo72M!UO|}Ga|gf0AGhe?W5~ID@(qRy<6TPgCUCD5 zKiK&as@;U^s>%LlYQShcZ}rdqa`~U3Y;%$VRj~)xS;55=DzanMaVUvkTB+{^)^ibC zK(G6|LndY@6~{SKM)y|S?smVGVS8CNzHw?txbSqIo(NbL@yXP}_32!ev%&?g7{PU+ZuW2ySwe`cnib&r5{6mZfb#ij)7D#abfc zqK8Uf9YxIrIh?9k6Z55O5SI`%xdriX^1W+*I?72U>I6n9&c+|lSmId)0=;N zhr~^!=$Tjhr?Aj>7#k2;j%7#vPBo%s65?2&p%ZvNp(dFl^@?!EEO(9oWaL#}r=5N0 zT;YfDHPiCih;Z3$4Hu#wi;ULtysUmxq*r&i;}d6 z3m6*TRV)~BkC4`wV`JUgcfi;!mcz;^aD$5GBNe7S4QHGFBcKRh^&eHp-M6%pqQibS zd70RmR!2RDpfRhUNXnIizmR^)r~Kkd$`63cr(gTB>Te&1=1!fzyATUtK%XZ0NPy6w zIK;hQ&NJseSw)#L3-y?dWwo*Seh&+p6H|pRvsH^-f)SUA00#c&h!G&I-`p~u1ZFg_!+jpPsz|XR1h3{r z_?tL4YeZ-71r_Dau;}=2Fj=T3v@FH))?QIwtrt5&5lV5|-_Q`NX9)5?hziB4ttC;H z>UQgI%F1_?4|CprBAx!`pzO}9DBd)(bObUU)CC~&2A9iEa^V3 z>ho!4a|=%ZR(MWDPvrC2_*&$=XOv;FYk-;y{v6YLp_>-ReKk3US6Dy;$2&tQy{V<^ zv68_*>axseDV49A_uVsTeeYLyB=GFMndmE5=stI*zgc*h`Ce|(^BGyB;g zD_U-Q{(}X#_SvsRX*&zhUr6z(*Uej;S)>!(bW2r$M)%WIgQvABUzZha`2?+1-V%Jt zx#^cPTeN$=~(pVT- zVMkJqY7C{s8zPZCwYQsUe7*MSQ*;M-jjU4a1ne5{5BYXeyYg=R{x(?tDHAU+MxcbH zev(j_X&XyJCjc;#eR=XE42uMHP1t{<0CUQux|CJ#m5ZT_Z}fS;^X|_Wy?ujlDDxkc z1&@^RenZJ0KnP`M%V@j@ut0r@_3D&&B_X?$pV=hX_c5Mr;MQV^u~sdgMq83T-hDP7 zE%m8gmZ)gaFey$tVEM3YHQ%E;&R{VOWiLiwqOv9=-dHPwVb3fwQA zL)8i4oMYN`X zT6asKWZ-;;2IB4Zr*cpwi4X`#R|lYDxh!A4@yBiNqKqGH5|etYT}3M3(#7hS4gu%IUg@+8G8Rab|v>FT{by2HYfP)I`P(QPrWf?^Myll6G$+1~S1Z>g!t5P<{{ z$~b4Z%yYPeBj1A}=1+cgPR#d;9|$QNc;0`4ThonU0rop`&3lhrK}s!Q$* zlE^ULBHm^Fbz13b8=Dl5Q@;HQ_}{|N1`R3lRj9i$vsz}DZv>}8^$T^1PRr6tn%?W; zN=OpBoQBT=V&*mC)J3<+{L>@}dkEnjjn$Aplli5oCL%r(8LO~cOC3FqR3<+pQ#eX= zBmnN|U{97tEP{(hTRV>ZQs&4`x-({^fB!_C59Il~3_ANs)s)c8-6`51$JS zi7BL6&ei2+Nyu4R8Gun;ty+nHaZ(YDaHb_iDbJpwU#mq2=tIBLj5sS0;2GuL0uCLw zRcL6%XLcCA+@6=LbWL_~`nS;96Uk+ES1tjyzZNt@xhmBqk=W)p3ATvl7Gi?RqP0zF zoI%tIJ?#YTMlM>DfjiLqCQs6G*EKg3f~-OL)gMp>T*7`S=O2g)X4km78Z40hm$}Z! z##FeW?(eU%eW?wDc>72-q*SN^Gzi~-rC+(AaNMD8ECDWEDzxSH1im}$PR)}iJjtz# z%htL-*WTCslWJAq_&Y0Bm^7*9^tHex8`vKdF@wZl3T)tUP+l*qC$J0~yf_s597YQ?0 z*~XFL$d%u=cV~Rz^B3JJf|Z0g085y2;yHrpV zmL83B&`g|^>*|C&y}R5NWK~n~K%Sdn{Y}bMPq(YO?6*(}ut&&-;xP3GA3%Ustslf) z;|tZ^jU5+m#e>8H!{){mD=;R_Q8@PbS-1$g;oc1(2kAsVzPS5QRf(lsdiGJK+q53M zm2A?1yVOtVdk5~Bmo+gr8Vr`|GP(du3! zth;pTt`Exnc0FF;YVNeQXayH8^%RTVm7|L;nG&DV8z5 zM`pyI7b3AgrVXa1$wr?|EPTa5dH+3x^vxsZI-GmsIW(Ngo@**+wzyds9UO! z14akkrR#HaPJgB)Wk&Uj-RcqFUe<=qYtiL>RP4K&oov#K zb}(6Fy$;WA)xkHr7vmp1wC|k^~ zwh*#Rmqw&22)$t5K5>6skc}t2E+fg<;#0EyP4!?!i95Zt%X9z=9+$-jev5Q%MmsJ* z;zW#RcG-XjvHW|nw?I5TCa3h(M|{K5YDout!m-bolPg$VPjA<)8N9w=20_df!5HwT zV@{HPoy~gfUq!L*sL$tETW&NoDOG(S=Q8I}f@Z))P0yCn(?f`e}+e|cdt$Ui3_ z`+$McolN11tb#P5G{hymFySpFyAX^S(jMLup+_8jNCC91|LBr@tbi>z1QvP$mmkcu znmDm@Hki-*7FfL7V7WmRbe;puAeOCmRhBHw2Kc{>d*urVy%({pV-%w15?ilcr4T*k zdCR)Z2e}yxNXG-Bd8IN8cE55dmp_;KFlh}(ir=5etZbHGxfohO5g%rfIIIZCIPF3- z=!!*s`L)WgP0dp`O^hGbQ}zC1zKQZ!ds`o5*Y1mNZ@PFEIzZ;ZIrZkT1&m?v3f1B> zg!i-Bnf3KuZj_pE0iX5E!T6S{iC$W*PzUH;Vi!dR^~O8!OB0>SZNR|#{aV_{zds!B z)vj;8+djG?-4%8n{*rilVY5RShQi$sL+{&e*PGARNk6BLgu&jwczeXF%%k(qBZBmu z_DR{#u0UHJW{r|D=tNB#JVf!NKF-i|$)&n0V4tJI@vtzqc;ItwofA)`542uiq7ZQg znnTXRs+x7M+!r$BMa%TOSh8$3EE;h8Mts1}d#OgFCoyyYyi(Zg`+1;d)MTY>ah|#m zkAOx?D9fZT^Bjx-n%pF=7CiGAynLlU;d3#_vm02kX=vVS^}O+StKApl>wY#Zv2x$& z>vW%JbW+;O#RFRUJYe06MvnCzi3UE9>NIYu>ofF;vmG24*b6zR6EW{Xoia6jrDAgL zv{2?|t%1vh7{s{aPFvHYk5#tvx7#}#x;!2YB29%B5}j)sdK^t~fZ|`g&%>frkF<(k z%asbLwPP;zE$%}WGni2zXMdt3Prs(63~NAPWvsvJ0e1k|E6QK`!OU7%C*b3 z1rO@7k?KKGOIh`0#(Z$if1i1w^p9W?>Dcge?YaN$e}-TWWz~YOT<{(k>zf_1sx8GJ zY<|rLmY!l;i>2P35dwFXvR$eNmnR}U6CeWL_NEvki*dE9@R<8}&b?9}By+2M!0%xw zAIx{-L(o)D4K&=i$u4vth}}*#A*Jt7Hb+c{@{wReI*eQ=FTuFw)n1`<>z3&!?J^EG z`&4L)Z%fue^m*)hS1cF{Q_NqcsJgyP5whvp(6HChD30qMj~5s;13Ue#IJP`)7^S?mkBi|1ty#!BbOk{Y!VPx3IJSPf29jjEj>&Isspj0=F-Vn15XP-WjB zz)jN5E_F$X)k`o<@n6nws_@t?DRt37N=*oj<)l>QN>ax>1Q}hYw4e0-isf7{e!v5Z zu=;Bv!s51;(f7QnXa@73?HwOHo@DYMp?m=xYWggh!zGaQ7RNmn_>xV2BS(O%It?J9 z+`KYfJ*MaJZtxsI&&rVRpiJk~hPQU{jc8-3m=zHs6?TI@B;wcQek?vgA;mC%g_)O_ zx#~zxqwv@=%FB$4=-bC7B;6b{m^D&2_WT@C1DmMn)_2RhdnmV0FEowDfz_uR7iyGr zr6Dd4D}cs67+yL?T|;e)?#NN_mjQDQW}+Qwr!?y)bg`t4R-zF8?vweVJV(B%QoAsN zz*U)A>hG=TU2lDQLd0vH>sOS%9Z$PGZP4(Vg3WkLjQc}@^?*-uq!1OAm6zK(^)q0p z=k3t~KU_F5Gg#TV!f~m=uX%%Cn5|*w<=YhGhq-^V4g7N}q>LE;d`zOi>Xj$>=J>DL zo1g!c`3W>Q+V^jRq=_^gmNT)fAlhiE+Z`ZTxvKlmXfB3EsS`t@IWCP!w3Oq}8)B&{ zBL_T6{oa=P-5R77M9Xy44QmcjIRM}Mq!Ae2@FV%78nY|V*5D6p-ptHdZo&j{l4Lsu zv9St7eb_GIC$dwN%gBFCH%Wd zH>kIKRpw>ZI=cB#IGI)Zxocq2^=By=+;^F@#m<4m|Fr;7oHJn|M7F-e>j*WSH!~79 z^*GWm2NEB4mLQ0%Qta-*aKW)`y(jpq++W|(8kjKHN;v9_S*FP8{OH#iH(cC z(Hoc3nT%*@)%^+q)Ao$$NY#R*aVi&ZL4F zk|HK)_UO;~$e-$B9;};%AGk&*O!dnTZtFyLnqDJXmp#7VPJUVqE=p)$VZvfU)gphp zve-}|-D``Uyu8}Re<^h?be}*B$(zbi79*ywa~!4$>4l0N_pvDd;#X&JvLiB!kMdNi%Zg32 ziTS~5xkFMNl6^Z-4HV)V-Q^DksE)%O+Mg~y+k&PgERT{}S(;1LB0~j3Xa1wA#tv8F zAGo-OYx>?}rUTo|0XkJ25~nWMa2Kn2(Hh`9W@6cHhq%!9fvjStt+G^w0!7aKA9j*i0ZV!qJ>-Ia#Oo`07pvPzO z%^IV_)csx{RwY}DhFkB1Zot2Jzgllu+jT-Y`cL>&gg%2xBw?8UNX6ipIkt|#=MfLL z!q%@p?fcYEiTVODy~!AN4q^)EmVv!sty~u@BeLCpjXKHp4{%o%RXx)K`fMo}Dm|@g z!aaFlhK}vr7}mPyK|7tC{`d1Kb9=s6&Y=<*G;U&1IT~lbRGEVq≦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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 598/660] 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 599/660] [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 600/660] [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 601/660] 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 602/660] [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 603/660] [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: + "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.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: + "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 + }; + + + // 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: + "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.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 604/660] [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 605/660] [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 606/660] 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 607/660] [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 608/660] [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 609/660] [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 610/660] 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 611/660] [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 612/660] [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 613/660] [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 = + + "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)': + - >- + // 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 614/660] [PowerPoint] Add group-ungroup-shapes snippet (#982) * [PowerPoint] Add group-ungroup-shapes snippet * Add API mapping --- playlists-prod/powerpoint.yaml | 9 + playlists/powerpoint.yaml | 9 + .../shapes/group-ungroup-shapes.yaml | 165 ++++++++++++++++++ snippet-extractor-metadata/powerpoint.xlsx | Bin 14220 -> 14411 bytes snippet-extractor-output/snippets.yaml | 135 ++++++++++++++ view-prod/powerpoint.json | 1 + view/powerpoint.json | 1 + 7 files changed, 320 insertions(+) create mode 100644 samples/powerpoint/shapes/group-ungroup-shapes.yaml diff --git a/playlists-prod/powerpoint.yaml b/playlists-prod/powerpoint.yaml index 543434d41..aae374492 100644 --- a/playlists-prod/powerpoint.yaml +++ b/playlists-prod/powerpoint.yaml @@ -89,6 +89,15 @@ group: Shapes api_set: PowerPointApi: '1.4' +- id: powerpoint-shapes-group-ungroup-shapes + name: Group and ungroup shapes + fileName: group-ungroup-shapes.yaml + description: Shows how to create two shapes then group and ungroup them. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/group-ungroup-shapes.yaml + group: Shapes + api_set: + PowerPointApi: '1.8' - id: powerpoint-shapes name: 'Insert shape, line, and text box' fileName: shapes.yaml diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index 72f4c2f59..4d09312d4 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -89,6 +89,15 @@ group: Shapes api_set: PowerPointApi: '1.4' +- id: powerpoint-shapes-group-ungroup-shapes + name: Group and ungroup shapes + fileName: group-ungroup-shapes.yaml + description: Shows how to create two shapes then group and ungroup them. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/group-ungroup-shapes.yaml + group: Shapes + api_set: + PowerPointApi: '1.8' - id: powerpoint-shapes name: 'Insert shape, line, and text box' fileName: shapes.yaml diff --git a/samples/powerpoint/shapes/group-ungroup-shapes.yaml b/samples/powerpoint/shapes/group-ungroup-shapes.yaml new file mode 100644 index 000000000..9ab621906 --- /dev/null +++ b/samples/powerpoint/shapes/group-ungroup-shapes.yaml @@ -0,0 +1,165 @@ +order: 6 +id: powerpoint-shapes-group-ungroup-shapes +name: Group and ungroup shapes +description: Shows how to create two shapes then group and ungroup them. +author: aafvstam +host: POWERPOINT +api_set: + PowerPointApi: '1.8' +script: + content: | + document.getElementById("group-shapes").addEventListener("click", () => tryCatch(groupShapes)); + document.getElementById("ungroup-shapes").addEventListener("click", () => tryCatch(ungroupShapes)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + + async function groupShapes() { + await PowerPoint.run(async (context) => { + // Groups the geometric shapes on the current slide. + + // Get the current slide. + context.presentation.load("slides"); + const slide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); + + // Get the shapes. + slide.load("shapes"); + await context.sync(); + + const shapes: PowerPoint.ShapeCollection = slide.shapes; + shapes.load("items/type,items/id"); + await context.sync(); + + // Group the geometric shapes. + const shapesToGroup = shapes.items.filter((item) => item.type === PowerPoint.ShapeType.geometricShape); + console.log(`Number of shapes to group: ${shapesToGroup.length}`); + const group = shapes.addGroup(shapesToGroup); + group.load("id"); + await context.sync(); + + console.log(`Grouped shapes. Group ID: ${group.id}`); + }); + } + + async function ungroupShapes() { + await PowerPoint.run(async (context) => { + // Ungroups the first shape group on the current slide. + + // Get the current slide. + context.presentation.load("slides"); + const slide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); + + // Get the shapes. + slide.load("shapes"); + await context.sync(); + + const shapes: PowerPoint.ShapeCollection = slide.shapes; + shapes.load("items/type,items/id"); + await context.sync(); + + // Ungroup the first grouped shapes. + const shapeGroups = shapes.items.filter((item) => item.type === PowerPoint.ShapeType.group); + if (shapeGroups.length == 0) { + console.warn("No shape groups on the current slide so nothing to ungroup."); + return; + } + + const firstGroupId = shapeGroups[0].id; + const shapeGroupToUngroup = shapes.getItem(firstGroupId); + shapeGroupToUngroup.group.ungroup(); + await context.sync(); + + console.log(`Ungrouped shapes with group ID: ${firstGroupId}`); + }); + } + + async function setup() { + await PowerPoint.run(async (context) => { + // Adds a new slide with two shapes. + const slideCountResult = context.presentation.slides.getCount(); + context.presentation.slides.add(); + await context.sync(); + + const newSlide = context.presentation.slides.getItemAt(slideCountResult.value); + newSlide.load("id"); + + // Create two shapes. + const shape1 = newSlide.shapes.addGeometricShape(PowerPoint.GeometricShapeType.rectangle); + shape1.left = 100; + shape1.top = 100; + shape1.width = 150; + shape1.height = 100; + shape1.fill.foregroundColor = "darkred"; + + const shape2 = newSlide.shapes.addGeometricShape(PowerPoint.GeometricShapeType.ellipse); + shape2.left = 300; + shape2.top = 100; + shape2.width = 150; + shape2.height = 100; + shape2.fill.foregroundColor = "darkblue"; + + await context.sync(); + + console.log(`Added slide - ID: ${newSlide.id}`); + + // Switch to the new slide. + context.presentation.setSelectedSlides([newSlide.id]); + await context.sync(); + }); + } + + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
          +

          Shows how to group then ungroup shapes.

          +
          +
          +

          Set up

          + +
          +
          +

          Try it out

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

          Set up

          + +
          +
          +

          Try it out

          + + + +

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

          +

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

          +
          +

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

          + +
          + language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + + img { + border: 5px solid #555; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js \ No newline at end of file diff --git a/snippet-extractor-metadata/powerpoint.xlsx b/snippet-extractor-metadata/powerpoint.xlsx index bd9539d1c32f638e3911527b849450b60d4de632..a99d06f28514d92448bf5bef91277979840e4da9 100644 GIT binary patch delta 6616 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 delta 6566 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 654620a2d..43ac4f917 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -15935,6 +15935,48 @@ slide.delete(); }); }); +'PowerPoint.Slide#exportAsBase64:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/export-import-slide.yaml + + + // Exports current slide. + + await PowerPoint.run(async (context) => { + const slide = context.presentation.getSelectedSlides().getItemAt(0); + const slideBase64DataResult = slide.exportAsBase64(); + const imageBase64DataResult = slide.getImageAsBase64({ height: 300 }); + await context.sync(); + + localStorage.setItem("exportedSlide", slideBase64DataResult.value); + localStorage.setItem("exportedSlideImage", imageBase64DataResult.value); + + updateSlideImage(imageBase64DataResult.value); + + console.log("Slide was exported."); + }); +'PowerPoint.Slide#getImageAsBase64:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/export-import-slide.yaml + + + // Exports current slide. + + await PowerPoint.run(async (context) => { + const slide = context.presentation.getSelectedSlides().getItemAt(0); + const slideBase64DataResult = slide.exportAsBase64(); + const imageBase64DataResult = slide.getImageAsBase64({ height: 300 }); + await context.sync(); + + localStorage.setItem("exportedSlide", slideBase64DataResult.value); + localStorage.setItem("exportedSlideImage", imageBase64DataResult.value); + + updateSlideImage(imageBase64DataResult.value); + + console.log("Slide was exported."); + }); 'PowerPoint.Slide#setSelectedShapes:member(1)': - >- // Link to full sample: diff --git a/view-prod/powerpoint.json b/view-prod/powerpoint.json index 937983a3a..c612b45b2 100644 --- a/view-prod/powerpoint.json +++ b/view-prod/powerpoint.json @@ -15,6 +15,7 @@ "powerpoint-insert-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/insert-slides.yaml", "powerpoint-basics-get-slide-metadata": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-slide-metadata.yaml", "powerpoint-slide-management-get-set-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-set-slides.yaml", + "powerpoint-slide-management-export-import-slide": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/export-import-slide.yaml", "powerpoint-tags": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml", "powerpoint-text-get-set-textrange": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml" } \ No newline at end of file diff --git a/view/powerpoint.json b/view/powerpoint.json index af639f65f..06b407359 100644 --- a/view/powerpoint.json +++ b/view/powerpoint.json @@ -15,6 +15,7 @@ "powerpoint-insert-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/insert-slides.yaml", "powerpoint-basics-get-slide-metadata": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/get-slide-metadata.yaml", "powerpoint-slide-management-get-set-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/get-set-slides.yaml", + "powerpoint-slide-management-export-import-slide": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/export-import-slide.yaml", "powerpoint-tags": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/tags/tags.yaml", "powerpoint-text-get-set-textrange": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/text/get-set-textrange.yaml" } \ No newline at end of file From cb9dea08dd23948bf6d087ff43b5dd9b8fd3a1ef Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 7 May 2025 10:41:14 -0700 Subject: [PATCH 617/660] [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 618/660] [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 619/660] [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 "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"; + } + + function returnGreenery3AsBase64() { + return "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"; + } + + async function setup() { + await PowerPoint.run(async (context) => { + // Adds a new slide with some content. + const slideCountResult = context.presentation.slides.getCount(); + context.presentation.slides.add(); + await context.sync(); + + const newSlide = context.presentation.slides.getItemAt(slideCountResult.value); + newSlide.load("id"); + newSlide.shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon); + await context.sync(); + + console.log(`Added slide - ID: ${newSlide.id}`); + + // Switch to the new slide. + context.presentation.setSelectedSlides([newSlide.id]); + await context.sync(); + }); + } + + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
          +

          This sample shows how to create binding references for images.

          +
          +
          +

          Set up

          + +
          +
          +

          Try it out

          +

          Insert image with binding

          +

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

          +

          Binding ID: + +

          + +

          Show the bindings in the document

          +

          The console will show the bindings in the document.

          + +

          Update an image using its binding

          +

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

          +

          Choose the binding for the image you want to update:

          + +

          +

          Select the replacement image:

          + + + +

          +

          After adding a few images, try z-Order APIs

          +

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

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

          BD; z@b}-31GXoI(-_Hx4~OW)pvt4xn9I!w2UYK@6in6wL! zZe6R0z%%!HxSjQ?G-*gb>)j<6pX{Q^I<*Ep2G?6xyUP?3Bj)?CDK(AG968`lYM4`K zhw3(kl2h~+`nm|df1w!U_(vT!Qt%lf{huEm z{6)0jXkn8gY-Im6kY8ovYgP5%(1j6-$^v&OU?!qq^8dg1`fr*$7?vwaMgE`k1ON#B zd-{5p#{`pPB!r!cvH;()!*bq$VUl7jKrarMqnHr+zp3!GsC#);t^e;bWKLM0m?Th+ x2L>4U2=3#zp^`@jsqXEL;Ep delta 8215 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 78fca06c5..d45a6bb43 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -14738,6 +14738,157 @@ context.presentation.slides.add(newSlideOptions); await context.sync(); }); +'PowerPoint.Binding:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml + + + async function getShapeForBindingId(bindingId: string): + Promise { + // Gets shape associated with binding ID. + return PowerPoint.run(async (context) => { + const binding = context.presentation.bindings.getItem(bindingId); + const shape = binding.getShape(); + return shape; + }); + } +'PowerPoint.Binding#getShape:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml + + + async function getShapeForBindingId(bindingId: string): + Promise { + // Gets shape associated with binding ID. + return PowerPoint.run(async (context) => { + const binding = context.presentation.bindings.getItem(bindingId); + const shape = binding.getShape(); + return shape; + }); + } +'PowerPoint.BindingCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml + + + // Loads bindings. + + await PowerPoint.run(async (context) => { + const bindings = context.presentation.bindings; + bindings.load("items"); + await context.sync(); + + const bindingCount = bindings.items.length; + if (bindingCount === 0) { + console.log(`There are no bindings.`); + } else if (bindingCount === 1) { + console.log("There's 1 binding."); + } else { + console.log(`There are ${bindingCount} bindings.`); + } + + bindings.items.forEach((binding) => { + getShapeForBindingId(binding.id).then((shape) => { + if (shape) { + console.log(`Binding ID: ${binding.id} refers to shape ID ${shape.id}`); + } else { + console.log(`Binding ID: ${binding.id} doesn't refers to shape.`); + } + }); + }); + + populateBindingsDropdown(bindings.items); + }); +'PowerPoint.BindingCollection#add:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml + + + // Inserts an image with binding. + + await PowerPoint.run(async (context) => { + const bindingId = (document.getElementById("temp-binding-id") as HTMLInputElement).value; + const slide = context.presentation.getSelectedSlides().getItemAt(0); + const myShape = slide.shapes.addGeometricShape(PowerPoint.GeometricShapeType.rectangle, { + top: 100, + left: 30, + width: 200, + height: 200 + }); + + myShape.fill.setImage(flowerImage); + context.presentation.bindings.add(myShape, PowerPoint.BindingType.shape, bindingId); + await context.sync(); + + const bindingsDropdown = document.getElementById("bindings-dropdown") as HTMLSelectElement; + + const option = new Option(`Binding ${bindingId}`, bindingId); + + // When a binding ID already exists, the binding is updated to refer to the new shape + // so select the existing item rather than add a new one. + const foundIndex = findDropdownItem(bindingsDropdown, option.text); + if (foundIndex < 0) { + bindingsDropdown.add(option); + bindingsDropdown.selectedIndex = bindingsDropdown.options.length - 1; + } else { + bindingsDropdown.selectedIndex = foundIndex; + } + }); +'PowerPoint.BindingCollection#getItem:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml + + + async function getShapeForBindingId(bindingId: string): + Promise { + // Gets shape associated with binding ID. + return PowerPoint.run(async (context) => { + const binding = context.presentation.bindings.getItem(bindingId); + const shape = binding.getShape(); + return shape; + }); + } +'PowerPoint.BindingType:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml + + + // Inserts an image with binding. + + await PowerPoint.run(async (context) => { + const bindingId = (document.getElementById("temp-binding-id") as HTMLInputElement).value; + const slide = context.presentation.getSelectedSlides().getItemAt(0); + const myShape = slide.shapes.addGeometricShape(PowerPoint.GeometricShapeType.rectangle, { + top: 100, + left: 30, + width: 200, + height: 200 + }); + + myShape.fill.setImage(flowerImage); + context.presentation.bindings.add(myShape, PowerPoint.BindingType.shape, bindingId); + await context.sync(); + + const bindingsDropdown = document.getElementById("bindings-dropdown") as HTMLSelectElement; + + const option = new Option(`Binding ${bindingId}`, bindingId); + + // When a binding ID already exists, the binding is updated to refer to the new shape + // so select the existing item rather than add a new one. + const foundIndex = findDropdownItem(bindingsDropdown, option.text); + if (foundIndex < 0) { + bindingsDropdown.add(option); + bindingsDropdown.selectedIndex = bindingsDropdown.options.length - 1; + } else { + bindingsDropdown.selectedIndex = foundIndex; + } + }); 'PowerPoint.BorderProperties:interface': - >- // Link to full sample: @@ -15668,6 +15819,40 @@ context.presentation.setSelectedSlides([slide2.id, slide4.id, slide5.id]); await context.sync(); }); +'PowerPoint.Presentation#bindings:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml + + + // Loads bindings. + + await PowerPoint.run(async (context) => { + const bindings = context.presentation.bindings; + bindings.load("items"); + await context.sync(); + + const bindingCount = bindings.items.length; + if (bindingCount === 0) { + console.log(`There are no bindings.`); + } else if (bindingCount === 1) { + console.log("There's 1 binding."); + } else { + console.log(`There are ${bindingCount} bindings.`); + } + + bindings.items.forEach((binding) => { + getShapeForBindingId(binding.id).then((shape) => { + if (shape) { + console.log(`Binding ID: ${binding.id} refers to shape ID ${shape.id}`); + } else { + console.log(`Binding ID: ${binding.id} doesn't refers to shape.`); + } + }); + }); + + populateBindingsDropdown(bindings.items); + }); 'PowerPoint.Shape:class': - >- // Link to full sample: @@ -15746,6 +15931,60 @@ } else console.log("Selected shape isn't table."); } else console.log("No shape selected."); }); +'PowerPoint.Shape#setZOrder:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml + + + async function changeZOrder(operation: PowerPoint.ShapeZOrder) { + // Changes the z-order position of the selected shapes. + return PowerPoint.run(async (context) => { + const selectedShapes = context.presentation.getSelectedShapes(); + selectedShapes.load(); + await context.sync(); + + if (selectedShapes.items.length === 0) { + console.log("No shapes are selected."); + } else { + let direction = 1; // Start with bottom-most (lowest number). + + // Start with top-most when sending to back or bringing forward. + + switch (operation) { + case PowerPoint.ShapeZOrder.bringForward: + + case PowerPoint.ShapeZOrder.sendToBack: + direction = -1; // Reverse direction. + + break; + } + + // Change the z-order position for each of the selected shapes, + + // starting with the bottom-most when bringing to front or sending backward, + + // or top-most when sending to back or bringing forward, + + // so the selected shapes retain their relative z-order positions after they're changed. + + selectedShapes.items + .sort((a, b) => (a.zOrderPosition - b.zOrderPosition) * direction) + .forEach((shape) => { + try { + const originalZOrderPosition = shape.zOrderPosition; + shape.setZOrder(operation); + + console.log(`Changed z-order of shape ${shape.id}.`); + } catch (err) { + console.log(`Unable to change z-order of shape ${shape.id}. ${err.message}`); + } + }); + + await context.sync(); + } + }); + } 'PowerPoint.Shape#fill:member': - >- // Link to full sample: @@ -15928,6 +16167,60 @@ currentLeft = 0; if (currentTop > slideHeight - 200) currentTop = 0; }); +'PowerPoint.Shape#zOrderPosition:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml + + + async function changeZOrder(operation: PowerPoint.ShapeZOrder) { + // Changes the z-order position of the selected shapes. + return PowerPoint.run(async (context) => { + const selectedShapes = context.presentation.getSelectedShapes(); + selectedShapes.load(); + await context.sync(); + + if (selectedShapes.items.length === 0) { + console.log("No shapes are selected."); + } else { + let direction = 1; // Start with bottom-most (lowest number). + + // Start with top-most when sending to back or bringing forward. + + switch (operation) { + case PowerPoint.ShapeZOrder.bringForward: + + case PowerPoint.ShapeZOrder.sendToBack: + direction = -1; // Reverse direction. + + break; + } + + // Change the z-order position for each of the selected shapes, + + // starting with the bottom-most when bringing to front or sending backward, + + // or top-most when sending to back or bringing forward, + + // so the selected shapes retain their relative z-order positions after they're changed. + + selectedShapes.items + .sort((a, b) => (a.zOrderPosition - b.zOrderPosition) * direction) + .forEach((shape) => { + try { + const originalZOrderPosition = shape.zOrderPosition; + shape.setZOrder(operation); + + console.log(`Changed z-order of shape ${shape.id}.`); + } catch (err) { + console.log(`Unable to change z-order of shape ${shape.id}. ${err.message}`); + } + }); + + await context.sync(); + } + }); + } 'PowerPoint.ShapeAddOptions:interface': - >- // Link to full sample: @@ -16195,6 +16488,60 @@ }); await context.sync(); }); +'PowerPoint.ShapeFill#setImage:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml + + + // Inserts an image with binding. + + await PowerPoint.run(async (context) => { + const bindingId = (document.getElementById("temp-binding-id") as HTMLInputElement).value; + const slide = context.presentation.getSelectedSlides().getItemAt(0); + const myShape = slide.shapes.addGeometricShape(PowerPoint.GeometricShapeType.rectangle, { + top: 100, + left: 30, + width: 200, + height: 200 + }); + + myShape.fill.setImage(flowerImage); + context.presentation.bindings.add(myShape, PowerPoint.BindingType.shape, bindingId); + await context.sync(); + + const bindingsDropdown = document.getElementById("bindings-dropdown") as HTMLSelectElement; + + const option = new Option(`Binding ${bindingId}`, bindingId); + + // When a binding ID already exists, the binding is updated to refer to the new shape + // so select the existing item rather than add a new one. + const foundIndex = findDropdownItem(bindingsDropdown, option.text); + if (foundIndex < 0) { + bindingsDropdown.add(option); + bindingsDropdown.selectedIndex = bindingsDropdown.options.length - 1; + } else { + bindingsDropdown.selectedIndex = foundIndex; + } + }); +'PowerPoint.ShapeFill#setSolidColor:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml + + + // Changes the selected shapes fill color to red. + + await PowerPoint.run(async (context) => { + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); + const shapeCount = shapes.getCount(); + shapes.load("items"); + await context.sync(); + shapes.items.map((shape) => { + shape.fill.setSolidColor("red"); + }); + await context.sync(); + }); 'PowerPoint.ShapeFill#foregroundColor:member': - >- // Link to full sample: @@ -16225,24 +16572,6 @@ outputSpan.innerHTML = ""; outputSpan.innerHTML += finalTable; }); -'PowerPoint.ShapeFill#setSolidColor:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml - - - // Changes the selected shapes fill color to red. - - await PowerPoint.run(async (context) => { - const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); - const shapeCount = shapes.getCount(); - shapes.load("items"); - await context.sync(); - shapes.items.map((shape) => { - shape.fill.setSolidColor("red"); - }); - await context.sync(); - }); 'PowerPoint.ShapeFill#transparency:member': - >- // Link to full sample: @@ -16484,6 +16813,68 @@ }); await context.sync(); }); +'PowerPoint.ShapeZOrder:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml + + + // Sends the shape to the back. + + changeZOrder(PowerPoint.ShapeZOrder.sendToBack); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml + + + async function changeZOrder(operation: PowerPoint.ShapeZOrder) { + // Changes the z-order position of the selected shapes. + return PowerPoint.run(async (context) => { + const selectedShapes = context.presentation.getSelectedShapes(); + selectedShapes.load(); + await context.sync(); + + if (selectedShapes.items.length === 0) { + console.log("No shapes are selected."); + } else { + let direction = 1; // Start with bottom-most (lowest number). + + // Start with top-most when sending to back or bringing forward. + + switch (operation) { + case PowerPoint.ShapeZOrder.bringForward: + + case PowerPoint.ShapeZOrder.sendToBack: + direction = -1; // Reverse direction. + + break; + } + + // Change the z-order position for each of the selected shapes, + + // starting with the bottom-most when bringing to front or sending backward, + + // or top-most when sending to back or bringing forward, + + // so the selected shapes retain their relative z-order positions after they're changed. + + selectedShapes.items + .sort((a, b) => (a.zOrderPosition - b.zOrderPosition) * direction) + .forEach((shape) => { + try { + const originalZOrderPosition = shape.zOrderPosition; + shape.setZOrder(operation); + + console.log(`Changed z-order of shape ${shape.id}.`); + } catch (err) { + console.log(`Unable to change z-order of shape ${shape.id}. ${err.message}`); + } + }); + + await context.sync(); + } + }); + } 'PowerPoint.Slide:class': - >- // Link to full sample: diff --git a/view-prod/powerpoint.json b/view-prod/powerpoint.json index 0c40ce1b7..3174b1a57 100644 --- a/view-prod/powerpoint.json +++ b/view-prod/powerpoint.json @@ -11,6 +11,7 @@ "powerpoint-shapes-get-set-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml", "powerpoint-shapes-get-shapes-by-type": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml", "powerpoint-shapes-add-modify-tables": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml", + "powerpoint-shapes-binding-to-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml", "powerpoint-shapes-group-ungroup-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/group-ungroup-shapes.yaml", "powerpoint-add-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml", "powerpoint-insert-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/insert-slides.yaml", diff --git a/view/powerpoint.json b/view/powerpoint.json index f70fe3e3a..76e7bddc5 100644 --- a/view/powerpoint.json +++ b/view/powerpoint.json @@ -11,6 +11,7 @@ "powerpoint-shapes-get-set-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/get-set-shapes.yaml", "powerpoint-shapes-get-shapes-by-type": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/get-shapes-by-type.yaml", "powerpoint-shapes-add-modify-tables": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/add-modify-tables.yaml", + "powerpoint-shapes-binding-to-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/binding-to-shapes.yaml", "powerpoint-shapes-group-ungroup-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/group-ungroup-shapes.yaml", "powerpoint-add-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/add-slides.yaml", "powerpoint-insert-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/insert-slides.yaml", From 5736240e0464d3a26c3a44ce1be1073c5b431ddf Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Mon, 19 May 2025 13:50:43 -0700 Subject: [PATCH 620/660] [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 621/660] [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 622/660] [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 623/660] [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 zcmYMbbyQnjus)1?aVaiEik0H-?(RXYyf)lJQUZ8l8;_l9u_jkW_ zZ~n+SYxZn8d!Ctj_N=oDHxUOm5gT&QL1G)?XxPXI2;Arh2zUqx2tXGufV*jMeWO{mQI8_uA7$l;)RR zRzZm+(94LdGU80-)$lFPFp6|3Au5$vu&A7y?(6^d1aXi_Ty>X`lLy_ zokhAj7Db#gjGF!UUnX<~NSsU?Ra~VR*(;D9#?uzmqYcW+`!e);np^VY8qs1LEIeAc zzm2lZ?s;irDi>m>bPq#KRPQ3sY(Qib^~;!Mil!N28N~!0BFK&ost-z%e$)w)kyb%e z;j<}7ij9VK-t7)dgItYRw?-R?IFQ$bsG?@IS~>hKuHsa2LA=BXZ;OU#*L{=bI(NrP zUVXaiZ;2{Abw&bm;&0{+cpH!&0})@@eu`{FT~wm&^eLWh{p`SX z!>+pQuyFSp5vT{BT`3?ni+nyV&&^sTo|vab6daG}*Bx5WKYviAT?T4184IO5qrP2{ zwt~cJ9(}_@p_eTX$1Jmu@gL)hjh#s9c`knSM38D~wqmO9;n>C;z@Qx*Qzw8`rkw=_#J2;q>cVLY2XQC1Q%e zmQq_&zOVc5wkY#533E2P>D50}`Ns#n>Rss9sG^=1M;p*saPHxKOJ$-YmWNu1@8_Qb z`!hTbs9;1C;-)`XyhvEV(d=me4g`b;Eil0wI*_aT(ntJ}bOE ztX^#Z@K}hfAqSf6isiEeSYKpxVkyPaN20O}?1j9pW)F=QRpzs##KjA|3q2%4H(^#; zbK|+#dh|~tRCHR(Y$oNj-NuMpF#|m{{KdYnXhm3(mZ|1xoa@XDD6lbgtniXY=j^GB z0J&5Q*RBAoz*4G*fBsnPJ;p9*t)&rJf8er?soKOb2s@^5yvAfGDx=Wzt>-^~jRRdyh%i0cE*Y6)fgPNL|Y^FZ#e8pCW9ywKE_Iu zeY@(cr&wm?_?4oUEF!H{841g~O8Mv;j(8FEX+?BXL`Z|n3%cSWXNInb^P*5%3g~MA ze6^@MtpW_U0Fnp=DJakUGQ>>JLGbAO`uhL=((^wjxd*TdWO;OEKL zXVA+{;p>Cy<3D%M%gE{Li^HqstJnQM_t!S+-q%aZmxWiz>-nza>)mbd%XL=U>yPJ) z<@#5uFx>eVV_l8D<)41)9efi=dlo!=8r7Yd(*BG4fdk6!mBJz9353a^de!YQz}%h^~LH z=kT}qr`dg4zm^pY{3d_g&tm%Y;DFj)B2_ObTI8UuIaxeX2MSNDxH>1=JLeyj-sbq9 z&VPvLALs|qaULk30G2>pZ7?rtKc3-hOtAN)v=NUu-9^0($Tg>tTwIL3%3S5hz0Am7j*E$}Ac$H4X^x!~*^rENj`WG{z zMPriK=^cvjhO8ZdrOAw#HC&d-^JPxT021Ztot!Wa@A@e-eLDYF51()B5@~M~t1;rw z&s+u&R#v(M7f2n&z9IXj&Qy-Z3oMXDtV#yZkUtvDAcwDYl#v}+Bl1JoXN%r-F zAhN6*dkAZU{5|^V!$4qbZ_C--n53MgJehb*6-F?jKwLt=bzJe^oj9bkxu?f&FLFR% zfAFe6@U;&@xsOUmwEP8P^;7h3l(xi%3TSkn$PdgsI~_I(>)g*MeUEUtU???p45FZ> zs!!vQ3kml}nu2Z-(ltrj#SVJ->OnqlkNu-P=0!=g8^+}kVb8Kf+%GfI#s4z=vGQEpZ$NQx-{MVr zK}jV5+KznD6V97tDt=M&m+XM}H z#v|`k1fe}X%2hFHTP#1tXb+z0|b&}%L1IDL%asv`% zm?7b7Kc*3>vC(}n92}HLQb7%q@<_1O>IfpE%p7!U@63x&52Ql5XKW1Ch4CnTh}4v; zxY?aF2{%4(^WU__DgE7LKs?(I7*RmiMYIhA0WchV*kr5=u~Gk1rJj7S*~8+Rf3 z(J(oL1Pe(@#4ST|#MF%T@LMw>z#cKQ-rCjRQl^>dS8g?5S&JfzS^Fr$^eMazkb zBuwn=gZ@W+_GMHp;9Vfr(|^jvbjSavUEKF1%@uq9Kl1Oo1gIls#0YLZ06Hw6;-1?* z$6w=NYB+k&@8N!;WD#u9gIuZoI+9L?Tyi9tM zLJ+g-0l|+x^0BxGkkBq6l7|!_gB0Xytwc66VaAN{wY06~Z(T9RL`Ne6RfF7BuEEmP zUJ4WOQ1quU1>Q`Oe$NS1bXdsuLHuXQQ-x8xSI=fn)A2( z-m6x6D({P}5n&gx6%)(lOO-rpN{GY*goO_0mWL15ljp~QaD{h8P&}qY)if$&K`~)vvl#TiiBLhK| zdnxB<+Zjkl##l8i4b(|SD(Q_VUHQtz`#PyCTN~u6eYqb@VsNW!Jo`3Cxn6EEsnjgl zWZ)|*K?Z`rhWkl-aGXe(-HR3{-`Zw$>Jg6sfeIr7xy867ryfFR(-pc;E`Mx^ z@5=OvN9^i^5YRb1Pp0{X`W-b#6x{76RYXXfJhN4?`&?&D@cQc1RKoOe2?bazY<0Cs zv*6pf@>}$2CP1*yjj#)fjPGybO;u^v_?elc1LT?g>kYiu1KvQ621u#71i2$M|H6XJ z>l1v#_*1fh0B;fN@y&1Nm*%rHNG!^gs`73L(GETwfpfR7Nqg0#?yzc=SHVi@4yxjsi6Khy^CQ`&=#u$2;4Gh#_VO zvWOODj?!U&DzQv1qVn=iu=4g@OELBEVADqQjMBP;l4`|T&+Ra}YX0BY@hgt3^V5{Tt%psJFpV^c+7=nZojc= zmb!^LA6M2s!H)_Hd6$MywqQppkyj?Q6+I0t)tx3@=qQ6bq;*ha$)Ih73L{^zS(9l8 ziTb(30&$2qb>H|GJcOHWS)s%H+qkl~c$z!ta8K1U_ZK0>-NV-~sJo2=!Nrq%MsTpz zgrB%i1EtWXolf<9h91of{|9XVT0A*)cVG};_np_(ZXi~`!7#BM-<{HU9j+`kszK+kl}~i>Yf%N_d{ z-MqRCp@VQ+4hVC=(v#b_iv zlN)NmVE#kJ{;UU~WkL0H0*m<|z0!gIH+7F8N0kHz9^Y{#oj`VyBpZ)496~nMnsDvz z%eCAjJ*41iUOBL`%|%Hu0etQ#(iXBKyG%Z4 zCR#3NiwoO}mYm%HDT`S-56)Q?J%%ya>)g$KQ=N9^5o~RX>j8?3AM0S?uVVSKY0-VK zWNe>czqoW-*Y{BnBrv+7_E_!lRncNVWP%kCZYwOQl5|h6?S#pCbk{7iN~fZvPxUk@ z&E4=`es7C|I&SUnPc^kSU0b#PXnXjvOGnkE>L@nd245zK557)JY5cFwk+lE16Y#|1 zhb=GXf~QoWvldlKNjCxuRM2`h5e)Qhz6|Oa;KK*~2*rS0cDzl*A}6e{>HY>;AB75g zYs|sX`1y#J62#jGjOwp8%`DKpbS-83zGNPT2))Q941lZ(2AbqD0f0ydR>J_9t6?=< zONX}99D}YuS-SV^bYq|gp>Ts;_Af(wuxERLM)(=?} z!R^AN7@T^@-SpQQAX*>nIjI#q5y}Exw#ulCM@CP6uak7rD#Z3SYWt@imdb8{1X}Fp zX011TMSPME9ivEiq{gsl)sxP42U)oJF&{mEwMJe1s z-}To4H}xXF$xwwTGk>!!57ef$8yv4;h+>~1M(dqdTdX5Z^dL+{b!^{0`dHiEJ0I^J z(tz+=bOtBCbzgsdKVX)%nf$XVC!iY`yT?!>O{pTj6#V>mp*LJNHsK~h>wBs?*Puw_ zl=o#xs=_-J&C#gSMj8O*6pEQ!>tF214>n=C{T2MnxvKA#t zS6s*}F6UTAB$quh%~`XvJlEMRZX%w+-zt!asyM1fY$oIH0q!P5yciSIZGfb>$cc8u zeJZvPb;tLJ(E-&aM1X-L(&y{PkWa<w=&Hg$;RhgHu7vP1$eUEkk3DzkPs zHtf3ez0<*`s)H(RBI^hQ2mB(;7<>RVetaSw;rTd|phRzx_>p1|SwkR@mv#u8#1;#V z)O8Tth0;e5P4tC7VV!Z(*)13P=qbl=Jc&@Asq0&TzSr3Q^^sj>k%S?#Zf18!+2G;k(r>^)1GBv-vE6}C`d?`-k zXb13g!}`bEjT}iuoKqP?>38+(M|?E|Uj8(-zMQkhTdro94K*1$zjY#2;v{5h_?Mux z2z02LI{rEyhVRKx(4);H{Np3&#swNA5VDs45~H;_7ooB|dGTvdw`ocnTbTZ)&~5*F zxC4AOhw32`>iCm4)Pu%NQqGPY1D4T_fgFEpf85N4mW%7p5Mh6wR9IPP$2`&b77HnFJsgwS{i4WFO5DG!m$auX8+tB4Sq-Nv;ek)7?Tg2?Qo=+Q~jL6_!Cr8j+neAz0JY5y1rm{j6mqCOsVlP2!Y_^G0O+429gf|fYN5EDd7D2eL6{ieLH~`2qbZGgKfhbRzm#f~eiMm?}Re*37vg8!K86 zb7Po|0ZHKAP)o^Jk$r5t*?C4YOALH_{4+Jc<*%#bEPxWmDW1u?7}pwE|NgwX1L>*K z;qB?VFbHPo@Kkl|Fw!>IcKPVNGhp3}2q<-fc7MqnuFkF9+>hbd&yJjQe0_-&=a?xt zC=K}>1uHr)AYRrCs46uj?J0f({G+QB-_Dic)Wu@ARlkG%?)P=NncVV#LOM_mYnMm8 zmYZ)4EE8zb#e*Y(efmcxy6*!YgWcA%PUhRV8<6{7E4_d^Xw&ml!vTkf`L?Rn(-+@D zHD^AiH_YM z1}LQ;sNB-fJGk+{IWAHc=3tze#^huQOe0KgFE)TuhhOb{suSRNJ8;)j=cH{lR^M#e z2bz#47gr2QY=+f+jB2-#3%a<)Yhu}S=I)Zg4)^tJmED~VAx>lWXTO|&OPgX7=qF-$ z@xc}QQfCulaJ?D>87pg}!Bf#|>`Z1Jt712DGzYusZyR*l&4%c*4c!fBeFtsmlb)QR7~tP zESEwQOSMF2R)$h(XnQ}$V2|1#V=bmd84KkJzzB^0q*pZdB;S4I*hFe{5nQIs;Lutg zK+XV4k)A_>FD~fM3(}zu*s^0-Eu39is0;CHfX#kwL$KmKiL z4DAH)3v61i-g7BDj>Q+zbj<1c`YN5nZMl=i_NmCC8gEFP)u_U*tO{g0ruSbHvD++K z={G69l0{|X6+G3=a^anRl*SAkJxfhZ<;CCfd>o;of-}>>VjSef!`X~ zr?9Sr>$#;#P(n;iqNF;*^@z>*T?M)}$!DzOQgrr?)Zh`HoQ8KasRQRpj|gI0?{pG0 zaW@~H*K{<;>sPx>K)E->RVL%-zmwn15zykPzQ=3hI|ED}dEFcESOkfS2cg$`#rRKc zmNP#*K#~3tz#-U(d7PE6DlR0s{-s6WSeg>lDf%lRIf`iuyp-+ww~~}O<^F!6x`mY$ z-jYrYpD{*I)Lny)33=Ytx=$tWb0?Rs*<8=2iAgcAObQfLzkeIxY(20P#02BnP}VLQ zRZOFyIEC{H%3vnSdAI(Lg$JRE;&xlB_h*h0dBoq1CrJiIN(Jro40PTt4-{npp&0}6 z*i%evi+Gp?t6KXS+~2i3@aa5^6P2Vx+D&b@>SF^^JT*#~ zL6Yy<(aCoO(4QcUamBUUw-5gQWdl}wOXcY2ziql`%5nM1obBRn^KGhgh1F9#S{OgU z#tt}h;QpddH8hGn58;>Cux=t-l@KS<#AR#)rI8#R?i;twuo(miFs;-w#P}_IWfTcu zRn4ql9=OP8r^sK$pjF52LZ`vidpasYZ_;!XWF=fysjIIqFV9y*<_%)9KJ?fB=TAF6 zVz%MEiQ9hXV6NM*%M)>2;N$IyF1Ba5N3AXis8eQ$8b83aKQ(O4P1;DqH31IzRf|GE zCY_a}XLECnyiXKYw7-17HP-@EroCJM(wF-B`JS7o0Qvi@fj1)!J#K{*;@_v>G` zRtQB|Eoxo-6%MDBxM2**CCSy~k=iCA4yf&Gg!BrbR4fP`G#jN zk48QC!r}Iad0e2z6#KbTX{irG02T+ziw`C%nUs#jkZCIS#s;Q-TwdF?A#1BAd`di(s4hX* zdy2qeZT{#J^|D7eXTnCLb8#D}W;c$PQ=MRSgqG-*eQTTlw4VL^Du}bPEYj{+;TIh2 ziWdEG;0k7eYOGRkJIJD2*|sgDUs-@+aP%BlS5c&$oVZpW>pUd;G;@y)DC29OpP`O@xB(XEF`b51***re-Y(;IZ9>QNRvN7!(N7&qtbZ%!^{be${WAMV~W2_ z-yGBLI`K0%Hng&)^t7o>tdfc-JU9rT1*xrouw5CCnQ1VV&#InZC^|hRf?5Q|8tI;< zbbBZGrxjwB12ff@#z8s@OtP!$INo-+_vq(VH70MG0>+nflOHoYy{?|OCr_BefBSyl zZi4h<2vQ6x9k=rnZ}ec*4u)4*C~Viev1N$rKUO;tES(K{ay^z#YAuuwmJXb+xWrUyMuvDL2yC20CeDL&<1s$G*voHU#3tzbTtX#_ywx2ThK`!U0#-oYeY$741 zw6dG2?iWRBpQ4Gu;zSouf*A(GOVIg1>MWBRd5_NvE*rBDL_DFQkH*PKG&r}U_i+yO z#$!o<5>B^|%%Iwbzw1maUp{qte`f5uPhIt`W+VBa`t zAi&eZ+7!GDLZ{dN3F9yW2*T7^_Sdux+^&)fbqj8$6<3s<`+1eky;hHD>9c8vkzP}- zw0CU>bL%TfSG;Wke^xSzLG>2KlwpW0?D#p4YZFmtR-i*!FRJLtuKm-9pQ& zk#e-Kq7&PM-ZdAhAR*7UhxQ@Rc!bG(WI8A;#@rxa8Ft81S%WMO1Q>c;lI%?qSwkP$ z#}e?A&TrLE(s?b%0s*F9PqFIeqyd`*tc*%sq|j3U`PaJ;}DJnQmpQqD~W7(((bi!F>R(mg6gvTw(9sxD4d?%C(J*0_-^M20_o7Q}@ z;C-!!x$;L?Pr&p$geV7dL$8@tQjJdN-O^ zZk^C~bu}8PD66uY$T|s=^A~BkC#@c{Of;!70?;6FD`>PkZSVqQZS*wQc7J#y;PKgK zZom!z=QAw>b_>WOYvFy@U?I)^@qS@Jt#te@w1il18hd!t&;tLXIyzMc+1Dp#5MJp1gmzFzy;@0 zi46q2HR;Vo5hEVhDk)kQG`v72kSx8koatmiI(E{(YP%W2ndcV^Czqi3;<5V27`%1< zr<0Qat+Qry)e!;g>Q#7^VV*5@HP`G4&M&uCpkeE)yp|iaw*8O({;ie~kthE)vC2Zw zDFa{-4KdC8pi5luX)fb4H*9Q+%^=I7PRet0jY9z;?u`t;Z~zh3`|d6Y7x&(J4^rkX z%Ci`b^q64n?%v$k0Z@@}eU>+Le7CREK^4ovdSY1(9Gj{5W+C6D*u!z>a3}<}Xz}ImDQVPsF*B-t4}mddZ*K9o$&xte z?>5?zC8S)dFouG$4(nc1y3ZMk-vS+Xs!_Gt)IG9#RelHZYk&w3f&`)%RNAbVc-LL6 zci7u064qkTRdL4syOr?8h%n*e9+tvWiI{4?<5G{)(FL5T-wSxEPLcuWs`fq01HTPD z`02WzJx5WxK$hw=E|oCjhhp2M<=*2?V0lXX^!3s3U2wTvn}(w#!_dtvpsLh}w5*%* z%$&;{pd-XIv#}7sqs=i>_Y0s3S?m-z0$`smF|Z)>uE!ib-Bm_Mi?TS)dq?7{%q@D% zaeA0zkOHq1%;-7RR+&piMr;XoaS{bz-29h&wx1y&&Mr`_qV4X#7RO*bA?YkLu%I`W z@oP^(flE;A=|pLEyGlc-!fJW#fswwLHoG{P&f97@@zF~y#H_gZka`rYc*$)jaM(ep z$)W+`^6UcJ4T?yp)Z>p7x|)SBIG18MW^&COt7(>BsYS zpA#48{-vitpwyQ41#hS&)5ueJ3-rD&>xNj*^#Cl;uHwmCALz*7%&@%ew3`9@qNKepgXm;k zm&qeTHTmQV))KI{VT6P?A+Dl0WMPE?X2qF}a*7SM+8o!Fe>%xb#Eo8!YY1UK%k<`q z{Tc~4(>S#nM_!G&#iRInqvcuqMMrFL^pxoo2CwZ!<}>#qvaSU7I48h3YN}lFE8U6B0RZGg+phjO&VX0X>cz&Y0s)HuDVsbK&a%Wpg>)6(73XG zmDK}D5h`oEs7^P!=lqsMKXfb0S{r@Sfj4=*d;1(7bp%$YTntrFMGdP(pSpGWyD>g> zb%?*KxB8w3u>5*YxX@ea-Pi~<|HFJl)ygCyOtYk_(E~?nw=KV{6huv6yh#%5*uEwAYqhx~it@NklMWP+IvW^^w&sJ|%iYs^ z&DKb$X`VQ{i7?bel#*8N#zk$OBG14`r@Dff2G!5%UCw(K3!{zgxVLDWgP#sf53H&w zuQ>=gm}?)t3}@UOTmZVC<6xCq#{CW7% zu|pS9Xpc8A<_iMOz$;lv(J&9n)FEL_DFIH2u3T7DR26$Jj&7K1%MH- zVq^?{FB-a<=ORyl7mOHfNz2+r&tix*UBp;73y9C5AQC^W`*nD@;e6v!^+pNtR8-ge ziU{58#ch3k--Y$K%=W*m5DGy~9-XNgQm2c-oA~iJ*gr}CqH~qZq79ncvGSNR=N9(J z^sS9{XLzqD;EpCjhR2e7n^23Vf0c~69r~_OsdjHD{xK$bOa>9vcF|45OjX5xBMdT| zH2)UV{S26t852?@7=FY9C_OIPRdw3};BXV!kVCtp7CNO>do7JhL0sn5qf|Crof!_xg4 zlI!(0TVKTs6}ORqWfW7A*)wok#T{bk%mb>Vo4A@RUn_O5tNe&x$3)Wfv31o+{jkG? zVAJh3aS!++_m!QpFWDaOc$2nze7L_TCu?buQWDSFkyo1?=$Jln$anwmS798D0 z8A(naw*S=W=?Og;PJ{_2TR})n=quEuEuk`qaE=?|S=ZwtQL*4~>2B=w_%WaJ3Ot8G zz!Hz1hj6H9^zirH312kK_}Oj@5nw3>}m4M@NZ2YA&t!pqEb&o+UsG_iK{A+t0wY;wp0|NOt+Ga*exM;SSgZeK7BWE)VlQZTYyz1HyC?%dirZW-AwcNIpoV zJ-|Ax)B4Fe3~sy_nZ!H8Wc$|Ow9;s|hl7mYZUGbl5-Olj^gN)Gq5%v&_ts(vn(O&{ z!$;?$^O$UfEH9-sW#u|?LwzA~0u!A_T5>~b__xA9W%`_v(b7pDUjC*CD{=pUwv*yk z7S0$hnEF{wWvt%brqtGFS)GV<)#2RUFQU*vGseBj=kz}!yL9~z%Ly`5&y?EuvGcfi zVcrVG78F{Y1!T#kg29XDF7tIMoZl5m71~74Djc*uY*cn6RH%%Y=j%kbdnq1^~v9Or; zSce}A7z)zZSo0#MU0<)hi@&=Ovq>!8P`OCc(3 zOnzEmbpr_kLSxfgIc@?FAzKcZnt|WybIVw@DT^6$snFJZULzwoIq@D}io=(;RvAxf z@m?cMDKm9fs@avHY3c1jxrq_|n>hcwlAFPHounfxUE}-Fi`DTVNf-y8Pwa*a&==7d z7)mH6Mm+a2GGwPvuWtS_JH+Iyq=gfeBl;lAXu)G^cnVIF86yL|cl^e{=VJoKoTwd% z`6Wq#b(hD#QzEbZ38xdiTqx<^yH(Vfy6m>Qy;?T^)o&aqe2Yw$G6#$SW4ZGZLo7df-`T`JZ&h$NqM_foUX7jP(bv`pc99Q> zw+@Z`VVA)DOt3cx$_&zB?uzTXpFC%O+ujoQ*t6(rdA|JV*Fy2H)(yw_aWtF!&kX2N zs51I&rhnwuAc*Ib5w61n~g-sPA6{Y1#!EsWo4zj?}Irn|qGv0MfODVs0Qs!pX~HdjqCC)-VN4|)qs zlR5l>P&C}r8UE8R>}&*9c233f`Z#T=_p#I?%F{$oCkJVH9S)0^V+faQ5`2#p@ekH9 zv+B)C-{ESn0+p#V^RH!R=ZXEe#Q(zT5SCsz6ces3Y`Q8pT$)}qCx;!-bx!&YNlPL@ zJdMar2ebP_+fWnU0OjtPLYj#CkK;)+PADo2z$mNp-s|S8pWc)U-`HSUUM6fAZ&Kdg zC45#CjdWM2?L9x$#(PCUPJh{#2}8%pAD=r(g0fpd`k-X2iu>(lK_isEI759u%od!$ zikdtl_fJ@FmL>CON#0KWDU=`$6kTYo$Y!g;Z2Wx*l~QQvG^dMT#4<3cuGb22!{g`*hnokxZ@^%1+D|tm zg_gQaY|ymBLf0jAsO5VX?et;pzoZ?MVC+_MU!Tvy57x!00a3hh;5e&h(Md}O3oIFy zPRE{oMYIGm|PC0gt>sQ>UDWPLr zW?~_h8gBcgrK8&7X-keCBajG!6uO;H}~;0_vT#dIUW`iVacoP6hU7jr?xD7QyH zjN=ZSYC+HW!e}IPUa|k9Gv@P8p;S-i7FUK(lf0!7G&Gd7!}?!KYKFv@@n=_3kepCIe1#NRA--wkUav10hH;e$z3TkZe;58VhK zmFxhB7ln)rM{l2_`RkmLY!egya|_-lFFBkHL4M!TC+u9>ew!qu zIeBFhrm=_ca!YH!=$vy&IX7^6aN=2a0s1;uPOE(7_nD#Z0o-qtO7M z_wyk59EY^&*!UkNYEaLc5Y48APrQhrvegv~S9G=jFFGOZ!1%FM1J{`pTffKKvSS0$ zw>|&Xyf6N(s5TBs8}#G7HJxWuWQ@~Bh+8PuTc+x+%i5qqo#$pU(q|u?Cg3n3ZWAP5 zNMArJP_ON8Cv<@+|J14TZuZvDP2gM)wH3I){WqlU%IMw0XIex4YH!-7Oto$e!c4;4 zdFvKhL=&?YK^!P`&|N7K0(;Ar@-1(Ok>PIguum!ATBbZ9uhB>G*g<57x(W4ks6VLT zpOs4vv-8Y{s7cMU$AkUvl>8j}5O&;(QIvAO*L&0z5^@@{m)~zb8s=KO#p<1oGj6;1 zwVqCQl5EjCL)4X95*>mO$g?!*DQ2)X6FqWGNTRG}Pfu^nW6Z*;Zto-V>eytq;tsxf z^Tq$p(uU{F7UZMy0(a3Yc_PcZP4cPTo+s)dE`FaN^z2{bE&-8S9hgRf+f`L87cS-PUAM~Ow2Te!~u!E#n) zDHN~JZv@(B5~MmN`Z=cj58lL1%#WhYej~E?Hl{1o96+XBo}oO`2Cl_v?JSiE-IkW& z!JNXW#B&Ul9+E%eU#){Ew|JcAW~QsZgo%u+hUYBPe%cL=|by9GbYZCFm?BVilue0RxL@ zSu=_eTT@T-k|&3MnTV2Bgybd7fWsrr@oiBs-=bal7FYGCoL5-$nXdHe<%cF(wfS1i zfC@|gQ_4YlG4+MItcCcCDy;3o{JHc%$meIWCPb%tWX%7)8VBxh(LjWPFy#Q&!Ve|ifhbdyGUFa{U75rJ_{ z-hg*q@xc_P_}Kra#RC53riu6!eCDQw*a(((H$dvJ0C!rjf(P8$5Ea44?$U@|U@i}i u|8YpLl?MspI@r&Hk@9~*1;5mX|9|7bpX|Ub9^!~>;7bo?G-a3nn*KlGbN5XE 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 624/660] [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 625/660] [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 626/660] [Outlook] (roaming settings) Update sample (#991) * Update roaming settings sample * Apply suggestion from review Co-authored-by: Elizabeth Samuel * Run script --------- Co-authored-by: Elizabeth Samuel --- playlists-prod/outlook.yaml | 2 +- playlists/outlook.yaml | 2 +- .../10-roaming-settings/roaming-settings.yaml | 17 ++++++++++++++--- snippet-extractor-metadata/outlook.xlsx | Bin 24519 -> 24576 bytes snippet-extractor-output/snippets.yaml | 14 ++++++++++++++ 5 files changed, 30 insertions(+), 5 deletions(-) diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 5a6387387..0a11cfd8e 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -1,7 +1,7 @@ - id: outlook-roaming-settings-roaming-settings name: Use add-in settings fileName: roaming-settings.yaml - description: 'Gets, sets, and saves add-in roaming settings' + description: 'Gets, sets, saves, and removes add-in roaming settings.' rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/10-roaming-settings/roaming-settings.yaml group: Roaming Settings diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 264640e55..00c0262b1 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -1,7 +1,7 @@ - id: outlook-roaming-settings-roaming-settings name: Use add-in settings fileName: roaming-settings.yaml - description: 'Gets, sets, and saves add-in roaming settings' + description: 'Gets, sets, saves, and removes add-in roaming settings.' rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/10-roaming-settings/roaming-settings.yaml group: Roaming Settings diff --git a/samples/outlook/10-roaming-settings/roaming-settings.yaml b/samples/outlook/10-roaming-settings/roaming-settings.yaml index 1b15c078c..5834cfab5 100644 --- a/samples/outlook/10-roaming-settings/roaming-settings.yaml +++ b/samples/outlook/10-roaming-settings/roaming-settings.yaml @@ -1,6 +1,6 @@ id: outlook-roaming-settings-roaming-settings name: Use add-in settings -description: 'Gets, sets, and saves add-in roaming settings' +description: 'Gets, sets, saves, and removes add-in roaming settings.' host: OUTLOOK api_set: Mailbox: '1.1' @@ -9,6 +9,7 @@ script: document.getElementById("get").addEventListener("click", get); document.getElementById("set").addEventListener("click", set); document.getElementById("save").addEventListener("click", save); + document.getElementById("remove").addEventListener("click", remove); function get() { const settingName = (document.getElementById("settingName") as HTMLInputElement).value; @@ -16,14 +17,14 @@ script: (document.getElementById("settingValue") as HTMLInputElement).value = settingValue; console.log(`The value of setting "${settingName}" is "${settingValue}".`); } - + function set() { const settingName = (document.getElementById("settingName") as HTMLInputElement).value; const settingValue = (document.getElementById("settingValue") as HTMLInputElement).value; Office.context.roamingSettings.set(settingName, settingValue); console.log(`Setting "${settingName}" set to value "${settingValue}".`); } - + function save() { // Save settings in the mailbox to make it available in future sessions. Office.context.roamingSettings.saveAsync(function(result) { @@ -34,6 +35,13 @@ script: } }); } + + function remove() { + // Remove the specified setting from the mailbox. + const settingName = (document.getElementById("settingName") as HTMLInputElement).value; + Office.context.roamingSettings.remove(settingName); + console.log(`The "${settingName}" setting has been removed.`); + } language: typescript template: content: |- @@ -59,6 +67,9 @@ template: +
          language: html style: diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 82e39008fa08ab7a41be90ee12292607226ba1d8..fad79065637fb701a81f59c9354dfdba8f6ea385 100644 GIT binary patch delta 5657 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�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 YH144R>LWrDRE?TMa1)N0{%7sK05^fASpWb4 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 5f815d65d..fc5410f5a 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -14387,6 +14387,20 @@ settingValue; console.log(`The value of setting "${settingName}" is "${settingValue}".`); +'Office.RoamingSettings#remove:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/10-roaming-settings/roaming-settings.yaml + + + // Remove the specified setting from the mailbox. + + const settingName = (document.getElementById("settingName") as + HTMLInputElement).value; + + Office.context.roamingSettings.remove(settingName); + + console.log(`The "${settingName}" setting has been removed.`); 'Office.RoamingSettings#saveAsync:member(1)': - >- // Link to full sample: From 8d006029dfb82800dabe4d47315df72a6e557170 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Sun, 20 Jul 2025 21:57:33 -0700 Subject: [PATCH 627/660] [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 628/660] [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 629/660] [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 630/660] [Excel] (Chart) Add leader lines snippet (#992) * [Excel] (Chart) Add leader lines snippet * Fix minor bug * Adjust comments * Run yarn start * Update excel.xlsx and run yarn start * Incorporate copilot feedback * Code review feedback * run yarn start --- playlists-prod/excel.yaml | 9 + playlists/excel.yaml | 9 + .../excel/10-chart/chart-leader-lines.yaml | 185 ++ snippet-extractor-metadata/excel.xlsx | Bin 29172 -> 29305 bytes snippet-extractor-output/snippets.yaml | 2533 +++++++++-------- view-prod/excel.json | 1 + view/excel.json | 1 + 7 files changed, 1558 insertions(+), 1180 deletions(-) create mode 100644 samples/excel/10-chart/chart-leader-lines.yaml diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index dcbbf01ac..a1229c67b 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -177,6 +177,15 @@ group: Chart api_set: ExcelApi: '1.19' +- id: excel-chart-leader-lines + name: Leader lines + fileName: chart-leader-lines.yaml + description: Show and hide leader lines for chart labels. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-leader-lines.yaml + group: Chart + api_set: + ExcelApi: '1.19' - id: excel-comment-basics name: Comment basics fileName: comment-basics.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 5892ba9e9..7e9d49ed6 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -177,6 +177,15 @@ group: Chart api_set: ExcelApi: '1.19' +- id: excel-chart-leader-lines + name: Leader lines + fileName: chart-leader-lines.yaml + description: Show and hide leader lines for chart labels. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-leader-lines.yaml + group: Chart + api_set: + ExcelApi: '1.19' - id: excel-comment-basics name: Comment basics fileName: comment-basics.yaml diff --git a/samples/excel/10-chart/chart-leader-lines.yaml b/samples/excel/10-chart/chart-leader-lines.yaml new file mode 100644 index 000000000..ad2ac18ea --- /dev/null +++ b/samples/excel/10-chart/chart-leader-lines.yaml @@ -0,0 +1,185 @@ +order: 17 +id: excel-chart-leader-lines +name: Leader lines +description: Show and hide leader lines for chart labels. +host: EXCEL +api_set: + ExcelApi: '1.19' +script: + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("add-data-labels").addEventListener("click", () => tryCatch(addDataLabels)); + document.getElementById("hide-chart-leader-lines").addEventListener("click", () => tryCatch(hideChartLeaderLines)); + document.getElementById("show-chart-leader-lines").addEventListener("click", () => tryCatch(showChartLeaderLines)); + document.getElementById("change-leader-line-format").addEventListener("click", () => tryCatch(changeLeaderLineFormat)); + + const sheetName = "Sample"; + + async function addDataLabels() { + // The following code adds data labels to the chart and positions them to demonstrate leader lines. + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem(sheetName); + const chart = sheet.charts.getItemAt(0); + const series = chart.series.getItemAt(0); + + // Enable data labels for the series. Leader lines are enabled by default. + series.hasDataLabels = true; + series.points.load("items"); + await context.sync(); + + // Load the top position for each data label. + series.points.items.forEach((point) => point.dataLabel.load("top")); + await context.sync(); + + // Move some data labels to create distance from their chart points. + const point1 = series.points.items[1]; + const point2 = series.points.items[2]; + point1.dataLabel.top -= 50; + point2.dataLabel.top += 50; + + // Format the data labels. + series.dataLabels.geometricShapeType = Excel.GeometricShapeType.rectangle; + series.dataLabels.showCategoryName = true; + series.dataLabels.format.border.weight = 1; + + await context.sync(); + }); + } + + async function hideChartLeaderLines() { + // The following code disables leader lines for chart data labels. + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem(sheetName); + const chart = sheet.charts.getItemAt(0); + const series = chart.series.getItemAt(0); + const dataLabels = series.dataLabels; + + // Disable leader lines. + dataLabels.showLeaderLines = false; + + await context.sync(); + }); + } + + async function showChartLeaderLines() { + // The following code enables leader lines for chart data labels. + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem(sheetName); + const chart = sheet.charts.getItemAt(0); + const series = chart.series.getItemAt(0); + const dataLabels = series.dataLabels; + + // Enable leader lines. + dataLabels.showLeaderLines = true; + + await context.sync(); + }); + } + + async function changeLeaderLineFormat() { + // The following code changes the format of leader lines. It adjusts color, weight, and line style. + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem(sheetName); + const chart = sheet.charts.getItemAt(0); + const series = chart.series.getItemAt(0); + const dataLabels = series.dataLabels; + const lineFormat = dataLabels.leaderLines.format; + + // Set leader line formatting properties. + lineFormat.line.color = "blue"; + lineFormat.line.weight = 2; + lineFormat.line.lineStyle = Excel.ChartLineStyle.dot; + + await context.sync(); + }); + } + + /** Create sample data and a line chart for the leader lines demo. */ + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject(sheetName).delete(); + const sheet = context.workbook.worksheets.add(sheetName); + + // Add sample data to the worksheet. + const dataRange = sheet.getRange("A1:C4"); + dataRange.values = sampleData; + + // Create a line chart. + const chart = sheet.charts.add(Excel.ChartType.line, dataRange); + chart.title.text = "Sales Quantity"; + + sheet.activate(); + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + + /** Sample data for the chart. */ + const sampleData = [ + ["Type", "Product A", "Product B"], + ["Q1", 15, 20], + ["Q2", 22, 15], + ["Q3", 33, 47] + ]; + language: typescript +template: + content: |- +
          +

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

          +
          +
          +

          Set up

          + +
          +
          +

          Try it out

          + +
          +
          + +
          +
          + +
          +
          + +
          + language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index e9eadafdcf4b2966270f94f341fb736dde32b4b1..ab89b7460a3921f4fdf8d7f326b0467ec25cc7ac 100644 GIT binary patch delta 19502 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 M4S_MlA^$1)8~6pPhX4Qo delta 19384 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index c03992d7d..d7d069fb7 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -16,15 +16,6 @@ await context.sync(); }); } -'Excel.Application#calculate:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml - - - await Excel.run(async (context) => { - context.application.calculate(Excel.CalculationType.full); - }); 'Excel.Application#decimalSeparator:member': - >- // Link to full sample: @@ -54,6 +45,15 @@ await context.sync(); }); +'Excel.Application#calculate:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml + + + await Excel.run(async (context) => { + context.application.calculate(Excel.CalculationType.full); + }); 'Excel.Application#suspendScreenUpdatingUntilNextSync:member(1)': - >- // Link to full sample: @@ -1258,6 +1258,52 @@ await context.sync(); }); +'Excel.ChartLeaderLines:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-leader-lines.yaml + + + // The following code changes the format of leader lines. It adjusts color, + weight, and line style. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem(sheetName); + const chart = sheet.charts.getItemAt(0); + const series = chart.series.getItemAt(0); + const dataLabels = series.dataLabels; + const lineFormat = dataLabels.leaderLines.format; + + // Set leader line formatting properties. + lineFormat.line.color = "blue"; + lineFormat.line.weight = 2; + lineFormat.line.lineStyle = Excel.ChartLineStyle.dot; + + await context.sync(); + }); +'Excel.ChartLeaderLinesFormat:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-leader-lines.yaml + + + // The following code changes the format of leader lines. It adjusts color, + weight, and line style. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem(sheetName); + const chart = sheet.charts.getItemAt(0); + const series = chart.series.getItemAt(0); + const dataLabels = series.dataLabels; + const lineFormat = dataLabels.leaderLines.format; + + // Set leader line formatting properties. + lineFormat.line.color = "blue"; + lineFormat.line.weight = 2; + lineFormat.line.lineStyle = Excel.ChartLineStyle.dot; + + await context.sync(); + }); 'Excel.ChartLegendFormat#font:member': - >- // Link to full sample: @@ -1365,23 +1411,78 @@ } await context.sync(); }); -'Excel.ChartSeries#delete:member(1)': +'Excel.ChartSeries#getDimensionValues:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-bubble-chart.yaml await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - const seriesCollection = sheet.charts.getItemAt(0).series; - seriesCollection.load("count"); + + // The sample chart is of type `Excel.ChartType.bubble`. + const bubbleChart = sheet.charts.getItem("Product Chart"); + + // Get the first series in the chart. + const firstSeries = bubbleChart.series.getItemAt(0); + + // Get the values for the dimensions we're interested in. + const bubbleSize = firstSeries.getDimensionValues(Excel.ChartSeriesDimension.bubbleSizes); + const xValues = firstSeries.getDimensionValues(Excel.ChartSeriesDimension.xvalues); + const yValues = firstSeries.getDimensionValues(Excel.ChartSeriesDimension.yvalues); + const category = firstSeries.getDimensionValues(Excel.ChartSeriesDimension.categories); + await context.sync(); - if (seriesCollection.count > 0) { - const series = seriesCollection.getItemAt(0); + // Log the information. + console.log(`Series ${category.value} - X:${xValues.value},Y:${yValues.value},Bubble:${bubbleSize.value}`); + }); +'Excel.ChartSeries#setBubbleSizes:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-bubble-chart.yaml - // Delete the first series. - series.delete(); + + await Excel.run(async (context) => { + /* + The table is expected to look like this: + Product, Inventory, Price, Current Market Share + Calamansi, 2000, $2.45, 10% + ... + + We want each bubble to represent a single row. + */ + + // Get the worksheet and table data. + const sheet = context.workbook.worksheets.getItem("Sample"); + const table = sheet.tables.getItem("Sales"); + const dataRange = table.getDataBodyRange(); + + // Get the table data without the row names. + const valueRange = dataRange.getOffsetRange(0, 1).getResizedRange(0, -1); + + // Create the chart. + const bubbleChart = sheet.charts.add(Excel.ChartType.bubble, valueRange); + bubbleChart.name = "Product Chart"; + + // Remove the default series, since we want a unique series for each row. + bubbleChart.series.getItemAt(0).delete(); + + // Load the data necessary to make a chart series. + dataRange.load(["rowCount", "values"]); + await context.sync(); + + // For each row, create a chart series (a bubble). + for (let i = 0; i < dataRange.rowCount; i++) { + const newSeries = bubbleChart.series.add(dataRange.values[i][0], i); + newSeries.setXAxisValues(dataRange.getCell(i, 1)); + newSeries.setValues(dataRange.getCell(i, 2)); + newSeries.setBubbleSizes(dataRange.getCell(i, 3)); + + // Show the product name and market share percentage. + newSeries.dataLabels.showSeriesName = true; + newSeries.dataLabels.showBubbleSize = true; + newSeries.dataLabels.showValue = false; } await context.sync(); @@ -1440,31 +1541,173 @@ console.log(series.name + " data source string: " + dataSourceString.value); console.log(series.name + " data source type: " + dataSourceType.value); }); -'Excel.ChartSeries#getDimensionValues:member(1)': +'Excel.ChartSeries:class': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-bubble-chart.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-leader-lines.yaml + + // The following code adds data labels to the chart and positions them to + demonstrate leader lines. await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + const sheet = context.workbook.worksheets.getItem(sheetName); + const chart = sheet.charts.getItemAt(0); + const series = chart.series.getItemAt(0); + + // Enable data labels for the series. Leader lines are enabled by default. + series.hasDataLabels = true; + series.points.load("items"); + await context.sync(); + + // Load the top position for each data label. + series.points.items.forEach((point) => point.dataLabel.load("top")); + await context.sync(); - // The sample chart is of type `Excel.ChartType.bubble`. - const bubbleChart = sheet.charts.getItem("Product Chart"); + // Move some data labels to create distance from their chart points. + const point1 = series.points.items[1]; + const point2 = series.points.items[2]; + point1.dataLabel.top -= 50; + point2.dataLabel.top += 50; + + // Format the data labels. + series.dataLabels.geometricShapeType = Excel.GeometricShapeType.rectangle; + series.dataLabels.showCategoryName = true; + series.dataLabels.format.border.weight = 1; + + await context.sync(); + }); +'Excel.ChartSeries#hasDataLabels:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-leader-lines.yaml - // Get the first series in the chart. - const firstSeries = bubbleChart.series.getItemAt(0); - // Get the values for the dimensions we're interested in. - const bubbleSize = firstSeries.getDimensionValues(Excel.ChartSeriesDimension.bubbleSizes); - const xValues = firstSeries.getDimensionValues(Excel.ChartSeriesDimension.xvalues); - const yValues = firstSeries.getDimensionValues(Excel.ChartSeriesDimension.yvalues); - const category = firstSeries.getDimensionValues(Excel.ChartSeriesDimension.categories); + // The following code adds data labels to the chart and positions them to + demonstrate leader lines. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem(sheetName); + const chart = sheet.charts.getItemAt(0); + const series = chart.series.getItemAt(0); + + // Enable data labels for the series. Leader lines are enabled by default. + series.hasDataLabels = true; + series.points.load("items"); + await context.sync(); + + // Load the top position for each data label. + series.points.items.forEach((point) => point.dataLabel.load("top")); + await context.sync(); + // Move some data labels to create distance from their chart points. + const point1 = series.points.items[1]; + const point2 = series.points.items[2]; + point1.dataLabel.top -= 50; + point2.dataLabel.top += 50; + + // Format the data labels. + series.dataLabels.geometricShapeType = Excel.GeometricShapeType.rectangle; + series.dataLabels.showCategoryName = true; + series.dataLabels.format.border.weight = 1; + await context.sync(); + }); +'Excel.ChartSeries#points:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-leader-lines.yaml - // Log the information. - console.log(`Series ${category.value} - X:${xValues.value},Y:${yValues.value},Bubble:${bubbleSize.value}`); + + // The following code adds data labels to the chart and positions them to + demonstrate leader lines. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem(sheetName); + const chart = sheet.charts.getItemAt(0); + const series = chart.series.getItemAt(0); + + // Enable data labels for the series. Leader lines are enabled by default. + series.hasDataLabels = true; + series.points.load("items"); + await context.sync(); + + // Load the top position for each data label. + series.points.items.forEach((point) => point.dataLabel.load("top")); + await context.sync(); + + // Move some data labels to create distance from their chart points. + const point1 = series.points.items[1]; + const point2 = series.points.items[2]; + point1.dataLabel.top -= 50; + point2.dataLabel.top += 50; + + // Format the data labels. + series.dataLabels.geometricShapeType = Excel.GeometricShapeType.rectangle; + series.dataLabels.showCategoryName = true; + series.dataLabels.format.border.weight = 1; + + await context.sync(); + }); +'Excel.ChartSeries#showLeaderLines:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-leader-lines.yaml + + + // The following code disables leader lines for chart data labels. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem(sheetName); + const chart = sheet.charts.getItemAt(0); + const series = chart.series.getItemAt(0); + const dataLabels = series.dataLabels; + + // Disable leader lines. + dataLabels.showLeaderLines = false; + + await context.sync(); + }); +'Excel.ChartSeries#delete:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const seriesCollection = sheet.charts.getItemAt(0).series; + seriesCollection.load("count"); + await context.sync(); + + if (seriesCollection.count > 0) { + const series = seriesCollection.getItemAt(0); + + // Delete the first series. + series.delete(); + } + + await context.sync(); + }); +'Excel.ChartSeries#setValues:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + let seriesCollection = sheet.charts.getItemAt(0); + let rangeSelection = sheet.getRange("C2:C7"); + let xRangeSelection = sheet.getRange("A1:A7"); + + // Add a series. + let newSeries = seriesCollection.series.add("Qtr2"); + newSeries.setValues(rangeSelection); + newSeries.setXAxisValues(xRangeSelection); + + await context.sync(); }); 'Excel.ChartSeries#markerBackgroundColor:member': - >- @@ -1598,90 +1841,20 @@ await context.sync(); }); -'Excel.ChartSeries#setBubbleSizes:member(1)': +'Excel.ChartSeriesBy:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-bubble-chart.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-source.yaml await Excel.run(async (context) => { - /* - The table is expected to look like this: - Product, Inventory, Price, Current Market Share - Calamansi, 2000, $2.45, 10% - ... - - We want each bubble to represent a single row. - */ - - // Get the worksheet and table data. - const sheet = context.workbook.worksheets.getItem("Sample"); - const table = sheet.tables.getItem("Sales"); - const dataRange = table.getDataBodyRange(); - - // Get the table data without the row names. - const valueRange = dataRange.getOffsetRange(0, 1).getResizedRange(0, -1); - - // Create the chart. - const bubbleChart = sheet.charts.add(Excel.ChartType.bubble, valueRange); - bubbleChart.name = "Product Chart"; - - // Remove the default series, since we want a unique series for each row. - bubbleChart.series.getItemAt(0).delete(); - - // Load the data necessary to make a chart series. - dataRange.load(["rowCount", "values"]); - await context.sync(); - - // For each row, create a chart series (a bubble). - for (let i = 0; i < dataRange.rowCount; i++) { - const newSeries = bubbleChart.series.add(dataRange.values[i][0], i); - newSeries.setXAxisValues(dataRange.getCell(i, 1)); - newSeries.setValues(dataRange.getCell(i, 2)); - newSeries.setBubbleSizes(dataRange.getCell(i, 3)); - - // Show the product name and market share percentage. - newSeries.dataLabels.showSeriesName = true; - newSeries.dataLabels.showBubbleSize = true; - newSeries.dataLabels.showValue = false; - } - - await context.sync(); - }); -'Excel.ChartSeries#setValues:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series.yaml - - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - let seriesCollection = sheet.charts.getItemAt(0); - let rangeSelection = sheet.getRange("C2:C7"); - let xRangeSelection = sheet.getRange("A1:A7"); - - // Add a series. - let newSeries = seriesCollection.series.add("Qtr2"); - newSeries.setValues(rangeSelection); - newSeries.setXAxisValues(xRangeSelection); - - await context.sync(); - }); -'Excel.ChartSeriesBy:enum': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-source.yaml - - - await Excel.run(async (context) => { - // Create a new worksheet called "Sample" and activate it. - context.workbook.worksheets.getItemOrNullObject("Sample").delete(); - const sheet = context.workbook.worksheets.add("Sample"); - - // Create an a table named SalesTable on the Sample worksheet. - let expensesTable = sheet.tables.add("A1:E1", true); - expensesTable.name = "SalesTable"; + // Create a new worksheet called "Sample" and activate it. + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + + // Create an a table named SalesTable on the Sample worksheet. + let expensesTable = sheet.tables.add("A1:E1", true); + expensesTable.name = "SalesTable"; expensesTable.getHeaderRowRange().values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4"]]; expensesTable.rows.add(null, [ @@ -3103,39 +3276,6 @@ const settings = context.workbook.settings; settings.add("ContosoReviewXmlPartId", customXmlPart.id); - await context.sync(); - }); -'Excel.CustomXmlPartCollection#getByNamespace:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml - - - await Excel.run(async (context) => { - document.getElementById("display-xml").textContent = ""; - const contosoNamespace = "http://schemas.contoso.com/review/1.0"; - const customXmlParts = context.workbook.customXmlParts; - const filteredXmlParts = customXmlParts.getByNamespace(contosoNamespace); - const numberOfPartsInNamespace = filteredXmlParts.getCount(); - - await context.sync(); - - if (numberOfPartsInNamespace.value == 1) { - const onlyXmlPartInNamespace = filteredXmlParts.getOnlyItem(); - const xmlBlob = onlyXmlPartInNamespace.getXml(); - - await context.sync(); - - // Make it a bit more readable. - const readableXml = xmlBlob.value.replace(/>\n<"); - - document.getElementById("display-xml").textContent = `The only XML part in the namespace ${contosoNamespace} is: - ${readableXml}`; - - } else { - console.log(`There are ${numberOfPartsInNamespace.value} XML parts with namespace ${contosoNamespace}. There should be exactly 1.`); - } - await context.sync(); }); 'Excel.CustomXmlPartCollection#getItem:member(1)': @@ -3163,7 +3303,7 @@ await context.sync(); } }); -'Excel.CustomXmlPartScopedCollection#getCount:member(1)': +'Excel.CustomXmlPartCollection#getByNamespace:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml @@ -3229,7 +3369,7 @@ await context.sync(); } }); -'Excel.CustomXmlPartScopedCollection#getOnlyItem:member(1)': +'Excel.CustomXmlPartScopedCollection#getCount:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml @@ -3262,34 +3402,52 @@ await context.sync(); }); -'Excel.DataBarConditionalFormat#barDirection:member': +'Excel.CustomXmlPartScopedCollection#getOnlyItem:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const range = sheet.getRange("B8:E13"); - const conditionalFormat = range.conditionalFormats - .add(Excel.ConditionalFormatType.dataBar); - conditionalFormat.dataBar.barDirection = Excel.ConditionalDataBarDirection.leftToRight; + document.getElementById("display-xml").textContent = ""; + const contosoNamespace = "http://schemas.contoso.com/review/1.0"; + const customXmlParts = context.workbook.customXmlParts; + const filteredXmlParts = customXmlParts.getByNamespace(contosoNamespace); + const numberOfPartsInNamespace = filteredXmlParts.getCount(); + + await context.sync(); + + if (numberOfPartsInNamespace.value == 1) { + const onlyXmlPartInNamespace = filteredXmlParts.getOnlyItem(); + const xmlBlob = onlyXmlPartInNamespace.getXml(); + + await context.sync(); + + // Make it a bit more readable. + const readableXml = xmlBlob.value.replace(/>\n<"); + + document.getElementById("display-xml").textContent = `The only XML part in the namespace ${contosoNamespace} is: + ${readableXml}`; + + } else { + console.log(`There are ${numberOfPartsInNamespace.value} XML parts with namespace ${contosoNamespace}. There should be exactly 1.`); + } await context.sync(); }); -'Excel.DataPivotHierarchy#name:member': +'Excel.DataBarConditionalFormat#barDirection:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml await Excel.run(async (context) => { - const dataHierarchies = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales").dataHierarchies - dataHierarchies.load("no-properties-needed"); - await context.sync(); + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B8:E13"); + const conditionalFormat = range.conditionalFormats + .add(Excel.ConditionalFormatType.dataBar); + conditionalFormat.dataBar.barDirection = Excel.ConditionalDataBarDirection.leftToRight; - dataHierarchies.items[0].name = "Farm Sales"; - dataHierarchies.items[1].name = "Wholesale"; await context.sync(); }); 'Excel.DataPivotHierarchy#showAs:member': @@ -3319,6 +3477,21 @@ wholesaleDataHierarchy.showAs = wholesaleShowAs; await context.sync(); }); +'Excel.DataPivotHierarchy#name:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml + + + await Excel.run(async (context) => { + const dataHierarchies = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales").dataHierarchies + dataHierarchies.load("no-properties-needed"); + await context.sync(); + + dataHierarchies.items[0].name = "Farm Sales"; + dataHierarchies.items[1].name = "Wholesale"; + await context.sync(); + }); 'Excel.DataValidation#errorAlert:member': - >- // Link to full sample: @@ -4819,6 +4992,28 @@ await context.sync(); }); +'Excel.PivotLayout#getDataBodyRange:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml + + + await Excel.run(async (context) => { + const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); + + // The layout controls the ranges used by the PivotTable. + const range = pivotTable.layout.getDataBodyRange(); + + // Get all the data hierarchy totals. + const grandTotalRange = range.getLastRow(); + grandTotalRange.load("address"); + await context.sync(); + + // Use the wholesale and farm sale totals to make a final sum. + const masterTotalRange = context.workbook.worksheets.getActiveWorksheet().getRange("B27:C27"); + masterTotalRange.formulas = [["All Crates", "=SUM(" + grandTotalRange.address + ")"]]; + await context.sync(); + }); 'Excel.PivotLayout#altTextDescription:member': - >- // Link to full sample: @@ -4889,28 +5084,6 @@ pivotLayout.fillEmptyCells = fillToSet; await context.sync(); }); -'Excel.PivotLayout#getDataBodyRange:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml - - - await Excel.run(async (context) => { - const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); - - // The layout controls the ranges used by the PivotTable. - const range = pivotTable.layout.getDataBodyRange(); - - // Get all the data hierarchy totals. - const grandTotalRange = range.getLastRow(); - grandTotalRange.load("address"); - await context.sync(); - - // Use the wholesale and farm sale totals to make a final sum. - const masterTotalRange = context.workbook.worksheets.getActiveWorksheet().getRange("B27:C27"); - masterTotalRange.formulas = [["All Crates", "=SUM(" + grandTotalRange.address + ")"]]; - await context.sync(); - }); 'Excel.PivotLayout#layoutType:member': - >- // Link to full sample: @@ -5084,27 +5257,28 @@ await context.sync(); }); -'Excel.PivotTable#filterHierarchies:member': +'Excel.PivotTable#layout:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml - async function filter(functionType: Excel.AggregationFunction) { - await Excel.run(async (context) => { - const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); - const filters = pivotTable.filterHierarchies; - const filter = filters.getItemOrNullObject("Classification"); - filter.load(); - await context.sync(); + await Excel.run(async (context) => { + const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); + pivotTable.layout.load("layoutType"); + await context.sync(); - // Add the Classification hierarchy to the filter, if it's not already there. - if (filter.isNullObject) { - filters.add(pivotTable.hierarchies.getItem("Classification")); - await context.sync(); - } - }); - } + // Cycle between the three layout types. + if (pivotTable.layout.layoutType === "Compact") { + pivotTable.layout.layoutType = "Outline"; + } else if (pivotTable.layout.layoutType === "Outline") { + pivotTable.layout.layoutType = "Tabular"; + } else { + pivotTable.layout.layoutType = "Compact"; + } + await context.sync(); + console.log("Pivot layout is now " + pivotTable.layout.layoutType); + }); 'Excel.PivotTable#getDataSourceString:member(1)': - >- // Link to full sample: @@ -5147,28 +5321,27 @@ console.log("Data source: " + pivotTableDataSourceString.value); console.log("Source type: " + pivotTableDataSourceType.value); }); -'Excel.PivotTable#layout:member': +'Excel.PivotTable#filterHierarchies:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml - await Excel.run(async (context) => { - const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); - pivotTable.layout.load("layoutType"); - await context.sync(); + async function filter(functionType: Excel.AggregationFunction) { + await Excel.run(async (context) => { + const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); + const filters = pivotTable.filterHierarchies; + const filter = filters.getItemOrNullObject("Classification"); + filter.load(); + await context.sync(); - // Cycle between the three layout types. - if (pivotTable.layout.layoutType === "Compact") { - pivotTable.layout.layoutType = "Outline"; - } else if (pivotTable.layout.layoutType === "Outline") { - pivotTable.layout.layoutType = "Tabular"; - } else { - pivotTable.layout.layoutType = "Compact"; - } - await context.sync(); - console.log("Pivot layout is now " + pivotTable.layout.layoutType); - }); + // Add the Classification hierarchy to the filter, if it's not already there. + if (filter.isNullObject) { + filters.add(pivotTable.hierarchies.getItem("Classification")); + await context.sync(); + } + }); + } 'Excel.PivotTable#refresh:member(1)': - >- // Link to full sample: @@ -5228,21 +5401,6 @@ await context.sync(); }); -'Excel.Range#autoFill:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-auto-fill.yaml - - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const sumCell = sheet.getRange("P4"); - - // Copy everything. The formulas will be contextually updated based on their new locations. - sumCell.autoFill("P4:P7", Excel.AutoFillType.fillCopy); - sumCell.format.autofitColumns(); - await context.sync(); - }); 'Excel.Range#clearOrResetContents:member(1)': - >- // Link to full sample: @@ -5261,22 +5419,6 @@ range.clearOrResetContents(); await context.sync(); }); -'Excel.Range#copyFrom:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-copyfrom.yaml - - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - // Place a label in front of the copied data. - sheet.getRange("F2").values = [["Copied Formula"]]; - - // Copy a range preserving the formulas. - // Note: non-formula values are copied over as is. - sheet.getRange("G2").copyFrom("A1:E1", Excel.RangeCopyType.formulas); - await context.sync(); - }); 'Excel.Range#control:member': - >- // Link to full sample: @@ -5297,113 +5439,46 @@ }; await context.sync(); }); -'Excel.Range#find:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-find.yaml - - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const table = sheet.tables.getItem("ExpensesTable"); - const searchRange = table.getRange(); - - // NOTE: If no match is found, an ItemNotFound error - // is thrown when Range.find is evaluated. - const searchText = (document.getElementById("searchText") as HTMLTextAreaElement).value; - const foundRange = searchRange.find(searchText, { - completeMatch: isCompleteMatchToggle, - matchCase: isMatchCaseToggle, - searchDirection: searchDirectionToggle - }); - - foundRange.load("address"); - await context.sync(); - - - console.log(foundRange.address); - }); -'Excel.Range#findOrNullObject:member(1)': +'Excel.Range#values:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-find.yaml - - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const table = sheet.tables.getItem("ExpensesTable"); - const searchRange = table.getRange(); - const searchText = (document.getElementById("searchText") as HTMLTextAreaElement).value; - const foundRange = searchRange.findOrNullObject(searchText, { - completeMatch: isCompleteMatchToggle, - matchCase: isMatchCaseToggle, - searchDirection: searchDirectionToggle - }); - - foundRange.load("address"); - await context.sync(); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml - if (foundRange.isNullObject) { - console.log("Text not found"); - } else { - console.log(foundRange.address); - } - }); -'Excel.Range#getCellProperties:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml + // Change the value of the checkbox in B3. await Excel.run(async (context) => { - const cell = context.workbook.getActiveCell(); - - // Define the cell properties to get by setting the matching LoadOptions to true. - const propertiesToGet = cell.getCellProperties({ - address: true, - format: { - fill: { - color: true - }, - font: { - color: true - } - }, - style: true - }); + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const range = sheet.getRange("B3"); - // Sync to get the data from the workbook. - await context.sync(); - const cellProperties = propertiesToGet.value[0][0]; - console.log( - `Address: ${cellProperties.address}\nStyle: ${cellProperties.style}\nFill Color: ${cellProperties.format.fill.color}\nFont Color: ${cellProperties.format.font.color}`); + range.values = [["TRUE"]]; + await context.sync(); }); -'Excel.Range#getDependents:member(1)': +'Excel.Range#valuesAsJson:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-dependents.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-formatted-number.yaml - // This function highlights all the dependent cells of the active cell. + // This function creates a double data type, - // Dependent cells contain formulas that refer to other cells. + // and sets the format of this data type as a date. await Excel.run(async (context) => { - // Get addresses of the active cell's dependent cells. - const range = context.workbook.getActiveCell(); - const dependents = range.getDependents(); - range.load("address"); - dependents.areas.load("address"); - await context.sync(); - - console.log(`All dependent cells of ${range.address}:`); + // Get the Sample worksheet and a range on that sheet. + const sheet = context.workbook.worksheets.getItemOrNullObject("Sample"); + const dateRange = sheet.getRange("A1"); - // Use the dependents API to loop through dependents of the active cell. - for (let i = 0; i < dependents.areas.items.length; i++) { - // Highlight and print out the address of each dependent cell. - dependents.areas.items[i].format.fill.color = "Orange"; - console.log(` ${dependents.areas.items[i].address}`); - } + // Write a number formatted as a date to cell A1. + dateRange.valuesAsJson = [ + [ + { + type: Excel.CellValueType.double, + basicValue: 32889.0, + numberFormat: "m/d/yyyy" + } + ] + ]; await context.sync(); }); 'Excel.Range#getDirectDependents:member(1)': @@ -5430,143 +5505,118 @@ } await context.sync(); }); -'Excel.Range#getDirectPrecedents:member(1)': +'Excel.Range#sort:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/precedents.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml - await Excel.run(async (context) => { - // Precedents are cells referenced by the formula in a cell. - // A "direct precedent" is a cell directly referenced by the selected formula. - let range = context.workbook.getActiveCell(); - let directPrecedents = range.getDirectPrecedents(); - range.load("address"); - directPrecedents.areas.load("address"); - await context.sync(); + async function sortTopToBottom(criteria: string) { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const range = sheet.getRange("A1:E5"); - console.log(`Direct precedent cells of ${range.address}:`); + // Find the column header that provides the sort criteria. + const header = range.find(criteria, {}); + header.load("columnIndex"); + await context.sync(); - // Use the direct precedents API to loop through precedents of the active cell. - for (let i = 0; i < directPrecedents.areas.items.length; i++) { - // Highlight and console the address of each precedent cell. - directPrecedents.areas.items[i].format.fill.color = "Yellow"; - console.log(` ${directPrecedents.areas.items[i].address}`); - } - await context.sync(); - }); -'Excel.Range#getExtendedRange:member(1)': + range.sort.apply( + [ + { + key: header.columnIndex, + sortOn: Excel.SortOn.value + } + ], + false /*matchCase*/, + true /*hasHeaders*/, + Excel.SortOrientation.rows + ); + await context.sync(); + }); + } +'Excel.Range#getMergedAreasOrNullObject:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-get-range-edge.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-merged-ranges.yaml await Excel.run(async (context) => { - // Get the selected range. - const range = context.workbook.getSelectedRange(); + // Retrieve the worksheet and the table in that worksheet. + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const tableRange = sheet.getRange("B2:E6"); - // Specify the direction with the `KeyboardDirection` enum. - const direction = Excel.KeyboardDirection.down; + // Retrieve the merged range within the table and load its details. + const mergedAreas = tableRange.getMergedAreasOrNullObject(); + mergedAreas.load("address"); + mergedAreas.load("cellCount"); - // Get the active cell in the workbook. - const activeCell = context.workbook.getActiveCell(); + // Select the merged range. + const range = mergedAreas.areas.getItemAt(0); + range.select(); + await context.sync(); - // Get all the cells from the currently selected range to the bottom-most edge of the used range. - // This method acts like the Ctrl+Shift+Arrow key keyboard shortcut while a range is selected. - const extendedRange = range.getExtendedRange( - direction, - activeCell // If the selected range contains more than one cell, the active cell must be defined. - ); - extendedRange.select(); + // Print out the details of the `mergedAreas` range object. + console.log(`Address of the merged range: ${mergedAreas.address}`); + console.log(`Number of cells in the merged range: ${mergedAreas.cellCount}`); await context.sync(); }); -'Excel.Range#getIntersectionOrNullObject:member(1)': +'Excel.Range#merge:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-relationships.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-merged-ranges.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const salesTable = sheet.tables.getItem("SalesTable"); - const dataRange = salesTable.getDataBodyRange(); + // Retrieve the worksheet and the table in that worksheet. + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const tableRange = sheet.getRange("B2:E6"); - // We want the most recent quarter that has data, so - // exclude quarters without data and get the last of - // the remaining columns. - const usedDataRange = dataRange.getUsedRange(true /* valuesOnly */); - const currentQuarterRange = usedDataRange.getLastColumn(); + // Create a merged range in the first row of the table. + const chartTitle = tableRange.getRow(0); + chartTitle.merge(true); - // Asian and European teams have separate contests. - const asianSalesRange = sheet.getRange("A2:E4"); - const europeanSalesRange = sheet.getRange("A5:E7"); + // Format the merged range. + chartTitle.format.horizontalAlignment = "Center"; - // The data for each chart is the intersection of the - // current quarter column and the rows for the continent. - const asianContestRange = asianSalesRange.getIntersectionOrNullObject(currentQuarterRange); - const europeanContestRange = europeanSalesRange.getIntersectionOrNullObject(currentQuarterRange); - - // Must sync before you can test the output of *OrNullObject - // method/property. - await context.sync(); + await context.sync(); + }); +'Excel.Range#group:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml - if (asianContestRange.isNullObject) { - // See the declaration of this function for how to - // test this code path. - reportMissingData("Asian"); - } else { - createContinentChart( - sheet, - "Asian", - asianContestRange, - "A9", - "F24" - ); - } - if (europeanContestRange.isNullObject) { - // See the declaration of this function for how to - // test this code path. - reportMissingData("European"); - } else { - createContinentChart( - sheet, - "European", - europeanContestRange, - "A25", - "F40" - ); - } + Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Group the larger, main level. Note that the outline controls + // will be on row 10, meaning 4-9 will collapse and expand. + sheet.getRange("4:9").group(Excel.GroupOption.byRows); + // Group the smaller, sublevels. Note that the outline controls + // will be on rows 6 and 9, meaning 4-5 and 7-8 will collapse and expand. + sheet.getRange("4:5").group(Excel.GroupOption.byRows); + sheet.getRange("7:8").group(Excel.GroupOption.byRows); await context.sync(); }); -'Excel.Range#getMergedAreasOrNullObject:member(1)': +'Excel.Range#ungroup:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-merged-ranges.yaml - - - await Excel.run(async (context) => { - // Retrieve the worksheet and the table in that worksheet. - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const tableRange = sheet.getRange("B2:E6"); - - // Retrieve the merged range within the table and load its details. - const mergedAreas = tableRange.getMergedAreasOrNullObject(); - mergedAreas.load("address"); - mergedAreas.load("cellCount"); - - // Select the merged range. - const range = mergedAreas.areas.getItemAt(0); - range.select(); - await context.sync(); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml - // Print out the details of the `mergedAreas` range object. - console.log(`Address of the merged range: ${mergedAreas.address}`); - console.log(`Number of cells in the merged range: ${mergedAreas.cellCount}`); - await context.sync(); + Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // This removes two levels of groups from the "A1-R10" range. + // Any groups at the same level on the same dimension will be removed by a single call. + sheet.getRange("A1:R10").ungroup(Excel.GroupOption.byRows); + sheet.getRange("A1:R10").ungroup(Excel.GroupOption.byRows); + sheet.getRange("A1:R10").ungroup(Excel.GroupOption.byColumns); + sheet.getRange("A1:R10").ungroup(Excel.GroupOption.byColumns); + await context.sync(); }); 'Excel.Range#getPivotTables:member(1)': - >- @@ -5586,38 +5636,361 @@ fullyContainedPivotTables.load("name"); await context.sync(); - // Display the names in the console. - console.log("PivotTables in the current range:") - partiallyContainedPivotTables.items.forEach((pivotTable) => { - console.log(`\t${pivotTable.name}`); - }); - console.log("PivotTables completely contained in the current range:") - fullyContainedPivotTables.items.forEach((pivotTable) => { - console.log(`\t${pivotTable.name}`); - }); + // Display the names in the console. + console.log("PivotTables in the current range:") + partiallyContainedPivotTables.items.forEach((pivotTable) => { + console.log(`\t${pivotTable.name}`); + }); + console.log("PivotTables completely contained in the current range:") + fullyContainedPivotTables.items.forEach((pivotTable) => { + console.log(`\t${pivotTable.name}`); + }); + }); +'Excel.Range#getDirectPrecedents:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/precedents.yaml + + + await Excel.run(async (context) => { + // Precedents are cells referenced by the formula in a cell. + // A "direct precedent" is a cell directly referenced by the selected formula. + let range = context.workbook.getActiveCell(); + let directPrecedents = range.getDirectPrecedents(); + range.load("address"); + directPrecedents.areas.load("address"); + await context.sync(); + + console.log(`Direct precedent cells of ${range.address}:`); + + // Use the direct precedents API to loop through precedents of the active cell. + for (let i = 0; i < directPrecedents.areas.items.length; i++) { + // Highlight and console the address of each precedent cell. + directPrecedents.areas.items[i].format.fill.color = "Yellow"; + console.log(` ${directPrecedents.areas.items[i].address}`); + } + await context.sync(); + }); +'Excel.Range#getPrecedents:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/precedents.yaml + + + await Excel.run(async (context) => { + // Precedents are cells referenced by the formula in a cell. + let range = context.workbook.getActiveCell(); + let precedents = range.getPrecedents(); + range.load("address"); + precedents.areas.load("address"); + await context.sync(); + + console.log(`All precedent cells of ${range.address}:`); + + // Use the precedents API to loop through precedents of the active cell. + for (let i = 0; i < precedents.areas.items.length; i++) { + // Highlight and console the address of each precedent cell. + precedents.areas.items[i].format.fill.color = "Orange"; + console.log(` ${precedents.areas.items[i].address}`); + } + await context.sync(); + }); +'Excel.Range#getSpecialCells:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml + + + await Excel.run(async (context) => { + + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const usedRange = sheet.getUsedRange(); + + // Find the ranges with either text or logical (boolean) values. + const formulaRanges = usedRange.getSpecialCells("Constants", "LogicalText"); + formulaRanges.format.fill.color = "orange"; + + return context.sync(); + }); +'Excel.Range#autoFill:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-auto-fill.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const sumCell = sheet.getRange("P4"); + + // Copy everything. The formulas will be contextually updated based on their new locations. + sumCell.autoFill("P4:P7", Excel.AutoFillType.fillCopy); + sumCell.format.autofitColumns(); + await context.sync(); + }); +'Excel.Range#getCellProperties:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml + + + await Excel.run(async (context) => { + const cell = context.workbook.getActiveCell(); + + // Define the cell properties to get by setting the matching LoadOptions to true. + const propertiesToGet = cell.getCellProperties({ + address: true, + format: { + fill: { + color: true + }, + font: { + color: true + } + }, + style: true + }); + + // Sync to get the data from the workbook. + await context.sync(); + const cellProperties = propertiesToGet.value[0][0]; + console.log( + `Address: ${cellProperties.address}\nStyle: ${cellProperties.style}\nFill Color: ${cellProperties.format.fill.color}\nFont Color: ${cellProperties.format.font.color}`); + }); +'Excel.Range#setCellProperties:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Creating the SettableCellProperties objects to use for the range. + // In your add-in, these should be created once, outside the function. + const topHeaderProps: Excel.SettableCellProperties = { + // The style property takes a string matching the name of an Excel style. + // Built-in style names are listed in the `BuiltInStyle` enum. + // Note that a style will overwrite any formatting, + // so do not use the format property with the style property. + style: "Heading1" + }; + + const headerProps: Excel.SettableCellProperties = { + // Any subproperties of format that are not set will not be changed when these cell properties are set. + format: { + fill: { + color: "Blue" + }, + font: { + color: "White", + bold: true + } + } + }; + + const nonApplicableProps: Excel.SettableCellProperties = { + format: { + fill: { + pattern: Excel.FillPattern.gray25 + }, + font: { + color: "Gray", + italic: true + } + } + }; + + const matchupScoreProps: Excel.SettableCellProperties = { + format: { + borders: { + bottom: { + style: Excel.BorderLineStyle.continuous + }, + left: { + style: Excel.BorderLineStyle.continuous + }, + right: { + style: Excel.BorderLineStyle.continuous + }, + top: { + style: Excel.BorderLineStyle.continuous + } + } + } + }; + + const range = sheet.getRange("A1:E5"); + + // You can use empty JSON objects to avoid changing a cell's properties. + range.setCellProperties([ + [topHeaderProps, {}, {}, {}, {}], + [{}, {}, headerProps, headerProps, headerProps], + [{}, headerProps, nonApplicableProps, matchupScoreProps, matchupScoreProps], + [{}, headerProps, matchupScoreProps, nonApplicableProps, matchupScoreProps], + [{}, headerProps, matchupScoreProps, matchupScoreProps, nonApplicableProps] + ]); + + sheet.getUsedRange().format.autofitColumns(); + await context.sync(); + }); +'Excel.Range#copyFrom:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-copyfrom.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + // Place a label in front of the copied data. + sheet.getRange("F2").values = [["Copied Formula"]]; + + // Copy a range preserving the formulas. + // Note: non-formula values are copied over as is. + sheet.getRange("G2").copyFrom("A1:E1", Excel.RangeCopyType.formulas); + await context.sync(); + }); +'Excel.Range#moveTo:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-copyfrom.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + // Place a label in front of the moved data. + sheet.getRange("F12").values = [["Moved Range:"]]; + + // Move the range from A1:E1 to G12:K12. + sheet.getRange("A1:E1").moveTo("G12"); + await context.sync(); + }); +'Excel.Range#getDependents:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-dependents.yaml + + + // This function highlights all the dependent cells of the active cell. + + // Dependent cells contain formulas that refer to other cells. + + await Excel.run(async (context) => { + // Get addresses of the active cell's dependent cells. + const range = context.workbook.getActiveCell(); + const dependents = range.getDependents(); + range.load("address"); + dependents.areas.load("address"); + await context.sync(); + + console.log(`All dependent cells of ${range.address}:`); + + // Use the dependents API to loop through dependents of the active cell. + for (let i = 0; i < dependents.areas.items.length; i++) { + // Highlight and print out the address of each dependent cell. + dependents.areas.items[i].format.fill.color = "Orange"; + console.log(` ${dependents.areas.items[i].address}`); + } + await context.sync(); + }); +'Excel.Range#getSpillingToRange:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/dynamic-arrays.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + // Set G4 to a formula that returns a dynamic array. + const targetCell = sheet.getRange("G4"); + targetCell.formulas = [["=A4:D4"]]; + + // Get the address of the cells that the dynamic array spilled into. + const spillRange = targetCell.getSpillingToRange(); + spillRange.load("address"); + + // Fit the columns for readability. + sheet.getUsedRange().format.autofitColumns(); + await context.sync(); + + console.log(`Copying the table headers spilled into ${spillRange.address}.`); + }); +'Excel.Range#find:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-find.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const table = sheet.tables.getItem("ExpensesTable"); + const searchRange = table.getRange(); + + // NOTE: If no match is found, an ItemNotFound error + // is thrown when Range.find is evaluated. + const searchText = (document.getElementById("searchText") as HTMLTextAreaElement).value; + const foundRange = searchRange.find(searchText, { + completeMatch: isCompleteMatchToggle, + matchCase: isMatchCaseToggle, + searchDirection: searchDirectionToggle + }); + + foundRange.load("address"); + await context.sync(); + + + console.log(foundRange.address); + }); +'Excel.Range#findOrNullObject:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-find.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const table = sheet.tables.getItem("ExpensesTable"); + const searchRange = table.getRange(); + const searchText = (document.getElementById("searchText") as HTMLTextAreaElement).value; + const foundRange = searchRange.findOrNullObject(searchText, { + completeMatch: isCompleteMatchToggle, + matchCase: isMatchCaseToggle, + searchDirection: searchDirectionToggle + }); + + foundRange.load("address"); + await context.sync(); + + if (foundRange.isNullObject) { + console.log("Text not found"); + } else { + console.log(foundRange.address); + } }); -'Excel.Range#getPrecedents:member(1)': +'Excel.Range#getExtendedRange:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/precedents.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-get-range-edge.yaml await Excel.run(async (context) => { - // Precedents are cells referenced by the formula in a cell. - let range = context.workbook.getActiveCell(); - let precedents = range.getPrecedents(); - range.load("address"); - precedents.areas.load("address"); - await context.sync(); + // Get the selected range. + const range = context.workbook.getSelectedRange(); - console.log(`All precedent cells of ${range.address}:`); + // Specify the direction with the `KeyboardDirection` enum. + const direction = Excel.KeyboardDirection.down; + + // Get the active cell in the workbook. + const activeCell = context.workbook.getActiveCell(); + + // Get all the cells from the currently selected range to the bottom-most edge of the used range. + // This method acts like the Ctrl+Shift+Arrow key keyboard shortcut while a range is selected. + const extendedRange = range.getExtendedRange( + direction, + activeCell // If the selected range contains more than one cell, the active cell must be defined. + ); + extendedRange.select(); - // Use the precedents API to loop through precedents of the active cell. - for (let i = 0; i < precedents.areas.items.length; i++) { - // Highlight and console the address of each precedent cell. - precedents.areas.items[i].format.fill.color = "Orange"; - console.log(` ${precedents.areas.items[i].address}`); - } await context.sync(); }); 'Excel.Range#getRangeEdge:member(1)': @@ -5646,47 +6019,37 @@ await context.sync(); }); -'Excel.Range#getSpecialCells:member(1)': +'Excel.Range#hyperlink:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Orders"); - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const usedRange = sheet.getUsedRange(); - - // Find the ranges with either text or logical (boolean) values. - const formulaRanges = usedRange.getSpecialCells("Constants", "LogicalText"); - formulaRanges.format.fill.color = "orange"; - - return context.sync(); - }); -'Excel.Range#getSpillingToRange:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/dynamic-arrays.yaml - - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + let productsRange = sheet.getRange("A3:A5"); + productsRange.load("values"); - // Set G4 to a formula that returns a dynamic array. - const targetCell = sheet.getRange("G4"); - targetCell.formulas = [["=A4:D4"]]; + await context.sync(); - // Get the address of the cells that the dynamic array spilled into. - const spillRange = targetCell.getSpillingToRange(); - spillRange.load("address"); + // Create a hyperlink to a URL + // for each product name in the first table. + for (let i = 0; i < productsRange.values.length; i++) { + let cellRange = productsRange.getCell(i, 0); + let cellText = productsRange.values[i][0]; - // Fit the columns for readability. - sheet.getUsedRange().format.autofitColumns(); - await context.sync(); + let hyperlink = { + textToDisplay: cellText, + screenTip: "Search Bing for '" + cellText + "'", + address: "https://www.bing.com/?q=" + cellText + } + cellRange.hyperlink = hyperlink; + } - console.log(`Copying the table headers spilled into ${spillRange.address}.`); + await context.sync(); }); -'Excel.Range#getUsedRange:member(1)': +'Excel.Range#getIntersectionOrNullObject:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-relationships.yaml @@ -5746,272 +6109,83 @@ await context.sync(); }); -'Excel.Range#getUsedRangeOrNullObject:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/used-range.yaml - - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const salesTable = sheet.tables.getItem("SalesTable"); - const dataRange = salesTable.getDataBodyRange(); - - // Pass true so only cells with values count as used - const usedDataRange = dataRange.getUsedRangeOrNullObject( - true /* valuesOnly */ - ); - - //Must sync before reading value returned from *OrNullObject method/property. - await context.sync(); - - if (usedDataRange.isNullObject) { - console.log("Need Data to Make Chart"); - console.log("To create a meaningful chart, press 'Fill the table' (or add names to the Product column and numbers to some of the other cells). Then press 'Try to create chart' again."); - } else { - const chart = sheet.charts.add( - Excel.ChartType.columnClustered, - dataRange, - "Columns" - ); - chart.setPosition("A15", "F30"); - chart.title.text = "Quarterly sales chart"; - chart.legend.position = "Right"; - chart.legend.format.fill.setSolidColor("white"); - chart.dataLabels.format.font.size = 15; - chart.dataLabels.format.font.color = "black"; - } - - await context.sync(); - }); -'Excel.Range#group:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml - - - Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - - // Group the larger, main level. Note that the outline controls - // will be on row 10, meaning 4-9 will collapse and expand. - sheet.getRange("4:9").group(Excel.GroupOption.byRows); - - // Group the smaller, sublevels. Note that the outline controls - // will be on rows 6 and 9, meaning 4-5 and 7-8 will collapse and expand. - sheet.getRange("4:5").group(Excel.GroupOption.byRows); - sheet.getRange("7:8").group(Excel.GroupOption.byRows); - await context.sync(); - }); -'Excel.Range#hyperlink:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml - - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Orders"); - - let productsRange = sheet.getRange("A3:A5"); - productsRange.load("values"); - - await context.sync(); - - // Create a hyperlink to a URL - // for each product name in the first table. - for (let i = 0; i < productsRange.values.length; i++) { - let cellRange = productsRange.getCell(i, 0); - let cellText = productsRange.values[i][0]; - - let hyperlink = { - textToDisplay: cellText, - screenTip: "Search Bing for '" + cellText + "'", - address: "https://www.bing.com/?q=" + cellText - } - cellRange.hyperlink = hyperlink; - } - - await context.sync(); - }); -'Excel.Range#merge:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-merged-ranges.yaml - - - await Excel.run(async (context) => { - // Retrieve the worksheet and the table in that worksheet. - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const tableRange = sheet.getRange("B2:E6"); - - // Create a merged range in the first row of the table. - const chartTitle = tableRange.getRow(0); - chartTitle.merge(true); - - // Format the merged range. - chartTitle.format.horizontalAlignment = "Center"; - - await context.sync(); - }); -'Excel.Range#moveTo:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-copyfrom.yaml - - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - // Place a label in front of the moved data. - sheet.getRange("F12").values = [["Moved Range:"]]; - - // Move the range from A1:E1 to G12:K12. - sheet.getRange("A1:E1").moveTo("G12"); - await context.sync(); - }); -'Excel.Range#removeDuplicates:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-remove-duplicates.yaml - - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const range = sheet.getRange("B2:D11"); - - const deleteResult = range.removeDuplicates([0],true); - deleteResult.load(); - await context.sync(); - - console.log(deleteResult.removed + " entries with duplicate names removed."); - console.log(deleteResult.uniqueRemaining + " entries with unique names remain in the range."); - }); -'Excel.Range#set:member(2)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/multiple-property-set.yaml - - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - const sourceRange = sheet.getRange("B2:E2"); - sourceRange.load("format/fill/color, format/font/name, format/font/color"); - await context.sync(); - - // Set properties based on the loaded and synced - // source range. - const targetRange = sheet.getRange("B7:E7"); - targetRange.set(sourceRange); - targetRange.format.autofitColumns(); - await context.sync(); - }); -'Excel.Range#setCellProperties:member(1)': +'Excel.Range#getUsedRange:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-relationships.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); + const sheet = context.workbook.worksheets.getItem("Sample"); + const salesTable = sheet.tables.getItem("SalesTable"); + const dataRange = salesTable.getDataBodyRange(); - // Creating the SettableCellProperties objects to use for the range. - // In your add-in, these should be created once, outside the function. - const topHeaderProps: Excel.SettableCellProperties = { - // The style property takes a string matching the name of an Excel style. - // Built-in style names are listed in the `BuiltInStyle` enum. - // Note that a style will overwrite any formatting, - // so do not use the format property with the style property. - style: "Heading1" - }; + // We want the most recent quarter that has data, so + // exclude quarters without data and get the last of + // the remaining columns. + const usedDataRange = dataRange.getUsedRange(true /* valuesOnly */); + const currentQuarterRange = usedDataRange.getLastColumn(); - const headerProps: Excel.SettableCellProperties = { - // Any subproperties of format that are not set will not be changed when these cell properties are set. - format: { - fill: { - color: "Blue" - }, - font: { - color: "White", - bold: true - } - } - }; + // Asian and European teams have separate contests. + const asianSalesRange = sheet.getRange("A2:E4"); + const europeanSalesRange = sheet.getRange("A5:E7"); - const nonApplicableProps: Excel.SettableCellProperties = { - format: { - fill: { - pattern: Excel.FillPattern.gray25 - }, - font: { - color: "Gray", - italic: true - } - } - }; + // The data for each chart is the intersection of the + // current quarter column and the rows for the continent. + const asianContestRange = asianSalesRange.getIntersectionOrNullObject(currentQuarterRange); + const europeanContestRange = europeanSalesRange.getIntersectionOrNullObject(currentQuarterRange); - const matchupScoreProps: Excel.SettableCellProperties = { - format: { - borders: { - bottom: { - style: Excel.BorderLineStyle.continuous - }, - left: { - style: Excel.BorderLineStyle.continuous - }, - right: { - style: Excel.BorderLineStyle.continuous - }, - top: { - style: Excel.BorderLineStyle.continuous - } - } - } - }; + // Must sync before you can test the output of *OrNullObject + // method/property. + await context.sync(); - const range = sheet.getRange("A1:E5"); + if (asianContestRange.isNullObject) { + // See the declaration of this function for how to + // test this code path. + reportMissingData("Asian"); + } else { + createContinentChart( + sheet, + "Asian", + asianContestRange, + "A9", + "F24" + ); + } - // You can use empty JSON objects to avoid changing a cell's properties. - range.setCellProperties([ - [topHeaderProps, {}, {}, {}, {}], - [{}, {}, headerProps, headerProps, headerProps], - [{}, headerProps, nonApplicableProps, matchupScoreProps, matchupScoreProps], - [{}, headerProps, matchupScoreProps, nonApplicableProps, matchupScoreProps], - [{}, headerProps, matchupScoreProps, matchupScoreProps, nonApplicableProps] - ]); + if (europeanContestRange.isNullObject) { + // See the declaration of this function for how to + // test this code path. + reportMissingData("European"); + } else { + createContinentChart( + sheet, + "European", + europeanContestRange, + "A25", + "F40" + ); + } - sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); -'Excel.Range#sort:member': +'Excel.Range#removeDuplicates:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-remove-duplicates.yaml - async function sortTopToBottom(criteria: string) { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const range = sheet.getRange("A1:E5"); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B2:D11"); - // Find the column header that provides the sort criteria. - const header = range.find(criteria, {}); - header.load("columnIndex"); - await context.sync(); + const deleteResult = range.removeDuplicates([0],true); + deleteResult.load(); + await context.sync(); - range.sort.apply( - [ - { - key: header.columnIndex, - sortOn: Excel.SortOn.value - } - ], - false /*matchCase*/, - true /*hasHeaders*/, - Excel.SortOrientation.rows - ); - await context.sync(); - }); - } + console.log(deleteResult.removed + " entries with duplicate names removed."); + console.log(deleteResult.uniqueRemaining + " entries with unique names remain in the range."); + }); 'Excel.Range#style:member': - >- // Link to full sample: @@ -6029,64 +6203,63 @@ await context.sync(); }); -'Excel.Range#ungroup:member(1)': +'Excel.Range#getUsedRangeOrNullObject:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/used-range.yaml - Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - - // This removes two levels of groups from the "A1-R10" range. - // Any groups at the same level on the same dimension will be removed by a single call. - sheet.getRange("A1:R10").ungroup(Excel.GroupOption.byRows); - sheet.getRange("A1:R10").ungroup(Excel.GroupOption.byRows); - sheet.getRange("A1:R10").ungroup(Excel.GroupOption.byColumns); - sheet.getRange("A1:R10").ungroup(Excel.GroupOption.byColumns); - await context.sync(); - }); -'Excel.Range#values:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const salesTable = sheet.tables.getItem("SalesTable"); + const dataRange = salesTable.getDataBodyRange(); + // Pass true so only cells with values count as used + const usedDataRange = dataRange.getUsedRangeOrNullObject( + true /* valuesOnly */ + ); - // Change the value of the checkbox in B3. + //Must sync before reading value returned from *OrNullObject method/property. + await context.sync(); - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const range = sheet.getRange("B3"); + if (usedDataRange.isNullObject) { + console.log("Need Data to Make Chart"); + console.log("To create a meaningful chart, press 'Fill the table' (or add names to the Product column and numbers to some of the other cells). Then press 'Try to create chart' again."); + } else { + const chart = sheet.charts.add( + Excel.ChartType.columnClustered, + dataRange, + "Columns" + ); + chart.setPosition("A15", "F30"); + chart.title.text = "Quarterly sales chart"; + chart.legend.position = "Right"; + chart.legend.format.fill.setSolidColor("white"); + chart.dataLabels.format.font.size = 15; + chart.dataLabels.format.font.color = "black"; + } - range.values = [["TRUE"]]; - await context.sync(); + await context.sync(); }); -'Excel.Range#valuesAsJson:member': +'Excel.Range#set:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-formatted-number.yaml - - - // This function creates a double data type, + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/multiple-property-set.yaml - // and sets the format of this data type as a date. await Excel.run(async (context) => { - // Get the Sample worksheet and a range on that sheet. - const sheet = context.workbook.worksheets.getItemOrNullObject("Sample"); - const dateRange = sheet.getRange("A1"); + const sheet = context.workbook.worksheets.getItem("Sample"); - // Write a number formatted as a date to cell A1. - dateRange.valuesAsJson = [ - [ - { - type: Excel.CellValueType.double, - basicValue: 32889.0, - numberFormat: "m/d/yyyy" - } - ] - ]; - await context.sync(); + const sourceRange = sheet.getRange("B2:E2"); + sourceRange.load("format/fill/color, format/font/name, format/font/color"); + await context.sync(); + + // Set properties based on the loaded and synced + // source range. + const targetRange = sheet.getRange("B7:E7"); + targetRange.set(sourceRange); + targetRange.format.autofitColumns(); + await context.sync(); }); 'Excel.RangeAreas#format:member': - >- @@ -6470,6 +6643,19 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + await Excel.run(async (context) => { + const settings = context.workbook.settings; + settings.onSettingsChanged.add(onChangedSetting); + + await context.sync(); + console.log("Settings changed handler registered."); + }); +'Excel.SettingCollection#onSettingsChanged:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + + await Excel.run(async (context) => { const settings = context.workbook.settings; settings.onSettingsChanged.add(onChangedSetting); @@ -6499,19 +6685,6 @@ await context.sync(); }); -'Excel.SettingCollection#onSettingsChanged:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml - - - await Excel.run(async (context) => { - const settings = context.workbook.settings; - settings.onSettingsChanged.add(onChangedSetting); - - await context.sync(); - console.log("Settings changed handler registered."); - }); 'Excel.Shape#delete:member(1)': - >- // Link to full sample: @@ -6547,21 +6720,22 @@ shape.fill.foregroundColor = "yellow" await context.sync(); }); -'Excel.Shape#getAsImage:member(1)': +'Excel.Shape#rotation:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-images.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-create-and-delete.yaml await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.getItem("Image"); - const result = shape.getAsImage(Excel.PictureFormat.png); + const shape = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.triangle); + shape.left = 100; + shape.top = 300; + shape.height = 150; + shape.width = 200; + shape.rotation = 45; + shape.fill.clear(); await context.sync(); - - const imageString = result.value; - // Your add-in would save this string as a .png file. - console.log("The image's Base64-encoded string: " + imageString); }); 'Excel.Shape#group:member': - >- @@ -6578,17 +6752,21 @@ await context.sync(); }); -'Excel.Shape#incrementLeft:member(1)': +'Excel.Shape#getAsImage:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-images.yaml await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.getItem("Square") - shape.incrementLeft(-25); + const shape = sheet.shapes.getItem("Image"); + const result = shape.getAsImage(Excel.PictureFormat.png); await context.sync(); + + const imageString = result.value; + // Your add-in would save this string as a .png file. + console.log("The image's Base64-encoded string: " + imageString); }); 'Excel.Shape#incrementRotation:member(1)': - >- @@ -6602,18 +6780,6 @@ shape.incrementRotation(180); await context.sync(); }); -'Excel.Shape#incrementTop:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml - - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.getItem("Pentagon") - shape.incrementTop(25); - await context.sync(); - }); 'Excel.Shape#line:member': - >- // Link to full sample: @@ -6633,7 +6799,7 @@ await context.sync(); }); -'Excel.Shape#lockAspectRatio:member': +'Excel.Shape#incrementLeft:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml @@ -6641,26 +6807,33 @@ await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.getItem("Octagon") - shape.lockAspectRatio = true; - shape.scaleHeight(1.25, Excel.ShapeScaleType.currentSize); + const shape = sheet.shapes.getItem("Square") + shape.incrementLeft(-25); await context.sync(); }); -'Excel.Shape#rotation:member': +'Excel.Shape#incrementTop:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-create-and-delete.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.triangle); - shape.left = 100; - shape.top = 300; - shape.height = 150; - shape.width = 200; - shape.rotation = 45; - shape.fill.clear(); + const shape = sheet.shapes.getItem("Pentagon") + shape.incrementTop(25); + await context.sync(); + }); +'Excel.Shape#lockAspectRatio:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Shapes"); + const shape = sheet.shapes.getItem("Octagon") + shape.lockAspectRatio = true; + shape.scaleHeight(1.25, Excel.ShapeScaleType.currentSize); await context.sync(); }); 'Excel.Shape#scaleHeight:member(1)': @@ -7571,30 +7744,118 @@ await context.sync(); }); -'Excel.Workbook#close:member(1)': +'Excel.Workbook#properties:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-save-and-close.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/26-document/properties.yaml await Excel.run(async (context) => { - context.workbook.close(Excel.CloseBehavior.save); + let titleValue = "Excel document properties API"; + let subjectValue = "Set and get document properties"; + let keywordsValue = "Set and get operations"; + let commentsValue = "This is an Excel document properties API code sample"; + let categoryValue = "Office Add-ins"; + let managerValue = "John"; + let companyValue = "Microsoft"; + + let docProperties = context.workbook.properties; + + // Set the writeable document properties. + docProperties.title = titleValue; + docProperties.subject = subjectValue; + docProperties.keywords = keywordsValue; + docProperties.comments = commentsValue; + docProperties.category = categoryValue; + docProperties.manager = managerValue; + docProperties.company = companyValue; + + await context.sync(); + + console.log("Set the following document properties: title, subject, keywords, comments, category, manager, company."); }); -'Excel.Workbook#getActiveCell:member(1)': +'Excel.Workbook#onActivated:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-get-active-cell.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-activated.yaml + + + async function workbookActivated(event: Excel.WorkbookActivatedEventArgs) { + await Excel.run(async (context) => { + // Callback function for when the workbook is activated. + console.log("The workbook was activated."); + }); + } + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-activated.yaml await Excel.run(async (context) => { + const workbook = context.workbook; - let myWorkbook = context.workbook; - let activeCell = myWorkbook.getActiveCell(); - activeCell.load("address"); + // Register the workbook activated event handler. + workbook.onActivated.add(workbookActivated); + + await context.sync(); + console.log("Added event handler for workbook activated."); + }); +'Excel.Workbook#pivotTables:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-get-pivottables.yaml + + + await Excel.run(async (context) => { + // Get the names of all the PivotTables in the workbook. + const pivotTables = context.workbook.pivotTables; + pivotTables.load("name"); + await context.sync(); + + // Display the names in the console. + console.log("PivotTables in the workbook:") + pivotTables.items.forEach((pivotTable) => { + console.log(`\t${pivotTable.name}`); + }); + }); +'Excel.Workbook#getSelectedRanges:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml + + + await Excel.run(async (context) => { + + const selectedRanges = context.workbook.getSelectedRanges(); + selectedRanges.format.fill.color = "lightblue"; await context.sync(); + }) +'Excel.Workbook#styles:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml + + + await Excel.run(async (context) => { + let styles = context.workbook.styles; + + // Add a new style to the style collection. + // Styles is in the Home tab ribbon. + styles.add("Diagonal Orientation Style"); + + let newStyle = styles.getItem("Diagonal Orientation Style"); - console.log("The active cell is " + activeCell.address); + // The "Diagonal Orientation Style" properties. + newStyle.textOrientation = 38; + newStyle.autoIndent = true; + newStyle.includeProtection = true; + newStyle.shrinkToFit = true; + newStyle.locked = false; + + await context.sync(); + + console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); 'Excel.Workbook#getActiveShapeOrNullObject:member(1)': - >- @@ -7624,19 +7885,22 @@ console.log("No active shape"); } }); -'Excel.Workbook#getSelectedRanges:member(1)': +'Excel.Workbook#getActiveCell:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-get-active-cell.yaml await Excel.run(async (context) => { - const selectedRanges = context.workbook.getSelectedRanges(); - selectedRanges.format.fill.color = "lightblue"; + let myWorkbook = context.workbook; + let activeCell = myWorkbook.getActiveCell(); + activeCell.load("address"); await context.sync(); - }) + + console.log("The active cell is " + activeCell.address); + }); 'Excel.Workbook#insertWorksheetsFromBase64:member(1)': - >- // Link to full sample: @@ -7663,132 +7927,41 @@ reader.readAsDataURL(myFile.files[0]); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml - - - await Excel.run(async (context) => { - // Retrieve the source workbook. - const workbook = context.workbook; - - // Set up the insert options. - const options = { - sheetNamesToInsert: [], // Insert all the worksheets from the source workbook. - positionType: Excel.WorksheetPositionType.after, // Insert after the `relativeTo` sheet. - relativeTo: "Sheet1" // The sheet relative to which the other worksheets will be inserted. Used with `positionType`. - }; - - // Insert the new worksheets. - workbook.insertWorksheetsFromBase64(externalWorkbook, options); - await context.sync(); - }); -'Excel.Workbook#onActivated:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-activated.yaml - - - async function workbookActivated(event: Excel.WorkbookActivatedEventArgs) { - await Excel.run(async (context) => { - // Callback function for when the workbook is activated. - console.log("The workbook was activated."); - }); - } - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-activated.yaml - - - await Excel.run(async (context) => { - const workbook = context.workbook; - - // Register the workbook activated event handler. - workbook.onActivated.add(workbookActivated); - - await context.sync(); - console.log("Added event handler for workbook activated."); - }); -'Excel.Workbook#pivotTables:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-get-pivottables.yaml - - - await Excel.run(async (context) => { - // Get the names of all the PivotTables in the workbook. - const pivotTables = context.workbook.pivotTables; - pivotTables.load("name"); - await context.sync(); - - // Display the names in the console. - console.log("PivotTables in the workbook:") - pivotTables.items.forEach((pivotTable) => { - console.log(`\t${pivotTable.name}`); - }); - }); -'Excel.Workbook#properties:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/26-document/properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml await Excel.run(async (context) => { - let titleValue = "Excel document properties API"; - let subjectValue = "Set and get document properties"; - let keywordsValue = "Set and get operations"; - let commentsValue = "This is an Excel document properties API code sample"; - let categoryValue = "Office Add-ins"; - let managerValue = "John"; - let companyValue = "Microsoft"; - - let docProperties = context.workbook.properties; - - // Set the writeable document properties. - docProperties.title = titleValue; - docProperties.subject = subjectValue; - docProperties.keywords = keywordsValue; - docProperties.comments = commentsValue; - docProperties.category = categoryValue; - docProperties.manager = managerValue; - docProperties.company = companyValue; - + // Retrieve the source workbook. + const workbook = context.workbook; + + // Set up the insert options. + const options = { + sheetNamesToInsert: [], // Insert all the worksheets from the source workbook. + positionType: Excel.WorksheetPositionType.after, // Insert after the `relativeTo` sheet. + relativeTo: "Sheet1" // The sheet relative to which the other worksheets will be inserted. Used with `positionType`. + }; + + // Insert the new worksheets. + workbook.insertWorksheetsFromBase64(externalWorkbook, options); await context.sync(); - - console.log("Set the following document properties: title, subject, keywords, comments, category, manager, company."); }); -'Excel.Workbook#save:member(1)': +'Excel.Workbook#close:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-save-and-close.yaml await Excel.run(async (context) => { - context.workbook.save(Excel.SaveBehavior.save); + context.workbook.close(Excel.CloseBehavior.save); }); -'Excel.Workbook#styles:member': +'Excel.Workbook#save:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-save-and-close.yaml await Excel.run(async (context) => { - let styles = context.workbook.styles; - - // Add a new style to the style collection. - // Styles is in the Home tab ribbon. - styles.add("Diagonal Orientation Style"); - - let newStyle = styles.getItem("Diagonal Orientation Style"); - - // The "Diagonal Orientation Style" properties. - newStyle.textOrientation = 38; - newStyle.autoIndent = true; - newStyle.includeProtection = true; - newStyle.shrinkToFit = true; - newStyle.locked = false; - - await context.sync(); - - console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); + context.workbook.save(Excel.SaveBehavior.save); }); 'Excel.WorkbookProtection#protect:member(1)': - >- @@ -7849,48 +8022,6 @@ } await context.sync(); }); -'Excel.Worksheet#autoFilter:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml - - - // This function adds a percentage AutoFilter to the active worksheet - - // and applies the filter to a column of the used range. - - await Excel.run(async (context) => { - // Retrieve the active worksheet and the used range on that worksheet. - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const farmData = sheet.getUsedRange(); - - // Add a filter that will only show the rows with the top 50% of values in column 3. - sheet.autoFilter.apply(farmData, 3, { - criterion1: "50", - filterOn: Excel.FilterOn.topPercent - }); - - await context.sync(); - }); -'Excel.Worksheet#copy:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-copy.yaml - - - await Excel.run(async (context) => { - - let myWorkbook = context.workbook; - let sampleSheet = myWorkbook.worksheets.getActiveWorksheet(); - let copiedSheet = sampleSheet.copy("End") - - sampleSheet.load("name"); - copiedSheet.load("name"); - - await context.sync(); - - console.log("'" + sampleSheet.name + "' was copied to '" + copiedSheet.name + "'") - }); 'Excel.Worksheet#customProperties:member': - >- // Link to full sample: @@ -7909,124 +8040,46 @@ console.log(`${property.key}:${property.value}`); }); }); -'Excel.Worksheet#findAllOrNullObject:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-find-all.yaml - - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const foundRanges = sheet.findAllOrNullObject("Complete", { - completeMatch: true, - matchCase: false - }); - - await context.sync(); - - if (foundRanges.isNullObject) { - console.log("No complete projects"); - } else { - foundRanges.format.fill.color = "green" - } - }); -'Excel.Worksheet#getNext:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml - - - await Excel.run(async (context) => { - const sheets = context.workbook.worksheets; - - // We don't want to include the default worksheet that was created - // when the workbook was created, so our "firstSheet" will be the one - // after the literal first. Note chaining of navigation methods. - const firstSheet = sheets.getFirst().getNext(); - const lastSheet = sheets.getLast(); - const firstTaxRateRange = firstSheet.getRange("B2"); - const lastTaxRateRange = lastSheet.getRange("B2"); - - firstSheet.load("name"); - lastSheet.load("name"); - firstTaxRateRange.load("text"); - lastTaxRateRange.load("text"); - - await context.sync(); - - let firstYear = firstSheet.name.substr(5, 4); - let lastYear = lastSheet.name.substr(5, 4); - console.log(`Tax Rate change from ${firstYear} to ${lastYear}`, `Tax rate for ${firstYear}: ${firstTaxRateRange.text[0][0]}\nTax rate for ${lastYear}: ${lastTaxRateRange.text[0][0]}`) - - await context.sync(); - }); -'Excel.Worksheet#getPrevious:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml - - - await Excel.run(async (context) => { - const sheets = context.workbook.worksheets; - const currentSheet = sheets.getActiveWorksheet(); - const previousYearSheet = currentSheet.getPrevious(); - const currentTaxDueRange = currentSheet.getRange("C2"); - const previousTaxDueRange = previousYearSheet.getRange("C2"); - - currentSheet.load("name"); - previousYearSheet.load("name"); - currentTaxDueRange.load("text"); - previousTaxDueRange.load("text"); - - await context.sync(); - - let currentYear = currentSheet.name.substr(5, 4); - let previousYear = previousYearSheet.name.substr(5, 4); - console.log("Two Year Tax Due Comparison", `Tax due for ${currentYear} was ${currentTaxDueRange.text[0][0]}\nTax due for ${previousYear} was ${previousTaxDueRange.text[0][0]}`) - - await context.sync(); - }); -'Excel.Worksheet#getRanges:member(1)': +'Excel.Worksheet#onColumnSorted:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml await Excel.run(async (context) => { - + console.log("Adding column handler"); const sheet = context.workbook.worksheets.getActiveWorksheet(); - const specifiedRanges = sheet.getRanges("D3:D5, G3:G5"); - specifiedRanges.format.fill.color = "pink"; - - await context.sync(); - }) -'Excel.Worksheet#onChanged:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet.yaml + // This will fire whenever a column has been moved as the result of a sort action. + sheet.onColumnSorted.add((event) => { + return Excel.run((context) => { + console.log("Column sorted: " + event.address); + const sheet = context.workbook.worksheets.getActiveWorksheet(); - await Excel.run(async (context) => { - let sheet = context.workbook.worksheets.getItem("Sample"); - sheet.onChanged.add(onChange); - await context.sync(); + // Clear formatting for section, then highlight the sorted area. + sheet.getRange("A1:E5").format.fill.clear(); + if (event.address !== "") { + sheet.getRanges(event.address).format.fill.color = "yellow"; + } - console.log("Added a worksheet-level data-changed event handler."); + return context.sync(); + }); + }); }); -'Excel.Worksheet#onColumnSorted:member': +'Excel.Worksheet#onRowSorted:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml await Excel.run(async (context) => { - console.log("Adding column handler"); + console.log("Adding row handler"); const sheet = context.workbook.worksheets.getActiveWorksheet(); - // This will fire whenever a column has been moved as the result of a sort action. - sheet.onColumnSorted.add((event) => { + // This will fire whenever a row has been moved as the result of a sort action. + sheet.onRowSorted.add((event) => { return Excel.run((context) => { - console.log("Column sorted: " + event.address); + console.log("Row sorted: " + event.address); const sheet = context.workbook.worksheets.getActiveWorksheet(); // Clear formatting for section, then highlight the sorted area. @@ -8039,6 +8092,25 @@ }); }); }); +'Excel.Worksheet#onSingleClicked:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-worksheet-single-click.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + sheet.onSingleClicked.add((event) => { + return Excel.run((context) => { + console.log(`Click detected at ${event.address} (pixel offset from upper-left cell corner: ${event.offsetX}, ${event.offsetY})`); + return context.sync(); + }); + }); + + console.log("The worksheet click handler is registered."); + + await context.sync(); + }); 'Excel.Worksheet#onFormulaChanged:member': - >- // Link to full sample: @@ -8076,6 +8148,19 @@ ); }); } +'Excel.Worksheet#onChanged:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet.yaml + + + await Excel.run(async (context) => { + let sheet = context.workbook.worksheets.getItem("Sample"); + sheet.onChanged.add(onChange); + await context.sync(); + + console.log("Added a worksheet-level data-changed event handler."); + }); 'Excel.Worksheet#onProtectionChanged:member': - >- // Link to full sample: @@ -8114,49 +8199,32 @@ console.log(" Source of change event: " + source + "."); }); } -'Excel.Worksheet#onRowSorted:member': +'Excel.Worksheet#showOutlineLevels:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml - await Excel.run(async (context) => { - console.log("Adding row handler"); + Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); - // This will fire whenever a row has been moved as the result of a sort action. - sheet.onRowSorted.add((event) => { - return Excel.run((context) => { - console.log("Row sorted: " + event.address); - const sheet = context.workbook.worksheets.getActiveWorksheet(); - - // Clear formatting for section, then highlight the sorted area. - sheet.getRange("A1:E5").format.fill.clear(); - if (event.address !== "") { - sheet.getRanges(event.address).format.fill.color = "yellow"; - } - - return context.sync(); - }); - }); + // This shows the top 3 outline levels; collapsing any additional sublevels. + sheet.showOutlineLevels(3, 3); + await context.sync(); }); -'Excel.Worksheet#onSingleClicked:member': +'Excel.Worksheet#slicers:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-worksheet-single-click.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - sheet.onSingleClicked.add((event) => { - return Excel.run((context) => { - console.log(`Click detected at ${event.address} (pixel offset from upper-left cell corner: ${event.offsetX}, ${event.offsetY})`); - return context.sync(); - }); - }); - - console.log("The worksheet click handler is registered."); - + const sheet = context.workbook.worksheets.getItem("Pivot"); + const slicer = sheet.slicers.add( + "Farm Sales", /* The slicer data source. For PivotTables, this can be the PivotTable object reference or name. */ + "Type" /* The field in the data source to filter by. For PivotTables, this can be a PivotField object reference or ID. */ + ); + slicer.name = "Fruit Slicer"; await context.sync(); }); 'Excel.Worksheet#pivotTables:member': @@ -8177,6 +8245,83 @@ console.log(`\t${pivotTable.name}`); }); }); +'Excel.Worksheet#getRanges:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml + + + await Excel.run(async (context) => { + + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const specifiedRanges = sheet.getRanges("D3:D5, G3:G5"); + specifiedRanges.format.fill.color = "pink"; + + await context.sync(); + }) +'Excel.Worksheet#autoFilter:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml + + + // This function adds a percentage AutoFilter to the active worksheet + + // and applies the filter to a column of the used range. + + await Excel.run(async (context) => { + // Retrieve the active worksheet and the used range on that worksheet. + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const farmData = sheet.getUsedRange(); + + // Add a filter that will only show the rows with the top 50% of values in column 3. + sheet.autoFilter.apply(farmData, 3, { + criterion1: "50", + filterOn: Excel.FilterOn.topPercent + }); + + await context.sync(); + }); +'Excel.Worksheet#copy:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-copy.yaml + + + await Excel.run(async (context) => { + + let myWorkbook = context.workbook; + let sampleSheet = myWorkbook.worksheets.getActiveWorksheet(); + let copiedSheet = sampleSheet.copy("End") + + sampleSheet.load("name"); + copiedSheet.load("name"); + + await context.sync(); + + console.log("'" + sampleSheet.name + "' was copied to '" + copiedSheet.name + "'") + }); +'Excel.Worksheet#findAllOrNullObject:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-find-all.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const foundRanges = sheet.findAllOrNullObject("Complete", { + completeMatch: true, + matchCase: false + }); + + await context.sync(); + + if (foundRanges.isNullObject) { + console.log("No complete projects"); + } else { + foundRanges.format.fill.color = "green" + } + }); 'Excel.Worksheet#showGridlines:member': - >- // Link to full sample: @@ -8189,32 +8334,60 @@ await context.sync(); }); -'Excel.Worksheet#showOutlineLevels:member(1)': +'Excel.Worksheet#getNext:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml - Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); + await Excel.run(async (context) => { + const sheets = context.workbook.worksheets; + + // We don't want to include the default worksheet that was created + // when the workbook was created, so our "firstSheet" will be the one + // after the literal first. Note chaining of navigation methods. + const firstSheet = sheets.getFirst().getNext(); + const lastSheet = sheets.getLast(); + const firstTaxRateRange = firstSheet.getRange("B2"); + const lastTaxRateRange = lastSheet.getRange("B2"); + + firstSheet.load("name"); + lastSheet.load("name"); + firstTaxRateRange.load("text"); + lastTaxRateRange.load("text"); + + await context.sync(); + + let firstYear = firstSheet.name.substr(5, 4); + let lastYear = lastSheet.name.substr(5, 4); + console.log(`Tax Rate change from ${firstYear} to ${lastYear}`, `Tax rate for ${firstYear}: ${firstTaxRateRange.text[0][0]}\nTax rate for ${lastYear}: ${lastTaxRateRange.text[0][0]}`) - // This shows the top 3 outline levels; collapsing any additional sublevels. - sheet.showOutlineLevels(3, 3); await context.sync(); }); -'Excel.Worksheet#slicers:member': +'Excel.Worksheet#getPrevious:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Pivot"); - const slicer = sheet.slicers.add( - "Farm Sales", /* The slicer data source. For PivotTables, this can be the PivotTable object reference or name. */ - "Type" /* The field in the data source to filter by. For PivotTables, this can be a PivotField object reference or ID. */ - ); - slicer.name = "Fruit Slicer"; + const sheets = context.workbook.worksheets; + const currentSheet = sheets.getActiveWorksheet(); + const previousYearSheet = currentSheet.getPrevious(); + const currentTaxDueRange = currentSheet.getRange("C2"); + const previousTaxDueRange = previousYearSheet.getRange("C2"); + + currentSheet.load("name"); + previousYearSheet.load("name"); + currentTaxDueRange.load("text"); + previousTaxDueRange.load("text"); + + await context.sync(); + + let currentYear = currentSheet.name.substr(5, 4); + let previousYear = previousYearSheet.name.substr(5, 4); + console.log("Two Year Tax Due Comparison", `Tax due for ${currentYear} was ${currentTaxDueRange.text[0][0]}\nTax due for ${previousYear} was ${previousTaxDueRange.text[0][0]}`) + await context.sync(); }); 'Excel.Worksheet#tabColor:member': @@ -8318,6 +8491,45 @@ } }); } +'Excel.WorksheetCollection#onActivated:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + + + await Excel.run(async (context) => { + let sheets = context.workbook.worksheets; + sheets.onActivated.add(onActivate); + + await context.sync(); + console.log("A handler has been registered for the OnActivate event."); + }); +'Excel.WorksheetCollection#onAdded:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + + + await Excel.run(async (context) => { + let sheet = context.workbook.worksheets; + sheet.onAdded.add(onWorksheetAdd); + + await context.sync(); + console.log("A handler has been registered for the OnAdded event."); + }); +'Excel.WorksheetCollection#onDeactivated:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + + + await Excel.run(async (context) => { + let sheets = context.workbook.worksheets; + sheets.onDeactivated.add(onDeactivate); + + await context.sync(); + console.log("A handler has been registered for the OnDeactivate event."); + }); 'Excel.WorksheetCollection#getFirst:member(1)': - >- // Link to full sample: @@ -8378,45 +8590,6 @@ await context.sync(); }); -'Excel.WorksheetCollection#onActivated:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml - - - await Excel.run(async (context) => { - let sheets = context.workbook.worksheets; - sheets.onActivated.add(onActivate); - - await context.sync(); - console.log("A handler has been registered for the OnActivate event."); - }); -'Excel.WorksheetCollection#onAdded:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml - - - await Excel.run(async (context) => { - let sheet = context.workbook.worksheets; - sheet.onAdded.add(onWorksheetAdd); - - await context.sync(); - console.log("A handler has been registered for the OnAdded event."); - }); -'Excel.WorksheetCollection#onDeactivated:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml - - - await Excel.run(async (context) => { - let sheets = context.workbook.worksheets; - sheets.onDeactivated.add(onDeactivate); - - await context.sync(); - console.log("A handler has been registered for the OnDeactivate event."); - }); 'Excel.WorksheetCustomPropertyCollection#add:member(1)': - >- // Link to full sample: diff --git a/view-prod/excel.json b/view-prod/excel.json index ae1ad8407..38e8b6628 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -18,6 +18,7 @@ "excel-chart-data-source": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-source.yaml", "excel-chart-trendlines": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-trendlines.yaml", "excel-chart-data-labels": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-labels.yaml", + "excel-chart-leader-lines": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-leader-lines.yaml", "excel-comment-basics": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-basics.yaml", "excel-comment-mentions": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-mentions.yaml", "excel-comment-replies": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-replies.yaml", diff --git a/view/excel.json b/view/excel.json index 993906cb7..6c50b9c80 100644 --- a/view/excel.json +++ b/view/excel.json @@ -18,6 +18,7 @@ "excel-chart-data-source": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-data-source.yaml", "excel-chart-trendlines": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-trendlines.yaml", "excel-chart-data-labels": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-data-labels.yaml", + "excel-chart-leader-lines": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-leader-lines.yaml", "excel-comment-basics": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-basics.yaml", "excel-comment-mentions": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-mentions.yaml", "excel-comment-replies": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-replies.yaml", From c35bfc2637a95bac2dd976a64bea46f2f4ffdb45 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 10 Sep 2025 12:37:14 -0700 Subject: [PATCH 631/660] [PowerPoint] Map for SlideGetImageOptions (#995) --- snippet-extractor-metadata/powerpoint.xlsx | Bin 16658 -> 16650 bytes snippet-extractor-output/snippets.yaml | 21 +++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/snippet-extractor-metadata/powerpoint.xlsx b/snippet-extractor-metadata/powerpoint.xlsx index 0c93174817338a9e487c2870a4cf4bce763b78ad..d4a1aa15c7e22e0d62c5d7907c68075aec4eaf9b 100644 GIT binary patch delta 8641 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 HANYR&^hF4d delta 8666 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 bRtC2M$pZP{c_10!349gAiiRWe&+z{M5dshR diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index d7d069fb7..a8df1a586 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -17390,6 +17390,27 @@ context.presentation.setSelectedSlides([slide2.id, slide4.id, slide5.id]); await context.sync(); }); +'PowerPoint.SlideGetImageOptions:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/export-import-slide.yaml + + + // Exports current slide. + + await PowerPoint.run(async (context) => { + const slide = context.presentation.getSelectedSlides().getItemAt(0); + const slideBase64DataResult = slide.exportAsBase64(); + const imageBase64DataResult = slide.getImageAsBase64({ height: 300 }); + await context.sync(); + + localStorage.setItem("exportedSlide", slideBase64DataResult.value); + localStorage.setItem("exportedSlideImage", imageBase64DataResult.value); + + updateSlideImage(imageBase64DataResult.value); + + console.log("Slide was exported."); + }); 'PowerPoint.SlideLayout:class': - >- // Link to full sample: From f976b1b82482e870d2dc80a3ef7f7b580b587c74 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 17 Sep 2025 15:54:50 -0700 Subject: [PATCH 632/660] [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 633/660] [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 zcmZ8|WmH>jur4m8xECwM-Q9{8Z-L?v+>5(yoKmbMP#lW8Lvd2vU4py2yWD)|u655^ zH$O9ZN1nX%WM*e3@E`m!1imU274Vb%zCnlx2gi>J2Zs#@2j^wa;pymNXX@x^$L{sb zzU-^M+NK~u0LbQ5dg~TPB+?b%VtT3WQx_U0>!l!fq%>Q+pbNQP=nmx6c_G0>H-_2r zOZB1a(b%dd`^kNwAyiMzAV%tjMP`(<#tSr{cZJPzb^FamzW*KHq226YCQv!fLp4zt zCGje_s(9_iv7L(y_uME&Rvyvq+-ut8uq;HtG%)X73G} z;+n`6lgd%;_^Cp}oH=BB;8l71{zro{;060cBxFg}DG+cbj!sK&Irc znXd!e(j0^>j*>UApY00Q@PU649h{9rDr-KTUm2L`R`(g^sJB$mJWkD= z-o>9XzR)UT#g%EENosZAvUnlW+%-&~CCnPIpd+1zSYP#z$P(|ySl=(VyRq@V1?gCE z&wMDg$Yr<9_HL7+X5Ib`;VQEE#4r&IjS(aNu)Co%3LQky8JVfaQv=F;!ZSZ=jgaxz zKM*PUHsKse;{}sx&!&=5$fkUIozGDL}cVzh_U<_UxJrsnfb0KK;6GC21v*aj-fS_;QF@6fJgZ z{TLM$f%)0PSw;ny5&Bs_JBc-)x4;`M-VAyJKWhYzo@0+`byG2YR{`ar+htI_L_}EH znLpUgTfH(RX$(KfDyJVE&tm3kC>ly7(H(WEGW~{Z!#|b&GZ`=z;1{`51t_mY^}%=_ zf8KdfY|J${uYXyL3pC#Ht;o1<(jTwtk4i`-NMYc-m!L#oq?ZD3f8%2nP~O+?DUtX3 z1-YQNpqZXF!Z~|Ru~*C`@TLDr$E3nroly|vIMsS({pq6Y&o+xL4dmXKOm5UKl}C)} zP7H4HQkcukyNZW0W@N>we>&}!^*(j%xmM!2G)CZ0`!<6E`>Ewlz#tm~-fNo|^jp^(~pLShwF1SkU* zuQEaF{La=Q^x9gAJl{rRT#@%Dn1|7Y=k?CSgTSTI18zZ5D%YiEsyV|a(^RCW*hLlt zGk__qtQhFkZo1ZF2_l*;s%Ra*#jh-ArKT`pj^LEhbwOe2z~bX=4*676)O$A*+i)ON zI*((Zvi&k1n_Q$XWAD{-JuelhQM>>A7dPI4dH9i_J3)vc5`vSpx6!)-IoEWh55vp% z_;uvY1yPZ>kl8 zoRY^L%*;=?U7`_kV(!tsk0l+C!ST)YiqjV7)?Wy84Y02s(UOn4;Ysj8{~AV#M;wCZUggeAPO6PvM@@WBoj}V?0U%@l;v6zKs>?bjlUvE5TlP-et!dgEizi*`D}EdfO7k< z7V{ZK%df96PJVq&$gqoLZEy)~aLGp2QMnPtG=#soO7TalfqSiqVd;olZt2fF0Y*7O zQqrFoGK}M+O$b?-QwX1jvR+^Mr~t!&$HN8?aNh^KjIF+$-)1eS0gsoEfX6tAxYvi> zq^y@4$nk!|>g)aL%jrd57UcDu3V41loRYZS%?fzlzMZ%M#rF0|JbORA0LDPxGrhm<)bsD1NiJEn+VFntv)_1&>k(nByjj1 zuRAT<-NwJ6Vt<#c<=>CP$l~>hESJO-Pvsa8lAaOIEkqnhS#rHO??-VikrbL9M zLW=L)AOUQKZzeMA{+ijB*gO9!{$c07-N3Hpo0uy@SWf#4V@Q zmOG3FG3($wJJM0`(k{s3E;KKFPo8zH1OFya9-@0|+@?uwy5z<|!|!MQ#|(F# zoWGet=|{nKJW3T_7>-Tn6}{a~O94PtS8YZ07#W0!Jg$gmRX19(qPf**{CZ>O9{b4h zWW2X2$;I&msO8{J#LwC^&B2!`z0q}vf1Ey`Fd5Xzek0iEFyF_P zmNj-)dXsh(#3*5^YHYUo5VG2&t1;^gHp|q%l1{#WM`X)TI(ns++byd$%i5j;>wZ?| zA=STBFEgK><0=|{)i&zsXA5yI`=3aH7r9|qy)fv^NSa@Y!Ky?xld;aJ2JDYLLhI{YvtJ;%ha<#_wsuH#2Z%WF${ zW&j~H2bI0$(9vf$BzVO!tQ+!H^XvF#(sCXj8+OzV3?Bja%Rg2v8a_n+=#+Q6@j0aB z_&$Mr^)Nk`wGKS{`x1qCy7HRV~tATlbk z#A*HGDdOJ@N=N(bL&EwAE?o)1vJM#C%SS-zuxjF`143?&2eNwM_!-Bh6(6?K4~hTz zoX#8PGwhSy6kPqW$;@fX&(j}ma)2*;vOfa@GgQ@nC)o`QubK?+iVj^B>S5niPYR_7 z_1#F+p%Cr~>)x>}yXwCnMv){<*oB)=!p_1eyOOE<3G=&*IhxpLUs z;IR=GLC?KF5clqFA!Sq|Fz2of@{|eR)5LJM4?MoS`Q5^BKA1syNS1 z?$DlV%9RO8fR3>f1s)@KT%qv0vBI3_b|*?z#rxn@3uM`OC*DgVw~;-OJLjNFJT{xO zLW4y(tziDU5$%&09nY|wwj(|we{8pX4TS|5PS+`lWJnF3^Y(zuqEnqVkh=GPG1!`^ zcwkvKidJwC-eHtF8X2mF8GXp}??~{2p1OcqQ!{)Slxg}0kkuA#?3vB|u|o4-5E{Tf zkTxN#`{`e2T+vw?Pf)uvd?wY}dyz{6b%9)WIgYOaXbx%tSt&f!Vs2KW$CZzak5RuX z^K3I+zar`+VW$G}_XSP(BGy z9Hm3POlKka=ksmBc$?u(c-#I3wTPJ!??7dqNv10%BA|0Gx!&r9$rHRh(g(-1w?jQ6 zEO}`V&zbA);V;$Me?1`jL-gI2CVFl?vG+wbWN+fLI{R3Y3oO@A^PMm9^JxS{TP?>J zvJ~8${xpCTnJw#7XYs0>=$H+5l|P6bn6_P^_&H1@q0uQ^#w)%1H%RzK)(BJHsj=cn zcXkGo91#5gQoMknK1+zuyPAvUFnCSxsI@B2bwhjjCVwjA@j5@x9TpnPBxC1H&gl!I zttxG6=tMQU-8c^0udmSqlwWh(7Vmz|j)k)8QM(9&3)E%Hy20TR4cNx~=b zHsRpSG{WlUk}uFLJvgvnA~&at7m z%Ff*i6H4r{a4Zs*z*7V!&D^xQP?rorR zOC)%4)fXTh--CgI?w%bFIe+lG5u@^coZ9H;>F==UGr zh(x03#y7+t{10JT+<*7E!BFm?8TC4wfH1$C8EI2dWj{4*Nd`C{|c|&~Yf136? zh=Pf)WIEq}+&8J}*U8H>UU5N2)M+3hW0jqu`HhWoW%;9^l3`FLWOqeh0Rp3d4KB4! zPa+^nQQh1+d={)T$LT7xYr4k7!Gh;!dLFq$ z8A_r{;Kky+P|M2%p6)1varPDBzeZO0Y&94+vXCrF?3%B~nt1ZH-ioB88ORnJ?U`r7 z8Oc0#Dd}0R9&Fs5-wNY>Qb#mKKXYM>b|=<~HM)HDkXYKo7zOs0(KvT!b=AKdCk!!e zRK5@NYwpy4`!S4c~OgKIu1g^ALG#D((XL&>Y2A){8?82IQBKvlT-^%1=veR+m%Qa7aLEi`fC z-$std?KpAGw(IkdnYqyp=CyZwlG5%jxJkXdU_*~YQzALOtDoHYWFNZyB+h!h(wRX1 zLOUTfA_xpeV?f4hFU{#Ia()$zM2SpWmUVYSuTP?uQoFi(%8QFKM0lJbQgwt?D*mxCnN;M3Mcx=Lejg{!XF z#;?FKQemo>C-2xvA(o-aXn0WB`SFosTdyDp%)t2|E|0yITI#wuCoJ+r+rYI!96Hra zh)OI%E#Xz?sse1EO8gK|9gDdOu2B)U(W7zqy~%jgdlQlN!?(eG#(cK->i*N;#i0O6 zQlK#6AuyF_`aENJC6VXs4C)aMb&>pTAN_}{JZ*K!>^kIbW00~Iead~$U}W!kZDK4y zS$?N8F@uVbzge1tkp{6|XXmKyXIrIU?rnb%Wae$I)#Vi_@-+>J%qU{9onk^y?`cmc z>h4X2LRpNyTP}57I}aSlpo3qZu4K}k9XP!mjS;>>FHQyA7D+zgI}RpeP5HpDs^le& zfp*o{5`s|O-Gf=e2jR$#?i2!EWv{t*}kU~MviLli$r z;$8PB3Kp@qGP@YSxmSKpfe4M2(_EE-3(d|)dw8?-Po`DrUGpn%8p;{vXHnh=0 zwXu3qyxn7v!i{R{Efe@@}qnH9sF(wZxIpH(4BDK8La5uo+1S)sI5 z$T*>^_};c5rkdZ`BGSpCcy{6FY%cIwebRT)FMa41k_rJl7D?>!LF08ltRyeB46k*R ztp>|^@3%pXseG9A=kpHT*CYOGFNj<~<%==L1yc(d?ZZ)>iq+vMMqy0f&C$uPXkN;K zhE*X*#!iZ24l-Y9<&^-h;Gob0Zj6@e94xzKnAsZJ97F=T{Lc+ngUQ~E5kq#ciY@qc zJ$Gli$AMnZ%@QOuKF;@zQG0fb(J}TbRlL=Cvkvc6FXn2eMuJh^(;rWeO1sxiot* zCOXP*G*cN5j|~gGjE{G?A6q0JKz)tMeh|sY8$G+Kz=*F_eELU!&wFkf&9`@)77at` z=X?s`<4)>Q(LEL$jYXbV89<(;hfhA;_bHU&&O|17*6OKcYQ{&cg@Qt@{){HCu++rxkO zh=zauK*w935@@axb4WmAs~Gd)TR8}Du_Wms2Kn&|C?=RDXHFnH6rJu@*j|9h$n(ci zd7Jb#cbAfVes#h}<8hZV{fcqEJ|FrZ2(0|1*=iASAAQ^A1!5QY)Lmw&vCJ<%Lzxsu zabh&h#M7*Lm?1ZHu%?=(HNFaYCr~ks**Mk>;LPUSO(&&xM3v#NRdu4pQE zrTcUUzM^2BOsnV0ZQ6~5I3MkCaT#V~giE84kf+tW*g!30u!?u z{f+dNFq1Kjt%u9yMN_9^O-;&bc&h5oi1!3zi>H&pOh)N$2`x3>*e znqhG098}|}R1vc}9}%?6%=(ot_RcM=*CeAQQBkH(R3wL3&K)#$Q08iyj;u6)dn%`> zVEtxm)uA4jxEI-GJYbez#9L_T3Ii32rJbt9z-GOIl|fl(b=7M$E>jJtT}j86TYAFy zy^r&%ODk1SB%XLeh?GcVisq5E$$xDpKY{G?$o0b=-F<6KbYo53`a`oA!=}#0l1)dv zm)FRwix}DCp`3w@-aYNboOiMK^VjPBpAM0%M- zXa(xXqRH><0i1jV(FY{6)UN>O`I~($ne#R};S^oATf?Z)YBi1_vzN`nH*;dojnqVs zMK2o>14bHyIFf0VG>Q^D^N5M&*{8b2-p`Bcig7q=Y^TrJ%s2^tpqs zova{P)UliasWe+;bfdmgCF!EEzedmaIu>7fB?Q=Ycxr%|jA~U&vN}$}^?bC^og5y$ z9z_oDJ9sDRP{`vEbRj1_QJ~L6V*rtBd~~a1;?cW8MiqdF9abEqW-fTS32Z2mMi{*i zAF%U?YLVU)X3-2QUG>fEGj zIrRxmeRQ5BUtq^a<8uG*;_Gz zE{FAnpnj?Jb{pGaQX{}-Qp=0l8j3o!&l$s6TDv%+3ux>r%W7-enGj1WOmHqLO!y@n zzq->p+RMf!-P(j}MX+4lW;p~C@;WCJ@@AJjFg>KAHnb*t(SxSL=PulCKF@WDhu>oi`*p)|vCtWVIpznMwzE6Y+bn$9Y z%kt*9z6Mn?aUGtpaEf3VVyDpc%>?~!hFIQ+0bg8wFZp;?SBUSj80mC8HP<7;%p(a8 zJ%R?6U}OL5;qgys6{@9J-U% z9uvezN+A%oZ>@D!o&%UsPWLH2hvtneT%E7!1btEB-iLgbNAsd>AXgP6$77nswUxfg zT4&aY%~FBg_2^UugQmy2f*<^H3mJ_@bvP>R(*bf3ptzQH*#(iflQqnOox){-fCVh= z_NNV{y65y5eeKX>ncJDWAewN%k&{p0xZQcmqj9p^ChZlu$c#fhNapnzS!L1UC+$(! zc=LM-{+IdM7JG)^h4cBBL-Qp)DfN4`j963*pSQZRNO;Pn+HsS0w#8GN`no0JIZ8Ld zbfv#@`V>d#TO93cC{7^UX;rTTN&!3x8U3fZc(E?@d^|^3ko}$u+}i-a_$`n~adQ&( z>_sgdff1{v7e;P3X=Mg1N3!(QeX@}g*_M|0#-zRxIH5*xmAZRvpJ{`zpw6O{Hvdb# z3(88)ivM`cnWB97F{s&(ci{lKKGXBok3=Y#4nSt^f?C#8sgAbarZ!EM|FCOkE| zYQVCYMH=gcG~;WhvNFb-51`$O;7DJs&{A$M+f~f?Z|WU80qY8j`(O#2^!4+hq$rOz zz~yXH+aUy6nflE=g6(?a4Shv|v*q7Eex(aWgnLeBo5Y68LIUTt)z#}{9wUv-j?tyC zOXUn#V3RGB#(6EjX)6T3vo>;d!kAQ6`qTJ0*W(BJ-vPq;7p2Ds&G37<(@5K- z@WA&q7Uc7b&t^1ohjZf59Fk^!mb)^I$z7q?UJzRB9fE~Ah@*fp*uXpaAP1AQ$jKE) zs1>F5E+p%E!l*A;LHs3cUDfYT-=>|tH|se$z~O@f<(=*A{tqNA9EIo0=o?mC>WI%I z91l1ZP`^^E%cJ_h_F1X;s_A4yD|`oac0Hre_DzFjyU`g~yPq5&cOq>_d{R!r0i9n$ zd(080V#79Cu$6~wPDNb0Qlqw3S7a{JIX0r*LV~0;uu0jpFp8(rw z`?AO0-i39auNqVXL+tithF91g0Ys|~8+~f^s4X*`5f!Z5>Z(4e%9S?x%0XL0OONR) zel&}Fgxf`);y!kAv;Jo0$4>dmk+i5^UHQ2z-Z0+U-Vb!dQJKeSHPKh`Yr)V`FOZ2h zpFxYWLmBtJl)XT;xT0Jc`Gj_{y0`B%6Gy!_xy8BB={l>^T4;{N8OCc3Zc=!zKF zNQv6iufy0xg)C<#JbB#pincsO&ofo)(6uK;@9`GyU(~}~%Wl1{a)SMkGn$WItZhcb zS2syQhof>4XG5h=c|Ce7fXnCbd`#W4{4h{XsLaSgvtwBWtbi%j&wF!s68cSN;U}_^ zrklJhJKxlys>WdtVHyi{^H+{pb&TIQHO4lmZ|ySdZlL~Vz_F8|l4YRhK10J%&l7`abE7 zErS-TWI_|Lj9YAPHuO6QDX2Ejg z<7!o#vL6WbhY`_qJDszw!$OAmEVFaqBlHzJJgVU_YqrdYfkbbW%YxXhlEVpQNn5kk4BWNBV~bnq z+A{*iXzAnZq)5k9}VTFHO2MB#P#Au$l5aKFCX?(2`JKXXMJX>j%JY0x`QtM>Thtk;N* z6JJVogObJm9N9#_mbP#cO+4Uo#Y!YdKD^Ig@Eb9=IoamP{Ib82-AlwHR<9N+8%ZI9 zEtEG%b zT`cSDjYsK4eZH362j0eD3!cvi=WbbdcyA4NN{L0UxM8?@UHPB#ZoITFEhPtgt~ok@ z@13gb7m8T~L*hW+t~M~tB2xNOIlNYZyI_0}PH)GuX-xTDJTc?jc2j%bxY0A)iZ%bu zH>yv5@zQZE$DXN)c~cF)!w@AREY|s0&f2RH7y|eSok7>wo|UKRWU-q>ORSkrrTfJ( z&z^;d4au@N9@-n(Y?IxDA^GHN2Wb!0JI~7kE34i9k%ti>bk)wcFGlURruNRjZ_Gyz zzX-Scm(iAL_|v+B-`8}kSsDfWYZZ>VpeqVO47J5$1Va+0;y-_I8z$@52l?61te}G) z%k}z83)L&V@U8f_5t~Vor(;S69PyRTUXAhfwW7^799nqXpQy6GL$w#D4_avM{Nl-Z z&NdlTf@!y^`YM)6`TOenVMGZ$-nnCgnq>{XcBQN8+#a{KCh{C~s!{Li{kGk_UXJv= z_OS2w{>^;-aFd}#m_sIt*TvUxs;YF{lNjSth-_h=N;H(dQ!Lo5Wh5->Gm%EQ80J6! zBWWfdb16Ye72TcHHM2;O0z&FHJ$x?!w-6IS_+!ev<)gPN?WdtrWQ%U#(KX2IQdQ$? zh3EG0N=VDSLG5ei2)GsVysL2e*qD9AZf(e2cmiuDr$=_|ma_Gp+-N`1(3f9LC>PDI zLr9FQb(Fp!nmZQR0*f+l7whr%-L`?n$O)x92F4)2QRWDAzB_^IE|~kQzjec)7CCEV z>Z=^PjU;KI*Gtd3a9T1@gDE~Lzl^d&ZzYZs(JUGO$^AQcAK_Ws;+A+RGvhAIWfk4N z7QK=S(ig(sJv~*bf;|Yg3?SbHc~y2D|0osw5#YFU_6Oz6z!f!XM8mdUC`IbmAx-jm zR2shswz(5e+?-uXMVEAMKF1N(a;9(?z9U9&(|GFndUgAuza%Ly5z3*!cbXK<7C+Y% zSna)3gVEbB8Cln=%Fu3s+tz6DtHUK4c)47Cz1yrDas-}l4qp*#o4BhnfP!~azRqvp z;J)&}!4dr5DM(jq6Bi3}4L27X2P@bAMj`9;m0Zc1aN7%+UxRuyTu6o<`yH6+?38l$ z-juQq&q4aRKO1CM8fhleXP!;#yCIzsmrhL`YEXv^0KXI$Af58EHNz5Yyax* zl5>e!nH*5~*PydMw}i!V4eH~c)4*pHw&LVaaAGGk z54hZVW}RqNznR^RB}05g!qSZZe~w{F^cl46OX(10vpWk)oo!kfSfbM5T_`$m#f&l_ z>p-Ltj_EvO28P(2{~j0fxKZo<3aU<__tU;q45JiVbx8bKurbN1Sx>hV73{y*j~*?v z+?n|nDrNUKT;-E((}qWaX(;;gdHilTandlS`fa8wrDnCOgY|q3!kwS5Xmxk5e~6X= zT*l-ZB(v)F**5PrW=ov++%3n;V`d~phG#!f$*{?tae)B3eIj^Q0LzR0FM`LfzeGG{ zjjV!D4~h%X(xnGWlJX}Z(b<75y;u;X%K>dU0N?43$N@% z5gadD0W+1%cVrMoWI0@sZSgy=@c}+&o3489jW1ho)g;L}LVTkLWx36Ve!WGblntT| zNu I^%^&`1O2>&6FCIqTxtg=z|2Y@c}Ot=?4-20Q6OnRSFYk6Kv=<{PO&pGO+# zhJ*$tV#8Pk?cx!4A|gqSJbyc$^{PG)1}i9`07ewg5_k-fg6rY_{v@9`l6NGYNovPp z@E#pG_2gSk3Ntd_2{#q$Frs_DJr0@hGYfJ&!c$J^g=l0`@(Y1VQ$Gy{`r=YV$E}$c ziJtw4ypU{r@Q{9S^vWRc>6LjQZX$e?sN_OT$++-Ao2YPTely|~{hS8qgmiB0%7 z;c%Aee$H2}7qyUUJCc}F{izStU!iM0E(Ee!X+ErHSdbmG&bikFikt;)tKA+%4v|c- zfjB^w$?$=JC3<~b#3Ch9lwT#8bf08_;-O^F+tfMXFzDEaU0tkMJHhG`JB_3u@22>` z*ks>&Kk5(gbM?WsjXACnKg67kyWU10Uh$FCV``L%H`(w~x)P*yXi{71c97;GxB&{48XP355TWu$H?{QX|;2%`;-_TOtbp;sY|&y4|_H)L@#g~aF{ z5goT?!p%`UkNvwMlFd;%U6e^Er5xB;+6Gbd2?abXtxM{{(Mc&)M=xpD9BhOAKI%u( zTq6^FEXzqOSX_pZ7@-b-PQf+={_PkKVyo^+^1!tWv!)X=*j0u@t?;|Ifdk1OWLbOB zdUdp`Ca)}aQ^s7sI93Kt)8#+e;jQK^+dL_j^eEtTr~8wbRj3Nio9u$|&hJ*A_KOEO z#C?dV-tCrxvOgORsDElN0iVn8z(;}UWJBAV>GUx@B8cZ4z4mGzJhp zZ6~vq&j8We*$~SQ2{r`zA-6(TqwM5!~fEAR7+Yb9SYlyW=kb->@zV6z5=d8i9!y@jA3G_vf>&8l35yn} zKV=jnQgY89Z5HA{qj&-kM}2qyrUW)Sn?p@Uha6Eu*~MjDJMD-k;1@x2(W31 zI)DDwT)^%2_M2O5V0=|IyWwssvF2?K#T6lt{mC@$Cg+3K6m?0Caiae}W2*0Y&F0D5 z7bSHg^PJGo2@4Cd_AQ;HNwbol721qw1*Mv{%hM6b@1 zj3xL6&r=8z`{yE*s#pX%ww)<WCGN1Iu5S{E`IKzqo zLi=nh2fAW>EvUj|h?t!oO#R|-pV#^W2d}WJO(iRL>|Wl8 zxjzba)cb=}x)A(dLcS-9zJAw-N*$A1NFv>gQs&+6Xx}!FwBNl@AWVjSZ&EU%aaxpl zvB@I&IplCl@khCx>qg}Mmt2F>V{axcmaYXY-r7(=GzxJ`KM%&EAW~K``?{mz;APGq zBg29lGTT55M`0Y)zbK?<=uf)C^I89mkb~bD;?$BTh$ABzPGH1<^;EUc_7&1oZY?QK z!Hufiq*vy%CXUCgKR!&|m~QQ;j+nZDJQU-Wnzg}*YSsW1BwtsSTOH>!{wKImmNyqA zAK%+CQtQUnBIU1k8E@p;ojAu|vX-HTsHS?a^+Ajh>*vb55XyBBGJLgk#gl<)XrGb4 zJEcg3uT|K1g(j7UexF+Bh}f!r&z5l*mctlGhF?}z0TchW<2G_%pANBTUQH%gEm$jySc`__au zpD*0PnQPl|C18i66CZ*iM*56MpymFXfDeH+4g&}@(F=L2f#w9ZK-1{9{m%Yp=3h+1 z{B?_9*ecEU%CB8D!Lsi(e$H4Rat6PkbK?lus0@)z7MKzTqjHIhbomE5SjXR5_w!*& z$);F^1}CiH86P#)w3dBLw7?7^%?oYfWQ{bm{_B3$$7o+Ej9+9U_~P9~3hCSTyfgij zSrrOU@4~q%ASDyL-6Glk!=Bpu>3z%>S&-wv-$m8G#IHoyREEutEi$KE8+N_SF;VGT zIDgW)`sSwJ7vh8y%%nx((uG+xwcRzBlgbPoci#%ApcT8u$8oID}>?6*K&0a8I53{VWCcY{h!5z zpI>O;k=XD*s@68BGr|LEUGE9PR#l#`F;Cg@-Cg7VDoq~^(9w@t`$;!0mW1IMdpzDw zdXyU0-1WBYo;jaj&iiqcuAxS=*(K88^)SNq*nKHci8a!WatcQ{OvWoKA>7)7BZ5tZ zmPXqR+98e=%o-b@^PkaLFhPYDgbSH^e>+NYlX*v6Y&7%73xR-C%-Lw57ITd@wooV7 zELbR9-?#|%gYXArs-HeqC0OqT!{5*{T5(09y<7@&P8zk2Gtm^XE=xY9#5(ucclbIx zoqiJ{Nh^pnuP54`yECufr`Y)!;r-~496QmAE> z{+R6I?hMjxj@Ro+t)S(stbv^o`<>xq*5i{W0px%3)fa?SEB93i1^xf+Oo3DNRpCd$ z`}%C;|GNqT4@Uy)ApZ9Sj|t{BkbxHhdm4O%?*%s+yeIqr+l~MIunhRpKoWiz%x99JMO7FiT{|6hy@?<2yWk}r(0}ce@LIQ!XKp>E(Et`jfvyHKXgAJ>v zoo&h2BgJfXqL**|PgpstZ%||FK4AQc=2AA9nvBd7cM2DkVX*JHZCzF6%}Y-h+*qE| zz85?yYu#}R?LEljO;0>*u(Uv?nCmmNqmo?_9vT}xSVE5;XIhA_CSXa)vX}v~H?vPx zF*U@6SJ2KZL86PJV=9HLwIwZ@l_A$izfD*y8L3E%3>hd&S|GpTpJF(sr{YZ(Tc(v( zeq)F;-?U?Y?M93LVQi^c%u5+Ftp@Y-tsnYL+$PL#jf9aRbcFfSButl3S%ddmvFLHU zvwjIC>gKZcLmt{5?T*<{idrMUF)u~*YOg4SQ04Ns3KGc9P8z7BSS0A7&@F#H419_b z{8CBx$E4nb=83KH+(Yx3l&JQF7(>E3ya6ZhqUHN%_a!n{SIx8JWm}cmOg#?;Qu0C) zVxFVv-&{D zgta0ec@k6&F+a*Y~x5r6hcN7SEy6phOX&DHZ-ykcU`_kF*1u!^S(8vo{MgH`oBqbj1G3?Ge9 zd@D#18_jdFy@tmI1!<_?X&HL!ZzaABp=x)r6`*#VgqNb0j){)EiWr*{@}K)adPHN_K}!1rlLhMJyvtkR2~UUn-JSXD17{T`OznDB%R_(KtH^SLmCsl!h$Y< z+$*oy5v2NJfxHeb`whw=urjGsxYyzbN)P zN{KYk|HP+~0Y!CjI%3G_PqS5u)xHmHzjFfohZHvH=g;aX27VQY5;lUv1tipu#GpMV z@&k@lS&t6u_j8~3nI*V>vQ<@h^5(zPo}reM&8MeaqzLhijE?>p?OD3bhMCzl6pFAi zk~iYNM}WY<<5ex8a=~Jr{q?VTM+*X_vcZ6eKoAOD5+F5J&tZWbFXV*oNaRxs-D<}7 zYSdiIICtgJhkD)-6isR;^Ay;W>s1e9Si4|uGs!lmU!yK7H*@ChK9<%8#5o(khksZ= zyTI{3V(Jc3eIFWAbGlTLYiUX)(fIkn@9Ov{M24=#?WYk%b)+r7D)4H1sP-z`!eM-^ z-OcPaU<6*>4L(~Pu86u z-ST*B(f?#QLl0=>xXItCH*McrW_DT6T^cQ;%4qQ13wu(T&4_I*_9{BEnrxRb@}$aS zeaf|?{zx}Gd(B1XLJy7l^Ay?Pne~1>>4x+cd=9MA_5WmLenB8;!X+>;^n-4>_70{# zDl9XjEkV0;PM=J1Xn#Uwl=0S0g%z9Y>kXDhvk$QvlH$lb>OIV43Y=9uC(YJqyBd;` za4*w3^_xj_lK-S^nz!*4qk7tn^dpvCNvqYjPp`RcmS7rD4U7-4e%T4ul zITWuy`SqG8V9_3X74m&>J{tQ{`9c1jaVa3W_jioAR@L&Ux7^w=jowoY9br=x<;`Ox z{9%zy+byG!DUYj73;#?nXm zF!Ds7laf9CsVn=Yjf3=_5CnR8d1dF9mz*@42phhbpt^}u*q(QhYLOv}ZS}4;6hKI? z=*zxUb$EKx@+j3;fsKTAIeq$*vPNl|{bXan*ltmUs5CtqP&cVJU&i3 z3}1*7XvtiqiC3=q^FEN&MhG5B@1Ffb)rSHvCF(mp;lL-#8(40eqL#`6XP z6sZpL+CUzwzLwL=U#gc7ji^w#2-SZSr48x;@~lQ(8>jczNfK=9yO?$dthVm1clrH& zWkgr};QF$^QbzV@EEeh{k!(@4<^?%O@7sQR{!#sQ7&Gw!@9NUE<^hpis<@3T9JVSB zg*`g9E$52E26pH5cTBoQRtk3EMjcV7UHha0hRpP;p`<#Xq(UA1U8+$>#w~s9m}2;p zqI1)dK5u$G?|CV0^aJo(UwijeK%(o4nDqPt7HQ zgfBH3S8loluF(#H)^wl9>>U$0M;T+P#aXx9!`Q($tVD8U{n6C3e)eeBHDa8 zDvs&Z$7%9H_nZ*idiIYL*)deg!~9^<3HlGM!oqL;(%g>zo|{|N$1?^JbvJstxQ1xN zC2F>pJdsQd#6BFW`^T zT!h9V`WY6+?>9~(SURhcUHl2mmmQ2e2Wsuuh=e~&D~xsAZ~R(h>8wn43F0-?a-69> zLU_Nx!7uqy+aOhOEPh>cm|vXKnfZg_*vbu7WIBM3B>8hF)v+%=>+3&cg7JgHL^RDz z@M=QUvS^@Jxif^jv#2)lYkSG2yQ_LN&c3mA7=hfup}ZMQ42pWO%utt>&@z4Ep04hG1O7LT0Hj@ zc=&DkW+&M})RvfWI`w@yRUEjA8P&UC2@cbw!@C1!-W%c)qGrcY2-fO7+4bdRnzOm! z*(AiXgIthFk5CQmpch(?h%t3CTN>e4H|r9$$;pqARCOkf605(yuAZtG>{9WiRiCv? zmCN8_{5fbkDQ}e6`xTm_Y6f4Z+XDH=2++;icCAet!XWzz!HU>*?VUuM_7ZY3xx?X} z+!U@}u9!syaKawH+gvCgLR!D zJI&kWTCHDq93*oYT)z&;xL6bMPj(;8u@ZOex=WjF6;rr55u`c}k2(T71d(X;>P?J+BGypgmk4as1;l)L=NHfPrb2 za51}W>&-)+qtkg<@}8A=VmdX@JVa}4g3-~Zy{++AU@%%0Zhxcc2aSI!PemK~Ynxx9 z&;DD|xicwZ5qr`;fU8=MGhpnD`f9ANRMFhnb%|sg<8nZd>@mgKFq)0m#J=^=+~yD7>HKYaq=@AiGs_=O+6$5y~29rjrQRr z%EEY&Wv~WS6^gbgZ&!ookVt1SD@Pev>*M)uiDR$^2alcZC!jJUm}lKQahk?lot;Vd z^bg@+Npcl&y=&AU#*%p|QWYz)@${>X(2Z%*k~rw@5c^vwotfCqyCuC>_~<+HSvfMm zS~`S}JEoDcd=@vYMFE#eY8D}^9YT2Il+PUG09K|O4Bf~|Hc1T2Xmn*vY(Q$SaZ0lr&6(n%S3i5uN z$5d{M*!mhrl`9dS|3?aj37-X!*{QL(^d)(Wi~9(m$+Kc-ay>2b2>7;RHK`t2R(o%` zQgmZBs8pMfSlM1OM$A}6akVWs(6hC5$}qgr6rW|w#$gtywa%$x?f}nY0hfU3{yw6? z%aJSgh$hdLooQ)Y>rWrI0U#ZC)Q?Y0aIirM471m6llit85^Pm3Y@W{Qv!9?Lu9hZp zob3U$!-IXqJ=Y{$ys!EoN?EpPB;nln`2U2~y>zOxw-c2(lE zb7Qj-A7!tdO{{nwoecCa{;P{{=Hjwuo^PdwndNnecSvP(Pb`MHB<6}+g~7@85Pw>~ zp4?ZziNp5c)9Ts8{Pq$@vAnJOPcFQUdw^kQ_Rw%(%DQU4PAg{<6WUA4`v-GW(b!C!uXSEzs%8g>^{+`TI1}+%C9JOfOk})~W{1oYr zcsd7@UAh!RGY-#5M!Y#22+^S$j!}^QY5}U8I&?yt5g6^nTqmoVZ5uYCu@12@U}8TN z(Pwb%m4CC$q=y8x5G?E#UtNS8qFS9j4HY?yH`4vbi#>g7f?`ah5J#nI6Z4g)A9d*c zuU5Xm&WyN&qCKA!6!@E*>*83k$?W^rf4-&zaZJy|H%9nJu1$5}oK5>I+h5ran0W*S z!@=8wY}hKK_UKC^xMRS+ufr;5NfE!4{9s~yTF&R3*1dXQ{y?7<+_Ho_E zl=$rx!3BMy+fc-avwg)~GRM!=#V3ueziB$YqhkfzWYx^T5Ny0U|JpQKNFEO+ue(eY zmt?br=PO08g$SaKcy|;N{&I|7ny+P@yjU~;KIJ2qW4L1b>1tu9xeoKIIrNe*hl(!k zb)_Z;qw;SO1>1EGH*06j_1}LY=p!wPPdE_vvqH zt2(Pm>FEIu$rgP^*oU2Qvvgyg{KU|`ifNeJv(e%~;|(hOAtceVVgj5aT;zX zYDwiZE%8BOQG|BzJzpoDmpbY%l3MuuewbWHW7ps}yVbhEv;oD+3Wz*?sX-EU$h{~A zT`EQ3Bu+I;H4QR!&Nq5!A|M0uMgH!kV9U|*E#X4g9N{ss3vI`csW{c4eM_JQO(FT{ z0MMPach83rIDm1m@wnCJH$yhK!F*_wzN5uwPY%9b8rVL2yDd}<+B)jG9%PWXZ}j;7 znl0fzW@{<5Oz@s^!I!5RBT7HO3)j6n+ALwY zGJFoK`hN)7D}wV6(aLO#)XbF8S&y{x!BW~;888rvAKf|1J?XS1cI4L|%y9RkWm!wh znZN8$xYz{gwVT{rNsdQ8-~T-bc4_scb?T1nz*xmsg=4s{^H#{X24pb&Gy6#j$Q1V# zS95p^ZSX07e?X>8Vw4_loyL8r9`w6&7R;tVV0|cin=v=cdRe;MAg}LSc2Jf+o4?$n zA>w_EgwHNaJzhrxuQ|rX2p{jEnM^`{>Ul4kfO`) zcEHfHRcXyM(?c~=74X;R7BVgraS1S`(j<}!y2BM>t5=YL z`fa(Q@C8*j*AE*6e-VKPXPPS<;3i_m!eWC;ZwKXth7AZD zE+$(v68Krgq1XQUA3Tsx3%}i+PagW+sw!Tc;IJ7*tl$5{8 zh2o?np&3tjXF5&y2Djy{tUiVrt~VT&bW^j`tTsMCHshKMLf-dPapcU?(ia(ou8&R2 ztC4oeQ#FX?{Re8IvLuLJXDi zP!)g$%&4eEAKX zCNCM>%fhhGCDQh(l*5DRSiby{-LqPs1C$ z&<_otcKhDZsb*vk*_BM@OAO15DUfHJh*x4e0-XoWQQHegz_%89-={h-UTqpl!Jm&F`}V+m+XIciKX#iY2=hFen6E&v^%s}M9^wF`sWV?N-n25Emc$$XrA9A&2PPa^HINLKQDU49qI-0 z@xlpiB%Jqd6&bR3@Lmsl@ed@7iUUbe(-w+e1dXF;bbs*P&z)+|6n61}1~k-LkVA9YCbM0s+{@9njqT%a zx2Y_#YZ-FUTw^6acRHW|PO$DtHdb+}1Mi%V!3M!`~zu0b)i^XWqivH(Ya4>7mA)^FN7xf6-x`nFW6^h5Nxy-jeb_bKe-TWz?> zDlymi&Ntl9Q`IJ$EI}npjobG|-qZT*=`VcM=cJSA)xs0k@$E;`&pY#T;y*IS{+voB z^8^4p))zAdUF8MpYc1|mZ_gFg+Q8Y$Re&gyq3bNjj*WCQM9D*RHnJS+4Z)wH`-hj& z$h++&4IARRj}=RduK*8!(DM3qcWL zuscHJur!l^-_h~&yfCdj|7d>y5)i(ZAB#C4zTY-igXmZ}*s@+V+m==*)Uwv+6v?~r z6Kr4{@{Z!>1?-^z9e3IZ$R@!3Ac_Z>=q(* zksm)SJ3oYrbm8Z*;j+7sU(vdqc*@N3dA1-Dy!l|wW{KnvU0LMsBHZQ?b;#l$@*R_; ztCQbjjSW5pSJ+_uVs-$k81rV2k8#OOThfA-NTGxw3WaR3!H@r7!`8{S;;S}>zeZ)q z-X=MC2a&r+?z?9N?)0`9*Tu@Bgk>CaqWn7J4;~d#8@x@dK@-7G)9GW!Tfi5t{cK0L zk^%^}m)-8MkVf<^34KV4F{VdjK{S~~HOv{AyFndOB6nU=0GtUr=9(p9^$ynV>{}^) zW380t90^M=oRK*M6I*1I6;_F%7v04SPr=9JL8ZTzJMz4M)&cYzo%JTSW*OaT!a2MQDzIp*u`3YF!jZ9MMzRB%gGgNe391n!tgSbDspybOcu z2{yN7Jos~o{X{d3dM_DWW-p$Q%=&^PYWkDE#|bvT4Qqj#Y_U+COQZJxQM2`hT$FSq za);vUsVAC`!$qvVOsPqI9ZYbvk`|MNybXa}hvcd?>E7@p&>~r_V?tDOBa%E8Ba-CM zFOr(SXJfU+Zz2Q)rtxyJRVPGQg_lu1UfdV)QMpzRX@V7PZUjVSIkQx1+GO>gj1K{A zI78R#fJ_??J_F8dh#{dlZ7-q44;3g*`(&VB7Gz8n>t1L{vfxIYH^R+ZQ~uNT&a!x^ zUh`EQL7RdJVtbk@-=w{ES=tT=o9ghW=q6);4<2GEGJ#A0QMc6*W6UCe}w zz~Fw@E|=#im(jFJP=4cT+MIXpaVSn-h>n}j_4OkF8ZII9hY7tdW@xjZ!Yc~O47G5TKMG6@_a#HxrR z;cLTwokuyk-V;+eg5iLK4KDKLt|mJYvfo z-iSQ(OF4yBH|k^z%izW_7Ixs3vh0+T%CV-wQg|rD13yHzcgS5z7_z{}CBY0fW ziK(}Z_#@mrdeofgSFjEbHW^N;s#;A?^Qyp9*zawAzT$Bwrc^O`!XFrXf>IH}`*>*C zD{WgT!D~ss5%XhQ>}!6~5KXy8chl6M33e>MJyrCrB^c+jCZxBnZv|wj3kgRu^L`4g zD;OFzUsDRn&Fj{(D1&M!7oH2X=XQB}uMi|I+@5J9Iv zk_gp^;xe$bEyaiKZko`fnLJWoJ^@Y*eCjOPu*?y(p~ zo6iJX)08|$&fJQ4e&)m<9*{L}VZd2+%Gq;Imjwmvr&Rz^O!Rd#x?P9OSWs<);osBm zw{&bz;419|OpCSvOF!JyD~{q`b{NLQGhbg&;M6C-anNi_{Y~1j%EBip!-Ke{Hva)P zk+3>486hl*Zt2iPw65dsg1p(x>PDyto+np!tU3FN`70W{$ndq;;_K$bM$jzcaeyPuS82E8mjl=Bl;#8duhLu@dlm+++E%AX7YWs6^Gd-pT1 zY8bp*mbBqv7zt^wl@=w8=3DSsizwi@@hP4Wr zV7!}NEd-tzSLOT;PqZYkEc7>G?qtf^Ed_6f6q5Zt3FcxEYLpX=G{2z-WEV0?_F${(AG_!9xwFkt zwfBgfQ~kFwOL0RF#NiYv$h7;&)E4kB`$kH3muq}T-$lTOA_33#Wt&_g3DLYY{yPb4 zXx)LbP~*1^^ID5{Bf}wYguHjD6t{K|^;H&-+_L-(55dI8-mc9F;c&@sof|>sH@n`l z2wALZudK&$VO$ubjTs#zC87GpXzi^*bBcRpWG?laeQ}(BbV{)hm)o0_$o}fz zT#>m`uMj}~51Wfi#rjx{i#T=~b%i*vi9$0KtMnQ~HumsjvGI3wj_syCpWt&5K1nCZ zy$w|+Vn5JEPy})bWKrVW-!LCvU-g^iaEjgQbus0}DitbccA>eGqTgjgo7z`~zd0sa z4KjR4ZYG^zxC(l`H0i$v9pc{B^HW0MLTft!S0KoW$v5YSrM$7I{bJeIi3~Ft^%alH zJUzhzhSqy$Wut4LQ~TOTqn!qak>XZHuoTQ+)+{g_X~n&Dcxv+-mT*TSK<5$Yh5O&eYdY=7}SIj&J|i`Bu0mH=_wM z$b`uD2cvvL97Sh&$$Wu-@gz_f`Am87&cT4w>BR4T!4x;$AeQYDvG;x_m2atkbecRP z|Y^dIPN@*3XdhWru9#n-Vjc z5z`KzF5 zBZPW)y5bQz{IDj1N+GC-W5$VN2%r}fXLkBu%ivf0kRJ1kWiL>2WmWi`MZ^|K=oJWz z2_GPQua_?}Y$BzCYnK-6)3rQY(f*Ko_8RlBs$WlrbV?wM^#-nKSn%F9Y?;f@KN&c_ zul|U%usY;>Wi)iokBkpc>^2=BEJ6_IQ=p2FiC1_SX@Tyx;!0o-<~d%43g&G*@Q0WIpZ|`*4~?B`MPFz2aypm3x4>$T=|%k3AchNyF_1LxxEALnI$arBqiv+Ws1C( zBCpslR#gA?7-7j~tUusubc{~{S_9I;k<%5HN&Mhwv+Xgz<@+1Me2>ItLUI*tEVrzy z*8`*{B8ckg`(8*xnl>gUy5V)+b?n6Jc!h|dLbOgt*H<9~E)~68!gj3oAM;rSm3YLE z1P`I;Z=k@&%CJ;X?%=)BM8L?R%*H*fi-Q;>#60e&l(u zph7?6@bJ4{nOjbxbi0lCjS6uBJ>Re@>%SkMlybvN3uU;;u4`ejR`C#i){#BW@Intb*n zF0q-8pj5M(CMrM(Ia$J4;*;^p0A-C`iB=ssjUqA!Dg?P8MxczL=JDQkVc zI~aYzs>U9u#LU6kEuSCJ01VQzzp6D zWML}spTo4>0bhqNZf}08<53xCasQHv^J^#?dK}1 zQ99o|4D~p%pwrzh!ghXgy1rUhy}mg7L`sXM&e$(9;;uXTjsNAqV5FLtu8rxccfKbP zIBHc;bZc41pFEk0|3c)Y=GKk=s9mObRl8j>Mmi$@HU0Va`6+ZV42Az=|JU~zyH7ic z6y|i{c&$9X$HGsSo1yb}Nd!9<+rIjorK1YNck>M294St6=jWsh>Y&YH30QX||L?LQ6VxkN_dH%(g&>)rTVzowdZQsWriM=)4))Ik{zk#zBM z^$ufUXql?o0fx*ovyFUMy4~oopUmr;AH2}vYS7fZ%Fo)~B&=)1*uQ1J+40{oW-=tS zvf&{NAWMFQspI*jh&K(qcE$ z0KQy<%{QJYJLER!Q**bH4D4ZZ3|Q^GfeL?=Wk~H~-$cH%@I+lee!HYoLJ!1H=|q@{ zp3V7HMs{Gm#}oeav#b?uK9ic{S*VCSE7EX5A`*{I$=5nx1UCNt85 zaR;_;VbL0qiEw8&ZP$X3v5Uxc8MapW2J*R2lwr$hbDr++zC?dO=|JH-Jm?hl?&p3v zjZE~jkDUVo#|1VpJ|108jRE~a-MTXMCYBVxwn@=^O%e2&%to6gA&oX;-^eM*BtlSayh8e9JQXu#ggaEYP-e1sESKD1a zV3ON~;6($S1}!#>F|B0mXk+KwKQcou$&M*Wj_I*#gsV5P4I@3?^-So6WQl0=jx!w+ z83fJ$f)jO35H)WN$v$@0Z8nPX^Pj=7_e$8U%?PRd^*!h&-mc)nc($MHxD9_W|%wh&^X**zO}YtlSTKj%qH!EJipz(Vn%N-)=F zgk4r?Ng6)vvJyDQJI*hk4+G0YYnay%am@)0HalZ~sAHC*|Mn2kNx3ucgFELd@@`BU zxY(?-K|F}KsdWe&yTCc<^{I#-;^r}su4SZx=EqZhK16GVr*3-*!S~F6?|rSya#s#v zmI#I`c}9X%OK8EKQ$nyl5x_)3Xg|FrB&)`qld%qjK_BIUYtlMS?7#ZNsOE?P(fP!t zxbxjh*PbX7LDE*RMg{q@!860nm_FM#l9^V`csVmGq{$fC&6Q+MiwH?|ygLpTnUcpw z&B`0=_--M+S2(~X>`g&IvQxa8siZfcBHdB~ng7J~+AD@+ATA-LL@Qdk3;cp+RPfPR zb^opXA4s<3J3d@k3JBsQ`v6re3sHpE5U}p0=&Xn6nilhjAWHpiW>r{xlZEAmBr0BB z<$`Y{!=A+VJ%k#n0eO_9p=^L|Dkx51)vdCA!+-pn$XtqT%YyIv=3EZFS!QFPVILy) z`7Mkr#PBl(Q2Y9!gPc+WW|NPE4kTfYvO3q@99DKF^7gtq2#Y<Q$HL7rYt*q2NX~2`1q-` zGl`}xn}&_3{!T2I=6F5S75b?1(6}|eK{13PcVrcdBG8_za;Lh~0MWx3i&xIFYQ3pJ zPgxI=D`y>fh@8hMP_4E5)3O-hAz}<1)MBu3Z0rl9{3%2ymmp1hpGj?7!Zh2kjWFG8 ziR32<(8tVWHy0qUxPC99*EFMGpF?_A$VzP9(8Orx!aKxc)KWqB zLqeVS2mEa%MRxmN*7KnbVa#^AJha=CnDgKC1sVy3Pa!009bXVORBv4pE<~!+E%3yN5&PLV&&`K^FM^pMF}h*F(@lf20qw&X zqX2d004pL*vpd6QWdjPIt7)%8vg0&-aj1&loE^Cc3g3;d13n}WU!cAjcr%ZOPs1Yz zDn1}u3+l?GWQHjyN@>jE5Houe`o#;}e71V9Y`{lTX`<&3Hgh9#C4AYyo|GP}J*od& z0Xg(ye6i4o>|@s zH@dF6|5!2Un*H^agpj|VN|fIuqM}etfeI0Y)+!YjycDMAwx@GZwWOfftT}U;C*_H{ z{Z(`bCqc@GY^f$qoA!F^#Uy_taChsQtB>u{J!fI~&!*8ct7yNY_kb$?`JjDGYVZRO z^zyE3B!P9Bi7Mp<^q)EeKjrr@@Yy`UTU9wK^f17ePIkQDRfHFbexDTD#U*4rBt{=+ zN=;?opZ&|~c9T)2?hiM4N9rGm#NRr*D72*d$W#idnVrJ*5Y))N`C*Lbk5j`u#Vc8M z$EcgxCh&)v%?5!%04zCpcuo5z`Nu+ARUr?NhCha&j25kHnEQxTNCp1Kg8J|#2`?wr zl(3J0K{CsXuI~klAxW=CJ!~(H2U%U464obIaaj(^tCd)CQB-sqwanCR>UX!J2W@KC z`@sst{KXyQH79#`9z*fJ36XBv2?8suk_(btIefo?S7#O3^ootL7PL@Awca6AJ&dwp zvwk_PKlL&4hb~-pDBb>uUuvwOc+LZP0hjlZaa;_I!rsVzZFDAn6c&H&&QBA|ls=nq zVxgeyap&WH-m$H{wXD)za)4YTP4BG(KU@iVTw0xF=VRG%BEMURW;~pGm{wtZbwEV< zZ%Gs+R7U~6=QZ(%9HNpyw)C*c{%_sK>j(M&eeTd-t3W=%C__wjMKM+c{!>Wh;_78< z<^ti+!6W^@TZsQkz5daKtm%ru+(X{!eSxKug|N#~LwIzsA=!E)u!&zFSzl;gJ7$Eb zgkb5b!!$t5^##cO@d)y3$re1~zwOBXexwy3$_fPkk>AiKfdNCF^qEQj*@yxR2xJWl h0=@a)twFhvPX@v;jF3PBA(&lAy8$gClFq*d{{z1H{?Y&d 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 634/660] [admin] Update packages and remove yarn references (#998) * Update packages and remove yarn references * Remove undefined author additions * Allow empty template and style sections for custom functions snippets * Update yaml package --- README.md | 9 +- config/build.documentation.ts | 4 +- config/build.ts | 14 +- config/helpers.ts | 23 +- config/snippet.helpers.ts | 4 +- config/status.ts | 2 +- package.json | 30 +- playlists-prod/excel.yaml | 26 +- playlists-prod/outlook.yaml | 16 +- playlists-prod/powerpoint.yaml | 14 +- playlists-prod/word.yaml | 16 +- playlists/excel.yaml | 26 +- playlists/outlook.yaml | 16 +- playlists/powerpoint.yaml | 14 +- playlists/word.yaml | 16 +- .../excel/20-chart/chart-title-ts.yaml | 2 +- .../excel/01-basics/basic-api-call-es5.yaml | 2 +- samples/excel/01-basics/basic-api-call.yaml | 2 +- .../01-basics/basic-common-api-call.yaml | 2 +- .../excel/10-chart/chart-axis-formatting.yaml | 2 +- samples/excel/10-chart/chart-axis.yaml | 2 +- .../excel/10-chart/chart-bubble-chart.yaml | 2 +- .../10-chart/chart-create-several-charts.yaml | 2 +- samples/excel/10-chart/chart-data-labels.yaml | 2 +- samples/excel/10-chart/chart-data-source.yaml | 2 +- samples/excel/10-chart/chart-data-table.yaml | 2 +- samples/excel/10-chart/chart-formatting.yaml | 2 +- .../excel/10-chart/chart-leader-lines.yaml | 2 +- samples/excel/10-chart/chart-legend.yaml | 2 +- .../excel/10-chart/chart-series-markers.yaml | 2 +- .../10-chart/chart-series-plotorder.yaml | 2 +- samples/excel/10-chart/chart-series.yaml | 2 +- samples/excel/10-chart/chart-trendlines.yaml | 2 +- .../12-comments-and-notes/comment-basics.yaml | 2 +- .../comment-mentions.yaml | 2 +- .../comment-replies.yaml | 2 +- .../comment-resolution.yaml | 2 +- .../excel-note-basics.yaml | 2 +- .../conditional-formatting-advanced.yaml | 2 +- .../conditional-formatting-basic.yaml | 2 +- .../16-custom-functions/custom-enum.yaml | 2 +- .../custom-functions-errors.yaml | 2 +- .../data-types-custom-functions.yaml | 2 +- .../streaming-function.yaml | 2 +- .../web-call-function.yaml | 2 +- ...e-set-get-and-delete-custom-xml-parts.yaml | 2 +- .../test-xml-for-unique-namespace.yaml | 2 +- .../20-data-types/data-types-basic-types.yaml | 2 +- .../data-types-entity-attribution.yaml | 2 +- .../data-types-entity-icons.yaml | 2 +- .../data-types-entity-values.yaml | 2 +- .../data-types-error-values.yaml | 2 +- .../data-types-formatted-number.yaml | 2 +- .../20-data-types/data-types-references.yaml | 2 +- .../20-data-types/data-types-web-image.yaml | 2 +- .../22-data-validation/data-validation.yaml | 2 +- .../excel/26-document/custom-properties.yaml | 2 +- .../26-document/get-file-in-slices-async.yaml | 2 +- samples/excel/26-document/properties.yaml | 2 +- .../30-events/data-change-event-details.yaml | 2 +- samples/excel/30-events/data-changed.yaml | 2 +- .../30-events/event-column-and-row-sort.yaml | 2 +- .../event-worksheet-single-click.yaml | 2 +- .../30-events/events-chart-activated.yaml | 2 +- ...vents-chartcollection-added-activated.yaml | 2 +- .../events-comment-event-handler.yaml | 2 +- .../30-events/events-disable-events.yaml | 2 +- .../30-events/events-formula-changed.yaml | 2 +- .../excel/30-events/events-table-changed.yaml | 2 +- .../events-tablecollection-changed.yaml | 2 +- .../30-events/events-workbook-activated.yaml | 2 +- ...nts-workbook-and-worksheet-collection.yaml | 2 +- .../events-worksheet-protection.yaml | 2 +- samples/excel/30-events/events-worksheet.yaml | 2 +- .../30-events/selection-changed-events.yaml | 2 +- .../create-and-remove-named-item.yaml | 4 +- .../34-named-item/update-named-item.yaml | 2 +- .../pivottable-calculations.yaml | 2 +- .../pivottable-create-and-modify.yaml | 2 +- .../pivottable-filters-and-summaries.yaml | 2 +- .../pivottable-get-pivottables.yaml | 2 +- .../pivottable-pivotfilters.yaml | 2 +- .../38-pivottable/pivottable-pivotlayout.yaml | 2 +- .../38-pivottable/pivottable-refresh.yaml | 2 +- .../38-pivottable/pivottable-slicer.yaml | 2 +- .../38-pivottable/pivottable-source-data.yaml | 2 +- samples/excel/42-range/cell-properties.yaml | 2 +- samples/excel/42-range/dynamic-arrays.yaml | 2 +- .../42-range/insert-delete-clear-range.yaml | 4 +- samples/excel/42-range/outline.yaml | 2 +- samples/excel/42-range/precedents.yaml | 2 +- samples/excel/42-range/range-areas.yaml | 2 +- samples/excel/42-range/range-auto-fill.yaml | 2 +- .../excel/42-range/range-cell-control.yaml | 2 +- samples/excel/42-range/range-copyfrom.yaml | 2 +- samples/excel/42-range/range-dependents.yaml | 2 +- .../42-range/range-direct-dependents.yaml | 2 +- samples/excel/42-range/range-find.yaml | 2 +- .../excel/42-range/range-get-range-edge.yaml | 2 +- samples/excel/42-range/range-hyperlink.yaml | 2 +- .../excel/42-range/range-merged-ranges.yaml | 2 +- .../excel/42-range/range-relationships.yaml | 2 +- .../42-range/range-remove-duplicates.yaml | 2 +- .../42-range/range-text-orientation.yaml | 2 +- samples/excel/42-range/selected-range.yaml | 2 +- samples/excel/42-range/set-get-values.yaml | 2 +- samples/excel/42-range/style.yaml | 2 +- samples/excel/42-range/used-range.yaml | 2 +- .../44-shape/shape-create-and-delete.yaml | 2 +- samples/excel/44-shape/shape-get-active.yaml | 2 +- samples/excel/44-shape/shape-groups.yaml | 2 +- samples/excel/44-shape/shape-images.yaml | 2 +- .../excel/44-shape/shape-move-and-order.yaml | 2 +- samples/excel/44-shape/shape-textboxes.yaml | 2 +- .../add-rows-and-columns-to-a-table.yaml | 2 +- samples/excel/46-table/create-table.yaml | 2 +- samples/excel/46-table/filter-data.yaml | 2 +- samples/excel/46-table/formatting.yaml | 2 +- .../excel/46-table/get-data-from-table.yaml | 2 +- ...get-visible-range-of-a-filtered-table.yaml | 2 +- samples/excel/46-table/import-json-data.yaml | 2 +- samples/excel/46-table/resize-table.yaml | 2 +- samples/excel/46-table/sort-data.yaml | 2 +- .../create-get-change-delete-settings.yaml | 2 +- .../excel/50-workbook/create-workbook.yaml | 2 +- .../50-workbook/culture-info-date-time.yaml | 2 +- samples/excel/50-workbook/culture-info.yaml | 2 +- .../excel/50-workbook/data-protection.yaml | 2 +- .../workbook-built-in-functions.yaml | 2 +- .../50-workbook/workbook-calculation.yaml | 2 +- .../50-workbook/workbook-get-active-cell.yaml | 2 +- .../workbook-insert-external-worksheets.yaml | 2 +- .../50-workbook/workbook-save-and-close.yaml | 2 +- .../add-delete-rename-move-worksheet.yaml | 4 +- samples/excel/54-worksheet/gridlines.yaml | 2 +- .../excel/54-worksheet/list-worksheets.yaml | 2 +- ...rence-worksheets-by-relative-position.yaml | 2 +- samples/excel/54-worksheet/tab-color.yaml | 2 +- .../54-worksheet/worksheet-auto-filter.yaml | 2 +- .../excel/54-worksheet/worksheet-copy.yaml | 2 +- .../54-worksheet/worksheet-find-all.yaml | 2 +- .../54-worksheet/worksheet-freeze-panes.yaml | 2 +- .../54-worksheet/worksheet-page-layout.yaml | 2 +- .../54-worksheet/worksheet-range-cell.yaml | 2 +- .../54-worksheet/worksheet-visibility.yaml | 2 +- .../90-scenarios/currency-converter.yaml | 2 +- .../90-scenarios/multiple-property-set.yaml | 2 +- .../performance-optimization.yaml | 2 +- .../excel/90-scenarios/report-generation.yaml | 2 +- .../90-scenarios/working-with-dates.yaml | 2 +- .../excel/99-just-for-fun/color-wheel.yaml | 2 +- samples/excel/99-just-for-fun/gradient.yaml | 2 +- .../99-just-for-fun/path-finder-game.yaml | 2 +- samples/excel/99-just-for-fun/patterns.yaml | 2 +- samples/excel/99-just-for-fun/tetrominos.yaml | 2 +- samples/excel/default.yaml | 2 +- samples/onenote/default.yaml | 2 +- .../10-roaming-settings/roaming-settings.yaml | 2 +- .../load-set-get-save.yaml | 2 +- .../20-item-body/add-inline-base64-image.yaml | 2 +- .../20-item-body/append-text-on-send.yaml | 2 +- .../outlook/20-item-body/get-body-format.yaml | 2 +- .../20-item-body/get-selected-data.yaml | 2 +- .../20-item-body/prepend-text-on-send.yaml | 2 +- .../prepend-text-to-item-body.yaml | 2 +- .../20-item-body/replace-selected-text.yaml | 2 +- .../25-item-save-and-close/close-async.yaml | 2 +- .../outlook/25-item-save-and-close/save.yaml | 2 +- .../get-all-attendees.yaml | 2 +- .../get-cc-message-read.yaml | 2 +- .../get-from-message-compose.yaml | 2 +- .../get-from-message-read.yaml | 2 +- ...tional-attendees-appointment-attendee.yaml | 2 +- .../get-organizer-appointment-attendee.yaml | 2 +- .../get-organizer-appointment-organizer.yaml | 2 +- ...quired-attendees-appointment-attendee.yaml | 2 +- .../get-sender-message-read.yaml | 2 +- .../get-set-bcc-message-compose.yaml | 2 +- .../get-set-cc-message-compose.yaml | 2 +- ...ional-attendees-appointment-organizer.yaml | 2 +- ...uired-attendees-appointment-organizer.yaml | 2 +- .../get-set-to-message-compose.yaml | 2 +- .../get-to-message-read.yaml | 2 +- .../35-notifications/add-getall-remove.yaml | 2 +- .../40-attachments/attachments-compose.yaml | 2 +- .../get-attachment-content.yaml | 2 +- .../40-attachments/get-attachments-read.yaml | 2 +- .../45-categories/work-with-categories.yaml | 2 +- .../work-with-master-categories.yaml | 2 +- .../50-recurrence/get-recurrence-read.yaml | 2 +- .../outlook/50-recurrence/get-series-id.yaml | 2 +- ...-set-recurrence-appointment-organizer.yaml | 2 +- .../display-existing-appointment.yaml | 2 +- .../display-existing-message.yaml | 2 +- .../display-new-appointment.yaml | 2 +- .../55-display-items/display-new-message.yaml | 2 +- .../55-display-items/display-reply-forms.yaml | 2 +- .../display-reply-with-attachments.yaml | 2 +- .../sensitivity-label.yaml | 2 +- .../sensitivity-labels-catalog.yaml | 2 +- .../get-shared-properties.yaml | 2 +- .../get-internet-headers-message-read.yaml | 2 +- ...stom-internet-headers-message-compose.yaml | 2 +- .../outlook/75-regex-matches/contextual.yaml | 2 +- .../get-icaluid-as-attendee.yaml | 2 +- .../get-icaluid-as-organizer.yaml | 2 +- .../ids-and-urls.yaml | 2 +- .../make-ews-request-async.yaml | 2 +- ...-message-using-make-ews-request-async.yaml | 2 +- .../user-callback-token.yaml | 2 +- .../user-identity-token.yaml | 2 +- .../delay-message-delivery.yaml | 2 +- ...d-remove-enhancedlocation-appointment.yaml | 2 +- .../get-conversation-id-message.yaml | 2 +- .../get-conversation-index.yaml | 2 +- .../get-date-time-created-read.yaml | 2 +- .../get-date-time-modified-read.yaml | 2 +- .../get-diagnostic-information.yaml | 2 +- .../90-other-item-apis/get-eml-format.yaml | 2 +- .../90-other-item-apis/get-end-read.yaml | 2 +- .../90-other-item-apis/get-in-reply-to.yaml | 2 +- .../get-internet-message-id-read.yaml | 2 +- .../get-item-class-async.yaml | 2 +- .../get-item-class-read.yaml | 2 +- .../90-other-item-apis/get-item-type.yaml | 2 +- .../get-loaded-message-properties.yaml | 2 +- .../90-other-item-apis/get-location-read.yaml | 2 +- .../get-message-properties.yaml | 2 +- .../get-normalized-subject-read.yaml | 2 +- .../get-set-end-appointment-organizer.yaml | 2 +- ...et-set-location-appointment-organizer.yaml | 2 +- .../get-set-sensitivity-level.yaml | 2 +- .../get-set-start-appointment-organizer.yaml | 2 +- .../get-set-subject-compose.yaml | 2 +- .../90-other-item-apis/get-start-read.yaml | 2 +- .../90-other-item-apis/get-subject-read.yaml | 2 +- .../90-other-item-apis/item-id-compose.yaml | 2 +- .../90-other-item-apis/send-async.yaml | 2 +- .../90-other-item-apis/session-data-apis.yaml | 2 +- .../90-other-item-apis/set-selected-data.yaml | 2 +- .../work-with-client-signatures.yaml | 2 +- .../get-set-isalldayevent.yaml | 2 +- .../set-displayed-body-subject.yaml | 2 +- .../powerpoint/basics/basic-api-call-js.yaml | 2 +- .../powerpoint/basics/basic-api-call-ts.yaml | 2 +- .../basics/basic-common-api-call.yaml | 2 +- samples/powerpoint/default.yaml | 2 +- .../document/create-presentation.yaml | 2 +- .../hyperlinks/manage-hyperlinks.yaml | 2 +- samples/powerpoint/images/insert-image.yaml | 2 +- samples/powerpoint/images/insert-svg.yaml | 2 +- .../scenarios/searches-wikipedia-api.yaml | 2 +- .../powerpoint/shapes/add-modify-tables.yaml | 2 +- .../powerpoint/shapes/binding-to-shapes.yaml | 2 +- samples/powerpoint/shapes/get-set-shapes.yaml | 2 +- .../powerpoint/shapes/get-shapes-by-type.yaml | 2 +- .../shapes/group-ungroup-shapes.yaml | 2 +- samples/powerpoint/shapes/shapes.yaml | 4 +- .../slide-management/add-slides.yaml | 2 +- .../slide-management/export-import-slide.yaml | 2 +- .../slide-management/get-set-slides.yaml | 2 +- .../slide-management/get-slide-metadata.yaml | 2 +- .../slide-management/insert-slides.yaml | 2 +- samples/powerpoint/tags/tags.yaml | 2 +- .../powerpoint/text/get-set-textrange.yaml | 2 +- .../project/basics/basic-common-api-call.yaml | 2 +- samples/project/default.yaml | 2 +- .../word/01-basics/basic-api-call-es5.yaml | 2 +- samples/word/01-basics/basic-api-call.yaml | 2 +- .../word/01-basics/basic-common-api-call.yaml | 2 +- .../content-control-onadded-event.yaml | 2 +- .../content-control-ondatachanged-event.yaml | 2 +- .../content-control-ondeleted-event.yaml | 2 +- .../content-control-onentered-event.yaml | 2 +- .../content-control-onexited-event.yaml | 2 +- ...tent-control-onselectionchanged-event.yaml | 2 +- .../get-change-tracking-states.yaml | 2 +- ...t-and-change-checkbox-content-control.yaml | 2 +- ...-and-change-combo-box-content-control.yaml | 2 +- .../insert-and-change-content-controls.yaml | 2 +- ...-change-dropdown-list-content-control.yaml | 2 +- .../15-images/insert-and-get-pictures.yaml | 2 +- samples/word/20-lists/insert-list.yaml | 2 +- samples/word/20-lists/manage-list-styles.yaml | 2 +- samples/word/20-lists/organize-list.yaml | 2 +- .../get-paragraph-on-insertion-point.yaml | 2 +- samples/word/25-paragraph/get-text.yaml | 2 +- samples/word/25-paragraph/get-word-count.yaml | 2 +- .../25-paragraph/insert-formatted-text.yaml | 2 +- .../insert-header-and-footer.yaml | 2 +- .../insert-in-different-locations.yaml | 2 +- .../insert-line-and-page-breaks.yaml | 2 +- samples/word/25-paragraph/onadded-event.yaml | 2 +- .../word/25-paragraph/onchanged-event.yaml | 2 +- .../word/25-paragraph/ondeleted-event.yaml | 2 +- .../25-paragraph/paragraph-properties.yaml | 2 +- samples/word/25-paragraph/search.yaml | 2 +- .../get-built-in-properties.yaml | 2 +- ...read-write-custom-document-properties.yaml | 2 +- samples/word/35-ranges/compare-location.yaml | 2 +- samples/word/35-ranges/get-pages.yaml | 4 +- samples/word/35-ranges/scroll-to-range.yaml | 2 +- .../split-words-of-first-paragraph.yaml | 2 +- .../word/40-tables/manage-custom-style.yaml | 2 +- samples/word/40-tables/manage-formatting.yaml | 2 +- samples/word/40-tables/table-cell-access.yaml | 2 +- .../word/50-document/compare-documents.yaml | 2 +- .../word/50-document/get-external-styles.yaml | 2 +- .../50-document/insert-external-document.yaml | 2 +- .../50-document/insert-section-breaks.yaml | 2 +- .../word/50-document/manage-annotations.yaml | 2 +- samples/word/50-document/manage-body.yaml | 2 +- .../50-document/manage-change-tracking.yaml | 2 +- samples/word/50-document/manage-comments.yaml | 2 +- .../manage-custom-xml-part-ns.yaml | 2 +- .../50-document/manage-custom-xml-part.yaml | 2 +- samples/word/50-document/manage-fields.yaml | 2 +- .../word/50-document/manage-footnotes.yaml | 2 +- samples/word/50-document/manage-settings.yaml | 2 +- .../50-document/manage-shapes-text-boxes.yaml | 2 +- samples/word/50-document/manage-styles.yaml | 2 +- .../50-document/manage-tracked-changes.yaml | 2 +- samples/word/50-document/save-close.yaml | 2 +- .../correlated-objects-pattern.yaml | 2 +- samples/word/90-scenarios/doc-assembly.yaml | 2 +- .../90-scenarios/multiple-property-set.yaml | 2 +- .../insert-and-change-content-controls.yaml | 2 +- .../word/99-preview-apis/manage-comments.yaml | 2 +- samples/word/default.yaml | 2 +- snippet-extractor-output/snippets.yaml | 2232 ++++++++--------- tsconfig.json | 9 +- yarn.lock | 1016 -------- 332 files changed, 1554 insertions(+), 2571 deletions(-) delete mode 100644 yarn.lock diff --git a/README.md b/README.md index a0e9602b7..0fe20ada1 100644 --- a/README.md +++ b/README.md @@ -13,8 +13,7 @@ A collection of code snippets built with [Script Lab](//github.com/OfficeDev/scr 1. [Fork](https://help.github.com/articles/about-forks/) this project into your GitHub account. 1. Clone your fork to your development computer. 1. Ensure that you have Node, version 6.10+, installed. (To check the version run the command `node -v`.) -1. Install `yarn` as a global package `npm install yarn --global`. -1. Be sure your CLI is in the root of the office-js-snippets repo and run `yarn install`. (It's similar to `npm install`.) +1. Be sure your CLI is in the root of the office-js-snippets repo and run `npm install` to install all dependencies. 1. Set up the original \OfficeDev\office-js-snippets as the upstream repo for your local repo by following the steps in [Configuring a remote for a fork](https://help.github.com/articles/configuring-a-remote-for-a-fork/). 1. If you'll be using Visual Studio Code as your editor, install the [TSLint](https://marketplace.visualstudio.com/items?itemName=eg2.tslint) extension for Visual Studio Code. @@ -46,11 +45,11 @@ A collection of code snippets built with [Script Lab](//github.com/OfficeDev/scr 1. Open one of the `.yaml` files already in the group folder. If it has an `order` property near the top, then the snippets in the group folder are ordered in a particular sequence in Script Lab. Add an `order` property to the top of your `.yaml` file and give it a number that is between the order numbers of the snippets between which you want it to appear. 1. Copy your `.yaml` file to the chosen group folder. -1. Run `yarn start`. If there are no problems, the output will end with a `Done!`. If there are errors, review the output to check what caused the build validation to fail, and fix as needed. See [**Known errors and fixes**](#known-errors-and-fixes-in-the-build-tool) for more information. +1. Run `npm start`. If there are no problems, the output will end with a `Done!`. If there are errors, review the output to check what caused the build validation to fail, and fix as needed. See [**Known errors and fixes**](#known-errors-and-fixes-in-the-build-tool) for more information. - > **Note**: The `yarn start` command adds an `id` property to the top of the file. + > **Note**: The `npm start` command adds an `id` property to the top of the file. -1. Re-run `yarn start`, and fix errors, until the build succeeds. +1. Re-run `npm start`, and fix errors, until the build succeeds. 1. Run `git status`. You should see that, in addition to your new `.yaml` file (or possibly new folder), a `playlist\{host}.yaml` file (where `{host}` is `excel`, `word`, etc.) has also been changed. This is expected. The build tool you just ran added a reference to your new snippet to this file. 1. Run the following two commands. The commit message should be a brief description of what the snippet demonstrates; for example, `"shows how to use getWhatever method"`. diff --git a/config/build.documentation.ts b/config/build.documentation.ts index 72eb9099b..ee9d8f653 100644 --- a/config/build.documentation.ts +++ b/config/build.documentation.ts @@ -36,7 +36,7 @@ export async function buildReferenceDocSnippetExtracts( await rmRf('snippet-extractor-output'); await mkDir('snippet-extractor-output'); - const contents = snippetExtractsPerHost.map(extracts => jsyaml.safeDump(extracts)).join(''); + const contents = snippetExtractsPerHost.map(extracts => jsyaml.dump(extracts)).join(''); await writeFile(path.resolve(`snippet-extractor-output/snippets.yaml`), contents); } @@ -119,7 +119,7 @@ function getExtractedDataFromSnippet( const filename = snippetIdsToFilenames[row.snippetId]; if (filename) { try { - const script = (jsyaml.safeLoad(fs.readFileSync(filename).toString()) as ISnippet).script.content; + const script = (jsyaml.load(fs.readFileSync(filename).toString()) as ISnippet).script.content; const fullSnippetTextArray = script.split('\n') .map(line => line.replace(/\r/, '')); diff --git a/config/build.ts b/config/build.ts index 678cbe254..5d718ccc7 100644 --- a/config/build.ts +++ b/config/build.ts @@ -2,7 +2,8 @@ import * as path from 'path'; import { isNil, isString, isArray, isEmpty, sortBy, cloneDeep } from 'lodash'; -import * as chalk from 'chalk'; +import chalk from 'chalk'; +import escapeStringRegexp from 'escape-string-regexp'; import { status } from './status'; import { SnippetFileInput, SnippetProcessedData, @@ -14,7 +15,6 @@ import { getShareableYaml } from './snippet.helpers'; import { processLibraries } from './libraries.processor'; import { startCase, groupBy, map } from 'lodash'; import * as jsyaml from 'js-yaml'; -import escapeStringRegexp = require('escape-string-regexp'); import * as fsx from 'fs-extra'; @@ -84,7 +84,7 @@ async function processSnippets(processedSnippets: Dictionary{}; additionalFields.id = snippet.id; additionalFields.api_set = snippet.api_set; - additionalFields.author = snippet.author; + + // Only set author field if it has a value + if (snippet.author) { + additionalFields.author = snippet.author; + } if ((typeof (snippet as any).order) !== 'undefined') { // # for ordering, if present (used for samples only) @@ -537,7 +541,7 @@ async function generatePlaylists(processedSnippets: Dictionary { +export const banner = (title: string, message: string = null, chalkFn: any = null) => { if (!chalkFn) { chalkFn = chalk.bold; } @@ -55,7 +55,7 @@ export const banner = (title: string, message: string = null, chalkFn: chalk.Cha }; export function getPrintableDetails(item: any, indent: number) { - const details = jsyaml.safeDump(item, { + const details = jsyaml.dump(item, { indent: 4, lineWidth: -1, skipInvalid: true @@ -83,16 +83,11 @@ export const mkDir = (dir: string) => * Deletes a folder. * @param dir An absolute path to the directory. */ -export const rmRf = (dir: string) => - new Promise((resolve, reject) => { - const location = path.resolve(dir); - rimraf(location, (err) => { - if (err) { - return reject(err); - } - return resolve(location); - }); - }); +export const rmRf = async (dir: string): Promise => { + const location = path.resolve(dir); + await rimraf(location); + return location; +}; /** * Load all the files and folders in a given directory. diff --git a/config/snippet.helpers.ts b/config/snippet.helpers.ts index f2574957d..449e40d59 100644 --- a/config/snippet.helpers.ts +++ b/config/snippet.helpers.ts @@ -91,7 +91,7 @@ function scrubCarriageReturns(snippet: ISnippet) { export function getScrubbedSnippet(snippet: ISnippet, keep: SnippetFieldType): ISnippet { let copy = {}; forIn(snippetFields, (fieldType, fieldName) => { - if (fieldType & keep) { + if (fieldType & keep && snippet[fieldName] !== undefined) { copy[fieldName] = snippet[fieldName]; } }); @@ -103,7 +103,7 @@ export function getShareableYaml(rawSnippet: ISnippet, additionalFields: ISnippe const snippet = { ...getScrubbedSnippet(rawSnippet, SnippetFieldType.PUBLIC), ...additionalFields }; scrubCarriageReturns(snippet); - return jsyaml.safeDump(snippet, { + return jsyaml.dump(snippet, { indent: 4, lineWidth: -1, sortKeys: ((a, b) => snippetFieldSortingOrder[a] - snippetFieldSortingOrder[b]), diff --git a/config/status.ts b/config/status.ts index 44003309c..692b788ac 100644 --- a/config/status.ts +++ b/config/status.ts @@ -1,5 +1,5 @@ import * as nodeStatus from 'node-status'; -import * as chalk from 'chalk'; +import chalk from 'chalk'; import { isString, find, isNil, isArray } from 'lodash'; interface IStage { diff --git a/package.json b/package.json index 6628cb3e3..40974d9bf 100644 --- a/package.json +++ b/package.json @@ -23,25 +23,23 @@ }, "homepage": "https://github.com/OfficeDev/office-js-snippets#readme", "dependencies": { - "chalk": "1.1.3", - "escape-string-regexp": "^2.0.0", - "exceljs": "^4.3.0", - "fs-extra": "3.0.1", - "js-yaml": "^3.13.1", + "chalk": "^4.1.2", + "escape-string-regexp": "^4.0.0", + "exceljs": "^4.4.0", + "fs-extra": "11.3.2", + "js-yaml": "^4.1.0", "lodash": "^4.17.21", "node-status": "^1.0.0", - "rimraf": "^3.0.0", - "shelljs": "^0.8.5", - "yarn": "^1.22.19" + "rimraf": "^6.0.1", + "shelljs": "^0.10.0" }, "devDependencies": { - "@types/chalk": "0.4.31", - "@types/fs-extra": "3.0.1", - "@types/js-yaml": "^3.12.0", - "@types/lodash": "^4.14.175", - "@types/node": "^11.10.5", - "@types/shelljs": "^0.8.3", - "tslint": "^6.1.0", - "typescript": "^3.3.3333" + "@types/fs-extra": "^11.0.4", + "@types/js-yaml": "^4.0.9", + "@types/lodash": "^4.17.20", + "@types/node": "^24.5.2", + "@types/shelljs": "^0.8.17", + "tslint": "^6.1.3", + "typescript": "^5.9.2" } } diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index a1229c67b..059d3893b 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -30,7 +30,7 @@ - id: excel-chart-axis name: Axis details fileName: chart-axis.yaml - description: 'Gets, sets, and removes axis unit, label, and title in a chart.' + description: Gets, sets, and removes axis unit, label, and title in a chart. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-axis.yaml group: Chart @@ -162,7 +162,7 @@ - id: excel-chart-trendlines name: Trendlines fileName: chart-trendlines.yaml - description: 'Adds, gets, and formats trendlines in a chart.' + description: Adds, gets, and formats trendlines in a chart. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-trendlines.yaml group: Chart @@ -189,7 +189,7 @@ - id: excel-comment-basics name: Comment basics fileName: comment-basics.yaml - description: 'Adds, edits, and removes comments.' + description: Adds, edits, and removes comments. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-basics.yaml group: Comments And Notes @@ -207,7 +207,7 @@ - id: excel-comment-replies name: Comment replies fileName: comment-replies.yaml - description: 'Adds, edits, and removes comment replies.' + description: Adds, edits, and removes comment replies. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-replies.yaml group: Comments And Notes @@ -225,7 +225,7 @@ - id: excel-note-basics name: Notes fileName: excel-note-basics.yaml - description: 'Adds, edits, and removes notes.' + description: Adds, edits, and removes notes. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml group: Comments And Notes @@ -319,7 +319,7 @@ - id: excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts name: Using custom XML parts fileName: create-set-get-and-delete-custom-xml-parts.yaml - description: 'Creates, sets, gets, and deletes a custom XML part.' + description: Creates, sets, gets, and deletes a custom XML part. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml group: Custom XML Parts @@ -625,9 +625,9 @@ api_set: ExcelAPI: '1.14' - id: excel-named-item-create-and-remove-named-item - name: 'Create, access, and remove' + name: Create, access, and remove fileName: create-and-remove-named-item.yaml - description: 'Creates, accesses, and removes named items in a worksheet.' + description: Creates, accesses, and removes named items in a worksheet. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/34-named-item/create-and-remove-named-item.yaml group: Named Item @@ -785,16 +785,16 @@ - id: excel-range-hyperlink name: Hyperlinks fileName: range-hyperlink.yaml - description: 'Creates, updates, and clears hyperlinks in a range.' + description: Creates, updates, and clears hyperlinks in a range. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml group: Range api_set: ExcelApi: '1.7' - id: excel-range-insert-delete-and-clear-range - name: 'Insert, delete, and clear' + name: Insert, delete, and clear fileName: insert-delete-clear-range.yaml - description: 'Inserts, deletes, and clears a range.' + description: Inserts, deletes, and clears a range. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/insert-delete-clear-range.yaml group: Range @@ -1217,9 +1217,9 @@ api_set: ExcelApi: '1.1' - id: excel-worksheet-add-delete-rename-move-worksheet - name: 'Add, delete, rename, and move worksheet' + name: Add, delete, rename, and move worksheet fileName: add-delete-rename-move-worksheet.yaml - description: 'Adds, deletes, renames, and moves a worksheet.' + description: Adds, deletes, renames, and moves a worksheet. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml group: Worksheet diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 0a11cfd8e..d675b90a6 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -1,7 +1,7 @@ - id: outlook-roaming-settings-roaming-settings name: Use add-in settings fileName: roaming-settings.yaml - description: 'Gets, sets, saves, and removes add-in roaming settings.' + description: Gets, sets, saves, and removes add-in roaming settings. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/10-roaming-settings/roaming-settings.yaml group: Roaming Settings @@ -295,7 +295,7 @@ - id: outlook-categories-work-with-categories name: Work with item categories fileName: work-with-categories.yaml - description: 'Gets, adds, and removes categories assigned to the item.' + description: Gets, adds, and removes categories assigned to the item. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml group: Categories @@ -304,7 +304,7 @@ - id: outlook-categories-work-with-master-categories name: Work with the categories master list fileName: work-with-master-categories.yaml - description: 'Gets, adds, and removes categories in the master list for the mailbox.' + description: Gets, adds, and removes categories in the master list for the mailbox. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml group: Categories @@ -447,7 +447,7 @@ api_set: Mailbox: '1.8' - id: outlook-regex-matches-contextual - name: 'Get regex matches (Item Read, contextual)' + name: Get regex matches (Item Read, contextual) fileName: contextual.yaml description: Gets regex matches when the add-in is opened as a contextual add-in. rawUrl: >- @@ -639,7 +639,7 @@ - id: outlook-other-item-apis-get-add-remove-enhancedlocation-appointment name: Manage the locations of an appointment fileName: get-add-remove-enhancedlocation-appointment.yaml - description: 'Gets, adds, and removes locations on an appointment (enhancedLocation API).' + description: Gets, adds, and removes locations on an appointment (enhancedLocation API). rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml group: Other Item APIs @@ -704,7 +704,7 @@ - id: outlook-other-item-apis-session-data-apis name: Work with session data APIs (Compose) fileName: session-data-apis.yaml - description: 'Sets, gets, gets all, removes, and clears session data in Compose mode.' + description: Sets, gets, gets all, removes, and clears session data in Compose mode. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/session-data-apis.yaml group: Other Item APIs @@ -720,7 +720,7 @@ api_set: Mailbox: '1.13' - id: outlook-other-item-apis-get-message-properties - name: 'Get properties of selected messages (Message Compose, Message Read)' + name: Get properties of selected messages (Message Compose, Message Read) fileName: get-message-properties.yaml description: Gets the properties of multiple selected messages. rawUrl: >- @@ -794,7 +794,7 @@ api_set: Mailbox: '1.15' - id: outlook-other-item-apis-get-loaded-message-properties - name: 'Get properties of a loaded message (Message Compose, Message Read)' + name: Get properties of a loaded message (Message Compose, Message Read) fileName: get-loaded-message-properties.yaml description: Gets the properties of the currently loaded message. rawUrl: >- diff --git a/playlists-prod/powerpoint.yaml b/playlists-prod/powerpoint.yaml index edea496ed..40ca88e0d 100644 --- a/playlists-prod/powerpoint.yaml +++ b/playlists-prod/powerpoint.yaml @@ -72,16 +72,16 @@ group: Scenarios api_set: {} - id: powerpoint-shapes - name: 'Insert shape, line, and text box' + name: Insert shape, line, and text box fileName: shapes.yaml - description: 'Inserts geometric shapes, lines, and text boxes to a slide.' + description: Inserts geometric shapes, lines, and text boxes to a slide. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml group: Shapes api_set: PowerPointApi: '1.4' - id: powerpoint-shapes-get-set-shapes - name: 'Get, set, load, and save shapes' + name: Get, set, load, and save shapes fileName: get-set-shapes.yaml description: Get and set one or more selected shapes. Load and save one or more shapes. rawUrl: >- @@ -92,7 +92,7 @@ - id: powerpoint-shapes-get-shapes-by-type name: Select shapes by type fileName: get-shapes-by-type.yaml - description: 'Gets shapes in a slide based on their type, such as GeometricShape or Line.' + description: Gets shapes in a slide based on their type, such as GeometricShape or Line. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml group: Shapes @@ -146,13 +146,13 @@ - id: powerpoint-basics-get-slide-metadata name: Get slide metadata fileName: get-slide-metadata.yaml - description: 'Gets the title, index, and ID of the selected slides.' + description: Gets the title, index, and ID of the selected slides. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-slide-metadata.yaml group: Slide Management api_set: {} - id: powerpoint-slide-management-get-set-slides - name: 'Get, set, load, and save slides' + name: Get, set, load, and save slides fileName: get-set-slides.yaml description: Get and set one or more selected slides. Load and save one or more slides. rawUrl: >- @@ -181,7 +181,7 @@ - id: powerpoint-text-get-set-textrange name: Work with text range selections fileName: get-set-textrange.yaml - description: 'Get, set, load, and save text range selections.' + description: Get, set, load, and save text range selections. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml group: Text diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 9def75438..644cc25a5 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -30,7 +30,7 @@ - id: word-content-controls-insert-and-change-content-controls name: Content control basics fileName: insert-and-change-content-controls.yaml - description: 'Inserts, updates, and retrieves content controls.' + description: Inserts, updates, and retrieves content controls. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-content-controls.yaml group: Content Controls @@ -105,7 +105,7 @@ - id: word-content-controls-insert-and-change-checkbox-content-control name: Manage checkbox content controls fileName: insert-and-change-checkbox-content-control.yaml - description: 'Inserts, updates, retrieves, and deletes checkbox content controls.' + description: Inserts, updates, retrieves, and deletes checkbox content controls. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml group: Content Controls @@ -114,7 +114,7 @@ - id: word-content-controls-insert-and-change-combo-box-content-control name: Manage combo box content controls fileName: insert-and-change-combo-box-content-control.yaml - description: 'Inserts, updates, and deletes combo box content controls.' + description: Inserts, updates, and deletes combo box content controls. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml group: Content Controls @@ -123,7 +123,7 @@ - id: word-content-controls-insert-and-change-dropdown-list-content-control name: Manage dropdown list content controls fileName: insert-and-change-dropdown-list-content-control.yaml - description: 'Inserts, updates, and deletes dropdown list content controls.' + description: Inserts, updates, and deletes dropdown list content controls. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml group: Content Controls @@ -222,7 +222,7 @@ - id: word-paragraph-paragraph-properties name: Paragraph properties fileName: paragraph-properties.yaml - description: 'Sets indentation, space between paragraphs, and other paragraph properties.' + description: Sets indentation, space between paragraphs, and other paragraph properties. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml group: Paragraph @@ -338,9 +338,9 @@ api_set: WordApi: '1.3' - id: word-ranges-get-pages - name: 'Work with pages, panes, and windows' + name: Work with pages, panes, and windows fileName: get-pages.yaml - description: 'Shows how to work with pages, panes, and windows.' + description: Shows how to work with pages, panes, and windows. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml group: Ranges @@ -583,7 +583,7 @@ - id: word-insert-and-change-content-controls name: Content control basics fileName: insert-and-change-content-controls.yaml - description: 'Inserts, updates, and retrieves content controls.' + description: Inserts, updates, and retrieves content controls. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-content-controls.yaml group: Preview APIs diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 7e9d49ed6..5aa863380 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -30,7 +30,7 @@ - id: excel-chart-axis name: Axis details fileName: chart-axis.yaml - description: 'Gets, sets, and removes axis unit, label, and title in a chart.' + description: Gets, sets, and removes axis unit, label, and title in a chart. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-axis.yaml group: Chart @@ -162,7 +162,7 @@ - id: excel-chart-trendlines name: Trendlines fileName: chart-trendlines.yaml - description: 'Adds, gets, and formats trendlines in a chart.' + description: Adds, gets, and formats trendlines in a chart. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-trendlines.yaml group: Chart @@ -189,7 +189,7 @@ - id: excel-comment-basics name: Comment basics fileName: comment-basics.yaml - description: 'Adds, edits, and removes comments.' + description: Adds, edits, and removes comments. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-basics.yaml group: Comments And Notes @@ -207,7 +207,7 @@ - id: excel-comment-replies name: Comment replies fileName: comment-replies.yaml - description: 'Adds, edits, and removes comment replies.' + description: Adds, edits, and removes comment replies. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-replies.yaml group: Comments And Notes @@ -225,7 +225,7 @@ - id: excel-note-basics name: Notes fileName: excel-note-basics.yaml - description: 'Adds, edits, and removes notes.' + description: Adds, edits, and removes notes. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/excel-note-basics.yaml group: Comments And Notes @@ -319,7 +319,7 @@ - id: excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts name: Using custom XML parts fileName: create-set-get-and-delete-custom-xml-parts.yaml - description: 'Creates, sets, gets, and deletes a custom XML part.' + description: Creates, sets, gets, and deletes a custom XML part. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml group: Custom XML Parts @@ -625,9 +625,9 @@ api_set: ExcelAPI: '1.14' - id: excel-named-item-create-and-remove-named-item - name: 'Create, access, and remove' + name: Create, access, and remove fileName: create-and-remove-named-item.yaml - description: 'Creates, accesses, and removes named items in a worksheet.' + description: Creates, accesses, and removes named items in a worksheet. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/34-named-item/create-and-remove-named-item.yaml group: Named Item @@ -785,16 +785,16 @@ - id: excel-range-hyperlink name: Hyperlinks fileName: range-hyperlink.yaml - description: 'Creates, updates, and clears hyperlinks in a range.' + description: Creates, updates, and clears hyperlinks in a range. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-hyperlink.yaml group: Range api_set: ExcelApi: '1.7' - id: excel-range-insert-delete-and-clear-range - name: 'Insert, delete, and clear' + name: Insert, delete, and clear fileName: insert-delete-clear-range.yaml - description: 'Inserts, deletes, and clears a range.' + description: Inserts, deletes, and clears a range. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/insert-delete-clear-range.yaml group: Range @@ -1217,9 +1217,9 @@ api_set: ExcelApi: '1.1' - id: excel-worksheet-add-delete-rename-move-worksheet - name: 'Add, delete, rename, and move worksheet' + name: Add, delete, rename, and move worksheet fileName: add-delete-rename-move-worksheet.yaml - description: 'Adds, deletes, renames, and moves a worksheet.' + description: Adds, deletes, renames, and moves a worksheet. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml group: Worksheet diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 00c0262b1..ca772433b 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -1,7 +1,7 @@ - id: outlook-roaming-settings-roaming-settings name: Use add-in settings fileName: roaming-settings.yaml - description: 'Gets, sets, saves, and removes add-in roaming settings.' + description: Gets, sets, saves, and removes add-in roaming settings. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/10-roaming-settings/roaming-settings.yaml group: Roaming Settings @@ -295,7 +295,7 @@ - id: outlook-categories-work-with-categories name: Work with item categories fileName: work-with-categories.yaml - description: 'Gets, adds, and removes categories assigned to the item.' + description: Gets, adds, and removes categories assigned to the item. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/45-categories/work-with-categories.yaml group: Categories @@ -304,7 +304,7 @@ - id: outlook-categories-work-with-master-categories name: Work with the categories master list fileName: work-with-master-categories.yaml - description: 'Gets, adds, and removes categories in the master list for the mailbox.' + description: Gets, adds, and removes categories in the master list for the mailbox. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/45-categories/work-with-master-categories.yaml group: Categories @@ -447,7 +447,7 @@ api_set: Mailbox: '1.8' - id: outlook-regex-matches-contextual - name: 'Get regex matches (Item Read, contextual)' + name: Get regex matches (Item Read, contextual) fileName: contextual.yaml description: Gets regex matches when the add-in is opened as a contextual add-in. rawUrl: >- @@ -639,7 +639,7 @@ - id: outlook-other-item-apis-get-add-remove-enhancedlocation-appointment name: Manage the locations of an appointment fileName: get-add-remove-enhancedlocation-appointment.yaml - description: 'Gets, adds, and removes locations on an appointment (enhancedLocation API).' + description: Gets, adds, and removes locations on an appointment (enhancedLocation API). rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml group: Other Item APIs @@ -704,7 +704,7 @@ - id: outlook-other-item-apis-session-data-apis name: Work with session data APIs (Compose) fileName: session-data-apis.yaml - description: 'Sets, gets, gets all, removes, and clears session data in Compose mode.' + description: Sets, gets, gets all, removes, and clears session data in Compose mode. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/session-data-apis.yaml group: Other Item APIs @@ -720,7 +720,7 @@ api_set: Mailbox: '1.13' - id: outlook-other-item-apis-get-message-properties - name: 'Get properties of selected messages (Message Compose, Message Read)' + name: Get properties of selected messages (Message Compose, Message Read) fileName: get-message-properties.yaml description: Gets the properties of multiple selected messages. rawUrl: >- @@ -794,7 +794,7 @@ api_set: Mailbox: '1.15' - id: outlook-other-item-apis-get-loaded-message-properties - name: 'Get properties of a loaded message (Message Compose, Message Read)' + name: Get properties of a loaded message (Message Compose, Message Read) fileName: get-loaded-message-properties.yaml description: Gets the properties of the currently loaded message. rawUrl: >- diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index efc61d962..6d8cc0135 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -72,16 +72,16 @@ group: Scenarios api_set: {} - id: powerpoint-shapes - name: 'Insert shape, line, and text box' + name: Insert shape, line, and text box fileName: shapes.yaml - description: 'Inserts geometric shapes, lines, and text boxes to a slide.' + description: Inserts geometric shapes, lines, and text boxes to a slide. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/shapes.yaml group: Shapes api_set: PowerPointApi: '1.4' - id: powerpoint-shapes-get-set-shapes - name: 'Get, set, load, and save shapes' + name: Get, set, load, and save shapes fileName: get-set-shapes.yaml description: Get and set one or more selected shapes. Load and save one or more shapes. rawUrl: >- @@ -92,7 +92,7 @@ - id: powerpoint-shapes-get-shapes-by-type name: Select shapes by type fileName: get-shapes-by-type.yaml - description: 'Gets shapes in a slide based on their type, such as GeometricShape or Line.' + description: Gets shapes in a slide based on their type, such as GeometricShape or Line. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/get-shapes-by-type.yaml group: Shapes @@ -146,13 +146,13 @@ - id: powerpoint-basics-get-slide-metadata name: Get slide metadata fileName: get-slide-metadata.yaml - description: 'Gets the title, index, and ID of the selected slides.' + description: Gets the title, index, and ID of the selected slides. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/get-slide-metadata.yaml group: Slide Management api_set: {} - id: powerpoint-slide-management-get-set-slides - name: 'Get, set, load, and save slides' + name: Get, set, load, and save slides fileName: get-set-slides.yaml description: Get and set one or more selected slides. Load and save one or more slides. rawUrl: >- @@ -181,7 +181,7 @@ - id: powerpoint-text-get-set-textrange name: Work with text range selections fileName: get-set-textrange.yaml - description: 'Get, set, load, and save text range selections.' + description: Get, set, load, and save text range selections. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/text/get-set-textrange.yaml group: Text diff --git a/playlists/word.yaml b/playlists/word.yaml index cb7a87af1..8773282f5 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -30,7 +30,7 @@ - id: word-content-controls-insert-and-change-content-controls name: Content control basics fileName: insert-and-change-content-controls.yaml - description: 'Inserts, updates, and retrieves content controls.' + description: Inserts, updates, and retrieves content controls. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/insert-and-change-content-controls.yaml group: Content Controls @@ -105,7 +105,7 @@ - id: word-content-controls-insert-and-change-checkbox-content-control name: Manage checkbox content controls fileName: insert-and-change-checkbox-content-control.yaml - description: 'Inserts, updates, retrieves, and deletes checkbox content controls.' + description: Inserts, updates, retrieves, and deletes checkbox content controls. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml group: Content Controls @@ -114,7 +114,7 @@ - id: word-content-controls-insert-and-change-combo-box-content-control name: Manage combo box content controls fileName: insert-and-change-combo-box-content-control.yaml - description: 'Inserts, updates, and deletes combo box content controls.' + description: Inserts, updates, and deletes combo box content controls. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml group: Content Controls @@ -123,7 +123,7 @@ - id: word-content-controls-insert-and-change-dropdown-list-content-control name: Manage dropdown list content controls fileName: insert-and-change-dropdown-list-content-control.yaml - description: 'Inserts, updates, and deletes dropdown list content controls.' + description: Inserts, updates, and deletes dropdown list content controls. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml group: Content Controls @@ -222,7 +222,7 @@ - id: word-paragraph-paragraph-properties name: Paragraph properties fileName: paragraph-properties.yaml - description: 'Sets indentation, space between paragraphs, and other paragraph properties.' + description: Sets indentation, space between paragraphs, and other paragraph properties. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/paragraph-properties.yaml group: Paragraph @@ -338,9 +338,9 @@ api_set: WordApi: '1.3' - id: word-ranges-get-pages - name: 'Work with pages, panes, and windows' + name: Work with pages, panes, and windows fileName: get-pages.yaml - description: 'Shows how to work with pages, panes, and windows.' + description: Shows how to work with pages, panes, and windows. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/35-ranges/get-pages.yaml group: Ranges @@ -583,7 +583,7 @@ - id: word-insert-and-change-content-controls name: Content control basics fileName: insert-and-change-content-controls.yaml - description: 'Inserts, updates, and retrieves content controls.' + description: Inserts, updates, and retrieves content controls. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-change-content-controls.yaml group: Preview APIs diff --git a/private-samples/excel/20-chart/chart-title-ts.yaml b/private-samples/excel/20-chart/chart-title-ts.yaml index 25e06c787..40d3be036 100644 --- a/private-samples/excel/20-chart/chart-title-ts.yaml +++ b/private-samples/excel/20-chart/chart-title-ts.yaml @@ -143,4 +143,4 @@ libraries: | // IntelliSense: @types/library or node_modules paths or URL to d.ts files @types/office-js @types/core-js - @types/jquery@3.3.1 \ No newline at end of file + @types/jquery@3.3.1 diff --git a/samples/excel/01-basics/basic-api-call-es5.yaml b/samples/excel/01-basics/basic-api-call-es5.yaml index e2baf785a..b25de1525 100644 --- a/samples/excel/01-basics/basic-api-call-es5.yaml +++ b/samples/excel/01-basics/basic-api-call-es5.yaml @@ -63,4 +63,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/01-basics/basic-api-call.yaml b/samples/excel/01-basics/basic-api-call.yaml index 86ddf8c87..144e6d260 100644 --- a/samples/excel/01-basics/basic-api-call.yaml +++ b/samples/excel/01-basics/basic-api-call.yaml @@ -64,4 +64,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/01-basics/basic-common-api-call.yaml b/samples/excel/01-basics/basic-common-api-call.yaml index 539bee657..86b1df00e 100644 --- a/samples/excel/01-basics/basic-common-api-call.yaml +++ b/samples/excel/01-basics/basic-common-api-call.yaml @@ -55,4 +55,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/10-chart/chart-axis-formatting.yaml b/samples/excel/10-chart/chart-axis-formatting.yaml index d82d312b1..b6f3b5d56 100644 --- a/samples/excel/10-chart/chart-axis-formatting.yaml +++ b/samples/excel/10-chart/chart-axis-formatting.yaml @@ -157,4 +157,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/10-chart/chart-axis.yaml b/samples/excel/10-chart/chart-axis.yaml index a9c093176..103105274 100644 --- a/samples/excel/10-chart/chart-axis.yaml +++ b/samples/excel/10-chart/chart-axis.yaml @@ -1,7 +1,7 @@ order: 1 id: excel-chart-axis name: Axis details -description: 'Gets, sets, and removes axis unit, label, and title in a chart.' +description: Gets, sets, and removes axis unit, label, and title in a chart. host: EXCEL api_set: ExcelApi: '1.7' diff --git a/samples/excel/10-chart/chart-bubble-chart.yaml b/samples/excel/10-chart/chart-bubble-chart.yaml index a9aa558ab..84a38133e 100644 --- a/samples/excel/10-chart/chart-bubble-chart.yaml +++ b/samples/excel/10-chart/chart-bubble-chart.yaml @@ -157,4 +157,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/10-chart/chart-create-several-charts.yaml b/samples/excel/10-chart/chart-create-several-charts.yaml index a8113bff5..078f6b308 100644 --- a/samples/excel/10-chart/chart-create-several-charts.yaml +++ b/samples/excel/10-chart/chart-create-several-charts.yaml @@ -1,7 +1,7 @@ order: 5 id: excel-chart-create-several-charts name: Create charts -description: 'Creates column-clustered, line, XY-scatter, area, radar, pie, 3D, cylinder, and 100% charts.' +description: Creates column-clustered, line, XY-scatter, area, radar, pie, 3D, cylinder, and 100% charts. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/10-chart/chart-data-labels.yaml b/samples/excel/10-chart/chart-data-labels.yaml index 43f109f55..e70e8eac5 100644 --- a/samples/excel/10-chart/chart-data-labels.yaml +++ b/samples/excel/10-chart/chart-data-labels.yaml @@ -275,4 +275,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/10-chart/chart-data-source.yaml b/samples/excel/10-chart/chart-data-source.yaml index d4bb53742..417b3e253 100644 --- a/samples/excel/10-chart/chart-data-source.yaml +++ b/samples/excel/10-chart/chart-data-source.yaml @@ -116,4 +116,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/10-chart/chart-data-table.yaml b/samples/excel/10-chart/chart-data-table.yaml index a48cae0f3..8e47b80eb 100644 --- a/samples/excel/10-chart/chart-data-table.yaml +++ b/samples/excel/10-chart/chart-data-table.yaml @@ -154,4 +154,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/10-chart/chart-formatting.yaml b/samples/excel/10-chart/chart-formatting.yaml index 5027e5948..6a6f00563 100644 --- a/samples/excel/10-chart/chart-formatting.yaml +++ b/samples/excel/10-chart/chart-formatting.yaml @@ -214,4 +214,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/10-chart/chart-leader-lines.yaml b/samples/excel/10-chart/chart-leader-lines.yaml index ad2ac18ea..dd096f4b5 100644 --- a/samples/excel/10-chart/chart-leader-lines.yaml +++ b/samples/excel/10-chart/chart-leader-lines.yaml @@ -182,4 +182,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/10-chart/chart-legend.yaml b/samples/excel/10-chart/chart-legend.yaml index b9dbc32d9..b62f39f8a 100644 --- a/samples/excel/10-chart/chart-legend.yaml +++ b/samples/excel/10-chart/chart-legend.yaml @@ -134,4 +134,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/10-chart/chart-series-markers.yaml b/samples/excel/10-chart/chart-series-markers.yaml index 8405b89cd..5ad48cfad 100644 --- a/samples/excel/10-chart/chart-series-markers.yaml +++ b/samples/excel/10-chart/chart-series-markers.yaml @@ -115,4 +115,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/10-chart/chart-series-plotorder.yaml b/samples/excel/10-chart/chart-series-plotorder.yaml index 40ff375f7..5aac92606 100644 --- a/samples/excel/10-chart/chart-series-plotorder.yaml +++ b/samples/excel/10-chart/chart-series-plotorder.yaml @@ -126,4 +126,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/10-chart/chart-series.yaml b/samples/excel/10-chart/chart-series.yaml index 2eb2a4ef6..2010d02e3 100644 --- a/samples/excel/10-chart/chart-series.yaml +++ b/samples/excel/10-chart/chart-series.yaml @@ -142,4 +142,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/10-chart/chart-trendlines.yaml b/samples/excel/10-chart/chart-trendlines.yaml index 5edbd97b9..c8755bb33 100644 --- a/samples/excel/10-chart/chart-trendlines.yaml +++ b/samples/excel/10-chart/chart-trendlines.yaml @@ -1,7 +1,7 @@ order: 14 id: excel-chart-trendlines name: Trendlines -description: 'Adds, gets, and formats trendlines in a chart.' +description: Adds, gets, and formats trendlines in a chart. host: EXCEL api_set: ExcelApi: '1.7' diff --git a/samples/excel/12-comments-and-notes/comment-basics.yaml b/samples/excel/12-comments-and-notes/comment-basics.yaml index f6f26b62f..ea27365f6 100644 --- a/samples/excel/12-comments-and-notes/comment-basics.yaml +++ b/samples/excel/12-comments-and-notes/comment-basics.yaml @@ -1,7 +1,7 @@ order: 1 id: excel-comment-basics name: Comment basics -description: 'Adds, edits, and removes comments.' +description: Adds, edits, and removes comments. host: EXCEL api_set: ExcelApi: '1.10' diff --git a/samples/excel/12-comments-and-notes/comment-mentions.yaml b/samples/excel/12-comments-and-notes/comment-mentions.yaml index 0ec354dba..7b6a09088 100644 --- a/samples/excel/12-comments-and-notes/comment-mentions.yaml +++ b/samples/excel/12-comments-and-notes/comment-mentions.yaml @@ -93,4 +93,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/12-comments-and-notes/comment-replies.yaml b/samples/excel/12-comments-and-notes/comment-replies.yaml index beed1063c..e3f10b0b7 100644 --- a/samples/excel/12-comments-and-notes/comment-replies.yaml +++ b/samples/excel/12-comments-and-notes/comment-replies.yaml @@ -1,7 +1,7 @@ order: 3 id: excel-comment-replies name: Comment replies -description: 'Adds, edits, and removes comment replies.' +description: Adds, edits, and removes comment replies. host: EXCEL api_set: ExcelApi: '1.10' diff --git a/samples/excel/12-comments-and-notes/comment-resolution.yaml b/samples/excel/12-comments-and-notes/comment-resolution.yaml index c77a480c3..2b7039fc3 100644 --- a/samples/excel/12-comments-and-notes/comment-resolution.yaml +++ b/samples/excel/12-comments-and-notes/comment-resolution.yaml @@ -104,4 +104,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/12-comments-and-notes/excel-note-basics.yaml b/samples/excel/12-comments-and-notes/excel-note-basics.yaml index d8a65e187..fc74c8521 100644 --- a/samples/excel/12-comments-and-notes/excel-note-basics.yaml +++ b/samples/excel/12-comments-and-notes/excel-note-basics.yaml @@ -1,7 +1,7 @@ order: 5 id: excel-note-basics name: Notes -description: 'Adds, edits, and removes notes.' +description: Adds, edits, and removes notes. host: EXCEL api_set: ExcelApi: '1.18' diff --git a/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml index 09600d694..bae922ff7 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml @@ -227,4 +227,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml index 97ceb9f63..5ea7fceef 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -346,4 +346,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/16-custom-functions/custom-enum.yaml b/samples/excel/16-custom-functions/custom-enum.yaml index 010b64081..f2e3cbb4e 100644 --- a/samples/excel/16-custom-functions/custom-enum.yaml +++ b/samples/excel/16-custom-functions/custom-enum.yaml @@ -87,4 +87,4 @@ libraries: | @types/core-js jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + @types/jquery@3.3.1 diff --git a/samples/excel/16-custom-functions/custom-functions-errors.yaml b/samples/excel/16-custom-functions/custom-functions-errors.yaml index e1f5582b1..98c38b020 100644 --- a/samples/excel/16-custom-functions/custom-functions-errors.yaml +++ b/samples/excel/16-custom-functions/custom-functions-errors.yaml @@ -35,4 +35,4 @@ script: libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js - core-js@2.4.1/client/core.min.js \ No newline at end of file + core-js@2.4.1/client/core.min.js diff --git a/samples/excel/16-custom-functions/data-types-custom-functions.yaml b/samples/excel/16-custom-functions/data-types-custom-functions.yaml index 8d6745ff6..34796ff56 100644 --- a/samples/excel/16-custom-functions/data-types-custom-functions.yaml +++ b/samples/excel/16-custom-functions/data-types-custom-functions.yaml @@ -331,4 +331,4 @@ libraries: | @types/office-js core-js@2.4.1/client/core.min.js - @types/core-js \ No newline at end of file + @types/core-js diff --git a/samples/excel/16-custom-functions/streaming-function.yaml b/samples/excel/16-custom-functions/streaming-function.yaml index cdaf1ccb0..1e9740051 100644 --- a/samples/excel/16-custom-functions/streaming-function.yaml +++ b/samples/excel/16-custom-functions/streaming-function.yaml @@ -30,4 +30,4 @@ script: libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js - core-js@2.4.1/client/core.min.js \ No newline at end of file + core-js@2.4.1/client/core.min.js diff --git a/samples/excel/16-custom-functions/web-call-function.yaml b/samples/excel/16-custom-functions/web-call-function.yaml index faf57fbdb..6d25d23c8 100644 --- a/samples/excel/16-custom-functions/web-call-function.yaml +++ b/samples/excel/16-custom-functions/web-call-function.yaml @@ -30,4 +30,4 @@ script: libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js - core-js@2.4.1/client/core.min.js \ No newline at end of file + core-js@2.4.1/client/core.min.js diff --git a/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml b/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml index dff02a2e5..94f01a2ff 100644 --- a/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml +++ b/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml @@ -1,7 +1,7 @@ order: 1 id: excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts name: Using custom XML parts -description: 'Creates, sets, gets, and deletes a custom XML part.' +description: Creates, sets, gets, and deletes a custom XML part. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml b/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml index 6bf4d1544..9df023ebf 100644 --- a/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml +++ b/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml @@ -133,4 +133,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/20-data-types/data-types-basic-types.yaml b/samples/excel/20-data-types/data-types-basic-types.yaml index 8c74f2173..b72203a60 100644 --- a/samples/excel/20-data-types/data-types-basic-types.yaml +++ b/samples/excel/20-data-types/data-types-basic-types.yaml @@ -359,4 +359,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/20-data-types/data-types-entity-attribution.yaml b/samples/excel/20-data-types/data-types-entity-attribution.yaml index 46adc2e94..93ceb5e26 100644 --- a/samples/excel/20-data-types/data-types-entity-attribution.yaml +++ b/samples/excel/20-data-types/data-types-entity-attribution.yaml @@ -225,4 +225,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/20-data-types/data-types-entity-icons.yaml b/samples/excel/20-data-types/data-types-entity-icons.yaml index 53cecd46b..704894f33 100644 --- a/samples/excel/20-data-types/data-types-entity-icons.yaml +++ b/samples/excel/20-data-types/data-types-entity-icons.yaml @@ -111,4 +111,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/20-data-types/data-types-entity-values.yaml b/samples/excel/20-data-types/data-types-entity-values.yaml index 9383863f7..793b288d0 100644 --- a/samples/excel/20-data-types/data-types-entity-values.yaml +++ b/samples/excel/20-data-types/data-types-entity-values.yaml @@ -1,7 +1,7 @@ order: 3 id: excel-data-types-entity-values name: 'Data types: Create entity cards from data in a table' -description: 'This sample shows how to create entity cards for each row in a table. An entity is a container for data types, similar to an object in object-oriented programming.' +description: This sample shows how to create entity cards for each row in a table. An entity is a container for data types, similar to an object in object-oriented programming. host: EXCEL api_set: ExcelApi: '1.16' diff --git a/samples/excel/20-data-types/data-types-error-values.yaml b/samples/excel/20-data-types/data-types-error-values.yaml index bcf1d28f6..c5dfce56c 100644 --- a/samples/excel/20-data-types/data-types-error-values.yaml +++ b/samples/excel/20-data-types/data-types-error-values.yaml @@ -1,7 +1,7 @@ order: 4 id: excel-data-types-error-values name: 'Data types: Set and change error values' -description: 'This sample shows how to set a cell value to an error data type, and then update the value of cells that contain an error data type.' +description: This sample shows how to set a cell value to an error data type, and then update the value of cells that contain an error data type. host: EXCEL api_set: ExcelApi: '1.16' diff --git a/samples/excel/20-data-types/data-types-formatted-number.yaml b/samples/excel/20-data-types/data-types-formatted-number.yaml index 12770b416..9c5e243aa 100644 --- a/samples/excel/20-data-types/data-types-formatted-number.yaml +++ b/samples/excel/20-data-types/data-types-formatted-number.yaml @@ -148,4 +148,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/20-data-types/data-types-references.yaml b/samples/excel/20-data-types/data-types-references.yaml index 89a45c742..266750743 100644 --- a/samples/excel/20-data-types/data-types-references.yaml +++ b/samples/excel/20-data-types/data-types-references.yaml @@ -1,7 +1,7 @@ order: 7 id: excel-data-types-references name: 'Data types: Entity values with references' -description: 'This sample shows how to create entity values with references to other entity values. An entity value is a container for data, and this container can reference (or contain) other entities within the original entity. One entity can contain multiple additional entities.' +description: This sample shows how to create entity values with references to other entity values. An entity value is a container for data, and this container can reference (or contain) other entities within the original entity. One entity can contain multiple additional entities. host: EXCEL api_set: ExcelApi: '1.16' diff --git a/samples/excel/20-data-types/data-types-web-image.yaml b/samples/excel/20-data-types/data-types-web-image.yaml index 68b7f2fd1..fb64e6d37 100644 --- a/samples/excel/20-data-types/data-types-web-image.yaml +++ b/samples/excel/20-data-types/data-types-web-image.yaml @@ -186,4 +186,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/22-data-validation/data-validation.yaml b/samples/excel/22-data-validation/data-validation.yaml index 23d6089f9..4d344d30b 100644 --- a/samples/excel/22-data-validation/data-validation.yaml +++ b/samples/excel/22-data-validation/data-validation.yaml @@ -1,7 +1,7 @@ order: 1 id: excel-data-validation name: Data validation -description: 'Sets data validation rules on ranges, prompts users to enter valid data, and displays messages when invalid data is entered.' +description: Sets data validation rules on ranges, prompts users to enter valid data, and displays messages when invalid data is entered. host: EXCEL api_set: ExcelApi: '1.8' diff --git a/samples/excel/26-document/custom-properties.yaml b/samples/excel/26-document/custom-properties.yaml index 12d02e8bf..0901f91c1 100644 --- a/samples/excel/26-document/custom-properties.yaml +++ b/samples/excel/26-document/custom-properties.yaml @@ -133,4 +133,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/26-document/get-file-in-slices-async.yaml b/samples/excel/26-document/get-file-in-slices-async.yaml index 414ccec06..defcd7050 100644 --- a/samples/excel/26-document/get-file-in-slices-async.yaml +++ b/samples/excel/26-document/get-file-in-slices-async.yaml @@ -211,4 +211,4 @@ libraries: |- https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - https://unpkg.com/base64-js@1.2.1/base64js.min.js \ No newline at end of file + https://unpkg.com/base64-js@1.2.1/base64js.min.js diff --git a/samples/excel/26-document/properties.yaml b/samples/excel/26-document/properties.yaml index 41deb4f44..da1c1a4f3 100644 --- a/samples/excel/26-document/properties.yaml +++ b/samples/excel/26-document/properties.yaml @@ -172,4 +172,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/30-events/data-change-event-details.yaml b/samples/excel/30-events/data-change-event-details.yaml index d395f6c0c..931b58c9b 100644 --- a/samples/excel/30-events/data-change-event-details.yaml +++ b/samples/excel/30-events/data-change-event-details.yaml @@ -106,4 +106,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/30-events/data-changed.yaml b/samples/excel/30-events/data-changed.yaml index 6bf0e7f7b..468506f12 100644 --- a/samples/excel/30-events/data-changed.yaml +++ b/samples/excel/30-events/data-changed.yaml @@ -109,4 +109,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/30-events/event-column-and-row-sort.yaml b/samples/excel/30-events/event-column-and-row-sort.yaml index 9dda33d2c..046886aff 100644 --- a/samples/excel/30-events/event-column-and-row-sort.yaml +++ b/samples/excel/30-events/event-column-and-row-sort.yaml @@ -197,4 +197,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/30-events/event-worksheet-single-click.yaml b/samples/excel/30-events/event-worksheet-single-click.yaml index b6b7c3c03..19f110f30 100644 --- a/samples/excel/30-events/event-worksheet-single-click.yaml +++ b/samples/excel/30-events/event-worksheet-single-click.yaml @@ -67,4 +67,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/30-events/events-chart-activated.yaml b/samples/excel/30-events/events-chart-activated.yaml index 6ac14fd45..a9378e940 100644 --- a/samples/excel/30-events/events-chart-activated.yaml +++ b/samples/excel/30-events/events-chart-activated.yaml @@ -171,4 +171,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/30-events/events-chartcollection-added-activated.yaml b/samples/excel/30-events/events-chartcollection-added-activated.yaml index 49c754f27..1c0c78280 100644 --- a/samples/excel/30-events/events-chartcollection-added-activated.yaml +++ b/samples/excel/30-events/events-chartcollection-added-activated.yaml @@ -1,7 +1,7 @@ order: 1 id: excel-events-chartcollection-added-activated name: Chart collection events -description: 'Registers event handlers on a worksheet''s chart collection that run when any chart within is activated or deactivated, as well as when charts are added to or deleted from the collection.' +description: Registers event handlers on a worksheet's chart collection that run when any chart within is activated or deactivated, as well as when charts are added to or deleted from the collection. host: EXCEL api_set: ExcelApi: '1.8' diff --git a/samples/excel/30-events/events-comment-event-handler.yaml b/samples/excel/30-events/events-comment-event-handler.yaml index fbf4d77d1..89be09ffb 100644 --- a/samples/excel/30-events/events-comment-event-handler.yaml +++ b/samples/excel/30-events/events-comment-event-handler.yaml @@ -1,7 +1,7 @@ order: 4 id: excel-events-comments name: Comment events -description: 'Registers event handlers to listen for comment additions, changes, and deletions.' +description: Registers event handlers to listen for comment additions, changes, and deletions. host: EXCEL api_set: ExcelAPI: '1.12' diff --git a/samples/excel/30-events/events-disable-events.yaml b/samples/excel/30-events/events-disable-events.yaml index d7711daf1..681294088 100644 --- a/samples/excel/30-events/events-disable-events.yaml +++ b/samples/excel/30-events/events-disable-events.yaml @@ -178,4 +178,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/30-events/events-formula-changed.yaml b/samples/excel/30-events/events-formula-changed.yaml index 89e3f9d1f..e7c81a18d 100644 --- a/samples/excel/30-events/events-formula-changed.yaml +++ b/samples/excel/30-events/events-formula-changed.yaml @@ -122,4 +122,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/30-events/events-table-changed.yaml b/samples/excel/30-events/events-table-changed.yaml index 4f686e1ce..e7896c2a1 100644 --- a/samples/excel/30-events/events-table-changed.yaml +++ b/samples/excel/30-events/events-table-changed.yaml @@ -158,4 +158,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/30-events/events-tablecollection-changed.yaml b/samples/excel/30-events/events-tablecollection-changed.yaml index a382bcdf7..786274970 100644 --- a/samples/excel/30-events/events-tablecollection-changed.yaml +++ b/samples/excel/30-events/events-tablecollection-changed.yaml @@ -154,4 +154,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/30-events/events-workbook-activated.yaml b/samples/excel/30-events/events-workbook-activated.yaml index 72c944193..8f1f6ea6a 100644 --- a/samples/excel/30-events/events-workbook-activated.yaml +++ b/samples/excel/30-events/events-workbook-activated.yaml @@ -70,4 +70,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml b/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml index b158f3c05..bf85695b0 100644 --- a/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml +++ b/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml @@ -1,7 +1,7 @@ order: 14 id: excel-events-workbook-and-worksheet-collection name: Workbook and worksheet collection events -description: 'Registers event handlers that run when a worksheet is added, activated, or deactivated, or when the settings of a workbook are changed.' +description: Registers event handlers that run when a worksheet is added, activated, or deactivated, or when the settings of a workbook are changed. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/30-events/events-worksheet-protection.yaml b/samples/excel/30-events/events-worksheet-protection.yaml index 132db9fe9..636bc2b52 100644 --- a/samples/excel/30-events/events-worksheet-protection.yaml +++ b/samples/excel/30-events/events-worksheet-protection.yaml @@ -102,4 +102,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/30-events/events-worksheet.yaml b/samples/excel/30-events/events-worksheet.yaml index cbba6505e..ed4c09408 100644 --- a/samples/excel/30-events/events-worksheet.yaml +++ b/samples/excel/30-events/events-worksheet.yaml @@ -1,7 +1,7 @@ order: 15 id: excel-events-worksheet name: Worksheet events -description: 'Registers event handlers that run when data is changed in worksheet, the selected range changes in a worksheet, or the worksheet is recalculated.' +description: Registers event handlers that run when data is changed in worksheet, the selected range changes in a worksheet, or the worksheet is recalculated. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/30-events/selection-changed-events.yaml b/samples/excel/30-events/selection-changed-events.yaml index 7e8108677..ab7203010 100644 --- a/samples/excel/30-events/selection-changed-events.yaml +++ b/samples/excel/30-events/selection-changed-events.yaml @@ -146,4 +146,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/34-named-item/create-and-remove-named-item.yaml b/samples/excel/34-named-item/create-and-remove-named-item.yaml index 5cf8f5325..eadc487fa 100644 --- a/samples/excel/34-named-item/create-and-remove-named-item.yaml +++ b/samples/excel/34-named-item/create-and-remove-named-item.yaml @@ -1,7 +1,7 @@ order: 1 id: excel-named-item-create-and-remove-named-item -name: 'Create, access, and remove' -description: 'Creates, accesses, and removes named items in a worksheet.' +name: Create, access, and remove +description: Creates, accesses, and removes named items in a worksheet. host: EXCEL api_set: ExcelApi: '1.4' diff --git a/samples/excel/34-named-item/update-named-item.yaml b/samples/excel/34-named-item/update-named-item.yaml index 73235255d..331a88f32 100644 --- a/samples/excel/34-named-item/update-named-item.yaml +++ b/samples/excel/34-named-item/update-named-item.yaml @@ -126,4 +126,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/38-pivottable/pivottable-calculations.yaml b/samples/excel/38-pivottable/pivottable-calculations.yaml index 8fb52a748..d66f74eb9 100644 --- a/samples/excel/38-pivottable/pivottable-calculations.yaml +++ b/samples/excel/38-pivottable/pivottable-calculations.yaml @@ -201,4 +201,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/38-pivottable/pivottable-create-and-modify.yaml b/samples/excel/38-pivottable/pivottable-create-and-modify.yaml index b33e40bc4..ba7020057 100644 --- a/samples/excel/38-pivottable/pivottable-create-and-modify.yaml +++ b/samples/excel/38-pivottable/pivottable-create-and-modify.yaml @@ -265,4 +265,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml b/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml index aec8fbdae..5948578ce 100644 --- a/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml +++ b/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml @@ -220,4 +220,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/38-pivottable/pivottable-get-pivottables.yaml b/samples/excel/38-pivottable/pivottable-get-pivottables.yaml index 1d986789a..5748fce28 100644 --- a/samples/excel/38-pivottable/pivottable-get-pivottables.yaml +++ b/samples/excel/38-pivottable/pivottable-get-pivottables.yaml @@ -187,4 +187,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/38-pivottable/pivottable-pivotfilters.yaml b/samples/excel/38-pivottable/pivottable-pivotfilters.yaml index 61e561818..bb857275b 100644 --- a/samples/excel/38-pivottable/pivottable-pivotfilters.yaml +++ b/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -315,4 +315,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/38-pivottable/pivottable-pivotlayout.yaml b/samples/excel/38-pivottable/pivottable-pivotlayout.yaml index 2e45c708c..703c6bcc4 100644 --- a/samples/excel/38-pivottable/pivottable-pivotlayout.yaml +++ b/samples/excel/38-pivottable/pivottable-pivotlayout.yaml @@ -313,4 +313,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/38-pivottable/pivottable-refresh.yaml b/samples/excel/38-pivottable/pivottable-refresh.yaml index 45a15746e..13f6fb0b5 100644 --- a/samples/excel/38-pivottable/pivottable-refresh.yaml +++ b/samples/excel/38-pivottable/pivottable-refresh.yaml @@ -130,4 +130,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/38-pivottable/pivottable-slicer.yaml b/samples/excel/38-pivottable/pivottable-slicer.yaml index 587b6562b..1b057f748 100644 --- a/samples/excel/38-pivottable/pivottable-slicer.yaml +++ b/samples/excel/38-pivottable/pivottable-slicer.yaml @@ -204,4 +204,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/38-pivottable/pivottable-source-data.yaml b/samples/excel/38-pivottable/pivottable-source-data.yaml index 2da0cde5e..238b79392 100644 --- a/samples/excel/38-pivottable/pivottable-source-data.yaml +++ b/samples/excel/38-pivottable/pivottable-source-data.yaml @@ -124,4 +124,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/cell-properties.yaml b/samples/excel/42-range/cell-properties.yaml index 700c067bf..bdf6baafb 100644 --- a/samples/excel/42-range/cell-properties.yaml +++ b/samples/excel/42-range/cell-properties.yaml @@ -183,4 +183,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/dynamic-arrays.yaml b/samples/excel/42-range/dynamic-arrays.yaml index 821802200..3d98c24ec 100644 --- a/samples/excel/42-range/dynamic-arrays.yaml +++ b/samples/excel/42-range/dynamic-arrays.yaml @@ -174,4 +174,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/insert-delete-clear-range.yaml b/samples/excel/42-range/insert-delete-clear-range.yaml index 7256c9820..2507db642 100644 --- a/samples/excel/42-range/insert-delete-clear-range.yaml +++ b/samples/excel/42-range/insert-delete-clear-range.yaml @@ -1,7 +1,7 @@ order: 8 id: excel-range-insert-delete-and-clear-range -name: 'Insert, delete, and clear' -description: 'Inserts, deletes, and clears a range.' +name: Insert, delete, and clear +description: Inserts, deletes, and clears a range. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/42-range/outline.yaml b/samples/excel/42-range/outline.yaml index 206088be3..e4d261065 100644 --- a/samples/excel/42-range/outline.yaml +++ b/samples/excel/42-range/outline.yaml @@ -229,4 +229,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/precedents.yaml b/samples/excel/42-range/precedents.yaml index 25e935188..0f694b5e1 100644 --- a/samples/excel/42-range/precedents.yaml +++ b/samples/excel/42-range/precedents.yaml @@ -206,4 +206,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/range-areas.yaml b/samples/excel/42-range/range-areas.yaml index 4b08ddc0a..1b3297ce9 100644 --- a/samples/excel/42-range/range-areas.yaml +++ b/samples/excel/42-range/range-areas.yaml @@ -1,7 +1,7 @@ order: 3 id: excel-range-areas name: Discontiguous ranges (RangeAreas) and special cells -description: 'Creates and uses RangeAreas, which are sets of ranges that need not be contiguous, through user selection and programmatic selection of special cells.' +description: Creates and uses RangeAreas, which are sets of ranges that need not be contiguous, through user selection and programmatic selection of special cells. host: EXCEL api_set: ExcelApi: '1.9' diff --git a/samples/excel/42-range/range-auto-fill.yaml b/samples/excel/42-range/range-auto-fill.yaml index aefdda342..b0c331649 100644 --- a/samples/excel/42-range/range-auto-fill.yaml +++ b/samples/excel/42-range/range-auto-fill.yaml @@ -145,4 +145,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/range-cell-control.yaml b/samples/excel/42-range/range-cell-control.yaml index a207ebd8e..ef4ee5a4d 100644 --- a/samples/excel/42-range/range-cell-control.yaml +++ b/samples/excel/42-range/range-cell-control.yaml @@ -161,4 +161,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/range-copyfrom.yaml b/samples/excel/42-range/range-copyfrom.yaml index 64c20d1da..391b6ef7a 100644 --- a/samples/excel/42-range/range-copyfrom.yaml +++ b/samples/excel/42-range/range-copyfrom.yaml @@ -216,4 +216,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/range-dependents.yaml b/samples/excel/42-range/range-dependents.yaml index b09070dd6..f798dd5e6 100644 --- a/samples/excel/42-range/range-dependents.yaml +++ b/samples/excel/42-range/range-dependents.yaml @@ -165,4 +165,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/range-direct-dependents.yaml b/samples/excel/42-range/range-direct-dependents.yaml index 339653430..8942430fe 100644 --- a/samples/excel/42-range/range-direct-dependents.yaml +++ b/samples/excel/42-range/range-direct-dependents.yaml @@ -158,4 +158,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/range-find.yaml b/samples/excel/42-range/range-find.yaml index 857401f22..1fde3e616 100644 --- a/samples/excel/42-range/range-find.yaml +++ b/samples/excel/42-range/range-find.yaml @@ -164,4 +164,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/range-get-range-edge.yaml b/samples/excel/42-range/range-get-range-edge.yaml index 1f28f89a2..d4f020020 100644 --- a/samples/excel/42-range/range-get-range-edge.yaml +++ b/samples/excel/42-range/range-get-range-edge.yaml @@ -1,7 +1,7 @@ order: 20 id: excel-range-get-range-edge name: Select used range edge -description: 'This sample shows how to select the edges of the used range, based on the currently selected range.' +description: This sample shows how to select the edges of the used range, based on the currently selected range. host: EXCEL api_set: ExcelAPI: '1.13' diff --git a/samples/excel/42-range/range-hyperlink.yaml b/samples/excel/42-range/range-hyperlink.yaml index a8d0c18c2..035a8cb50 100644 --- a/samples/excel/42-range/range-hyperlink.yaml +++ b/samples/excel/42-range/range-hyperlink.yaml @@ -1,7 +1,7 @@ order: 7 id: excel-range-hyperlink name: Hyperlinks -description: 'Creates, updates, and clears hyperlinks in a range.' +description: Creates, updates, and clears hyperlinks in a range. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/42-range/range-merged-ranges.yaml b/samples/excel/42-range/range-merged-ranges.yaml index c43bd925a..62db7860f 100644 --- a/samples/excel/42-range/range-merged-ranges.yaml +++ b/samples/excel/42-range/range-merged-ranges.yaml @@ -128,4 +128,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/range-relationships.yaml b/samples/excel/42-range/range-relationships.yaml index f21fd7176..24dcea2e1 100644 --- a/samples/excel/42-range/range-relationships.yaml +++ b/samples/excel/42-range/range-relationships.yaml @@ -1,7 +1,7 @@ order: 10 id: excel-range-range-relationships name: Range relationships -description: 'Shows relationships between ranges, such as bounding rectangles and intersections.' +description: Shows relationships between ranges, such as bounding rectangles and intersections. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/42-range/range-remove-duplicates.yaml b/samples/excel/42-range/range-remove-duplicates.yaml index f89dbda7c..c6fd18196 100644 --- a/samples/excel/42-range/range-remove-duplicates.yaml +++ b/samples/excel/42-range/range-remove-duplicates.yaml @@ -122,4 +122,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/range-text-orientation.yaml b/samples/excel/42-range/range-text-orientation.yaml index d10058503..a24409415 100644 --- a/samples/excel/42-range/range-text-orientation.yaml +++ b/samples/excel/42-range/range-text-orientation.yaml @@ -116,4 +116,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/selected-range.yaml b/samples/excel/42-range/selected-range.yaml index 6ae16734d..5b3dda01b 100644 --- a/samples/excel/42-range/selected-range.yaml +++ b/samples/excel/42-range/selected-range.yaml @@ -77,4 +77,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/set-get-values.yaml b/samples/excel/42-range/set-get-values.yaml index 5e44ab46d..78c79eefd 100644 --- a/samples/excel/42-range/set-get-values.yaml +++ b/samples/excel/42-range/set-get-values.yaml @@ -230,4 +230,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/style.yaml b/samples/excel/42-range/style.yaml index 67e2fdaaa..3254d3bb1 100644 --- a/samples/excel/42-range/style.yaml +++ b/samples/excel/42-range/style.yaml @@ -1,7 +1,7 @@ order: 14 id: excel-range-style name: Style -description: 'Creates a custom style, applies a custom and built-in styles to a range, gets style properties, and deletes the custom style.' +description: Creates a custom style, applies a custom and built-in styles to a range, gets style properties, and deletes the custom style. author: siewmoi host: EXCEL api_set: diff --git a/samples/excel/42-range/used-range.yaml b/samples/excel/42-range/used-range.yaml index d1761bbfe..643156e10 100644 --- a/samples/excel/42-range/used-range.yaml +++ b/samples/excel/42-range/used-range.yaml @@ -138,4 +138,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/44-shape/shape-create-and-delete.yaml b/samples/excel/44-shape/shape-create-and-delete.yaml index 2c07a8a7f..13f4500fb 100644 --- a/samples/excel/44-shape/shape-create-and-delete.yaml +++ b/samples/excel/44-shape/shape-create-and-delete.yaml @@ -133,4 +133,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/44-shape/shape-get-active.yaml b/samples/excel/44-shape/shape-get-active.yaml index c51fb0d3e..8b6ff0cd6 100644 --- a/samples/excel/44-shape/shape-get-active.yaml +++ b/samples/excel/44-shape/shape-get-active.yaml @@ -172,4 +172,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/44-shape/shape-groups.yaml b/samples/excel/44-shape/shape-groups.yaml index aa3b2d605..6fd30d1ad 100644 --- a/samples/excel/44-shape/shape-groups.yaml +++ b/samples/excel/44-shape/shape-groups.yaml @@ -148,4 +148,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/44-shape/shape-images.yaml b/samples/excel/44-shape/shape-images.yaml index 76da24989..a880febde 100644 --- a/samples/excel/44-shape/shape-images.yaml +++ b/samples/excel/44-shape/shape-images.yaml @@ -132,4 +132,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/44-shape/shape-move-and-order.yaml b/samples/excel/44-shape/shape-move-and-order.yaml index b674aded7..bab2c6c3b 100644 --- a/samples/excel/44-shape/shape-move-and-order.yaml +++ b/samples/excel/44-shape/shape-move-and-order.yaml @@ -163,4 +163,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/44-shape/shape-textboxes.yaml b/samples/excel/44-shape/shape-textboxes.yaml index 412051e0e..3193d3338 100644 --- a/samples/excel/44-shape/shape-textboxes.yaml +++ b/samples/excel/44-shape/shape-textboxes.yaml @@ -138,4 +138,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml b/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml index 4b5cf701f..c8a21f8e0 100644 --- a/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml +++ b/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml @@ -168,4 +168,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/46-table/create-table.yaml b/samples/excel/46-table/create-table.yaml index 7c458bb57..bca2b65b2 100644 --- a/samples/excel/46-table/create-table.yaml +++ b/samples/excel/46-table/create-table.yaml @@ -80,4 +80,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/46-table/filter-data.yaml b/samples/excel/46-table/filter-data.yaml index 781dc4ac6..d0efc48ee 100644 --- a/samples/excel/46-table/filter-data.yaml +++ b/samples/excel/46-table/filter-data.yaml @@ -125,4 +125,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/46-table/formatting.yaml b/samples/excel/46-table/formatting.yaml index 521c164d6..1e40a5350 100644 --- a/samples/excel/46-table/formatting.yaml +++ b/samples/excel/46-table/formatting.yaml @@ -101,4 +101,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/46-table/get-data-from-table.yaml b/samples/excel/46-table/get-data-from-table.yaml index 118e50b13..591ba0d07 100644 --- a/samples/excel/46-table/get-data-from-table.yaml +++ b/samples/excel/46-table/get-data-from-table.yaml @@ -114,4 +114,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml b/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml index 027847e85..23eb4f02c 100644 --- a/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml +++ b/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml @@ -137,4 +137,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/46-table/import-json-data.yaml b/samples/excel/46-table/import-json-data.yaml index 30e9bb971..70d69c39f 100644 --- a/samples/excel/46-table/import-json-data.yaml +++ b/samples/excel/46-table/import-json-data.yaml @@ -142,4 +142,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/46-table/resize-table.yaml b/samples/excel/46-table/resize-table.yaml index 1001e0bf0..2b15b90cd 100644 --- a/samples/excel/46-table/resize-table.yaml +++ b/samples/excel/46-table/resize-table.yaml @@ -97,4 +97,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/46-table/sort-data.yaml b/samples/excel/46-table/sort-data.yaml index 46bc63d41..43b994cf8 100644 --- a/samples/excel/46-table/sort-data.yaml +++ b/samples/excel/46-table/sort-data.yaml @@ -108,4 +108,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/50-workbook/create-get-change-delete-settings.yaml b/samples/excel/50-workbook/create-get-change-delete-settings.yaml index 6c5dcc12d..3797bcda7 100644 --- a/samples/excel/50-workbook/create-get-change-delete-settings.yaml +++ b/samples/excel/50-workbook/create-get-change-delete-settings.yaml @@ -1,7 +1,7 @@ order: 2 id: excel-settings-create-get-change-delete-settings name: Add-in settings -description: 'Creates, gets, changes, and deletes settings that are unique to the specific workbook and add-in combination.' +description: Creates, gets, changes, and deletes settings that are unique to the specific workbook and add-in combination. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/50-workbook/create-workbook.yaml b/samples/excel/50-workbook/create-workbook.yaml index c5a6315ac..bd56088c4 100644 --- a/samples/excel/50-workbook/create-workbook.yaml +++ b/samples/excel/50-workbook/create-workbook.yaml @@ -1,7 +1,7 @@ order: 4 id: excel-workbook-create-workbook name: Create workbook -description: 'Creates a new, empty workbook and creates a new workbook by copying an existing one.' +description: Creates a new, empty workbook and creates a new workbook by copying an existing one. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/50-workbook/culture-info-date-time.yaml b/samples/excel/50-workbook/culture-info-date-time.yaml index cde8c9289..036894f16 100644 --- a/samples/excel/50-workbook/culture-info-date-time.yaml +++ b/samples/excel/50-workbook/culture-info-date-time.yaml @@ -136,4 +136,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/50-workbook/culture-info.yaml b/samples/excel/50-workbook/culture-info.yaml index 8de992922..1ba143d4a 100644 --- a/samples/excel/50-workbook/culture-info.yaml +++ b/samples/excel/50-workbook/culture-info.yaml @@ -148,4 +148,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/50-workbook/data-protection.yaml b/samples/excel/50-workbook/data-protection.yaml index e22d27213..a87a43384 100644 --- a/samples/excel/50-workbook/data-protection.yaml +++ b/samples/excel/50-workbook/data-protection.yaml @@ -254,4 +254,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/50-workbook/workbook-built-in-functions.yaml b/samples/excel/50-workbook/workbook-built-in-functions.yaml index 3490d043b..48e46b992 100644 --- a/samples/excel/50-workbook/workbook-built-in-functions.yaml +++ b/samples/excel/50-workbook/workbook-built-in-functions.yaml @@ -117,4 +117,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/50-workbook/workbook-calculation.yaml b/samples/excel/50-workbook/workbook-calculation.yaml index 2d3b8aaea..02235ae2e 100644 --- a/samples/excel/50-workbook/workbook-calculation.yaml +++ b/samples/excel/50-workbook/workbook-calculation.yaml @@ -188,4 +188,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/50-workbook/workbook-get-active-cell.yaml b/samples/excel/50-workbook/workbook-get-active-cell.yaml index 66b67a49c..10e5df770 100644 --- a/samples/excel/50-workbook/workbook-get-active-cell.yaml +++ b/samples/excel/50-workbook/workbook-get-active-cell.yaml @@ -63,4 +63,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml b/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml index 7af9e084f..561a7d875 100644 --- a/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml +++ b/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml @@ -91,4 +91,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/50-workbook/workbook-save-and-close.yaml b/samples/excel/50-workbook/workbook-save-and-close.yaml index 2e126d2c7..817908238 100644 --- a/samples/excel/50-workbook/workbook-save-and-close.yaml +++ b/samples/excel/50-workbook/workbook-save-and-close.yaml @@ -85,4 +85,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml b/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml index 1c09d834a..1425fe93d 100644 --- a/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml +++ b/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml @@ -1,7 +1,7 @@ order: 2 id: excel-worksheet-add-delete-rename-move-worksheet -name: 'Add, delete, rename, and move worksheet' -description: 'Adds, deletes, renames, and moves a worksheet.' +name: Add, delete, rename, and move worksheet +description: Adds, deletes, renames, and moves a worksheet. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/54-worksheet/gridlines.yaml b/samples/excel/54-worksheet/gridlines.yaml index bc359b69d..7a25135b1 100644 --- a/samples/excel/54-worksheet/gridlines.yaml +++ b/samples/excel/54-worksheet/gridlines.yaml @@ -75,4 +75,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/54-worksheet/list-worksheets.yaml b/samples/excel/54-worksheet/list-worksheets.yaml index d179c4d50..180475d1d 100644 --- a/samples/excel/54-worksheet/list-worksheets.yaml +++ b/samples/excel/54-worksheet/list-worksheets.yaml @@ -69,4 +69,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml b/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml index 3bf6f0473..fc9fca872 100644 --- a/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml +++ b/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml @@ -159,4 +159,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/54-worksheet/tab-color.yaml b/samples/excel/54-worksheet/tab-color.yaml index 11f1917e8..ab336da87 100644 --- a/samples/excel/54-worksheet/tab-color.yaml +++ b/samples/excel/54-worksheet/tab-color.yaml @@ -105,4 +105,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/54-worksheet/worksheet-auto-filter.yaml b/samples/excel/54-worksheet/worksheet-auto-filter.yaml index a4e887a21..8434addeb 100644 --- a/samples/excel/54-worksheet/worksheet-auto-filter.yaml +++ b/samples/excel/54-worksheet/worksheet-auto-filter.yaml @@ -209,4 +209,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/54-worksheet/worksheet-copy.yaml b/samples/excel/54-worksheet/worksheet-copy.yaml index 1fe3d9318..7053c450a 100644 --- a/samples/excel/54-worksheet/worksheet-copy.yaml +++ b/samples/excel/54-worksheet/worksheet-copy.yaml @@ -100,4 +100,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/54-worksheet/worksheet-find-all.yaml b/samples/excel/54-worksheet/worksheet-find-all.yaml index f47475263..6278ab9f6 100644 --- a/samples/excel/54-worksheet/worksheet-find-all.yaml +++ b/samples/excel/54-worksheet/worksheet-find-all.yaml @@ -144,4 +144,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/54-worksheet/worksheet-freeze-panes.yaml b/samples/excel/54-worksheet/worksheet-freeze-panes.yaml index 015d907c2..d1c4f5dcb 100644 --- a/samples/excel/54-worksheet/worksheet-freeze-panes.yaml +++ b/samples/excel/54-worksheet/worksheet-freeze-panes.yaml @@ -1,7 +1,7 @@ order: 6 id: excel-worksheet-freeze-panes name: Frozen panes -description: 'Freezes columns, rows, and a range of cells. Gets the address of the frozen pane. Unfreezes frozen panes.' +description: Freezes columns, rows, and a range of cells. Gets the address of the frozen pane. Unfreezes frozen panes. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/54-worksheet/worksheet-page-layout.yaml b/samples/excel/54-worksheet/worksheet-page-layout.yaml index 3d4a283ae..46beed753 100644 --- a/samples/excel/54-worksheet/worksheet-page-layout.yaml +++ b/samples/excel/54-worksheet/worksheet-page-layout.yaml @@ -207,4 +207,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/54-worksheet/worksheet-range-cell.yaml b/samples/excel/54-worksheet/worksheet-range-cell.yaml index a26ccb9e3..95f7ff500 100644 --- a/samples/excel/54-worksheet/worksheet-range-cell.yaml +++ b/samples/excel/54-worksheet/worksheet-range-cell.yaml @@ -1,7 +1,7 @@ order: 7 id: excel-worksheet-worksheet-range-cell name: Get range or cell -description: 'Gets the used range, the entire range of a worksheet, the specified range, and the specified cell.' +description: Gets the used range, the entire range of a worksheet, the specified range, and the specified cell. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/54-worksheet/worksheet-visibility.yaml b/samples/excel/54-worksheet/worksheet-visibility.yaml index 928d8a2fe..aeff5bbe7 100644 --- a/samples/excel/54-worksheet/worksheet-visibility.yaml +++ b/samples/excel/54-worksheet/worksheet-visibility.yaml @@ -120,4 +120,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/90-scenarios/currency-converter.yaml b/samples/excel/90-scenarios/currency-converter.yaml index a8ba2aa1b..1510dc666 100644 --- a/samples/excel/90-scenarios/currency-converter.yaml +++ b/samples/excel/90-scenarios/currency-converter.yaml @@ -184,4 +184,4 @@ libraries: |- https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css moment@2.18.1 - moment-msdate@0.2.2 \ No newline at end of file + moment-msdate@0.2.2 diff --git a/samples/excel/90-scenarios/multiple-property-set.yaml b/samples/excel/90-scenarios/multiple-property-set.yaml index e74a52b5c..9a48bb487 100644 --- a/samples/excel/90-scenarios/multiple-property-set.yaml +++ b/samples/excel/90-scenarios/multiple-property-set.yaml @@ -132,4 +132,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/90-scenarios/performance-optimization.yaml b/samples/excel/90-scenarios/performance-optimization.yaml index 2ae8fed6f..f7af6e94a 100644 --- a/samples/excel/90-scenarios/performance-optimization.yaml +++ b/samples/excel/90-scenarios/performance-optimization.yaml @@ -1,7 +1,7 @@ order: 1 id: excel-performance-optimization name: Performance optimization -description: 'Optimizes performance by untracking ranges, turning off screen painting, and switching the calculation mode.' +description: Optimizes performance by untracking ranges, turning off screen painting, and switching the calculation mode. host: EXCEL api_set: ExcelApi: '1.9' diff --git a/samples/excel/90-scenarios/report-generation.yaml b/samples/excel/90-scenarios/report-generation.yaml index 47027784b..88a83e495 100644 --- a/samples/excel/90-scenarios/report-generation.yaml +++ b/samples/excel/90-scenarios/report-generation.yaml @@ -1,7 +1,7 @@ order: 2 id: excel-scenarios-report-generation name: Report generation -description: 'Writes data to the workbook, reads and applies basic formatting, and adds a chart bound to that data.' +description: Writes data to the workbook, reads and applies basic formatting, and adds a chart bound to that data. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/90-scenarios/working-with-dates.yaml b/samples/excel/90-scenarios/working-with-dates.yaml index 7c8c816b6..531ca8299 100644 --- a/samples/excel/90-scenarios/working-with-dates.yaml +++ b/samples/excel/90-scenarios/working-with-dates.yaml @@ -136,4 +136,4 @@ libraries: |- moment@2.18.1 - moment-msdate@0.2.2 \ No newline at end of file + moment-msdate@0.2.2 diff --git a/samples/excel/99-just-for-fun/color-wheel.yaml b/samples/excel/99-just-for-fun/color-wheel.yaml index 456c044bc..f4a2d1692 100644 --- a/samples/excel/99-just-for-fun/color-wheel.yaml +++ b/samples/excel/99-just-for-fun/color-wheel.yaml @@ -148,4 +148,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/99-just-for-fun/gradient.yaml b/samples/excel/99-just-for-fun/gradient.yaml index d4905cfa3..cf94c9c6d 100644 --- a/samples/excel/99-just-for-fun/gradient.yaml +++ b/samples/excel/99-just-for-fun/gradient.yaml @@ -234,4 +234,4 @@ libraries: |- https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css https://unpkg.com/tinycolor2@1.4.1/tinycolor.js - @types/tinycolor2 \ No newline at end of file + @types/tinycolor2 diff --git a/samples/excel/99-just-for-fun/path-finder-game.yaml b/samples/excel/99-just-for-fun/path-finder-game.yaml index 8ea6024a2..3388e0af9 100644 --- a/samples/excel/99-just-for-fun/path-finder-game.yaml +++ b/samples/excel/99-just-for-fun/path-finder-game.yaml @@ -224,4 +224,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/99-just-for-fun/patterns.yaml b/samples/excel/99-just-for-fun/patterns.yaml index f946e71c8..723400183 100644 --- a/samples/excel/99-just-for-fun/patterns.yaml +++ b/samples/excel/99-just-for-fun/patterns.yaml @@ -189,4 +189,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/99-just-for-fun/tetrominos.yaml b/samples/excel/99-just-for-fun/tetrominos.yaml index 556180e9d..2ca35b401 100644 --- a/samples/excel/99-just-for-fun/tetrominos.yaml +++ b/samples/excel/99-just-for-fun/tetrominos.yaml @@ -791,4 +791,4 @@ libraries: |- https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js \ No newline at end of file + https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js diff --git a/samples/excel/default.yaml b/samples/excel/default.yaml index c68f87b37..3198ff5da 100644 --- a/samples/excel/default.yaml +++ b/samples/excel/default.yaml @@ -54,4 +54,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/onenote/default.yaml b/samples/onenote/default.yaml index 603dd6062..0b94d1a3f 100644 --- a/samples/onenote/default.yaml +++ b/samples/onenote/default.yaml @@ -52,4 +52,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/10-roaming-settings/roaming-settings.yaml b/samples/outlook/10-roaming-settings/roaming-settings.yaml index 5834cfab5..0933e6d36 100644 --- a/samples/outlook/10-roaming-settings/roaming-settings.yaml +++ b/samples/outlook/10-roaming-settings/roaming-settings.yaml @@ -1,6 +1,6 @@ id: outlook-roaming-settings-roaming-settings name: Use add-in settings -description: 'Gets, sets, saves, and removes add-in roaming settings.' +description: Gets, sets, saves, and removes add-in roaming settings. host: OUTLOOK api_set: Mailbox: '1.1' diff --git a/samples/outlook/15-item-custom-properties/load-set-get-save.yaml b/samples/outlook/15-item-custom-properties/load-set-get-save.yaml index 4ebc0f45c..b928ad2fa 100644 --- a/samples/outlook/15-item-custom-properties/load-set-get-save.yaml +++ b/samples/outlook/15-item-custom-properties/load-set-get-save.yaml @@ -1,6 +1,6 @@ id: outlook-item-custom-properties-load-set-get-save name: Work with item custom properties -description: 'Gets the custom properties that the add-in placed on the current item, sets a new one, gets it, removes it, and saves all custom properties back to the item.' +description: Gets the custom properties that the add-in placed on the current item, sets a new one, gets it, removes it, and saves all custom properties back to the item. host: OUTLOOK api_set: Mailbox: '1.1' diff --git a/samples/outlook/20-item-body/add-inline-base64-image.yaml b/samples/outlook/20-item-body/add-inline-base64-image.yaml index a8b5ad9e6..f2703f677 100644 --- a/samples/outlook/20-item-body/add-inline-base64-image.yaml +++ b/samples/outlook/20-item-body/add-inline-base64-image.yaml @@ -97,4 +97,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/20-item-body/append-text-on-send.yaml b/samples/outlook/20-item-body/append-text-on-send.yaml index b571b4332..5c025a7ef 100644 --- a/samples/outlook/20-item-body/append-text-on-send.yaml +++ b/samples/outlook/20-item-body/append-text-on-send.yaml @@ -69,4 +69,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/20-item-body/get-body-format.yaml b/samples/outlook/20-item-body/get-body-format.yaml index b1cbc7506..47d4cf236 100644 --- a/samples/outlook/20-item-body/get-body-format.yaml +++ b/samples/outlook/20-item-body/get-body-format.yaml @@ -52,4 +52,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/20-item-body/get-selected-data.yaml b/samples/outlook/20-item-body/get-selected-data.yaml index 8334e9509..1a0e40c01 100644 --- a/samples/outlook/20-item-body/get-selected-data.yaml +++ b/samples/outlook/20-item-body/get-selected-data.yaml @@ -53,4 +53,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/20-item-body/prepend-text-on-send.yaml b/samples/outlook/20-item-body/prepend-text-on-send.yaml index 92a893f35..3d282886b 100644 --- a/samples/outlook/20-item-body/prepend-text-on-send.yaml +++ b/samples/outlook/20-item-body/prepend-text-on-send.yaml @@ -69,4 +69,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/20-item-body/prepend-text-to-item-body.yaml b/samples/outlook/20-item-body/prepend-text-to-item-body.yaml index 43c3bbc13..d06c16a6d 100644 --- a/samples/outlook/20-item-body/prepend-text-to-item-body.yaml +++ b/samples/outlook/20-item-body/prepend-text-to-item-body.yaml @@ -71,4 +71,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/20-item-body/replace-selected-text.yaml b/samples/outlook/20-item-body/replace-selected-text.yaml index 6ee568518..34d024049 100644 --- a/samples/outlook/20-item-body/replace-selected-text.yaml +++ b/samples/outlook/20-item-body/replace-selected-text.yaml @@ -75,4 +75,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/25-item-save-and-close/close-async.yaml b/samples/outlook/25-item-save-and-close/close-async.yaml index 109be2bbd..3fe6ed8c0 100644 --- a/samples/outlook/25-item-save-and-close/close-async.yaml +++ b/samples/outlook/25-item-save-and-close/close-async.yaml @@ -54,4 +54,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/25-item-save-and-close/save.yaml b/samples/outlook/25-item-save-and-close/save.yaml index 0acf244d8..46ee419e8 100644 --- a/samples/outlook/25-item-save-and-close/save.yaml +++ b/samples/outlook/25-item-save-and-close/save.yaml @@ -50,4 +50,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml b/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml index 0854d08d0..389395766 100644 --- a/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml @@ -121,4 +121,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml b/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml index abcd7294b..3a740a408 100644 --- a/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml @@ -48,4 +48,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml index 2a87d7879..42763337a 100644 --- a/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml @@ -51,4 +51,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml b/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml index dd87d8298..518027c02 100644 --- a/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml @@ -46,4 +46,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml b/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml index 9fd59b1ec..4bbed2e4b 100644 --- a/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml @@ -54,4 +54,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml b/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml index 0e6a7d54a..1dd835d97 100644 --- a/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml @@ -45,4 +45,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml b/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml index 8cec1f366..26113821c 100644 --- a/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml @@ -51,4 +51,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml b/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml index 2766205fe..3292f062d 100644 --- a/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml @@ -54,4 +54,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml b/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml index ccabbe93a..4fe385b64 100644 --- a/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml @@ -45,4 +45,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml index 372652cfa..4b32e4907 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml @@ -74,4 +74,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml index 48b2b66a6..b55dea048 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml @@ -74,4 +74,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml b/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml index dcf2c48f8..bc9aba7ac 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml @@ -80,4 +80,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml b/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml index 5773f7fc4..8257b8c87 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml @@ -80,4 +80,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml index 8ff0b7f56..c390cf2ac 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml @@ -74,4 +74,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml b/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml index 37807769a..dbb6417e7 100644 --- a/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml @@ -83,4 +83,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/35-notifications/add-getall-remove.yaml b/samples/outlook/35-notifications/add-getall-remove.yaml index 84cdf8208..0748aa395 100644 --- a/samples/outlook/35-notifications/add-getall-remove.yaml +++ b/samples/outlook/35-notifications/add-getall-remove.yaml @@ -1,6 +1,6 @@ id: outlook-notifications-add-getall-remove name: Work with notification messages -description: 'Adds different kinds of notification messages, gets all notifications, and replaces and removes an individual notification message.' +description: Adds different kinds of notification messages, gets all notifications, and replaces and removes an individual notification message. host: OUTLOOK api_set: Mailbox: '1.10' diff --git a/samples/outlook/40-attachments/attachments-compose.yaml b/samples/outlook/40-attachments/attachments-compose.yaml index 4896c2b54..cb2133d03 100644 --- a/samples/outlook/40-attachments/attachments-compose.yaml +++ b/samples/outlook/40-attachments/attachments-compose.yaml @@ -1,6 +1,6 @@ id: outlook-attachments-attachments-compose name: Manipulate attachments (Item Compose) -description: 'Adds, gets, and removes attachments from a message or an appointment in Compose mode.' +description: Adds, gets, and removes attachments from a message or an appointment in Compose mode. host: OUTLOOK api_set: Mailbox: '1.8' diff --git a/samples/outlook/40-attachments/get-attachment-content.yaml b/samples/outlook/40-attachments/get-attachment-content.yaml index beee2236a..1e1cc2b27 100644 --- a/samples/outlook/40-attachments/get-attachment-content.yaml +++ b/samples/outlook/40-attachments/get-attachment-content.yaml @@ -104,4 +104,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/40-attachments/get-attachments-read.yaml b/samples/outlook/40-attachments/get-attachments-read.yaml index e8c1b3872..005ae16ed 100644 --- a/samples/outlook/40-attachments/get-attachments-read.yaml +++ b/samples/outlook/40-attachments/get-attachments-read.yaml @@ -56,4 +56,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/45-categories/work-with-categories.yaml b/samples/outlook/45-categories/work-with-categories.yaml index 6fcbcedc6..5c8e29fc7 100644 --- a/samples/outlook/45-categories/work-with-categories.yaml +++ b/samples/outlook/45-categories/work-with-categories.yaml @@ -1,7 +1,7 @@ order: 1 id: outlook-categories-work-with-categories name: Work with item categories -description: 'Gets, adds, and removes categories assigned to the item.' +description: Gets, adds, and removes categories assigned to the item. host: OUTLOOK api_set: Mailbox: '1.8' diff --git a/samples/outlook/45-categories/work-with-master-categories.yaml b/samples/outlook/45-categories/work-with-master-categories.yaml index fbe2aec19..3fd458afd 100644 --- a/samples/outlook/45-categories/work-with-master-categories.yaml +++ b/samples/outlook/45-categories/work-with-master-categories.yaml @@ -1,7 +1,7 @@ order: 2 id: outlook-categories-work-with-master-categories name: Work with the categories master list -description: 'Gets, adds, and removes categories in the master list for the mailbox.' +description: Gets, adds, and removes categories in the master list for the mailbox. host: OUTLOOK api_set: Mailbox: '1.8' diff --git a/samples/outlook/50-recurrence/get-recurrence-read.yaml b/samples/outlook/50-recurrence/get-recurrence-read.yaml index 00b300640..ea91e9dc3 100644 --- a/samples/outlook/50-recurrence/get-recurrence-read.yaml +++ b/samples/outlook/50-recurrence/get-recurrence-read.yaml @@ -52,4 +52,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/50-recurrence/get-series-id.yaml b/samples/outlook/50-recurrence/get-series-id.yaml index a67e04c8a..f702e3b58 100644 --- a/samples/outlook/50-recurrence/get-series-id.yaml +++ b/samples/outlook/50-recurrence/get-series-id.yaml @@ -51,4 +51,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml b/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml index b6644d8a1..f8a417a86 100644 --- a/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml +++ b/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml @@ -96,4 +96,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/55-display-items/display-existing-appointment.yaml b/samples/outlook/55-display-items/display-existing-appointment.yaml index c3e0b1e82..0539b19ec 100644 --- a/samples/outlook/55-display-items/display-existing-appointment.yaml +++ b/samples/outlook/55-display-items/display-existing-appointment.yaml @@ -65,4 +65,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/55-display-items/display-existing-message.yaml b/samples/outlook/55-display-items/display-existing-message.yaml index 80e96c502..7fb9f46e1 100644 --- a/samples/outlook/55-display-items/display-existing-message.yaml +++ b/samples/outlook/55-display-items/display-existing-message.yaml @@ -65,4 +65,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/55-display-items/display-new-appointment.yaml b/samples/outlook/55-display-items/display-new-appointment.yaml index 7b55e2860..770c12e9a 100644 --- a/samples/outlook/55-display-items/display-new-appointment.yaml +++ b/samples/outlook/55-display-items/display-new-appointment.yaml @@ -85,4 +85,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/55-display-items/display-new-message.yaml b/samples/outlook/55-display-items/display-new-message.yaml index 7ec9c407c..5aca34788 100644 --- a/samples/outlook/55-display-items/display-new-message.yaml +++ b/samples/outlook/55-display-items/display-new-message.yaml @@ -1,7 +1,7 @@ order: 1 id: outlook-display-items-display-new-message name: Create a new message -description: 'Opens a new message form with a sample content, recipients, and an inline image attachment' +description: Opens a new message form with a sample content, recipients, and an inline image attachment host: OUTLOOK api_set: Mailbox: '1.9' diff --git a/samples/outlook/55-display-items/display-reply-forms.yaml b/samples/outlook/55-display-items/display-reply-forms.yaml index 4f8dd7af6..1c8d46bfb 100644 --- a/samples/outlook/55-display-items/display-reply-forms.yaml +++ b/samples/outlook/55-display-items/display-reply-forms.yaml @@ -77,4 +77,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/55-display-items/display-reply-with-attachments.yaml b/samples/outlook/55-display-items/display-reply-with-attachments.yaml index f6a140f8e..a8c28a08d 100644 --- a/samples/outlook/55-display-items/display-reply-with-attachments.yaml +++ b/samples/outlook/55-display-items/display-reply-with-attachments.yaml @@ -206,4 +206,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/60-sensitivity-label/sensitivity-label.yaml b/samples/outlook/60-sensitivity-label/sensitivity-label.yaml index 3eff3cfa4..8b0db6aaa 100644 --- a/samples/outlook/60-sensitivity-label/sensitivity-label.yaml +++ b/samples/outlook/60-sensitivity-label/sensitivity-label.yaml @@ -91,4 +91,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml b/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml index 6cc2ea515..beb6aef86 100644 --- a/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml +++ b/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml @@ -74,4 +74,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml b/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml index 7ebaf45f8..a38fcc94e 100644 --- a/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml +++ b/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml @@ -57,4 +57,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml b/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml index 2c6432fe6..12d2e2a8a 100644 --- a/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml +++ b/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml @@ -66,4 +66,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml b/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml index 9a82619a5..9869ae0e5 100644 --- a/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml +++ b/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml @@ -1,6 +1,6 @@ id: outlook-mime-headers-manage-custom-internet-headers-message-compose name: Work with custom internet headers -description: 'Sets, gets, and removes custom internet headers on a message in Compose mode.' +description: Sets, gets, and removes custom internet headers on a message in Compose mode. host: OUTLOOK api_set: Mailbox: '1.8' diff --git a/samples/outlook/75-regex-matches/contextual.yaml b/samples/outlook/75-regex-matches/contextual.yaml index f83c31234..4be7a3f0a 100644 --- a/samples/outlook/75-regex-matches/contextual.yaml +++ b/samples/outlook/75-regex-matches/contextual.yaml @@ -1,5 +1,5 @@ id: outlook-regex-matches-contextual -name: 'Get regex matches (Item Read, contextual)' +name: Get regex matches (Item Read, contextual) description: Gets regex matches when the add-in is opened as a contextual add-in. host: OUTLOOK api_set: diff --git a/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml b/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml index c7cba1a0c..07a5a11d6 100644 --- a/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml +++ b/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml @@ -75,4 +75,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml b/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml index c0744d2be..57259939d 100644 --- a/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml +++ b/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml @@ -79,4 +79,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml b/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml index 7b05c488c..90a24f5f7 100644 --- a/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml +++ b/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml @@ -1,7 +1,7 @@ order: 1 id: outlook-tokens-and-service-calls-ids-and-urls name: Endpoint URLs and item IDs -description: 'Retrieves and displays the Exchange Web Services (EWS) endpoint URL and item IDs, and converts item IDs for different protocols.' +description: Retrieves and displays the Exchange Web Services (EWS) endpoint URL and item IDs, and converts item IDs for different protocols. host: OUTLOOK api_set: Mailbox: '1.5' diff --git a/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml b/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml index 1b023e5a6..a4fd49450 100644 --- a/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml +++ b/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml @@ -64,4 +64,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml b/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml index e008862db..90feb4ccb 100644 --- a/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml +++ b/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml @@ -67,4 +67,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml b/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml index e7e7e9cb3..986a3bcbc 100644 --- a/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml +++ b/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml @@ -55,4 +55,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml b/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml index 4ccdc8fd4..b37f4f878 100644 --- a/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml +++ b/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml @@ -54,4 +54,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/delay-message-delivery.yaml b/samples/outlook/90-other-item-apis/delay-message-delivery.yaml index 186e35414..c5861ddc6 100644 --- a/samples/outlook/90-other-item-apis/delay-message-delivery.yaml +++ b/samples/outlook/90-other-item-apis/delay-message-delivery.yaml @@ -112,4 +112,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml b/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml index e03300997..31a6bfe6b 100644 --- a/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml +++ b/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml @@ -1,7 +1,7 @@ order: 13 id: outlook-other-item-apis-get-add-remove-enhancedlocation-appointment name: Manage the locations of an appointment -description: 'Gets, adds, and removes locations on an appointment (enhancedLocation API).' +description: Gets, adds, and removes locations on an appointment (enhancedLocation API). host: OUTLOOK api_set: Mailbox: '1.8' diff --git a/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml b/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml index 047455858..7b5fee263 100644 --- a/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml +++ b/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml @@ -44,4 +44,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-conversation-index.yaml b/samples/outlook/90-other-item-apis/get-conversation-index.yaml index f3ed7d215..033a58ce8 100644 --- a/samples/outlook/90-other-item-apis/get-conversation-index.yaml +++ b/samples/outlook/90-other-item-apis/get-conversation-index.yaml @@ -58,4 +58,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml b/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml index 757d0bec4..da459a365 100644 --- a/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml +++ b/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml @@ -44,4 +44,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml b/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml index da56959ec..dd97e6de5 100644 --- a/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml +++ b/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml @@ -44,4 +44,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml b/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml index 35bfa5c04..dea58a0d0 100644 --- a/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml +++ b/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml @@ -65,4 +65,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-eml-format.yaml b/samples/outlook/90-other-item-apis/get-eml-format.yaml index aae4995c2..6d06770a7 100644 --- a/samples/outlook/90-other-item-apis/get-eml-format.yaml +++ b/samples/outlook/90-other-item-apis/get-eml-format.yaml @@ -51,4 +51,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-end-read.yaml b/samples/outlook/90-other-item-apis/get-end-read.yaml index 63c196abe..e66f3af01 100644 --- a/samples/outlook/90-other-item-apis/get-end-read.yaml +++ b/samples/outlook/90-other-item-apis/get-end-read.yaml @@ -44,4 +44,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-in-reply-to.yaml b/samples/outlook/90-other-item-apis/get-in-reply-to.yaml index 5128ab698..02a3b9d8a 100644 --- a/samples/outlook/90-other-item-apis/get-in-reply-to.yaml +++ b/samples/outlook/90-other-item-apis/get-in-reply-to.yaml @@ -51,4 +51,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml b/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml index cdf9a999b..37a258bd1 100644 --- a/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml +++ b/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml @@ -44,4 +44,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-item-class-async.yaml b/samples/outlook/90-other-item-apis/get-item-class-async.yaml index 8d232618c..7c221cfce 100644 --- a/samples/outlook/90-other-item-apis/get-item-class-async.yaml +++ b/samples/outlook/90-other-item-apis/get-item-class-async.yaml @@ -53,4 +53,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-item-class-read.yaml b/samples/outlook/90-other-item-apis/get-item-class-read.yaml index 8638e4f3c..70e0759ba 100644 --- a/samples/outlook/90-other-item-apis/get-item-class-read.yaml +++ b/samples/outlook/90-other-item-apis/get-item-class-read.yaml @@ -44,4 +44,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-item-type.yaml b/samples/outlook/90-other-item-apis/get-item-type.yaml index fb9a71d53..806a76a70 100644 --- a/samples/outlook/90-other-item-apis/get-item-type.yaml +++ b/samples/outlook/90-other-item-apis/get-item-type.yaml @@ -51,4 +51,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-loaded-message-properties.yaml b/samples/outlook/90-other-item-apis/get-loaded-message-properties.yaml index 397604bbd..a568ae296 100644 --- a/samples/outlook/90-other-item-apis/get-loaded-message-properties.yaml +++ b/samples/outlook/90-other-item-apis/get-loaded-message-properties.yaml @@ -1,6 +1,6 @@ order: 31 id: outlook-other-item-apis-get-loaded-message-properties -name: 'Get properties of a loaded message (Message Compose, Message Read)' +name: Get properties of a loaded message (Message Compose, Message Read) description: Gets the properties of the currently loaded message. host: OUTLOOK api_set: diff --git a/samples/outlook/90-other-item-apis/get-location-read.yaml b/samples/outlook/90-other-item-apis/get-location-read.yaml index 77b04d4ad..8647470b2 100644 --- a/samples/outlook/90-other-item-apis/get-location-read.yaml +++ b/samples/outlook/90-other-item-apis/get-location-read.yaml @@ -44,4 +44,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-message-properties.yaml b/samples/outlook/90-other-item-apis/get-message-properties.yaml index 223509302..652c9e01b 100644 --- a/samples/outlook/90-other-item-apis/get-message-properties.yaml +++ b/samples/outlook/90-other-item-apis/get-message-properties.yaml @@ -1,6 +1,6 @@ order: 23 id: outlook-other-item-apis-get-message-properties -name: 'Get properties of selected messages (Message Compose, Message Read)' +name: Get properties of selected messages (Message Compose, Message Read) description: Gets the properties of multiple selected messages. host: OUTLOOK api_set: diff --git a/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml b/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml index e531c0cfe..38c75c1e6 100644 --- a/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml +++ b/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml @@ -44,4 +44,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml b/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml index c54f8bf46..22f02f686 100644 --- a/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml +++ b/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml @@ -73,4 +73,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml b/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml index 7d2617559..10abec6e5 100644 --- a/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml +++ b/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml @@ -65,4 +65,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml b/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml index 31735089f..bccf5570f 100644 --- a/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml +++ b/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml @@ -69,4 +69,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml b/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml index ad3713570..d58d33125 100644 --- a/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml +++ b/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml @@ -66,4 +66,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml b/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml index 7d8efcc66..1a00f3831 100644 --- a/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml +++ b/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml @@ -65,4 +65,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-start-read.yaml b/samples/outlook/90-other-item-apis/get-start-read.yaml index bee75989c..bc2cd169c 100644 --- a/samples/outlook/90-other-item-apis/get-start-read.yaml +++ b/samples/outlook/90-other-item-apis/get-start-read.yaml @@ -44,4 +44,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-subject-read.yaml b/samples/outlook/90-other-item-apis/get-subject-read.yaml index c9146810a..08f83b678 100644 --- a/samples/outlook/90-other-item-apis/get-subject-read.yaml +++ b/samples/outlook/90-other-item-apis/get-subject-read.yaml @@ -44,4 +44,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/item-id-compose.yaml b/samples/outlook/90-other-item-apis/item-id-compose.yaml index 8e44d1b6e..b2407b014 100644 --- a/samples/outlook/90-other-item-apis/item-id-compose.yaml +++ b/samples/outlook/90-other-item-apis/item-id-compose.yaml @@ -52,4 +52,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/send-async.yaml b/samples/outlook/90-other-item-apis/send-async.yaml index da6d56dc9..41ef2e0a8 100644 --- a/samples/outlook/90-other-item-apis/send-async.yaml +++ b/samples/outlook/90-other-item-apis/send-async.yaml @@ -50,4 +50,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/session-data-apis.yaml b/samples/outlook/90-other-item-apis/session-data-apis.yaml index 213e66b38..d89b45d0c 100644 --- a/samples/outlook/90-other-item-apis/session-data-apis.yaml +++ b/samples/outlook/90-other-item-apis/session-data-apis.yaml @@ -1,7 +1,7 @@ order: 20 id: outlook-other-item-apis-session-data-apis name: Work with session data APIs (Compose) -description: 'Sets, gets, gets all, removes, and clears session data in Compose mode.' +description: Sets, gets, gets all, removes, and clears session data in Compose mode. host: OUTLOOK api_set: Mailbox: '1.11' diff --git a/samples/outlook/90-other-item-apis/set-selected-data.yaml b/samples/outlook/90-other-item-apis/set-selected-data.yaml index 8a0af7b5c..7d2be55ff 100644 --- a/samples/outlook/90-other-item-apis/set-selected-data.yaml +++ b/samples/outlook/90-other-item-apis/set-selected-data.yaml @@ -51,4 +51,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml b/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml index 3177c168b..63cfa93df 100644 --- a/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml +++ b/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml @@ -1,7 +1,7 @@ order: 19 id: outlook-other-item-apis-work-with-client-signatures name: Work with client signatures (Compose) -description: 'Checks if the client signature is enabled, disables the client signature, gets the compose type, and sets a signature in Compose mode.' +description: Checks if the client signature is enabled, disables the client signature, gets the compose type, and sets a signature in Compose mode. host: OUTLOOK api_set: Mailbox: '1.10' diff --git a/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml b/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml index 7cf1ad0a1..d9d8c44aa 100644 --- a/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml +++ b/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml @@ -66,4 +66,4 @@ libraries: |- @types/office-js-preview https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml b/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml index cdac8aa8d..fcb27dd05 100644 --- a/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml +++ b/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml @@ -83,4 +83,4 @@ libraries: |- @types/office-js-preview https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/powerpoint/basics/basic-api-call-js.yaml b/samples/powerpoint/basics/basic-api-call-js.yaml index a07f9456e..903944372 100644 --- a/samples/powerpoint/basics/basic-api-call-js.yaml +++ b/samples/powerpoint/basics/basic-api-call-js.yaml @@ -64,4 +64,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/powerpoint/basics/basic-api-call-ts.yaml b/samples/powerpoint/basics/basic-api-call-ts.yaml index 2ca0fd607..9fce2f953 100644 --- a/samples/powerpoint/basics/basic-api-call-ts.yaml +++ b/samples/powerpoint/basics/basic-api-call-ts.yaml @@ -64,4 +64,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/powerpoint/basics/basic-common-api-call.yaml b/samples/powerpoint/basics/basic-common-api-call.yaml index c3107a43e..304c0f1d5 100644 --- a/samples/powerpoint/basics/basic-common-api-call.yaml +++ b/samples/powerpoint/basics/basic-common-api-call.yaml @@ -44,4 +44,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/powerpoint/default.yaml b/samples/powerpoint/default.yaml index 0a15973de..cbf9fc811 100644 --- a/samples/powerpoint/default.yaml +++ b/samples/powerpoint/default.yaml @@ -42,4 +42,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/powerpoint/document/create-presentation.yaml b/samples/powerpoint/document/create-presentation.yaml index 678eb64d7..debc2bff0 100644 --- a/samples/powerpoint/document/create-presentation.yaml +++ b/samples/powerpoint/document/create-presentation.yaml @@ -1,6 +1,6 @@ id: powerpoint-create-presentation name: Create presentation -description: 'Creates a new, empty presentation and creates a new presentation by copying an existing one.' +description: Creates a new, empty presentation and creates a new presentation by copying an existing one. author: OfficeDev host: POWERPOINT api_set: diff --git a/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml b/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml index f8f486309..d10d316b4 100644 --- a/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml +++ b/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml @@ -64,4 +64,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/powerpoint/images/insert-image.yaml b/samples/powerpoint/images/insert-image.yaml index f0677e897..bc432ec35 100644 --- a/samples/powerpoint/images/insert-image.yaml +++ b/samples/powerpoint/images/insert-image.yaml @@ -57,4 +57,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/powerpoint/images/insert-svg.yaml b/samples/powerpoint/images/insert-svg.yaml index 4cbc8c87c..d3d66522e 100644 --- a/samples/powerpoint/images/insert-svg.yaml +++ b/samples/powerpoint/images/insert-svg.yaml @@ -61,4 +61,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/powerpoint/scenarios/searches-wikipedia-api.yaml b/samples/powerpoint/scenarios/searches-wikipedia-api.yaml index e2883fb55..79139a157 100644 --- a/samples/powerpoint/scenarios/searches-wikipedia-api.yaml +++ b/samples/powerpoint/scenarios/searches-wikipedia-api.yaml @@ -248,4 +248,4 @@ libraries: |- https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js \ No newline at end of file + https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js diff --git a/samples/powerpoint/shapes/add-modify-tables.yaml b/samples/powerpoint/shapes/add-modify-tables.yaml index c0b652d34..df292f525 100644 --- a/samples/powerpoint/shapes/add-modify-tables.yaml +++ b/samples/powerpoint/shapes/add-modify-tables.yaml @@ -414,4 +414,4 @@ libraries: |- office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js - @types/core-js \ No newline at end of file + @types/core-js diff --git a/samples/powerpoint/shapes/binding-to-shapes.yaml b/samples/powerpoint/shapes/binding-to-shapes.yaml index 10e205150..6059ca2ba 100644 --- a/samples/powerpoint/shapes/binding-to-shapes.yaml +++ b/samples/powerpoint/shapes/binding-to-shapes.yaml @@ -367,4 +367,4 @@ libraries: | office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js - @types/core-js \ No newline at end of file + @types/core-js diff --git a/samples/powerpoint/shapes/get-set-shapes.yaml b/samples/powerpoint/shapes/get-set-shapes.yaml index 41790cdec..4e24db0c5 100644 --- a/samples/powerpoint/shapes/get-set-shapes.yaml +++ b/samples/powerpoint/shapes/get-set-shapes.yaml @@ -1,6 +1,6 @@ order: 2 id: powerpoint-shapes-get-set-shapes -name: 'Get, set, load, and save shapes' +name: Get, set, load, and save shapes description: Get and set one or more selected shapes. Load and save one or more shapes. host: POWERPOINT api_set: diff --git a/samples/powerpoint/shapes/get-shapes-by-type.yaml b/samples/powerpoint/shapes/get-shapes-by-type.yaml index 9bca1519a..747202762 100644 --- a/samples/powerpoint/shapes/get-shapes-by-type.yaml +++ b/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -1,7 +1,7 @@ order: 3 id: powerpoint-shapes-get-shapes-by-type name: Select shapes by type -description: 'Gets shapes in a slide based on their type, such as GeometricShape or Line.' +description: Gets shapes in a slide based on their type, such as GeometricShape or Line. host: POWERPOINT api_set: PowerPointApi: '1.4' diff --git a/samples/powerpoint/shapes/group-ungroup-shapes.yaml b/samples/powerpoint/shapes/group-ungroup-shapes.yaml index 17592fc3b..6d8e8f3fe 100644 --- a/samples/powerpoint/shapes/group-ungroup-shapes.yaml +++ b/samples/powerpoint/shapes/group-ungroup-shapes.yaml @@ -190,4 +190,4 @@ libraries: |- @types/office-js https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/powerpoint/shapes/shapes.yaml b/samples/powerpoint/shapes/shapes.yaml index 80a1cc305..da2850890 100644 --- a/samples/powerpoint/shapes/shapes.yaml +++ b/samples/powerpoint/shapes/shapes.yaml @@ -1,7 +1,7 @@ order: 1 id: powerpoint-shapes -name: 'Insert shape, line, and text box' -description: 'Inserts geometric shapes, lines, and text boxes to a slide.' +name: Insert shape, line, and text box +description: Inserts geometric shapes, lines, and text boxes to a slide. host: POWERPOINT api_set: PowerPointApi: '1.4' diff --git a/samples/powerpoint/slide-management/add-slides.yaml b/samples/powerpoint/slide-management/add-slides.yaml index 8a4027b13..ab7faeaa3 100644 --- a/samples/powerpoint/slide-management/add-slides.yaml +++ b/samples/powerpoint/slide-management/add-slides.yaml @@ -101,4 +101,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/powerpoint/slide-management/export-import-slide.yaml b/samples/powerpoint/slide-management/export-import-slide.yaml index 36711aca3..20ba32a3a 100644 --- a/samples/powerpoint/slide-management/export-import-slide.yaml +++ b/samples/powerpoint/slide-management/export-import-slide.yaml @@ -303,4 +303,4 @@ libraries: |- office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js - @types/core-js \ No newline at end of file + @types/core-js diff --git a/samples/powerpoint/slide-management/get-set-slides.yaml b/samples/powerpoint/slide-management/get-set-slides.yaml index b4a63000f..9010a097e 100644 --- a/samples/powerpoint/slide-management/get-set-slides.yaml +++ b/samples/powerpoint/slide-management/get-set-slides.yaml @@ -1,6 +1,6 @@ order: 4 id: powerpoint-slide-management-get-set-slides -name: 'Get, set, load, and save slides' +name: Get, set, load, and save slides description: Get and set one or more selected slides. Load and save one or more slides. host: POWERPOINT api_set: diff --git a/samples/powerpoint/slide-management/get-slide-metadata.yaml b/samples/powerpoint/slide-management/get-slide-metadata.yaml index 1e86a7752..9a83ed396 100644 --- a/samples/powerpoint/slide-management/get-slide-metadata.yaml +++ b/samples/powerpoint/slide-management/get-slide-metadata.yaml @@ -1,7 +1,7 @@ order: 3 id: powerpoint-basics-get-slide-metadata name: Get slide metadata -description: 'Gets the title, index, and ID of the selected slides.' +description: Gets the title, index, and ID of the selected slides. author: OfficeDev host: POWERPOINT api_set: {} diff --git a/samples/powerpoint/slide-management/insert-slides.yaml b/samples/powerpoint/slide-management/insert-slides.yaml index 5ce708484..399523abf 100644 --- a/samples/powerpoint/slide-management/insert-slides.yaml +++ b/samples/powerpoint/slide-management/insert-slides.yaml @@ -113,4 +113,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/powerpoint/tags/tags.yaml b/samples/powerpoint/tags/tags.yaml index 94b85c9c3..45aa7828a 100644 --- a/samples/powerpoint/tags/tags.yaml +++ b/samples/powerpoint/tags/tags.yaml @@ -201,4 +201,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/powerpoint/text/get-set-textrange.yaml b/samples/powerpoint/text/get-set-textrange.yaml index b7391c145..fa6cb92f2 100644 --- a/samples/powerpoint/text/get-set-textrange.yaml +++ b/samples/powerpoint/text/get-set-textrange.yaml @@ -1,7 +1,7 @@ order: 1 id: powerpoint-text-get-set-textrange name: Work with text range selections -description: 'Get, set, load, and save text range selections.' +description: Get, set, load, and save text range selections. host: POWERPOINT api_set: PowerPointApi: '1.5' diff --git a/samples/project/basics/basic-common-api-call.yaml b/samples/project/basics/basic-common-api-call.yaml index f8d4d189a..9a1b68aa0 100644 --- a/samples/project/basics/basic-common-api-call.yaml +++ b/samples/project/basics/basic-common-api-call.yaml @@ -34,4 +34,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/project/default.yaml b/samples/project/default.yaml index c73af1eeb..11f70dd5e 100644 --- a/samples/project/default.yaml +++ b/samples/project/default.yaml @@ -42,4 +42,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/01-basics/basic-api-call-es5.yaml b/samples/word/01-basics/basic-api-call-es5.yaml index a9cdf506b..29b33f94a 100644 --- a/samples/word/01-basics/basic-api-call-es5.yaml +++ b/samples/word/01-basics/basic-api-call-es5.yaml @@ -60,4 +60,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/01-basics/basic-api-call.yaml b/samples/word/01-basics/basic-api-call.yaml index 6aab3ed8e..d399bdfd1 100644 --- a/samples/word/01-basics/basic-api-call.yaml +++ b/samples/word/01-basics/basic-api-call.yaml @@ -61,4 +61,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/01-basics/basic-common-api-call.yaml b/samples/word/01-basics/basic-common-api-call.yaml index d1b374d41..02de4d908 100644 --- a/samples/word/01-basics/basic-common-api-call.yaml +++ b/samples/word/01-basics/basic-common-api-call.yaml @@ -47,4 +47,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/10-content-controls/content-control-onadded-event.yaml b/samples/word/10-content-controls/content-control-onadded-event.yaml index 2ee82194f..26ab14665 100644 --- a/samples/word/10-content-controls/content-control-onadded-event.yaml +++ b/samples/word/10-content-controls/content-control-onadded-event.yaml @@ -1,7 +1,7 @@ order: 2 id: word-content-controls-content-control-onadded-event name: On adding content controls -description: 'Registers, triggers, and deregisters onAdded event that tracks the addition of content controls.' +description: Registers, triggers, and deregisters onAdded event that tracks the addition of content controls. host: WORD api_set: WordApi: '1.5' diff --git a/samples/word/10-content-controls/content-control-ondatachanged-event.yaml b/samples/word/10-content-controls/content-control-ondatachanged-event.yaml index 976769d1a..fbead0ddb 100644 --- a/samples/word/10-content-controls/content-control-ondatachanged-event.yaml +++ b/samples/word/10-content-controls/content-control-ondatachanged-event.yaml @@ -1,7 +1,7 @@ order: 5 id: word-content-controls-content-control-ondatachanged-event name: On changing data in content controls -description: 'Registers, triggers, and deregisters onDataChanged event that tracks when data is changed in content controls.' +description: Registers, triggers, and deregisters onDataChanged event that tracks when data is changed in content controls. host: WORD api_set: WordApi: '1.5' diff --git a/samples/word/10-content-controls/content-control-ondeleted-event.yaml b/samples/word/10-content-controls/content-control-ondeleted-event.yaml index e98eec7af..1736cc338 100644 --- a/samples/word/10-content-controls/content-control-ondeleted-event.yaml +++ b/samples/word/10-content-controls/content-control-ondeleted-event.yaml @@ -1,7 +1,7 @@ order: 7 id: word-content-controls-content-control-ondeleted-event name: On deleting content controls -description: 'Registers, triggers, and deregisters onDeleted event that tracks the removal of content controls.' +description: Registers, triggers, and deregisters onDeleted event that tracks the removal of content controls. host: WORD api_set: WordApi: '1.5' diff --git a/samples/word/10-content-controls/content-control-onentered-event.yaml b/samples/word/10-content-controls/content-control-onentered-event.yaml index 4c7128dc0..09874c1db 100644 --- a/samples/word/10-content-controls/content-control-onentered-event.yaml +++ b/samples/word/10-content-controls/content-control-onentered-event.yaml @@ -1,7 +1,7 @@ order: 3 id: word-content-controls-content-control-onentered-event name: On entering content controls -description: 'Registers, triggers, and deregisters onEntered event that tracks when the cursor is placed within content controls.' +description: Registers, triggers, and deregisters onEntered event that tracks when the cursor is placed within content controls. host: WORD api_set: WordApi: '1.5' diff --git a/samples/word/10-content-controls/content-control-onexited-event.yaml b/samples/word/10-content-controls/content-control-onexited-event.yaml index c2e5b4eab..c12456e21 100644 --- a/samples/word/10-content-controls/content-control-onexited-event.yaml +++ b/samples/word/10-content-controls/content-control-onexited-event.yaml @@ -1,7 +1,7 @@ order: 6 id: word-content-controls-content-control-onexited-event name: On exiting content controls -description: 'Registers, triggers, and deregisters onExited event that tracks when the cursor is removed from within content controls.' +description: Registers, triggers, and deregisters onExited event that tracks when the cursor is removed from within content controls. host: WORD api_set: WordApi: '1.5' diff --git a/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml b/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml index 989a07ac1..531e7a23a 100644 --- a/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml +++ b/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml @@ -1,7 +1,7 @@ order: 4 id: word-content-controls-content-control-onselectionchanged-event name: On changing selection in content controls -description: 'Registers, triggers, and deregisters onSelectionChanged event that tracks when selections are changed in content controls.' +description: Registers, triggers, and deregisters onSelectionChanged event that tracks when selections are changed in content controls. host: WORD api_set: WordApi: '1.5' diff --git a/samples/word/10-content-controls/get-change-tracking-states.yaml b/samples/word/10-content-controls/get-change-tracking-states.yaml index b59d84146..b874d6b6d 100644 --- a/samples/word/10-content-controls/get-change-tracking-states.yaml +++ b/samples/word/10-content-controls/get-change-tracking-states.yaml @@ -164,4 +164,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml b/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml index 2cda8dcd1..2904ffa23 100644 --- a/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml +++ b/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml @@ -1,7 +1,7 @@ order: 8 id: word-content-controls-insert-and-change-checkbox-content-control name: Manage checkbox content controls -description: 'Inserts, updates, retrieves, and deletes checkbox content controls.' +description: Inserts, updates, retrieves, and deletes checkbox content controls. host: WORD api_set: WordApi: '1.7' diff --git a/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml b/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml index 734cdc388..5dca81e43 100644 --- a/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml +++ b/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml @@ -1,7 +1,7 @@ order: 9 id: word-content-controls-insert-and-change-combo-box-content-control name: Manage combo box content controls -description: 'Inserts, updates, and deletes combo box content controls.' +description: Inserts, updates, and deletes combo box content controls. host: WORD api_set: WordApi: '1.9' diff --git a/samples/word/10-content-controls/insert-and-change-content-controls.yaml b/samples/word/10-content-controls/insert-and-change-content-controls.yaml index 961b5d982..00f9ac93e 100644 --- a/samples/word/10-content-controls/insert-and-change-content-controls.yaml +++ b/samples/word/10-content-controls/insert-and-change-content-controls.yaml @@ -1,7 +1,7 @@ order: 1 id: word-content-controls-insert-and-change-content-controls name: Content control basics -description: 'Inserts, updates, and retrieves content controls.' +description: Inserts, updates, and retrieves content controls. author: OfficeDev host: WORD api_set: diff --git a/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml b/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml index d18f95f5d..ff1ef0479 100644 --- a/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml +++ b/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml @@ -1,7 +1,7 @@ order: 10 id: word-content-controls-insert-and-change-dropdown-list-content-control name: Manage dropdown list content controls -description: 'Inserts, updates, and deletes dropdown list content controls.' +description: Inserts, updates, and deletes dropdown list content controls. host: WORD api_set: WordApi: '1.9' diff --git a/samples/word/15-images/insert-and-get-pictures.yaml b/samples/word/15-images/insert-and-get-pictures.yaml index ee39795ab..a24cb7b69 100644 --- a/samples/word/15-images/insert-and-get-pictures.yaml +++ b/samples/word/15-images/insert-and-get-pictures.yaml @@ -109,4 +109,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/20-lists/insert-list.yaml b/samples/word/20-lists/insert-list.yaml index c899c16df..6444834ce 100644 --- a/samples/word/20-lists/insert-list.yaml +++ b/samples/word/20-lists/insert-list.yaml @@ -110,4 +110,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/20-lists/manage-list-styles.yaml b/samples/word/20-lists/manage-list-styles.yaml index 915b657f9..1fbd489f5 100644 --- a/samples/word/20-lists/manage-list-styles.yaml +++ b/samples/word/20-lists/manage-list-styles.yaml @@ -107,4 +107,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/20-lists/organize-list.yaml b/samples/word/20-lists/organize-list.yaml index ccfef74ef..5007a602d 100644 --- a/samples/word/20-lists/organize-list.yaml +++ b/samples/word/20-lists/organize-list.yaml @@ -138,4 +138,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml b/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml index e58e52ac5..536f169e4 100644 --- a/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml +++ b/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -118,4 +118,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/25-paragraph/get-text.yaml b/samples/word/25-paragraph/get-text.yaml index 06c427331..8190d75ae 100644 --- a/samples/word/25-paragraph/get-text.yaml +++ b/samples/word/25-paragraph/get-text.yaml @@ -1,7 +1,7 @@ order: 9 id: word-paragraph-get-text name: Get text -description: 'Shows how to get paragraph text, including hidden text and text marked for deletion.' +description: Shows how to get paragraph text, including hidden text and text marked for deletion. author: OfficeDev host: WORD api_set: diff --git a/samples/word/25-paragraph/get-word-count.yaml b/samples/word/25-paragraph/get-word-count.yaml index 00d26a8e6..7ab14f35c 100644 --- a/samples/word/25-paragraph/get-word-count.yaml +++ b/samples/word/25-paragraph/get-word-count.yaml @@ -125,4 +125,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/25-paragraph/insert-formatted-text.yaml b/samples/word/25-paragraph/insert-formatted-text.yaml index 66b2fe227..77dec94c7 100644 --- a/samples/word/25-paragraph/insert-formatted-text.yaml +++ b/samples/word/25-paragraph/insert-formatted-text.yaml @@ -110,4 +110,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/25-paragraph/insert-header-and-footer.yaml b/samples/word/25-paragraph/insert-header-and-footer.yaml index d54fd737a..61c5ce6bf 100644 --- a/samples/word/25-paragraph/insert-header-and-footer.yaml +++ b/samples/word/25-paragraph/insert-header-and-footer.yaml @@ -187,4 +187,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/25-paragraph/insert-in-different-locations.yaml b/samples/word/25-paragraph/insert-in-different-locations.yaml index 128ac7a3b..962ff5897 100644 --- a/samples/word/25-paragraph/insert-in-different-locations.yaml +++ b/samples/word/25-paragraph/insert-in-different-locations.yaml @@ -153,4 +153,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/25-paragraph/insert-line-and-page-breaks.yaml b/samples/word/25-paragraph/insert-line-and-page-breaks.yaml index 7a2593e30..2bb69dff1 100644 --- a/samples/word/25-paragraph/insert-line-and-page-breaks.yaml +++ b/samples/word/25-paragraph/insert-line-and-page-breaks.yaml @@ -97,4 +97,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/25-paragraph/onadded-event.yaml b/samples/word/25-paragraph/onadded-event.yaml index e7f3d34c9..b5989162c 100644 --- a/samples/word/25-paragraph/onadded-event.yaml +++ b/samples/word/25-paragraph/onadded-event.yaml @@ -1,7 +1,7 @@ order: 10 id: word-paragraph-onadded-event name: On adding paragraphs -description: 'Registers, triggers, and deregisters the onParagraphAdded event that tracks the addition of paragraphs.' +description: Registers, triggers, and deregisters the onParagraphAdded event that tracks the addition of paragraphs. host: WORD api_set: WordApi: '1.6' diff --git a/samples/word/25-paragraph/onchanged-event.yaml b/samples/word/25-paragraph/onchanged-event.yaml index 1b0cd1dd2..833138a41 100644 --- a/samples/word/25-paragraph/onchanged-event.yaml +++ b/samples/word/25-paragraph/onchanged-event.yaml @@ -1,7 +1,7 @@ order: 11 id: word-paragraph-onchanged-event name: On changing content in paragraphs -description: 'Registers, triggers, and deregisters the onParagraphChanged event that tracks when content is changed in paragraphs.' +description: Registers, triggers, and deregisters the onParagraphChanged event that tracks when content is changed in paragraphs. host: WORD api_set: WordApi: '1.6' diff --git a/samples/word/25-paragraph/ondeleted-event.yaml b/samples/word/25-paragraph/ondeleted-event.yaml index d1348fd36..28643099d 100644 --- a/samples/word/25-paragraph/ondeleted-event.yaml +++ b/samples/word/25-paragraph/ondeleted-event.yaml @@ -1,7 +1,7 @@ order: 12 id: word-paragraph-ondeleted-event name: On deleting paragraphs -description: 'Registers, triggers, and deregisters the onParagraphDeleted event that tracks the removal of paragraphs.' +description: Registers, triggers, and deregisters the onParagraphDeleted event that tracks the removal of paragraphs. host: WORD api_set: WordApi: '1.6' diff --git a/samples/word/25-paragraph/paragraph-properties.yaml b/samples/word/25-paragraph/paragraph-properties.yaml index 86eda92fe..43493a296 100644 --- a/samples/word/25-paragraph/paragraph-properties.yaml +++ b/samples/word/25-paragraph/paragraph-properties.yaml @@ -1,7 +1,7 @@ order: 6 id: word-paragraph-paragraph-properties name: Paragraph properties -description: 'Sets indentation, space between paragraphs, and other paragraph properties.' +description: Sets indentation, space between paragraphs, and other paragraph properties. author: OfficeDev host: WORD api_set: diff --git a/samples/word/25-paragraph/search.yaml b/samples/word/25-paragraph/search.yaml index 561af82e2..ea8337044 100644 --- a/samples/word/25-paragraph/search.yaml +++ b/samples/word/25-paragraph/search.yaml @@ -115,4 +115,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/30-properties/get-built-in-properties.yaml b/samples/word/30-properties/get-built-in-properties.yaml index e3306f39f..5eeb51d8d 100644 --- a/samples/word/30-properties/get-built-in-properties.yaml +++ b/samples/word/30-properties/get-built-in-properties.yaml @@ -61,4 +61,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/30-properties/read-write-custom-document-properties.yaml b/samples/word/30-properties/read-write-custom-document-properties.yaml index 4493dedf4..600c31687 100644 --- a/samples/word/30-properties/read-write-custom-document-properties.yaml +++ b/samples/word/30-properties/read-write-custom-document-properties.yaml @@ -88,4 +88,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/35-ranges/compare-location.yaml b/samples/word/35-ranges/compare-location.yaml index 4bca6acb8..c93592309 100644 --- a/samples/word/35-ranges/compare-location.yaml +++ b/samples/word/35-ranges/compare-location.yaml @@ -122,4 +122,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/35-ranges/get-pages.yaml b/samples/word/35-ranges/get-pages.yaml index 3533307d5..ac6000b3d 100644 --- a/samples/word/35-ranges/get-pages.yaml +++ b/samples/word/35-ranges/get-pages.yaml @@ -1,7 +1,7 @@ order: 4 id: word-ranges-get-pages -name: 'Work with pages, panes, and windows' -description: 'Shows how to work with pages, panes, and windows.' +name: Work with pages, panes, and windows +description: Shows how to work with pages, panes, and windows. author: yilin4 host: WORD api_set: diff --git a/samples/word/35-ranges/scroll-to-range.yaml b/samples/word/35-ranges/scroll-to-range.yaml index bc4ec0029..0bea961dd 100644 --- a/samples/word/35-ranges/scroll-to-range.yaml +++ b/samples/word/35-ranges/scroll-to-range.yaml @@ -97,4 +97,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/35-ranges/split-words-of-first-paragraph.yaml b/samples/word/35-ranges/split-words-of-first-paragraph.yaml index ab281397b..8e23f4118 100644 --- a/samples/word/35-ranges/split-words-of-first-paragraph.yaml +++ b/samples/word/35-ranges/split-words-of-first-paragraph.yaml @@ -1,7 +1,7 @@ order: 2 id: word-ranges-split-words-of-first-paragraph name: Split a paragraph into ranges -description: 'Splits a paragraph into word ranges and then traverses all the ranges to format each word, producing a "karaoke" effect.' +description: Splits a paragraph into word ranges and then traverses all the ranges to format each word, producing a "karaoke" effect. author: OfficeDev host: WORD api_set: diff --git a/samples/word/40-tables/manage-custom-style.yaml b/samples/word/40-tables/manage-custom-style.yaml index 8d3a60fcb..9c6ab8360 100644 --- a/samples/word/40-tables/manage-custom-style.yaml +++ b/samples/word/40-tables/manage-custom-style.yaml @@ -432,4 +432,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/40-tables/manage-formatting.yaml b/samples/word/40-tables/manage-formatting.yaml index 303649fb2..4031cf690 100644 --- a/samples/word/40-tables/manage-formatting.yaml +++ b/samples/word/40-tables/manage-formatting.yaml @@ -1,7 +1,7 @@ order: 2 id: word-tables-manage-formatting name: Table formatting -description: 'Gets the formatting details of a table, a table row, and a table cell, including borders, alignment, and cell padding.' +description: Gets the formatting details of a table, a table row, and a table cell, including borders, alignment, and cell padding. author: OfficeDev host: WORD api_set: diff --git a/samples/word/40-tables/table-cell-access.yaml b/samples/word/40-tables/table-cell-access.yaml index ea3f037f8..283c41753 100644 --- a/samples/word/40-tables/table-cell-access.yaml +++ b/samples/word/40-tables/table-cell-access.yaml @@ -83,4 +83,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/50-document/compare-documents.yaml b/samples/word/50-document/compare-documents.yaml index 988b3488c..368c7dc05 100644 --- a/samples/word/50-document/compare-documents.yaml +++ b/samples/word/50-document/compare-documents.yaml @@ -71,4 +71,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/50-document/get-external-styles.yaml b/samples/word/50-document/get-external-styles.yaml index 63fad088e..86aa2117b 100644 --- a/samples/word/50-document/get-external-styles.yaml +++ b/samples/word/50-document/get-external-styles.yaml @@ -82,4 +82,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/50-document/insert-external-document.yaml b/samples/word/50-document/insert-external-document.yaml index 7e374a5f1..126961451 100644 --- a/samples/word/50-document/insert-external-document.yaml +++ b/samples/word/50-document/insert-external-document.yaml @@ -1,7 +1,7 @@ order: 3 id: word-document-insert-external-document name: Insert an external document -description: 'Inserts the content (with or without settings) of an external document into the current document. Settings include formatting, change-tracking mode, custom properties, and XML parts.' +description: Inserts the content (with or without settings) of an external document into the current document. Settings include formatting, change-tracking mode, custom properties, and XML parts. host: WORD api_set: WordApi: '1.7' diff --git a/samples/word/50-document/insert-section-breaks.yaml b/samples/word/50-document/insert-section-breaks.yaml index a8e6f38d3..b870d7865 100644 --- a/samples/word/50-document/insert-section-breaks.yaml +++ b/samples/word/50-document/insert-section-breaks.yaml @@ -134,4 +134,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/50-document/manage-annotations.yaml b/samples/word/50-document/manage-annotations.yaml index 79553d280..7fd3a5dab 100644 --- a/samples/word/50-document/manage-annotations.yaml +++ b/samples/word/50-document/manage-annotations.yaml @@ -358,4 +358,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/50-document/manage-body.yaml b/samples/word/50-document/manage-body.yaml index 18b7b14cd..c92791dab 100644 --- a/samples/word/50-document/manage-body.yaml +++ b/samples/word/50-document/manage-body.yaml @@ -412,4 +412,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/50-document/manage-change-tracking.yaml b/samples/word/50-document/manage-change-tracking.yaml index e26519071..fa7f17120 100644 --- a/samples/word/50-document/manage-change-tracking.yaml +++ b/samples/word/50-document/manage-change-tracking.yaml @@ -143,4 +143,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/50-document/manage-comments.yaml b/samples/word/50-document/manage-comments.yaml index 420e05e77..3fb2d2b1d 100644 --- a/samples/word/50-document/manage-comments.yaml +++ b/samples/word/50-document/manage-comments.yaml @@ -1,7 +1,7 @@ order: 6 id: word-document-manage-comments name: Manage comments -description: 'This sample shows how to perform basic comments operations, including insert, reply, get, edit, resolve, and delete.' +description: This sample shows how to perform basic comments operations, including insert, reply, get, edit, resolve, and delete. host: WORD api_set: WordApi: '1.4' diff --git a/samples/word/50-document/manage-custom-xml-part-ns.yaml b/samples/word/50-document/manage-custom-xml-part-ns.yaml index 84d012fdb..4f9b9c5f4 100644 --- a/samples/word/50-document/manage-custom-xml-part-ns.yaml +++ b/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -1,7 +1,7 @@ order: 10 id: word-document-manage-custom-xml-part-ns name: Manage a CustomXmlPart with the namespace -description: 'This sample shows how to add, query, replace, edit, and delete a custom XML part in a document.' +description: This sample shows how to add, query, replace, edit, and delete a custom XML part in a document. host: WORD api_set: WordApi: '1.4' diff --git a/samples/word/50-document/manage-custom-xml-part.yaml b/samples/word/50-document/manage-custom-xml-part.yaml index 64ef6b011..12f1de659 100644 --- a/samples/word/50-document/manage-custom-xml-part.yaml +++ b/samples/word/50-document/manage-custom-xml-part.yaml @@ -1,7 +1,7 @@ order: 11 id: word-document-manage-custom-xml-part name: Manage a CustomXmlPart without the namespace -description: 'This sample shows how to add, query, edit, and delete a custom XML part in a document.' +description: This sample shows how to add, query, edit, and delete a custom XML part in a document. host: WORD api_set: WordApi: '1.4' diff --git a/samples/word/50-document/manage-fields.yaml b/samples/word/50-document/manage-fields.yaml index 8a3499ac0..49a583f69 100644 --- a/samples/word/50-document/manage-fields.yaml +++ b/samples/word/50-document/manage-fields.yaml @@ -1,7 +1,7 @@ order: 8 id: word-document-manage-fields name: Manage fields -description: 'This sample shows how to perform basic operations on fields, including insert, get, and delete.' +description: This sample shows how to perform basic operations on fields, including insert, get, and delete. host: WORD api_set: WordApi: '1.5' diff --git a/samples/word/50-document/manage-footnotes.yaml b/samples/word/50-document/manage-footnotes.yaml index b5ff910aa..32007812f 100644 --- a/samples/word/50-document/manage-footnotes.yaml +++ b/samples/word/50-document/manage-footnotes.yaml @@ -1,7 +1,7 @@ order: 7 id: word-document-manage-footnotes name: Manage footnotes -description: 'This sample shows how to perform basic footnote operations, including insert, get, and delete.' +description: This sample shows how to perform basic footnote operations, including insert, get, and delete. host: WORD api_set: WordApi: '1.5' diff --git a/samples/word/50-document/manage-settings.yaml b/samples/word/50-document/manage-settings.yaml index bdb6df93b..5c5b6a95d 100644 --- a/samples/word/50-document/manage-settings.yaml +++ b/samples/word/50-document/manage-settings.yaml @@ -1,7 +1,7 @@ order: 9 id: word-document-manage-settings name: Manage settings -description: 'This sample shows how to add, edit, get, and delete custom settings on a document.' +description: This sample shows how to add, edit, get, and delete custom settings on a document. host: WORD api_set: WordApi: '1.4' diff --git a/samples/word/50-document/manage-shapes-text-boxes.yaml b/samples/word/50-document/manage-shapes-text-boxes.yaml index 0052c6c77..6d8d0d900 100644 --- a/samples/word/50-document/manage-shapes-text-boxes.yaml +++ b/samples/word/50-document/manage-shapes-text-boxes.yaml @@ -287,4 +287,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/50-document/manage-styles.yaml b/samples/word/50-document/manage-styles.yaml index 3549dee24..4c0347195 100644 --- a/samples/word/50-document/manage-styles.yaml +++ b/samples/word/50-document/manage-styles.yaml @@ -339,4 +339,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/50-document/manage-tracked-changes.yaml b/samples/word/50-document/manage-tracked-changes.yaml index f692ef0e9..3099bf706 100644 --- a/samples/word/50-document/manage-tracked-changes.yaml +++ b/samples/word/50-document/manage-tracked-changes.yaml @@ -1,7 +1,7 @@ order: 5 id: word-document-manage-tracked-changes name: Manage tracked changes -description: 'This samples shows how to manage tracked changes, including accepting and rejecting changes.' +description: This samples shows how to manage tracked changes, including accepting and rejecting changes. host: WORD api_set: WordApi: '1.6' diff --git a/samples/word/50-document/save-close.yaml b/samples/word/50-document/save-close.yaml index 41381c638..67ec5b4c8 100644 --- a/samples/word/50-document/save-close.yaml +++ b/samples/word/50-document/save-close.yaml @@ -134,4 +134,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/90-scenarios/correlated-objects-pattern.yaml b/samples/word/90-scenarios/correlated-objects-pattern.yaml index a28f29013..7f2817061 100644 --- a/samples/word/90-scenarios/correlated-objects-pattern.yaml +++ b/samples/word/90-scenarios/correlated-objects-pattern.yaml @@ -163,4 +163,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/90-scenarios/doc-assembly.yaml b/samples/word/90-scenarios/doc-assembly.yaml index 418095bbb..302701358 100644 --- a/samples/word/90-scenarios/doc-assembly.yaml +++ b/samples/word/90-scenarios/doc-assembly.yaml @@ -168,4 +168,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/90-scenarios/multiple-property-set.yaml b/samples/word/90-scenarios/multiple-property-set.yaml index f3a41cecb..144d2021a 100644 --- a/samples/word/90-scenarios/multiple-property-set.yaml +++ b/samples/word/90-scenarios/multiple-property-set.yaml @@ -109,4 +109,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/99-preview-apis/insert-and-change-content-controls.yaml b/samples/word/99-preview-apis/insert-and-change-content-controls.yaml index 81d9a9ecb..70ace5471 100644 --- a/samples/word/99-preview-apis/insert-and-change-content-controls.yaml +++ b/samples/word/99-preview-apis/insert-and-change-content-controls.yaml @@ -1,6 +1,6 @@ id: word-insert-and-change-content-controls name: Content control basics -description: 'Inserts, updates, and retrieves content controls.' +description: Inserts, updates, and retrieves content controls. author: OfficeDev host: WORD api_set: diff --git a/samples/word/99-preview-apis/manage-comments.yaml b/samples/word/99-preview-apis/manage-comments.yaml index c050ead75..bdff83be1 100644 --- a/samples/word/99-preview-apis/manage-comments.yaml +++ b/samples/word/99-preview-apis/manage-comments.yaml @@ -1,6 +1,6 @@ id: word-manage-comments name: Manage comments -description: 'This sample shows how to perform operations on comments (including insert, reply, get, edit, resolve, and delete) and use comment events.' +description: This sample shows how to perform operations on comments (including insert, reply, get, edit, resolve, and delete) and use comment events. host: WORD api_set: WordApi: '1.10' diff --git a/samples/word/default.yaml b/samples/word/default.yaml index 9d45b151a..e7bc04740 100644 --- a/samples/word/default.yaml +++ b/samples/word/default.yaml @@ -54,4 +54,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 331186ec3..ee07a923e 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -1,4 +1,4 @@ -'Excel.AggregationFunction:enum': +Excel.AggregationFunction:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml @@ -16,7 +16,7 @@ await context.sync(); }); } -'Excel.Application#decimalSeparator:member': +Excel.Application#decimalSeparator:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/culture-info.yaml @@ -45,7 +45,7 @@ await context.sync(); }); -'Excel.Application#calculate:member(1)': +Excel.Application#calculate:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml @@ -54,7 +54,7 @@ await Excel.run(async (context) => { context.application.calculate(Excel.CalculationType.full); }); -'Excel.Application#suspendScreenUpdatingUntilNextSync:member(1)': +Excel.Application#suspendScreenUpdatingUntilNextSync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml @@ -89,7 +89,7 @@ console.log(`Ending. Adding ${ROW_COUNT * COLUMN_COUNT} cells took ${Date.now() - startTime} milliseconds`); }); -'Excel.ArrowheadLength:enum': +Excel.ArrowheadLength:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml @@ -108,7 +108,7 @@ await context.sync(); }); -'Excel.ArrowheadStyle:enum': +Excel.ArrowheadStyle:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml @@ -127,7 +127,7 @@ await context.sync(); }); -'Excel.ArrowheadWidth:enum': +Excel.ArrowheadWidth:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml @@ -146,7 +146,7 @@ await context.sync(); }); -'Excel.AutoFillType:enum': +Excel.AutoFillType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-auto-fill.yaml @@ -161,7 +161,7 @@ sumCell.format.autofitColumns(); await context.sync(); }); -'Excel.AutoFilter#apply:member(1)': +Excel.AutoFilter#apply:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml @@ -184,7 +184,7 @@ await context.sync(); }); -'Excel.AutoFilter#clearColumnCriteria:member(1)': +Excel.AutoFilter#clearColumnCriteria:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml @@ -200,7 +200,7 @@ sheet.autoFilter.clearColumnCriteria(3); await context.sync(); }); -'Excel.AutoFilter#reapply:member(1)': +Excel.AutoFilter#reapply:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml @@ -217,7 +217,7 @@ sheet.autoFilter.reapply(); await context.sync(); }); -'Excel.AutoFilter#remove:member(1)': +Excel.AutoFilter#remove:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml @@ -233,7 +233,7 @@ sheet.autoFilter.remove(); await context.sync(); }); -'Excel.Binding#onDataChanged:member': +Excel.Binding#onDataChanged:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/data-changed.yaml @@ -249,7 +249,7 @@ await context.sync(); }); -'Excel.BindingType:enum': +Excel.BindingType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-disable-events.yaml @@ -268,7 +268,7 @@ } await context.sync(); }); -'Excel.BorderLineStyle:enum': +Excel.BorderLineStyle:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml @@ -345,7 +345,7 @@ sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); -'Excel.BuiltInStyle:enum': +Excel.BuiltInStyle:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml @@ -422,7 +422,7 @@ sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); -'Excel.CalculationMode:enum': +Excel.CalculationMode:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-calculation.yaml @@ -435,7 +435,7 @@ console.log("Current calculation mode: " + context.application.calculationMode); }); -'Excel.CalculationType:enum': +Excel.CalculationType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-calculation.yaml @@ -445,7 +445,7 @@ context.application.calculate(Excel.CalculationType.recalculate); await context.sync(); }); -'Excel.CellControl:type': +Excel.CellControl:type: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml @@ -465,7 +465,7 @@ }; await context.sync(); }); -'Excel.CellControlType:enum': +Excel.CellControlType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml @@ -485,7 +485,7 @@ }; await context.sync(); }); -'Excel.CellPropertiesFill#color:member': +Excel.CellPropertiesFill#color:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml @@ -562,7 +562,7 @@ sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); -'Excel.CellPropertiesFillLoadOptions#color:member': +Excel.CellPropertiesFillLoadOptions#color:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml @@ -591,7 +591,7 @@ console.log( `Address: ${cellProperties.address}\nStyle: ${cellProperties.style}\nFill Color: ${cellProperties.format.fill.color}\nFont Color: ${cellProperties.format.font.color}`); }); -'Excel.CellPropertiesFont#color:member': +Excel.CellPropertiesFont#color:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml @@ -668,7 +668,7 @@ sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); -'Excel.CellPropertiesFontLoadOptions#color:member': +Excel.CellPropertiesFontLoadOptions#color:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml @@ -697,7 +697,7 @@ console.log( `Address: ${cellProperties.address}\nStyle: ${cellProperties.style}\nFill Color: ${cellProperties.format.fill.color}\nFont Color: ${cellProperties.format.font.color}`); }); -'Excel.CellPropertiesLoadOptions#address:member': +Excel.CellPropertiesLoadOptions#address:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml @@ -726,7 +726,7 @@ console.log( `Address: ${cellProperties.address}\nStyle: ${cellProperties.style}\nFill Color: ${cellProperties.format.fill.color}\nFont Color: ${cellProperties.format.font.color}`); }); -'Excel.CellValueConditionalFormat#format:member': +Excel.CellValueConditionalFormat#format:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -742,7 +742,7 @@ await context.sync(); }); -'Excel.CellValueConditionalFormat#rule:member': +Excel.CellValueConditionalFormat#rule:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -758,7 +758,7 @@ await context.sync(); }); -'Excel.CellValueType:enum': +Excel.CellValueType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-error-values.yaml @@ -782,7 +782,7 @@ range.valuesAsJson = [[error]]; await context.sync(); }); -'Excel.Chart#getDataTableOrNullObject:member(1)': +Excel.Chart#getDataTableOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml @@ -801,7 +801,7 @@ chartDataTable.visible = true; await context.sync(); }); -'Excel.Chart#onActivated:member': +Excel.Chart#onActivated:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-chart-activated.yaml @@ -838,7 +838,7 @@ console.log(`A chart was activated. ID: ${event.chartId}. Chart name: ${activatedChart.name}.`); }); } -'Excel.Chart#onDeactivated:member': +Excel.Chart#onDeactivated:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-chart-activated.yaml @@ -867,7 +867,7 @@ console.log("The pie chart is NOT active."); }); } -'Excel.ChartAxis#displayUnit:member': +Excel.ChartAxis#displayUnit:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-axis.yaml @@ -887,7 +887,7 @@ console.log("The vertical axis display unit is: " + valueAxis.displayUnit); }); -'Excel.ChartAxis#showDisplayUnitLabel:member': +Excel.ChartAxis#showDisplayUnitLabel:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-axis.yaml @@ -903,7 +903,7 @@ await context.sync(); }); -'Excel.ChartCollection#onActivated:member': +Excel.ChartCollection#onActivated:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-chart-activated.yaml @@ -940,7 +940,7 @@ console.log(`A chart was activated. ID: ${event.chartId}. Chart name: ${activatedChart.name}.`); }); } -'Excel.ChartCollection#onDeactivated:member': +Excel.ChartCollection#onDeactivated:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-chart-activated.yaml @@ -969,7 +969,7 @@ console.log("The pie chart is NOT active."); }); } -'Excel.ChartDataLabel:class': +Excel.ChartDataLabel:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-labels.yaml @@ -1012,7 +1012,7 @@ subLabel.font.color = "blue"; await context.sync(); }); -'Excel.ChartDataTable#format:member': +Excel.ChartDataTable#format:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml @@ -1042,7 +1042,7 @@ chartDataTableFormat.border.color = "blue"; await context.sync(); }); -'Excel.ChartDataTable#showHorizontalBorder:member': +Excel.ChartDataTable#showHorizontalBorder:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml @@ -1072,7 +1072,7 @@ chartDataTableFormat.border.color = "blue"; await context.sync(); }); -'Excel.ChartDataTable#showLegendKey:member': +Excel.ChartDataTable#showLegendKey:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml @@ -1102,7 +1102,7 @@ chartDataTableFormat.border.color = "blue"; await context.sync(); }); -'Excel.ChartDataTable#showOutlineBorder:member': +Excel.ChartDataTable#showOutlineBorder:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml @@ -1132,7 +1132,7 @@ chartDataTableFormat.border.color = "blue"; await context.sync(); }); -'Excel.ChartDataTable#showVerticalBorder:member': +Excel.ChartDataTable#showVerticalBorder:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml @@ -1162,7 +1162,7 @@ chartDataTableFormat.border.color = "blue"; await context.sync(); }); -'Excel.ChartDataTable#visible:member': +Excel.ChartDataTable#visible:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml @@ -1181,7 +1181,7 @@ chartDataTable.visible = true; await context.sync(); }); -'Excel.ChartDataTableFormat#border:member': +Excel.ChartDataTableFormat#border:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml @@ -1211,7 +1211,7 @@ chartDataTableFormat.border.color = "blue"; await context.sync(); }); -'Excel.ChartDataTableFormat#font:member': +Excel.ChartDataTableFormat#font:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml @@ -1241,7 +1241,7 @@ chartDataTableFormat.border.color = "blue"; await context.sync(); }); -'Excel.ChartFill#setSolidColor:member(1)': +Excel.ChartFill#setSolidColor:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-point.yaml @@ -1258,7 +1258,7 @@ await context.sync(); }); -'Excel.ChartLeaderLines:class': +Excel.ChartLeaderLines:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-leader-lines.yaml @@ -1281,7 +1281,7 @@ await context.sync(); }); -'Excel.ChartLeaderLinesFormat:class': +Excel.ChartLeaderLinesFormat:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-leader-lines.yaml @@ -1304,7 +1304,7 @@ await context.sync(); }); -'Excel.ChartLegendFormat#font:member': +Excel.ChartLegendFormat#font:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-legend.yaml @@ -1327,7 +1327,7 @@ await context.sync(); }); -'Excel.ChartPoint:class': +Excel.ChartPoint:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-labels.yaml @@ -1369,7 +1369,7 @@ } await context.sync(); }); -'Excel.ChartPointsCollection:class': +Excel.ChartPointsCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-labels.yaml @@ -1411,7 +1411,7 @@ } await context.sync(); }); -'Excel.ChartSeries#getDimensionValues:member(1)': +Excel.ChartSeries#getDimensionValues:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-bubble-chart.yaml @@ -1437,7 +1437,7 @@ // Log the information. console.log(`Series ${category.value} - X:${xValues.value},Y:${yValues.value},Bubble:${bubbleSize.value}`); }); -'Excel.ChartSeries#setBubbleSizes:member(1)': +Excel.ChartSeries#setBubbleSizes:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-bubble-chart.yaml @@ -1487,7 +1487,7 @@ await context.sync(); }); -'Excel.ChartSeries#getDimensionDataSourceString:member(1)': +Excel.ChartSeries#getDimensionDataSourceString:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-source.yaml @@ -1514,7 +1514,7 @@ console.log(series.name + " data source string: " + dataSourceString.value); console.log(series.name + " data source type: " + dataSourceType.value); }); -'Excel.ChartSeries#getDimensionDataSourceType:member(1)': +Excel.ChartSeries#getDimensionDataSourceType:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-source.yaml @@ -1541,7 +1541,7 @@ console.log(series.name + " data source string: " + dataSourceString.value); console.log(series.name + " data source type: " + dataSourceType.value); }); -'Excel.ChartSeries:class': +Excel.ChartSeries:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-leader-lines.yaml @@ -1577,7 +1577,7 @@ await context.sync(); }); -'Excel.ChartSeries#hasDataLabels:member': +Excel.ChartSeries#hasDataLabels:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-leader-lines.yaml @@ -1613,7 +1613,7 @@ await context.sync(); }); -'Excel.ChartSeries#points:member': +Excel.ChartSeries#points:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-leader-lines.yaml @@ -1649,7 +1649,7 @@ await context.sync(); }); -'Excel.ChartSeries#showLeaderLines:member': +Excel.ChartSeries#showLeaderLines:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-leader-lines.yaml @@ -1668,7 +1668,7 @@ await context.sync(); }); -'Excel.ChartSeries#delete:member(1)': +Excel.ChartSeries#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series.yaml @@ -1689,7 +1689,7 @@ await context.sync(); }); -'Excel.ChartSeries#setValues:member(1)': +Excel.ChartSeries#setValues:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series.yaml @@ -1709,7 +1709,7 @@ await context.sync(); }); -'Excel.ChartSeries#markerBackgroundColor:member': +Excel.ChartSeries#markerBackgroundColor:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series-markers.yaml @@ -1742,7 +1742,7 @@ await context.sync(); }); -'Excel.ChartSeries#markerForegroundColor:member': +Excel.ChartSeries#markerForegroundColor:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series-markers.yaml @@ -1775,7 +1775,7 @@ await context.sync(); }); -'Excel.ChartSeries#markerSize:member': +Excel.ChartSeries#markerSize:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series-markers.yaml @@ -1808,7 +1808,7 @@ await context.sync(); }); -'Excel.ChartSeries#markerStyle:member': +Excel.ChartSeries#markerStyle:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series-markers.yaml @@ -1841,7 +1841,7 @@ await context.sync(); }); -'Excel.ChartSeriesBy:enum': +Excel.ChartSeriesBy:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-source.yaml @@ -1881,7 +1881,7 @@ await context.sync(); }); -'Excel.ChartSeriesDimension:enum': +Excel.ChartSeriesDimension:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-bubble-chart.yaml @@ -1907,7 +1907,7 @@ // Log the information. console.log(`Series ${category.value} - X:${xValues.value},Y:${yValues.value},Bubble:${bubbleSize.value}`); }); -'Excel.ChartTitle#getSubstring:member(1)': +Excel.ChartTitle#getSubstring:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-title-format.yaml @@ -1921,7 +1921,7 @@ chart.title.getSubstring(0, 7).font.color = "Yellow"; await context.sync(); }); -'Excel.ChartTitle#textOrientation:member': +Excel.ChartTitle#textOrientation:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-title-format.yaml @@ -1934,7 +1934,7 @@ await context.sync(); }); -'Excel.ChartTrendline#type:member': +Excel.ChartTrendline#type:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-trendlines.yaml @@ -1953,7 +1953,7 @@ console.log("The trendline type is:" + trendline.type); }); -'Excel.ChartTrendlineCollection#add:member(1)': +Excel.ChartTrendlineCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-trendlines.yaml @@ -1969,7 +1969,7 @@ await context.sync(); }); -'Excel.ChartTrendlineFormat#line:member': +Excel.ChartTrendlineFormat#line:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-trendlines.yaml @@ -1989,7 +1989,7 @@ console.log("The trendline color has been set to:" + line.color); }); -'Excel.ChartType:enum': +Excel.ChartType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-create-several-charts.yaml @@ -2011,7 +2011,7 @@ await context.sync(); }); -'Excel.CheckboxCellControl:interface': +Excel.CheckboxCellControl:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml @@ -2031,7 +2031,7 @@ }; await context.sync(); }); -'Excel.ClearApplyTo:enum': +Excel.ClearApplyTo:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml @@ -2060,7 +2060,7 @@ await context.sync(); }); -'Excel.CloseBehavior:enum': +Excel.CloseBehavior:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-save-and-close.yaml @@ -2069,7 +2069,7 @@ await Excel.run(async (context) => { context.workbook.close(Excel.CloseBehavior.skipSave); }); -'Excel.ColorScaleConditionalFormat#criteria:member': +Excel.ColorScaleConditionalFormat#criteria:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2089,7 +2089,7 @@ await context.sync(); }); -'Excel.Comment#content:member': +Excel.Comment#content:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-basics.yaml @@ -2101,7 +2101,7 @@ comment.content = "PLEASE add headers here."; await context.sync(); }); -'Excel.Comment#delete:member(1)': +Excel.Comment#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-basics.yaml @@ -2111,7 +2111,7 @@ context.workbook.comments.getItemByCell("Comments!A2").delete(); await context.sync(); }); -'Excel.Comment#load:member(2)': +Excel.Comment#load:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-basics.yaml @@ -2125,7 +2125,7 @@ console.log(`${comment.creationDate.toDateString()}: ${comment.authorName} (${comment.authorEmail})`); await context.sync(); }); -'Excel.Comment#resolved:member': +Excel.Comment#resolved:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-resolution.yaml @@ -2136,7 +2136,7 @@ sheet.comments.getItemAt(0).resolved = true; await context.sync(); }); -'Excel.CommentCollection#add:member(1)': +Excel.CommentCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-basics.yaml @@ -2149,7 +2149,7 @@ sheet.comments.add("A2", "TODO: add data."); await context.sync(); }); -'Excel.CommentCollection#onAdded:member': +Excel.CommentCollection#onAdded:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-comment-event-handler.yaml @@ -2191,7 +2191,7 @@ console.log(` Creation date:${addedComment.creationDate}`); }); } -'Excel.CommentCollection#onChanged:member': +Excel.CommentCollection#onChanged:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-comment-event-handler.yaml @@ -2233,7 +2233,7 @@ console.log(` Creation date: ${changedComment.creationDate}`); }); } -'Excel.CommentCollection#onDeleted:member': +Excel.CommentCollection#onDeleted:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-comment-event-handler.yaml @@ -2264,7 +2264,7 @@ console.log(` ID: ${event.commentDetails[0].commentId}`); }); } -'Excel.CommentReply#content:member': +Excel.CommentReply#content:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-replies.yaml @@ -2282,7 +2282,7 @@ reply.content += " Please!"; await context.sync(); }); -'Excel.CommentReply#delete:member(1)': +Excel.CommentReply#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-replies.yaml @@ -2295,7 +2295,7 @@ comment.replies.getItemAt(0).delete(); await context.sync(); }); -'Excel.CommentReplyCollection#add:member(1)': +Excel.CommentReplyCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-replies.yaml @@ -2308,7 +2308,7 @@ comment.replies.add("Add content to this worksheet."); await context.sync(); }); -'Excel.CommentRichContent#mentions:member': +Excel.CommentRichContent#mentions:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-mentions.yaml @@ -2333,7 +2333,7 @@ sheet.comments.add("A1", commentBody, Excel.ContentType.mention); await context.sync(); }); -'Excel.ConditionalCellValueRule#formula1:member': +Excel.ConditionalCellValueRule#formula1:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2349,7 +2349,7 @@ await context.sync(); }); -'Excel.ConditionalCellValueRule#operator:member': +Excel.ConditionalCellValueRule#operator:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2365,7 +2365,7 @@ await context.sync(); }); -'Excel.ConditionalDataBarDirection:enum': +Excel.ConditionalDataBarDirection:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2380,7 +2380,7 @@ await context.sync(); }); -'Excel.ConditionalFormat#cellValue:member': +Excel.ConditionalFormat#cellValue:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2396,7 +2396,7 @@ await context.sync(); }); -'Excel.ConditionalFormat#colorScale:member': +Excel.ConditionalFormat#colorScale:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2416,7 +2416,7 @@ await context.sync(); }); -'Excel.ConditionalFormat#custom:member': +Excel.ConditionalFormat#custom:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2431,7 +2431,7 @@ await context.sync(); }); -'Excel.ConditionalFormat#dataBar:member': +Excel.ConditionalFormat#dataBar:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2446,7 +2446,7 @@ await context.sync(); }); -'Excel.ConditionalFormat#getRange:member(1)': +Excel.ConditionalFormat#getRange:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2477,7 +2477,7 @@ console.log("No conditional formats applied."); } }); -'Excel.ConditionalFormat#iconSet:member': +Excel.ConditionalFormat#iconSet:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2521,7 +2521,7 @@ await context.sync(); }); -'Excel.ConditionalFormat#preset:member': +Excel.ConditionalFormat#preset:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2537,7 +2537,7 @@ await context.sync(); }); -'Excel.ConditionalFormat#textComparison:member': +Excel.ConditionalFormat#textComparison:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2553,7 +2553,7 @@ await context.sync(); }); -'Excel.ConditionalFormat#type:member': +Excel.ConditionalFormat#type:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2584,7 +2584,7 @@ console.log("No conditional formats applied."); } }); -'Excel.ConditionalFormatCollection#add:member(1)': +Excel.ConditionalFormatCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2604,7 +2604,7 @@ await context.sync(); }); -'Excel.ConditionalFormatCollection#clearAll:member(1)': +Excel.ConditionalFormatCollection#clearAll:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2621,7 +2621,7 @@ element.style.display = "none"; }); }); -'Excel.ConditionalFormatCollection#getItemAt:member(1)': +Excel.ConditionalFormatCollection#getItemAt:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2652,7 +2652,7 @@ console.log("No conditional formats applied."); } }); -'Excel.ConditionalFormatColorCriterionType:enum': +Excel.ConditionalFormatColorCriterionType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2672,7 +2672,7 @@ await context.sync(); }); -'Excel.ConditionalFormatIconRuleType:enum': +Excel.ConditionalFormatIconRuleType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2716,7 +2716,7 @@ await context.sync(); }); -'Excel.ConditionalFormatPresetCriterion:enum': +Excel.ConditionalFormatPresetCriterion:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml @@ -2755,7 +2755,7 @@ await context.sync(); }); -'Excel.ConditionalFormatRule#formula:member': +Excel.ConditionalFormatRule#formula:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2770,7 +2770,7 @@ await context.sync(); }); -'Excel.ConditionalFormatType:enum': +Excel.ConditionalFormatType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml @@ -2809,7 +2809,7 @@ await context.sync(); }); -'Excel.ConditionalIconCriterion#formula:member': +Excel.ConditionalIconCriterion#formula:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2853,7 +2853,7 @@ await context.sync(); }); -'Excel.ConditionalIconCriterion#operator:member': +Excel.ConditionalIconCriterion#operator:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2897,7 +2897,7 @@ await context.sync(); }); -'Excel.ConditionalIconCriterion#type:member': +Excel.ConditionalIconCriterion#type:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2941,7 +2941,7 @@ await context.sync(); }); -'Excel.ConditionalIconCriterionOperator:enum': +Excel.ConditionalIconCriterionOperator:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2985,7 +2985,7 @@ await context.sync(); }); -'Excel.ConditionalPresetCriteriaRule#criterion:member': +Excel.ConditionalPresetCriteriaRule#criterion:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -3001,7 +3001,7 @@ await context.sync(); }); -'Excel.ConditionalTextComparisonRule#text:member': +Excel.ConditionalTextComparisonRule#text:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -3017,7 +3017,7 @@ await context.sync(); }); -'Excel.ConditionalTextOperator:enum': +Excel.ConditionalTextOperator:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -3033,7 +3033,7 @@ await context.sync(); }); -'Excel.ConnectorType:enum': +Excel.ConnectorType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml @@ -3045,7 +3045,7 @@ line.name = "StraightLine"; await context.sync(); }); -'Excel.ContentType:enum': +Excel.ContentType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-mentions.yaml @@ -3070,7 +3070,7 @@ sheet.comments.add("A1", commentBody, Excel.ContentType.mention); await context.sync(); }); -'Excel.CultureInfo#datetimeFormat:member': +Excel.CultureInfo#datetimeFormat:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/culture-info-date-time.yaml @@ -3111,7 +3111,7 @@ await context.sync(); }); -'Excel.CustomConditionalFormat#format:member': +Excel.CustomConditionalFormat#format:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -3126,7 +3126,7 @@ await context.sync(); }); -'Excel.CustomPropertyCollection#add:member(1)': +Excel.CustomPropertyCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/26-document/custom-properties.yaml @@ -3145,7 +3145,7 @@ console.log(`Successfully set custom document property ${userKey}:${userValue}.`); }); -'Excel.CustomXmlPart#delete:member(1)': +Excel.CustomXmlPart#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml @@ -3178,7 +3178,7 @@ await context.sync(); } }); -'Excel.CustomXmlPart#getXml:member(1)': +Excel.CustomXmlPart#getXml:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml @@ -3203,7 +3203,7 @@ await context.sync(); }); -'Excel.CustomXmlPart#id:member': +Excel.CustomXmlPart#id:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml @@ -3228,7 +3228,7 @@ await context.sync(); }); -'Excel.CustomXmlPart#setXml:member(1)': +Excel.CustomXmlPart#setXml:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml @@ -3253,7 +3253,7 @@ await context.sync(); } }); -'Excel.CustomXmlPartCollection#add:member(1)': +Excel.CustomXmlPartCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml @@ -3278,7 +3278,7 @@ await context.sync(); }); -'Excel.CustomXmlPartCollection#getItem:member(1)': +Excel.CustomXmlPartCollection#getItem:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml @@ -3303,7 +3303,7 @@ await context.sync(); } }); -'Excel.CustomXmlPartCollection#getByNamespace:member(1)': +Excel.CustomXmlPartCollection#getByNamespace:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml @@ -3336,7 +3336,7 @@ await context.sync(); }); -'Excel.CustomXmlPartScopedCollection#getItemOrNullObject:member(1)': +Excel.CustomXmlPartScopedCollection#getItemOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml @@ -3369,7 +3369,7 @@ await context.sync(); } }); -'Excel.CustomXmlPartScopedCollection#getCount:member(1)': +Excel.CustomXmlPartScopedCollection#getCount:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml @@ -3402,7 +3402,7 @@ await context.sync(); }); -'Excel.CustomXmlPartScopedCollection#getOnlyItem:member(1)': +Excel.CustomXmlPartScopedCollection#getOnlyItem:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml @@ -3435,7 +3435,7 @@ await context.sync(); }); -'Excel.DataBarConditionalFormat#barDirection:member': +Excel.DataBarConditionalFormat#barDirection:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -3450,7 +3450,7 @@ await context.sync(); }); -'Excel.DataPivotHierarchy#showAs:member': +Excel.DataPivotHierarchy#showAs:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-calculations.yaml @@ -3477,7 +3477,7 @@ wholesaleDataHierarchy.showAs = wholesaleShowAs; await context.sync(); }); -'Excel.DataPivotHierarchy#name:member': +Excel.DataPivotHierarchy#name:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml @@ -3492,7 +3492,7 @@ dataHierarchies.items[1].name = "Wholesale"; await context.sync(); }); -'Excel.DataValidation#errorAlert:member': +Excel.DataValidation#errorAlert:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/22-data-validation/data-validation.yaml @@ -3525,7 +3525,7 @@ await context.sync(); }); -'Excel.DataValidation#prompt:member': +Excel.DataValidation#prompt:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/22-data-validation/data-validation.yaml @@ -3562,7 +3562,7 @@ await context.sync(); }); -'Excel.DataValidation#rule:member': +Excel.DataValidation#rule:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/22-data-validation/data-validation.yaml @@ -3589,7 +3589,7 @@ await context.sync(); }); -'Excel.DataValidationOperator:enum': +Excel.DataValidationOperator:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/22-data-validation/data-validation.yaml @@ -3626,7 +3626,7 @@ await context.sync(); }); -'Excel.DataValidationRule#list:member': +Excel.DataValidationRule#list:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/22-data-validation/data-validation.yaml @@ -3653,7 +3653,7 @@ await context.sync(); }); -'Excel.DataValidationRule#wholeNumber:member': +Excel.DataValidationRule#wholeNumber:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/22-data-validation/data-validation.yaml @@ -3690,7 +3690,7 @@ await context.sync(); }); -'Excel.DateFilterCondition:enum': +Excel.DateFilterCondition:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -3723,7 +3723,7 @@ await context.sync(); }); -'Excel.DeleteShiftDirection:enum': +Excel.DeleteShiftDirection:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet.yaml @@ -3737,7 +3737,7 @@ const range = sheet.getRange("A5:F5"); range.delete(Excel.DeleteShiftDirection.up); }); -'Excel.DocumentProperties#custom:member': +Excel.DocumentProperties#custom:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/26-document/custom-properties.yaml @@ -3755,7 +3755,7 @@ console.log(`${property.key}:${property.value}`); }); }); -'Excel.DoubleCellValue#numberFormat:member': +Excel.DoubleCellValue#numberFormat:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-formatted-number.yaml @@ -3783,7 +3783,7 @@ await context.sync(); }); -'Excel.DoubleCellValue#type:member': +Excel.DoubleCellValue#type:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-formatted-number.yaml @@ -3810,7 +3810,7 @@ ]; await context.sync(); }); -'Excel.DynamicFilterCriteria:enum': +Excel.DynamicFilterCriteria:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/filter-data.yaml @@ -3835,7 +3835,7 @@ await context.sync(); }); -'Excel.EntityCompactLayoutIcons:enum': +Excel.EntityCompactLayoutIcons:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-entity-icons.yaml @@ -3864,7 +3864,7 @@ }); return entities; } -'Excel.ErrorCellValue:type': +Excel.ErrorCellValue:type: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-error-values.yaml @@ -3888,7 +3888,7 @@ range.valuesAsJson = [[error]]; await context.sync(); }); -'Excel.ErrorCellValueType:enum': +Excel.ErrorCellValueType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-error-values.yaml @@ -3912,7 +3912,7 @@ range.valuesAsJson = [[error]]; await context.sync(); }); -'Excel.FillPattern:enum': +Excel.FillPattern:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml @@ -3989,7 +3989,7 @@ sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); -'Excel.FilterCriteria#filterOn:member': +Excel.FilterCriteria#filterOn:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml @@ -4012,7 +4012,7 @@ await context.sync(); }); -'Excel.FilterDatetimeSpecificity:enum': +Excel.FilterDatetimeSpecificity:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -4045,7 +4045,7 @@ await context.sync(); }); -'Excel.Functions:class': +Excel.Functions:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-built-in-functions.yaml @@ -4062,7 +4062,7 @@ await context.sync(); console.log(" Number of wrenches sold in November = " + unitSoldInNov.value); }); -'Excel.Functions#vlookup:member(1)': +Excel.Functions#vlookup:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-built-in-functions.yaml @@ -4079,7 +4079,7 @@ await context.sync(); console.log(" Number of wrenches sold in November = " + unitSoldInNov.value); }); -'Excel.Functions#sum:member(1)': +Excel.Functions#sum:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-built-in-functions.yaml @@ -4102,7 +4102,7 @@ await context.sync(); console.log(" Number of wrenches sold in November, December, and January = " + sumOfTwoLookups.value); }); -'Excel.GeometricShapeType:enum': +Excel.GeometricShapeType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-create-and-delete.yaml @@ -4117,7 +4117,7 @@ shape.width = 200; await context.sync(); }); -'Excel.GroupOption:enum': +Excel.GroupOption:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml @@ -4136,7 +4136,7 @@ sheet.getRange("7:8").group(Excel.GroupOption.byRows); await context.sync(); }); -'Excel.HorizontalAlignment:enum': +Excel.HorizontalAlignment:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-merged-ranges.yaml @@ -4156,7 +4156,7 @@ await context.sync(); }); -'Excel.IconSet:enum': +Excel.IconSet:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -4200,7 +4200,7 @@ await context.sync(); }); -'Excel.IconSetConditionalFormat#criteria:member': +Excel.IconSetConditionalFormat#criteria:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -4244,7 +4244,7 @@ await context.sync(); }); -'Excel.IconSetConditionalFormat#style:member': +Excel.IconSetConditionalFormat#style:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -4288,7 +4288,7 @@ await context.sync(); }); -'Excel.Image#format:member': +Excel.Image#format:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-images.yaml @@ -4303,7 +4303,7 @@ console.log("The image's format is: " + image.format); await context.sync(); }); -'Excel.InsertShiftDirection:enum': +Excel.InsertShiftDirection:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/insert-delete-clear-range.yaml @@ -4317,7 +4317,7 @@ await context.sync(); }); -'Excel.KeyboardDirection:enum': +Excel.KeyboardDirection:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-get-range-edge.yaml @@ -4343,7 +4343,7 @@ await context.sync(); }); -'Excel.LabelFilterCondition:enum': +Excel.LabelFilterCondition:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -4370,7 +4370,7 @@ await context.sync(); }); -'Excel.Line#connectBeginShape:member(1)': +Excel.Line#connectBeginShape:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml @@ -4383,7 +4383,7 @@ line.connectEndShape(shapes.getItem("Right"), 0); await context.sync(); }); -'Excel.Line#connectEndShape:member(1)': +Excel.Line#connectEndShape:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml @@ -4396,7 +4396,7 @@ line.connectEndShape(shapes.getItem("Right"), 0); await context.sync(); }); -'Excel.Line#disconnectBeginShape:member(1)': +Excel.Line#disconnectBeginShape:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml @@ -4409,7 +4409,7 @@ line.disconnectEndShape(); await context.sync(); }); -'Excel.Line#disconnectEndShape:member(1)': +Excel.Line#disconnectEndShape:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml @@ -4422,7 +4422,7 @@ line.disconnectEndShape(); await context.sync(); }); -'Excel.NamedItem:class': +Excel.NamedItem:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/34-named-item/create-and-remove-named-item.yaml @@ -4442,7 +4442,7 @@ await context.sync(); }); -'Excel.NamedItem#delete:member(1)': +Excel.NamedItem#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/34-named-item/create-and-remove-named-item.yaml @@ -4465,7 +4465,7 @@ await context.sync(); }); -'Excel.NamedItem#formula:member': +Excel.NamedItem#formula:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/34-named-item/update-named-item.yaml @@ -4490,7 +4490,7 @@ console.log(`Just updated the named item "${myNamedItem.name}" -- it's now located here: ${myNamedItem.formula}`); } }); -'Excel.NamedItemCollection#add:member(1)': +Excel.NamedItemCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/34-named-item/create-and-remove-named-item.yaml @@ -4505,7 +4505,7 @@ await context.sync(); }); -'Excel.Note:class': +Excel.Note:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml @@ -4520,7 +4520,7 @@ note.width = 400; await context.sync(); }); -'Excel.Note#content:member': +Excel.Note#content:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml @@ -4534,7 +4534,7 @@ note.content = "Changing the content of the first note."; await context.sync(); }); -'Excel.Note#height:member': +Excel.Note#height:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml @@ -4549,7 +4549,7 @@ note.width = 400; await context.sync(); }); -'Excel.Note#visible:member': +Excel.Note#visible:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml @@ -4566,7 +4566,7 @@ firstNote.visible = true; }); -'Excel.Note#width:member': +Excel.Note#width:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml @@ -4581,7 +4581,7 @@ note.width = 400; await context.sync(); }); -'Excel.Note#delete:member(1)': +Excel.Note#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml @@ -4596,7 +4596,7 @@ await context.sync(); }); -'Excel.NoteCollection:class': +Excel.NoteCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml @@ -4611,7 +4611,7 @@ context.workbook.notes.add(selectedRange, "The first note."); await context.sync(); }); -'Excel.NoteCollection#add:member(1)': +Excel.NoteCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml @@ -4626,7 +4626,7 @@ context.workbook.notes.add(selectedRange, "The first note."); await context.sync(); }); -'Excel.NoteCollection#getItem:member(1)': +Excel.NoteCollection#getItem:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml @@ -4643,7 +4643,7 @@ firstNote.visible = true; }); -'Excel.NoteCollection#getItemAt:member(1)': +Excel.NoteCollection#getItemAt:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml @@ -4657,7 +4657,7 @@ note.content = "Changing the content of the first note."; await context.sync(); }); -'Excel.NumberFormatInfo#numberDecimalSeparator:member': +Excel.NumberFormatInfo#numberDecimalSeparator:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/culture-info.yaml @@ -4699,7 +4699,7 @@ await context.sync(); }); -'Excel.NumberFormatInfo#numberGroupSeparator:member': +Excel.NumberFormatInfo#numberGroupSeparator:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/culture-info.yaml @@ -4725,7 +4725,7 @@ resultRange.format.autofitColumns(); await context.sync(); }); -'Excel.PageBreakCollection#add:member(1)': +Excel.PageBreakCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-page-layout.yaml @@ -4736,7 +4736,7 @@ farmSheet.horizontalPageBreaks.add("A21:E21"); await context.sync(); }); -'Excel.PageLayout#centerHorizontally:member': +Excel.PageLayout#centerHorizontally:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-page-layout.yaml @@ -4748,7 +4748,7 @@ farmSheet.pageLayout.centerVertically = true; await context.sync(); }); -'Excel.PageLayout#centerVertically:member': +Excel.PageLayout#centerVertically:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-page-layout.yaml @@ -4760,7 +4760,7 @@ farmSheet.pageLayout.centerVertically = true; await context.sync(); }); -'Excel.PageLayout#orientation:member': +Excel.PageLayout#orientation:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-page-layout.yaml @@ -4771,7 +4771,7 @@ farmSheet.pageLayout.orientation = Excel.PageOrientation.landscape; await context.sync(); }); -'Excel.PageLayout#setPrintArea:member(1)': +Excel.PageLayout#setPrintArea:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-page-layout.yaml @@ -4782,7 +4782,7 @@ farmSheet.pageLayout.setPrintArea("A1:D41"); await context.sync(); }); -'Excel.PageLayout#setPrintTitleRows:member(1)': +Excel.PageLayout#setPrintTitleRows:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-page-layout.yaml @@ -4793,7 +4793,7 @@ farmSheet.pageLayout.setPrintTitleRows("$1:$1"); await context.sync(); }); -'Excel.PageLayout#zoom:member': +Excel.PageLayout#zoom:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-page-layout.yaml @@ -4804,7 +4804,7 @@ farmSheet.pageLayout.zoom = { scale: 200 }; await context.sync(); }); -'Excel.PageOrientation:enum': +Excel.PageOrientation:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-page-layout.yaml @@ -4815,7 +4815,7 @@ farmSheet.pageLayout.orientation = Excel.PageOrientation.landscape; await context.sync(); }); -'Excel.PictureFormat:enum': +Excel.PictureFormat:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-images.yaml @@ -4831,7 +4831,7 @@ // Your add-in would save this string as a .png file. console.log("The image's Base64-encoded string: " + imageString); }); -'Excel.PivotField#clearAllFilters:member(1)': +Excel.PivotField#clearAllFilters:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -4851,7 +4851,7 @@ }); await context.sync(); }); -'Excel.PivotFilters#dateFilter:member': +Excel.PivotFilters#dateFilter:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -4884,7 +4884,7 @@ await context.sync(); }); -'Excel.PivotFilters#labelFilter:member': +Excel.PivotFilters#labelFilter:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -4911,7 +4911,7 @@ await context.sync(); }); -'Excel.PivotFilters#manualFilter:member': +Excel.PivotFilters#manualFilter:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -4938,7 +4938,7 @@ await context.sync(); }); -'Excel.PivotFilters#valueFilter:member': +Excel.PivotFilters#valueFilter:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -4965,7 +4965,7 @@ await context.sync(); }); -'Excel.PivotHierarchy#fields:member': +Excel.PivotHierarchy#fields:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -4992,7 +4992,7 @@ await context.sync(); }); -'Excel.PivotLayout#getDataBodyRange:member(1)': +Excel.PivotLayout#getDataBodyRange:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml @@ -5014,7 +5014,7 @@ masterTotalRange.formulas = [["All Crates", "=SUM(" + grandTotalRange.address + ")"]]; await context.sync(); }); -'Excel.PivotLayout#altTextDescription:member': +Excel.PivotLayout#altTextDescription:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml @@ -5031,7 +5031,7 @@ await context.sync(); }); -'Excel.PivotLayout#displayBlankLineAfterEachItem:member(1)': +Excel.PivotLayout#displayBlankLineAfterEachItem:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml @@ -5047,7 +5047,7 @@ await context.sync(); }); -'Excel.PivotLayout#emptyCellText:member': +Excel.PivotLayout#emptyCellText:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml @@ -5064,7 +5064,7 @@ pivotLayout.getDataBodyRange().format.horizontalAlignment = Excel.HorizontalAlignment.right; await context.sync(); }); -'Excel.PivotLayout#fillEmptyCells:member': +Excel.PivotLayout#fillEmptyCells:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml @@ -5084,7 +5084,7 @@ pivotLayout.fillEmptyCells = fillToSet; await context.sync(); }); -'Excel.PivotLayout#layoutType:member': +Excel.PivotLayout#layoutType:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml @@ -5108,7 +5108,7 @@ await context.sync(); console.log("Pivot layout is now " + pivotTable.layout.layoutType); }); -'Excel.PivotLayout#preserveFormatting:member': +Excel.PivotLayout#preserveFormatting:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml @@ -5128,7 +5128,7 @@ pivotLayout.preserveFormatting = preserveFormattingToSet; await context.sync(); }); -'Excel.PivotLayout#repeatAllItemLabels:member(1)': +Excel.PivotLayout#repeatAllItemLabels:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml @@ -5144,7 +5144,7 @@ await context.sync(); }); -'Excel.PivotLayout#showColumnGrandTotals:member': +Excel.PivotLayout#showColumnGrandTotals:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml @@ -5168,7 +5168,7 @@ await context.sync(); }); -'Excel.PivotLayout#showFieldHeaders:member': +Excel.PivotLayout#showFieldHeaders:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml @@ -5186,7 +5186,7 @@ pivotLayout.showFieldHeaders = showHeaders; await context.sync(); }); -'Excel.PivotLayout#showRowGrandTotals:member': +Excel.PivotLayout#showRowGrandTotals:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml @@ -5210,7 +5210,7 @@ await context.sync(); }); -'Excel.PivotTable#columnHierarchies:member': +Excel.PivotTable#columnHierarchies:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml @@ -5233,7 +5233,7 @@ await context.sync(); }); -'Excel.PivotTable#dataHierarchies:member': +Excel.PivotTable#dataHierarchies:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml @@ -5246,7 +5246,7 @@ await context.sync(); }); -'Excel.PivotTable#delete:member(1)': +Excel.PivotTable#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml @@ -5257,7 +5257,7 @@ await context.sync(); }); -'Excel.PivotTable#layout:member': +Excel.PivotTable#layout:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml @@ -5279,7 +5279,7 @@ await context.sync(); console.log("Pivot layout is now " + pivotTable.layout.layoutType); }); -'Excel.PivotTable#getDataSourceString:member(1)': +Excel.PivotTable#getDataSourceString:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-source-data.yaml @@ -5300,7 +5300,7 @@ console.log("Data source: " + pivotTableDataSourceString.value); console.log("Source type: " + pivotTableDataSourceType.value); }); -'Excel.PivotTable#getDataSourceType:member(1)': +Excel.PivotTable#getDataSourceType:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-source-data.yaml @@ -5321,7 +5321,7 @@ console.log("Data source: " + pivotTableDataSourceString.value); console.log("Source type: " + pivotTableDataSourceType.value); }); -'Excel.PivotTable#filterHierarchies:member': +Excel.PivotTable#filterHierarchies:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml @@ -5342,7 +5342,7 @@ } }); } -'Excel.PivotTable#refresh:member(1)': +Excel.PivotTable#refresh:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-refresh.yaml @@ -5357,7 +5357,7 @@ pivotTable.refresh(); await context.sync(); }); -'Excel.PivotTableCollection#add:member(1)': +Excel.PivotTableCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml @@ -5370,7 +5370,7 @@ await context.sync(); }); -'Excel.PivotTableCollection#getItem:member(1)': +Excel.PivotTableCollection#getItem:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-refresh.yaml @@ -5385,7 +5385,7 @@ pivotTable.refresh(); await context.sync(); }); -'Excel.PresetCriteriaConditionalFormat#rule:member': +Excel.PresetCriteriaConditionalFormat#rule:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -5401,7 +5401,7 @@ await context.sync(); }); -'Excel.Range#clearOrResetContents:member(1)': +Excel.Range#clearOrResetContents:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml @@ -5419,7 +5419,7 @@ range.clearOrResetContents(); await context.sync(); }); -'Excel.Range#control:member': +Excel.Range#control:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml @@ -5439,7 +5439,7 @@ }; await context.sync(); }); -'Excel.Range#values:member': +Excel.Range#values:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml @@ -5454,7 +5454,7 @@ range.values = [["TRUE"]]; await context.sync(); }); -'Excel.Range#valuesAsJson:member': +Excel.Range#valuesAsJson:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-formatted-number.yaml @@ -5481,7 +5481,7 @@ ]; await context.sync(); }); -'Excel.Range#getDirectDependents:member(1)': +Excel.Range#getDirectDependents:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-direct-dependents.yaml @@ -5505,7 +5505,7 @@ } await context.sync(); }); -'Excel.Range#sort:member': +Excel.Range#sort:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml @@ -5535,7 +5535,7 @@ await context.sync(); }); } -'Excel.Range#getMergedAreasOrNullObject:member(1)': +Excel.Range#getMergedAreasOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-merged-ranges.yaml @@ -5562,7 +5562,7 @@ await context.sync(); }); -'Excel.Range#merge:member(1)': +Excel.Range#merge:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-merged-ranges.yaml @@ -5582,7 +5582,7 @@ await context.sync(); }); -'Excel.Range#group:member(1)': +Excel.Range#group:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml @@ -5601,7 +5601,7 @@ sheet.getRange("7:8").group(Excel.GroupOption.byRows); await context.sync(); }); -'Excel.Range#ungroup:member(1)': +Excel.Range#ungroup:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml @@ -5618,7 +5618,7 @@ sheet.getRange("A1:R10").ungroup(Excel.GroupOption.byColumns); await context.sync(); }); -'Excel.Range#getPivotTables:member(1)': +Excel.Range#getPivotTables:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-get-pivottables.yaml @@ -5646,7 +5646,7 @@ console.log(`\t${pivotTable.name}`); }); }); -'Excel.Range#getDirectPrecedents:member(1)': +Excel.Range#getDirectPrecedents:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/precedents.yaml @@ -5671,7 +5671,7 @@ } await context.sync(); }); -'Excel.Range#getPrecedents:member(1)': +Excel.Range#getPrecedents:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/precedents.yaml @@ -5695,7 +5695,7 @@ } await context.sync(); }); -'Excel.Range#getSpecialCells:member(1)': +Excel.Range#getSpecialCells:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml @@ -5712,7 +5712,7 @@ return context.sync(); }); -'Excel.Range#autoFill:member(1)': +Excel.Range#autoFill:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-auto-fill.yaml @@ -5727,7 +5727,7 @@ sumCell.format.autofitColumns(); await context.sync(); }); -'Excel.Range#getCellProperties:member(1)': +Excel.Range#getCellProperties:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml @@ -5756,7 +5756,7 @@ console.log( `Address: ${cellProperties.address}\nStyle: ${cellProperties.style}\nFill Color: ${cellProperties.format.fill.color}\nFont Color: ${cellProperties.format.font.color}`); }); -'Excel.Range#setCellProperties:member(1)': +Excel.Range#setCellProperties:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml @@ -5833,7 +5833,7 @@ sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); -'Excel.Range#copyFrom:member(1)': +Excel.Range#copyFrom:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-copyfrom.yaml @@ -5849,7 +5849,7 @@ sheet.getRange("G2").copyFrom("A1:E1", Excel.RangeCopyType.formulas); await context.sync(); }); -'Excel.Range#moveTo:member(1)': +Excel.Range#moveTo:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-copyfrom.yaml @@ -5864,7 +5864,7 @@ sheet.getRange("A1:E1").moveTo("G12"); await context.sync(); }); -'Excel.Range#getDependents:member(1)': +Excel.Range#getDependents:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-dependents.yaml @@ -5892,7 +5892,7 @@ } await context.sync(); }); -'Excel.Range#getSpillingToRange:member(1)': +Excel.Range#getSpillingToRange:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/dynamic-arrays.yaml @@ -5915,7 +5915,7 @@ console.log(`Copying the table headers spilled into ${spillRange.address}.`); }); -'Excel.Range#find:member(1)': +Excel.Range#find:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-find.yaml @@ -5941,7 +5941,7 @@ console.log(foundRange.address); }); -'Excel.Range#findOrNullObject:member(1)': +Excel.Range#findOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-find.yaml @@ -5967,7 +5967,7 @@ console.log(foundRange.address); } }); -'Excel.Range#getExtendedRange:member(1)': +Excel.Range#getExtendedRange:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-get-range-edge.yaml @@ -5993,7 +5993,7 @@ await context.sync(); }); -'Excel.Range#getRangeEdge:member(1)': +Excel.Range#getRangeEdge:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-get-range-edge.yaml @@ -6019,7 +6019,7 @@ await context.sync(); }); -'Excel.Range#hyperlink:member': +Excel.Range#hyperlink:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml @@ -6049,7 +6049,7 @@ await context.sync(); }); -'Excel.Range#getIntersectionOrNullObject:member(1)': +Excel.Range#getIntersectionOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-relationships.yaml @@ -6109,7 +6109,7 @@ await context.sync(); }); -'Excel.Range#getUsedRange:member(1)': +Excel.Range#getUsedRange:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-relationships.yaml @@ -6169,7 +6169,7 @@ await context.sync(); }); -'Excel.Range#removeDuplicates:member(1)': +Excel.Range#removeDuplicates:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-remove-duplicates.yaml @@ -6186,7 +6186,7 @@ console.log(deleteResult.removed + " entries with duplicate names removed."); console.log(deleteResult.uniqueRemaining + " entries with unique names remain in the range."); }); -'Excel.Range#style:member': +Excel.Range#style:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml @@ -6203,7 +6203,7 @@ await context.sync(); }); -'Excel.Range#getUsedRangeOrNullObject:member(1)': +Excel.Range#getUsedRangeOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/used-range.yaml @@ -6241,7 +6241,7 @@ await context.sync(); }); -'Excel.Range#set:member(2)': +Excel.Range#set:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/multiple-property-set.yaml @@ -6261,7 +6261,7 @@ targetRange.format.autofitColumns(); await context.sync(); }); -'Excel.RangeAreas#format:member': +Excel.RangeAreas#format:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml @@ -6278,7 +6278,7 @@ await context.sync(); }); -'Excel.RangeCopyType:enum': +Excel.RangeCopyType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-copyfrom.yaml @@ -6294,7 +6294,7 @@ sheet.getRange("G2").copyFrom("A1:E1", Excel.RangeCopyType.formulas); await context.sync(); }); -'Excel.RangeFormat#textOrientation:member': +Excel.RangeFormat#textOrientation:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-text-orientation.yaml @@ -6310,7 +6310,7 @@ await context.sync(); }); -'Excel.RangeHyperlink#address:member': +Excel.RangeHyperlink#address:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml @@ -6340,7 +6340,7 @@ await context.sync(); }); -'Excel.RangeHyperlink#documentReference:member': +Excel.RangeHyperlink#documentReference:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml @@ -6370,7 +6370,7 @@ await context.sync(); }); -'Excel.RangeHyperlink#screenTip:member': +Excel.RangeHyperlink#screenTip:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml @@ -6400,7 +6400,7 @@ await context.sync(); }); -'Excel.RangeHyperlink#textToDisplay:member': +Excel.RangeHyperlink#textToDisplay:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml @@ -6430,7 +6430,7 @@ await context.sync(); }); -'Excel.RangeUnderlineStyle:enum': +Excel.RangeUnderlineStyle:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml @@ -6459,7 +6459,7 @@ await context.sync(); }); -'Excel.ReadingOrder:enum': +Excel.ReadingOrder:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml @@ -6480,7 +6480,7 @@ console.log("Shrink to fit: " + style.shrinkToFit); console.log("Style locked: " + style.locked); }); -'Excel.RemoveDuplicatesResult#uniqueRemaining:member': +Excel.RemoveDuplicatesResult#uniqueRemaining:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-remove-duplicates.yaml @@ -6497,7 +6497,7 @@ console.log(deleteResult.removed + " entries with duplicate names removed."); console.log(deleteResult.uniqueRemaining + " entries with unique names remain in the range."); }); -'Excel.Runtime#enableEvents:member': +Excel.Runtime#enableEvents:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-disable-events.yaml @@ -6518,7 +6518,7 @@ await context.sync(); }); -'Excel.SaveBehavior:enum': +Excel.SaveBehavior:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-save-and-close.yaml @@ -6527,7 +6527,7 @@ await Excel.run(async (context) => { context.workbook.save(Excel.SaveBehavior.prompt); }); -'Excel.SearchDirection:enum': +Excel.SearchDirection:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-find.yaml @@ -6538,7 +6538,7 @@ Excel.SearchDirection.forward; console.log("Search direction = " + searchDirectionToggle); -'Excel.SettableCellProperties#style:member': +Excel.SettableCellProperties#style:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml @@ -6615,7 +6615,7 @@ sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); -'Excel.Setting#delete:member(1)': +Excel.Setting#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/create-get-change-delete-settings.yaml @@ -6637,7 +6637,7 @@ await context.sync(); }); -'Excel.SettingCollection#add:member(1)': +Excel.SettingCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml @@ -6650,7 +6650,7 @@ await context.sync(); console.log("Settings changed handler registered."); }); -'Excel.SettingCollection#onSettingsChanged:member': +Excel.SettingCollection#onSettingsChanged:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml @@ -6663,7 +6663,7 @@ await context.sync(); console.log("Settings changed handler registered."); }); -'Excel.SettingCollection#getItemOrNullObject:member(1)': +Excel.SettingCollection#getItemOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/create-get-change-delete-settings.yaml @@ -6685,7 +6685,7 @@ await context.sync(); }); -'Excel.Shape#delete:member(1)': +Excel.Shape#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-create-and-delete.yaml @@ -6704,7 +6704,7 @@ shapes.items.forEach((shape) => shape.delete()); await context.sync(); }); -'Excel.Shape#fill:member': +Excel.Shape#fill:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-create-and-delete.yaml @@ -6720,7 +6720,7 @@ shape.fill.foregroundColor = "yellow" await context.sync(); }); -'Excel.Shape#rotation:member': +Excel.Shape#rotation:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-create-and-delete.yaml @@ -6737,7 +6737,7 @@ shape.fill.clear(); await context.sync(); }); -'Excel.Shape#group:member': +Excel.Shape#group:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-groups.yaml @@ -6752,7 +6752,7 @@ await context.sync(); }); -'Excel.Shape#getAsImage:member(1)': +Excel.Shape#getAsImage:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-images.yaml @@ -6768,7 +6768,7 @@ // Your add-in would save this string as a .png file. console.log("The image's Base64-encoded string: " + imageString); }); -'Excel.Shape#incrementRotation:member(1)': +Excel.Shape#incrementRotation:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-images.yaml @@ -6780,7 +6780,7 @@ shape.incrementRotation(180); await context.sync(); }); -'Excel.Shape#line:member': +Excel.Shape#line:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml @@ -6799,7 +6799,7 @@ await context.sync(); }); -'Excel.Shape#incrementLeft:member(1)': +Excel.Shape#incrementLeft:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml @@ -6811,7 +6811,7 @@ shape.incrementLeft(-25); await context.sync(); }); -'Excel.Shape#incrementTop:member(1)': +Excel.Shape#incrementTop:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml @@ -6823,7 +6823,7 @@ shape.incrementTop(25); await context.sync(); }); -'Excel.Shape#lockAspectRatio:member': +Excel.Shape#lockAspectRatio:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml @@ -6836,7 +6836,7 @@ shape.scaleHeight(1.25, Excel.ShapeScaleType.currentSize); await context.sync(); }); -'Excel.Shape#scaleHeight:member(1)': +Excel.Shape#scaleHeight:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml @@ -6849,7 +6849,7 @@ shape.scaleHeight(1.25, Excel.ShapeScaleType.currentSize); await context.sync(); }); -'Excel.Shape#setZOrder:member(1)': +Excel.Shape#setZOrder:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml @@ -6861,7 +6861,7 @@ shape.setZOrder(Excel.ShapeZOrder.sendBackward); await context.sync(); }); -'Excel.ShapeAutoSize:enum': +Excel.ShapeAutoSize:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-textboxes.yaml @@ -6873,7 +6873,7 @@ textbox.textFrame.autoSizeSetting = Excel.ShapeAutoSize.autoSizeShapeToFitText; await context.sync(); }); -'Excel.ShapeCollection#addGeometricShape:member(1)': +Excel.ShapeCollection#addGeometricShape:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-create-and-delete.yaml @@ -6888,7 +6888,7 @@ shape.width = 200; await context.sync(); }); -'Excel.ShapeCollection#addGroup:member(1)': +Excel.ShapeCollection#addGroup:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-groups.yaml @@ -6906,7 +6906,7 @@ await context.sync(); }); -'Excel.ShapeCollection#addImage:member(1)': +Excel.ShapeCollection#addImage:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-images.yaml @@ -6932,7 +6932,7 @@ // Read in the image file as a data URL. reader.readAsDataURL(myFile.files[0]); -'Excel.ShapeCollection#addLine:member(1)': +Excel.ShapeCollection#addLine:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml @@ -6944,7 +6944,7 @@ line.name = "StraightLine"; await context.sync(); }); -'Excel.ShapeCollection#addTextBox:member(1)': +Excel.ShapeCollection#addTextBox:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-textboxes.yaml @@ -6960,7 +6960,7 @@ textbox.name = "Textbox"; await context.sync(); }); -'Excel.ShapeGroup#ungroup:member(1)': +Excel.ShapeGroup#ungroup:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-groups.yaml @@ -6975,7 +6975,7 @@ await context.sync(); }); -'Excel.ShapeScaleType:enum': +Excel.ShapeScaleType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml @@ -6988,7 +6988,7 @@ shape.scaleHeight(1.25, Excel.ShapeScaleType.currentSize); await context.sync(); }); -'Excel.ShapeTextHorizontalAlignment:enum': +Excel.ShapeTextHorizontalAlignment:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-textboxes.yaml @@ -7000,7 +7000,7 @@ textbox.textFrame.horizontalAlignment = Excel.ShapeTextHorizontalAlignment.center; await context.sync(); }); -'Excel.ShapeZOrder:enum': +Excel.ShapeZOrder:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml @@ -7012,7 +7012,7 @@ shape.setZOrder(Excel.ShapeZOrder.sendBackward); await context.sync(); }); -'Excel.SheetVisibility:enum': +Excel.SheetVisibility:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-visibility.yaml @@ -7033,7 +7033,7 @@ console.log("Cannot hide the only visible worksheet"); } }); -'Excel.ShowAsCalculation:enum': +Excel.ShowAsCalculation:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-calculations.yaml @@ -7060,7 +7060,7 @@ wholesaleDataHierarchy.showAs = wholesaleShowAs; await context.sync(); }); -'Excel.ShowAsRule#baseItem:member': +Excel.ShowAsRule#baseItem:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-calculations.yaml @@ -7090,7 +7090,7 @@ wholesaleDataHierarchy.showAs = wholesaleShowAs; await context.sync(); }); -'Excel.Slicer#clearFilters:member(1)': +Excel.Slicer#clearFilters:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml @@ -7101,7 +7101,7 @@ slicer.clearFilters(); await context.sync(); }); -'Excel.Slicer#delete:member(1)': +Excel.Slicer#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml @@ -7112,7 +7112,7 @@ sheet.slicers.getItemAt(0).delete(); await context.sync(); }); -'Excel.Slicer#selectItems:member(1)': +Excel.Slicer#selectItems:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml @@ -7123,7 +7123,7 @@ slicer.selectItems(["Lemon", "Lime", "Orange"]); await context.sync(); }); -'Excel.Slicer#style:member': +Excel.Slicer#style:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml @@ -7134,7 +7134,7 @@ slicer.style = "SlicerStyleLight6"; await context.sync(); }); -'Excel.SlicerCollection#add:member(1)': +Excel.SlicerCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml @@ -7149,7 +7149,7 @@ slicer.name = "Fruit Slicer"; await context.sync(); }); -'Excel.SlicerCollection#getItem:member(1)': +Excel.SlicerCollection#getItem:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml @@ -7164,7 +7164,7 @@ slicer.width = 150; await context.sync(); }); -'Excel.SortOn:enum': +Excel.SortOn:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml @@ -7194,7 +7194,7 @@ await context.sync(); }); } -'Excel.SortOrientation:enum': +Excel.SortOrientation:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml @@ -7224,7 +7224,7 @@ await context.sync(); }); } -'CustomFunctions.StreamingInvocation#setResult:member': +CustomFunctions.StreamingInvocation#setResult:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/16-custom-functions/streaming-function.yaml @@ -7250,7 +7250,7 @@ clearInterval(timer); } } -'Excel.Style#delete:member(1)': +Excel.Style#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml @@ -7267,7 +7267,7 @@ console.log("Successfully deleted the diagonal orientation style from the Home tab ribbon."); }); -'Excel.Style#font:member': +Excel.Style#font:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml @@ -7287,7 +7287,7 @@ console.log("Size: " + style.font.size); console.log("Fill color: " + style.fill.color); }); -'Excel.Style#horizontalAlignment:member': +Excel.Style#horizontalAlignment:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml @@ -7304,7 +7304,7 @@ await context.sync(); }); -'Excel.Style#load:member(1)': +Excel.Style#load:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml @@ -7325,7 +7325,7 @@ console.log("Shrink to fit: " + style.shrinkToFit); console.log("Style locked: " + style.locked); }); -'Excel.StyleCollection#add:member(1)': +Excel.StyleCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml @@ -7351,7 +7351,7 @@ console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); -'Excel.StyleCollection#getItem:member(1)': +Excel.StyleCollection#getItem:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml @@ -7377,7 +7377,7 @@ console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); -'Excel.Table#onChanged:member': +Excel.Table#onChanged:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-table-changed.yaml @@ -7390,7 +7390,7 @@ await context.sync(); console.log("A handler has been registered for the onChanged event"); }); -'Excel.Table#onSelectionChanged:member': +Excel.Table#onSelectionChanged:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-table-changed.yaml @@ -7403,7 +7403,7 @@ await context.sync(); console.log("A handler has been registered for table onSelectionChanged event"); }); -'Excel.Table#resize:member(1)': +Excel.Table#resize:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/resize-table.yaml @@ -7419,7 +7419,7 @@ await context.sync(); }); -'Excel.TableChangedEventArgs#details:member': +Excel.TableChangedEventArgs#details:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/data-change-event-details.yaml @@ -7434,7 +7434,7 @@ + ` now is ${details.valueAfter}(${details.valueTypeAfter})`); }); } -'Excel.TableChangedEventArgs#tableId:member': +Excel.TableChangedEventArgs#tableId:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-tablecollection-changed.yaml @@ -7453,7 +7453,7 @@ console.log("Worksheet Id : " + worksheet.name); }); } -'Excel.TableChangedEventArgs#worksheetId:member': +Excel.TableChangedEventArgs#worksheetId:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-tablecollection-changed.yaml @@ -7472,7 +7472,7 @@ console.log("Worksheet Id : " + worksheet.name); }); } -'Excel.TableCollection:class': +Excel.TableCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml @@ -7492,7 +7492,7 @@ }; await context.sync(); }); -'Excel.TableCollection#getItem:member(1)': +Excel.TableCollection#getItem:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml @@ -7512,7 +7512,7 @@ }; await context.sync(); }); -'Excel.TableCollection#onChanged:member': +Excel.TableCollection#onChanged:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-tablecollection-changed.yaml @@ -7525,7 +7525,7 @@ await context.sync(); console.log("A handler has been registered for the table collection onChanged event"); }); -'Excel.TableColumn#getDataBodyRange:member(1)': +Excel.TableColumn#getDataBodyRange:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml @@ -7545,7 +7545,7 @@ }; await context.sync(); }); -'Excel.TableColumnCollection:class': +Excel.TableColumnCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml @@ -7565,7 +7565,7 @@ }; await context.sync(); }); -'Excel.TableColumnCollection#getItem:member(1)': +Excel.TableColumnCollection#getItem:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml @@ -7583,7 +7583,7 @@ range.clearOrResetContents(); await context.sync(); }); -'Excel.TableSelectionChangedEventArgs#address:member': +Excel.TableSelectionChangedEventArgs#address:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-table-changed.yaml @@ -7594,7 +7594,7 @@ console.log("Handler for table onSelectionChanged event has been triggered. The new selection is: " + args.address); }); } -'Excel.TextConditionalFormat#format:member': +Excel.TextConditionalFormat#format:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -7610,7 +7610,7 @@ await context.sync(); }); -'Excel.TextConditionalFormat#rule:member': +Excel.TextConditionalFormat#rule:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -7626,7 +7626,7 @@ await context.sync(); }); -'Excel.TextFrame#deleteText:member(1)': +Excel.TextFrame#deleteText:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-textboxes.yaml @@ -7638,7 +7638,7 @@ textbox.textFrame.deleteText(); await context.sync(); }); -'Excel.ValueFilterCondition:enum': +Excel.ValueFilterCondition:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -7665,7 +7665,7 @@ await context.sync(); }); -'Excel.VerticalAlignment:enum': +Excel.VerticalAlignment:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml @@ -7680,7 +7680,7 @@ await context.sync(); }); -'Excel.WebImageCellValue#address:member': +Excel.WebImageCellValue#address:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-web-image.yaml @@ -7708,7 +7708,7 @@ // Open the image URL in a new browser tab. const tab = window.open(webImageData.address, "_blank"); }); -'Excel.WebImageCellValue#type:member': +Excel.WebImageCellValue#type:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-web-image.yaml @@ -7744,7 +7744,7 @@ await context.sync(); }); -'Excel.Workbook#properties:member': +Excel.Workbook#properties:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/26-document/properties.yaml @@ -7774,7 +7774,7 @@ console.log("Set the following document properties: title, subject, keywords, comments, category, manager, company."); }); -'Excel.Workbook#onActivated:member': +Excel.Workbook#onActivated:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-activated.yaml @@ -7800,7 +7800,7 @@ await context.sync(); console.log("Added event handler for workbook activated."); }); -'Excel.Workbook#pivotTables:member': +Excel.Workbook#pivotTables:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-get-pivottables.yaml @@ -7818,7 +7818,7 @@ console.log(`\t${pivotTable.name}`); }); }); -'Excel.Workbook#getSelectedRanges:member(1)': +Excel.Workbook#getSelectedRanges:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml @@ -7831,7 +7831,7 @@ await context.sync(); }) -'Excel.Workbook#styles:member': +Excel.Workbook#styles:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml @@ -7857,7 +7857,7 @@ console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); -'Excel.Workbook#getActiveShapeOrNullObject:member(1)': +Excel.Workbook#getActiveShapeOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-get-active.yaml @@ -7885,7 +7885,7 @@ console.log("No active shape"); } }); -'Excel.Workbook#getActiveCell:member(1)': +Excel.Workbook#getActiveCell:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-get-active-cell.yaml @@ -7901,7 +7901,7 @@ console.log("The active cell is " + activeCell.address); }); -'Excel.Workbook#insertWorksheetsFromBase64:member(1)': +Excel.Workbook#insertWorksheetsFromBase64:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml @@ -7945,7 +7945,7 @@ workbook.insertWorksheetsFromBase64(externalWorkbook, options); await context.sync(); }); -'Excel.Workbook#close:member(1)': +Excel.Workbook#close:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-save-and-close.yaml @@ -7954,7 +7954,7 @@ await Excel.run(async (context) => { context.workbook.close(Excel.CloseBehavior.save); }); -'Excel.Workbook#save:member(1)': +Excel.Workbook#save:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-save-and-close.yaml @@ -7963,7 +7963,7 @@ await Excel.run(async (context) => { context.workbook.save(Excel.SaveBehavior.save); }); -'Excel.WorkbookProtection#protect:member(1)': +Excel.WorkbookProtection#protect:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml @@ -7983,7 +7983,7 @@ workbook.protection.protect(password); } }); -'Excel.WorkbookProtection#unprotect:member(1)': +Excel.WorkbookProtection#unprotect:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml @@ -7997,7 +7997,7 @@ let workbook = context.workbook; workbook.protection.unprotect(password); }); -'Excel.WorkbookRangeAreas#areas:member': +Excel.WorkbookRangeAreas#areas:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/precedents.yaml @@ -8022,7 +8022,7 @@ } await context.sync(); }); -'Excel.Worksheet#customProperties:member': +Excel.Worksheet#customProperties:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/26-document/custom-properties.yaml @@ -8040,7 +8040,7 @@ console.log(`${property.key}:${property.value}`); }); }); -'Excel.Worksheet#onColumnSorted:member': +Excel.Worksheet#onColumnSorted:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml @@ -8066,7 +8066,7 @@ }); }); }); -'Excel.Worksheet#onRowSorted:member': +Excel.Worksheet#onRowSorted:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml @@ -8092,7 +8092,7 @@ }); }); }); -'Excel.Worksheet#onSingleClicked:member': +Excel.Worksheet#onSingleClicked:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-worksheet-single-click.yaml @@ -8111,7 +8111,7 @@ await context.sync(); }); -'Excel.Worksheet#onFormulaChanged:member': +Excel.Worksheet#onFormulaChanged:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-formula-changed.yaml @@ -8148,7 +8148,7 @@ ); }); } -'Excel.Worksheet#onChanged:member': +Excel.Worksheet#onChanged:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet.yaml @@ -8161,7 +8161,7 @@ console.log("Added a worksheet-level data-changed event handler."); }); -'Excel.Worksheet#onProtectionChanged:member': +Excel.Worksheet#onProtectionChanged:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet-protection.yaml @@ -8199,7 +8199,7 @@ console.log(" Source of change event: " + source + "."); }); } -'Excel.Worksheet#showOutlineLevels:member(1)': +Excel.Worksheet#showOutlineLevels:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml @@ -8212,7 +8212,7 @@ sheet.showOutlineLevels(3, 3); await context.sync(); }); -'Excel.Worksheet#slicers:member': +Excel.Worksheet#slicers:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml @@ -8227,7 +8227,7 @@ slicer.name = "Fruit Slicer"; await context.sync(); }); -'Excel.Worksheet#pivotTables:member': +Excel.Worksheet#pivotTables:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-get-pivottables.yaml @@ -8245,7 +8245,7 @@ console.log(`\t${pivotTable.name}`); }); }); -'Excel.Worksheet#getRanges:member(1)': +Excel.Worksheet#getRanges:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml @@ -8259,7 +8259,7 @@ await context.sync(); }) -'Excel.Worksheet#autoFilter:member': +Excel.Worksheet#autoFilter:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml @@ -8282,7 +8282,7 @@ await context.sync(); }); -'Excel.Worksheet#copy:member(1)': +Excel.Worksheet#copy:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-copy.yaml @@ -8301,7 +8301,7 @@ console.log("'" + sampleSheet.name + "' was copied to '" + copiedSheet.name + "'") }); -'Excel.Worksheet#findAllOrNullObject:member(1)': +Excel.Worksheet#findAllOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-find-all.yaml @@ -8322,7 +8322,7 @@ foundRanges.format.fill.color = "green" } }); -'Excel.Worksheet#showGridlines:member': +Excel.Worksheet#showGridlines:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/gridlines.yaml @@ -8334,7 +8334,7 @@ await context.sync(); }); -'Excel.Worksheet#getNext:member(1)': +Excel.Worksheet#getNext:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml @@ -8364,7 +8364,7 @@ await context.sync(); }); -'Excel.Worksheet#getPrevious:member(1)': +Excel.Worksheet#getPrevious:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml @@ -8390,7 +8390,7 @@ await context.sync(); }); -'Excel.Worksheet#tabColor:member': +Excel.Worksheet#tabColor:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/tab-color.yaml @@ -8402,7 +8402,7 @@ await context.sync(); }); -'Excel.WorksheetAddedEventArgs#worksheetId:member': +Excel.WorksheetAddedEventArgs#worksheetId:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml @@ -8416,7 +8416,7 @@ ); }); } -'Excel.WorksheetChangedEventArgs#changeDirectionState:member': +Excel.WorksheetChangedEventArgs#changeDirectionState:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet.yaml @@ -8460,7 +8460,7 @@ const range = sheet.getRange("A5:F5"); range.delete(Excel.DeleteShiftDirection.up); }); -'Excel.WorksheetChangedEventArgs#triggerSource:member': +Excel.WorksheetChangedEventArgs#triggerSource:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet.yaml @@ -8491,7 +8491,7 @@ } }); } -'Excel.WorksheetCollection#onActivated:member': +Excel.WorksheetCollection#onActivated:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml @@ -8504,7 +8504,7 @@ await context.sync(); console.log("A handler has been registered for the OnActivate event."); }); -'Excel.WorksheetCollection#onAdded:member': +Excel.WorksheetCollection#onAdded:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml @@ -8517,7 +8517,7 @@ await context.sync(); console.log("A handler has been registered for the OnAdded event."); }); -'Excel.WorksheetCollection#onDeactivated:member': +Excel.WorksheetCollection#onDeactivated:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml @@ -8530,7 +8530,7 @@ await context.sync(); console.log("A handler has been registered for the OnDeactivate event."); }); -'Excel.WorksheetCollection#getFirst:member(1)': +Excel.WorksheetCollection#getFirst:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml @@ -8560,7 +8560,7 @@ await context.sync(); }); -'Excel.WorksheetCollection#getLast:member(1)': +Excel.WorksheetCollection#getLast:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml @@ -8590,7 +8590,7 @@ await context.sync(); }); -'Excel.WorksheetCustomPropertyCollection#add:member(1)': +Excel.WorksheetCustomPropertyCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/26-document/custom-properties.yaml @@ -8609,7 +8609,7 @@ console.log(`Successfully set custom worksheet property ${userKey}:${userValue}.`); }); -'Excel.WorksheetFreezePanes#freezeAt:member(1)': +Excel.WorksheetFreezePanes#freezeAt:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-freeze-panes.yaml @@ -8623,7 +8623,7 @@ await context.sync(); }); -'Excel.WorksheetFreezePanes#freezeColumns:member(1)': +Excel.WorksheetFreezePanes#freezeColumns:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-freeze-panes.yaml @@ -8637,7 +8637,7 @@ await context.sync(); }); -'Excel.WorksheetFreezePanes#freezeRows:member(1)': +Excel.WorksheetFreezePanes#freezeRows:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-freeze-panes.yaml @@ -8651,7 +8651,7 @@ await context.sync(); }); -'Excel.WorksheetFreezePanes#getLocationOrNullObject:member(1)': +Excel.WorksheetFreezePanes#getLocationOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-freeze-panes.yaml @@ -8670,7 +8670,7 @@ console.log(`The address of the frozen range (cells that are frozen in the top-and-left-most pane) is "${frozenRange.address}"`); } }); -'Excel.WorksheetFreezePanes#unfreeze:member(1)': +Excel.WorksheetFreezePanes#unfreeze:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-freeze-panes.yaml @@ -8682,7 +8682,7 @@ await context.sync(); }); -'Excel.WorksheetPositionType:enum': +Excel.WorksheetPositionType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml @@ -8703,7 +8703,7 @@ workbook.insertWorksheetsFromBase64(externalWorkbook, options); await context.sync(); }); -'Excel.WorksheetProtection#protect:member(1)': +Excel.WorksheetProtection#protect:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml @@ -8723,7 +8723,7 @@ activeSheet.protection.protect(null, password); } }); -'Excel.WorksheetProtection#unprotect:member(1)': +Excel.WorksheetProtection#unprotect:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml @@ -8737,7 +8737,7 @@ let activeSheet = context.workbook.worksheets.getActiveWorksheet(); activeSheet.protection.unprotect(password); }); -'Excel.WorksheetProtectionChangedEventArgs#isProtected:member': +Excel.WorksheetProtectionChangedEventArgs#isProtected:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet-protection.yaml @@ -8756,7 +8756,7 @@ console.log(" Source of change event: " + source + "."); }); } -'Excel.WorksheetProtectionChangedEventArgs#source:member': +Excel.WorksheetProtectionChangedEventArgs#source:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet-protection.yaml @@ -8775,7 +8775,7 @@ console.log(" Source of change event: " + source + "."); }); } -'Excel.WorksheetProtectionChangedEventArgs#worksheetId:member': +Excel.WorksheetProtectionChangedEventArgs#worksheetId:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet-protection.yaml @@ -8794,7 +8794,7 @@ console.log(" Source of change event: " + source + "."); }); } -'Excel.WorksheetSingleClickedEventArgs#address:member': +Excel.WorksheetSingleClickedEventArgs#address:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-worksheet-single-click.yaml @@ -8813,7 +8813,7 @@ await context.sync(); }); -'Office.AppointmentCompose#addFileAttachmentAsync:member(1)': +Office.AppointmentCompose#addFileAttachmentAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml @@ -8830,7 +8830,7 @@ console.log(result); } ); -'Office.AppointmentCompose#addFileAttachmentFromBase64Async:member(1)': +Office.AppointmentCompose#addFileAttachmentFromBase64Async:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml @@ -8876,7 +8876,7 @@ } } ); -'Office.AppointmentCompose#categories:member': +Office.AppointmentCompose#categories:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml @@ -8950,14 +8950,14 @@ console.error(asyncResult.error); } }); -'Office.AppointmentCompose#close:member(1)': +Office.AppointmentCompose#close:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/25-item-save-and-close/close.yaml Office.context.mailbox.item.close(); -'Office.AppointmentCompose#disableClientSignatureAsync:member(1)': +Office.AppointmentCompose#disableClientSignatureAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml @@ -8973,7 +8973,7 @@ console.error(asyncResult.error); } }); -'Office.AppointmentCompose#end:member': +Office.AppointmentCompose#end:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml @@ -9007,7 +9007,7 @@ console.log(`Successfully set end date and time to ${end}`); }); }); -'Office.AppointmentCompose#enhancedLocation:member': +Office.AppointmentCompose#enhancedLocation:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml @@ -9078,7 +9078,7 @@ console.error(`Failed to remove locations. Error message: ${result.error.message}`); } }); -'Office.AppointmentCompose#getAttachmentContentAsync:member(1)': +Office.AppointmentCompose#getAttachmentContentAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml @@ -9103,7 +9103,7 @@ Office.context.mailbox.item.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); } }); -'Office.AppointmentCompose#getAttachmentsAsync:member(1)': +Office.AppointmentCompose#getAttachmentsAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml @@ -9151,7 +9151,7 @@ console.log("No attachments on this message."); } }); -'Office.AppointmentCompose#getItemIdAsync:member(2)': +Office.AppointmentCompose#getItemIdAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/item-id-compose.yaml @@ -9165,7 +9165,7 @@ console.log(result.value); }); -'Office.AppointmentCompose#getSelectedDataAsync:member(2)': +Office.AppointmentCompose#getSelectedDataAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/get-selected-data.yaml @@ -9181,7 +9181,7 @@ console.error(asyncResult.error); } }); -'Office.AppointmentCompose#getSharedPropertiesAsync:member(2)': +Office.AppointmentCompose#getSharedPropertiesAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml @@ -9197,7 +9197,7 @@ console.log(`Permissions: ${sharedProperties.delegatePermissions}`); console.log(`Target mailbox: ${sharedProperties.targetMailbox}`); }); -'Office.AppointmentCompose#isAllDayEvent:member': +Office.AppointmentCompose#isAllDayEvent:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml @@ -9223,7 +9223,7 @@ console.log("Appointment set to all-day event."); } }); -'Office.AppointmentCompose#isClientSignatureEnabledAsync:member(1)': +Office.AppointmentCompose#isClientSignatureEnabledAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml @@ -9239,7 +9239,7 @@ console.error(asyncResult.error); } }); -'Office.AppointmentCompose#itemType:member': +Office.AppointmentCompose#itemType:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml @@ -9255,7 +9255,7 @@ console.log(`Current item is a ${itemType}. A message could be an email, meeting request, meeting response, or meeting cancellation.`); break; } -'Office.AppointmentCompose#loadCustomPropertiesAsync:member(1)': +Office.AppointmentCompose#loadCustomPropertiesAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml @@ -9270,7 +9270,7 @@ customProps = result.value; console.log("Loaded the CustomProperties object."); }); -'Office.AppointmentCompose#location:member': +Office.AppointmentCompose#location:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml @@ -9297,7 +9297,7 @@ } console.log(`Successfully set location to ${location}`); }); -'Office.AppointmentCompose#notificationMessages:member': +Office.AppointmentCompose#notificationMessages:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml @@ -9401,7 +9401,7 @@ Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); -'Office.AppointmentCompose#optionalAttendees:member': +Office.AppointmentCompose#optionalAttendees:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml @@ -9443,7 +9443,7 @@ console.error(asyncResult.error); } }); -'Office.AppointmentCompose#organizer:member': +Office.AppointmentCompose#organizer:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml @@ -9457,7 +9457,7 @@ console.error(asyncResult.error); } }); -'Office.AppointmentCompose#recurrence:member': +Office.AppointmentCompose#recurrence:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml @@ -9526,7 +9526,7 @@ } console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); }); -'Office.AppointmentCompose#removeAttachmentAsync:member(1)': +Office.AppointmentCompose#removeAttachmentAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml @@ -9543,7 +9543,7 @@ console.log(`Attachment removed successfully.`); } ); -'Office.AppointmentCompose#requiredAttendees:member': +Office.AppointmentCompose#requiredAttendees:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml @@ -9585,7 +9585,7 @@ console.error(asyncResult.error); } }); -'Office.AppointmentCompose#saveAsync:member(1)': +Office.AppointmentCompose#saveAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/25-item-save-and-close/save.yaml @@ -9599,7 +9599,7 @@ console.error(`saveAsync failed with message ${result.error.message}`); } }); -'Office.AppointmentCompose#sendAsync:member(2)': +Office.AppointmentCompose#sendAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/send-async.yaml @@ -9613,7 +9613,7 @@ return; } }); -'Office.AppointmentCompose#sensitivity:member': +Office.AppointmentCompose#sensitivity:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml @@ -9641,7 +9641,7 @@ } } ); -'Office.AppointmentCompose#sensitivityLabel:member': +Office.AppointmentCompose#sensitivityLabel:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-sensitivity-label/sensitivity-label.yaml @@ -9662,7 +9662,7 @@ console.log("Action failed with error: " + asyncResult.error.message); } }); -'Office.AppointmentCompose#seriesId:member': +Office.AppointmentCompose#seriesId:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml @@ -9678,7 +9678,7 @@ } else { console.log("This is an instance belonging to series with ID " + seriesId); } -'Office.AppointmentCompose#sessionData:member': +Office.AppointmentCompose#sessionData:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/session-data-apis.yaml @@ -9691,7 +9691,7 @@ console.log("Failed to get all sessionData. Error: " + JSON.stringify(asyncResult.error)); } }); -'Office.AppointmentCompose#setSelectedDataAsync:member(1)': +Office.AppointmentCompose#setSelectedDataAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/set-selected-data.yaml @@ -9705,7 +9705,7 @@ console.error(asyncResult.error); } }); -'Office.AppointmentCompose#start:member': +Office.AppointmentCompose#start:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml @@ -9734,7 +9734,7 @@ } console.log(`Successfully set start date and time to ${start}`); }); -'Office.AppointmentCompose#subject:member': +Office.AppointmentCompose#subject:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml @@ -9761,7 +9761,7 @@ } console.log(`Successfully set subject to ${subject}`); }); -'Office.AppointmentRead#attachments:member': +Office.AppointmentRead#attachments:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachments-read.yaml @@ -9782,7 +9782,7 @@ } else { console.log("This mail item doesn't contain any attachments."); } -'Office.AppointmentRead#categories:member': +Office.AppointmentRead#categories:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml @@ -9856,7 +9856,7 @@ console.error(asyncResult.error); } }); -'Office.AppointmentRead#dateTimeCreated:member': +Office.AppointmentRead#dateTimeCreated:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml @@ -9864,7 +9864,7 @@ console.log(`Creation date and time: ${Office.context.mailbox.item.dateTimeCreated}`); -'Office.AppointmentRead#dateTimeModified:member': +Office.AppointmentRead#dateTimeModified:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml @@ -9872,7 +9872,7 @@ console.log(`Date and time item last modified: ${Office.context.mailbox.item.dateTimeModified}`); -'Office.AppointmentRead#displayReplyAllForm:member(1)': +Office.AppointmentRead#displayReplyAllForm:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml @@ -9924,7 +9924,7 @@ console.log("Created a reply-all form with attachments."); } }); -'Office.AppointmentRead#displayReplyAllFormAsync:member(1)': +Office.AppointmentRead#displayReplyAllFormAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml @@ -9984,7 +9984,7 @@ console.log("Created a reply-all form with attachments."); } ); -'Office.AppointmentRead#displayReplyForm:member(1)': +Office.AppointmentRead#displayReplyForm:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml @@ -10036,7 +10036,7 @@ console.log("Created a reply with attachments."); } }); -'Office.AppointmentRead#displayReplyFormAsync:member(1)': +Office.AppointmentRead#displayReplyFormAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml @@ -10096,14 +10096,14 @@ console.log("Created reply with attachments."); } ); -'Office.AppointmentRead#end:member': +Office.AppointmentRead#end:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-end-read.yaml console.log(`Appointment ends: ${Office.context.mailbox.item.end}`); -'Office.AppointmentRead#enhancedLocation:member': +Office.AppointmentRead#enhancedLocation:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml @@ -10126,7 +10126,7 @@ console.log("There are no locations."); } }); -'Office.AppointmentRead#getAttachmentContentAsync:member(1)': +Office.AppointmentRead#getAttachmentContentAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml @@ -10149,7 +10149,7 @@ // Log the attachment type and its contents to the console. item.getAttachmentContentAsync(attachments[i].id, handleAttachmentsCallback); } -'Office.AppointmentRead#getRegExMatches:member(1)': +Office.AppointmentRead#getRegExMatches:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml @@ -10158,7 +10158,7 @@ // This API only works when you click on the highlighted word "ScriptLab". console.log(Office.context.mailbox.item.getRegExMatches()); -'Office.AppointmentRead#getRegExMatchesByName:member(1)': +Office.AppointmentRead#getRegExMatchesByName:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml @@ -10167,7 +10167,7 @@ // This API only works when you click on the highlighted word "ScriptLab". console.log(Office.context.mailbox.item.getRegExMatchesByName("sampleRegexName")); -'Office.AppointmentRead#getSelectedRegExMatches:member(1)': +Office.AppointmentRead#getSelectedRegExMatches:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml @@ -10180,7 +10180,7 @@ } else { console.error("Open add-in by clicking on a highlighted regex match, for this API to return something useful."); } -'Office.AppointmentRead#getSharedPropertiesAsync:member(2)': +Office.AppointmentRead#getSharedPropertiesAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml @@ -10196,14 +10196,14 @@ console.log(`Permissions: ${sharedProperties.delegatePermissions}`); console.log(`Target mailbox: ${sharedProperties.targetMailbox}`); }); -'Office.AppointmentRead#itemClass:member': +Office.AppointmentRead#itemClass:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-class-read.yaml console.log(`Item class: ${Office.context.mailbox.item.itemClass}`); -'Office.AppointmentRead#itemType:member': +Office.AppointmentRead#itemType:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml @@ -10219,7 +10219,7 @@ console.log(`Current item is a ${itemType}. A message could be an email, meeting request, meeting response, or meeting cancellation.`); break; } -'Office.AppointmentRead#loadCustomPropertiesAsync:member(1)': +Office.AppointmentRead#loadCustomPropertiesAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml @@ -10234,7 +10234,7 @@ customProps = result.value; console.log("Loaded the CustomProperties object."); }); -'Office.AppointmentRead#location:member': +Office.AppointmentRead#location:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-location-read.yaml @@ -10242,7 +10242,7 @@ console.log(`Appointment location: ${Office.context.mailbox.item.location}`); -'Office.AppointmentRead#normalizedSubject:member': +Office.AppointmentRead#normalizedSubject:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml @@ -10250,7 +10250,7 @@ console.log(`Normalized subject: ${Office.context.mailbox.item.normalizedSubject}`); -'Office.AppointmentRead#notificationMessages:member': +Office.AppointmentRead#notificationMessages:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml @@ -10354,7 +10354,7 @@ Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); -'Office.AppointmentRead#optionalAttendees:member': +Office.AppointmentRead#optionalAttendees:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml @@ -10373,7 +10373,7 @@ apptOptionalAttendees[i].appointmentResponse ); } -'Office.AppointmentRead#organizer:member': +Office.AppointmentRead#organizer:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml @@ -10383,7 +10383,7 @@ console.log("Organizer: " + apptOrganizer.displayName + " (" + apptOrganizer.emailAddress + ")"); -'Office.AppointmentRead#recurrence:member': +Office.AppointmentRead#recurrence:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-recurrence-read.yaml @@ -10399,7 +10399,7 @@ } else { console.log(JSON.stringify(recurrence)); } -'Office.AppointmentRead#requiredAttendees:member': +Office.AppointmentRead#requiredAttendees:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml @@ -10418,7 +10418,7 @@ apptRequiredAttendees[i].appointmentResponse ); } -'Office.AppointmentRead#seriesId:member': +Office.AppointmentRead#seriesId:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml @@ -10434,21 +10434,21 @@ } else { console.log("This is an instance belonging to series with ID " + seriesId); } -'Office.AppointmentRead#start:member': +Office.AppointmentRead#start:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-start-read.yaml console.log(`Appointment starts: ${Office.context.mailbox.item.start}`); -'Office.AppointmentRead#subject:member': +Office.AppointmentRead#subject:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-subject-read.yaml console.log(`Subject: ${Office.context.mailbox.item.subject}`); -'Office.AttachmentDetails:interface': +Office.AttachmentDetails:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachments-read.yaml @@ -10469,7 +10469,7 @@ } else { console.log("This mail item doesn't contain any attachments."); } -'Office.AttachmentDetailsCompose:interface': +Office.AttachmentDetailsCompose:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml @@ -10517,7 +10517,7 @@ console.log("No attachments on this message."); } }); -'Office.Body:interface': +Office.Body:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/add-inline-base64-image.yaml @@ -10553,7 +10553,7 @@ }); }); }); -'Office.Body#appendOnSendAsync:member(1)': +Office.Body#appendOnSendAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/append-text-on-send.yaml @@ -10585,7 +10585,7 @@ console.log(`"${text}" will be appended to the body once the message or appointment is sent. Send the mail item to test this feature.`); }); }); -'Office.Body#getAsync:member(2)': +Office.Body#getAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/add-inline-base64-image.yaml @@ -10621,7 +10621,7 @@ }); }); }); -'Office.Body#getTypeAsync:member(1)': +Office.Body#getTypeAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/get-body-format.yaml @@ -10638,7 +10638,7 @@ console.log("Body format: " + asyncResult.value); }); -'Office.Body#prependAsync:member(1)': +Office.Body#prependAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/prepend-text-to-item-body.yaml @@ -10673,7 +10673,7 @@ console.log(`"${text}" prepended to the body.`); }); }); -'Office.Body#prependOnSendAsync:member(1)': +Office.Body#prependOnSendAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/prepend-text-on-send.yaml @@ -10705,7 +10705,7 @@ console.log(`"${text}" will be prepended to the body once the message or appointment is sent. Send the mail item to test this feature.`); }); }); -'Office.Body#setAsync:member(1)': +Office.Body#setAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/add-inline-base64-image.yaml @@ -10741,7 +10741,7 @@ }); }); }); -'Office.Body#setSelectedDataAsync:member(1)': +Office.Body#setSelectedDataAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/replace-selected-text.yaml @@ -10776,7 +10776,7 @@ console.log(`Replaced selected text with "${text}".`); }); }); -'Office.Body#setSignatureAsync:member(1)': +Office.Body#setSignatureAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml @@ -10827,7 +10827,7 @@ console.error(asyncResult.error); } }); -'Office.Categories#addAsync:member(1)': +Office.Categories#addAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml @@ -10858,7 +10858,7 @@ console.error(asyncResult.error); } }); -'Office.Categories#getAsync:member(2)': +Office.Categories#getAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml @@ -10877,7 +10877,7 @@ console.error(asyncResult.error); } }); -'Office.Categories#removeAsync:member(1)': +Office.Categories#removeAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml @@ -10903,7 +10903,7 @@ console.error(asyncResult.error); } }); -'Office.CustomProperties#get:member(1)': +Office.CustomProperties#get:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml @@ -10916,7 +10916,7 @@ console.log(`The value of custom property "${propertyName}" is "${propertyValue}".`); -'Office.CustomProperties#getAll:member(1)': +Office.CustomProperties#getAll:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml @@ -10932,7 +10932,7 @@ console.log(allCustomProps); -'Office.CustomProperties#remove:member(1)': +Office.CustomProperties#remove:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml @@ -10944,7 +10944,7 @@ customProps.remove(propertyName); console.log(`Custom property "${propertyName}" removed.`); -'Office.CustomProperties#saveAsync:member(1)': +Office.CustomProperties#saveAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml @@ -10958,7 +10958,7 @@ console.log(`Custom properties saved with status: ${result.status}`); }); -'Office.CustomProperties#set:member(1)': +Office.CustomProperties#set:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml @@ -10974,7 +10974,7 @@ console.log(`Custom property "${propertyName}" set to value "${propertyValue}".`); -'Office.DelayDeliveryTime#getAsync:member(2)': +Office.DelayDeliveryTime#getAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/delay-message-delivery.yaml @@ -10996,7 +10996,7 @@ console.log(`Message delivery date and time: ${date.toString()}`); } }); -'Office.DelayDeliveryTime#setAsync:member(2)': +Office.DelayDeliveryTime#setAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/delay-message-delivery.yaml @@ -11020,7 +11020,7 @@ } }); } -'Office.Diagnostics:interface': +Office.Diagnostics:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml @@ -11053,7 +11053,7 @@ console.log("Current view (Outlook on the web only): Viewed from a desktop computer"); break; } -'Office.Display#body:member': +Office.Display#body:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml @@ -11078,7 +11078,7 @@ console.log("Temporarily set the content displayed in the body."); }); -'Office.Display#subject:member': +Office.Display#subject:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml @@ -11103,7 +11103,7 @@ console.log("Temporarily set the content displayed in the subject field."); }); -'Office.DisplayedBody#setAsync:member(2)': +Office.DisplayedBody#setAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml @@ -11128,7 +11128,7 @@ console.log("Temporarily set the content displayed in the body."); }); -'Office.DisplayedSubject#setAsync:member(2)': +Office.DisplayedSubject#setAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml @@ -11153,7 +11153,7 @@ console.log("Temporarily set the content displayed in the subject field."); }); -'Office.EnhancedLocation#addAsync:member(1)': +Office.EnhancedLocation#addAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml @@ -11178,7 +11178,7 @@ console.error(`Failed to add locations. Error message: ${result.error.message}`); } }); -'Office.EnhancedLocation#getAsync:member(1)': +Office.EnhancedLocation#getAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml @@ -11201,7 +11201,7 @@ console.log("There are no locations."); } }); -'Office.EnhancedLocation#removeAsync:member(1)': +Office.EnhancedLocation#removeAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml @@ -11226,7 +11226,7 @@ console.error(`Failed to remove locations. Error message: ${result.error.message}`); } }); -'Office.From#getAsync:member(1)': +Office.From#getAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml @@ -11240,7 +11240,7 @@ console.error(asyncResult.error); } }); -'Office.InternetHeaders#getAsync:member(1)': +Office.InternetHeaders#getAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml @@ -11256,7 +11256,7 @@ } } ); -'Office.InternetHeaders#removeAsync:member(1)': +Office.InternetHeaders#removeAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml @@ -11272,7 +11272,7 @@ } } ); -'Office.InternetHeaders#setAsync:member(1)': +Office.InternetHeaders#setAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml @@ -11289,7 +11289,7 @@ } ); -'Office.IsAllDayEvent#getAsync:member(2)': +Office.IsAllDayEvent#getAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml @@ -11302,7 +11302,7 @@ console.log("Failed to get if this is an all-day event. Error: " + JSON.stringify(asyncResult.error)); } }); -'Office.IsAllDayEvent#setAsync:member(1)': +Office.IsAllDayEvent#setAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml @@ -11316,7 +11316,7 @@ console.log("Appointment set to all-day event."); } }); -'Office.Item:interface': +Office.Item:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml @@ -11332,7 +11332,7 @@ console.log(`Current item is a ${itemType}. A message could be an email, meeting request, meeting response, or meeting cancellation.`); break; } -'Office.Location#getAsync:member(2)': +Office.Location#getAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml @@ -11345,7 +11345,7 @@ } console.log(`Appointment location: ${result.value}`); }); -'Office.Location#setAsync:member(1)': +Office.Location#setAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml @@ -11360,7 +11360,7 @@ } console.log(`Successfully set location to ${location}`); }); -'Office.Mailbox#convertToEwsId:member(1)': +Office.Mailbox#convertToEwsId:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml @@ -11389,7 +11389,7 @@ Office.MailboxEnums.RestVersion.v2_0); console.log("EWS ID (from REST ID): " + ewsId2); -'Office.Mailbox#convertToRestId:member(1)': +Office.Mailbox#convertToRestId:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml @@ -11418,7 +11418,7 @@ Office.MailboxEnums.RestVersion.v2_0); console.log("EWS ID (from REST ID): " + ewsId2); -'Office.Mailbox#diagnostics:member': +Office.Mailbox#diagnostics:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml @@ -11451,7 +11451,7 @@ console.log("Current view (Outlook on the web only): Viewed from a desktop computer"); break; } -'Office.Mailbox#displayAppointmentForm:member(1)': +Office.Mailbox#displayAppointmentForm:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-appointment.yaml @@ -11461,7 +11461,7 @@ HTMLInputElement).value; Office.context.mailbox.displayAppointmentForm(itemId); -'Office.Mailbox#displayAppointmentFormAsync:member(1)': +Office.Mailbox#displayAppointmentFormAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-appointment.yaml @@ -11479,7 +11479,7 @@ function(asyncResult) { console.log("Result: " + JSON.stringify(asyncResult)); }); -'Office.Mailbox#displayMessageForm:member(1)': +Office.Mailbox#displayMessageForm:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-message.yaml @@ -11489,7 +11489,7 @@ HTMLInputElement).value; Office.context.mailbox.displayMessageForm(itemId); -'Office.Mailbox#displayMessageFormAsync:member(1)': +Office.Mailbox#displayMessageFormAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-message.yaml @@ -11507,7 +11507,7 @@ (asyncResult) { console.log("Result: " + JSON.stringify(asyncResult)); }); -'Office.Mailbox#displayNewAppointmentForm:member(1)': +Office.Mailbox#displayNewAppointmentForm:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-appointment.yaml @@ -11530,7 +11530,7 @@ resources: ["projector@contoso.com"], body: "Hello World!" }); -'Office.Mailbox#displayNewAppointmentFormAsync:member(1)': +Office.Mailbox#displayNewAppointmentFormAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-appointment.yaml @@ -11562,7 +11562,7 @@ console.log(JSON.stringify(asyncResult)); } ); -'Office.Mailbox#displayNewMessageForm:member(1)': +Office.Mailbox#displayNewMessageForm:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-message.yaml @@ -11582,7 +11582,7 @@ } ] }); -'Office.Mailbox#displayNewMessageFormAsync:member(1)': +Office.Mailbox#displayNewMessageFormAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-message.yaml @@ -11611,7 +11611,7 @@ console.log(JSON.stringify(asyncResult)); } ); -'Office.Mailbox#ewsUrl:member': +Office.Mailbox#ewsUrl:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml @@ -11640,7 +11640,7 @@ Office.MailboxEnums.RestVersion.v2_0); console.log("EWS ID (from REST ID): " + ewsId2); -'Office.Mailbox#getCallbackTokenAsync:member(2)': +Office.Mailbox#getCallbackTokenAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml @@ -11654,7 +11654,7 @@ console.log(result.value); }); -'Office.Mailbox#getSelectedItemsAsync:member(2)': +Office.Mailbox#getSelectedItemsAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-message-properties.yaml @@ -11678,7 +11678,7 @@ console.log(`Has attachment: ${message.hasAttachment}`); }); }); -'Office.Mailbox#getUserIdentityTokenAsync:member(1)': +Office.Mailbox#getUserIdentityTokenAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml @@ -11692,7 +11692,7 @@ console.log(result.value); }); -'Office.Mailbox#loadItemByIdAsync:member(1)': +Office.Mailbox#loadItemByIdAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-loaded-message-properties.yaml @@ -11723,7 +11723,7 @@ }); }); } -'Office.Mailbox#makeEwsRequestAsync:member(1)': +Office.Mailbox#makeEwsRequestAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml @@ -11787,7 +11787,7 @@ Office.context.mailbox.makeEwsRequestAsync(request, (result) => { console.log(result); }); -'Office.Mailbox#masterCategories:member': +Office.Mailbox#masterCategories:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml @@ -11843,7 +11843,7 @@ console.log("masterCategories.removeAsync call failed with error: " + asyncResult.error.message); } }); -'Office.MailboxEnums.ActionType:enum': +Office.MailboxEnums.ActionType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml @@ -11875,7 +11875,7 @@ Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); -'Office.MailboxEnums.AppointmentSensitivityType:enum': +Office.MailboxEnums.AppointmentSensitivityType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml @@ -11891,7 +11891,7 @@ } } ); -'Office.MailboxEnums.AttachmentContentFormat:enum': +Office.MailboxEnums.AttachmentContentFormat:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml @@ -11922,7 +11922,7 @@ console.log(result.value.content); } -'Office.MailboxEnums.AttachmentType:enum': +Office.MailboxEnums.AttachmentType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml @@ -11970,7 +11970,7 @@ console.log("No attachments on this message."); } }); -'Office.MailboxEnums.CategoryColor:enum': +Office.MailboxEnums.CategoryColor:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml @@ -11992,7 +11992,7 @@ console.log("masterCategories.addAsync call failed with error: " + asyncResult.error.message); } }); -'Office.MailboxEnums.ComposeType:enum': +Office.MailboxEnums.ComposeType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml @@ -12012,7 +12012,7 @@ console.error(asyncResult.error); } }); -'Office.MailboxEnums.Days:enum': +Office.MailboxEnums.Days:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml @@ -12064,7 +12064,7 @@ } console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); }); -'Office.MailboxEnums.ItemNotificationMessageType:enum': +Office.MailboxEnums.ItemNotificationMessageType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml @@ -12082,7 +12082,7 @@ }; Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); -'Office.MailboxEnums.ItemType:enum': +Office.MailboxEnums.ItemType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml @@ -12098,7 +12098,7 @@ console.log(`Current item is a ${itemType}. A message could be an email, meeting request, meeting response, or meeting cancellation.`); break; } -'Office.MailboxEnums.LocationType:enum': +Office.MailboxEnums.LocationType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml @@ -12123,7 +12123,7 @@ console.error(`Failed to add locations. Error message: ${result.error.message}`); } }); -'Office.MailboxEnums.Month:enum': +Office.MailboxEnums.Month:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml @@ -12175,7 +12175,7 @@ } console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); }); -'Office.MailboxEnums.OWAView:enum': +Office.MailboxEnums.OWAView:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml @@ -12208,7 +12208,7 @@ console.log("Current view (Outlook on the web only): Viewed from a desktop computer"); break; } -'Office.MailboxEnums.RecipientType:enum': +Office.MailboxEnums.RecipientType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml @@ -12263,7 +12263,7 @@ console.log("Other Recipients:"); otherRecipients.forEach((recipient) => console.log(`${recipient.displayName}, ${recipient.emailAddress}`)); } -'Office.MailboxEnums.RecurrenceTimeZone:enum': +Office.MailboxEnums.RecurrenceTimeZone:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml @@ -12315,7 +12315,7 @@ } console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); }); -'Office.MailboxEnums.RecurrenceType:enum': +Office.MailboxEnums.RecurrenceType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml @@ -12367,7 +12367,7 @@ } console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); }); -'Office.MailboxEnums.ResponseType:enum': +Office.MailboxEnums.ResponseType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml @@ -12408,7 +12408,7 @@ console.log("No response: "); printAttendees(noResponse); } -'Office.MailboxEnums.RestVersion:enum': +Office.MailboxEnums.RestVersion:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml @@ -12437,7 +12437,7 @@ Office.MailboxEnums.RestVersion.v2_0); console.log("EWS ID (from REST ID): " + ewsId2); -'Office.MailboxEnums.SourceProperty:enum': +Office.MailboxEnums.SourceProperty:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/get-selected-data.yaml @@ -12453,7 +12453,7 @@ console.error(asyncResult.error); } }); -'Office.MailboxEnums.WeekNumber:enum': +Office.MailboxEnums.WeekNumber:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml @@ -12505,7 +12505,7 @@ } console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); }); -'Office.MasterCategories#addAsync:member(1)': +Office.MasterCategories#addAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml @@ -12527,7 +12527,7 @@ console.log("masterCategories.addAsync call failed with error: " + asyncResult.error.message); } }); -'Office.MasterCategories#getAsync:member(2)': +Office.MasterCategories#getAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml @@ -12546,7 +12546,7 @@ console.error(asyncResult.error); } }); -'Office.MasterCategories#removeAsync:member(1)': +Office.MasterCategories#removeAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml @@ -12563,7 +12563,7 @@ console.log("masterCategories.removeAsync call failed with error: " + asyncResult.error.message); } }); -'Office.MessageCompose:interface': +Office.MessageCompose:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml @@ -12580,7 +12580,7 @@ console.log(result); } ); -'Office.MessageCompose#addFileAttachmentAsync:member(1)': +Office.MessageCompose#addFileAttachmentAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml @@ -12597,7 +12597,7 @@ console.log(result); } ); -'Office.MessageCompose#addFileAttachmentFromBase64Async:member(1)': +Office.MessageCompose#addFileAttachmentFromBase64Async:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml @@ -12643,7 +12643,7 @@ } } ); -'Office.MessageCompose#bcc:member': +Office.MessageCompose#bcc:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml @@ -12677,7 +12677,7 @@ console.error(asyncResult.error); } }); -'Office.MessageCompose#categories:member': +Office.MessageCompose#categories:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml @@ -12751,7 +12751,7 @@ console.error(asyncResult.error); } }); -'Office.MessageCompose#cc:member': +Office.MessageCompose#cc:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml @@ -12785,14 +12785,14 @@ console.error(asyncResult.error); } }); -'Office.MessageCompose#close:member(1)': +Office.MessageCompose#close:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/25-item-save-and-close/close.yaml Office.context.mailbox.item.close(); -'Office.MessageCompose#closeAsync:member(2)': +Office.MessageCompose#closeAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/25-item-save-and-close/close-async.yaml @@ -12816,7 +12816,7 @@ return; } }); -'Office.MessageCompose#conversationId:member': +Office.MessageCompose#conversationId:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml @@ -12824,7 +12824,7 @@ console.log(`Conversation ID: ${Office.context.mailbox.item.conversationId}`); -'Office.MessageCompose#delayDeliveryTime:member': +Office.MessageCompose#delayDeliveryTime:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/delay-message-delivery.yaml @@ -12848,7 +12848,7 @@ } }); } -'Office.MessageCompose#disableClientSignatureAsync:member(1)': +Office.MessageCompose#disableClientSignatureAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml @@ -12864,7 +12864,7 @@ console.error(asyncResult.error); } }); -'Office.MessageCompose#from:member': +Office.MessageCompose#from:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml @@ -12878,7 +12878,7 @@ console.error(asyncResult.error); } }); -'Office.MessageCompose#getAttachmentContentAsync:member(1)': +Office.MessageCompose#getAttachmentContentAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml @@ -12903,7 +12903,7 @@ Office.context.mailbox.item.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); } }); -'Office.MessageCompose#getAttachmentsAsync:member(1)': +Office.MessageCompose#getAttachmentsAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml @@ -12951,7 +12951,7 @@ console.log("No attachments on this message."); } }); -'Office.MessageCompose#getComposeTypeAsync:member(2)': +Office.MessageCompose#getComposeTypeAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml @@ -12971,7 +12971,7 @@ console.error(asyncResult.error); } }); -'Office.MessageCompose#getConversationIndexAsync:member(2)': +Office.MessageCompose#getConversationIndexAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-conversation-index.yaml @@ -12996,7 +12996,7 @@ console.log("The current message doesn't belong to a conversation thread."); } }); -'Office.MessageCompose#getItemClassAsync:member(2)': +Office.MessageCompose#getItemClassAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-class-async.yaml @@ -13015,7 +13015,7 @@ console.log("Item class of the current message: " + asyncResult.value); }); -'Office.MessageCompose#getItemIdAsync:member(2)': +Office.MessageCompose#getItemIdAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/item-id-compose.yaml @@ -13029,7 +13029,7 @@ console.log(result.value); }); -'Office.MessageCompose#getSelectedDataAsync:member(2)': +Office.MessageCompose#getSelectedDataAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/get-selected-data.yaml @@ -13045,7 +13045,7 @@ console.error(asyncResult.error); } }); -'Office.MessageCompose#getSharedPropertiesAsync:member(2)': +Office.MessageCompose#getSharedPropertiesAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml @@ -13061,7 +13061,7 @@ console.log(`Permissions: ${sharedProperties.delegatePermissions}`); console.log(`Target mailbox: ${sharedProperties.targetMailbox}`); }); -'Office.MessageCompose#inReplyTo:member': +Office.MessageCompose#inReplyTo:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-in-reply-to.yaml @@ -13080,7 +13080,7 @@ } else { console.log("No InReplyTo property available for this message"); } -'Office.MessageCompose#internetHeaders:member': +Office.MessageCompose#internetHeaders:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml @@ -13096,7 +13096,7 @@ } } ); -'Office.MessageCompose#isClientSignatureEnabledAsync:member(1)': +Office.MessageCompose#isClientSignatureEnabledAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml @@ -13112,7 +13112,7 @@ console.error(asyncResult.error); } }); -'Office.MessageCompose#itemType:member': +Office.MessageCompose#itemType:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml @@ -13128,7 +13128,7 @@ console.log(`Current item is a ${itemType}. A message could be an email, meeting request, meeting response, or meeting cancellation.`); break; } -'Office.MessageCompose#loadCustomPropertiesAsync:member(1)': +Office.MessageCompose#loadCustomPropertiesAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml @@ -13143,7 +13143,7 @@ customProps = result.value; console.log("Loaded the CustomProperties object."); }); -'Office.MessageCompose#notificationMessages:member': +Office.MessageCompose#notificationMessages:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml @@ -13247,7 +13247,7 @@ Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); -'Office.MessageCompose#removeAttachmentAsync:member(1)': +Office.MessageCompose#removeAttachmentAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml @@ -13264,7 +13264,7 @@ console.log(`Attachment removed successfully.`); } ); -'Office.MessageCompose#sendAsync:member(2)': +Office.MessageCompose#sendAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/send-async.yaml @@ -13278,7 +13278,7 @@ return; } }); -'Office.MessageCompose#sensitivityLabel:member': +Office.MessageCompose#sensitivityLabel:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-sensitivity-label/sensitivity-label.yaml @@ -13299,7 +13299,7 @@ console.log("Action failed with error: " + asyncResult.error.message); } }); -'Office.MessageCompose#seriesId:member': +Office.MessageCompose#seriesId:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml @@ -13315,7 +13315,7 @@ } else { console.log("This is an instance belonging to series with ID " + seriesId); } -'Office.MessageCompose#sessionData:member': +Office.MessageCompose#sessionData:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/session-data-apis.yaml @@ -13328,7 +13328,7 @@ console.log("Failed to get all sessionData. Error: " + JSON.stringify(asyncResult.error)); } }); -'Office.MessageCompose#setSelectedDataAsync:member(1)': +Office.MessageCompose#setSelectedDataAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/set-selected-data.yaml @@ -13342,7 +13342,7 @@ console.error(asyncResult.error); } }); -'Office.MessageCompose#subject:member': +Office.MessageCompose#subject:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml @@ -13369,7 +13369,7 @@ } console.log(`Successfully set subject to ${subject}`); }); -'Office.MessageCompose#to:member': +Office.MessageCompose#to:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml @@ -13403,7 +13403,7 @@ console.error(asyncResult.error); } }); -'Office.MessageRead:interface': +Office.MessageRead:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachments-read.yaml @@ -13424,7 +13424,7 @@ } else { console.log("This mail item doesn't contain any attachments."); } -'Office.MessageRead#attachments:member': +Office.MessageRead#attachments:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachments-read.yaml @@ -13445,7 +13445,7 @@ } else { console.log("This mail item doesn't contain any attachments."); } -'Office.MessageRead#categories:member': +Office.MessageRead#categories:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml @@ -13519,7 +13519,7 @@ console.error(asyncResult.error); } }); -'Office.MessageRead#cc:member': +Office.MessageRead#cc:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml @@ -13532,7 +13532,7 @@ for (let i = 0; i < msgCc.length; i++) { console.log(msgCc[i].displayName + " (" + msgCc[i].emailAddress + ")"); } -'Office.MessageRead#conversationId:member': +Office.MessageRead#conversationId:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml @@ -13540,7 +13540,7 @@ console.log(`Conversation ID: ${Office.context.mailbox.item.conversationId}`); -'Office.MessageRead#dateTimeCreated:member': +Office.MessageRead#dateTimeCreated:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml @@ -13548,7 +13548,7 @@ console.log(`Creation date and time: ${Office.context.mailbox.item.dateTimeCreated}`); -'Office.MessageRead#dateTimeModified:member': +Office.MessageRead#dateTimeModified:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml @@ -13556,7 +13556,7 @@ console.log(`Date and time item last modified: ${Office.context.mailbox.item.dateTimeModified}`); -'Office.MessageRead#display:member': +Office.MessageRead#display:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml @@ -13581,7 +13581,7 @@ console.log("Temporarily set the content displayed in the body."); }); -'Office.MessageRead#displayReplyAllForm:member(1)': +Office.MessageRead#displayReplyAllForm:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml @@ -13633,7 +13633,7 @@ console.log("Created a reply-all form with attachments."); } }); -'Office.MessageRead#displayReplyAllFormAsync:member(1)': +Office.MessageRead#displayReplyAllFormAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml @@ -13693,7 +13693,7 @@ console.log("Created a reply-all form with attachments."); } ); -'Office.MessageRead#displayReplyForm:member(1)': +Office.MessageRead#displayReplyForm:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml @@ -13745,7 +13745,7 @@ console.log("Created a reply with attachments."); } }); -'Office.MessageRead#displayReplyFormAsync:member(1)': +Office.MessageRead#displayReplyFormAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml @@ -13805,14 +13805,14 @@ console.log("Created reply with attachments."); } ); -'Office.MessageRead#end:member': +Office.MessageRead#end:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-end-read.yaml console.log(`Appointment ends: ${Office.context.mailbox.item.end}`); -'Office.MessageRead#from:member': +Office.MessageRead#from:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml @@ -13822,7 +13822,7 @@ console.log("Message received from: " + msgFrom.displayName + " (" + msgFrom.emailAddress + ")"); -'Office.MessageRead#getAllInternetHeadersAsync:member(1)': +Office.MessageRead#getAllInternetHeadersAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml @@ -13848,7 +13848,7 @@ console.log("Error getting internet headers: " + JSON.stringify(asyncResult.error)); } }); -'Office.MessageRead#getAsFileAsync:member(2)': +Office.MessageRead#getAsFileAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-eml-format.yaml @@ -13862,7 +13862,7 @@ console.log(asyncResult.value); }); -'Office.MessageRead#getAttachmentContentAsync:member(1)': +Office.MessageRead#getAttachmentContentAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml @@ -13885,7 +13885,7 @@ // Log the attachment type and its contents to the console. item.getAttachmentContentAsync(attachments[i].id, handleAttachmentsCallback); } -'Office.MessageRead#getRegExMatches:member(1)': +Office.MessageRead#getRegExMatches:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml @@ -13894,7 +13894,7 @@ // This API only works when you click on the highlighted word "ScriptLab". console.log(Office.context.mailbox.item.getRegExMatches()); -'Office.MessageRead#getRegExMatchesByName:member(1)': +Office.MessageRead#getRegExMatchesByName:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml @@ -13903,7 +13903,7 @@ // This API only works when you click on the highlighted word "ScriptLab". console.log(Office.context.mailbox.item.getRegExMatchesByName("sampleRegexName")); -'Office.MessageRead#getSelectedRegExMatches:member(1)': +Office.MessageRead#getSelectedRegExMatches:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml @@ -13916,7 +13916,7 @@ } else { console.error("Open add-in by clicking on a highlighted regex match, for this API to return something useful."); } -'Office.MessageRead#getSharedPropertiesAsync:member(2)': +Office.MessageRead#getSharedPropertiesAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml @@ -13932,7 +13932,7 @@ console.log(`Permissions: ${sharedProperties.delegatePermissions}`); console.log(`Target mailbox: ${sharedProperties.targetMailbox}`); }); -'Office.MessageRead#internetMessageId:member': +Office.MessageRead#internetMessageId:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml @@ -13940,14 +13940,14 @@ console.log(`Internet message ID: ${Office.context.mailbox.item.internetMessageId}`); -'Office.MessageRead#itemClass:member': +Office.MessageRead#itemClass:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-class-read.yaml console.log(`Item class: ${Office.context.mailbox.item.itemClass}`); -'Office.MessageRead#itemType:member': +Office.MessageRead#itemType:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml @@ -13963,7 +13963,7 @@ console.log(`Current item is a ${itemType}. A message could be an email, meeting request, meeting response, or meeting cancellation.`); break; } -'Office.MessageRead#loadCustomPropertiesAsync:member(1)': +Office.MessageRead#loadCustomPropertiesAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml @@ -13978,7 +13978,7 @@ customProps = result.value; console.log("Loaded the CustomProperties object."); }); -'Office.MessageRead#location:member': +Office.MessageRead#location:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-location-read.yaml @@ -13986,7 +13986,7 @@ console.log(`Appointment location: ${Office.context.mailbox.item.location}`); -'Office.MessageRead#normalizedSubject:member': +Office.MessageRead#normalizedSubject:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml @@ -13994,7 +13994,7 @@ console.log(`Normalized subject: ${Office.context.mailbox.item.normalizedSubject}`); -'Office.MessageRead#notificationMessages:member': +Office.MessageRead#notificationMessages:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml @@ -14098,7 +14098,7 @@ Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); -'Office.MessageRead#recurrence:member': +Office.MessageRead#recurrence:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-recurrence-read.yaml @@ -14114,7 +14114,7 @@ } else { console.log(JSON.stringify(recurrence)); } -'Office.MessageRead#sender:member': +Office.MessageRead#sender:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml @@ -14124,7 +14124,7 @@ console.log("Sender: " + msgSender.displayName + " (" + msgSender.emailAddress + ")"); -'Office.MessageRead#seriesId:member': +Office.MessageRead#seriesId:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml @@ -14140,21 +14140,21 @@ } else { console.log("This is an instance belonging to series with ID " + seriesId); } -'Office.MessageRead#start:member': +Office.MessageRead#start:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-start-read.yaml console.log(`Appointment starts: ${Office.context.mailbox.item.start}`); -'Office.MessageRead#subject:member': +Office.MessageRead#subject:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-subject-read.yaml console.log(`Subject: ${Office.context.mailbox.item.subject}`); -'Office.MessageRead#to:member': +Office.MessageRead#to:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml @@ -14209,7 +14209,7 @@ console.log("Other Recipients:"); otherRecipients.forEach((recipient) => console.log(`${recipient.displayName}, ${recipient.emailAddress}`)); } -'Office.NotificationMessageAction:interface': +Office.NotificationMessageAction:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml @@ -14241,7 +14241,7 @@ Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); -'Office.NotificationMessageDetails:interface': +Office.NotificationMessageDetails:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml @@ -14259,7 +14259,7 @@ console.log(asyncResult.value); }); -'Office.NotificationMessages#addAsync:member(1)': +Office.NotificationMessages#addAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml @@ -14332,7 +14332,7 @@ }; Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); -'Office.NotificationMessages#getAllAsync:member(1)': +Office.NotificationMessages#getAllAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml @@ -14350,7 +14350,7 @@ console.log(asyncResult.value); }); -'Office.NotificationMessages#removeAsync:member(1)': +Office.NotificationMessages#removeAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml @@ -14363,7 +14363,7 @@ Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); -'Office.NotificationMessages#replaceAsync:member(1)': +Office.NotificationMessages#replaceAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml @@ -14383,7 +14383,7 @@ persistent: false }, handleResult); -'Office.Organizer#getAsync:member(1)': +Office.Organizer#getAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml @@ -14397,7 +14397,7 @@ console.error(asyncResult.error); } }); -'Office.Recipients#getAsync:member(2)': +Office.Recipients#getAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml @@ -14492,7 +14492,7 @@ console.error(asyncResult.error); } }); -'Office.Recipients#setAsync:member(2)': +Office.Recipients#setAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml @@ -14580,7 +14580,7 @@ console.error(asyncResult.error); } }); -'Office.Recurrence#getAsync:member(1)': +Office.Recurrence#getAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml @@ -14598,7 +14598,7 @@ console.error(asyncResult.error); } }); -'Office.Recurrence#setAsync:member(1)': +Office.Recurrence#setAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml @@ -14650,7 +14650,7 @@ } console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); }); -'Office.ReplyFormAttachment:interface': +Office.ReplyFormAttachment:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml @@ -14699,7 +14699,7 @@ console.log("Created reply with attachments."); } ); -'Office.ReplyFormData:interface': +Office.ReplyFormData:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml @@ -14748,7 +14748,7 @@ console.log("Created reply with attachments."); } ); -'Office.RoamingSettings#get:member(1)': +Office.RoamingSettings#get:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/10-roaming-settings/roaming-settings.yaml @@ -14763,7 +14763,7 @@ settingValue; console.log(`The value of setting "${settingName}" is "${settingValue}".`); -'Office.RoamingSettings#remove:member(1)': +Office.RoamingSettings#remove:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/10-roaming-settings/roaming-settings.yaml @@ -14777,7 +14777,7 @@ Office.context.roamingSettings.remove(settingName); console.log(`The "${settingName}" setting has been removed.`); -'Office.RoamingSettings#saveAsync:member(1)': +Office.RoamingSettings#saveAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/10-roaming-settings/roaming-settings.yaml @@ -14792,7 +14792,7 @@ console.log(`Settings saved with status: ${result.status}`); } }); -'Office.RoamingSettings#set:member(1)': +Office.RoamingSettings#set:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/10-roaming-settings/roaming-settings.yaml @@ -14807,7 +14807,7 @@ Office.context.roamingSettings.set(settingName, settingValue); console.log(`Setting "${settingName}" set to value "${settingValue}".`); -'Office.SelectedItemDetails:interface': +Office.SelectedItemDetails:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-message-properties.yaml @@ -14831,7 +14831,7 @@ console.log(`Has attachment: ${message.hasAttachment}`); }); }); -'Office.Sensitivity#getAsync:member(2)': +Office.Sensitivity#getAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml @@ -14844,7 +14844,7 @@ console.log("Failed to get sensitivity: " + JSON.stringify(asyncResult.error)); } }); -'Office.Sensitivity#setAsync:member(1)': +Office.Sensitivity#setAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml @@ -14860,7 +14860,7 @@ } } ); -'Office.SensitivityLabel#getAsync:member(2)': +Office.SensitivityLabel#getAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-sensitivity-label/sensitivity-label.yaml @@ -14881,7 +14881,7 @@ console.log("Action failed with error: " + asyncResult.error.message); } }); -'Office.SensitivityLabel#setAsync:member(2)': +Office.SensitivityLabel#setAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-sensitivity-label/sensitivity-label.yaml @@ -14915,7 +14915,7 @@ console.log("Action failed with error: " + asyncResult.error.message); } }); -'Office.SensitivityLabelsCatalog#getAsync:member(2)': +Office.SensitivityLabelsCatalog#getAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml @@ -14938,7 +14938,7 @@ console.log("Action failed with error: " + asyncResult.error.message); } }); -'Office.SensitivityLabelsCatalog#getIsEnabledAsync:member(2)': +Office.SensitivityLabelsCatalog#getIsEnabledAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml @@ -14954,7 +14954,7 @@ console.log("Action failed with error: " + asyncResult.error.message); } }); -'Office.SessionData#clearAsync:member(1)': +Office.SessionData#clearAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/session-data-apis.yaml @@ -14967,7 +14967,7 @@ console.log("Failed to clear sessionData. Error: " + JSON.stringify(asyncResult.error)); } }); -'Office.SessionData#getAllAsync:member(1)': +Office.SessionData#getAllAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/session-data-apis.yaml @@ -14980,7 +14980,7 @@ console.log("Failed to get all sessionData. Error: " + JSON.stringify(asyncResult.error)); } }); -'Office.SessionData#getAsync:member(1)': +Office.SessionData#getAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/session-data-apis.yaml @@ -14995,7 +14995,7 @@ console.log("Failed to get sessionData. Error: " + JSON.stringify(asyncResult.error)); } }); -'Office.SessionData#removeAsync:member(1)': +Office.SessionData#removeAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/session-data-apis.yaml @@ -15011,7 +15011,7 @@ } } ); -'Office.SessionData#setAsync:member(1)': +Office.SessionData#setAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/session-data-apis.yaml @@ -15027,7 +15027,7 @@ console.log("Failed to set sessionData. Error: " + JSON.stringify(asyncResult.error)); } }); -'Office.SharedProperties:interface': +Office.SharedProperties:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml @@ -15043,7 +15043,7 @@ console.log(`Permissions: ${sharedProperties.delegatePermissions}`); console.log(`Target mailbox: ${sharedProperties.targetMailbox}`); }); -'Office.Time#getAsync:member(2)': +Office.Time#getAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml @@ -15056,7 +15056,7 @@ } console.log(`Appointment starts: ${result.value}`); }); -'Office.Time#setAsync:member(1)': +Office.Time#setAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml @@ -15094,7 +15094,7 @@ console.log(`Successfully set end date and time to ${end}`); }); }); -'PowerPoint.AddSlideOptions:interface': +PowerPoint.AddSlideOptions:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml @@ -15116,7 +15116,7 @@ context.presentation.slides.add(newSlideOptions); await context.sync(); }); -'PowerPoint.Binding:class': +PowerPoint.Binding:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml @@ -15131,7 +15131,7 @@ return shape; }); } -'PowerPoint.Binding#getShape:member(1)': +PowerPoint.Binding#getShape:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml @@ -15146,7 +15146,7 @@ return shape; }); } -'PowerPoint.BindingCollection:class': +PowerPoint.BindingCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml @@ -15180,7 +15180,7 @@ populateBindingsDropdown(bindings.items); }); -'PowerPoint.BindingCollection#add:member(1)': +PowerPoint.BindingCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml @@ -15216,7 +15216,7 @@ bindingsDropdown.selectedIndex = foundIndex; } }); -'PowerPoint.BindingCollection#getItem:member(1)': +PowerPoint.BindingCollection#getItem:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml @@ -15231,7 +15231,7 @@ return shape; }); } -'PowerPoint.BindingType:enum': +PowerPoint.BindingType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml @@ -15267,7 +15267,7 @@ bindingsDropdown.selectedIndex = foundIndex; } }); -'PowerPoint.BorderProperties:interface': +PowerPoint.BorderProperties:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -15296,7 +15296,7 @@ }); await context.sync(); }); -'PowerPoint.BorderProperties#color:member': +PowerPoint.BorderProperties#color:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -15325,7 +15325,7 @@ }); await context.sync(); }); -'PowerPoint.BorderProperties#dashStyle:member': +PowerPoint.BorderProperties#dashStyle:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -15354,7 +15354,7 @@ }); await context.sync(); }); -'PowerPoint.BorderProperties#weight:member': +PowerPoint.BorderProperties#weight:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -15383,7 +15383,7 @@ }); await context.sync(); }); -'PowerPoint.ConnectorType:enum': +PowerPoint.ConnectorType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml @@ -15411,7 +15411,7 @@ await context.sync(); }); -'PowerPoint.FillProperties:interface': +PowerPoint.FillProperties:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -15452,7 +15452,7 @@ }); await context.sync(); }); -'PowerPoint.FillProperties#color:member': +PowerPoint.FillProperties#color:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -15493,7 +15493,7 @@ }); await context.sync(); }); -'PowerPoint.FontProperties:interface': +PowerPoint.FontProperties:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -15534,7 +15534,7 @@ }); await context.sync(); }); -'PowerPoint.FontProperties#color:member': +PowerPoint.FontProperties#color:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -15575,7 +15575,7 @@ }); await context.sync(); }); -'PowerPoint.FontProperties#doubleStrikethrough:member': +PowerPoint.FontProperties#doubleStrikethrough:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -15616,7 +15616,7 @@ }); await context.sync(); }); -'PowerPoint.FontProperties#name:member': +PowerPoint.FontProperties#name:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -15657,7 +15657,7 @@ }); await context.sync(); }); -'PowerPoint.FontProperties#strikethrough:member': +PowerPoint.FontProperties#strikethrough:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -15698,7 +15698,7 @@ }); await context.sync(); }); -'PowerPoint.FontProperties#subscript:member': +PowerPoint.FontProperties#subscript:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -15739,7 +15739,7 @@ }); await context.sync(); }); -'PowerPoint.FontProperties#superscript:member': +PowerPoint.FontProperties#superscript:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -15780,7 +15780,7 @@ }); await context.sync(); }); -'PowerPoint.GeometricShapeType:enum': +PowerPoint.GeometricShapeType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml @@ -15805,7 +15805,7 @@ await context.sync(); }); -'PowerPoint.Hyperlink:class': +PowerPoint.Hyperlink:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml @@ -15824,7 +15824,7 @@ console.log(`Address: "${link.address}" (Screen tip: "${link.screenTip}")`); } }); -'PowerPoint.HyperlinkCollection:class': +PowerPoint.HyperlinkCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml @@ -15843,7 +15843,7 @@ console.log(`Address: "${link.address}" (Screen tip: "${link.screenTip}")`); } }); -'PowerPoint.InsertSlideFormatting:enum': +PowerPoint.InsertSlideFormatting:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/insert-slides.yaml @@ -15864,7 +15864,7 @@ presentation.insertSlidesFromBase64(chosenFileBase64, insertOptions); await context.sync(); }); -'PowerPoint.InsertSlideOptions:interface': +PowerPoint.InsertSlideOptions:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/insert-slides.yaml @@ -15885,7 +15885,7 @@ presentation.insertSlidesFromBase64(chosenFileBase64, insertOptions); await context.sync(); }); -'PowerPoint.ParagraphHorizontalAlignment:enum': +PowerPoint.ParagraphHorizontalAlignment:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -15910,7 +15910,7 @@ }); await context.sync(); }); -'PowerPoint.Presentation:class': +PowerPoint.Presentation:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/insert-slides.yaml @@ -15931,7 +15931,7 @@ presentation.insertSlidesFromBase64(chosenFileBase64, insertOptions); await context.sync(); }); -'PowerPoint.Presentation#getSelectedShapes:member(1)': +PowerPoint.Presentation#getSelectedShapes:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml @@ -16011,7 +16011,7 @@ savedShapeSelection.push(shape.id); }); }); -'PowerPoint.Presentation#getSelectedSlides:member(1)': +PowerPoint.Presentation#getSelectedSlides:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-set-slides.yaml @@ -16082,7 +16082,7 @@ outputSpan.innerHTML = "" outputSpan.innerHTML += finalTable; }); -'PowerPoint.Presentation#getSelectedTextRange:member(1)': +PowerPoint.Presentation#getSelectedTextRange:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml @@ -16138,7 +16138,7 @@ textRange.setSelected(); await context.sync(); }); -'PowerPoint.Presentation#insertSlidesFromBase64:member(1)': +PowerPoint.Presentation#insertSlidesFromBase64:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/insert-slides.yaml @@ -16159,7 +16159,7 @@ presentation.insertSlidesFromBase64(chosenFileBase64, insertOptions); await context.sync(); }); -'PowerPoint.Presentation#setSelectedSlides:member(1)': +PowerPoint.Presentation#setSelectedSlides:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-set-slides.yaml @@ -16197,7 +16197,7 @@ context.presentation.setSelectedSlides([slide2.id, slide4.id, slide5.id]); await context.sync(); }); -'PowerPoint.Presentation#bindings:member': +PowerPoint.Presentation#bindings:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml @@ -16231,7 +16231,7 @@ populateBindingsDropdown(bindings.items); }); -'PowerPoint.Shape:class': +PowerPoint.Shape:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -16253,7 +16253,7 @@ }); await context.sync(); }); -'PowerPoint.Shape#delete:member(1)': +PowerPoint.Shape#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml @@ -16276,7 +16276,7 @@ await context.sync(); }); -'PowerPoint.Shape#getTable:member(1)': +PowerPoint.Shape#getTable:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -16309,7 +16309,7 @@ } else console.log("Selected shape isn't table."); } else console.log("No shape selected."); }); -'PowerPoint.Shape#setZOrder:member(1)': +PowerPoint.Shape#setZOrder:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml @@ -16363,7 +16363,7 @@ } }); } -'PowerPoint.Shape#fill:member': +PowerPoint.Shape#fill:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml @@ -16381,7 +16381,7 @@ }); await context.sync(); }); -'PowerPoint.Shape#group:member': +PowerPoint.Shape#group:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/group-ungroup-shapes.yaml @@ -16411,7 +16411,7 @@ console.log(`Ungrouped shapes with group ID: ${firstGroupId}`); }); -'PowerPoint.Shape#height:member': +PowerPoint.Shape#height:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml @@ -16439,7 +16439,7 @@ currentLeft = 0; if (currentTop > slideHeight - 200) currentTop = 0; }); -'PowerPoint.Shape#left:member': +PowerPoint.Shape#left:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml @@ -16467,7 +16467,7 @@ currentLeft = 0; if (currentTop > slideHeight - 200) currentTop = 0; }); -'PowerPoint.Shape#top:member': +PowerPoint.Shape#top:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml @@ -16495,7 +16495,7 @@ currentLeft = 0; if (currentTop > slideHeight - 200) currentTop = 0; }); -'PowerPoint.Shape#type:member': +PowerPoint.Shape#type:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -16517,7 +16517,7 @@ }); await context.sync(); }); -'PowerPoint.Shape#width:member': +PowerPoint.Shape#width:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml @@ -16545,7 +16545,7 @@ currentLeft = 0; if (currentTop > slideHeight - 200) currentTop = 0; }); -'PowerPoint.Shape#zOrderPosition:member': +PowerPoint.Shape#zOrderPosition:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml @@ -16599,7 +16599,7 @@ } }); } -'PowerPoint.ShapeAddOptions:interface': +PowerPoint.ShapeAddOptions:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml @@ -16624,7 +16624,7 @@ await context.sync(); }); -'PowerPoint.ShapeCollection:class': +PowerPoint.ShapeCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -16646,7 +16646,7 @@ }); await context.sync(); }); -'PowerPoint.ShapeCollection#addGeometricShape:member(1)': +PowerPoint.ShapeCollection#addGeometricShape:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml @@ -16671,7 +16671,7 @@ await context.sync(); }); -'PowerPoint.ShapeCollection#addGroup:member(1)': +PowerPoint.ShapeCollection#addGroup:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/group-ungroup-shapes.yaml @@ -16701,7 +16701,7 @@ console.log(`Grouped shapes. Group ID: ${group.id}`); }); -'PowerPoint.ShapeCollection#addLine:member(1)': +PowerPoint.ShapeCollection#addLine:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml @@ -16729,7 +16729,7 @@ await context.sync(); }); -'PowerPoint.ShapeCollection#addTable:member(1)': +PowerPoint.ShapeCollection#addTable:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -16744,7 +16744,7 @@ shapes.addTable(3, 4); await context.sync(); }); -'PowerPoint.ShapeCollection#addTextBox:member(1)': +PowerPoint.ShapeCollection#addTextBox:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml @@ -16769,7 +16769,7 @@ return context.sync(); }); -'PowerPoint.ShapeCollection#getCount:member(1)': +PowerPoint.ShapeCollection#getCount:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -16802,7 +16802,7 @@ } else console.log("Selected shape isn't table."); } else console.log("No shape selected."); }); -'PowerPoint.ShapeCollection#getItemAt:member(1)': +PowerPoint.ShapeCollection#getItemAt:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml @@ -16822,7 +16822,7 @@ console.log("Added key " + JSON.stringify(myShapeTag.key) + " with value " + JSON.stringify(myShapeTag.value)); }); -'PowerPoint.ShapeCollection#load:member(2)': +PowerPoint.ShapeCollection#load:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -16844,7 +16844,7 @@ }); await context.sync(); }); -'PowerPoint.ShapeFill:class': +PowerPoint.ShapeFill:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -16866,7 +16866,7 @@ }); await context.sync(); }); -'PowerPoint.ShapeFill#setImage:member(1)': +PowerPoint.ShapeFill#setImage:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml @@ -16902,7 +16902,7 @@ bindingsDropdown.selectedIndex = foundIndex; } }); -'PowerPoint.ShapeFill#setSolidColor:member(1)': +PowerPoint.ShapeFill#setSolidColor:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml @@ -16920,7 +16920,7 @@ }); await context.sync(); }); -'PowerPoint.ShapeFill#foregroundColor:member': +PowerPoint.ShapeFill#foregroundColor:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml @@ -16950,7 +16950,7 @@ outputSpan.innerHTML = ""; outputSpan.innerHTML += finalTable; }); -'PowerPoint.ShapeFill#transparency:member': +PowerPoint.ShapeFill#transparency:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -16972,7 +16972,7 @@ }); await context.sync(); }); -'PowerPoint.ShapeFont:class': +PowerPoint.ShapeFont:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml @@ -16985,7 +16985,7 @@ textRange.font.color = "green"; await context.sync(); }); -'PowerPoint.ShapeFont#color:member': +PowerPoint.ShapeFont#color:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml @@ -16998,7 +16998,7 @@ textRange.font.color = "green"; await context.sync(); }); -'PowerPoint.ShapeGroup:class': +PowerPoint.ShapeGroup:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/group-ungroup-shapes.yaml @@ -17028,7 +17028,7 @@ console.log(`Ungrouped shapes with group ID: ${firstGroupId}`); }); -'PowerPoint.ShapeGroup#ungroup:member(1)': +PowerPoint.ShapeGroup#ungroup:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/group-ungroup-shapes.yaml @@ -17058,7 +17058,7 @@ console.log(`Ungrouped shapes with group ID: ${firstGroupId}`); }); -'PowerPoint.ShapeLineDashStyle:enum': +PowerPoint.ShapeLineDashStyle:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -17080,7 +17080,7 @@ }); await context.sync(); }); -'PowerPoint.ShapeLineFormat:class': +PowerPoint.ShapeLineFormat:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -17102,7 +17102,7 @@ }); await context.sync(); }); -'PowerPoint.ShapeLineFormat#dashStyle:member': +PowerPoint.ShapeLineFormat#dashStyle:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -17124,7 +17124,7 @@ }); await context.sync(); }); -'PowerPoint.ShapeScopedCollection:class': +PowerPoint.ShapeScopedCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml @@ -17142,7 +17142,7 @@ }); await context.sync(); }); -'PowerPoint.ShapeScopedCollection#getCount:member(1)': +PowerPoint.ShapeScopedCollection#getCount:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml @@ -17169,7 +17169,7 @@ outputSpan.innerHTML = ""; outputSpan.innerHTML += finalTable; }); -'PowerPoint.ShapeType:enum': +PowerPoint.ShapeType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -17191,7 +17191,7 @@ }); await context.sync(); }); -'PowerPoint.ShapeZOrder:enum': +PowerPoint.ShapeZOrder:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml @@ -17253,7 +17253,7 @@ } }); } -'PowerPoint.Slide:class': +PowerPoint.Slide:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml @@ -17267,7 +17267,7 @@ slide1.setSelectedShapes(savedShapeSelection); await context.sync(); }); -'PowerPoint.Slide#delete:member(1)': +PowerPoint.Slide#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-set-slides.yaml @@ -17286,7 +17286,7 @@ slide.delete(); }); }); -'PowerPoint.Slide#exportAsBase64:member(1)': +PowerPoint.Slide#exportAsBase64:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/export-import-slide.yaml @@ -17307,7 +17307,7 @@ console.log("Slide was exported."); }); -'PowerPoint.Slide#getImageAsBase64:member(1)': +PowerPoint.Slide#getImageAsBase64:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/export-import-slide.yaml @@ -17328,7 +17328,7 @@ console.log("Slide was exported."); }); -'PowerPoint.Slide#setSelectedShapes:member(1)': +PowerPoint.Slide#setSelectedShapes:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml @@ -17367,7 +17367,7 @@ slide1.setSelectedShapes([shape1.id, shape2.id]); await context.sync(); }); -'PowerPoint.SlideCollection:class': +PowerPoint.SlideCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml @@ -17389,7 +17389,7 @@ context.presentation.slides.add(newSlideOptions); await context.sync(); }); -'PowerPoint.SlideCollection#add:member(1)': +PowerPoint.SlideCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml @@ -17411,7 +17411,7 @@ context.presentation.slides.add(newSlideOptions); await context.sync(); }); -'PowerPoint.SlideCollection#getItemAt:member(1)': +PowerPoint.SlideCollection#getItemAt:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-set-slides.yaml @@ -17438,7 +17438,7 @@ context.presentation.setSelectedSlides([slide2.id, slide4.id, slide5.id]); await context.sync(); }); -'PowerPoint.SlideGetImageOptions:interface': +PowerPoint.SlideGetImageOptions:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/export-import-slide.yaml @@ -17459,7 +17459,7 @@ console.log("Slide was exported."); }); -'PowerPoint.SlideLayout:class': +PowerPoint.SlideLayout:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml @@ -17482,7 +17482,7 @@ } } }); -'PowerPoint.SlideLayout#id:member': +PowerPoint.SlideLayout#id:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml @@ -17505,7 +17505,7 @@ } } }); -'PowerPoint.SlideLayoutCollection:class': +PowerPoint.SlideLayoutCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml @@ -17528,7 +17528,7 @@ } } }); -'PowerPoint.SlideLayoutCollection#load:member(2)': +PowerPoint.SlideLayoutCollection#load:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml @@ -17551,7 +17551,7 @@ } } }); -'PowerPoint.SlideMaster:class': +PowerPoint.SlideMaster:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml @@ -17574,7 +17574,7 @@ } } }); -'PowerPoint.SlideMaster#id:member': +PowerPoint.SlideMaster#id:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml @@ -17597,7 +17597,7 @@ } } }); -'PowerPoint.SlideMasterCollection:class': +PowerPoint.SlideMasterCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml @@ -17620,7 +17620,7 @@ } } }); -'PowerPoint.SlideMasterCollection#load:member(2)': +PowerPoint.SlideMasterCollection#load:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml @@ -17643,7 +17643,7 @@ } } }); -'PowerPoint.SlideScopedCollection:class': +PowerPoint.SlideScopedCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml @@ -17670,7 +17670,7 @@ savedShapeSelection.push(shape.id); }); }); -'PowerPoint.Table:class': +PowerPoint.Table:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -17697,7 +17697,7 @@ await context.sync(); }); -'PowerPoint.Table#getCellOrNullObject:member(1)': +PowerPoint.Table#getCellOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -17724,7 +17724,7 @@ await context.sync(); }); -'PowerPoint.TableAddOptions:interface': +PowerPoint.TableAddOptions:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -17742,7 +17742,7 @@ }); await context.sync(); }); -'PowerPoint.TableAddOptions#columns:member': +PowerPoint.TableAddOptions#columns:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -17760,7 +17760,7 @@ }); await context.sync(); }); -'PowerPoint.TableAddOptions#height:member': +PowerPoint.TableAddOptions#height:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -17778,7 +17778,7 @@ }); await context.sync(); }); -'PowerPoint.TableAddOptions#mergedAreas:member': +PowerPoint.TableAddOptions#mergedAreas:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -17800,7 +17800,7 @@ }); await context.sync(); }); -'PowerPoint.TableAddOptions#rows:member': +PowerPoint.TableAddOptions#rows:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -17818,7 +17818,7 @@ }); await context.sync(); }); -'PowerPoint.TableAddOptions#specificCellProperties:member': +PowerPoint.TableAddOptions#specificCellProperties:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -17859,7 +17859,7 @@ }); await context.sync(); }); -'PowerPoint.TableAddOptions#uniformCellProperties:member': +PowerPoint.TableAddOptions#uniformCellProperties:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -17888,7 +17888,7 @@ }); await context.sync(); }); -'PowerPoint.TableAddOptions#values:member': +PowerPoint.TableAddOptions#values:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -17909,7 +17909,7 @@ }); await context.sync(); }); -'PowerPoint.TableAddOptions#width:member': +PowerPoint.TableAddOptions#width:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -17927,7 +17927,7 @@ }); await context.sync(); }); -'PowerPoint.TableCell:class': +PowerPoint.TableCell:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -17954,7 +17954,7 @@ await context.sync(); }); -'PowerPoint.TableCell#text:member': +PowerPoint.TableCell#text:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -17981,7 +17981,7 @@ await context.sync(); }); -'PowerPoint.TableCellBorders:interface': +PowerPoint.TableCellBorders:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18010,7 +18010,7 @@ }); await context.sync(); }); -'PowerPoint.TableCellBorders#bottom:member': +PowerPoint.TableCellBorders#bottom:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18039,7 +18039,7 @@ }); await context.sync(); }); -'PowerPoint.TableCellBorders#left:member': +PowerPoint.TableCellBorders#left:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18068,7 +18068,7 @@ }); await context.sync(); }); -'PowerPoint.TableCellBorders#right:member': +PowerPoint.TableCellBorders#right:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18097,7 +18097,7 @@ }); await context.sync(); }); -'PowerPoint.TableCellBorders#top:member': +PowerPoint.TableCellBorders#top:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18126,7 +18126,7 @@ }); await context.sync(); }); -'PowerPoint.TableCellProperties:interface': +PowerPoint.TableCellProperties:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18167,7 +18167,7 @@ }); await context.sync(); }); -'PowerPoint.TableCellProperties#borders:member': +PowerPoint.TableCellProperties#borders:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18196,7 +18196,7 @@ }); await context.sync(); }); -'PowerPoint.TableCellProperties#fill:member': +PowerPoint.TableCellProperties#fill:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18237,7 +18237,7 @@ }); await context.sync(); }); -'PowerPoint.TableCellProperties#font:member': +PowerPoint.TableCellProperties#font:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18278,7 +18278,7 @@ }); await context.sync(); }); -'PowerPoint.TableCellProperties#horizontalAlignment:member': +PowerPoint.TableCellProperties#horizontalAlignment:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18303,7 +18303,7 @@ }); await context.sync(); }); -'PowerPoint.TableCellProperties#indentLevel:member': +PowerPoint.TableCellProperties#indentLevel:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18329,7 +18329,7 @@ }); await context.sync(); }); -'PowerPoint.TableCellProperties#textRuns:member': +PowerPoint.TableCellProperties#textRuns:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18378,7 +18378,7 @@ }); await context.sync(); }); -'PowerPoint.TableCellProperties#verticalAlignment:member': +PowerPoint.TableCellProperties#verticalAlignment:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18403,7 +18403,7 @@ }); await context.sync(); }); -'PowerPoint.TableColumnProperties:interface': +PowerPoint.TableColumnProperties:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18421,7 +18421,7 @@ }); await context.sync(); }); -'PowerPoint.TableColumnProperties#columnWidth:member': +PowerPoint.TableColumnProperties#columnWidth:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18439,7 +18439,7 @@ }); await context.sync(); }); -'PowerPoint.TableMergedAreaProperties:interface': +PowerPoint.TableMergedAreaProperties:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18461,7 +18461,7 @@ }); await context.sync(); }); -'PowerPoint.TableMergedAreaProperties#columnCount:member': +PowerPoint.TableMergedAreaProperties#columnCount:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18483,7 +18483,7 @@ }); await context.sync(); }); -'PowerPoint.TableMergedAreaProperties#columnIndex:member': +PowerPoint.TableMergedAreaProperties#columnIndex:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18505,7 +18505,7 @@ }); await context.sync(); }); -'PowerPoint.TableMergedAreaProperties#rowCount:member': +PowerPoint.TableMergedAreaProperties#rowCount:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18527,7 +18527,7 @@ }); await context.sync(); }); -'PowerPoint.TableMergedAreaProperties#rowIndex:member': +PowerPoint.TableMergedAreaProperties#rowIndex:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18549,7 +18549,7 @@ }); await context.sync(); }); -'PowerPoint.TableRowProperties:interface': +PowerPoint.TableRowProperties:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18567,7 +18567,7 @@ }); await context.sync(); }); -'PowerPoint.TableRowProperties#rowHeight:member': +PowerPoint.TableRowProperties#rowHeight:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18585,7 +18585,7 @@ }); await context.sync(); }); -'PowerPoint.Tag:class': +PowerPoint.Tag:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml @@ -18604,7 +18604,7 @@ console.log("Added key " + JSON.stringify(tag.key) + " with value " + JSON.stringify(tag.value)); }); -'PowerPoint.TagCollection:class': +PowerPoint.TagCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml @@ -18628,7 +18628,7 @@ console.log("Added key " + JSON.stringify(audienceTag.key) + " with value " + JSON.stringify(audienceTag.value)); }); -'PowerPoint.TagCollection#add:member(1)': +PowerPoint.TagCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml @@ -18650,7 +18650,7 @@ console.log("Added key " + JSON.stringify(slide.tags.items[i].key) + " with value " + JSON.stringify(slide.tags.items[i].value)); } }); -'PowerPoint.TagCollection#delete:member(1)': +PowerPoint.TagCollection#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml @@ -18665,7 +18665,7 @@ console.log(JSON.stringify(presentationTags)); }); -'PowerPoint.TagCollection#getItem:member(1)': +PowerPoint.TagCollection#getItem:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml @@ -18689,7 +18689,7 @@ console.log("Added key " + JSON.stringify(audienceTag.key) + " with value " + JSON.stringify(audienceTag.value)); }); -'PowerPoint.TextFrame:class': +PowerPoint.TextFrame:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml @@ -18723,7 +18723,7 @@ textRange10.setSelected(); await context.sync(); }); -'PowerPoint.TextRange:class': +PowerPoint.TextRange:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml @@ -18736,7 +18736,7 @@ textRange.font.color = "green"; await context.sync(); }); -'PowerPoint.TextRange#font:member': +PowerPoint.TextRange#font:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml @@ -18749,7 +18749,7 @@ textRange.font.color = "green"; await context.sync(); }); -'PowerPoint.TextRange#setSelected:member(1)': +PowerPoint.TextRange#setSelected:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml @@ -18797,7 +18797,7 @@ textRange.setSelected(); await context.sync(); }); -'PowerPoint.TextRun:interface': +PowerPoint.TextRun:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18846,7 +18846,7 @@ }); await context.sync(); }); -'PowerPoint.TextVerticalAlignment:enum': +PowerPoint.TextVerticalAlignment:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml @@ -18875,7 +18875,7 @@ return context.sync(); }); -'Word.Alignment:enum': +Word.Alignment:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml @@ -18897,7 +18897,7 @@ body.paragraphs.getFirst().alignment = "Left"; body.paragraphs.getLast().alignment = Word.Alignment.left; }); -'Word.Annotation:class': +Word.Annotation:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -18924,7 +18924,7 @@ } } }); -'Word.Annotation#delete:member(1)': +Word.Annotation#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -18951,7 +18951,7 @@ console.log("Annotations deleted:", ids); }); -'Word.Annotation#critiqueAnnotation:member': +Word.Annotation#critiqueAnnotation:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -18974,7 +18974,7 @@ console.log(`ID ${annotation.id} - state '${annotation.state}':`, annotation.critiqueAnnotation.critique); } }); -'Word.Annotation#id:member': +Word.Annotation#id:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -19001,7 +19001,7 @@ } } }); -'Word.Annotation#state:member': +Word.Annotation#state:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -19028,7 +19028,7 @@ } } }); -'Word.AnnotationClickedEventArgs:interface': +Word.AnnotationClickedEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -19065,7 +19065,7 @@ console.log(`AnnotationClicked: ID ${args.id}:`, annotation.critiqueAnnotation.critique); }); } -'Word.AnnotationCollection:class': +Word.AnnotationCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -19088,7 +19088,7 @@ console.log(`ID ${annotation.id} - state '${annotation.state}':`, annotation.critiqueAnnotation.critique); } }); -'Word.AnnotationHoveredEventArgs:interface': +Word.AnnotationHoveredEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -19125,7 +19125,7 @@ console.log(`AnnotationHovered: ID ${args.id}:`, annotation.critiqueAnnotation.critique); }); } -'Word.AnnotationInsertedEventArgs:interface': +Word.AnnotationInsertedEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -19169,7 +19169,7 @@ } }); } -'Word.AnnotationPopupActionEventArgs:interface': +Word.AnnotationPopupActionEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -19209,7 +19209,7 @@ console.log(message); }); } -'Word.AnnotationRemovedEventArgs:interface': +Word.AnnotationRemovedEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -19243,7 +19243,7 @@ } }); } -'Word.AnnotationSet:interface': +Word.AnnotationSet:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -19299,7 +19299,7 @@ console.log("Annotations inserted:", annotationIds.value); }); -'Word.AnnotationState:enum': +Word.AnnotationState:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -19326,7 +19326,7 @@ } } }); -'Word.Application:class': +Word.Application:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml @@ -19355,7 +19355,7 @@ currentDocBody.insertText(externalDocBodyText, Word.InsertLocation.start); await context.sync(); }); -'Word.Application#createDocument:member(1)': +Word.Application#createDocument:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml @@ -19384,7 +19384,7 @@ currentDocBody.insertText(externalDocBodyText, Word.InsertLocation.start); await context.sync(); }); -'Word.Application#retrieveStylesFromBase64:member(1)': +Word.Application#retrieveStylesFromBase64:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/get-external-styles.yaml @@ -19399,7 +19399,7 @@ console.log("Styles from the other document:", retrievedStyles.value); }); -'Word.Body#clear:member(1)': +Word.Body#clear:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml @@ -19424,7 +19424,7 @@ clear the contents of a document. // https://aka.ms/sillystorywordaddin -'Word.Body#getComments:member(1)': +Word.Body#getComments:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -19441,7 +19441,7 @@ console.log("All comments:", comments); }); -'Word.Body#getHtml:member(1)': +Word.Body#getHtml:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml @@ -19463,7 +19463,7 @@ console.log("Body contents (HTML): " + bodyHTML.value); }); -'Word.Body#getOoxml:member(1)': +Word.Body#getOoxml:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml @@ -19485,7 +19485,7 @@ console.log("Body contents (OOXML): " + bodyOOXML.value); }); -'Word.Body#getTrackedChanges:member(1)': +Word.Body#getTrackedChanges:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml @@ -19501,7 +19501,7 @@ console.log(trackedChanges); }); -'Word.Body#insertBreak:member(1)': +Word.Body#insertBreak:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml @@ -19523,7 +19523,7 @@ console.log("Added a page break at the start of the document body."); }); -'Word.Body#insertContentControl:member(1)': +Word.Body#insertContentControl:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml @@ -19545,7 +19545,7 @@ console.log("Wrapped the body in a content control."); }); -'Word.Body#insertFileFromBase64:member(1)': +Word.Body#insertFileFromBase64:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml @@ -19568,7 +19568,7 @@ console.log("Added Base64-encoded text to the beginning of the document body."); }); -'Word.Body#insertHtml:member(1)': +Word.Body#insertHtml:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml @@ -19590,7 +19590,7 @@ console.log("HTML added to the beginning of the document body."); }); -'Word.Body#insertInlinePictureFromBase64:member(1)': +Word.Body#insertInlinePictureFromBase64:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml @@ -19616,7 +19616,7 @@ console.log("Added a Base64-encoded image to the beginning of the document body."); }); -'Word.Body#insertOoxml:member(1)': +Word.Body#insertOoxml:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml @@ -19654,7 +19654,7 @@ assemble a document. // https://github.com/OfficeDev/Word-Add-in-DocumentAssembly -'Word.Body#insertParagraph:member(1)': +Word.Body#insertParagraph:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-formatted-text.yaml @@ -19676,7 +19676,7 @@ await context.sync(); }); -'Word.Body#insertTable:member(1)': +Word.Body#insertTable:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml @@ -19694,7 +19694,7 @@ await context.sync(); }); -'Word.Body#insertText:member(1)': +Word.Body#insertText:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml @@ -19716,7 +19716,7 @@ console.log("Text added to the beginning of the document body."); }); -'Word.Body#search:member(1)': +Word.Body#search:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/search.yaml @@ -19759,7 +19759,7 @@ await context.sync(); }); -'Word.Body#select:member(1)': +Word.Body#select:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml @@ -19779,7 +19779,7 @@ console.log("Selected the document body."); }); -'Word.Body#fields:member': +Word.Body#fields:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -19803,7 +19803,7 @@ } } }); -'Word.Body#font:member': +Word.Body#font:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml @@ -19837,7 +19837,7 @@ console.log(results); }); -'Word.Body#footnotes:member': +Word.Body#footnotes:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml @@ -19852,7 +19852,7 @@ console.log("Number of footnotes in the document body: " + footnotes.items.length); }); -'Word.Body#inlinePictures:member': +Word.Body#inlinePictures:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml @@ -19872,7 +19872,7 @@ await context.sync(); console.log(base64.value); }); -'Word.Body#lists:member': +Word.Body#lists:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml @@ -19909,7 +19909,7 @@ console.log(`- Level ${i + 1} (index ${i}): ${levelExistences[i]}`); } }); -'Word.Body#onCommentAdded:member': +Word.Body#onCommentAdded:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml @@ -19942,7 +19942,7 @@ console.log(`${event.type} event detected. Event source: ${event.source}. Comment info:`, event.commentDetails); }); } -'Word.Body#onCommentChanged:member': +Word.Body#onCommentChanged:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml @@ -19976,7 +19976,7 @@ ); }); } -'Word.Body#onCommentDeleted:member': +Word.Body#onCommentDeleted:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml @@ -20009,7 +20009,7 @@ console.log(`${event.type} event detected. Event source: ${event.source}. Comment info:`, event.commentDetails); }); } -'Word.Body#onCommentDeselected:member': +Word.Body#onCommentDeselected:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml @@ -20042,7 +20042,7 @@ console.log(`${event.type} event detected. Event source: ${event.source}. Comment info:`, event.commentDetails); }); } -'Word.Body#onCommentSelected:member': +Word.Body#onCommentSelected:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml @@ -20075,7 +20075,7 @@ console.log(`${event.type} event detected. Event source: ${event.source}. Comment info:`, event.commentDetails); }); } -'Word.Body#paragraphs:member': +Word.Body#paragraphs:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-word-count.yaml @@ -20129,7 +20129,7 @@ console.log("Search term: " + result.searchTerm + " => Count: " + length); }); }); -'Word.Body#shapes:member': +Word.Body#shapes:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml @@ -20151,7 +20151,7 @@ console.log("No shapes found in main document."); } }); -'Word.Body#tables:member': +Word.Body#tables:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml @@ -20166,7 +20166,7 @@ await context.sync(); console.log("First cell's text is: " + firstCell.text); }); -'Word.Body#text:member': +Word.Body#text:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml @@ -20188,7 +20188,7 @@ console.log("Body contents (text): " + body.text); }); -'Word.Body#type:member': +Word.Body#type:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml @@ -20212,7 +20212,7 @@ console.log(`Body type of note: ${item.body.type}`); }); -'Word.BodyType:enum': +Word.BodyType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml @@ -20236,7 +20236,7 @@ console.log(`Body type of note: ${item.body.type}`); }); -'Word.Border:class': +Word.Border:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -20269,7 +20269,7 @@ console.log("Updated outside borders."); } }); -'Word.BorderCollection:class': +Word.BorderCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -20302,7 +20302,7 @@ console.log("Updated outside borders."); } }); -'Word.BorderCollection#outsideBorderColor:member': +Word.BorderCollection#outsideBorderColor:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -20335,7 +20335,7 @@ console.log("Updated outside borders."); } }); -'Word.BorderCollection#outsideBorderType:member': +Word.BorderCollection#outsideBorderType:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -20368,7 +20368,7 @@ console.log("Updated outside borders."); } }); -'Word.BorderCollection#outsideBorderWidth:member': +Word.BorderCollection#outsideBorderWidth:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -20401,7 +20401,7 @@ console.log("Updated outside borders."); } }); -'Word.BorderLocation:enum': +Word.BorderLocation:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -20418,7 +20418,7 @@ console.log(`Details about the ${borderLocation} border of the first table:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); -'Word.BorderType:enum': +Word.BorderType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -20436,7 +20436,7 @@ console.log(`Details about the ${borderLocation} border of the first table's first cell:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); -'Word.BorderWidth:enum': +Word.BorderWidth:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -20469,7 +20469,7 @@ console.log("Updated outside borders."); } }); -'Word.BreakType:enum': +Word.BreakType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-line-and-page-breaks.yaml @@ -20481,7 +20481,7 @@ await context.sync(); console.log("success"); }); -'Word.BuiltInStyleName:enum': +Word.BuiltInStyleName:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-formatted-text.yaml @@ -20498,7 +20498,7 @@ await context.sync(); }); -'Word.CellPaddingLocation:enum': +Word.CellPaddingLocation:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -20516,7 +20516,7 @@ `Cell padding details about the ${cellPaddingLocation} border of the first table: ${cellPadding.value} points` ); }); -'Word.ChangeTrackingMode:enum': +Word.ChangeTrackingMode:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml @@ -20537,7 +20537,7 @@ console.log("No changes are being tracked."); } }); -'Word.ChangeTrackingState:enum': +Word.ChangeTrackingState:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/get-change-tracking-states.yaml @@ -20565,7 +20565,7 @@ console.log(`Number of content controls in Deleted state: ${deletedContentControls.items.length}`); console.log(`Number of content controls in Normal state: ${normalContentControls.items.length}`); }); -'Word.ChangeTrackingVersion:enum': +Word.ChangeTrackingVersion:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml @@ -20582,7 +20582,7 @@ console.log("Reviewed text (before):", before.value, "Reviewed text (after):", after.value); }); -'Word.CheckboxContentControl:class': +Word.CheckboxContentControl:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml @@ -20636,7 +20636,7 @@ ); } }); -'Word.CloseBehavior:enum': +Word.CloseBehavior:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/save-close.yaml @@ -20647,7 +20647,7 @@ await Word.run(async (context) => { context.document.close(Word.CloseBehavior.save); }); -'Word.ComboBoxContentControl:class': +Word.ComboBoxContentControl:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml @@ -20662,7 +20662,7 @@ console.log("Combo box content control inserted at the end of the selection."); }); -'Word.ComboBoxContentControl#addListItem:member(1)': +Word.ComboBoxContentControl#addListItem:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml @@ -20700,7 +20700,7 @@ console.log(`List item added to control with ID ${selectedContentControl.id}: ${listItemText}`); }); -'Word.ComboBoxContentControl#deleteAllListItems:member(1)': +Word.ComboBoxContentControl#deleteAllListItems:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml @@ -20738,7 +20738,7 @@ console.log("Deleted the list from the combo box content control."); }); -'Word.ComboBoxContentControl#listItems:member': +Word.ComboBoxContentControl#listItems:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml @@ -20787,7 +20787,7 @@ console.log(`List item deleted from control with ID ${selectedContentControl.id}: ${listItemText}`); }); -'Word.Comment:class': +Word.Comment:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -20805,7 +20805,7 @@ console.log("Comment inserted:", comment); }); -'Word.Comment#delete:member(1)': +Word.Comment#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -20825,7 +20825,7 @@ console.log("Comment deleted."); }); -'Word.Comment#getRange:member(1)': +Word.Comment#getRange:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -20849,7 +20849,7 @@ const contentRange: Word.CommentContentRange = comment.contentRange; console.log("Comment content range:", contentRange); }); -'Word.Comment#reply:member(1)': +Word.Comment#reply:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -20871,7 +20871,7 @@ console.warn("No active comment was found in the selection, so couldn't reply."); } }); -'Word.Comment#content:member': +Word.Comment#content:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -20899,7 +20899,7 @@ console.log("Comment content changed:", firstActiveComment); }); -'Word.Comment#contentRange:member': +Word.Comment#contentRange:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -20923,7 +20923,7 @@ const contentRange: Word.CommentContentRange = comment.contentRange; console.log("Comment content range:", contentRange); }); -'Word.Comment#replies:member': +Word.Comment#replies:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -20944,7 +20944,7 @@ const replies: Word.CommentReplyCollection = comment.replies; console.log("Replies to the first comment:", replies); }); -'Word.Comment#resolved:member': +Word.Comment#resolved:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -20976,7 +20976,7 @@ console.log(`Comment Resolved status (after): ${comment.resolved}`); }); -'Word.CommentChangeType:enum': +Word.CommentChangeType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml @@ -21010,7 +21010,7 @@ ); }); } -'Word.CommentCollection:class': +Word.CommentCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -21032,7 +21032,7 @@ console.warn("No active comment was found in the selection, so couldn't reply."); } }); -'Word.CommentCollection#getFirstOrNullObject:member(1)': +Word.CommentCollection#getFirstOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -21056,7 +21056,7 @@ const contentRange: Word.CommentContentRange = comment.contentRange; console.log("Comment content range:", contentRange); }); -'Word.CommentCollection#items:member': +Word.CommentCollection#items:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -21078,7 +21078,7 @@ console.warn("No active comment was found in the selection, so couldn't reply."); } }); -'Word.CommentContentRange:class': +Word.CommentContentRange:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -21102,7 +21102,7 @@ const contentRange: Word.CommentContentRange = comment.contentRange; console.log("Comment content range:", contentRange); }); -'Word.CommentDetail:interface': +Word.CommentDetail:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml @@ -21135,7 +21135,7 @@ console.log(`${event.type} event detected. Event source: ${event.source}. Comment info:`, event.commentDetails); }); } -'Word.CommentEventArgs:interface': +Word.CommentEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml @@ -21169,7 +21169,7 @@ ); }); } -'Word.CommentReply:class': +Word.CommentReply:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -21191,7 +21191,7 @@ console.warn("No active comment was found in the selection, so couldn't reply."); } }); -'Word.CommentReplyCollection:class': +Word.CommentReplyCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -21212,7 +21212,7 @@ const replies: Word.CommentReplyCollection = comment.replies; console.log("Replies to the first comment:", replies); }); -'Word.CompareTarget:enum': +Word.CompareTarget:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/compare-documents.yaml @@ -21235,7 +21235,7 @@ console.log("Differences shown in the current document."); }); -'Word.ContentControl#delete:member(1)': +Word.ContentControl#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondeleted-event.yaml @@ -21254,7 +21254,7 @@ await context.sync(); } }); -'Word.ContentControl#resetState:member(1)': +Word.ContentControl#resetState:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-content-controls.yaml @@ -21277,7 +21277,7 @@ console.log(`Reset state of first content control with ID: ${firstContentControl.id}`); }); -'Word.ContentControl#set:member(1)': +Word.ContentControl#set:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-content-controls.yaml @@ -21317,7 +21317,7 @@ await context.sync(); }); -'Word.ContentControl#setState:member(1)': +Word.ContentControl#setState:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-content-controls.yaml @@ -21342,7 +21342,7 @@ console.log(`Set state of first content control with ID ${firstContentControl.id} to ${state}.`); }); -'Word.ContentControl#checkboxContentControl:member': +Word.ContentControl#checkboxContentControl:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml @@ -21386,7 +21386,7 @@ `id: ${selectedContentControl.id} ... isChecked: ${selectedContentControl.checkboxContentControl.isChecked}` ); }); -'Word.ContentControl#comboBoxContentControl:member': +Word.ContentControl#comboBoxContentControl:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml @@ -21424,7 +21424,7 @@ console.log(`List item added to control with ID ${selectedContentControl.id}: ${listItemText}`); }); -'Word.ContentControl#dropDownListContentControl:member': +Word.ContentControl#dropDownListContentControl:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml @@ -21462,7 +21462,7 @@ console.log(`List item added to control with ID ${selectedContentControl.id}: ${listItemText}`); }); -'Word.ContentControl#onDataChanged:member': +Word.ContentControl#onDataChanged:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondatachanged-event.yaml @@ -21498,7 +21498,7 @@ console.log(`${event.eventType} event detected. IDs of content controls where data was changed:`, event.ids); }); } -'Word.ContentControl#onDeleted:member': +Word.ContentControl#onDeleted:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondeleted-event.yaml @@ -21534,7 +21534,7 @@ console.log(`${event.eventType} event detected. IDs of content controls that were deleted:`, event.ids); }); } -'Word.ContentControl#onEntered:member': +Word.ContentControl#onEntered:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onentered-event.yaml @@ -21570,7 +21570,7 @@ console.log(`${event.eventType} event detected. ID of content control that was entered: ${event.ids[0]}`); }); } -'Word.ContentControl#onExited:member': +Word.ContentControl#onExited:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onexited-event.yaml @@ -21606,7 +21606,7 @@ console.log(`${event.eventType} event detected. ID of content control that was exited: ${event.ids[0]}`); }); } -'Word.ContentControl#onSelectionChanged:member': +Word.ContentControl#onSelectionChanged:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml @@ -21641,7 +21641,7 @@ console.log(`${event.eventType} event detected. IDs of content controls where selection was changed:`, event.ids); }); } -'Word.ContentControl#tag:member': +Word.ContentControl#tag:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-content-controls.yaml @@ -21669,7 +21669,7 @@ await context.sync(); }); -'Word.ContentControlAddedEventArgs:interface': +Word.ContentControlAddedEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onadded-event.yaml @@ -21694,7 +21694,7 @@ console.log(`${event.eventType} event detected. IDs of content controls that were added:`, event.ids); }); } -'Word.ContentControlAppearance:enum': +Word.ContentControlAppearance:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-content-controls.yaml @@ -21734,7 +21734,7 @@ await context.sync(); }); -'Word.ContentControlCollection:class': +Word.ContentControlCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml @@ -21752,7 +21752,7 @@ await context.sync(); }); -'Word.ContentControlCollection#getByTag:member(1)': +Word.ContentControlCollection#getByTag:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml @@ -21770,7 +21770,7 @@ await context.sync(); }); -'Word.ContentControlCollection#getFirstOrNullObject:member(1)': +Word.ContentControlCollection#getFirstOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml @@ -21814,7 +21814,7 @@ `id: ${selectedContentControl.id} ... isChecked: ${selectedContentControl.checkboxContentControl.isChecked}` ); }); -'Word.ContentControlDataChangedEventArgs:interface': +Word.ContentControlDataChangedEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondatachanged-event.yaml @@ -21850,7 +21850,7 @@ console.log(`${event.eventType} event detected. IDs of content controls where data was changed:`, event.ids); }); } -'Word.ContentControlDeletedEventArgs:interface': +Word.ContentControlDeletedEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondeleted-event.yaml @@ -21886,7 +21886,7 @@ console.log(`${event.eventType} event detected. IDs of content controls that were deleted:`, event.ids); }); } -'Word.ContentControlEnteredEventArgs:interface': +Word.ContentControlEnteredEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onentered-event.yaml @@ -21922,7 +21922,7 @@ console.log(`${event.eventType} event detected. ID of content control that was entered: ${event.ids[0]}`); }); } -'Word.ContentControlExitedEventArgs:interface': +Word.ContentControlExitedEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onexited-event.yaml @@ -21958,7 +21958,7 @@ console.log(`${event.eventType} event detected. ID of content control that was exited: ${event.ids[0]}`); }); } -'Word.ContentControlListItem:class': +Word.ContentControlListItem:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml @@ -22007,7 +22007,7 @@ console.log(`List item deleted from control with ID ${selectedContentControl.id}: ${listItemText}`); }); -'Word.ContentControlListItem#delete:member(1)': +Word.ContentControlListItem#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml @@ -22056,7 +22056,7 @@ console.log(`List item deleted from control with ID ${selectedContentControl.id}: ${listItemText}`); }); -'Word.ContentControlListItem#displayText:member': +Word.ContentControlListItem#displayText:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml @@ -22105,7 +22105,7 @@ console.log(`List item deleted from control with ID ${selectedContentControl.id}: ${listItemText}`); }); -'Word.ContentControlListItemCollection:class': +Word.ContentControlListItemCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml @@ -22144,7 +22144,7 @@ const currentItems: Word.ContentControlListItemCollection = selectedComboBox.listItems; console.log(`The list from the combo box content control with ID ${selectedContentControl.id}:`, currentItems); }); -'Word.ContentControlOptions:interface': +Word.ContentControlOptions:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml @@ -22188,7 +22188,7 @@ `id: ${selectedContentControl.id} ... isChecked: ${selectedContentControl.checkboxContentControl.isChecked}` ); }); -'Word.ContentControlSelectionChangedEventArgs:interface': +Word.ContentControlSelectionChangedEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml @@ -22223,7 +22223,7 @@ console.log(`${event.eventType} event detected. IDs of content controls where selection was changed:`, event.ids); }); } -'Word.ContentControlState:enum': +Word.ContentControlState:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-content-controls.yaml @@ -22248,7 +22248,7 @@ console.log(`Set state of first content control with ID ${firstContentControl.id} to ${state}.`); }); -'Word.ContentControlType:enum': +Word.ContentControlType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml @@ -22272,7 +22272,7 @@ await context.sync(); }); -'Word.Critique:interface': +Word.Critique:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -22328,7 +22328,7 @@ console.log("Annotations inserted:", annotationIds.value); }); -'Word.CritiqueAnnotation:class': +Word.CritiqueAnnotation:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -22351,7 +22351,7 @@ console.log(`ID ${annotation.id} - state '${annotation.state}':`, annotation.critiqueAnnotation.critique); } }); -'Word.CritiqueAnnotation#accept:member(1)': +Word.CritiqueAnnotation#accept:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -22378,7 +22378,7 @@ } } }); -'Word.CritiqueAnnotation#reject:member(1)': +Word.CritiqueAnnotation#reject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -22405,7 +22405,7 @@ } } }); -'Word.CritiqueAnnotation#critique:member': +Word.CritiqueAnnotation#critique:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -22428,7 +22428,7 @@ console.log(`ID ${annotation.id} - state '${annotation.state}':`, annotation.critiqueAnnotation.critique); } }); -'Word.CritiqueColorScheme:enum': +Word.CritiqueColorScheme:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -22484,7 +22484,7 @@ console.log("Annotations inserted:", annotationIds.value); }); -'Word.CritiquePopupOptions:interface': +Word.CritiquePopupOptions:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -22540,7 +22540,7 @@ console.log("Annotations inserted:", annotationIds.value); }); -'Word.CustomProperty:class': +Word.CustomProperty:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/read-write-custom-document-properties.yaml @@ -22554,7 +22554,7 @@ for (let i = 0; i < properties.items.length; i++) console.log("Property Name:" + properties.items[i].key + "; Type=" + properties.items[i].type + "; Property Value=" + properties.items[i].value); }); -'Word.CustomPropertyCollection:class': +Word.CustomPropertyCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/read-write-custom-document-properties.yaml @@ -22568,7 +22568,7 @@ for (let i = 0; i < properties.items.length; i++) console.log("Property Name:" + properties.items[i].key + "; Type=" + properties.items[i].type + "; Property Value=" + properties.items[i].value); }); -'Word.CustomPropertyCollection#add:member(1)': +Word.CustomPropertyCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/read-write-custom-document-properties.yaml @@ -22591,7 +22591,7 @@ await context.sync(); console.log("Property added"); }); -'Word.CustomPropertyCollection#items:member': +Word.CustomPropertyCollection#items:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/read-write-custom-document-properties.yaml @@ -22605,7 +22605,7 @@ for (let i = 0; i < properties.items.length; i++) console.log("Property Name:" + properties.items[i].key + "; Type=" + properties.items[i].type + "; Property Value=" + properties.items[i].value); }); -'Word.CustomXmlPart:class': +Word.CustomXmlPart:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml @@ -22631,7 +22631,7 @@ await context.sync(); }); -'Word.CustomXmlPart#delete:member(1)': +Word.CustomXmlPart#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml @@ -22713,7 +22713,7 @@ console.warn("Didn't find custom XML part to delete."); } }); -'Word.CustomXmlPart#getXml:member(1)': +Word.CustomXmlPart#getXml:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -22767,7 +22767,7 @@ await context.sync(); }); -'Word.CustomXmlPart#insertAttribute:member(1)': +Word.CustomXmlPart#insertAttribute:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -22833,7 +22833,7 @@ console.warn("Didn't find custom XML part to insert attribute into."); } }); -'Word.CustomXmlPart#insertElement:member(1)': +Word.CustomXmlPart#insertElement:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -22904,7 +22904,7 @@ console.warn("Didn't find custom XML part to insert element into."); } }); -'Word.CustomXmlPart#query:member(1)': +Word.CustomXmlPart#query:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -22973,7 +22973,7 @@ console.warn("Didn't find custom XML part to query."); } }); -'Word.CustomXmlPart#setXml:member(1)': +Word.CustomXmlPart#setXml:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -23011,7 +23011,7 @@ console.warn("Didn't find custom XML part to replace."); } }); -'Word.CustomXmlPart#id:member': +Word.CustomXmlPart#id:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml @@ -23037,7 +23037,7 @@ await context.sync(); }); -'Word.CustomXmlPart#namespaceUri:member': +Word.CustomXmlPart#namespaceUri:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -23066,7 +23066,7 @@ console.warn("Didn't find custom XML part."); } }); -'Word.CustomXmlPartCollection#add:member(1)': +Word.CustomXmlPartCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -23120,7 +23120,7 @@ await context.sync(); }); -'Word.CustomXmlPartCollection#getByNamespace:member(1)': +Word.CustomXmlPartCollection#getByNamespace:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -23142,7 +23142,7 @@ console.log(`Number of custom XML parts found with this namespace: ${!scopedCustomXmlParts.items ? 0 : scopedCustomXmlParts.items.length}`); }); -'Word.CustomXmlPartCollection#getItem:member(1)': +Word.CustomXmlPartCollection#getItem:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -23211,7 +23211,7 @@ console.warn("Didn't find custom XML part to query."); } }); -'Word.CustomXmlPartScopedCollection:class': +Word.CustomXmlPartScopedCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -23233,7 +23233,7 @@ console.log(`Number of custom XML parts found with this namespace: ${!scopedCustomXmlParts.items ? 0 : scopedCustomXmlParts.items.length}`); }); -'Word.Document:class': +Word.Document:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml @@ -23254,7 +23254,7 @@ console.log("No changes are being tracked."); } }); -'Word.Document#addStyle:member(1)': +Word.Document#addStyle:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -23286,7 +23286,7 @@ console.log(newStyleName + " has been added to the style list."); }); -'Word.Document#close:member(1)': +Word.Document#close:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/save-close.yaml @@ -23299,7 +23299,7 @@ await Word.run(async (context) => { context.document.close(); }); -'Word.Document#compare:member(1)': +Word.Document#compare:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/compare-documents.yaml @@ -23322,7 +23322,7 @@ console.log("Differences shown in the current document."); }); -'Word.Document#getContentControls:member(1)': +Word.Document#getContentControls:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml @@ -23376,7 +23376,7 @@ ); } }); -'Word.Document#getParagraphByUniqueLocalId:member(1)': +Word.Document#getParagraphByUniqueLocalId:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onadded-event.yaml @@ -23390,7 +23390,7 @@ console.log(paragraph); }); -'Word.Document#getStyles:member(1)': +Word.Document#getStyles:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -23405,7 +23405,7 @@ console.log(`Number of styles: ${count.value}`); }); -'Word.Document#importStylesFromJson:member(1)': +Word.Document#importStylesFromJson:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-custom-style.yaml @@ -23424,7 +23424,7 @@ await context.sync(); console.log("Styles imported from JSON:", styles); }); -'Word.Document#insertFileFromBase64:member(1)': +Word.Document#insertFileFromBase64:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml @@ -23447,7 +23447,7 @@ }); await context.sync(); }); -'Word.Document#save:member(1)': +Word.Document#save:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/save-close.yaml @@ -23461,7 +23461,7 @@ context.document.save(); await context.sync(); }); -'Word.Document#activeWindow:member': +Word.Document#activeWindow:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml @@ -23511,7 +23511,7 @@ console.log("First paragraph's text:", pagesFirstParagraphText[i].text); } }); -'Word.Document#changeTrackingMode:member': +Word.Document#changeTrackingMode:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml @@ -23532,7 +23532,7 @@ console.log("No changes are being tracked."); } }); -'Word.Document#onAnnotationClicked:member': +Word.Document#onAnnotationClicked:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -23569,7 +23569,7 @@ console.log(`AnnotationClicked: ID ${args.id}:`, annotation.critiqueAnnotation.critique); }); } -'Word.Document#onAnnotationHovered:member': +Word.Document#onAnnotationHovered:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -23606,7 +23606,7 @@ console.log(`AnnotationHovered: ID ${args.id}:`, annotation.critiqueAnnotation.critique); }); } -'Word.Document#onAnnotationInserted:member': +Word.Document#onAnnotationInserted:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -23650,7 +23650,7 @@ } }); } -'Word.Document#onAnnotationPopupAction:member': +Word.Document#onAnnotationPopupAction:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -23690,7 +23690,7 @@ console.log(message); }); } -'Word.Document#onAnnotationRemoved:member': +Word.Document#onAnnotationRemoved:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -23724,7 +23724,7 @@ } }); } -'Word.Document#onContentControlAdded:member': +Word.Document#onContentControlAdded:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onadded-event.yaml @@ -23749,7 +23749,7 @@ console.log(`${event.eventType} event detected. IDs of content controls that were added:`, event.ids); }); } -'Word.Document#onParagraphAdded:member': +Word.Document#onParagraphAdded:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onadded-event.yaml @@ -23773,7 +23773,7 @@ console.log(`${event.type} event detected. IDs of paragraphs that were added:`, event.uniqueLocalIds); }); } -'Word.Document#onParagraphChanged:member': +Word.Document#onParagraphChanged:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onchanged-event.yaml @@ -23797,7 +23797,7 @@ console.log(`${event.type} event detected. IDs of paragraphs where content was changed:`, event.uniqueLocalIds); }); } -'Word.Document#onParagraphDeleted:member': +Word.Document#onParagraphDeleted:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/ondeleted-event.yaml @@ -23821,7 +23821,7 @@ console.log(`${event.type} event detected. IDs of paragraphs that were deleted:`, event.uniqueLocalIds); }); } -'Word.Document#properties:member': +Word.Document#properties:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/get-built-in-properties.yaml @@ -23834,7 +23834,7 @@ await context.sync(); console.log(JSON.stringify(builtInProperties, null, 4)); }); -'Word.Document#settings:member': +Word.Document#settings:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml @@ -23856,7 +23856,7 @@ } } }); -'Word.DocumentCompareOptions:interface': +Word.DocumentCompareOptions:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/compare-documents.yaml @@ -23879,7 +23879,7 @@ console.log("Differences shown in the current document."); }); -'Word.DocumentCreated:class': +Word.DocumentCreated:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml @@ -23908,7 +23908,7 @@ currentDocBody.insertText(externalDocBodyText, Word.InsertLocation.start); await context.sync(); }); -'Word.DocumentProperties:class': +Word.DocumentProperties:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/get-built-in-properties.yaml @@ -23921,7 +23921,7 @@ await context.sync(); console.log(JSON.stringify(builtInProperties, null, 4)); }); -'Word.DocumentPropertyType:enum': +Word.DocumentPropertyType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/read-write-custom-document-properties.yaml @@ -23935,7 +23935,7 @@ for (let i = 0; i < properties.items.length; i++) console.log("Property Name:" + properties.items[i].key + "; Type=" + properties.items[i].type + "; Property Value=" + properties.items[i].value); }); -'Word.DropDownListContentControl:class': +Word.DropDownListContentControl:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml @@ -23950,7 +23950,7 @@ console.log("Dropdown list content control inserted at the end of the selection."); }); -'Word.DropDownListContentControl#addListItem:member(1)': +Word.DropDownListContentControl#addListItem:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml @@ -23988,7 +23988,7 @@ console.log(`List item added to control with ID ${selectedContentControl.id}: ${listItemText}`); }); -'Word.DropDownListContentControl#deleteAllListItems:member(1)': +Word.DropDownListContentControl#deleteAllListItems:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml @@ -24028,7 +24028,7 @@ console.log("Deleted the list from the dropdown list content control."); }); -'Word.DropDownListContentControl#listItems:member': +Word.DropDownListContentControl#listItems:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml @@ -24077,7 +24077,7 @@ console.log(`List item deleted from control with ID ${selectedContentControl.id}: ${listItemText}`); }); -'Word.ErrorCodes:enum': +Word.ErrorCodes:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml @@ -24095,7 +24095,7 @@ } } } -'Word.EventSource:enum': +Word.EventSource:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml @@ -24128,7 +24128,7 @@ console.log(`${event.type} event detected. Event source: ${event.source}. Comment info:`, event.commentDetails); }); } -'Word.EventType:enum': +Word.EventType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondeleted-event.yaml @@ -24140,7 +24140,7 @@ console.log(`${event.eventType} event detected. IDs of content controls that were deleted:`, event.ids); }); } -'Word.Field:class': +Word.Field:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24160,7 +24160,7 @@ console.log("Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result), "Type of first field: " + field.type, "Is the first field locked? " + field.locked, "Kind of the first field: " + field.kind); } }); -'Word.Field#delete:member(1)': +Word.Field#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24183,7 +24183,7 @@ console.log("The first field in the document was deleted."); } }); -'Word.Field#select:member(1)': +Word.Field#select:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24212,7 +24212,7 @@ console.log("After updating:", "Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result)); } }); -'Word.Field#updateResult:member(1)': +Word.Field#updateResult:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24241,7 +24241,7 @@ console.log("After updating:", "Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result)); } }); -'Word.Field#code:member': +Word.Field#code:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24261,7 +24261,7 @@ console.log("Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result), "Type of first field: " + field.type, "Is the first field locked? " + field.locked, "Kind of the first field: " + field.kind); } }); -'Word.Field#kind:member': +Word.Field#kind:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24281,7 +24281,7 @@ console.log("Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result), "Type of first field: " + field.type, "Is the first field locked? " + field.locked, "Kind of the first field: " + field.kind); } }); -'Word.Field#locked:member': +Word.Field#locked:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24305,7 +24305,7 @@ console.log(`The first field in the selection is now ${field.locked ? "locked" : "unlocked"}.`); } }); -'Word.Field#parentBody:member': +Word.Field#parentBody:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24326,7 +24326,7 @@ console.log("Text of first field's parent body: " + JSON.stringify(parentBody.text)); } }); -'Word.Field#result:member': +Word.Field#result:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24346,7 +24346,7 @@ console.log("Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result), "Type of first field: " + field.type, "Is the first field locked? " + field.locked, "Kind of the first field: " + field.kind); } }); -'Word.Field#type:member': +Word.Field#type:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24366,7 +24366,7 @@ console.log("Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result), "Type of first field: " + field.type, "Is the first field locked? " + field.locked, "Kind of the first field: " + field.kind); } }); -'Word.FieldCollection:class': +Word.FieldCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24390,7 +24390,7 @@ } } }); -'Word.FieldCollection#getFirstOrNullObject:member(1)': +Word.FieldCollection#getFirstOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24410,7 +24410,7 @@ console.log("Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result), "Type of first field: " + field.type, "Is the first field locked? " + field.locked, "Kind of the first field: " + field.kind); } }); -'Word.FieldCollection#items:member': +Word.FieldCollection#items:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24434,7 +24434,7 @@ } } }); -'Word.FieldKind:enum': +Word.FieldKind:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24454,7 +24454,7 @@ console.log("Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result), "Type of first field: " + field.type, "Is the first field locked? " + field.locked, "Kind of the first field: " + field.kind); } }); -'Word.FieldType:enum': +Word.FieldType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24476,7 +24476,7 @@ console.log("Code of the field: " + field.code, "Result of the field: " + JSON.stringify(field.result)); } }); -'Word.GetTextOptions:interface': +Word.GetTextOptions:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-text.yaml @@ -24493,7 +24493,7 @@ console.log("Text:- " + text.value, "Including hidden text:- " + textIncludingHidden.value, "Including text marked as deleted:- " + textIncludingDeleted.value); }); -'Word.HeaderFooterType:enum': +Word.HeaderFooterType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-header-and-footer.yaml @@ -24507,7 +24507,7 @@ await context.sync(); }); -'Word.ImageFormat:enum': +Word.ImageFormat:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml @@ -24527,7 +24527,7 @@ await context.sync(); console.log(base64.value); }); -'Word.ImportedStylesConflictBehavior:enum': +Word.ImportedStylesConflictBehavior:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-custom-style.yaml @@ -24546,7 +24546,7 @@ await context.sync(); console.log("Styles imported from JSON:", styles); }); -'Word.InlinePicture#getBase64ImageSrc:member(1)': +Word.InlinePicture#getBase64ImageSrc:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml @@ -24566,7 +24566,7 @@ await context.sync(); console.log(base64.value); }); -'Word.InlinePicture:class': +Word.InlinePicture:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml @@ -24582,7 +24582,7 @@ await context.sync(); }); -'Word.InlinePicture#imageFormat:member': +Word.InlinePicture#imageFormat:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml @@ -24602,7 +24602,7 @@ await context.sync(); console.log(base64.value); }); -'Word.InlinePictureCollection:class': +Word.InlinePictureCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml @@ -24622,7 +24622,7 @@ await context.sync(); console.log(base64.value); }); -'Word.InsertFileOptions:interface': +Word.InsertFileOptions:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml @@ -24645,7 +24645,7 @@ }); await context.sync(); }); -'Word.InsertLocation:enum': +Word.InsertLocation:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-section-breaks.yaml @@ -24661,7 +24661,7 @@ console.log("Inserted section without an associated page break."); }); -'Word.InsertShapeOptions:interface': +Word.InsertShapeOptions:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml @@ -24682,7 +24682,7 @@ console.log("Inserted a text box at the beginning of the current selection."); }); -'Word.List:class': +Word.List:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml @@ -24714,7 +24714,7 @@ await context.sync(); }); -'Word.List#insertParagraph:member(1)': +Word.List#insertParagraph:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml @@ -24746,7 +24746,7 @@ await context.sync(); }); -'Word.List#setLevelBullet:member(1)': +Word.List#setLevelBullet:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml @@ -24784,7 +24784,7 @@ await context.sync(); }); -'Word.List#setLevelNumbering:member(1)': +Word.List#setLevelNumbering:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml @@ -24822,7 +24822,7 @@ await context.sync(); }); -'Word.List#levelExistences:member': +Word.List#levelExistences:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml @@ -24859,7 +24859,7 @@ console.log(`- Level ${i + 1} (index ${i}): ${levelExistences[i]}`); } }); -'Word.List#levelTypes:member': +Word.List#levelTypes:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml @@ -24896,7 +24896,7 @@ console.log(`- Level ${i + 1} (index ${i}): ${levelExistences[i]}`); } }); -'Word.ListBuiltInNumberStyle:enum': +Word.ListBuiltInNumberStyle:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/manage-list-styles.yaml @@ -24932,7 +24932,7 @@ console.log(`List levels of the '${styleName}' style:`, listLevels); } }); -'Word.ListBullet:enum': +Word.ListBullet:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml @@ -24970,7 +24970,7 @@ await context.sync(); }); -'Word.ListCollection:class': +Word.ListCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml @@ -25007,7 +25007,7 @@ console.log(`- Level ${i + 1} (index ${i}): ${levelExistences[i]}`); } }); -'Word.ListItem:class': +Word.ListItem:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml @@ -25039,7 +25039,7 @@ await context.sync(); }); -'Word.ListItem#level:member': +Word.ListItem#level:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml @@ -25071,7 +25071,7 @@ await context.sync(); }); -'Word.ListLevel:class': +Word.ListLevel:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/manage-list-styles.yaml @@ -25107,7 +25107,7 @@ console.log(`List levels of the '${styleName}' style:`, listLevels); } }); -'Word.ListLevelCollection:class': +Word.ListLevelCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/manage-list-styles.yaml @@ -25143,7 +25143,7 @@ console.log(`List levels of the '${styleName}' style:`, listLevels); } }); -'Word.ListLevelType:enum': +Word.ListLevelType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml @@ -25180,7 +25180,7 @@ console.log(`- Level ${i + 1} (index ${i}): ${levelExistences[i]}`); } }); -'Word.ListNumbering:enum': +Word.ListNumbering:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml @@ -25218,7 +25218,7 @@ await context.sync(); }); -'Word.ListTemplate:class': +Word.ListTemplate:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/manage-list-styles.yaml @@ -25254,7 +25254,7 @@ console.log(`List levels of the '${styleName}' style:`, listLevels); } }); -'Word.LocationRelation:enum': +Word.LocationRelation:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/compare-location.yaml @@ -25278,7 +25278,7 @@ const locationValue: Word.LocationRelation = comparedLocation.value; console.log(`Location of the first paragraph in relation to the second paragraph: ${locationValue}`); }); -'Word.NoteItem:class': +Word.NoteItem:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml @@ -25299,7 +25299,7 @@ console.log(`Text of footnote ${referenceNumber}: ${footnoteBody.text}`); }); -'Word.NoteItem#delete:member(1)': +Word.NoteItem#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml @@ -25319,7 +25319,7 @@ console.log("Footnote deleted."); }); -'Word.NoteItem#getNext:member(1)': +Word.NoteItem#getNext:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml @@ -25338,7 +25338,7 @@ reference.select(); console.log("Selected is the next footnote: " + (mark + 2)); }); -'Word.NoteItem#body:member': +Word.NoteItem#body:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml @@ -25359,7 +25359,7 @@ console.log(`Text of footnote ${referenceNumber}: ${footnoteBody.text}`); }); -'Word.NoteItem#reference:member': +Word.NoteItem#reference:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml @@ -25381,7 +25381,7 @@ console.log(`Reference ${referenceNumber} is selected.`); }); -'Word.NoteItem#type:member': +Word.NoteItem#type:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml @@ -25405,7 +25405,7 @@ console.log(`Body type of note: ${item.body.type}`); }); -'Word.NoteItemCollection:class': +Word.NoteItemCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml @@ -25419,7 +25419,7 @@ reference.select(); console.log("The first footnote is selected."); }); -'Word.NoteItemCollection#getFirst:member(1)': +Word.NoteItemCollection#getFirst:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml @@ -25433,7 +25433,7 @@ reference.select(); console.log("The first footnote is selected."); }); -'Word.NoteItemType:enum': +Word.NoteItemType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml @@ -25457,7 +25457,7 @@ console.log(`Body type of note: ${item.body.type}`); }); -'Word.OutlineLevel:enum': +Word.OutlineLevel:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-custom-style.yaml @@ -25476,7 +25476,7 @@ await context.sync(); console.log("Styles imported from JSON:", styles); }); -'Word.Page:class': +Word.Page:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml @@ -25509,7 +25509,7 @@ console.log("Text of that page in the selection:", pagesText[i].text); } }); -'Word.Page#getRange:member(1)': +Word.Page#getRange:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml @@ -25542,7 +25542,7 @@ console.log("Text of that page in the selection:", pagesText[i].text); } }); -'Word.Page#index:member': +Word.Page#index:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml @@ -25581,7 +25581,7 @@ console.log("Text of that page:", pagesText[i].text); } }); -'Word.PageCollection:class': +Word.PageCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml @@ -25614,7 +25614,7 @@ console.log("Text of that page in the selection:", pagesText[i].text); } }); -'Word.Pane:class': +Word.Pane:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml @@ -25664,7 +25664,7 @@ console.log("First paragraph's text:", pagesFirstParagraphText[i].text); } }); -'Word.Pane#pages:member': +Word.Pane#pages:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml @@ -25714,7 +25714,7 @@ console.log("First paragraph's text:", pagesFirstParagraphText[i].text); } }); -'Word.Pane#pagesEnclosingViewport:member': +Word.Pane#pagesEnclosingViewport:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml @@ -25755,7 +25755,7 @@ console.log(`Page index: ${pagesIndexes[i].index}`); } }); -'Word.Paragraph:class': +Word.Paragraph:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -25769,7 +25769,7 @@ await context.sync(); console.log(paragraph.text); }); -'Word.Paragraph#getRange:member(1)': +Word.Paragraph#getRange:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -25800,7 +25800,7 @@ console.log(sentencesToTheEndOfParagraph.items[i].text); } }); -'Word.Paragraph#insertAnnotations:member(1)': +Word.Paragraph#insertAnnotations:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -25856,7 +25856,7 @@ console.log("Annotations inserted:", annotationIds.value); }); -'Word.Paragraph#insertBreak:member(1)': +Word.Paragraph#insertBreak:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-line-and-page-breaks.yaml @@ -25868,7 +25868,7 @@ await context.sync(); console.log("success"); }); -'Word.Paragraph#insertContentControl:member(1)': +Word.Paragraph#insertContentControl:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-content-controls.yaml @@ -25896,7 +25896,7 @@ await context.sync(); }); -'Word.Paragraph#insertText:member(1)': +Word.Paragraph#insertText:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-in-different-locations.yaml @@ -25910,7 +25910,7 @@ await context.sync(); }); -'Word.Paragraph#insertTextBox:member(1)': +Word.Paragraph#insertTextBox:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml @@ -25933,7 +25933,7 @@ console.log("Inserted a text box at the beginning of the first paragraph in the header."); }); -'Word.Paragraph#select:member(1)': +Word.Paragraph#select:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/scroll-to-range.yaml @@ -25956,7 +25956,7 @@ await context.sync(); }); -'Word.Paragraph#set:member(1)': +Word.Paragraph#set:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/multiple-property-set.yaml @@ -25990,7 +25990,7 @@ await context.sync(); }); -'Word.Paragraph#split:member(1)': +Word.Paragraph#split:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/split-words-of-first-paragraph.yaml @@ -26013,7 +26013,7 @@ await pause(200); } }); -'Word.Paragraph#startNewList:member(1)': +Word.Paragraph#startNewList:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml @@ -26045,7 +26045,7 @@ await context.sync(); }); -'Word.Paragraph#alignment:member': +Word.Paragraph#alignment:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml @@ -26057,7 +26057,7 @@ await context.sync(); }); -'Word.Paragraph#leftIndent:member': +Word.Paragraph#leftIndent:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml @@ -26069,7 +26069,7 @@ return context.sync(); }); -'Word.Paragraph#lineSpacing:member': +Word.Paragraph#lineSpacing:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml @@ -26081,7 +26081,7 @@ await context.sync(); }); -'Word.Paragraph#lineUnitAfter:member': +Word.Paragraph#lineUnitAfter:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml @@ -26093,7 +26093,7 @@ await context.sync(); }); -'Word.Paragraph#lineUnitBefore:member': +Word.Paragraph#lineUnitBefore:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml @@ -26105,7 +26105,7 @@ await context.sync(); }); -'Word.Paragraph#spaceAfter:member': +Word.Paragraph#spaceAfter:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml @@ -26117,7 +26117,7 @@ await context.sync(); }); -'Word.Paragraph#style:member': +Word.Paragraph#style:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -26152,7 +26152,7 @@ console.log(`'${styleName}' style applied to first paragraph.`); } }); -'Word.Paragraph#styleBuiltIn:member': +Word.Paragraph#styleBuiltIn:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml @@ -26187,7 +26187,7 @@ await context.sync(); }); -'Word.Paragraph#text:member': +Word.Paragraph#text:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -26201,7 +26201,7 @@ await context.sync(); console.log(paragraph.text); }); -'Word.Paragraph#uniqueLocalId:member': +Word.Paragraph#uniqueLocalId:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -26245,7 +26245,7 @@ } }); } -'Word.ParagraphAddedEventArgs:interface': +Word.ParagraphAddedEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onadded-event.yaml @@ -26269,7 +26269,7 @@ console.log(`${event.type} event detected. IDs of paragraphs that were added:`, event.uniqueLocalIds); }); } -'Word.ParagraphChangedEventArgs:interface': +Word.ParagraphChangedEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onchanged-event.yaml @@ -26293,7 +26293,7 @@ console.log(`${event.type} event detected. IDs of paragraphs where content was changed:`, event.uniqueLocalIds); }); } -'Word.ParagraphCollection:class': +Word.ParagraphCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml @@ -26309,7 +26309,7 @@ await context.sync(); }); -'Word.ParagraphCollection#getFirst:member(1)': +Word.ParagraphCollection#getFirst:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -26332,7 +26332,7 @@ console.log(`ID ${annotation.id} - state '${annotation.state}':`, annotation.critiqueAnnotation.critique); } }); -'Word.ParagraphCollection#getLast:member(1)': +Word.ParagraphCollection#getLast:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml @@ -26348,7 +26348,7 @@ await context.sync(); }); -'Word.ParagraphCollection#items:member': +Word.ParagraphCollection#items:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml @@ -26380,7 +26380,7 @@ await context.sync(); }); -'Word.ParagraphDeletedEventArgs:interface': +Word.ParagraphDeletedEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/ondeleted-event.yaml @@ -26404,7 +26404,7 @@ console.log(`${event.type} event detected. IDs of paragraphs that were deleted:`, event.uniqueLocalIds); }); } -'Word.ParagraphFormat:class': +Word.ParagraphFormat:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -26432,7 +26432,7 @@ console.log(`Successfully the paragraph format of the '${styleName}' style.`); } }); -'Word.ParagraphFormat#alignment:member': +Word.ParagraphFormat#alignment:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -26460,7 +26460,7 @@ console.log(`Successfully the paragraph format of the '${styleName}' style.`); } }); -'Word.ParagraphFormat#leftIndent:member': +Word.ParagraphFormat#leftIndent:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -26488,7 +26488,7 @@ console.log(`Successfully the paragraph format of the '${styleName}' style.`); } }); -'Word.Range:class': +Word.Range:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -26512,7 +26512,7 @@ const contentRange: Word.CommentContentRange = comment.contentRange; console.log("Comment content range:", contentRange); }); -'Word.Range#compareLocationWith:member(1)': +Word.Range#compareLocationWith:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/compare-location.yaml @@ -26536,7 +26536,7 @@ const locationValue: Word.LocationRelation = comparedLocation.value; console.log(`Location of the first paragraph in relation to the second paragraph: ${locationValue}`); }); -'Word.Range#expandTo:member(1)': +Word.Range#expandTo:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -26567,7 +26567,7 @@ console.log(sentencesToTheEndOfParagraph.items[i].text); } }); -'Word.Range#getComments:member(1)': +Word.Range#getComments:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -26584,7 +26584,7 @@ console.log("Comments:", comments); }); -'Word.Range#getContentControls:member(1)': +Word.Range#getContentControls:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml @@ -26622,7 +26622,7 @@ console.log("Deleted checkbox content control."); }); -'Word.Range#getRange:member(1)': +Word.Range#getRange:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml @@ -26637,7 +26637,7 @@ console.log("Dropdown list content control inserted at the end of the selection."); }); -'Word.Range#getReviewedText:member(1)': +Word.Range#getReviewedText:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml @@ -26654,7 +26654,7 @@ console.log("Reviewed text (before):", before.value, "Reviewed text (after):", after.value); }); -'Word.Range#getTextRanges:member(1)': +Word.Range#getTextRanges:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -26685,7 +26685,7 @@ console.log(sentencesToTheEndOfParagraph.items[i].text); } }); -'Word.Range#insertComment:member(1)': +Word.Range#insertComment:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -26703,7 +26703,7 @@ console.log("Comment inserted:", comment); }); -'Word.Range#insertContentControl:member(1)': +Word.Range#insertContentControl:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml @@ -26737,7 +26737,7 @@ } await context.sync(); }); -'Word.Range#insertField:member(1)': +Word.Range#insertField:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -26759,7 +26759,7 @@ console.log("Code of the field: " + field.code, "Result of the field: " + JSON.stringify(field.result)); } }); -'Word.Range#insertFootnote:member(1)': +Word.Range#insertFootnote:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml @@ -26774,7 +26774,7 @@ console.log("Inserted footnote."); }); -'Word.Range#insertInlinePictureFromBase64:member(1)': +Word.Range#insertInlinePictureFromBase64:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml @@ -26810,7 +26810,7 @@ "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"; return pictureBase64; -'Word.Range#insertTextBox:member(1)': +Word.Range#insertTextBox:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml @@ -26831,7 +26831,7 @@ console.log("Inserted a text box at the beginning of the current selection."); }); -'Word.Range#footnotes:member': +Word.Range#footnotes:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml @@ -26846,7 +26846,7 @@ console.log("Number of footnotes in the selected range: " + footnotes.items.length); }); -'Word.Range#parentContentControl:member': +Word.Range#parentContentControl:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml @@ -26890,7 +26890,7 @@ `id: ${selectedContentControl.id} ... isChecked: ${selectedContentControl.checkboxContentControl.isChecked}` ); }); -'Word.Range#styleBuiltIn:member': +Word.Range#styleBuiltIn:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml @@ -26903,7 +26903,7 @@ await context.sync(); }); -'Word.RangeCollection:class': +Word.RangeCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/search.yaml @@ -26924,7 +26924,7 @@ await context.sync(); }); -'Word.RangeLocation:enum': +Word.RangeLocation:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -26955,7 +26955,7 @@ console.log(sentencesToTheEndOfParagraph.items[i].text); } }); -'Word.SaveBehavior:enum': +Word.SaveBehavior:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/save-close.yaml @@ -26969,7 +26969,7 @@ context.document.save(Word.SaveBehavior.prompt); await context.sync(); }); -'Word.Section#getFooter:member(2)': +Word.Section#getFooter:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-header-and-footer.yaml @@ -26983,7 +26983,7 @@ await context.sync(); }); -'Word.Section#getHeader:member(1)': +Word.Section#getHeader:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-header-and-footer.yaml @@ -26997,7 +26997,7 @@ await context.sync(); }); -'Word.Section:class': +Word.Section:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-section-breaks.yaml @@ -27013,7 +27013,7 @@ console.log("Inserted section break on next page."); }); -'Word.SectionCollection:class': +Word.SectionCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-section-breaks.yaml @@ -27029,7 +27029,7 @@ console.log("Inserted section break on next even page."); }); -'Word.SelectionMode:enum': +Word.SelectionMode:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/scroll-to-range.yaml @@ -27041,7 +27041,7 @@ await context.sync(); }); -'Word.Setting:class': +Word.Setting:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml @@ -27066,7 +27066,7 @@ console.log("Setting added or edited:", setting); }); -'Word.Setting#key:member': +Word.Setting#key:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml @@ -27091,7 +27091,7 @@ console.log("Setting added or edited:", setting); }); -'Word.Setting#value:member': +Word.Setting#value:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml @@ -27116,7 +27116,7 @@ console.log("Setting added or edited:", setting); }); -'Word.SettingCollection:class': +Word.SettingCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml @@ -27130,7 +27130,7 @@ await context.sync(); console.log("All settings deleted."); }); -'Word.SettingCollection#add:member(1)': +Word.SettingCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml @@ -27155,7 +27155,7 @@ console.log("Setting added or edited:", setting); }); -'Word.SettingCollection#items:member': +Word.SettingCollection#items:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml @@ -27177,7 +27177,7 @@ } } }); -'Word.Shading:class': +Word.Shading:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -27211,7 +27211,7 @@ console.log("Updated shading."); } }); -'Word.ShadingTextureType:enum': +Word.ShadingTextureType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -27245,7 +27245,7 @@ console.log("Updated shading."); } }); -'Word.Shape:class': +Word.Shape:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml @@ -27264,7 +27264,7 @@ console.log("The first text box's properties were updated:", firstShapeWithTextBox); }); -'Word.Shape#delete:member(1)': +Word.Shape#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml @@ -27280,7 +27280,7 @@ console.log("The first text box in document was deleted."); }); -'Word.Shape#type:member': +Word.Shape#type:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml @@ -27302,7 +27302,7 @@ console.log("No shapes found in main document."); } }); -'Word.ShapeCollection:class': +Word.ShapeCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml @@ -27324,7 +27324,7 @@ console.log("No shapes found in main document."); } }); -'Word.ShapeCollection#getByTypes:member(1)': +Word.ShapeCollection#getByTypes:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml @@ -27343,7 +27343,7 @@ console.log("The first text box's properties were updated:", firstShapeWithTextBox); }); -'Word.ShapeCollection#getFirst:member(1)': +Word.ShapeCollection#getFirst:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml @@ -27364,7 +27364,7 @@ console.log("New content control properties:", newControl); }); -'Word.ShapeType:enum': +Word.ShapeType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml @@ -27386,7 +27386,7 @@ console.log("No shapes found in main document."); } }); -'Word.Style:class': +Word.Style:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -27421,7 +27421,7 @@ console.log(`'${styleName}' style applied to first paragraph.`); } }); -'Word.Style#delete:member(1)': +Word.Style#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -27447,7 +27447,7 @@ console.log(`Successfully deleted custom style '${styleName}'.`); } }); -'Word.Style#borders:member': +Word.Style#borders:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -27480,7 +27480,7 @@ console.log("Updated outside borders."); } }); -'Word.Style#font:member': +Word.Style#font:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -27508,7 +27508,7 @@ console.log(`Successfully updated font properties of the '${styleName}' style.`); } }); -'Word.Style#listTemplate:member': +Word.Style#listTemplate:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/manage-list-styles.yaml @@ -27544,7 +27544,7 @@ console.log(`List levels of the '${styleName}' style:`, listLevels); } }); -'Word.Style#nameLocal:member': +Word.Style#nameLocal:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -27579,7 +27579,7 @@ console.log(`'${styleName}' style applied to first paragraph.`); } }); -'Word.Style#paragraphFormat:member': +Word.Style#paragraphFormat:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -27607,7 +27607,7 @@ console.log(`Successfully the paragraph format of the '${styleName}' style.`); } }); -'Word.Style#shading:member': +Word.Style#shading:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -27641,7 +27641,7 @@ console.log("Updated shading."); } }); -'Word.StyleCollection:class': +Word.StyleCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -27656,7 +27656,7 @@ console.log(`Number of styles: ${count.value}`); }); -'Word.StyleCollection#getByNameOrNullObject:member(1)': +Word.StyleCollection#getByNameOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -27688,7 +27688,7 @@ console.log(newStyleName + " has been added to the style list."); }); -'Word.StyleCollection#getCount:member(1)': +Word.StyleCollection#getCount:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -27703,7 +27703,7 @@ console.log(`Number of styles: ${count.value}`); }); -'Word.StyleType:enum': +Word.StyleType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -27738,7 +27738,7 @@ console.log(`'${styleName}' style applied to first paragraph.`); } }); -'Word.Table#getBorder:member(1)': +Word.Table#getBorder:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -27755,7 +27755,7 @@ console.log(`Details about the ${borderLocation} border of the first table:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); -'Word.Table#getCell:member(1)': +Word.Table#getCell:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml @@ -27770,7 +27770,7 @@ await context.sync(); console.log("First cell's text is: " + firstCell.text); }); -'Word.Table#getCellPadding:member(1)': +Word.Table#getCellPadding:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -27788,7 +27788,7 @@ `Cell padding details about the ${cellPaddingLocation} border of the first table: ${cellPadding.value} points` ); }); -'Word.Table#alignment:member': +Word.Table#alignment:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -27803,7 +27803,7 @@ console.log(`Details about the alignment of the first table:`, `- Alignment of the table within the containing page column: ${firstTable.alignment}`, `- Horizontal alignment of every cell in the table: ${firstTable.horizontalAlignment}`, `- Vertical alignment of every cell in the table: ${firstTable.verticalAlignment}`); }); -'Word.Table#horizontalAlignment:member': +Word.Table#horizontalAlignment:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -27818,7 +27818,7 @@ console.log(`Details about the alignment of the first table:`, `- Alignment of the table within the containing page column: ${firstTable.alignment}`, `- Horizontal alignment of every cell in the table: ${firstTable.horizontalAlignment}`, `- Vertical alignment of every cell in the table: ${firstTable.verticalAlignment}`); }); -'Word.Table#rows:member': +Word.Table#rows:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -27835,7 +27835,7 @@ console.log(`Details about the alignment of the first table's first row:`, `- Horizontal alignment of every cell in the row: ${firstTableRow.horizontalAlignment}`, `- Vertical alignment of every cell in the row: ${firstTableRow.verticalAlignment}`); }); -'Word.Table#verticalAlignment:member': +Word.Table#verticalAlignment:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -27850,7 +27850,7 @@ console.log(`Details about the alignment of the first table:`, `- Alignment of the table within the containing page column: ${firstTable.alignment}`, `- Horizontal alignment of every cell in the table: ${firstTable.horizontalAlignment}`, `- Vertical alignment of every cell in the table: ${firstTable.verticalAlignment}`); }); -'Word.Table:class': +Word.Table:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml @@ -27868,7 +27868,7 @@ await context.sync(); }); -'Word.TableBorder:class': +Word.TableBorder:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -27885,7 +27885,7 @@ console.log(`Details about the ${borderLocation} border of the first table:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); -'Word.TableBorder#color:member': +Word.TableBorder#color:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -27902,7 +27902,7 @@ console.log(`Details about the ${borderLocation} border of the first table:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); -'Word.TableBorder#type:member': +Word.TableBorder#type:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -27919,7 +27919,7 @@ console.log(`Details about the ${borderLocation} border of the first table:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); -'Word.TableBorder#width:member': +Word.TableBorder#width:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -27936,7 +27936,7 @@ console.log(`Details about the ${borderLocation} border of the first table:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); -'Word.TableCell:class': +Word.TableCell:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -27954,7 +27954,7 @@ console.log(`Details about the alignment of the first table's first cell:`, `- Horizontal alignment of the cell's content: ${firstCell.horizontalAlignment}`, `- Vertical alignment of the cell's content: ${firstCell.verticalAlignment}`); }); -'Word.TableCell#getBorder:member(2)': +Word.TableCell#getBorder:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -27972,7 +27972,7 @@ console.log(`Details about the ${borderLocation} border of the first table's first cell:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); -'Word.TableCell#getCellPadding:member(2)': +Word.TableCell#getCellPadding:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -27992,7 +27992,7 @@ `Cell padding details about the ${cellPaddingLocation} border of the first table's first cell: ${cellPadding.value} points` ); }); -'Word.TableCell#horizontalAlignment:member': +Word.TableCell#horizontalAlignment:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -28010,7 +28010,7 @@ console.log(`Details about the alignment of the first table's first cell:`, `- Horizontal alignment of the cell's content: ${firstCell.horizontalAlignment}`, `- Vertical alignment of the cell's content: ${firstCell.verticalAlignment}`); }); -'Word.TableCell#verticalAlignment:member': +Word.TableCell#verticalAlignment:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -28028,7 +28028,7 @@ console.log(`Details about the alignment of the first table's first cell:`, `- Horizontal alignment of the cell's content: ${firstCell.horizontalAlignment}`, `- Vertical alignment of the cell's content: ${firstCell.verticalAlignment}`); }); -'Word.TableCellCollection:class': +Word.TableCellCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -28046,7 +28046,7 @@ console.log(`Details about the alignment of the first table's first cell:`, `- Horizontal alignment of the cell's content: ${firstCell.horizontalAlignment}`, `- Vertical alignment of the cell's content: ${firstCell.verticalAlignment}`); }); -'Word.TableCollection:class': +Word.TableCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -28061,7 +28061,7 @@ console.log(`Details about the alignment of the first table:`, `- Alignment of the table within the containing page column: ${firstTable.alignment}`, `- Horizontal alignment of every cell in the table: ${firstTable.horizontalAlignment}`, `- Vertical alignment of every cell in the table: ${firstTable.verticalAlignment}`); }); -'Word.TableCollection#getFirst:member(1)': +Word.TableCollection#getFirst:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml @@ -28076,7 +28076,7 @@ await context.sync(); console.log("First cell's text is: " + firstCell.text); }); -'Word.TableRow:class': +Word.TableRow:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -28094,7 +28094,7 @@ console.log(`Details about the alignment of the first table's first cell:`, `- Horizontal alignment of the cell's content: ${firstCell.horizontalAlignment}`, `- Vertical alignment of the cell's content: ${firstCell.verticalAlignment}`); }); -'Word.TableRow#getBorder:member(1)': +Word.TableRow#getBorder:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -28113,7 +28113,7 @@ console.log(`Details about the ${borderLocation} border of the first table's first row:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); -'Word.TableRow#getCellPadding:member(1)': +Word.TableRow#getCellPadding:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -28133,7 +28133,7 @@ `Cell padding details about the ${cellPaddingLocation} border of the first table's first row: ${cellPadding.value} points` ); }); -'Word.TableRow#cells:member': +Word.TableRow#cells:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -28151,7 +28151,7 @@ console.log(`Details about the alignment of the first table's first cell:`, `- Horizontal alignment of the cell's content: ${firstCell.horizontalAlignment}`, `- Vertical alignment of the cell's content: ${firstCell.verticalAlignment}`); }); -'Word.TableRowCollection:class': +Word.TableRowCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -28168,7 +28168,7 @@ console.log(`Details about the alignment of the first table's first row:`, `- Horizontal alignment of every cell in the row: ${firstTableRow.horizontalAlignment}`, `- Vertical alignment of every cell in the row: ${firstTableRow.verticalAlignment}`); }); -'Word.TableRowCollection#getFirst:member(1)': +Word.TableRowCollection#getFirst:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -28187,7 +28187,7 @@ console.log(`Details about the ${borderLocation} border of the first table's first row:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); -'Word.TableStyle:class': +Word.TableStyle:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-custom-style.yaml @@ -28223,7 +28223,7 @@ (document.getElementById("right-cell-margin") as HTMLInputElement).value = tableStyle.rightCellMargin; (document.getElementById("cell-spacing") as HTMLInputElement).value = tableStyle.cellSpacing; }); -'Word.TrackedChange:class': +Word.TrackedChange:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml @@ -28247,7 +28247,7 @@ console.log(nextTrackedChange); }); -'Word.TrackedChange#accept:member(1)': +Word.TrackedChange#accept:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml @@ -28266,7 +28266,7 @@ trackedChange.accept(); console.log("Accepted the first tracked change."); }); -'Word.TrackedChange#getNext:member(1)': +Word.TrackedChange#getNext:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml @@ -28290,7 +28290,7 @@ console.log(nextTrackedChange); }); -'Word.TrackedChange#getRange:member(1)': +Word.TrackedChange#getRange:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml @@ -28310,7 +28310,7 @@ console.log("range.text: " + range.text); }); -'Word.TrackedChange#reject:member(1)': +Word.TrackedChange#reject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml @@ -28329,7 +28329,7 @@ trackedChange.reject(); console.log("Rejected the first tracked change."); }); -'Word.TrackedChangeCollection:class': +Word.TrackedChangeCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml @@ -28349,7 +28349,7 @@ console.log("range.text: " + range.text); }); -'Word.TrackedChangeCollection#acceptAll:member(1)': +Word.TrackedChangeCollection#acceptAll:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml @@ -28363,7 +28363,7 @@ trackedChanges.acceptAll(); console.log("Accepted all tracked changes."); }); -'Word.TrackedChangeCollection#getFirst:member(1)': +Word.TrackedChangeCollection#getFirst:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml @@ -28383,7 +28383,7 @@ console.log("range.text: " + range.text); }); -'Word.TrackedChangeCollection#rejectAll:member(1)': +Word.TrackedChangeCollection#rejectAll:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml @@ -28397,7 +28397,7 @@ trackedChanges.rejectAll(); console.log("Rejected all tracked changes."); }); -'Word.TrackedChangeType:enum': +Word.TrackedChangeType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml @@ -28421,7 +28421,7 @@ console.log(nextTrackedChange); }); -'Word.TrailingCharacter:enum': +Word.TrailingCharacter:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/manage-list-styles.yaml @@ -28457,7 +28457,7 @@ console.log(`List levels of the '${styleName}' style:`, listLevels); } }); -'Word.VerticalAlignment:enum': +Word.VerticalAlignment:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -28474,7 +28474,7 @@ console.log(`Details about the alignment of the first table's first row:`, `- Horizontal alignment of every cell in the row: ${firstTableRow.horizontalAlignment}`, `- Vertical alignment of every cell in the row: ${firstTableRow.verticalAlignment}`); }); -'Word.Window:class': +Word.Window:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml @@ -28524,7 +28524,7 @@ console.log("First paragraph's text:", pagesFirstParagraphText[i].text); } }); -'Word.Window#activePane:member': +Word.Window#activePane:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml diff --git a/tsconfig.json b/tsconfig.json index 0fd566d63..a3ff66e69 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,12 +1,13 @@ { "compilerOptions": { - "target": "es6", + "target": "es2018", "module": "commonjs", "moduleResolution": "node", "sourceMap": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "allowSyntheticDefaultImports": true, + "esModuleInterop": true, "removeComments": false, "noImplicitAny": false, "noEmitOnError": true, @@ -17,8 +18,10 @@ "rootDir": "config", "lib": [ "dom", - "es2015" + "es2018" ], - "pretty": true + "pretty": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true } } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 2f5433b0c..000000000 --- a/yarn.lock +++ /dev/null @@ -1,1016 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@^7.0.0": - version "7.15.8" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz" - integrity sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg== - dependencies: - "@babel/highlight" "^7.14.5" - -"@babel/helper-validator-identifier@^7.14.5": - version "7.15.7" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz" - integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== - -"@babel/highlight@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz" - integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.5" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@fast-csv/format@4.3.5": - version "4.3.5" - resolved "https://registry.npmjs.org/@fast-csv/format/-/format-4.3.5.tgz" - integrity sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A== - dependencies: - "@types/node" "^14.0.1" - lodash.escaperegexp "^4.1.2" - lodash.isboolean "^3.0.3" - lodash.isequal "^4.5.0" - lodash.isfunction "^3.0.9" - lodash.isnil "^4.0.0" - -"@fast-csv/parse@4.3.6": - version "4.3.6" - resolved "https://registry.npmjs.org/@fast-csv/parse/-/parse-4.3.6.tgz" - integrity sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA== - dependencies: - "@types/node" "^14.0.1" - lodash.escaperegexp "^4.1.2" - lodash.groupby "^4.6.0" - lodash.isfunction "^3.0.9" - lodash.isnil "^4.0.0" - lodash.isundefined "^3.0.1" - lodash.uniq "^4.5.0" - -"@types/chalk@0.4.31": - version "0.4.31" - resolved "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz" - integrity sha1-ox10JBprHtu5c8822XooloNKUfk= sha512-nF0fisEPYMIyfrFgabFimsz9Lnuu9MwkNrrlATm2E4E46afKDyeelT+8bXfw1VSc7sLBxMxRgT7PxTC2JcqN4Q== - -"@types/fs-extra@3.0.1": - version "3.0.1" - resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-3.0.1.tgz" - integrity sha1-eCk6aKrT2GZ1Ho/P1k19ydARdHY= sha512-99ywH5BUw32J7pX3Nqo5xDw7KtvWUogKXLNGAlfSKvMGnCLq6/5Ufk+EuPNEMsKmSYJW1VityGHA9Lo+NEgCKg== - dependencies: - "@types/node" "*" - -"@types/glob@*": - version "7.1.4" - resolved "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz" - integrity sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/js-yaml@^3.12.0": - version "3.12.7" - resolved "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.7.tgz" - integrity sha512-S6+8JAYTE1qdsc9HMVsfY7+SgSuUU/Tp6TYTmITW0PZxiyIMvol3Gy//y69Wkhs0ti4py5qgR3uZH6uz/DNzJQ== - -"@types/lodash@^4.14.175": - version "4.14.175" - resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.175.tgz" - integrity sha512-XmdEOrKQ8a1Y/yxQFOMbC47G/V2VDO1GvMRnl4O75M4GW/abC5tnfzadQYkqEveqRM1dEJGFFegfPNA2vvx2iw== - -"@types/minimatch@*": - version "3.0.5" - resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== - -"@types/node@*", "@types/node@^11.10.5": - version "11.15.54" - resolved "https://registry.npmjs.org/@types/node/-/node-11.15.54.tgz" - integrity sha512-1RWYiq+5UfozGsU6MwJyFX6BtktcT10XRjvcAQmskCtMcW3tPske88lM/nHv7BQG1w9KBXI1zPGuu5PnNCX14g== - -"@types/node@^14.0.1": - version "14.17.21" - resolved "https://registry.npmjs.org/@types/node/-/node-14.17.21.tgz" - integrity sha512-zv8ukKci1mrILYiQOwGSV4FpkZhyxQtuFWGya2GujWg+zVAeRQ4qbaMmWp9vb9889CFA8JECH7lkwCL6Ygg8kA== - -"@types/shelljs@^0.8.3": - version "0.8.9" - resolved "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.9.tgz" - integrity sha512-flVe1dvlrCyQJN/SGrnBxqHG+RzXrVKsmjD8WS/qYHpq5UPjfq7UWFBENP0ZuOl0g6OpAlL6iBoLSvKYUUmyQw== - dependencies: - "@types/glob" "*" - "@types/node" "*" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -archiver-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz" - integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw== - dependencies: - glob "^7.1.4" - graceful-fs "^4.2.0" - lazystream "^1.0.0" - lodash.defaults "^4.2.0" - lodash.difference "^4.5.0" - lodash.flatten "^4.4.0" - lodash.isplainobject "^4.0.6" - lodash.union "^4.6.0" - normalize-path "^3.0.0" - readable-stream "^2.0.0" - -archiver@^5.0.0: - version "5.3.0" - resolved "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz" - integrity sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg== - dependencies: - archiver-utils "^2.1.0" - async "^3.2.0" - buffer-crc32 "^0.2.1" - readable-stream "^3.6.0" - readdir-glob "^1.0.0" - tar-stream "^2.2.0" - zip-stream "^4.1.0" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -async@^3.2.0: - version "3.2.4" - resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -big-integer@^1.6.17: - version "1.6.49" - resolved "https://registry.npmjs.org/big-integer/-/big-integer-1.6.49.tgz" - integrity sha512-KJ7VhqH+f/BOt9a3yMwJNmcZjG53ijWMTjSAGMveQWyLwqIiwkjNP5PFgDob3Snnx86SjDj6I89fIbv0dkQeNw== - -binary@~0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz" - integrity sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk= sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg== - dependencies: - buffers "~0.1.1" - chainsaw "~0.1.0" - -bl@^4.0.3: - version "4.1.0" - resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -bluebird@~3.4.1: - version "3.4.7" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz" - integrity sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM= sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: - version "0.2.13" - resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== - -buffer-indexof-polyfill@~1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz" - integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A== - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -buffers@~0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz" - integrity sha1-skV5w77U1tOWru5tmorn9Ugqt7s= sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ== - -builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz" - integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ== - -chainsaw@~0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz" - integrity sha1-XqtQsor+WAdNDVgpE4iCi15fvJg= sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ== - dependencies: - traverse ">=0.3.0 <0.4" - -chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^2.3.0: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -charm@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/charm/-/charm-1.0.1.tgz" - integrity sha1-aFZqelU9T+kXlwMN0YUtDdbvqC0= sha512-mBB1orFlZvYF8PcQNtO446LbWmgZEIOvq6n0CY68csh9JN0Rk1rrqWPQpfLImQO7EhpibXUVDF2PTTaYIfTeRA== - dependencies: - inherits "^2.0.1" - -cli-cursor@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz" - integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc= sha512-25tABq090YNKkF6JH7lcwO0zFJTRke4Jcq9iX2nr/Sz0Cjjv4gckmwlW6Ty/aoyFd6z3ysR2hMGC2GFugmBo6A== - dependencies: - restore-cursor "^1.0.1" - -cli-spinners@0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.2.0.tgz" - integrity sha1-hQeHN5E7iA9uyf/ntl6D7Hd2KE8= sha512-1sdlgy47mFLr4OfiKC/raeqJ4Jt6oZskLs51esqe/rFqcR23DNF++CbsDpv3hsvwGWHA/+lnxf4xdDtZZtkPBA== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -colors@1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz" - integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w== - -commander@^2.12.1: - version "2.20.3" - resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -compress-commons@^4.1.0: - version "4.1.1" - resolved "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz" - integrity sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ== - dependencies: - buffer-crc32 "^0.2.13" - crc32-stream "^4.0.2" - normalize-path "^3.0.0" - readable-stream "^3.6.0" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -crc-32@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz" - integrity sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA== - dependencies: - exit-on-epipe "~1.0.1" - printj "~1.1.0" - -crc32-stream@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz" - integrity sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w== - dependencies: - crc-32 "^1.2.0" - readable-stream "^3.4.0" - -dayjs@^1.8.34: - version "1.10.7" - resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz" - integrity sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -duplexer2@~0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz" - integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== - dependencies: - readable-stream "^2.0.2" - -end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -escape-string-regexp@^1.0.2: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -exceljs@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/exceljs/-/exceljs-4.3.0.tgz" - integrity sha512-hTAeo5b5TPvf8Z02I2sKIT4kSfCnOO2bCxYX8ABqODCdAjppI3gI9VYiGCQQYVcBaBSKlFDMKlAQRqC+kV9O8w== - dependencies: - archiver "^5.0.0" - dayjs "^1.8.34" - fast-csv "^4.3.1" - jszip "^3.5.0" - readable-stream "^3.6.0" - saxes "^5.0.1" - tmp "^0.2.0" - unzipper "^0.10.11" - uuid "^8.3.0" - -exit-hook@^1.0.0: - version "1.1.1" - resolved "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz" - integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g= sha512-MsG3prOVw1WtLXAZbM3KiYtooKR1LvxHh3VHsVtIy0uiUu8usxgB/94DP2HxtD/661lLdB6yzQ09lGJSQr6nkg== - -exit-on-epipe@~1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz" - integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw== - -fast-csv@^4.3.1: - version "4.3.6" - resolved "https://registry.npmjs.org/fast-csv/-/fast-csv-4.3.6.tgz" - integrity sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw== - dependencies: - "@fast-csv/format" "4.3.5" - "@fast-csv/parse" "4.3.6" - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz" - integrity sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE= sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^3.0.0" - universalify "^0.1.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fstream@^1.0.12: - version "1.0.12" - resolved "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz" - integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -glob@^7.0.0, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4: - version "7.2.0" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: - version "4.2.8" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz" - integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== - dependencies: - ansi-regex "^2.0.0" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -immediate@~3.0.5: - version "3.0.6" - resolved "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz" - integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.3, inherits@2: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - -is-core-module@^2.2.0: - version "2.7.0" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.7.0.tgz" - integrity sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ== - dependencies: - has "^1.0.3" - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsonfile@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz" - integrity sha1-pezG9l9T9mLEQVx2daAzHQmS7GY= sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w== - optionalDependencies: - graceful-fs "^4.1.6" - -jszip@^3.5.0: - version "3.10.1" - resolved "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz" - integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== - dependencies: - lie "~3.3.0" - pako "~1.0.2" - readable-stream "~2.3.6" - setimmediate "^1.0.5" - -lazystream@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz" - integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= sha512-/330KFbmC/zKdtZoVDRwvkJ8snrJyBPfoZ39zsJl2O24HOE1CTNiEbeZmHXmjBVxTSSv7JlJEXPYhU83DhA2yg== - dependencies: - readable-stream "^2.0.5" - -lie@~3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz" - integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== - dependencies: - immediate "~3.0.5" - -listenercount@~1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz" - integrity sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc= sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ== - -lodash.defaults@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz" - integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== - -lodash.difference@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz" - integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA== - -lodash.escaperegexp@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz" - integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw== - -lodash.flatten@^4.4.0: - version "4.4.0" - resolved "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz" - integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== - -lodash.groupby@^4.6.0: - version "4.6.0" - resolved "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz" - integrity sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E= sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw== - -lodash.isboolean@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz" - integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== - -lodash.isequal@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz" - integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== - -lodash.isfunction@^3.0.9: - version "3.0.9" - resolved "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz" - integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw== - -lodash.isnil@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz" - integrity sha1-SeKM1VkBNFjIFMVHnTxmOiG/qmw= sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng== - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" - integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== - -lodash.isundefined@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz" - integrity sha1-I+89lTVWUgOmbO/VuDD4SJEa+0g= sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA== - -lodash.union@^4.6.0: - version "4.6.0" - resolved "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz" - integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw== - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== - -lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -minimatch@^3.0.4: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.5: - version "1.2.7" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz" - integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== - -mkdirp@^0.5.3, "mkdirp@>=0.5 0": - version "0.5.5" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - -node-status@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/node-status/-/node-status-1.0.0.tgz" - integrity sha1-eQanxHplh9A0lr907GNKuqA/joA= sha512-vYKQTNACHKZRIV64kLuZ3mO2rrwoHUL7GMgEOmUFm4fSntm+guwAlFAhzlNdcMVtyppyR4MnHhaLqTNTHnFawg== - dependencies: - charm "1.0.1" - cli-cursor "^1.0.2" - cli-spinners "0.2.0" - colors "1.1.2" - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -once@^1.3.0, once@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz" - integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= sha512-GZ+g4jayMqzCRMgB2sol7GiCLjKfS1PINkjmx8spcKce1LiVqcbQreXwqs2YAFXC6R03VIG28ZS31t8M866v6A== - -pako@~1.0.2: - version "1.0.11" - resolved "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-parse@^1.0.6: - version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -printj@~1.1.0: - version "1.1.2" - resolved "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz" - integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -readable-stream@^2.0.0: - version "2.3.7" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^2.0.2: - version "2.3.7" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^2.0.5: - version "2.3.7" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readdir-glob@^1.0.0: - version "1.1.1" - resolved "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz" - integrity sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA== - dependencies: - minimatch "^3.0.4" - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== - dependencies: - resolve "^1.1.6" - -resolve@^1.1.6, resolve@^1.3.2: - version "1.20.0" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -restore-cursor@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz" - integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE= sha512-reSjH4HuiFlxlaBaFCiS6O76ZGG2ygKoSlCsipKdaZuKSPx/+bt9mULkn4l0asVzbEfQQmXRg6Wp6gv6m0wElw== - dependencies: - exit-hook "^1.0.0" - onetime "^1.0.0" - -rimraf@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rimraf@2: - version "2.7.1" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - -semver@^5.3.0: - version "5.7.2" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -setimmediate@^1.0.5, setimmediate@~1.0.4: - version "1.0.5" - resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== - -shelljs@^0.8.5: - version "0.8.5" - resolved "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz" - integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== - dependencies: - ansi-regex "^2.0.0" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -tar-stream@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tmp@^0.2.0: - version "0.2.1" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - -"traverse@>=0.3.0 <0.4": - version "0.3.9" - resolved "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz" - integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ== - -tslib@^1.13.0, tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslint@^6.1.0: - version "6.1.3" - resolved "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz" - integrity sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg== - dependencies: - "@babel/code-frame" "^7.0.0" - builtin-modules "^1.1.1" - chalk "^2.3.0" - commander "^2.12.1" - diff "^4.0.1" - glob "^7.1.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - mkdirp "^0.5.3" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.13.0" - tsutils "^2.29.0" - -tsutils@^2.29.0: - version "2.29.0" - resolved "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz" - integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== - dependencies: - tslib "^1.8.1" - -typescript@^3.3.3333, "typescript@>=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev", "typescript@>=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 4.0.0-dev": - version "3.9.10" - resolved "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz" - integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -unzipper@^0.10.11: - version "0.10.11" - resolved "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz" - integrity sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw== - dependencies: - big-integer "^1.6.17" - binary "~0.3.0" - bluebird "~3.4.1" - buffer-indexof-polyfill "~1.0.0" - duplexer2 "~0.1.4" - fstream "^1.0.12" - graceful-fs "^4.2.2" - listenercount "~1.0.1" - readable-stream "~2.3.6" - setimmediate "~1.0.4" - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -uuid@^8.3.0: - version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - -yarn@^1.22.19: - version "1.22.19" - resolved "https://registry.npmjs.org/yarn/-/yarn-1.22.19.tgz" - integrity sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ== - -zip-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz" - integrity sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A== - dependencies: - archiver-utils "^2.1.0" - compress-commons "^4.1.0" - readable-stream "^3.6.0" From 70bec7afef72b9dc58e4613aade90af3b2b128bd Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 25 Sep 2025 10:34:10 -0700 Subject: [PATCH 635/660] 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 636/660] [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 637/660] [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 638/660] [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 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%0D5%e9LRzwi&yj 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 KjI7;%d;bEEQ!V8H delta 19425 zcmYIvWmFwaux+s5F2Om#!QCae9^5UsySomq0S>OgA-D!ea7)nO?oROF!7tx^Z>{@h ze$1ZTtE;A`s(M$?<|a(^CQQ91BD|*h=*JXYLvd*93vR zQAtAc2H40-^)NK5bW$@L^uF}o@b>OnvNYEDm4GtrgG(J?N*%^4z^2<2Gga4~Mnoma zIE`1bjUGQ0BJUya`e4~|VD>n0KmRUR=2y99WjwROK21$b$0mzoPt$%8ElPr!`LMRC z`Vf$;uBDT1zS559vXRD{%%HK~i`G7%2&sx$^s33a zYD0*o)8_Cb6iZS&n3^lw3Kh};;s&7Xur;yhjC*Oclf+;rgeedH-1(?9u1vQ7%xp;F{a=Y)|xF<)JD zH#pA&S$P39*J?(5j)kP*D^5|#z>wbOb#X=4Dt*)rSwNN~1=$DL9gvv5t1jA>sV5u8 z{7VZ}o8&oU^hB%?eh=S%u0p1=aVpJS_9}x6_hQUa7t+VF1Vafm?6^I~ml{YJqy;`; z2L)jC^{8-d@aizJv9DRQv8T*Y@ifgMUs(L;kt6638xN=0%k`)Xn5!%_-wmzjTJWAu zBzKS{V_LTnTB)PZI0smY&!tDF>K^i@Is-;yMTno_>`}TBlVTh*QKIe!pEm=6ig>L1yv9gBKE?A6h1M{tdvTh#}%NaiDO)qR8fUzaa3vdpDGk;)DhQ z9G#chu?9C(mc8qr@`MnPsA>xEYNm}ekI9Wl4qypfbC=3`$^!2UbHzSVYE`Qb3GAPF z-`(ApwIb>zSx?H83w|y9pbE>Q6H&e(@OfT?k#GaiCDTeb z>s15j3R}peB!4o`JM$KC&}Hu~Y=UQ247oPtd82h>)T!=wO%0iTYvUh@gd^|l z7F@*q{g6NX{W(ri-KFL;V@;Grch$Xm(7v_Ej`eiuOBK86w!II5Bb>47)T2BKFvG>< z7xMEw9DSnx_WQL3U2N_PIiel`qIX;`bF565#kcPyV^&QT?D>iPTPH!TqAE?I*H)j9 zPF$*DZRp(vQRzm(XypKxC*Pm;;7;FW+Vq;d0$3-Qrts8nA3REDTRa1LYTjj`SA~$~ z6FW3rHB{cCm3D?z_Mxd|s`Y)x2PXbTCkPla*rz!NuVU%0GB!UTG*|V}*dNnVxz~u@%IUg*dXCUYo~F zLg(ofy1jPESJZd!USHq+cS$u|N%+Z|@RTMlVltB+@X$B}zj!$FOd-zOBlMd&*~IGZ zTqoHw&H~@^f>L~%btdW?z-lRP_Iy3K0X&{g9Iyc|mscv?uU8wu{d1kDgXq&<;_Lk$ z1(5psFtI@Ka@oD|GFta~zwvtabed=kJPzgq&s%$bondFn2aI43*A*#XK;*JcJE&kicyqEs<0AjC>{iTVb~HG0!J5vjfQV)@1MR>mqr@ zK%MS(puYai-k;#+g2}Jj;Eh4`p7e=1bF>$81}Xn>YCC=*YU#%U+D^y3Y|n9Q=M^!> zAJ1L`qk|~hOXDaY;zt`tl&CW@s6kD1`noJ_Y+CBfiL0BC6ZrOii|Bs|d zD#ScS2F_fV%9xvM>x36_*!=hbnO<}Z{$DjvF#I&-IM!JLIuLfE)Yj;2b)us0PWZ|f zbX}eJrDOEAiW{@XH#vB9zfJm&65K|c?_aDv#I_0}yzAkYf}GZvaJp{6og)HMA@qP_ z+AX0vD+ga~g{IaYeSWFvufj5f6D<F$=4PEiA?ZcMQq>?=d$=)kbc;1uJA6rca!T`X6Zap$)9oCeJ$AF@ud?p~xHOWKR*FndwYZq)@# zBnFiH&*F?Ibvvk^fD2hd<;u-=AP*vTZ%Sf^5Mv6<`ED?5|GYsI5|%5#Ax)_KW^D`_ zo#m)YWhrvfF=jG(iNpS!Gm0B+0-h=Vf97(Mx?DAVYFkxY+WnZf=cW*{#Et1jye$mp zyDl58@@e=63+uuNC;!@X8g{}g%unUtWV@~C#`8U62ZhlYYhUa%3KKvDdUO(HvihvU zMmv1ZoKbNV&eXXWUnEOg*nq(Ht<(>f1)utDK+X z!qrYK!g)&5a`%DW$E|1LCDEErLJ zW2ytEBO$G6-DiGy%+gn^ztd-l%Np}CabLPW8^wm5?`b{%03Z_zR__n}R_@yqm^Bq{ z3hiGmp9yid@pZHfjAyCOx|w>Iy{P3?Xdksas&7Np|HgY1Ah(P3+wN`gj1jC>_s3c} z^4@9ZNs`U)qOI5S9@QU_7HZ=QiTDJ6;?Wl*U(6hq&;63j`f=8NOrtYP?x~#wslA zkhC*85>v$goM7od*NS^C4(?Btw6wc3 z23{hpw@4qVHuWUus(h_JYx8xl1X3+uI~^E#-uDkHoMUIt^|U(6v2ExjvQsyAE*Z!I z$`4z>U{}of@xy5JUd~#T4EuW9BKg**x3%4DG}B~6t+kw@xkR1?8YA8wFo(Z)7L+KuP1_ql$^Pcj z=RA3i%e~IMF7uSGvMw#7+Yl)m&dc+6EvFW=vEwA6T=E$A?9w5YF?h|p@)da~a3&E+ z-)>XC`$mLermsDQq&smn+h*&U_piRl(&-ym{01iClQmL6*1~TWX**dbeP(0?CX7C-%?DI&35&s*n zL%EDn^t|aO7gpEd`^UY&_mSll_`Cz9Q@;tlX@J^mE#-Lc(A#43h`<*JmF;{7pEizMUV|3fAn zwIu;a(cjB10ST9&mgUSJWoKT7aaajD1~}Bt@xhymmd)HGpgGHixOx_bpyPIFbx7cB zx6Gm}+y(~qkcfHRH z3V6m_@s^jp5|wo-hq4goH7VYv6^r4fPuV=0jbO`GuWwvHiV@x^NLwKzr=9=Dsw_>{UYn?Kr|5Mavz~BA zEE+b|b(h<6eDLHW3h{cs>36p*$DPBngLN)wIbFf8?K>nryUliQ6|n*T=ICoH_o%gB z@i_+%Y0<@tHic`SU5fA0m@(iw7o~SmvaffYB*U0*EJ3dCq}z$MWX|24O4#&)1(7++ zOz4Q#a)9R%qJdThA05*Zxv3n!5M}TKr(nfdB+LAs(@|*~Du!2u_1Sh~P#SjfwFsTu z1E*ib8G+ofIf&I;gKf_6Pbu$F321{lpd!@zT-{KHZO*cN`m!{>_~V0oxhLdkW!`tj7dNL6u&$r?p!H0ourH|Eknb)t_(f^!Tf=fhO zI|a#R<5VvmB^ztU$z0?+6UobQEc@rgG#(n*ql5oDd%7 z7k<9L?-+*{JFvMY7uD&j-&C+kCX^UiF-vcx4^_=pX^&g4+~QC&q6?ccJ_x#MHO3p} z=7>DfsiYA$nc>bi!1Wq)&5P)hVsYs{3yAGayZf)pzi`Rd?+uHV^&g zNYFPfJ6kU)Y-jL~1y>Q3UjfQE_lKf_-LZQzfABo{V`%rUe5vf;R!j6l=68jcb1Ul4c9HTer1uA6 zhL2yC;!Dy+nDiYPF79j2h&rJws;}nHz z_7Qu6Na9YE$=M+IYhc5KBC<27X!Y3^P3p8ki*ZT<<7&e z)L+ zE{7dNebtXOVmEg=*Q7!QXs;9Zi_OEBCi%82UhtcA#ezNB(9=d;a0P4BZ~UBfN9>Z0 z7KWAMOEq#^q`rz>ISkRwqKp1*_kGSf4BTwJoI6(2mA6kyUSvl3%7Tr+Jy9f9P8I_z z>8lPdWL(OrbownLGv-gjB(D7_L`fUJER2uy75T8=Gv3LbMI5UV$nLBdnH>PsIdc91 zg})xZmbN(d#@_n4kB5V?+G?7)C7Ap=S5ecCY@FfKsy&tt#A4`82;#qmI=#^To>Ysg zDR8T}p$CbYJHn_jqd;CEr%nV260ht_(~iURU_Kgb#_ydx*QZ4+;xzs;#or>Rxmx0j z6UT(&VC5>d=mPnG?nMHL<1Y%9-}yq#)Wk+0P8MqXPP4+WT`27=YXlwFGUeQNGO^B0 z`CoW$5u+LJJS;ewIw)coGtB-g+!;dhxH9_0lHwMZ3^y7?D4H?RBtcpsmOwq~2X zdy!G1LR8&7=LWrT-uAd5wJT&SDQhrMUOmO1&T)&qu6Xkl6?yJ#9kS<0fKU?B&QHDK zmO+CuM4@NuteEAI>VUedUsif|r3yFsf4Dz~7K6pgCkP@cxw?4gqLbxIaI zEpHZRN*@G_C_WHBqzho-#r4S%N#mvKTJY5!DC(>D9n%Y2`^BWI-k&>Gyzoh$N~|>B zMUTF%T*`{?B()pmva*YFi)xj!-z#QSEB@9Lp0D%`WBzRUR28Y?2j2*>%9Dc80~38{ zVo`07(pFmv)+bTKu+K&vd(@KIj6SL5B9g!CZhb)Y`z zhqOLn=YMo2y96$pDwc!|Ewa+0O=S19PdQ|Jq7a!viWv~F^zhk~?} zvcaIi6c4eE#5h&QOLaN(3U{aw6*7`|q3+F%6gk$IbYoEHXU_KaQHj#g*3#uYw4a}l zhx6h<4@9Vlya^fhnxKS-qm(J-5f9{vc?~{n1y5zbQ3_QuT{7uS&<4Ue(AuVs_ z;L=}LJ$yvo8+YMjvnA1QlP!6-w79N7L@+s`n_ z)NzQCzU?g%rOU0QpHA_lw?o2{26o^teCiSG7PqH?Z%!0WLK3sC6~7*Tse;MF>AF_j zkNOEPk@OdS1%vF|KPr~qt0^EZr<~>0jw_ zu=>agv+wJF!u4SUilH8Me~SA3h~#{;lTqk8kLRLnG%47-YkA+OqiUwX_Xm+Rp5XMoFKT z5fS^~tf2MG5IYd&um}W%_4hB}4t_9rogupu!}v&PPU+PKepkVvU3vABd~mBc(mb?6Lz zHRLCp8*l-k^t+n*@Iw=lf237l{M#xIckcxbh_+M>~LI0v3B<>v%5u`-WT zdXjq9{y*iiyxAu`ei?d2#fBqdEycq9-5&;}Cgw!~GAZ(j5Z+nnHU7dfj^ zj`X!#POIp0tPTpIxtH{$ z0nWjef-ZJ2jJeT#i?`^{rZSDvvdNnR)a~iR1QhuR0SwrY7MVHs%%Uw&8=6Hcv9vFj z9Hgr-;GkNu23~rbk}ex3t1nsozP(?V1tO0L9&talu3Z2dY0WE}@rP--gV zUwj#kcKcfjCBzz!>8G6vgyePn)Se@pm-CU_P^NwxDI}Fk|E6V{O&Ko{QGMJY5h);_ zcefs3$hTOQEj2$rHIH%QT|*}0!NKHCD>QlV%G$mVW6e4_+`++=vTQZb)Cxu#FpqKN z&1t<5(|EM9v9+a`d9v=Vq*LUlkybPEV=DQmHeIf;Lt6xS6q}U96F<}1szprbP<~B8 z2{r6yiHGGX##DhgqgH5fUpwTe>*PXr_*{W}uyUc-?M45!EvVAkwE1?NWTD&}vS6l< z(_%u8124f-b7_8vdpk6_a8Jhrzdf&1_IXSD7{%7u0Xo*AM9V@cMVoUp7>EU>O9p|W5#G`?2G=vxx}e_WII$)1SmUp*|+ zTFdSlo>&S~g%>;O`*50tkZOaBaKL@87C~dKjc#Y%&+_y0WNd$kM8V5cyPXQuA6=hz z6Z>2hB{&C5w@&7hFb@+P6#A&qq)BC!Gf!NnIA5sgPJraFPkq^bc)%W6l%pTj@%fjN z;(=Y1DSAqAP~18gX$ZOfrX2(=b!~_@nkvLg<`kIp-Vv1)$0DRh4cXp7buFk(aCwna za)z3im+z7xD^vbRfeWO7SCsf)>tXn}?n%x<#WIWkq4BU3x_zBHgJuVh1Y!~JQ*xz= z-&++(DS&cS@gx9#^_qkDwi$kNiAs6;5D+xNh7cDchtC)hZ6Ner?%xizW_TR-YQ@psBT zpB7kp_b~-VmQ=GPe!$=Bjz*pF2R8JsVC{Pn&49A>d`p@6_G%~Xo8vL@f z7CKf?t0x>)T{m+;k*gy8^SA|76;mU+wGc(%!Iu1(Us}eiE51cfM*)??%*BPGX()8tbjK4S*cmY?fuO!c)A$;W{8v59o zCGqe^7kLjJL>%-{(Pw-Q_DB56HyGdOK#JyW7$MCYzNYZ`Yh_O3_yh5S2nu*uwkWv6 zp>>Z=VTWJMfy~q33u3tNuw3$2sLyCf7v@|2@h>SDB)d|`{dhkh#b^Av>M9sY7vrnl z6armV_@wS{TK)w-eD|+|TJ*Gp@@xUzLjJy*$^M!Z_R>gZI=3mIol1-PeT;fB!sx|T zwA^Kcs;*1shlUa5q~Y0bCh2lh$!=q&8s3G^KdT>u^62pqBn}GD#=filLu~6p+pEnh z0cdv`$s=g&hOR9kc*^8Hr}n}@pVQ42A$UVw(l`i_mm<(??J++*ynIPJ#T(mTVq^L( zQ8{ItS2;7Rk(94aU5Xzhp86E)be^u;bKEs*6HML5sLJ}^g9OQIpZ<&hsV-4 ztNpx?Y-dYo;)!Fa)Wo`w=P)7}A>Tq()|L z2E^%N*3s<|qI`LL|Mgo%E8|F$5Fj*0y*;648fy4@h*N{D1}aHG!x-zxFh{LeD~Zk9 z(~TMbE%QWItwwr%eE3zNR_5PCV-&w0`xR?Md4PQ<8{YLSAi*8;I&>j_>Lz?3tf4ci zW)AZssROWDCqrdq(!T>Ni39=cAH?%0P|W3#D;gv^2sdm;B02*69tHwsR*na?`%GuOwfqTJ6fJ4Y_qt@U3v)td@egKgHJ zWj(4v8c0clj36#_1e`wgeB+PzS#4pO2K{2dw)>NUziLNN%Wii z*3ajZo*0?>R3~sYuNUBdbyqJERKfqjI$O+!DBETZD`8C4i>P9trI?<$ixj>WoeWwgFPo;T;JX#o1Z)vN>q6 zN{N$Q!1QP^Tr?P&N8*%VYmG_=7SdyLdK@?jqC(V4)6 z@bH!@e**Gaz)Dn%Jk?|%bTEe)lp+jE%Rs$R4nD0W+&-pv7**O>tP=94*K>z3_wU#_ zJ6lC$F_!+3FCg8O&*aC;%2}EdwPdLJB%2JGwH?C2lhi8=J2y3YnvLRP3+Hx-B|TPG z5u1e*C1hnFo@s)h!ag_|_Qh(|NA4$p%_%{at(0lM@Ff5Cn>inPI7fhK3}P3WhS2`w*^0z_>ig#f;Ca$;6M3ZQU!q z>|f(5z?`1y5F5@l#>tEle!iqRaP^I535;Dq`6aBNks?BMKFM}`(+eYXxn_L8`iOp* z?rjC)D#JI&U8V`oNvNJBEYe~&t>d{kW`Rkf8!4g=U~c32x-fn-?+lI15#i5*%|eZRmx^E{z&BEmGfy5E*P+k_^qr zRLAM$Ms&$j?a*Sh&zZp;FW~nw(|^mmb3HWCb_gm;$dVPPNeB9I~vxXvna@ z(l3Y=qSU=O5{o9A?IJjoF-OHjs@{Gw0v|eOso0N$mqRw0u7W4g$FmpxFmk{vo~ES4 zi;|H$mPwt}hb9wJ0Kp?1`9dve$73s36ItkGkl)U2A%zFg#`y@3oljW|EB=Fwszfy< z9nX%i@8f%D(%N7OPNnZ)5c#T6WY)7mJqgZ*6v-ac~i>&YYs37L8Ujxf9 zl7$W*W<0D4=$R@-#!&T(e7-2Rg-h9}ORKC6N^%Ya?z(%AXqT|Wndh>Q`R3oIUtS%M-)zkNVNEkXP)t03-Q(Rs`rsx;T{vG*--4`4o=G$@NkC}Tfo ze0Uox_mRrotmm$f;(i2wG*}%^WWhaX#!>Ii+4dsKruW24=_HF$o^&*HCt)pC$~6Aa z>gQ*Fr}#s>XM zA!t)V=KXkj7qjnL|2*)M?RVzxesoiGHb2R>kpe7ZOhIN-@}RKM7^9UdfdHQUuV}yM z;tjtS^x@*Sw0D6@n-80_!}cRN$(0g?Hrxj1xMlso`!VKLa)4Tgk|nhyTn2J(`HA6= zkX-#1+MJRA#qzE=7-LsFp+y|UwwUzK%9+wPHJ24!HRjtca8#W(rWx4|Cjsaut#z3o!uLz;=cNIU#Zb#*%L%^r1zO!L$%U!d8!TCy7e> z|I!aEt``^$sZacJ;4eK$3f#3}--3Nw+kQ8|k-Xl`!!is-q=SCWUeIFwH z>th6YvNQuewNsH;LaqrO^hDSsQ{w1G7?auDMqr zfcb^40+vQ&L#NzaM?kFxIVV`y{W5JRaKO7UY*N41wut8V{5g`1vk=eW1#(;e&%YI{ z!&)aA{}*=ynaESN2TQJ_L~h?1h+y>65VTILdj*FT9a4*eDaBL?=((OEF2f9uc5CnI zpaV|wKYQF>tlLzn-VZ%M(6CZBI-Sb^D6f3wAKO>stw^aBcs_q4(3X&!@S74A?t1ki zsV7C{B_WbWgdz*GYfr;qb$C$}5?SwJK9E`uMQ>4XIJAnG zmb34zR9DfjWWgerE$SJ|sd3rpf3nd@X~EhG_mxA6cxx$~By@7V$Dw`OZKQIA(c(1k zC8DND*W5)5Ffpqi`Y^xaR#i^5LkJ)19S?Ec@#$8z4GrO~+lFA+0tIiIrCPDe2r!ZZ zYMy1}0j_UQ_%k`L%4W)C|I(iukn@0vcgeX7gVTCNm&) zrl1+5;qu+L7FMVQh8!5mghE+oZfxS8x_&0~!Y!Ao22Eiep?rRGn4pSw#HsSniJdHY zV%sNMdAw*^`S)o6x7BDqsl*7wkD{+HxFWJotx|uN&{ojn`B@A&8L8w40GSV8!u2qa zOWz`gYr_&Z555Cy$v4;>3}!V@mPjrsQl&#NZyHTzO|p|mSEl3+iFPO~vI@tS)G^%5WV;dMbe$fLi^?^~hnv=G}sEB$pzc3^S zD^mq=~@Vu%T!QtGY~``$ICta zd{2b+Ld@isTkF?x`8W{0N_ZXnlq$%n9GoQED+WM!!PNp3-J|Ek7M4r%3d|uO`U~(3 z6&30vO^WXf75ja32qC!RZYk|VszhpSx65&<@-=DHU|b>G#_FkH@fYRg0XZ!qA$fK zN+2zDOjDJeT1k}<6`XJRv5`hAgN7WfkE4+D={^Vl=8~~LW5Cy@zC%vds}NUU*bD^y z8frFv(e%`itZK*~?Yj(h#lqy2w2ao*W=OH!=m`f$!f?<$zB}ELy0{g~gWFS45Fwqf zrdY=~Ae~mR{i6qJ^BDdnjD?0g5K$Cj0!;LZVNs?ew;BHY@wESU0O@;`0Ojj*3}AZvd{ENCVA&cNT*R8-3KS z8nK_?WeR#+5x2=Bgmpc?ya56{%lW7XzRMo0gD)!FPJ13#lCkJSfYwAqP-BEfobEJI z3Ex_HXwkkna8jpUUGz%t1a`Ur-}^hLn0)OYTN1HsD~;fvfr`9mP@irw&uK2h&d-Q8 zu;1MNxaaoO2$VplCui6}3e=_`&_B&1PDW+7_~>dVJBa8S9Oee0EG@J)1)(q!Mxt^H z!f6=wZb6I2`tI(wlJx!&)F`REP`aiXOljN=`&~PYe&A!WtGE|<;r;?(M6-^(_rqFE zZ{?ya`JBw;cO)uDu)M>N|2y`E!X41<@?GT*f+w{#2T?9rt_MXwu-Fz^gvz(%%ErL3 zD&RKbR%5X{rLy&vY{*l97zT8l^(7#6Lv%)M|$~E%DTRo1D$c z==o3z@wSsW<&(aJ>1_EGB?R`6Jq3$ z+ZrtWcF4~^L|i4I>McsO4mzN6GVhC!uHh^0x}xBGRYe4ZR(9-JFiP41OCqKMBYjo@ z`K`giK}@n^2z>_Dx|nKt5ziQ=*TvrvzXMu=MskEc^dvqke7v_-VH|{nl?69jibkG} znfzZtls_RYI2usrMP<7|mum0CGWQ~A*|BiTGtw!F)Pp-Qy@%hUPLv*XT6 zmhk!IA>XKulQ>7p6-D(G1sizcL||nZOiK>K|11i2I1hPzWHrQH=gUObm*0O9=KP-0 zKsCVBzB}}LfmggC7;76*%lV4Ntq(4gR~MC%-g`p^!T`{)F_f~;!nr4vr@F2C@Fh`M zTd0}PI~R6Uq*SX=DzsC?Xv#An*xkVvYswoX%bU_mR7SJBqPgOd>m|az$zYkoILU+v z7SR?|!r~py%t?x6HQQvBY+A=u*LHF|d-b-r!{$|>M%u^rdq&^9mR-e>YgMQPjwZpO zzHmyUCZKVdY=EFG$0__UWvI+&nM0r?`z=d{1&<{o!2B>~kapn00X1BDz90#dLQRt))&Kh6 zLo%#z&|I=;k!6Z4JB`E5mVhB zE6t*kK(xu8A9?;RcFUej4;p2XfMI9Nr5_=EIR8OHwV2YeS52$YxGs?X&mu!4DLx9| zL3PXfm6ygMIS{iAL&*yf%@Q5{234JJJkDLc!IfdDd1qKLJmn2e&@!Se4!su)HG2-9 zRBnZ+KpbdrIq)Uwkw+@y1M9d_gEX`A~5Pvpe-~ zShd5SB*K#0ELlU1^*&H|T3(DkX;WbGrbC=Lx(qcAMi0#!b3c;XF!s~9JWfUdBnMRX zcVNj<9zKM0mli#wa5Vv2-k8<44R08PgpUkMStOy@K=Ib5i2*^So!+_|Qovd zAQbFR>FOJ1(+LG(X@HPY*fgk+z;kk;J*rL$NE~A{=$T{OCN2Ou=dK(F5piLc zbda39wT3)4^hzYZe-t_=T+$mu zkZ8FIKal=LioLJw$_@XfP4YXg333c!Dx+Um8u3flcTKa&I<=c!@LtTatnH5yO$s)} zz$x25vv4M+JH}vT;qhL><8jlo7Hvuo?RCy_`*OBHTgl9f1YV;DTH24DSD-!$MmWxe zZ~Y$M&)MvEm(1khG?g;k`pNA%-ETERtjkP zs)H4}h3Ahrib-MQ+lNy50DufGpQWc<~wlY$8%)aPZcOEWwse1uGlc z+u*fX=I^@LUY+B>Z>0DqW@|h-CqD)&t&a#EA`f&(~ru`U8 z5*6}(`L*u5uDb?9C*>G$o3DBG%202+b@YpkcleEJuV`z0iEnLu1E(`2SMBBYz_^-n zG%IQSvDrYv`lVoOdh1t%y9|RYciIly@M=CouW-1L-=1sOOFg4RjxP0!*@E#p&X`k`93HkO%Rk9ND^#VP|w zPbxQDp!UZH=GYHR9TOvuizGS=oqSzU@NyW}Wc^kEy+=o(OiCn`>y4nh!A4ZV$}z^= zsw5*A@nPN7pxGkfxXTGw>PBzXH89`t=#(!(Qb67Y=mgO&R1c9dH2#&!y&vTCl^63w6cmj2kSppNV z4?j>W68Dky+&tm<_>3fxS?o+Hcz4~^!eGpG`16RVo6TjeYx4%^f$`STaY4^vS(1_J zf9IyM8e<;o+S`(QTU`+rn{+>;0bXflLk?%3b)u=sL+5$Vv|V7K`OyY){McF3=8t=< zyGMrj@Pa_KB~PSZ_K5}jQgQtEx9&pFD1QDfOWZl7Ya(3WIcU0W5LK`|8b9E)+1e1} z`tSMLdBLjqjjF(~Qe-J4Z4qajf~aD%PwUCN}@D%f}Wc27GL!0TzNXnyz8 z{piFiW)p`b7ZRYUhHdj1?%g}fw||t--@SY1^LC=p!`H#moz=(DVL*GyX@?gtkZlsc z`d4ccv$q^s(#xL^3sV*bD;LtGj$?_tWd_xhahd|oX&6>U6s;;!T70926)yj-o<`s2 zgfwj?(JPhGtGeMA2S>}aXgZ)?uLR<=surLVuvn=>Vab4K8RroSV5nJu-K~{+0RA1N zM~K(26CJgZ9I`E4<6&X!`f0hJ4IvfFGJbVPPR+stda1uIgtjwLcCocP?#Zzd<|Ml@ zNrvwhC$l;2FfdRNI`leMP%2!02OmMlTyW8b4N7|p5;FLYt?yix=_@R)Yv1uD8_JSg z3anXv`|JX^%fRlALX(+eXXv^xk0eU;N`|PL4<#+vAU8!B6Kq5o)(p4F!bqUvIanZ_`XC61qS9@DDJeRCi zJm=D$F{>RPGt%IX=%y#*ynoNva8C+Rr6!o1)|(Mv8R~t7FnW_*|6Du`Y^zKO-NJie zq`m?I4(uLuPi$Y5gEy{9l)u7tY&3r|IWl3cMr~anW-qX$2Bu*X@&5->>-nA8@eb9XF~iL7QZO{d)LO&yPe|5 zWh1xv{og$E161GZCb%~0W6tXeUfG69YvAbV%#Ep)9aMNwMwXK??#5R02~a)AUnM>P z%kI!{*M+)kHDW}yf~$X>S}zt(JMYwj>bBxgyT$8lLS8xyU%#!cYTJH~UWjw?QfhR` zs^K%`ZP#<=o#RyA$?2wbF8a_By^4#G%92&X9p;@v{Do|IHFJ zP!92^u4S&o`!aBMj2fKkfE|3&qLKv#A%%jF0>Yne4;GXHZygMDmiE`~?>0IGM7fkq zM=O2(yk9KuIUYyv^$xDe#_U%zy$?Rle0hC(x$E{{@q9u1#k*<dtr<;h`1^L0I2&*tGG>Mh&=D_Z9p4|h$1 z=WVSYUY=J_9gyN%f7Lnqx}H1uUzi*$tGLniyTlN!0pX4ogQW z>YQ$mi&)xm*{GO9ez_mxdi+`Cu;9>3|FN+bo6G#Od;j?mWk2_3A5UX;W-MR`VgVMbBzly4z_u*G~T)i*- zUWd}{i32RCm^=m)qAvRKdoVN=Jd>FCAXx9`tO`$+I^CPEYyIrotu;x%RG+gUsVpdcpf*u7-~Tyli|&mlc} zK3hN<@xQ=&1jUtq&wEt#a_1*eO<^`GYeBQJ)_j%j6&*|U=%vMx;=z2Sf;iC@uMmH& zLP_#3)cj?7BnB)w&`ADkazg?|kt^Qf_ft52>fCE+h~8O-mQ^F3>``7d)8NNr{(i?H zBT^d>(~z~LriH0)E-Bq2IPP8zdKh|Pr4hoRc0N+;H25%$ ztABXz7tH3IsCRK19nBc&Ii2N{z7seQ<%<;k&VrCT;$&Q36hYRF-GAS&vu(6>K(T)g zkLfL*oD&|BW8SHK%!Q8hd)M+-*^<6Y6bY9})ULamqn>@Nn6@z0m=gn&_%(^E;IQrt zMhjVj=k)X~im8eFOj#Rc2$xO$H9r}P8_u)hEJr%p+8d?hf1n1Ag}2?)QVh&^n0_2w z#@2{x$GW41bq#+;99coI;Jdg6&gZl7x3TO zO1Ny+Fn)JNs8W7@itlBxDoXM&v<%M^?TV4oT-4f%yQTLn+hXWZYNPG*=SrFoMvrvN zL+dM5@l=`Z;Y)HxRIasT`Yd%y_7C>s6kl>c+udRAC_K}3a;^#bWl-tn|A`83DA4OJOxA$GgnO?dxRKJmal;C|kj;u+uw}Fnn7M(j50)tmmn~ zr{p&tiO~geyVSU9DN_qQggD1Nwer$M)y^k+CWD1k^sD)xP!Yo%sJ4rpxc*6m?UlpV zrY(w<2}u*meX{nz3o&M18%md5@2q~->J2@zu!~8ZkQj(K^PYLwK;{+rvDlzV6ImJg zS56rBOu1nDfVZpL4sU$Mrq=18@RJzHYXnx|8BDpG3AQT5C z^TDgxbIUadUS3kqG&Ngc>+*6INdXhvUh%l)EB*x#P<)ljEE^_@@c z-lUA&P7PA6-%QX#sPT~WbxGV&0eHF(yyVW}L|f9j!9l-W-|OFAR0mB|Oods!y^o3t zHE|}6ESiT(aTl!2TC9s76eeZZ`hfVwiyeG2E-q(HQ?uJTQ^RLMAW|L~g;}2$>W)12 zjRaDMvxKuAjX)&27@#Kx3a{R501)VUbF9kd>1+{+rS&9>tmdE!20M_wZpVVb^S~l% z7n}@?J0ijDWCX$;92w+ZE=PDH`hEZt1wd z?eA<+u3LKQ!dyL%mMROwCC(jj){b{mH^BaHKZ<**Hu+1spHi`%q_UH%>ka}Kbn-;} zS-=qYlnVfHGvJsd$?S1-UD0=0QFCtd45{Baa32$iNWEI3O29=ujUz4R$C(|I@M?*1VbOdL4f{1V3btt}sFOoN4SjJp=4}@{upNJ^?dT zwVT^d0dr_^ycKpv2b%hsV;c_*pT4BBoMwK_v@B8PYL6jVu5|m6nQ5KpqXN16;diPx z@aUnt!uqe>Cmw3>EcmXK3(nu0`s(s!RA*t@y@DWABIDz?-5^}C{;4~Uz0iL-NyPp+ zIq8@B*ppaIe6hwXm{h&t%&rdUEPCf^_V}j z2a;b7t0XIKMd;UUV_N!4`+jF7;$su*$m#u)NGICYBbqb}h_KrmOaC36BZE_`#0Bfl! zW4I>HgpZaMAVSQl8U<^;9~49Q3?{wa#3}B&`~5Znsg!y0KCgWK^gw=lB&H%%!&WzQ zhf`}~4BxgOs&yE<9m0w6P{_^_?{rd@tgMS{j}dANptw1Q#+{UTjWSj9@Kn`M#bjZO z)_h>|LC5!;wkn-SG~Xm@TCSt5ZVnK zYA(2_DC?G>LaLEN@X`W%W#@43#%1)Xk}mV*cN=$?{NMnmD6$o^64?*Z<)q}on2lVE zrH2HOJOp*)@M#HW*y`hF+`lxOy9M!xdC=QS8zeatM!I&&kHso%Ft!J zuD(yDRk5W@*YXlQidG;SdJQ7M6MWNToE>6>5(fu3KAR#kq2)q)w<YWqh&G_zjk#rI`C3{`ZtcSM3`v!1JbkUU?E+10n zCD$Ax_(~jF5UZNdx8|^OzL^P2Xu_4vI&tR-g-z!w$S#?TC=HBPrtXVx zQ=$SfHc!6lxQM1LzCg9kyi6}f&z^s$Cz_iSJ5`A|yxGlWrO)rIUm7Jjuv2lOC!%Mj z%+q;%=5N;l*kPgM0}oy>WJl=!8kyZo1B{nBzT>BV<0HV>o3ZR16iJb1+O;w5 z)4h8a=oJ8Z?1dBxe(UUy_~z)xwk8AtrmCxmuoqSnTQP!TH{FCk6r8I~g$ef(uHKCW z(layO_K*<@DoQLuQ3Y+5w-D314yxHtrxKR6zHsmKTlvExUurlxhwP8G$NR%=n(++3 zNk_u9d!B7(Y$O*F%wcn1$FFpb01WGf<+D%5qM+i zy=yO;Nn1pbR#n`+#03W%7fgoAxeUYd_1lURkGN7w&&{}Pk9?|j6TZYpMCxS zeImmWji-HoPyyS43q!mXf##rGeexHrm?&rEo2H&>9Bgc#qO8oa$ELhaCcHX37NmC0 zZ_@U0P^Fz5p4yGjG3AbEymS716wSLo-n zVgP|+nf@sW1C+2v;5Z-{tN8QEKoyoBTm`gaFN39lL+mAn6+b{TSelt3@b3-(0v3ps 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 639/660] [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 640/660] [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 641/660] [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 642/660] [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 643/660] [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 644/660] [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 645/660] [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 646/660] [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` zOO?HGdM92($iVc~FEJ6lp^vNuJaQG_GGkX8D5|f9_v5-D}*1clEs-oH+bG6 zHRsg$5JPsa&^{tmc+94A+TU-BjhPn#Yx4+!xbKrdv-2iW^=5#M^8Q8GpB`wr@5 zDoDtc=4t*pK6s~jL}$lN6d4Ge{!^E{rF)QW*HZ~c_U&|Hzc`C4&nj$9DJ1PL8GXQH zZPh-RhevBY^1(0faK|2#5W>^5-K~k~Dz|Sf#*44vSK#ZKOV(6g|9fbvPRzq!Zf7AY zq9p-KeU4A-GY=DvY!024{5yA?4zY_~kqUWSVeh>WDnP66%yz-)gaX_#wW;xJTJCqd zCCTN=ewTSmPD)uRl=?ybEa8qeMR_6KI$QBC3GC~0oa7@$*5_R_3;Eg3)_BhJz0P)W#u%|Ksb@SJ)DdcKfL)wI=(9tedxtrCS*|c%YP`6P@FuWQH9N5a9qArs z$oj=&c>vm?>#NFio1Wu9bJs=itw|p$h^=|?4f6T4{vj8A#y2X8U>udaLrx?-t6}XV zh6Un?>IpQQU?-k^cg+x~s(y+u`=>+~sCwl=@-eq)si*7rRb`hs(L4X-)9les%bb7> zzMbB<4hh2Al?o>Mn6gR^8Jd1UY{0ym(Fxu-T5cTcxoR9sydpuR|A)@w7gbI?9-ZAk zQBs%H@Rr}F_4Ef#@sK$47H5t-9si5>0$8l;3fO2<)2HPZ!0oi)*I>c8rtodWSo82( z%1WBA8@+`Y|BAnS17FSm5wwmcui%PLtaKNL8vHP`q4>sY zx!wJNUg6=A&}B)a=Z0x$%z@^rd**p>SCf8+7O&h_^wV&7yJ-OMkR_+1f59y3wR zWAI;t{16I052wHWKN52PbMvm@%mys-OZBzG{$*f4|N z_Xx`i)hU(crS$rq%HbX`+wB=NTcDKd&j9xV!^C?PmHlFUNXAhK&E?~ixvk*RFnNVX zXN6jc9dAk8xPa;SZ1*WbGaq=&jKL_FnitYh=He z^-Jk#@7$9i-#|*1)j&M&p1^ccQ#5PH)ln%Ra|(Yw5@^_`<3)cLZE}N(S zx@9^cAcof9&Q`VPe})gI%a5$9n*%j=B7S@)gvM{csEkh)o0acWD&1(tFD0l8xx#fK z9{f*c5{EvC+gQ(mf+QtKu%DCXJ(lo4hMhBY&dpCrk>h7vt>d_O?$?XZ<~cxiXyryZ zK+&brbXI9(90#v4_EoH#8X`1Isueb5Gg^20!%?j|n{GDe1!*1xJf)gwOb8t7?l%HY zX?b+_gx>k`fbn^~(?K<*0W<_0b1vT}3r5hZchch@!+bJi4|UugE_l@&(zI5mcIfFBAq5#?LA4}adsi-Pte!Zf zUy7|6pD0WBdcGBw{QW*PpHXV8o?SL0*}fY-PbjUK=&CpE%N2F5yh9&)chQsWCgbZ7 z5`>+XZ^>@oR0cT0%lBp@;dd9G!=AZHsvjHulWsE zL&?6u%K}H%9TC~r4R2jXFFVi45xM=&Ddgl|ovr$R510HuBekbl)_ta&#YjhOl8SXu0^doHR!P@@i zR^?^Ra#$Xi5a{t)q^3S?y;R40(}m|1Pb3FHWPH6auY+E6au9#rzUENI3*qA#Ggkrr zvryyFBi@^yL6-8<&tD&jvpXN+vaU+Cl(RO0(I2m!y=&45WM{e-6dxOvbph~-qM>nX z*9VG0<6E_h4<1-eOi+PuhOTKRHI7TA29AiWDeHz#s?p7F$A6=tr+1xAU={VRP96;+ zXS|?i)fj^!+_;k)BolO6d<&!`jH6v1g|5z58;_<1$h&=KP}s_gWy`9`O2OOF%mxtm zk1T(Ce=}6gEfW5a;el$C$mFC%lpmUp|qJ#eAtWh{f|o&nKoRgTN0(8;Z*1Q}H4 zS$G=o96g{RI|g<&M^X2Q?dLqB_9d9&rSxKGX+raC;i~0JqY*Uk?Bqo`z2Cy+c zV~cH?^M2RAdXaL{`>}1*SI3R6FF+{p#yY;{>5lO1@69LPmd2rLEl0ni ze?dP#Jt}m)Z8S&9?VX;v?D+27-#^a%7Cw)Ax2Rz{y+O?&58dqg)YV_URbzKAATnOq z)iUI;M{wry^uKH_e&d0Aaq)OE`hQN0I?wm5{L-C*A;OMPVvR#*$`!Z3R>8ru&rd09 z6y^R~+uLuZj<0E9R5gcbSo@d%fTa2dv7Zb0_34c%67XX6WdWxZbbWB&lQp}m^Arto zyC(=UHdg_Re^$^{R;8Y%u6~Czip2*ebm_qL6ZaVkbis&8BkkYc%zVXwVYi!h+5u*& zu)D*ehQmg{Ro|sC@Xkd6JJ+f3ITSM~TLa~0P6K3%!{A0G1iF`%zaYePIQ@eUW0E9b zTasSw6;{i@!DU3_ficT#?3R`1v049gAPQ^T2qFjy;BOkz;h^JCAwY#2tY#HMfqkjx z|BhIK1*5P;pASu0{#K5e9DWKo+f(GndA|9~pNv#8Lc?FN2x9#MoI6oq`j8xs2Xody z(2e@f9Q%*;y8dMLjFn>0VeYzy+z77wh4tSbj|i^uy;av1uQ9#w)OY>5_kF@r&jhRR z13z$yEbqjh%v(2FP$nY#+}?FkhNbo6!xPjIgN?&4Cl^PU5p4l(6^Jh!j=Fx@qyvS1yuQ@D zM;D1<ETI}#)rYn7)%Lotwkbb1bn zeGumzrn-k03H4K8H1OR#Dg{zStNf>$zA-0oksy`cd4;`J4LOI34!-M4JrdxcAl#z( zQk0~O)Bwl$T0gcUiv&+?I^LDm2cS)a1*mUx2!4B~x~{P#mn%$5QGSJLEGaNFPyU7# z4-fSe_j=Rb^R?6S4)A*TQhiDM=j?T!m3n6FkXf> z2LS|!bggQfm=*;)Vo&hgt@*-u%Mey;+8g?O8?UeR@^iAXLdVN7R`F$TvxPG8U+M#+ z+ZSTNaIr<9o;-YH?EyKao@g485@32D8|Gew$xcPUWY_0t{WmkzzvoMgOu~`p`3Su-6M@n}l2-8vo)8wE9cVPTytZ~^b*~@^8%~O;J=;e9Zz>m9w&zNPa4bXG zKpgpnDiK?fTp{tP->aZzt62C?a4!l|af%9oDas<-0Uwrl7&c=umir}8O`wOk!yst$ zh{8aY2G5LdLvP8^XbzE?7IgUj!4lj%9}LJcf{GVvdec@L!>*_TK9!d z@PVy&d38LIQW%JLx2?(c5;}+UL}1=-*-mcpwUfbcTwB(|JDO9;h;SnfrknTjlsP;R zgmLOnfQL^^K|>Kl@@(J4%t)8_1Gv4KLQ0SBC8P_ctIK2->3$tR*D4cL)5V>nL!l5c zn&J`_0$0?*>ii-2MfgTG^k3a09^QlJ4iEAp%%@t4Y$ZI)_&3(M`HSR6jLs1xN1v6q zJBzOI+r1iPWnmDdVi!aoE;VBj2wL+t>P}u5fzJ2Hd~Q0?rL18DsAs6YMJ|~RDpd%G z*};RO+XY;QR=1LbIf+$*8V&qy16X$`h*c2zzq)Ye?NEZx&umox7T* zf07|4zR|JadXrZ+s9tW51_WD2S}PJs@1C#*9(aF6mc+P3O-LJB)C4ty^Oq_guaW#e1iAHohyXfBFvzRC+S+B;Wl4Q4z!f5dVa z{fmL9m87)wBN#n%g)PNX@9+!WJ2NJ*gFNyimrV}6yoWWs7^f^Mm;@s0r`C|h%p~u_ zb(jJ^&ox+XC(XA<--_(C@aFZ@KTk8CQRb6-CGRlx0QyRL#@vKplmMsTwF#g@3+o?G z^x8|s=GwV)6=>$H*Wo%<;O+&U=$zkv<7<`UD`1o4w~2p=E!*=r=Id%QmBfARCx4dM z+*7^UNH68TwU-8m;v_+6HCGNWO*ULY5cCB|A0mKn9?`gDa{2Brd-<2t)*N)c`$kWz zo2rs)vUV?Izg;U=fixG<6*S8-GIvYj5ti}n)h&GK$ zJx`wSF~Pjs7XneI4l7wB2YECTw6G|__KQd!^Ip(+jz^vT#xi-e7Wiv#gON8>@N2BF z)#`<@nde+jm1AH_-%8+8gRN41Gw(}yKN+Eu<;l#)s=~uWClJO$%P24-l3Z}DUkzP@llUF@Bm1Ykzs@Hc@oALA z%n%kI;;IY~wvHnGsAi@Mk@`r_e`^L-kVW$8)91?=9z@M7Rr_5E9U{0CvW47om#5q| z79INr#9L+uQPB8iUITfG`=%jFbONPn)*thPhV|%k%3bUso^Y=#RewvjS95u z;1($iEH1k9e3=F>)TR=5qINI-9x1xO+_gKQ9XBl5aJ8MA>;_1aTueu$m^<$!A z`aA$s%#C*}0hD|f^Q3AslwIiUP{5PZO{&CG~yFP@`3I{VXZyZbi zMvZ^zH9I;=Z1%B=u_Yw)rf~1*TrHHzm$^f+ws1(+N)Ot12Pu4x#_xE{6O7q2>^2`*Eh}|zP$z$;{LntQdcP=#fxZM6?hlG?s6>^HX z(T^qiy5Fg9c!|DDPj@O`x?ZulvA+AoQH((@dzQ5f4GL>UIPaXs3WToZmqb>E&7MLs z)Fprj9#r3rPos%xzj^w5c%fyoB@s)I33v-!-L*yYaiskPlohSqfa1`!1vuht7qH99apD!<-4CfUuHc$;6u%Rz+)0=mn zImq;MLRDtMnGdH9uKQ%4jW0Zc>Qs{rz6VOS!5N(Lc(RMPRYQ*vm3 z1Xj7jWyM25v_!@m5kH&KB^09G4KN1R*`WmiZBVPUCO^Vm=ElIVx7!4N=XIb`P_bDe z0IXy-cDJrgcmvHYIf>!SuB+PTjBN4oH~|f%fHoe7;F)JOGXInq0U?Cs zFpXFKZ-x2e^!7}=j-jZby$ewxWA>)64XJ@gUT_Hy= zJ~HGFcY5Y58^zG9$9BZ-E8t6~Y`1E+n5r2lYj+7NAVj7FABN8_to$7*3r~=@DKo>O zjWV75^tRv3f~1nFA)}kOo_ETt5L%5n3|XO*pB-cxXn3N3&UiYPRzDq_+gmvMHT{jt zn}M)D241~g(HPe)#MUFM!phDa0a`EIv+4~|@rGgIN9)*ziQ%e2~(z*N@w-bc4b1b5X1n@VBGA}iZUU_OkZ@2JNT#ofzI zFx`(4<;R{KbzmUrWGIdoG2EDswU=sX`np6`{%mzw&viujjG!%)QbruMZ8DLr{o#*i z_}i7!OE~p^xH2>O-r{vP`Z@3Ck0+k{*`+`32bEeyv?#|CN$*2|N6r7sP*Y*kD;biN z+;*X@VF(wUqDlcChn)R%^ots7WexqK2MS(`|Z80 zS4#tl!EP&#{B_<1UU4CMaJ4>B2CPWTNBsQ}!vo2I&A&`YgisiThL#jjI&Brg5QM>M z0|~Lz+4R8LXkHRq8QRhNkehbSyLPW3%d>5@R#xBZ)+?7CA({`5c^?Ib z0}tVnz`f0xIYt*)k^{nyi}~byaRX!$B5(+z=$yeB#I>YUCJn_p+vw6zm&qoyJ%RUq z)%0IUj33d3V{;tq&tp*A{8rRCkvyo}j8ETJFKU|C=c|y3PiP33gwGy0Pb2^S@M)@} zdFLjw;bAeKMf((KS?PEldT@pMT~Ak4F-`#$JBk{yn42)JSsfa&PW4DEq3wZ;H1CJd zwC0)-HWvpor;Y~7<&@tGU5z{80zZ46StWcDWH<|b%5@|ao0F;^FH00{SND%Gg$L!v zc@6XgXq`2Z-eL`e!SJ*|MwDHbd7bOpe$ zOdR>c^%*55RHh$cFICsP>fuj5?>mU`672Y};$)m-38tQ9soK`HCqG8%FU|e%M@H0! zOvPdHv9JN&CM_cgSnXrvr_j?<3?jW{@1&t~udEH23YWF6S zF?IN_L~FR)znNab&&ibzXe=_jKTc!{quvl|-gt}8C9FDB&XFeYcH6|I{!6Q>?F<*yX=}JcNlUUQL(@TAwW2XLw+11$vd2$Wd-L{q z0Ew9S{PD8{D4W#U6RgX=e@~AA(C(OHo<4qfr3sQ!70!?Dg{rqPHAS?m*yRWC!q#5e z;BQt#MbqIAS;q#GJuj;P)l6p*=j4;H+6UP&Fv|>z9Jw*mHbLu23&8w@P_L-~MHB(| zi&~WKL3%~NQxVFbgX=2%B}GYl4SbVoz-4Ec+HcI1-x#A2#(BcX!^4W1#(x+}6~&xJ zOzW>Fo(RsrpiW%{BT$76_En;Y5iuxEd;WcBpn}{4$b!A}Md|L}2Psx#SH{C}U;3U0 zHnYgI&ysD6pS21f9}tu?>tBX8f%M<`!S!z%KqeOACLdxRPd5?tiCT$CWIlWw?rcp? z^Ox_@*fX03*)=8l=_}QbRfd0vA1Mf37H)Y$D}7!co3s ze{M66*haHlHuQ5Bof5ZNfj=6cA30k^QJy+MGl)b5Lkl{Tfwq)3NxOpXX z_Hd#eh^AD3|HB}Ic*9S(g8tB`s>{S(wCTgxl{3W4CFKW| z!Qh@2khvT1ga6WHR{S+9-Oe;5G@j^vriw8b9;@g2wIiE0L|R54%mCr}Xwqy%@Pp^{=>^L1Wqoa(80199+z)^1gqv;k8R7l(!oT`22FW z@z(MBcu*tyCJJb1(g{Iro=T?JEtJ`TqqtLj*l ze>tt=XJyT?1HYcHkS7Y(>(8I{^qv~T=tu3S%h&+$NhuEAVD4fjVYJ3GEN zeh`}2N8sb@OXOSxihv-K#wXUpm$gW&29Rd-hF<4oUf|==!OBC%hXboye^oBCNu{%g z6{f(;j~7MD_N@k*3N}m6c~>V>d0!_af7>}O{cbnGFdBX0xk#5_?sK@8YvFwU{z+3R z`&3|7XK@ref*VUeFQ2Y1*3sI>=U?eyhMiJ!WeX69dE|(1XKZlZ+H|SBo1h_tvaqUK zUMk@?3A=x!U5GW`xNrGs%-MK`q$0D1gg{5Hhla*Cw)bBNBe_c*aT%IBm9A<~T{xA0 zsZXJ4{3IVKU6Dg;Bie#J^4+h^X^;B;D#Z(qbYL39pX*;=KjB zh8W;HGab31gld*b{^(-V^oe0tu&Y1DKJmo$|+4|;W zv}xCaAu9oodBdeFTBK+*ISW^T?M|7}?8U%kpV+gwy~~v4ZX^1e6MWFNsD9T(Z7!I9 zKKCv3OY7btll80LC+?cS@drrqP7YA8cw_T}ch-Th-R*qqy%bYz^fJ@k%uuLOwT2F< zV={jHFLQ6yc4P{uUght4D!n*!vCA@MbmGcts_!a<1lZl=ZL`?Qy*9nmYLC0aIitYx zzcuOE#I2ghy`QQy8r_YTJE})k?h8~B_OmimvUd*$O$oAjMqsY`zM|g>ep>Q2vwA`8 zDWZX^iF?ia0iw)y?&}mmFCrYj#1bt%y(;W~T_bkDS$CeBRK~~=QejCB6O6d+vFahG3s8Uk^O?cC*ZrHA7kS!V9s&;6K zpr#uwbOO;7GS2>OCj~M@cl^bWkzp$&PfOSzLHjTRCX)U6J1n@Ng`BQ9FW+ANEF!MG zdv_J@#pxNp7Y+}8=Y&0Zdd73+0?FN-SWV&;1Ncx-F8k`*%_26I#SlXB&#e_0Zrxfe zH2*LiD;Xrb9z~?kf)Md)zVfxE*2@2br!Xd9!~izq1vRdH%4H%`{1!&nu5~Zq*V_BN zn8jDx4mW%77j};vmQ75548D`4XXIx`PnS5rkzJ$ z_6UE{dn#=`>LhnC_V~gvECL;X9^@HX%qWLHAX-}NUugm0RA+)T_w(sm22A_(U>8sq zBBdwO6fK>(pM{~-_1nslrqgeZZ9zf0NGeF7gnS&gB8*D)18SgM-6cr$1wt!Q2WKaEh>4xg9P z$$p5GUg4~*?+jRQF1U{kX1yZI4OoE$n~uoo~M`8jO!enOuk zz48lijm2kGhA&F5M8|tdfn~mF=Q!KjQb(n|2ERlU!Z*|8Q+s0EF;6~qUVCeL=$6`i ze8splIsVQBXlojKrj*2iN}cNr?>4oB>`Fe@>?mf#i|Mtc{_%{`{DM-ldpF)^gN<)P zvtLKsoX53JGq(IecC`P8cg)8eSp^R91Idpq)Wes}H_q8+@Sl8S&w)~ZBxM(Atrd+p z&S1>t{^F4G@pQW^K>zBw4hfxd)GK+|q_`xEyZDVUnCIehwwQBbS&_ap0?yz)lh%v@ zeOJA(PO83^uEL3^`1+DHr>gyj<0d4TaarGC$~QiPiMXV2Ue7{2nQjUukj@DrhjA^3c18K~xo$?_zgzD;0bpMO5uuCZu{^D&i_qX2E zbHOz^k0V~A4XvArE_aHV}`~%lIGuFvkV;DOoTtfrW{mkO60>LD`q{$WztZG(ZaVc~;$tLtO7V ztzOCIIxbeCXm92%GPYKGRB*f;93s&k_9!O$kkG!-Wd{S8P0&3j=^0;)mU)4 zc+Nw~dQ!Q6ku3^syqBg|@GR9e_=i~^YM`NKJTToRN>gu;k$nrl{obU^{2QAV5^Ba;zS)6#(Zjwh-5z( z?ZlNYllUGZ@|b`jf&NInrN5umEa;J2T>Fe)i-Hnwv_0?3!m|fX6q7{{A9IODTC!t- zPdVuZ1Nj=?|BN~d^PFG*CN>h0IGr2!zR>1!uwCkfLhi-c`?aD^V4l`c)G$rOe|2Yj z(@NclmJ_N&Y2$QH^ zIL3?Q^j(&}TmCX@Cm&XW55AmBBj~!l%%qgYD#q_HRe1K5NxzvLS93?uz22QXqWAg| zSg%7AefS&UE^azFtiY)K+|(Di)>)2DE=ib!n@?+Bsj$(ukG}vpM3j_bOj<4sErVZo z2mbg?tG!3T(TYUf#zt(})=_TY#yiPla{b!{!^pK#`RKF8@X{wd_&F`c6;FGu*pdxs zoI`6^njE#GMZ4+V2a3lqh1xull>2Yd^5%c~=$2DX4*#`AUCp=Q;@VOp;|~5}->FK9 z7X!1R%TUR#qVj zV8`RHm$Zn8)Gp62eTeRoP=*RCT{>)Nt<}pK-BVK2u?uZaHmL|QUafz;*`2-Fk2U5~I3x%#%`J(G2UK&T@t*a3$vlluHXy>Cm4J z+Zo}0WFgAmYBrtZk9{;$YuMbLFnGGd`N)6J=;0Dy7F$-dRkCeeP>^*9F8wvKyGCrA zgNbhoLI^C2Rd_7?DTsYvA*uPxmFVM*gwuDy;`ufr7I_TE)+-M((Vluo7Tpr{d-eRQ zH`xCIH9$6o*bV0LA_xetelpA`pi*THAdZ~e;A(IuGSM)Bl$YCK;-{HU)JfI}?xr-u zKz622aS(7MHQ$k3cE+70#f2!@5Y;_(W1_8YZMa)+KIg@WNzK1LxQekj5g*==vuHa*Gxu8TJ1nWGPkfbX>$#ufcr%tCy)kOM?Kz z6AZuE@r$ws6}~wt;5Xn-8)Sy__?u8Pz>qGzr#Z5sw>V z9z(i{e|%i7sF^f7aK5O-UQIdPaXh(~Yi&C~sz@iRobEY$_&Hos##n9wt8Fj@V4y`r zFhLR1fX-vYqA>4Vm^8NW$*;+bRcR+|OO24FF1Sn^JpYvZM#H++xsy7i1gt+OpP!dI zA^YN%Vy*F5ofCaXZRUn)R~*sDpOLQ-IZ`cojJ=PYchbNx@0Y|X;{JXV3dkF zz5f}kdnM@qnO0f5H^D8ajTZJBDxzzQs|ul_A#K87*{_-w^EC&CHQ-O+&&YT-Xp6zG zJEFflW+{VGO0LK%lj&ymwh8J##6#pr4#Fr?yDQiN>;hBQj>-wgGS{z>4~z{l7Fk?; z8cTb~*UBwSm0u~ceq#LsMSk{Zsns*0Z*obz6UZf8SrYljN7r?#IRzsRl8 z+1~Er;97BaQvGpQNX0Sse7c+UtT3p*AA}rSx}0Mi`5UG5U=iufGfQ$)GXm&rb;=YY z47GkbN5G!6CUsQen;!xQCaz8@zFX7V!cCPd8tcRGUea1*OcSquDJ34%v@h7^{fD_X z;Nif04)nL-)pq+k!53sE;pmJIr*O{i7+gT{&E~jOLGGXZ1EV+6l-Z$WCIzboC}KX$2o2yV zc5F7~zpa;6CPCoU>t2=n*wjDm#YV5~03YDxqilFC9+XTN-h2~O7Z?ZnmntMwO~4qB z0>NOy*co9~()J%KX^7_?TY2HN*(i&{dQ*rgrD{XNt)~uC?WH%{Mwvbkc_V*d|6gnv zXw(?9Aw^RG5#|32tppwEE5VF`_zhS||8L9~41nl8w&(voub?0UDHvg!!`- + // 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 647/660] [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 648/660] [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 649/660] [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 zcmZ9zWl&vB&@FuM;BLW#6D+uUa3@%BO>hnbmyNrHg9Ud9?(XjH?ry>T^1M~|z4d+j z*RERKJ=3da)=1T)bU}@GK~*Fp0KkjE0V)g##Et+0p@TpmS8Em*I|nOcJ3A|8R~zdR z^>d{hR)SaW!58%0bxfo<)KBat*1Xu9l7cTk8R8~U=;(V#3Eu8JhWmc)?^d~T*Cn*s zJzcv2XV=zh@qO$NCVZ!Wi_l0Eje<|xH*8|U=XiSrgr(U|l5#55A6hE_yflS2fL{-} z(H+a!3?#BDS*ZLMk*Qb#S!426f};dpf!XvcF5~W$CDGu|IlPFXzcs|mx20kKKH6Z4 zxuFCNIHp%gH!S)GwR5R@WvbNDx`K(*$RCN0RuMh2)NTgK}{U|#UN?F37wQ!ld5 ze_5%HeZ|*)@L+r+L0Nu_2%@Nc)J5!cGmxP4utiHw-D@$uTb|+kIjuV>EA>}GQbvb! zyunyIK(YeI%9%Vy58I^$wiMfS;p?1f#@PH6NUL|Jc4wT!%QsmBknD3T8A#TVI35Q3p#VI0Xy~rP_>2dev=6RX* zV6BF?>F+tOPW`z)Feztp)p0CeLTL&gL&${RZ)@rR+Kh*@A@VaS`cjnRk2xt~&x zeQL7h(=}f>BBC@K^e{~SH7kmmKzF`)pRGVI6rn>wEP-*iaz(F98AMy#A~!V75vg8;71OG_=E9ydelh=`)Q+` zyd4T`fBJC}I}3QvltXFn%jD(c3(GT^9*7MQV*j%w*-SLA3BsW#%HL+>Ca)u1SSs3a zN4c03VX{0Mr7MEu%WcCRxCM|<1N^X|3=oOykrk3Ut$L(l%tyce=g@QoN0JG{& zBpGNlbkKwl2`vZ&!vzH*06`S=J_4z6Hg-#_82#%?OD-YL=>oJE65mDXzvs0U&Iz_~ zjlnU-@>DDMDm^ZTl*Cs%zMpdMR2KLdWSHw(_iU!kaiCwHjqy|zTUB|1|S6x+P? zB58V5lDXhYC17}YeLvN6lL?QYiJi^hiSSGR{H9pp`cAvWa{*c2@)|Hm=z9`zDGZF=E``;X;Vu5$Jab8KtbUj09I zmMgmEn6)Fa07PS@E_QAhPf;N7{4>2YbIAo9UMqHjzG1$eL(~3OMQ^2N#_;Fn-JhgE z+bRP3Yms|bZUWyKX+-(j4c1sxFon)c4 z%Bn4l^cRHrm?%r{Eou^8(J1c*|G3oX|7*r`gUYO)GHAv-@?bqT|mUmDd;@98MwBU zcHY;?BS&je0!EcBf9wM)TEz~9-C1((#5yC5=zpTGJ`r@jedyR+2GwXn!Bl5`CyJ;; zkNU)&CLx3OA~jk#raEyOhxj^4@5LrXR7|ENzhp9Tn*=_Am-&cxzSba>DR?Y{Fy2uO z^MVWly}iAQ^4nW(+G-RfcWj`6*#?4ExO|Z}e4THa>bwVmJ`CW<$xlF3-E7w`^EYk_ zKN!=R?(uJPw4Z5={NA8p%zlCJ>+91wpbxxU%^P?>&I51b2Cp|)=)1w~&zIu{Z+|(?JMeG_^sl!~v_~F-wH}q2R0Zq`+q*eOGj25VU|GNc9C><-5I16vd ztJZUICIZjjvD&fi>KE_)Y=UOk`L7RB;XmGthyZyGdl&4LN8C}3XdRNFq^d7oYz|0PXjI|7=TFNFy@ z5s~y`%>}sxxb*S6_@yT~+%tOFTW4unB*T^TiYp|;%X`>OrUT#Dqu{x7)mWLUv~GgH z_S&gl?%L_x4TKEp#>{Y92#Mc@nZJ)Fg;&!9iYst~4k0Fk7)9p9k+#x#h604E{3-4u zW_Yw`(9Zgj)Z*F6;2m4(9K+{FSGVi)5-YpJda>@BZ*C!zCE@jwKU~#ALvan$<})?& zZ|2R9+ftM(JZUSwpSz7+lwe^qbsTXYs9^S=n-&8)%jfHp&ee4pg$op)sKr~7!5p)I z_>oz}Y5&_mn|y(1&f#|COh&9ycKSLYyoNCnycPnn=^@ql{Xka_cqwe(C#^`Iouh;T|*sNTtZ~T*3IZ19pEz@G8M=Pq|X>%ADGt|{L^OH**CJ3o7 z93|RCp)USH4O5acqMX$5`I1>JwShljzf_;_lZMHs_f>%!v%2%Q`3U-F9KfYgR6bh~ zr`mi$lRYZmVW7=WH_X+ez@Xm+7iDI-vMT%vSDQVxm{4jh2+TsD)Y9r$7F=%vJ~|C) z<7qJ&z9=y#c16~@(;-N&GFc`HO2iDqw)1V{89z-h(thWG%T$|nuJRN$=l}YYXEJqH zzE{*{pwdv_@)l?VTt`d^3hN6;5QD7=zt2Wc+KGRM+g6~d>S?-oa;PKv>4OlLl1r#j z+gpNEAyl7J>Hay3IU#?|&myhWjG;TfE=d7O!$oSl8r73Sr_D}fX)zW#dkmo~VN-RK zCwXwQk0N6IB(hKF>h{_ZlGMF@Q+tHRXk~& zP<1xKUj?3V4I0BMC6|nZT}B@o250d7X>L%K8)`ONWC!flc?A*paD&ud}mf&04pK@XAdRye#u< z=7t6l`mvzF9u>s5q8$KM0RnA14YybpmItr6#p}nutU{M;BX7G98f@y6*xX+<+f))o1JtrW1cXTLten*Q9umHi5JJzJ)Q%1J+EVpi__ zN6Z2(yv?-mom?8W!g#k4A;Xfzjjoc5r|gG~cZ0FSO=|Iy_d&*Vd)Tv#scsjjnN<~9 zUuYfT_+?bMyO{Y)IdloO8;6EVAfQ>vL82>B6@+fplwzcjn56wam^z#F8LKV(_B!)? ziETHywgr-$1~J~trC^Tn`OioM?;yYQEu4yu+iz~>p{q4fLLsNn2OL8Zy^9QpLcDFC zEe(vE&>}{uZ<@-qxc6YzKC`Qn zT2TWWI&Z(>mm!pF)^oj=&z#*0$>0lU7{+w$+QW-?jXOsL;Fn92er!!MB?tdzk2vKt zfA@4^%Kj(jX{(oJjn48UJ zBhcqhZ5iLW&tVH_l@b(R)HfM|*AhfHZ(68#Vc$z0+hWcy7DDtmGk0CG8kv6YJUO7| z;F(QG0IIlUaDzSr(5-H$p?F#4L`KjfIHO++N(nc29aP*V%Oc5=xEvF)h|JMNoIQ)rXHo<)OOt zdqtkySw)|9ER|6n0_~11MirThBh>DRk1#~dR40ro=Y*v1DZ7Z1!kLV|13Arf zXVy}QyKZOZAu}HGxga~PYb=flg$@aon;FQP)rj}TS%C{lTeh!O}{P2CUr z@>Vl_>(zxNFE9-MpU`u{wV4RY_0E);J518D$wocCIikHZH=|y@lLh);!Ghh{YbJPb zT6?z$rKj|zR{pCSO_lMrgs4|h>uo=z-!&?TBv&?=WbRhvw6=aE?O#ppr6!m4zynOb z`?x*uzJ5N8l?q|gy=30>_U*Y3>#nO*M~(u?*{x6giiBh8$xa)B;Iv!#b!)o1?Xw>4 z+F>=N6}{78`tI%~rvVLA+W}veR(|0>*CgH3%$c zV_SOF3>s06rCDg&($myeBs`ld?PdnmCj-Brz^8uT@JUlwZ}wWHCQu%F&-_Yw>ZbE9 z4upTJ{B}CIqBZzrY15EGEn)`>u4?gD0BqGg zE<7WiXPEKKE$&G^v|n7b22XnD0u`Fs{r27vY_rn>!iL{bOLhId)49D}iZG&~^bU*TDFh2UY!xWC7QO#%%{TWS4CWKz))@{&`#NB@2OJmp5>8uy)*Uhe0o3ouCi$_9rd}+;Bj*0u_w&VMO zw?~3=Up-K-z+SJOC!OT84{np@2WqhPPKiR7_&46VD>tWrZh>&C_cBh|>-OlE799oj z-23$-cdso7DJXbasnh$eUCu}Ta0$+^z<(wF&<_VjSFce?*H((Izx5GNNosmKx{O-1 z9_ij1TZPIqFng<+S~`mI+Tu!nowNdYvMdSvzdrf%eDDj84Kxe?W!#*%D*4vZwep`0 zc6((veekGVY4@DmTX|NowQOE*8ctqpvk~CbD+D&X>lofSv@MwinlSfLPz1p)2Wl&} zPRl~z=Ad&m(iOWY0FJU5LUgD7n2X#Yu&UHDQ~G2EJ{7tw4Wk?aek?IQ(m!(Ug?S=1WJG)#88TVc(=7l_$~AK!#G zVi@?9cibH3bb4RR;*^p2ETlj*l^?p<}8gkK&x?jEcV ze6HLo`)5diXEQLO@a2o3jRRh&(!15T=^Ir1F#@8|xd)ZgXFywb*zN)%1T~J$&Ymv3vIy(B z9=Fp;RpJ3n1tIHOYj4KPuiW8FLaWPwDll5R~hNh>(rP_H#kn+$|eS!Wp$;9xTj| z*cYGsp0_Xdb+{f?ttn3HgK;MTGvQpZ!YI~P^HCVeW?st^WFkTror@=rUZ;DVTf*Pli=P-*NM65%t%_9`3XkEtfU0(^aZJyBJPOY% zucEMM1<)J#kLc6ul|R4J5^Sd5xmq=@$iN7CChYzNsC-nNb*s=)M#*hK&4j z1fEv4h7-#=TR*tSPG&Mvp@t~AgIeTq;+q=ZR)`Q`JmON~o7u^0<(emW{$t+JL)|ZB zRNx|Gjt?fJSukeH3whQ5Jq4Id^K9z5QGZeq-O3N=Z=}=#v9V$Yz?_Q1mmOr9SISP? zt+yA?)9YR(8(1Rxd(-WeOC`+qK)xILMX7Gh8?khN`8sML!H?LQgr|aRgpWOW@zp*B?-&{-y6_*kqPras2k|&2HAlw%2 zh=rp@V0-qqWfe@`6_d(#`K#n>{J$pje#Rw%qL$bx$%DDczY3SIa?IuRONsun)Ub`J z3pK`CZH-XN)ClRMvw;L%%!T}YryM`dFa$nG;pT;CF?|N#r2(o#2xb&shW6Act+zKx zTi^W4WM)JO&^-TqQTSaJI3r5IjE~{GLW6Jw8B)E5{d^&)-OJlCb&Ze?%rf_&hILZQ zdE|eF7kEpJlCX%qu&6;Z1vVx=hh$7w;(3i{#%2+X>?r&$2y_so zDEm{2`W7{aED7ZDZ{kQ_aQQV8cU*~wb*CkF%Td4-`_{LcoyF0Ss`k_eQC*d@2Nm{? zI-SUZ#y!Gx-$Dy|sN38QFnZEI$#S{LR)UY1q>5tZ#nKGt8@iUi-7=#i`Yos=d@2Z) zXIgVMmyOJ1-1)%B9Pk=L{6X(4lLII3XTmbIO~0A)djN3%$J~SPo`$UB2b7+uPjh*Y zL|NFeom2cr;d46M-HC!3X-w&@P6}EKexx7{@U;h;_wDghhRd(tc9NS=f-3eQ2t85R zcq#F>+VV{L&w1z63(tH+F zDp)_OOCA}ssr?D^lMK5A3nV|Y*O0s|( zA8EUkW)np>&`Sh+1HSU{-L>%B39}Y96)X*jkKosbf4m&9`Ju6Kv`N1}NG`M@Ve(8= zaJQ5cCMOFmQMZV!UG73V7`RD6V@1-emt-jrTfq7YHJdUX0}Om3rceNE*R)}wggARZ zYqcT0n{U+wK5Ij&zwd*+LWkzcr7}Sh8b>5GzfZ-nw`HO|1y4o6bM)t?CgHAfKIAS1 zu{c3Oueeh$_yX7uw-Jv#>@f{Z!pTZ2cE34X(ta#{?9T4+^}y7Vg=8{HAfmi4Q`^aW zufQEsSHCl6APNTw-aUrVrlxu#$n|lzZi0rcXZG-Sh{d<>yNFsF>3g;=;e|mPd!Pai zq#?1~j*X+6fu?I{v{`yXUx?h^1o<7jUz|p#H?X}0g;1s#ebHmFN+1!)UVw?^SdJ$j ziWe7X>DxJb{M%5WWiEo{8_(6p%}Pe-hzr9SP8_VmQ5Rl?2~+UT;SP>Wp1kFu0gJ>H!-Mq*@bPmXtpMbn@z9 zeI{q7V4g1jy38K7197iYQ;fR-%S0;Iwd1b>kq(GQoFh!@YpohpeOR>m)zT~r8B2{*WEx{B{Ip*E<8{5wEQmmfr|xFBB`+fj8h zOsw8a&rbg*plaehWK%T3pEXAKJlIBo$atl6_k^?D#F;n^v3fMDP83^@jt&Rg{W+d< zTX-uQi>ThTjc*Dv)W6>M;jV!}jX6PkDe+TnYajRTKxL}@+79Q5QA$8^a;)sZoDq7! zCT}u+NzR-j1ldb@@n#w%)wmN8@b;jN(^nXoS&V|6)osad9**xBKg>x zrn`ih0}G|>%*1L&antL*AH|!*`};Dgl*U;roTV&fmQL_?w4llUbDQj&w5I<9xaHZ?>6&ev9qx@C$-;1Y0j4dX+Kw`ENDQcu#Gdy1Pyzz#>}62 zEhjxzs4#|XBF@;qcv>LMg59#ojqIwwE9xVyVl=hBfKZC6Kp}E3%sV=upAvDMHj1hk zO@mz^wSZkyt|z~-i2h(pqIjOvC0Z;JIBploKJCE>-n#za(M3}`j399Si}>$xo-p56 zsbpRozEUl!=Cb)iKM)dBCDqEpSAr(x_T_)4v5*y>5csVC+uI* zyA5@^VG1kOl9+oqrEdh7)HqT)GesZy z)H3EcG?X$ykmL`R4^7UFPc;6a@m@=-G-qDf07sxt0Xx;P*y{Ua;`+BAP<>PPN1X)E zTxKPW)aV??Qelwr*YSaN!HVxaiYxlkvVBjM^Mxx=-J?kqY94;uP&#m_aKEQtKODYy=NMR^Xho+z--{k`^5LE;8L+a+}neaihR=h%yliXvS?jGzv~a! zl8oIX)rs;LwNpy(JqmK#CLJ%tr@0DlDYAV%Wq?&;PYQ$=V-YlDWyJ^Y=`1%Cb{e
          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 650/660] [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!- zJ%Op%+*kes6RKOoyh-3hYUb}gllMDPq>UUPoAQ~I%l zZ0%V**Cf+lfsdBA9fi=rWpg}nRRtkqPOKExvo6|CFJ@OYK|yDS3}o#nkcEHZaBy%h zFaJ9wW-i6Bf?`69ELKsp8xx;|Pl>d>G6S)@?TjldQOwK$&zmDqfsjFOER`x$_#uRm zNjG)q(+}dSNebZQ=|-HRkrkL|Odl_9Pp)KWjYM z(_LIvaWR-Ek5pt2xSij+yrhqHXIjae4bvA(d4+70XR>-A5%r*lEc zToIkFk4L28PN?oc7WUVh4h$l4{4lGHkQ|xN93-Q~4@P~o)M5Omb3D?OHyxNnVwyx* z(YRp*_+bQiVP-h*rK0ZED^;WJd^`C6o)veU*#jBQb$^`eRwFw;_tPTxQ*^A%to)nK zvwIGL9HXNf?m*73M7QlTPHX<0*8D#GkO0TwPS^H*xl!nyU-3I(5{4dD<{nnYo<7=- z7zSuuxi?RkJ%%hjqkU*xk#D)s@6laGs9NSY^H)Bz-ZlkNw`tsFM&kw&;0MCB`jr{< zu~GwJMCuK=mwt;NQ&v;IKUJjVxM^QQi=>_sOhyr5f6#ZIa~v7mNIQ>Uw(Ft$z2b9n zR-k9_&p+=Tr#Kr8COsGs9f1COY6rR{Ze6Q`WM)D{(46VEVpHJZ=t}S*hj)Hsye)A# zPhhd5#A)zKk$W=-MJsOLKb{~)J38pA3-G8q9lVOvp}gk0(|;U7vARk%4)(RE8@(;~ zfz-)yqZ9!7rN1qm8;zG!J{4w|1+X`8TAPH)c=T}2( zqg!DE$D+a*N3SUE0rj7|o1RC~U+>_L=qiTAt3#NUkMh^(llb+C^Ym%0^}31x$|d>>m|SJ~a@ zO}dZ~B1I^wz1Zfyk<=z%j#+22Spp@%yTvU1?PG4Mu2TFZ(ZT7r0xcv8_eDGRC{@eR zBb7~Lo;`idppcf15tJ}YL#a_j8>$YjSFBU^DG?h9n=R>lHr|Ag%SO&r(+2vo2f`f) zad*%>(nf5w;088ySPwJFXJsjn{{_d!_wOLca;gdL9uMv;e@7l{G@KC313WxE3WZQQ z%hB4EbKLyUCB9D7eiKFF&}q+ie4UhG+Q@6(mWx`NCu^6OL?gveupjgCtz{2F$c>># zQsV>r(9~7ppyLqoe>63^{pd)C_UEI+W5| z;^g9X&(nqa3`h&W=MIj(?&5sckYI}+i1_HQ9iJVwF`c`HX(zJs(m5Wegt z3sciK9%AAI#!lPjn%4ujYz=sz8*f>Cqj)NP{=Vgg-7b1xBsBiffP!xNl~aUPzQ-Y} zS{xNS(%vq)jaJP9@F=;5jK#mkh4PZK#Hh6QBCI7I3NL@Q>J$Nx*m&z#f_fHPOH?uL z3&!oTz02_}i8je&tD`lF(TBjz`29l`ZvnLofA_ed?DjBsF!7qFiZS(hN}#EI(2{08EU*1`QW|FTW#>v;6_n>8 z%c%jvxSnwTOzUrJte*{U+5dh#zQt!`8q>J_bB^ZY!=VLYD|!;VYk{sn*+(Ddz4UP* z9r?eKufmYQ6ZF>wK8tddQuIPS{=ZlpNg!0m*ucD09x73HE3D&65~c@q!`v)zjb$D1 z`l8n$ccKTzXPbOIug#Mg)>7qGZjOgPto?TK(dbc(=ZluQEsEb+I=U}9?Vg%^Z`91( zyhLx4-WFM>E+-2$@=^M)k@-%;U{Fy}eAsIyeFe7P`x0pQQk!tj29qQ643f+UCDV?m zv75jh)Z2VZ%Kk)jT{s+m8Rauc+Yt|Z_ZgDGFy2CmxHyy9f zeSfF_A5;w$KS9srGR|rh+2@v5SGZ;r<_03B=ZtWrio#L-A(t@$YJ(K^h$hR^Dkw2tkh*Q)RsCNYkCB7yx)5VWf#;o32 z%9K^uPVqJWLL7Hv{|?8Z1u&+7*6xeH|2p`gZJ>otA?mxD*z;B@5N0w9&ozA z;1|L2qObc3@}$u-gQ{-`N~8lKPAx`heQPMMt&fFXP+PZeqUZpZ%lJr|zeD)z1KH;K zvd&EvyFQ(K`)T?L>$`M>a$l2J@+ZFmLByS0T7M`EV1Mjf*&_0i^-1A1E7S#^Kbj-1 zG~I6qUq7yj!&8zjRnU1{#+TCk1>@uF42sLjaZ<1y9uGb_h@r|og5!7TlBK^UQMgCq zMaLTV$HI%1_KyS9fpo-|@xzpVhp<&;kB1bIs?ChD5qa<3+h~IfUC|J=eN^8JdNAXB zU%In8Mp?5aQ+T^er}gnQ&V>}D#U8QsAQ8T1%%4vDQdRY1o(DZTrTXIoeQ>#*EZ_iO$5C-wCo&4;O@wqHQVYhK6AvieiID7CemMnf*` zy})C+D$}=i@(cfIChys|RU}bCnB;%LETgeeNhipoYjruHj~z^SxoM0J4<5rJ(1`B% zMf*P;Rc?6K_L~6*86J%NO=g*z4(TF|h3Icf{j4!lDS5R&=Wmc2e}Jee{Rfd7!~diT z7$t~}_|Q?St^T8AN4lx{cRR3e!W=6hdsm;Y`&t0V+#`T}D(#Y(9qED5YfI8!kjf>k z(KlRiv9H35j@I^C$!Qm_?ABHp zpVgDEikcamhbQoqF2J!GMU32emkRi zzzX=kac<8>20Cy?s*w>U!#fl^Oi-Cr;6F4gCbH0o!-IWB)W=Ux?Mz%U`#hecCJk+OM{04z4~<3g>sKatPMmWhu#fTfm^Vrd;i z!h={a8EIl@dlK!Cb!J?sv`P&De+7ZoMwVcLa)lVlK#+%t%LE>~y?j;MRxnbPe#J@D zwNauzGHIcYLD}K&6zxli6+QWmSHkba~&F1wN zRgqesA!2G7c5A{D1?|e(hze`M!{KCc5%Tm7$LKMg*W_f& zE!EkTho*?8GV8ESW(#tZlV4?d;ht39r_0$;H4t-PPQBDwT@Ok1R_|CM2Q%C8E2HT( z*HYS>Fu_AU(?jBN)(8|7MFtM)!{cXOhwan6APr9$gsypVxH#fv(+PttnM*%%H-^X8 zy;>dLX~h8Z!rkc$A)_SM7t(ebzqf*)=FDds7k-2HOGG!%e|W1w_!j|OpL6JC(t+L` zazKL9IE#lon8HIH*`!pTV0R)k(drov2TfqiC4i z7WAKO8BOA>G2I^AW`rS5kJ_i+26IctK`4|Cc2amYGX#+zkN5XwvBfGJWL~y1;dxx{ z2=0XzuYHCMv0fa-{hGyzV}I%?i5`(AM?9Dx`?)o}Fa<|k40MIxnzF~DMD+8Q{XiH0 zTMM}9(?ckKxN+W%TnmwHUhjx6X(^TjiI8WA)#t99k2wGFiv6uvoa zzfHi7mD@{Advaa4<-ipm8T0mUtk3Rt@B;Mj*}b+bktR$6LqcG-P@g;Ai7}q2zp+xw zCXUxbcP(e6%FXYwVdeDS`89_zZ(VNPPkS17G%J#OTXeP(%Jh`(?CpP%oJ!sNOiy-& zIBKquqC56b^2 zGCnnFG;Ryp+_>V|<`v+mThr)Ca~xzXK4k%%3%=Ox1}+=V+i!+bf9T`0ZPRKaoXq}^ zx@cc~lVkp~y|BpN2gTAF;??^VG66taeS9?BoC_2e{eyeTOSiWc`7KAWjJ{ZYmX8O6 zq;~kMrk+^^5I{`Y{mq_+jV|7fye@$rUF(@m%R`fnLL)-I-JSxl#Jw*SKJiWNTtHc1 z5q}qgxv{3yV;9S^VZ#`hbmA>tbM?D&^7B=C>}~l@WxuVwZa}to&#!#Z1a2k~bOUq0 z<@IPeE15dz|6cH7u^MoFnH8wqu-o$JcpBKSw}9L{xS7T6Y`HBIzNf7*uslcD1^UE3KO$T&=r3 z6_!*>{NxioPnA@eTD%>^Kmu%ON^V~6A+|9>j!ts2^X@>>cY|&TLL#{!>?84zrm}v- zE|_*=KsLMr$wDZ&snak&6E&z!b0n#>SqGD@g^Q23jhx;>Beo~bRX`}QGp*aAua7p_ zLl{E!eK}ub-}0kFpeYX3{rO+wP&s(Mlf4G6YT7Ia%^{CmhVma@^*+xk0~3!yf-E^!-e`4X#!aExt}mKwH7$YVc~l zU;VfC=9O4|S@&g4+;99O2n9JVu10Q1FHn^U{`0Q6*p0Glkp`Xy>&{9Y{}M(y%-d9} z6bQ0i9*un*1CSa5!qN4GCl-jbvyrUt-bmT9d6uc$=3F2dd6Kg`mkZf$SO)~UB=R(z zrvHhano0}k7(_=5!y;_*ENeWge+>xZ`F!=r?gx&p6MCEZ-+0zRc49CGGj}C@;>qUu zqQKE?Kl0vFk$lVV%*?CfEi;D|3wm#DFQ^MC;Hw(j6zZlTUx8y6P{d z``}vPjo$UeeuTA!FC^}N^ems!9-e6T*3K*|;91}CULcpO;gNd`LwRP_ z6Ii}V9vS!h)Z}T~8@mxVQG*S2lW~KE4#8}@NBjsr(Q{q%PpZ6tq%4LWY5e_#~>C5wLfd1BBw){ zNBu?0xSOs!5}@EBF1qyk@HkM+G^4G9B`@90^E0N0vTskg4(Yg)e0^HPwS88=okX(3 z#oReVBh}#I+?eUy7drOQLPrA2gsn_19;hP;%s$*sbOHK7*a%dbx~YXP_{qBr;PWp> zXYeFRK9tq>SR{4quzgJYTmrV~bAV{LmTD$|Nc3JUk1+b@P!=2^S@Ed+hlXNQw?$j9 zrP;S7Qg%5fgqJrURPs9swHO@7m-@1QeU~kQ`Z&`dvx7&&+9Av8r#x+DA-%FxgU0BE z`tEwy%WdmSo^RLxCeJwL^s|8uGSvlH{)v#7$>-2xS2D+r=#Ne**k3vTv0#-haCcgz z#{!X_pMH%i=wjb}+FGsL>w`hXx7hYVuS?j~W?x^+d-2W9151reo(0mdW|dskmOXrf z)rR5;&xRT5d#9NxL6Go|*$*HLQ~UVl3uUX_H?>LzaXi((lBd$&dyE1Ycj>)X-|usG zeamd(q8U8gn$+GWN1SBa@TMDbN|n%=YN}C_fc9&fdS`yv7(78;gp7Eu*DvG}ymVcCH*_C|3m>uF z`9cEQ+jc&ACw9ic34FuRS+pUDoic+u-k14}m9hstC_V~zUrBvW-?*&Vj`y5SV|VdR z#4i#2(in}z=VB4%Twd0m`h`Q`a@V*#YR;#whfjIGfve!Pj7E)Z7nnX;DzxjH`s#9^ zZdf01nd=J&&fltM_jX_BCVREp{Ae#Pkzq&+pd<}wROk641{}m(v?ewAufpHzB;I5w zdT(|a3t}^no|iLaL|a_l37-v0LU04eJ;)Ox?&cwc2X-b2y}vaxN5_p|B_!AfvidOC z+ccz=y5R5tJHs&K`5bvI=uC@)e>qu26xA>HQ1M#+8&XkZ5xd;G_fse+yn;xL6?_(T zXN_WPW9J96Kvx=@Mx>o*lWBx&W>s#@w%ZcFEDQ_QTX!!T80aP2YKn!?#JT#0{DZSn z`d*h(OPnHakLE9a|4!A|B{P9rD~q3i4RH&n-u03YsQgG;ApQ_UvqqU-#EaUTLT z{fn=Vp^&Pdnx|9hvMgW*S_e-KvBb%NHVz9WEMU~JaB@xslYRFGB;$QN505TOm&KB^ zFSl0~Vf`AKQP-v$-I(O`$##MB4rYIjoDGZ4dSMNWgCl=FM^PHeu`hnj};m>4(ktcV4G4N6B5vpSW8M z$3OQT{I@9s;Z6Osg9$WY*tx1_z?T(oYhnFLV|65tr6h5lFQqs7u)FoS;pM#a2Ftu9 z5dSY`KW?K@&RU$FxV59R^hEWIoRHNekg$Dwx~%%4 z@592{5YAwJFFwm1!*!FfjbBtCax*q;zcQH-y1f^WszB>)e&B>;WVLauu&@za5SnKs zb<7ujI45F}I!sMuU8!9Huu2XD(@p4fdKI@@#=d5d)lCHvI3OH<>&9(j`ld52<@bf> zKqGw&|IF-b%a@}GAw7TU!-(Ay6%yYR*2i-6+d(MYj#>hZ&c5P=akEU8OngkviE-A^ zeZD5^A9EQ1rE7K4uOX`tDHn=g`H(f9MNhrRvuAFzwwussSPKkiL2Dn9Jmg9{B{d8ihtgD_p z?n&b4K*e^>LDs%bMpFj70%EuXQl)8~H#F)3AqhJSy}w0_?XK zV-(CK25sr2IKWav65UkH=7^)^yd_&4;d!=D<_)7ShR&~&U-x|yuK-UB5#KRQ5g#ST zYskm*=ax1wJ$S{AO+@Ig%vuUB0^%SOqXo9W{6pzLnhfVep5kV+n`q&N?x&rTkoNT5 z;l{*YN4OkFU($nI>^H=gIkLLVH`B^vlR963csh63mjP zdeZ_p94%V(M|>TOA%PR8;8(F5m>@Nr2+K@7kzHj~-J z9rg={=72csi|pmPY>cm0V*lU_%wxK5xCK{h=$$U8rz;@VQ()F@fPafYLFlteAc&- zR410JIY6=G0Tv^eTQnp4iRGefW_a=SbH}nhbfWR3p?{wPirZMo1O2OmKYvnQ6PC{=HA^-bYRz(9x!3;i_A{u!>_CE6?-B-M2P`Ubj8M>b);I7#Pds{A95O| z*#03l_xfPWkww#dEzvY{KRVbnJngv)0JIz5F3{`(>@?>B%#x0rb>w}GAEGz8yO)&q zBx#Ak3x@;0ieOQ-Ru`;lvI=%vgSIs9k3mL94|I{_V-%1J$zR_2r?%wtOFrhqdPFV- zXa&?l*V|PN+SHO$_sNHKe$dbVRd$?dg>#k!*jit?l~~t|t9**<0Zn|?(%BK9J^aSu zu};|KE}%E!ghgU}ICwspca*p3`QFWCqi8AU;pW8)MImVd>fo2!W4?0!ot897Y)Yiz zq0cP+Hkczn^85);*bdTs+&R^C6K4}@puG}(9CUFV%)wlrbn;0yG~)er`GMU7){0_S zkf%hg(_@qHDUuQDhplw_;Mqptygq;g+i8D3O~GrW$sO0|w0>TehqhRu@%3|C?#XUu z+4lGnhnEvh3dB3ODhqPXb&M9nCO|}VESZdcM(IL<71Ky$8`Yu@^eXkwxk5f zM6aF}MG;k#$Jmoxhx}%(-e5KtG_zDI?6$Ze{WLhc{~Kw8D}Br=o?CWbUPN=wNBi86 z=j52=!g0NnufZo9$xN>{KPoQF*S&Qf1qH-Op}==>4BEHJzqOA;M&Be0S2_M@Uu~ZEOMywl3{e#B7yUq@p9^Q-_d; zzT@=U^`S!HMpp=NU}Ydt?^VS@^2KuumVoW@O6Kx%%jjRN3?ME=*SXf2WMsT32iA5X?XDFq-`@720*Ko5NTD^_F41%oo#G(jZH4y_v zuRIU1GZ8oiXjm~SQ-f}zi3QF!BqlaMjVBo-n^VE*y||8iqB7XWy;vB7Gz18ByPh{Q z1x3#*xa}Q519CblD^szP&aG9r4*OkeeMhAfW0|O~pKwS(HzyXR@ts4U-Gwup?#hjmZ<)-Vr)hw11R zPy2AgyYqGOZf+5aVJUK_bJ2~)9Xdxmfca(ZjFQG{Y6SAyr;~(4iAWN2R5rloq@6@D z#Qdjk+r{1SoUXBQSLw9kjhwKGW-c0PxpBa`riOMq~ z!oA$~v`?oX=_oj~F)!~!FC1mtV1JV%!gqkT?7IG!{wJO3V|T8qdOP|i(BtFQ>tHuu ze(y}BHXE~3B#T|pMLOXW86VH-h14Ja)V=HS#Gr#E5i4BP?NxB9x4DtaR8*(ch5clh z%k3SBWCb|s%$3?VQ%R9n$Wem0=}vmF+;wlb^#aDhUyAX*?so=5iRH@~bYz?`LlE$- zvw@X$jT!l^IB&yToP!0K)f<~#980ljI=A*&s$ucEUzQom1v76ewitXNi1D?N0JFoESi3c@BwKt_O*T7<H_z-sUGRyk4W8^m912w(=(X2X-xu zS!$VfIqi$Uf-}#<-DM>p$kj&X;ZUfH`!F#3)8vP;E09l zx@o53?=%$0zMMTjDfeUIx_YXYXzKoZsKgc@iP2?xw!T|@-D=d2op3F#{nja(2S&=I z{8%?j%|(=KKwzW>l7qw zp9|?PQh`{F?=V4$;X)KGE~r)E!tc%Y3jhAgW=-G4zmDSQs_28KY*wJGHR@8i5vOLlL2xk$8z}Q{(Nfkg{O)*netz{s2M+a5iHC?k zB!_uZ1wS#N*Jwn`py<(byl0e2Upz9NkWSlawdcOFyn^NeOb1U^eY1Za`W?|2_GWZF zc$DnJbx#l`52xcf%y@!du{vzCkk5NW#U5TQG-V5sFzW5UfS+KnBbA{b%IZ0OOw=rj z5fEgn(uqlbNZ;P~z=WGgs!J?=Qo)Z7{pq*qq<-bjleAOh1bZ_>c5?I&&t#i#Cf3W8 zDb<0mBk?dN>@Z6=7|(_AlJw`-QxeV9_L$ANi~7wcOC>8)?=2_!??0mpQ7))FB-E)t zsqL`pVbEN1f?>Ee<{w)f+@d82#~f+wKG41Ej~dg&(h|54(#$4|v>m>9^sNVi|Bjv82OPCW8y zrwX#J5NoAT(foyV#`(OE89$9(KQ=Y*l>t zreTk0h`Cbm%q7w!*2iCX9Mvvr2&7s|WDvT>k!~!S1NCH0Vw6GBhDLwMZ9ytG1^Nr; zhH+)Lf1iyRnlX_%ML1Yb2@0&}VYoo?mrnf4A#$0h(Ziygy(W45pZ8=nkz8uDYb)&5 zMbz-;NA)MRTU>QgQTsm2=5v4Bl6|sqw_Tb|zY?eypDlu^{_Si8j7R1~y%lv8%)vQ8 zM&R2-TF@6uu(7n{97an%8NF?H%=?1M7y4dPL<+2|5x6(rdihVl=m|M=UvdVJJeNUe zuhX|xpe;Zoj|YR}UU&X(4w#yo2Ky>EBk2Cb1%+W)>sJ@pSs~nVeeIe3LaX`qdcYu! zl4o@8 zSg{jf6#N}8o+mwS90;%V=%C8YQCB9;K}ZnQuZThLo(C*sgN-`W9SC?L6K z4Erhb?TeYWtTra}1)ezMt}XjxUbwu#RhjQr3_}?wQQGvi#gwIHJr*{-0MR4Dqw(@r z>=Lf|{mj-2Py(qsk%K;~A3}O;Q>H7EPIzW_az6 zX#CdT@;cIxCL~UG(^gnI2_Hv}UXFDnLCFb6CN$~LF5k`*`SOw zzl;kkBaA`Leo`NlCS__$-W^IBMg$E*E5R^USvtRVx&=?+me0>Xy14)49^?q8z5i1M z@i6TuPnyJ6?om-QgP zRc9K~U-Pb*6|H}>pAP)=$aV-zW-$xc+#$^-@TmyEa{^z~2G6t2Jn z+yC#5W(2q|3JGY47`2(IH1LQO(mbuTJ!*{bfI>GXUg!$ai`1ZBdZEW>$%UYyEK*cW zycJW|MvZh{+SH}zcAM5|tT3nMn+$)!n|S-`WRFvXKF#Q%_YtOeU)Q7mOwr3#ZgICs z1$iiN7@ohy1Sxs7VR=gqcj;~2PAa%%`#4{Uiq)d%&lk#y{A{xx# z0HDZreI0Yi&N%&z+QDYQf?>kOf8?lzsF5h*e69A$DFwnl&@x(aMW8-k2ysprw*6zl zEh<}-cu0+LDYEZGadAI!;QO%95ItWPyLN&52=VpZlfz`0KKg;c%-vbM6c7mSB@;Tw$OQV#KChlrB$O?DKPTSj8z4fC6gkCna>|G#PWWJ1lv&y+6BX_{8t10i3t2A*TrHQT1M>g( zCr_TfD*Rx=wLTlk|Nozb*G=XB=XgvIGmv?M#+wjoAddM<7!Jr zQ{@B~WrF|tzcKy*pP4{r%u4bfGd{z^!P&lngM0sf f-wpRS!Q5C3UM3;WSo95oPQtn|9Wu54e|P*pYnY^~ 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 651/660] [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 652/660] [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 653/660] [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 654/660] [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 655/660] [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 656/660] [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 657/660] [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 658/660] [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", From 092b1b57375cf017e472188e2234c4dc3cce279c Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 10 Nov 2025 17:51:07 -0800 Subject: [PATCH 659/660] [PowerPoint] (ShapeLineStyle) Update snippet to include reference (#1030) --- .../powerpoint/shapes/get-shapes-by-type.yaml | 1 + snippet-extractor-metadata/powerpoint.xlsx | Bin 16650 -> 16693 bytes snippet-extractor-output/snippets.yaml | 27 ++++++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/samples/powerpoint/shapes/get-shapes-by-type.yaml b/samples/powerpoint/shapes/get-shapes-by-type.yaml index 8e64c0bad..7eba070e1 100644 --- a/samples/powerpoint/shapes/get-shapes-by-type.yaml +++ b/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -22,6 +22,7 @@ script: // Change the dash style for shapes of the type `line`. shapes.items.forEach((shape) => { if (shape.type === PowerPoint.ShapeType.line) { + shape.lineFormat.style = PowerPoint.ShapeLineStyle.thickThin; shape.lineFormat.dashStyle = PowerPoint.ShapeLineDashStyle.dashDot; } }); diff --git a/snippet-extractor-metadata/powerpoint.xlsx b/snippet-extractor-metadata/powerpoint.xlsx index d4a1aa15c7e22e0d62c5d7907c68075aec4eaf9b..a4f793ee20a141c4535f81004d7db3bb78ac9c71 100644 GIT binary patch delta 7939 zcmY*;Wl)t-*Y*hx-QC?F-Hk|!hXw^fNF#bxkye_I=b3lr zeZT!<|G4(rYtLHiT6@;a6%`C_2nJW{qQUN(Q%RoVawkdmo5x_5YrO#3%$qNI91iTUtbSM38->II?l5XuN4iFM^m_-S!UC_ zge7zzs_*2RuO{UdqnIZA z{;X6cAyzDa-cM}mnZ>EtP3}3^ZV{(+)W?Q)x z3wH)e={&s!<#o;?5r-|ST3gVjY7+9dujaPy8^4CiujU#o-&Ybk_lcz#?l8hW;ikyB zo0k!$CmL1`Q^@(EO|m@@{U$i$L0S2LEfcow8|Cx~7}-cj#*`i4lrsP1WQy`ANEtMF zV8;@+?oaqk%%#A_r=5_cLpG_hJ7Wj!n|+bmc9MFg5LwtRM$|gH=Uuj3!$>O$i_Lyd zF~eC=pG&(IZYO1>W72%BJ)U$>R#w$(qYO#*qb~aXZs+Gv-zJ??{0FK6YOfB%x6n^U zjj-qIfX9Pjm4RtO4DF%%&+Su+F~-ErkL#msL(`Z0G0o?EU;nts-%q$G6`-T>;tP`W zrdw8UnD{r0W1Mx>5Y2eb;!p-}>2Es;<(wXlHQc@%%JZ%HGhf+G=2yIyZypc-M}P44 z58*Z;wvO53!}r5vJVsGisQU|ONlwUbDzZZeIY4w^#9+B5@N)e8mlQf{7o&?m@Z31J zQ-CS8=WCajP;P=M{)m+{(=ndf{T;~m{?D}ksFU4<(6Ze5KW!>28x0a8t^-cCSuUsV zX*B{N+)EW>$}jk0f0MNe&MjWFOmTuyBJsqLL~B3y*`4qC@u_c_4oq&aGElXeRd)Tu zezT**JoZrs8ZydD#pn;!nhq{=q&S$;KW={$pVHJu3lHS|E?oUL%xDUsflZ1SlE$r* z!(@SAMsV796%v3z^#H;Nn+HIE7%OZz48OLO%u2V4jKa!$KU!r%GXJi4dO(hPbQP1) zcf~wAS~`xUI%FaieNn&uu*W34W;o3=tKA+cqF-yTR3h5^ppcn3TN@NiEsr?-7Eib1 zTbgr0+UccY<0jwOTVF>%ZjTjg`>t_(JynfU9;dzRRh|*7-c3FqcN5?nhRAy>NFdd5 z%=*hVu~QO{P=ty?*h@;gZZ1=rZe9@Cqr){X>+O`)qeuztOk7>vG&eCsTGoWLC){J3 z@wC*^JvFbQPgUU`mLC*ZyPgQE->d90KI6v$P^v=*M+;xxhwy1pvU}|`2Jx0$`Lif) z333Glu^flKw@#Dh0fd)MYw0`KHrz5on}#MBYy?%MaZ1u}=IOI&NWUo@>-Sz{~$;hmJ)(uBaA-fx4g zywEh$b6;~KgauC4h?ZC1Q=9qh#RaEYMSttpm}1ANBY$ZaBJ%Bld>&pfPS<8IcEB!% z8W-%b<{vKzNCEIV)ws{1keXjS_(uQ)%}TieH~24#{A#CZ`53I=C}e7W>|9Ef$mmv1 zZB}ReZ_??>dMlpN5*pilN|PX3Wjp`|fgT@0|JjnVk4BA}2tu7$PGHmd?IdETl&Z)6 zUADlQzhAE>?c8EM)4*UVZ3b;UPE=m(aDE4n~~@uR zqMAyRFZc*6pPm2KGCJ0Tk72gti}hx$?VJUmo9w#E-ylGy?8!9d2)I3 zBtW-jb>a276t_qzBrb&97*oh+DXkZ~F+_d0iDHJVt-GG){S3GnfG4HZEfv+4{O#pW z*f@~1Rj&+;N1nqiww{YI>u96DPIjko7zb0PaIM#U0Fz5nbTXtzG24`~f|?_+Nr8Xe zb=|Us)7i75sIv^2QDQcw5+I)>6M(4 zAc2(WT&D5Zr0)MUdvjsb3>-j>KX+}mHT}S@t^-romX_Z?GrkMrnRmvSI|5Z?J-2`c{irCvEBHA1qgsqk_gVKmG?Dj?&oNx?#)%8-(I)G2x>ouZ zN50FC0-1*DR(uh_KxOS_e6MPehtj9s24l9Jh@mp_1LwW2rzB-8t~iYk-BBufPlC~R}&;0z&G=$ zB9muJl!`_O+S7zFy;hme|CEk^bgeBkovkLBfX?$Qx*W0*UXr7lmknr|TcVkiZI@sa z>c!JlJoH3k#m_OlswY;{{av~<7M`uYv+5G?Wb!5$>=g@sYsW&SuezqMjA!qxn0Cp& z_iWcz0THPaVsUhuztF0)QQCbP8=laeZjdS5?{yr6&$0*rtK4JolXY775j`PswHQ^Ltnj zt5*}HJNt$=j?tUoN#}O3hL%cavK){%WqMo(RM{XV#3Hw14nDUaJr*?|+>4ZSJ;8GS zf})lUbo*_x_|mnkgU_R4O{jto8xtI^sWwR6+oHDTixZ(Gh;)a`*Z**hmRiSMtFM<0 zE`Hi%g~AToa2WH>tUJ2v1cMxU3iFx&mL`G@_~m(C>|99NXJZg6c5Z7AI(Cd%st zQ1;&JG)QV0TSuZE{{E6r{uG945qV{`v`u1I3H+U00rSZJpk?HyOK=H)g1uD!+NW&M15G7}F^26uK z3%TTh}`@h~Q+uInWu)LnS?R-dLj7C2-q#E1Z6g_yvE;Jp@#M-gD~SkC_HQwRpdl=uA|RUfFVOv|KmlLU9-n;b1vl34F!L1(Y97@YAM5~`<}iLY2`DdlVp$|9Tq?AOq;YER z@etEiIduz%NAD5nexKAXrawJolZD^&C5#|zBH9E!)OyJn(uNY5W}#T{AI4d-#SFyc zI7ESLp;$IT)tu(rX;B1u%0{JDM!Ag6mF9Kg<8oAVT!|J!aC3oz!EH>V7AdT0+^q;y zbvTIwKV_eKU?Z!-2I_q9bBmYfk;iiE*_@o_Lhydm0l+}OfV`c{uP==l+Wxyy z=H#(Nao^F+sDm7ZG^UMt#U}^F2;;=`>wCm!2<6=SjX!*&+w*i&{TPrJ-$Q|;Y_4dY zr4tFB#z4-ZSGwXk@1sCdU#E?c{Nkr%Ya&}q&(1&hRFw)c=Nw-=s*l7g3G=k zbbzKrFlaYIRnhgW_6YdG5^z_uGK$Bj{{)9!Q1h3vN53rN4tz4zS|RatbC-cK;mzDh z=#(;ZtEEPjKQ$y=^zHo_F5uP{>*g=zB;@m0!M%tBcR0RmyFc$riGEWbc}AWZ)&G>Z zW(NG9F|RluE5%oDwS~dD>2D)#9WhD-({rgjx}t!r?}aXqJuOj$oHT2x zbD%?iAtNy)W4*ZnCJJa>|Sf^s0}u7DXzR&dqGbVyyhZ^J5wN>DZMV zpioH?IU!QoOAjn(IATQlZqRuB`^Ix1)9=yvO3_Zr(0W5bTb|?c1UzSC*~UkC#4>eS z^tX#~Muf!s)F%5Qk|qqs#>~(Bc*>_vg7M@mjNV?lDjegv85fr!9?_>zS4cb7 zDDF}bBP(r19Up%;eL?9HG}A&5%xi_d7;ap}$mL@T@aL{`;ARn>WUqD=-_8)r-&Wh3 zE1K57D&s@1x}m*5CNxZc`qp7N|IA2O7Q

          hN#%ixpTjYbdMc$()^?Hu7e53p69=Dnl8CJO_!?5TL4jg z{kCZ+`{D$~77^j>PMOSxm37vQomA60Z-rk?7Yv!zD87j=93E?b@n%pvVK~KLfZ3j| zlECD|EJ_~8!W(m(K(!#w;qGAr4Dd?KKde;>BYj{WI)|Xf8T+1yO<}^lr%D>iggI*6Wzp9^cyTECXE_L7*+r=jZUqO zXEQ^;J6sZaiB1$>I6SuHFD&*k96A_2qEMSuu+I$JdrznbUG9)?!00Riku1FR^>3*U zg6zowX{n=66v;t5Y>Eu^KSbaC+fe&D+)vGgsVZp!T{8Eyyzdw(qq;PqqREeFC$s-z znO_0$>b*%*R65-Lo>N^%Gv+hkaj&NmatvF#9zkxuD)q7&`ese&XgIol(@E#nv8M5L zU=wY^q)_JMxx zCD{;4^??JzFJ~zn>xbtgXKqKa`8aj z#ejsu;NJ|vBwqshQQqBuTeKZ*hl>NT^>7M*0srew8;OKwq2$TSfs6P{#ZxPZk0yI+ z^-4pCeR%W!(i9ya<}s=vr{9A3u;u@FYriw7{XERPxbAE?kjR*8oO!VcM ze;tlg)VFCZl4*V12(}`GNlA-7D>Kg`)N_{;)D*N0LN+&$y06anTl3l`>W+I$*PC2c zU^mN?ZIm*6G4XKC^}#`Qc8H*bG^ScvB+=^Q`)fp(5!`P$SAK@R1vV~Yu|mx#75l%? z@+cjD4Wg_s!%oo_WVy&lO+AB8*P}3~7^op$DpJG+YbAR=3@@L02=shq?}*Bne`7wv zQ)8v$P_l~{*F_Qd%UtkQUW%`pfa*iP;m5Hz6oS?IO4w*O9Q8I67&u+~rf}l*x8VGA zR@Y5dkLRrnQ|%Q5H2_{6bxq9HG=sQ3-!>nK(IkP_zy%+eJ&R6u|)uaxq#W880 zjkKv&FF2Me%KQ+tBHA-J39K}i&~MM4d?7=Oj3Oj_V*D2>WUUR3l(1~ zsz<(t3=ySd2Vsoa;+<~<^J}@Z$8d@*v1ure`6%1HIQa6?$s2I24?D8pX5(AqO^lbW zWSd;&<0@QP9QP}{JA0K_62x&FYNsEdJfTG#kl~S!dW*b7Lfn>X9KS^F zd8<{rgb6xO83K*-zcI(AX+8B__6QDd1x@+&qC8g147a#hyZN~%#}(csIcbKqEtjG6 zN8_Z)zvkP7ma!mTcaC8|V^SJmn!}!6ZO(PFGOWy|R1ig&)M{cbu2$5IfZp329(1)x}3K>XteM9*U z-`-V=F;g}R8UPWGkliJf1QqmQ8LOUs2gSc35VO8E=6%_q_v?rKQY$ZiLuar`RJS5O z37UJJ%_@X*L`PUqmqu#49Z3e;8_1wv9K_Z%1HLJ6JI;TfEX(=LDk{fu%6v5)oNN7{ zTs<07A@|Zylj`A$!H3gDykSC> zU~J6+RpBv+F%a*4I77EW(0lox+OM^YCPY)mGD92)8Kc&s=8GSsp^{`%-CwHKTjVtR z;{om-4$T|7qi}G5C;&CLCSlT1>+I9=@jzWLb>=jNWcI)ILcFoL3RYf6!*{82lL!5k z*659v>hDxOGT}PE>g4q>`^tneylevun;qZJM3{To-Cq(IMF)x*-$yn(>-(vw&p+d5E7z0d} zsB7sOkI=dVo(?c66)?0+?CbuMBi1J}?&+qBSY8;*% zhf`Xb@fqajm4`0=T{NSj0v) z8=Mo5AQJMkB{`19mH9)3C_^c`1(CKk4|x6b!%g=nl+x!yio>uBegewwipb*l?hXr%iqaN)CLrBEiO4z9I~$Gk+@o_ws7sjr4}cHtlN zeLL>btzs+-=>v&WK%*2eK%5J|pHodGWs6&Wzlx9i=Q^&ZY}toI58M#_5gpz*ppBjC zhfz4pa0Y#fuX-^m;Gqmy_Phx{pBG;i=PLZj5-{&TBa18AWbWi%;luUn#P5-@mXn-? znl*1n3RR4OpIs#z)Z_J&i;_sUw*zV8DrskNTv2@%Ozg|z^});uSiHi^OjA-4Hs&gi z$hI8ozL@7cq?T|^w$bz9DP}aZv>!El-@JymMJ?nbyXdY$gXHMhy%`{y<4Mho<{-EF z!y(v-zY9u52_n>Ep-*BJ9wtzp&;DmVNH*a|q%ld4ljJN#hrivgFgJenJeDBa26+mp1Cr!0n>zDV$0TYkkWXSDb6P6ulg8xhdO-hk-%x99xBL}7%um?;8*Iw7tM0XQF&p3=|`lJ{e$_$3zgz{S3(bf3CP^ioy zv()=DPO5Vjj(>mWTO1_)RVPC_kno?93uX78o3Z9!IaUn+p8Uh)mtpqqmfIxxF3YHZ zb>HzlnbhMPy7!cJ8)5A=8A1!2xGq+Z2@DIb<$tAK*C50O23~ga5r0~PJt_?NW)``_ zpDzUs=1`;S6R(-OH0fmuF{iIQw0&rq!3}fz@h{6y{9mGdO{)6|v{yfNkRZ~WIB+wz zWSUjE>X$&PLXf*UhQ27KiyJ7K^yj5sukf$fAnPd`zDfv{S7L3_A+T$1qAZ4=XG`Swtw%6 zke4Q=`v1qy|GfnQ?IKQO?Z#f6z1sX5`T^x= zlD(L!{!yinIb@qPX(4y~b)Wi7V^6k>;+wg)sTbU?Z;)7q`@VlJJ~{Azzf_NJzy`Hz z=#}_Cl1iN*FxK~Hp)-zh26!D*L>YEQ^-~-~Ot9^{p^Vf1N>!!3Fx6<&FtAenlC*uz z_-f+9A3Rnwb6of50OKE_IBPO})! z`cnu|&wX;Nf_a~@9oGiu?07|Er%$$_X|SA`Ta0DiI87}OUTzYNq1)1t@rRN_rCPGT=7iYo$|EK`r(>l#QU?*2{W zDV?#d;MWtT9nD2H@LBnZ&fpU;Hw!PlT7^9RIm$b|=_1|J$h7to;Eg)@SZ;51A>$l; zVNB`Q){SemXIIQj-y=Xte3EvvaXsMoT;41+Ej%c-!zb7H7dssyJ?}qCH(X`NWd00GR%vVp6g zD(OL*fR!NpIRKp7tf{CJ({QBpZU$t&`^f}*98&U$CmumNnojO;#B1U7a1 z^3GykM%OS5kvgJid9c@(X7-6$OG@buO)NHQg&UldyhXEnLZ$3VJ;|DPDVI12*>xr> zN%CQ8-S70S1mn5=Qpo`p*;$E{ul*BnKaLpkihzut{-V~OiUS{|wGbYd-!p5G29p=P zf3Zaf4Y5{N@U@NMZ`v!_q1K6vAt-gQ1S}xXNz4w$bkG2&{Y~A_l(rh|XwzlSz z&UgIwsuT5{BzKx1l~Jsg0pC%FYValH2>!2KVJU@835G9q?PUjl@S!$z0-Ev+!bmrk zfYDzVogoe#Z5Vs!U+nT5(x{G{xh@#tluk70dc(?VVd+w9okc}AeR|wrTtLJ#+u$~G zl*-mG_l)S=dXIQc-{euR!H=p1n?=+9S7fI_p;WCc&vx}Cv9n%UAMk%W#sBT(22K4+ zqdS-UtxcR)L9iFA`g01=n*;*d-zQ(z*Bu#bgMOw)QU@i~4Wyu%FXshVrs%S)F2)8f z31a^4_XQcN4hl9=w8b3<=X3+=~WJlIv2-*gHGcccLrAkh6i=-*3L;mJGtXT%?^*~hWm zd4hj7CyB^QU52JH)7!}TQ)|zB4ZYFO@or!uQMV3r3sRmc(7XdAN=44cyzc+}xwyIb z=W4oG_V4w{{fC=>madNOdc5whZ^t_STK5-h^xs%p$O6|p#rOSTcb7YdOq)Px|IOI; zT~(SjY<@Fn?Jw}*0=U08n2`lP0?9$Jw7`!0h(%Ro zKYS1K{e~FFvnUVIe}4JHbXA2H2H`FN83S<^03VpJ9drmBT{oyn7gt{{}VUWUUV>^J%$?#%wBcit@3j2Q%}y54p7 zw7bTO2xprNe9DO&sYQ&Bz#(FDPmSSAi;DEX{pdKCB z5Ds^b$f(q)5F5wq&8kmwGYdZ)k*tp41ZmgJ5d-Tc#(!tU4=ha!(u{eBO|dfhZv{NZ z`!D#`$1Colyw{`Mi+1URpZ(;RIqeN0>v1bRTBx3^DlfIxUy>!%&T08}F@ z7jX^pU%-{R!}G_emzd-#5$Ps}9uSu}N|S=Pc7(++X~h%+x8Zx-a?<>H*3eaSx+@8C z$V-ee=r0DCVdB>YJs4HOss=-|1qwsI+qf>+zxo+4wW5a0G_z0IQL0Z|1H<^woB3q> zSJbYt`2>OYJe0qL=*E6wxn5(q*F|_m@8F?KahuJdijE>WU7z>umRy$;k!-H+*6}!o ze+@F&%6x{vI(Ui-cnTZ(O&0sdtNG%mBOKSX zLsetNDN1!O|6%F>11e-@czrdfbEoNjy^T7;m4pD7vYIOS$)oBF&R>Y%LptVT&&G1; z^m_-P)AO&*8u}lqOq=r*R`&jq0<%!*x zqNvF|gIVe_A9AYtE1~%CJh>Z4Q8vE&6AnuD=5h_p>QV4}QsJsin>sBd7beG8q7zLD zItKtza>!3RS@n>$AM(uF6v`M=47(HvpeTlM*2=W!NZaSBXSme;>bYVc0?CBpEO#vE zSVvz7(dmd)@(37D*{d)FGjPO& z9tIsGdqM-yG6_PyLBZgxyHzYM4)dgda+#hHctDU6B%jTEBCN)Crwk6MZhl#gMaNn(s=yuce$vsV*er7r@YL-ry% zTvOEsBOmd4M1K}NPZVeo969`1Mz}*M95 zWWuFDnY0QTP%vn098fysa2b-C0~eX#Uf_~H$~ePmYf$_$Z8)RR53(s@?Xn81t$sTz zoR@AV$;aMA9$y zbJDHNATz{CxuukC5v~rBS(_(D`l1s$0%Spw4en}g^^_<9I?nB(A-?A%)pwPTid1ev zkX$(1aGnMZ(s|h7i7P+$qwJi|(+|ez!8`&iB=y1b)&?Ei8qDxLHH>;n><9NgLbu+& zH6n`@QU5Q600A?!eq{Sl8WXi`NQUDEB?@0<*rlx20oMp1_qOsU+gXVoK4n6wQ(ka|$k!%@V2hd@EK?*Ihz^^0+7ssN-+UOr%?BQ?>a;O^Gds-6Jaxd}d< zz>*F^gV4Q1y9XYpcHyxwL>#*pRrdr)%xQ>|r-~c5jYuqz%O9n$xwy&AoK$Q2gdtN$ zXd$Y0Ds}~i2^etvA!EEh?{T}}krA3apZ5~a9x|8}!H(@j!vK6w>v3I9chD9bd*7;&`;U3*MrWvF^lo`5hEaa?(ecOC+g5#UJG@_> z&0DxV=(&etY_;|{XyIQn*c*^NdJESA$*eHa=%uLFa@f!d)l?^F)^dac4`Jv@U>;RV zg&0UEyw$I&8&A-La)w(uRBBE?vw2ED<#L{|Uct%$Lp!j_7Y#nPwY078BOW!6O#Bd) z;&cC_4;~H8#(w48=$^kb|4DChSKAerXx*@NbgD*ArJrRf(bJ^|E>7w>d5nyAE2Ilt z%4b;&O=ocLNeu7mObrH}*p_@5#?7_ie|{lpmqo@QcxrbPm0NlQHTbq6iH`1#gc$CL zpnbUuo2WUuNrvHMBpz>TafhsOn8_}kcn@t$qh|y#b;lH#2N4v}`$ij#M|%riGwV37>AuMJ~Xt?bQ(Yri;{5 zT}iqo=0&3I>i5^hW0mg?^z57zcYV;ZM26~$(lzlYATtMdMZB4#^3JJ#c0GZdLfKT+ z_e%?p7U}y)8(S^S8eLL7(7f|&IU_QkxJO6B0@)NJh#xsT-Ur^1kuw52D+x~Ps#zM8 zLKar62ya6T0lC#W?@`OL^A2dP2fQjIc>2?!!$zUZ%OWLwf-NqBZ|XH#XgTQAA}nPB zv+A4~Kp*q$M2kfAt**H_$*C)m%Hcd4U#*6jZDncVWp$i)KV}Oz7Om==zj9&X?$gh1 z8Q`8)Y8t7Sze-p29-T)>gYU*d8_QYFSo0v>_irUqIo|!q-qp$3coR!w1SPbcm?!0W z&7IZZvW{-q=s zVsn)lx)_`pBXG%5l^Huu=pi=nm@_^)%HhK0gotxhwLnAVnT3@W)`RGVM~Uf-aYrKU3XQ_ClzsFGbkqN}ig;{~Hd94F6m| zt%bDHQXkn>G3?jzCh4%j;zs&4P{8sldP%MA?S#{1pGr_T*77z!Wy$bte<~_Y@&Reu zd{eG!CD(e7HznOjqrV2!xWpFv#D9;yBYLyAt*=mH>2#lwB;px;R48cvl zoK(_4=WsyS%XNCqgXG?1rziF9W35Fk7yXY)yyAHI+?Cyw8tu(Y>0yWUjjZ~%{eL%C z?`)%v4;PMa?t?D&Z^M=mUvRCewXM7Jij|&nzwIq|!U}m)!_*YQsOEO(|4gz|%RJ$%U^3<@ z{=F-7QE$)5DypGPhc;9)^zMg?WJb40_T0t6`PGHvuK-COt9^|&*r)jeo$iC4Rwh8) zXG&MzxM%(aI`n?ceRl#DFw`g1_eFk%ZVjIV@R0HA%P#dz$@<{t?3J3D>RhN7B*{IA zygN8wdNwu>ppXljQN8h;jhl~kr*#S>rG7b6H+UaA>`v=A1(K3@m3wK4TA0sI%YF(t z(|;+nWA1B6H8{*>)O82?I5eKZZr`YgA zMYfJBzcg5+g8QiaqR!Z8?z#DVAt7fPu>F45g8xVZ=x8}_AzdPqm!N6u6QM6VZ;IRxHixI|lf?POFl-StdRa0P&2uRdUw8}tVTOD`8aXy)<#CrR z_4Z~0SEZHgcnaOdd6v)#Z;IsF-mAUcqD}-0pUSoNmys!Qw}1rEd{-rz;+RU-^k!$; z9fEHe5h=@RN{flXsEM42b|E|Q8Ql_jKlq)6_g&gMtoAi0+wDe<8> zJMoSTRm3RUD3-XI<;>Ip&C0kz8uFIW$YESSBD&q>9~Q@v==IFi(@NcyWB5+~c~eHM zXS~QkbyZGl0>d;H*MzDk2@rW`32$m@QQ%g}vW3#+Pk2H+Vm$a5EsL6d5@`h*2j`Hy zO-{)C#}PibBKul4Xi>`ii2=#;pihKlqV7!g5)s#786iJ>WHK&e%~+0%vtE*-9~uIH zcwCooZxiVHInye6u9U^Wfpuj5^Ya$Ti^nx;5Uv(ORY}9$kB@l9M{GuXXl=4_Lq-F5 zsJBeR#MckBo3YZ*th$_bUQsZrZ126`bZz3d!pB9{0HULqCYhu)<}pp;mOtPKaR`V1>w>8(rf#E`Ms!2=84Er;WybB8xO z6c}(ZvjBYzi5vUK81fxK_%)jw`c%sA>E6q8v0_+a3pb| zkDZh+h;o<|)DCz5h{OsWR2q@VZX_6A#+`!e1tQZ;OZqBAh%gep_616o2Cr0brzd$u z+Ccck$BLEk_b^viPKMp5(k{1&YTJn_IGv@8)gPI$MI~NJj(1P*@=eUYkJAaYZ8!B( zUA8@pH1K8cB!hhOqZ%W>fC@waoUc=>Wx5JR@e8(}%&1#@awU#R?O%h;nfab_rbqqO z^lZiw2`x+MXnpE%lrHFE&x7UUnXb+%CXzG)0l?e zlC?6(Zql4UB9ir$WV2qmt3It}KWf}*U?a&(53XlC@``Styq27&sr#VxhnN}jw_X5^ zkTjJk6`UuAvYj&2@1jLwnS-VDcSC&W4>^G*KS3FWKLj5L!7;bviUpVz_oy(2tylk0 zGY1$83RQqZ7%H6i(jhoiz#My1LUPQr+?ZJYKyVm{J zc+*v_^q1df`5?A0uL2o}U#8hY!inw+{xn^shR@Q5sLS4v{F|Z?J6xo#^L%v}*sc<6 z!i0z@0Ty5|HD8kAt6a@}xakG2^s)_oJV(vIs6qLZ;X-cb{v6g6m{OpnP)vUTXk>Ze zl$ootP(O}c>~}1)_vdo>!%3vq#IiBTC(^G20(wdf`2m6EvG;O#=`j)hzAg?`xa~wF z6R}LjCx74jpEVms$jK}_cKLf+DrYow*1o-jrMUv9USg}~bJzX5+%0ALEzK4cmYXVq z(IP(_rJ_}%Rjlvv)%YiuzT&xlO`B^^^H}O0PNu{O?K72wtZLQ1+1>yLBW`gv^G&uw zE$BTiM!yC&sd9R5fR zG(`(wOFShVhia(3LGvgaObgIBoaFZ~t@^;HVio3Bn-OvM?DKCXCGdUku##Q=nlsqv> zpxPPPF;aG>t+O}HJr20Di84RI=_IOA%~1-epDvm~A-+2h#OB^-)7r%Qg=&U(P2 zy41?g8yN}FR{`3j{cwmTPLfC^GujbbAaec@1@k)toli7#i3!4kg}xSFm5Y-fmrd6a zRC&rkFIZdX-m58BX%PIHK!6V1-%|nayU7R)B>bLOMJ0YHb?FyiB-ue?$I}13PSX+y$1;n%;iN2s7-sAiodVM~ZLieWjDw3>Z}DfRQIqrvx6yiE6@O!LR!JT#OMA2@&h2$DjCPGkWaD_n!eZ;&s$r0~ zK8rdpoAeFn*Is@0{ns{-fMQE_W=Sw{fT6jyQSpJ8=kKQh)n9~&Z7zydn`dS?|6l9< zAY*{Rh9HyWW%#dj1_IGMC?5YECPWA?B05C7EGa_jF)87H0bE3}tUN{*VoR2p{(q`W zDiDa`zf&IW1`+gf3Yc&C5Ziq0h$uNIMl<4_oFx5!@*dVhE_^6W|F4500!v;213;+A s^U(i?0S_XKD<%l^pzHmwQHn^Gm&M>je3F;J+>t;KD6r#zW&XwgAJ}E1*8l(j diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index c4136720d..eba34b106 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -17679,6 +17679,7 @@ PowerPoint.ShapeLineDashStyle:enum: // Change the dash style for shapes of the type `line`. shapes.items.forEach((shape) => { if (shape.type === PowerPoint.ShapeType.line) { + shape.lineFormat.style = PowerPoint.ShapeLineStyle.thickThin; shape.lineFormat.dashStyle = PowerPoint.ShapeLineDashStyle.dashDot; } }); @@ -17701,6 +17702,7 @@ PowerPoint.ShapeLineFormat:class: // Change the dash style for shapes of the type `line`. shapes.items.forEach((shape) => { if (shape.type === PowerPoint.ShapeType.line) { + shape.lineFormat.style = PowerPoint.ShapeLineStyle.thickThin; shape.lineFormat.dashStyle = PowerPoint.ShapeLineDashStyle.dashDot; } }); @@ -17723,6 +17725,7 @@ PowerPoint.ShapeLineFormat#dashStyle:member: // Change the dash style for shapes of the type `line`. shapes.items.forEach((shape) => { if (shape.type === PowerPoint.ShapeType.line) { + shape.lineFormat.style = PowerPoint.ShapeLineStyle.thickThin; shape.lineFormat.dashStyle = PowerPoint.ShapeLineDashStyle.dashDot; } }); @@ -17790,6 +17793,7 @@ PowerPoint.ShapeType:enum: // Change the dash style for shapes of the type `line`. shapes.items.forEach((shape) => { if (shape.type === PowerPoint.ShapeType.line) { + shape.lineFormat.style = PowerPoint.ShapeLineStyle.thickThin; shape.lineFormat.dashStyle = PowerPoint.ShapeLineDashStyle.dashDot; } }); @@ -18155,6 +18159,29 @@ PowerPoint.SlideLayoutCollection#load:member(2): } } }); +PowerPoint.ShapeLineStyle: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: PowerPoint.ShapeCollection = 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.style = PowerPoint.ShapeLineStyle.thickThin; + shape.lineFormat.dashStyle = PowerPoint.ShapeLineDashStyle.dashDot; + } + }); + await context.sync(); + }); PowerPoint.SlideMaster:class: - >- // Link to full sample: From 086a93f53c48ded194ae47955a290b28557d6731 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 11 Nov 2025 09:03:02 -0800 Subject: [PATCH 660/660] [Word] (Canvas) Note how to use the UI to add shapes (#1031) * [Word] (Canvas) Include instruction about how to use the UI to add shapes * Apply suggestion from @AlexJerabek Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --------- Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- samples/word/45-shapes/manage-canvases.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/samples/word/45-shapes/manage-canvases.yaml b/samples/word/45-shapes/manage-canvases.yaml index b72469008..597353a0b 100644 --- a/samples/word/45-shapes/manage-canvases.yaml +++ b/samples/word/45-shapes/manage-canvases.yaml @@ -124,7 +124,8 @@ script: template: content: |-

          Try it out

          - This sample demonstrates how to work with canvases. + This sample demonstrates how to work with canvases. A canvas can be useful for organizing several shapes and connecting them. Diagrams and flowcharts are examples where using a canvas could be appropriate. +

          To learn how to add shapes to a drawing canvas using the Word UI, see Add a drawing to a document. Adding shapes to a canvas with the Word APIs is not supported.