From 9e0642eb0c3d15f9d41bd70daf4f09636a6433c0 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Fri, 21 Mar 2025 16:22:15 -0700 Subject: [PATCH 1/2] Run script to remove library dependencies --- .../excel/01-basics/basic-api-call-es5.yaml | 24 +++-- samples/excel/01-basics/basic-api-call.yaml | 24 +++-- .../01-basics/basic-common-api-call.yaml | 26 +++-- .../excel/10-chart/chart-axis-formatting.yaml | 25 ++--- samples/excel/10-chart/chart-axis.yaml | 55 +++++++---- .../excel/10-chart/chart-bubble-chart.yaml | 29 +++--- .../10-chart/chart-create-several-charts.yaml | 52 ++++------ samples/excel/10-chart/chart-data-source.yaml | 27 +++--- samples/excel/10-chart/chart-data-table.yaml | 26 +++-- samples/excel/10-chart/chart-formatting.yaml | 43 +++++---- samples/excel/10-chart/chart-legend.yaml | 33 +++---- samples/excel/10-chart/chart-point.yaml | 30 ++---- .../excel/10-chart/chart-series-markers.yaml | 29 +++--- .../10-chart/chart-series-plotorder.yaml | 30 +++--- samples/excel/10-chart/chart-series.yaml | 36 +++---- .../excel/10-chart/chart-title-format.yaml | 31 +++--- samples/excel/10-chart/chart-trendlines.yaml | 51 ++++++---- .../excel/10-chart/create-doughnut-chart.yaml | 24 ++--- samples/excel/12-comment/comment-basics.yaml | 34 +++---- .../excel/12-comment/comment-mentions.yaml | 24 ++--- samples/excel/12-comment/comment-replies.yaml | 34 +++---- .../excel/12-comment/comment-resolution.yaml | 41 ++++---- .../conditional-formatting-advanced.yaml | 28 +++--- .../conditional-formatting-basic.yaml | 38 ++++---- .../16-custom-functions/basic-function.yaml | 2 +- .../custom-functions-errors.yaml | 12 ++- .../data-types-custom-functions.yaml | 18 +++- .../streaming-function.yaml | 5 +- .../web-call-function.yaml | 17 +++- ...e-set-get-and-delete-custom-xml-parts.yaml | 29 +++--- .../test-xml-for-unique-namespace.yaml | 25 ++--- .../data-types-entity-attribution.yaml | 31 +++--- .../data-types-entity-icons.yaml | 33 ++++--- .../data-types-entity-values.yaml | 50 ++++++---- .../data-types-error-values.yaml | 38 ++++---- .../data-types-formatted-number.yaml | 30 +++--- .../20-data-types/data-types-references.yaml | 33 ++++--- .../20-data-types/data-types-web-image.yaml | 50 ++++++---- .../22-data-validation/data-validation.yaml | 29 +++--- .../excel/26-document/custom-properties.yaml | 29 +++--- .../26-document/get-file-in-slices-async.yaml | 24 ++--- samples/excel/26-document/properties.yaml | 31 +++--- .../30-events/data-change-event-details.yaml | 33 ++++--- samples/excel/30-events/data-changed.yaml | 22 ++--- .../30-events/event-column-and-row-sort.yaml | 37 ++++---- .../event-worksheet-single-click.yaml | 21 ++-- .../30-events/events-chart-activated.yaml | 27 +++--- ...vents-chartcollection-added-activated.yaml | 26 +++-- .../events-comment-event-handler.yaml | 35 ++++--- .../30-events/events-disable-events.yaml | 26 +++-- .../30-events/events-formula-changed.yaml | 25 ++--- .../excel/30-events/events-table-changed.yaml | 35 +++---- .../events-tablecollection-changed.yaml | 30 ++---- .../30-events/events-workbook-activated.yaml | 20 ++-- ...nts-workbook-and-worksheet-collection.yaml | 40 ++++---- .../events-worksheet-protection.yaml | 36 +++---- samples/excel/30-events/events-worksheet.yaml | 38 ++++---- .../30-events/selection-changed-events.yaml | 29 +++--- .../create-and-remove-named-item.yaml | 64 +++++++++---- .../34-named-item/update-named-item.yaml | 33 ++++--- .../pivottable-calculations.yaml | 46 +++++---- .../pivottable-create-and-modify.yaml | 36 ++++--- .../pivottable-filters-and-summaries.yaml | 71 +++++++++----- .../pivottable-get-pivottables.yaml | 29 +++--- .../pivottable-pivotfilters.yaml | 60 ++++++++---- .../38-pivottable/pivottable-pivotlayout.yaml | 41 ++++---- .../38-pivottable/pivottable-refresh.yaml | 37 ++++---- .../38-pivottable/pivottable-slicer.yaml | 62 ++++++++---- .../38-pivottable/pivottable-source-data.yaml | 24 ++--- samples/excel/42-range/cell-properties.yaml | 34 ++++--- samples/excel/42-range/dynamic-arrays.yaml | 31 +++--- samples/excel/42-range/formatting.yaml | 28 ++---- .../42-range/insert-delete-clear-range.yaml | 45 +++++---- samples/excel/42-range/outline.yaml | 55 +++++++---- samples/excel/42-range/precedents.yaml | 40 ++++---- samples/excel/42-range/range-areas.yaml | 34 +++---- samples/excel/42-range/range-auto-fill.yaml | 45 +++++---- samples/excel/42-range/range-copyfrom.yaml | 36 ++++--- samples/excel/42-range/range-dependents.yaml | 53 +++++++---- .../42-range/range-direct-dependents.yaml | 30 +++--- samples/excel/42-range/range-find.yaml | 28 +++--- .../excel/42-range/range-get-range-edge.yaml | 36 ++++--- samples/excel/42-range/range-hyperlink.yaml | 32 +++---- .../excel/42-range/range-merged-ranges.yaml | 34 ++++--- .../excel/42-range/range-relationships.yaml | 35 +++---- .../42-range/range-remove-duplicates.yaml | 36 +++---- .../42-range/range-text-orientation.yaml | 26 ++--- samples/excel/42-range/selected-range.yaml | 31 +++--- samples/excel/42-range/set-get-values.yaml | 71 +++++++++----- samples/excel/42-range/style.yaml | 38 +++----- samples/excel/42-range/used-range.yaml | 29 +++--- .../44-shape/shape-create-and-delete.yaml | 46 +++++---- samples/excel/44-shape/shape-groups.yaml | 46 +++++---- samples/excel/44-shape/shape-images.yaml | 39 +++++--- samples/excel/44-shape/shape-lines.yaml | 34 +++---- .../excel/44-shape/shape-move-and-order.yaml | 56 +++++++---- samples/excel/44-shape/shape-textboxes.yaml | 32 +++---- .../add-rows-and-columns-to-a-table.yaml | 28 +++--- .../46-table/convert-range-to-table.yaml | 26 ++--- samples/excel/46-table/create-table.yaml | 27 +++--- samples/excel/46-table/filter-data.yaml | 37 ++++---- samples/excel/46-table/formatting.yaml | 32 ++++--- .../excel/46-table/get-data-from-table.yaml | 34 +++---- ...get-visible-range-of-a-filtered-table.yaml | 45 +++++---- samples/excel/46-table/import-json-data.yaml | 29 +++--- samples/excel/46-table/resize-table.yaml | 29 +++--- samples/excel/46-table/sort-data.yaml | 34 +++---- .../create-get-change-delete-settings.yaml | 39 ++++---- .../excel/50-workbook/create-workbook.yaml | 23 ++--- .../50-workbook/culture-info-date-time.yaml | 33 +++---- samples/excel/50-workbook/culture-info.yaml | 31 +++--- .../excel/50-workbook/data-protection.yaml | 36 +++---- .../workbook-built-in-functions.yaml | 36 +++---- .../50-workbook/workbook-calculation.yaml | 39 ++++---- .../50-workbook/workbook-get-active-cell.yaml | 24 +++-- .../workbook-insert-external-worksheets.yaml | 27 +++--- .../50-workbook/workbook-save-and-close.yaml | 39 ++++---- .../excel/54-worksheet/active-worksheet.yaml | 26 ++--- .../add-delete-rename-move-worksheet.yaml | 46 +++++---- samples/excel/54-worksheet/gridlines.yaml | 32 +++---- .../excel/54-worksheet/list-worksheets.yaml | 26 +++-- ...rence-worksheets-by-relative-position.yaml | 26 ++--- samples/excel/54-worksheet/tab-color.yaml | 28 +++--- .../54-worksheet/worksheet-auto-filter.yaml | 34 +++---- .../excel/54-worksheet/worksheet-copy.yaml | 29 +++--- .../54-worksheet/worksheet-find-all.yaml | 39 +++++--- .../54-worksheet/worksheet-freeze-panes.yaml | 54 +++++++---- .../54-worksheet/worksheet-page-layout.yaml | 61 ++++++++---- .../54-worksheet/worksheet-range-cell.yaml | 49 ++++++---- .../54-worksheet/worksheet-visibility.yaml | 38 ++++---- .../90-scenarios/currency-converter.yaml | 57 +++++++---- .../90-scenarios/multiple-property-set.yaml | 24 ++--- .../performance-optimization.yaml | 38 ++++---- .../excel/90-scenarios/report-generation.yaml | 29 +++--- .../90-scenarios/working-with-dates.yaml | 32 +++---- .../excel/99-just-for-fun/color-wheel.yaml | 40 ++++---- samples/excel/99-just-for-fun/gradient.yaml | 46 +++++---- .../99-just-for-fun/path-finder-game.yaml | 48 ++++++---- samples/excel/99-just-for-fun/patterns.yaml | 44 +++++---- samples/excel/99-just-for-fun/tetrominos.yaml | 30 +++--- samples/excel/default.yaml | 24 +++-- samples/onenote/default.yaml | 24 +++-- .../10-roaming-settings/roaming-settings.yaml | 29 +++--- .../load-set-get-save.yaml | 46 +++++---- .../20-item-body/add-inline-base64-image.yaml | 30 +++--- .../20-item-body/append-text-on-send.yaml | 22 ++--- .../outlook/20-item-body/get-body-format.yaml | 22 ++--- .../20-item-body/get-selected-data.yaml | 22 ++--- .../20-item-body/prepend-text-on-send.yaml | 25 +++-- .../prepend-text-to-item-body.yaml | 22 ++--- .../20-item-body/replace-selected-text.yaml | 25 +++-- .../25-item-save-and-close/close-async.yaml | 22 ++--- .../outlook/25-item-save-and-close/close.yaml | 23 ++--- .../outlook/25-item-save-and-close/save.yaml | 23 ++--- .../get-all-attendees.yaml | 24 +++-- .../get-cc-message-read.yaml | 21 ++-- .../get-from-message-compose.yaml | 21 ++-- .../get-from-message-read.yaml | 21 ++-- ...tional-attendees-appointment-attendee.yaml | 20 ++-- .../get-organizer-appointment-attendee.yaml | 22 ++--- .../get-organizer-appointment-organizer.yaml | 22 ++--- ...quired-attendees-appointment-attendee.yaml | 20 ++-- .../get-sender-message-read.yaml | 22 ++--- .../get-set-bcc-message-compose.yaml | 25 +++-- .../get-set-cc-message-compose.yaml | 25 +++-- ...ional-attendees-appointment-organizer.yaml | 22 ++--- ...uired-attendees-appointment-organizer.yaml | 22 ++--- .../get-set-to-message-compose.yaml | 25 +++-- .../get-to-message-read.yaml | 21 ++-- .../35-notifications/add-getall-remove.yaml | 37 ++++---- .../40-attachments/attachments-compose.yaml | 40 ++++---- .../get-attachment-content.yaml | 22 ++--- .../40-attachments/get-attachments-read.yaml | 22 ++--- .../45-categories/work-with-categories.yaml | 34 +++---- .../work-with-master-categories.yaml | 26 ++--- .../50-recurrence/get-recurrence-read.yaml | 20 ++-- .../outlook/50-recurrence/get-series-id.yaml | 22 ++--- ...-set-recurrence-appointment-organizer.yaml | 25 +++-- .../display-existing-appointment.yaml | 30 +++--- .../display-existing-message.yaml | 32 +++---- .../display-new-appointment.yaml | 29 +++--- .../55-display-items/display-new-message.yaml | 31 +++--- .../55-display-items/display-reply-forms.yaml | 28 +++--- .../display-reply-with-attachments.yaml | 36 +++---- .../sensitivity-label.yaml | 25 ++--- .../sensitivity-labels-catalog.yaml | 25 ++--- .../get-shared-properties.yaml | 25 ++--- .../get-internet-headers-message-read.yaml | 26 ++--- ...stom-internet-headers-message-compose.yaml | 27 +++--- .../outlook/75-regex-matches/contextual.yaml | 28 +++--- .../get-icaluid-as-attendee.yaml | 27 +++--- .../get-icaluid-as-organizer.yaml | 25 +++-- .../ids-and-urls.yaml | 25 ++--- .../make-ews-request-async.yaml | 22 ++--- ...-message-using-make-ews-request-async.yaml | 22 ++--- .../user-callback-token.yaml | 26 +++-- .../user-identity-token.yaml | 25 ++--- .../delay-message-delivery.yaml | 30 +++--- ...d-remove-enhancedlocation-appointment.yaml | 32 +++---- .../get-conversation-id-message.yaml | 22 ++--- .../get-conversation-index.yaml | 23 ++--- .../get-date-time-created-read.yaml | 22 ++--- .../get-date-time-modified-read.yaml | 22 ++--- .../get-diagnostic-information.yaml | 22 ++--- .../90-other-item-apis/get-eml-format.yaml | 22 ++--- .../90-other-item-apis/get-end-read.yaml | 21 ++-- .../90-other-item-apis/get-in-reply-to.yaml | 22 ++--- .../get-internet-message-id-read.yaml | 22 ++--- .../get-item-class-async.yaml | 20 ++-- .../get-item-class-read.yaml | 21 ++-- .../90-other-item-apis/get-item-type.yaml | 19 ++-- .../get-loaded-message-properties.yaml | 36 ++++--- .../90-other-item-apis/get-location-read.yaml | 22 ++--- .../get-message-properties.yaml | 22 ++--- .../get-normalized-subject-read.yaml | 22 ++--- .../get-set-end-appointment-organizer.yaml | 26 +++-- ...et-set-location-appointment-organizer.yaml | 26 +++-- .../get-set-sensitivity-level.yaml | 23 ++--- .../get-set-start-appointment-organizer.yaml | 26 +++-- .../get-set-subject-compose.yaml | 26 +++-- .../90-other-item-apis/get-start-read.yaml | 22 ++--- .../90-other-item-apis/get-subject-read.yaml | 21 ++-- .../90-other-item-apis/item-id-compose.yaml | 22 ++--- .../90-other-item-apis/send-async.yaml | 20 ++-- .../90-other-item-apis/session-data-apis.yaml | 45 +++++---- .../90-other-item-apis/set-selected-data.yaml | 22 ++--- .../work-with-client-signatures.yaml | 31 +++--- .../get-set-isalldayevent.yaml | 21 ++-- .../set-displayed-body-subject.yaml | 28 +++--- samples/outlook/default.yaml | 20 ++-- .../powerpoint/basics/basic-api-call-js.yaml | 25 +++-- .../powerpoint/basics/basic-api-call-ts.yaml | 28 +++--- .../basics/basic-common-api-call.yaml | 24 ++--- samples/powerpoint/default.yaml | 21 ++-- .../document/create-presentation.yaml | 23 ++--- .../hyperlinks/manage-hyperlinks.yaml | 26 +++-- samples/powerpoint/images/insert-image.yaml | 19 ++-- samples/powerpoint/images/insert-svg.yaml | 20 ++-- .../scenarios/searches-wikipedia-api.yaml | 52 ++++++---- samples/powerpoint/shapes/get-set-shapes.yaml | 95 +++++++++++++------ .../powerpoint/shapes/get-shapes-by-type.yaml | 27 ++---- samples/powerpoint/shapes/shapes.yaml | 44 +++------ .../slide-management/add-slides.yaml | 35 ++++--- .../slide-management/get-set-slides.yaml | 49 ++++++---- .../slide-management/get-slide-metadata.yaml | 26 +++-- .../slide-management/insert-slides.yaml | 22 ++--- samples/powerpoint/tags/tags.yaml | 39 +++----- .../powerpoint/text/get-set-textrange.yaml | 33 +++---- .../project/basics/basic-common-api-call.yaml | 27 +++--- samples/project/default.yaml | 21 ++-- samples/web/default.yaml | 18 ++-- .../word/01-basics/basic-api-call-es5.yaml | 25 +++-- samples/word/01-basics/basic-api-call.yaml | 25 +++-- .../word/01-basics/basic-common-api-call.yaml | 25 +++-- .../content-control-onadded-event.yaml | 27 +++--- .../content-control-ondatachanged-event.yaml | 27 +++--- .../content-control-ondeleted-event.yaml | 29 +++--- .../content-control-onentered-event.yaml | 27 +++--- .../content-control-onexited-event.yaml | 27 +++--- ...tent-control-onselectionchanged-event.yaml | 27 +++--- .../get-change-tracking-states.yaml | 28 +++--- ...t-and-change-checkbox-content-control.yaml | 44 +++++---- ...-and-change-combo-box-content-control.yaml | 54 +++++++---- .../insert-and-change-content-controls.yaml | 34 ++++--- ...-change-dropdown-list-content-control.yaml | 54 +++++++---- .../15-images/insert-and-get-pictures.yaml | 35 ++++--- samples/word/20-lists/insert-list.yaml | 27 +++--- samples/word/20-lists/manage-list-styles.yaml | 26 ++--- samples/word/20-lists/organize-list.yaml | 32 ++++--- .../get-paragraph-on-insertion-point.yaml | 35 ++++--- samples/word/25-paragraph/get-text.yaml | 32 ++++--- samples/word/25-paragraph/get-word-count.yaml | 29 +++--- .../25-paragraph/insert-formatted-text.yaml | 32 ++++--- .../insert-header-and-footer.yaml | 30 +++--- .../insert-in-different-locations.yaml | 46 +++++---- .../insert-line-and-page-breaks.yaml | 31 +++--- samples/word/25-paragraph/onadded-event.yaml | 29 +++--- .../word/25-paragraph/onchanged-event.yaml | 29 +++--- .../word/25-paragraph/ondeleted-event.yaml | 27 +++--- .../25-paragraph/paragraph-properties.yaml | 34 +++---- samples/word/25-paragraph/search.yaml | 31 +++--- .../get-built-in-properties.yaml | 22 ++--- ...read-write-custom-document-properties.yaml | 33 ++++--- samples/word/35-ranges/compare-location.yaml | 24 ++--- samples/word/35-ranges/scroll-to-range.yaml | 32 ++++--- .../split-words-of-first-paragraph.yaml | 34 +++---- .../word/40-tables/manage-custom-style.yaml | 47 ++++----- samples/word/40-tables/manage-formatting.yaml | 40 ++++---- samples/word/40-tables/table-cell-access.yaml | 27 +++--- .../word/50-document/compare-documents.yaml | 24 +++-- .../word/50-document/get-external-styles.yaml | 23 +++-- .../50-document/insert-external-document.yaml | 26 +++-- .../50-document/insert-section-breaks.yaml | 26 ++--- .../word/50-document/manage-annotations.yaml | 37 ++++---- samples/word/50-document/manage-body.yaml | 46 ++++----- .../50-document/manage-change-tracking.yaml | 29 +++--- samples/word/50-document/manage-comments.yaml | 41 ++++---- .../manage-custom-xml-part-ns.yaml | 37 ++++---- .../50-document/manage-custom-xml-part.yaml | 31 +++--- samples/word/50-document/manage-fields.yaml | 39 ++++---- .../word/50-document/manage-footnotes.yaml | 41 ++++---- samples/word/50-document/manage-settings.yaml | 37 ++++---- samples/word/50-document/manage-styles.yaml | 67 ++++++++----- .../50-document/manage-tracked-changes.yaml | 38 ++++---- samples/word/50-document/save-close.yaml | 49 ++++++---- .../correlated-objects-pattern.yaml | 20 ++-- samples/word/90-scenarios/doc-assembly.yaml | 26 ++--- .../90-scenarios/multiple-property-set.yaml | 22 ++--- .../insert-and-change-content-controls.yaml | 42 ++++---- .../word/99-preview-apis/manage-comments.yaml | 43 ++++----- samples/word/default.yaml | 24 +++-- 311 files changed, 4762 insertions(+), 5019 deletions(-) diff --git a/samples/excel/01-basics/basic-api-call-es5.yaml b/samples/excel/01-basics/basic-api-call-es5.yaml index d5c3fc8e0..d69f3759c 100644 --- a/samples/excel/01-basics/basic-api-call-es5.yaml +++ b/samples/excel/01-basics/basic-api-call-es5.yaml @@ -7,8 +7,10 @@ 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) { @@ -22,7 +24,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + function tryCatch(callback) { Promise.resolve() .then(callback) @@ -33,7 +37,7 @@ script: } language: typescript template: - content: | + content: >-

This sample demonstrates basic Excel API calls.

@@ -59,15 +63,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 48c4cd645..b536144be 100644 --- a/samples/excel/01-basics/basic-api-call.yaml +++ b/samples/excel/01-basics/basic-api-call.yaml @@ -7,8 +7,10 @@ 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) => { @@ -22,7 +24,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -34,7 +38,7 @@ script: } language: typescript template: - content: |- + content: >-

This sample demonstrates basic Excel API calls.

@@ -60,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 diff --git a/samples/excel/01-basics/basic-common-api-call.yaml b/samples/excel/01-basics/basic-common-api-call.yaml index fee0cc213..1185499b2 100644 --- a/samples/excel/01-basics/basic-common-api-call.yaml +++ b/samples/excel/01-basics/basic-common-api-call.yaml @@ -1,14 +1,16 @@ order: 3 id: excel-basics-basic-common-api-call name: Basic API call (Office 2013) -description: Performs a basic Excel API call using JavaScript with 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: Selection: 1.1 script: - content: | - $("#run").on("click", run); + content: >- + document.getElementById("run").addEventListener("click", run); + function run() { Office.context.document.getSelectedDataAsync( @@ -24,7 +26,7 @@ script: } language: typescript template: - content: | + content: >-

This sample uses the Common APIs compatible with Office 2013.

@@ -39,7 +41,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -51,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 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 e2df678f1..e1cfaab76 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) => { @@ -117,8 +117,7 @@ script: } language: typescript template: - content: |- - + content: >-

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

@@ -144,7 +143,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -158,13 +157,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 diff --git a/samples/excel/10-chart/chart-axis.yaml b/samples/excel/10-chart/chart-axis.yaml index 2dbd1eadf..80e2f6dc8 100644 --- a/samples/excel/10-chart/chart-axis.yaml +++ b/samples/excel/10-chart/chart-axis.yaml @@ -1,18 +1,30 @@ 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' 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)); + content: >- + 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) => { @@ -31,6 +43,7 @@ script: }); } + async function changeAxisUnit() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -45,6 +58,7 @@ script: }); } + async function removeAxisLabel() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -58,6 +72,7 @@ script: }); } + async function showAxisLabel() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -71,6 +86,7 @@ script: }); } + async function setAxisTitle() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -100,6 +116,7 @@ script: }); } + async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -130,6 +147,7 @@ script: }); } + function createChart(context: Excel.RequestContext) { const sheet = context.workbook.worksheets.getItem("Sample"); const salesTable = sheet.tables.getItem("SalesTable"); @@ -153,12 +171,15 @@ script: 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(); @@ -169,7 +190,7 @@ script: } language: typescript template: - content: |- + content: >-

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

@@ -213,7 +234,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -225,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 diff --git a/samples/excel/10-chart/chart-bubble-chart.yaml b/samples/excel/10-chart/chart-bubble-chart.yaml index 26267ebf9..3a9129d58 100644 --- a/samples/excel/10-chart/chart-bubble-chart.yaml +++ b/samples/excel/10-chart/chart-bubble-chart.yaml @@ -1,16 +1,17 @@ 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). +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").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) => { /* @@ -116,7 +117,7 @@ script: } language: typescript template: - content: |- + content: >-

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

@@ -140,7 +141,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -152,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 diff --git a/samples/excel/10-chart/chart-create-several-charts.yaml b/samples/excel/10-chart/chart-create-several-charts.yaml index a9c77544c..84edc0e38 100644 --- a/samples/excel/10-chart/chart-create-several-charts.yaml +++ b/samples/excel/10-chart/chart-create-several-charts.yaml @@ -1,23 +1,24 @@ 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: 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) => { @@ -249,7 +250,7 @@ script: } language: typescript template: - content: |- + content: >-

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

@@ -267,49 +268,42 @@ template: Create a column clustered chart

-

-

-

-

-

-

-

- + language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -321,15 +315,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 c89e78930..a82449593 100644 --- a/samples/excel/10-chart/chart-data-source.yaml +++ b/samples/excel/10-chart/chart-data-source.yaml @@ -1,14 +1,15 @@ 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. +description: This sample shows how to get information about the data source of a + chart series. 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. @@ -80,7 +81,7 @@ script: } language: typescript template: - content: |- + content: >-

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

@@ -99,7 +100,7 @@ template: - + language: html style: content: |- @@ -113,15 +114,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 527ff2b00..82f660525 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 @@ -113,7 +113,7 @@ script: } language: typescript template: - content: |- + content: >-

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

@@ -141,7 +141,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -152,12 +152,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 diff --git a/samples/excel/10-chart/chart-formatting.yaml b/samples/excel/10-chart/chart-formatting.yaml index a26e6d685..ce715f746 100644 --- a/samples/excel/10-chart/chart-formatting.yaml +++ b/samples/excel/10-chart/chart-formatting.yaml @@ -6,12 +6,22 @@ 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) => { @@ -38,6 +48,7 @@ script: }); } + async function dataLabels() { await Excel.run(async (context) => { const worksheet = context.workbook.worksheets.getActiveWorksheet(); @@ -76,6 +87,7 @@ script: }); } + async function changeColor() { await Excel.run(async (context) => { const worksheet = context.workbook.worksheets.getActiveWorksheet(); @@ -100,6 +112,7 @@ script: }); } + async function clearChart() { await Excel.run(async (context) => { const charts = context.workbook.worksheets.getActiveWorksheet().charts; @@ -113,6 +126,7 @@ script: }); } + async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -137,6 +151,7 @@ script: }); } + async function createChart(context: Excel.RequestContext) { const worksheet = context.workbook.worksheets.getActiveWorksheet(); const chart = worksheet.charts.add( @@ -159,7 +174,9 @@ script: await context.sync(); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -174,14 +191,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 +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 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..3fda3230b 100644 --- a/samples/excel/10-chart/chart-series-markers.yaml +++ b/samples/excel/10-chart/chart-series-markers.yaml @@ -6,9 +6,13 @@ 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) => { @@ -40,6 +44,7 @@ script: }); } + async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -68,7 +73,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -84,14 +91,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 +119,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 diff --git a/samples/excel/10-chart/chart-series-plotorder.yaml b/samples/excel/10-chart/chart-series-plotorder.yaml index 8340b85e7..df1914f5c 100644 --- a/samples/excel/10-chart/chart-series-plotorder.yaml +++ b/samples/excel/10-chart/chart-series-plotorder.yaml @@ -6,9 +6,13 @@ 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) => { @@ -36,6 +40,7 @@ script: }); } + async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -65,6 +70,7 @@ script: }); } + async function createChart(context: Excel.RequestContext) { const sheet = context.workbook.worksheets.getItem("Sample"); const salesTable = sheet.tables.getItem("SalesTable"); @@ -79,7 +85,9 @@ script: chart.dataLabels.format.font.color = "black"; } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -91,7 +99,7 @@ script: } language: typescript template: - content: | + content: >-

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

@@ -123,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 diff --git a/samples/excel/10-chart/chart-series.yaml b/samples/excel/10-chart/chart-series.yaml index 7fc17349f..5d9cf86c3 100644 --- a/samples/excel/10-chart/chart-series.yaml +++ b/samples/excel/10-chart/chart-series.yaml @@ -6,10 +6,16 @@ host: EXCEL api_set: ExcelApi: '1.7' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#add-series").on("click", () => tryCatch(addSeries)); - $("#delete-series").on("click", () => tryCatch(deleteSeries)); + content: >- + document.getElementById("setup").addEventListener("click", () => + tryCatch(setup)); + + document.getElementById("add-series").addEventListener("click", () => + tryCatch(addSeries)); + + document.getElementById("delete-series").addEventListener("click", () => + tryCatch(deleteSeries)); + async function addSeries() { await Excel.run(async (context) => { @@ -28,6 +34,7 @@ script: }); } + async function deleteSeries() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -46,6 +53,7 @@ script: }); } + async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -77,6 +85,7 @@ script: }); } + async function createLineChart(context: Excel.RequestContext) { const sheet = context.workbook.worksheets.getItem("Sample"); const salesTable = sheet.tables.getItem("SalesTable"); @@ -91,7 +100,9 @@ script: chart.dataLabels.format.font.color = "black"; } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -106,21 +117,18 @@ template:

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

-

Set up

-

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..baab5ea50 100644 --- a/samples/excel/10-chart/chart-trendlines.yaml +++ b/samples/excel/10-chart/chart-trendlines.yaml @@ -1,17 +1,27 @@ 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' 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) => { @@ -26,6 +36,7 @@ script: }); } + async function getTrendline() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -42,6 +53,7 @@ script: }); } + async function getTrendlineColor() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -59,6 +71,7 @@ script: }); } + async function setTrendlineColor() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -76,6 +89,7 @@ script: }); } + async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -105,6 +119,7 @@ script: }); } + async function createChart(context: Excel.RequestContext) { const sheet = context.workbook.worksheets.getItem("Sample"); const salesTable = sheet.tables.getItem("SalesTable"); @@ -124,7 +139,9 @@ script: points.getItemAt(1).format.fill.setSolidColor("indigo"); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -134,12 +151,9 @@ script: console.error(error); } } - - - language: typescript template: - content: |- + content: >-

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

@@ -169,6 +183,7 @@ template: Get trendline color +
-

Try it out

+

Try it out

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

@@ -129,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 diff --git a/samples/excel/12-comment/comment-mentions.yaml b/samples/excel/12-comment/comment-mentions.yaml index 875d8c4a7..d1d9c24fb 100644 --- a/samples/excel/12-comment/comment-mentions.yaml +++ b/samples/excel/12-comment/comment-mentions.yaml @@ -6,9 +6,9 @@ host: EXCEL api_set: ExcelApi: '1.11' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#add-comment-with-mention").on("click", () => tryCatch(addCommentWithMention)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("add-comment-with-mention").addEventListener("click", () => tryCatch(addCommentWithMention)); async function addCommentWithMention() { await Excel.run(async (context) => { @@ -53,10 +53,11 @@ script: } language: typescript template: - content: |- + content: >-

This sample shows how to mention someone in a comment.

+

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

Setup

@@ -64,6 +65,7 @@ template: Create a worksheet
+

Try it out

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

@@ -88,15 +90,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.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 diff --git a/samples/excel/12-comment/comment-replies.yaml b/samples/excel/12-comment/comment-replies.yaml index e207fe89d..2c31271dc 100644 --- a/samples/excel/12-comment/comment-replies.yaml +++ b/samples/excel/12-comment/comment-replies.yaml @@ -1,18 +1,18 @@ 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' script: - content: | - $("#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)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("add-first-comment-reply").addEventListener("click", () => tryCatch(addFirstCommentReply)); + document.getElementById("add-second-comment-reply").addEventListener("click", () => tryCatch(addSecondCommentReply)); + document.getElementById("get-comment-reply-metadata").addEventListener("click", () => tryCatch(getCommentReplyMetadata)); + document.getElementById("edit-comment-reply").addEventListener("click", () => tryCatch(editCommentReply)); + document.getElementById("delete-comment-reply").addEventListener("click", () => tryCatch(deleteCommentReply)); async function addFirstCommentReply() { await Excel.run(async (context) => { @@ -102,16 +102,18 @@ script: } language: typescript template: - content: |- + 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.

@@ -150,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 diff --git a/samples/excel/12-comment/comment-resolution.yaml b/samples/excel/12-comment/comment-resolution.yaml index 295b7385a..8068eed31 100644 --- a/samples/excel/12-comment/comment-resolution.yaml +++ b/samples/excel/12-comment/comment-resolution.yaml @@ -6,11 +6,19 @@ host: EXCEL api_set: ExcelApi: '1.10' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#add-comment").on("click", () => tryCatch(addComment)); - $("#resolve-comment").on("click", () => tryCatch(resolveComment)); - $("#reopen-comment").on("click", () => tryCatch(reopenComment)); + content: >- + document.getElementById("setup").addEventListener("click", () => + tryCatch(setup)); + + document.getElementById("add-comment").addEventListener("click", () => + tryCatch(addComment)); + + document.getElementById("resolve-comment").addEventListener("click", () + => tryCatch(resolveComment)); + + document.getElementById("reopen-comment").addEventListener("click", () + => tryCatch(reopenComment)); + async function addComment() { await Excel.run(async (context) => { @@ -22,6 +30,7 @@ script: }); } + async function resolveComment() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Comments"); @@ -30,6 +39,7 @@ script: }); } + async function reopenComment() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Comments"); @@ -38,6 +48,7 @@ script: }); } + async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Comments").delete(); @@ -48,7 +59,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -59,16 +72,18 @@ script: } language: typescript template: - content: |- + 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.

@@ -99,15 +114,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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-advanced.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml index 012ef4e80..8cffe798d 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml @@ -6,12 +6,12 @@ host: EXCEL api_set: ExcelApi: '1.6' script: - content: | - $("#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)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("apply-conditional-formats-default-priority").addEventListener("click", () => tryCatch(applyConditionalFormatsWithDefaultPriority)); + document.getElementById("apply-conditional-formats-explicit-priority").addEventListener("click", () => tryCatch(applyPrioritizedConditionalFormats)); + document.getElementById("apply-conditional-formats-stop-if-true").addEventListener("click", () => tryCatch(applyPrioritizedConditionalFormatsWithStopOnTrue)); + document.getElementById("remove-conditional-format").addEventListener("click", () => tryCatch(removeConditionalFormat)); async function applyConditionalFormatsWithDefaultPriority() { @@ -178,7 +178,7 @@ script: } 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.

@@ -224,15 +224,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 0fbb291df..ef169c239 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) => { @@ -273,7 +273,7 @@ script: } language: typescript template: - content: |- + content: >-

This sample shows how to apply conditional formatting to ranges.

@@ -341,15 +341,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 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/custom-functions-errors.yaml b/samples/excel/16-custom-functions/custom-functions-errors.yaml index e1f5582b1..cccba8f42 100644 --- a/samples/excel/16-custom-functions/custom-functions-errors.yaml +++ b/samples/excel/16-custom-functions/custom-functions-errors.yaml @@ -6,15 +6,23 @@ host: EXCEL api_set: CustomFunctionsRuntime: 1.2 script: - content: |- + 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( @@ -35,4 +43,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 a5ebdbab6..7239d7a89 100644 --- a/samples/excel/16-custom-functions/data-types-custom-functions.yaml +++ b/samples/excel/16-custom-functions/data-types-custom-functions.yaml @@ -1,12 +1,13 @@ 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. +description: This sample shows how to write custom functions that return entity + value data types. host: EXCEL api_set: CustomFunctionsRuntime: 1.4 script: - content: | + content: > /** * Search for products that match a given substring. Try =SCRIPTLAB.DATATYPESCUSTOMFUNCTIONS.PRODUCTSEARCH("chef", false). * @customfunction @@ -14,7 +15,8 @@ script: * @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 { + async function productSearch(query: string, completeMatch?: boolean): + Promise { // 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. @@ -46,7 +48,9 @@ script: } } + // Helper function to create entities from product properties. + function makeProductEntity(product?: any) { const entity: Excel.EntityCellValue = { type: "Entity", @@ -113,7 +117,9 @@ script: return entity; } + // Helper function to search the sample JSON product data. + function searchProduct(query: string, completeMatch: boolean): any { const queryUpperCase = query.toUpperCase(); if (completeMatch === true) { @@ -123,7 +129,9 @@ script: } } + /** Sample JSON product data. */ + const products = [ { productID: 1, @@ -231,6 +239,7 @@ script: }, ]; + const categories = [ { categoryID: 1, @@ -274,6 +283,7 @@ script: } ]; + const suppliers = [ { supplierID: 1, @@ -331,4 +341,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 1e9740051..260a91d6f 100644 --- a/samples/excel/16-custom-functions/streaming-function.yaml +++ b/samples/excel/16-custom-functions/streaming-function.yaml @@ -6,7 +6,7 @@ host: EXCEL api_set: CustomFunctionsRuntime: 1.1 script: - content: | + content: > /** @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. @@ -15,7 +15,8 @@ script: * or respond to the user canceling the function. * @returns An incrementing value. */ - function increment(amount: number, interval: number, invocation: CustomFunctions.StreamingInvocation): void { + function increment(amount: number, interval: number, invocation: + CustomFunctions.StreamingInvocation): void { let result = 0; const timer = setInterval(() => { result += amount; diff --git a/samples/excel/16-custom-functions/web-call-function.yaml b/samples/excel/16-custom-functions/web-call-function.yaml index faf57fbdb..e7884c3c4 100644 --- a/samples/excel/16-custom-functions/web-call-function.yaml +++ b/samples/excel/16-custom-functions/web-call-function.yaml @@ -6,15 +6,24 @@ host: EXCEL api_set: CustomFunctionsRuntime: 1.1 script: - content: | + content: > /** - * Gets the star count for a given org/user and repo. Try =GETSTARCOUNT("officedev","office-js") + + * 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") { + + 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); @@ -30,4 +39,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 dcaf6a955..311d8f792 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,16 +1,16 @@ 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: 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,7 +103,7 @@ script: } language: typescript template: - content: |+ + content: >-

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

@@ -130,10 +130,9 @@ template:
- language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -145,15 +144,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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/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..a0f93220a 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,7 +90,7 @@ script: } language: typescript template: - content: |+ + content: >-

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

@@ -116,7 +116,6 @@ template:
- language: html style: content: |- @@ -131,15 +130,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 ded226769..09e9578ba 100644 --- a/samples/excel/20-data-types/data-types-entity-attribution.yaml +++ b/samples/excel/20-data-types/data-types-entity-attribution.yaml @@ -1,14 +1,15 @@ 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. +description: This sample shows how to set data provider attributions on entity + values in the card layout. 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, @@ -188,16 +189,18 @@ script: ]; language: typescript template: - content: |- + 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: | + content: |- section.samples { margin-top: 20px; } @@ -220,15 +223,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 89a06fafc..7aebdc9b4 100644 --- a/samples/excel/20-data-types/data-types-entity-icons.yaml +++ b/samples/excel/20-data-types/data-types-entity-icons.yaml @@ -6,14 +6,21 @@ 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; + let icons; + function createEntitiesWithIcons(icons): Excel.EntityCellValue[][] { /* This method creates an entity data type for each * icon in the `EntityCompactLayoutIcons` enum, @@ -38,6 +45,7 @@ script: return entities; } + async function createIcons() { await Excel.run(async (context) => { /* This method populates Column A in the worksheet @@ -54,6 +62,7 @@ script: }); } + async function setup() { await Excel.run(async (context) => { // Create a new worksheet called "Sample" and activate it. @@ -64,7 +73,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -75,17 +86,19 @@ script: } language: typescript template: - content: |- + 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

+

Try it out

language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -593,15 +617,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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-error-values.yaml b/samples/excel/20-data-types/data-types-error-values.yaml index ec1c9eeb6..27c4e03de 100644 --- a/samples/excel/20-data-types/data-types-error-values.yaml +++ b/samples/excel/20-data-types/data-types-error-values.yaml @@ -1,15 +1,22 @@ 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' 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. @@ -30,6 +37,7 @@ 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) => { @@ -53,6 +61,7 @@ script: }); } + async function setup() { await Excel.run(async (context) => { // Create a new worksheet called "Sample" and activate it. @@ -63,7 +72,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -74,10 +85,11 @@ script: } language: typescript template: - content: |- + content: >-

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

+

Try it out

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

@@ -316,10 +321,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 +336,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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-web-image.yaml b/samples/excel/20-data-types/data-types-web-image.yaml index 3a6d8134d..c9cfff555 100644 --- a/samples/excel/20-data-types/data-types-web-image.yaml +++ b/samples/excel/20-data-types/data-types-web-image.yaml @@ -1,17 +1,28 @@ 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. +description: This sample shows how to set and get web images in a worksheet + using data types. 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. @@ -45,6 +56,7 @@ 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) => { @@ -70,6 +82,7 @@ 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) => { @@ -93,12 +106,14 @@ script: }); } + 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. @@ -109,7 +124,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -120,7 +137,7 @@ script: } language: typescript template: - content: |- + 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.

    @@ -144,17 +161,14 @@ template: -

    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: | + content: |- section.samples { margin-top: 20px; } @@ -130,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 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..43444c0bb 100644 --- a/samples/excel/26-document/get-file-in-slices-async.yaml +++ b/samples/excel/26-document/get-file-in-slices-async.yaml @@ -1,15 +1,16 @@ 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' 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,7 +154,7 @@ 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.

    @@ -184,7 +185,7 @@ template:
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -204,15 +205,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 diff --git a/samples/excel/26-document/properties.yaml b/samples/excel/26-document/properties.yaml index 210f2208f..d8d8a3569 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,7 +123,7 @@ script: } language: typescript template: - content: |+ + content: >-

    This sample shows how to set and get document properties.

    @@ -158,10 +158,9 @@ template: Get count of custom document properties - language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -173,15 +172,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 3a9724380..85080d911 100644 --- a/samples/excel/30-events/data-change-event-details.yaml +++ b/samples/excel/30-events/data-change-event-details.yaml @@ -6,9 +6,13 @@ 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) => { @@ -22,6 +26,7 @@ script: }); } + async function onTableChanged(eventArgs: Excel.TableChangedEventArgs) { await Excel.run(async (context) => { const details = eventArgs.details; @@ -32,6 +37,7 @@ script: }); } + async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -58,7 +64,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -69,7 +77,7 @@ script: } language: typescript template: - content: |- + content: >-

    This sample shows how to use table changed events.

    @@ -80,6 +88,7 @@ template: Create table +

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -102,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/30-events/data-changed.yaml b/samples/excel/30-events/data-changed.yaml index 4671c08a4..0b26ada63 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) => { @@ -74,7 +74,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -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 + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 cf7cbf654..3f1be6e8c 100644 --- a/samples/excel/30-events/event-column-and-row-sort.yaml +++ b/samples/excel/30-events/event-column-and-row-sort.yaml @@ -1,20 +1,21 @@ 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. +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").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")); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("register-sort-handlers").addEventListener("click", () => tryCatch(registerSortHandlers)); + document.getElementById("register-row-sort-handler").addEventListener("click", () => tryCatch(registerRowSortHandler)); + document.getElementById("register-column-sort-handler").addEventListener("click", () => tryCatch(registerColumnSortHandler)); + document.getElementById("sort-q1").addEventListener("click", () => tryCatch(sortTopToBottom, "Q1")); + document.getElementById("sort-q3").addEventListener("click", () => tryCatch(sortTopToBottom, "Q3")); + document.getElementById("sort-apples").addEventListener("click", () => tryCatch(sortLeftToRight, "Apples")); + document.getElementById("sort-quinces").addEventListener("click", () => tryCatch(sortLeftToRight, "Quinces")); async function registerSortHandlers() { registerRowSortHandler(); registerColumnSortHandler(); @@ -149,7 +150,7 @@ script: } language: typescript template: - content: |- + content: >-

    This sample shows how to register and use handlers for the column and row sorting events.

    @@ -194,15 +195,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 dda6ab02e..e4a56195b 100644 --- a/samples/excel/30-events/event-worksheet-single-click.yaml +++ b/samples/excel/30-events/event-worksheet-single-click.yaml @@ -1,13 +1,14 @@ 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. +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").on("click", () => tryCatch(registerClickHandler)); + document.getElementById("register-click-handler").addEventListener("click", () => tryCatch(registerClickHandler)); async function registerClickHandler() { await Excel.run(async (context) => { @@ -36,7 +37,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -63,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 diff --git a/samples/excel/30-events/events-chart-activated.yaml b/samples/excel/30-events/events-chart-activated.yaml index 26e0b06c4..fdcf85ec1 100644 --- a/samples/excel/30-events/events-chart-activated.yaml +++ b/samples/excel/30-events/events-chart-activated.yaml @@ -1,16 +1,17 @@ order: 2 id: excel-events-chart-activated name: Chart events -description: Registers event handlers on an individual chart 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' script: content: |- - $("#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)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("register-onactivated-deactivated-handlers").addEventListener("click", () => tryCatch(registerActivationHandlers)); + document.getElementById("create-pie-chart").addEventListener("click", () => tryCatch(createPieChart)); + document.getElementById("create-cylinder-chart").addEventListener("click", () => tryCatch(createCylinderChart)); async function registerActivationHandlers() { await Excel.run(async (context) => { @@ -135,7 +136,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -168,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 diff --git a/samples/excel/30-events/events-chartcollection-added-activated.yaml b/samples/excel/30-events/events-chartcollection-added-activated.yaml index 8e62d8909..657abd603 100644 --- a/samples/excel/30-events/events-chartcollection-added-activated.yaml +++ b/samples/excel/30-events/events-chartcollection-added-activated.yaml @@ -1,15 +1,17 @@ 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' 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) => { @@ -109,7 +111,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -149,15 +151,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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-comment-event-handler.yaml b/samples/excel/30-events/events-comment-event-handler.yaml index 19daffab1..2417a5a6a 100644 --- a/samples/excel/30-events/events-comment-event-handler.yaml +++ b/samples/excel/30-events/events-comment-event-handler.yaml @@ -1,17 +1,18 @@ 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' 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) => { @@ -124,10 +125,11 @@ script: } language: typescript template: - content: |- + 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.

    @@ -152,7 +155,7 @@ template: -
    + language: html style: content: |- @@ -167,15 +170,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.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 diff --git a/samples/excel/30-events/events-disable-events.yaml b/samples/excel/30-events/events-disable-events.yaml index 9dfb2dfca..0ec00ece5 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) => { @@ -135,10 +135,11 @@ script: } language: typescript template: - content: |- + content: >-

    This sample shows how to turn events on and off.

    +

    Setup

    +

    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.

    @@ -175,13 +177,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 diff --git a/samples/excel/30-events/events-formula-changed.yaml b/samples/excel/30-events/events-formula-changed.yaml index 6c10c734b..c8174682a 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) => { @@ -84,10 +84,11 @@ script: } language: typescript template: - content: |- + 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.

    @@ -117,15 +118,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.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 diff --git a/samples/excel/30-events/events-table-changed.yaml b/samples/excel/30-events/events-table-changed.yaml index 10dbe4a25..3be83f9ac 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,12 +104,9 @@ 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.

    @@ -147,11 +144,9 @@ template: Change range selection
    - - language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -163,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 + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 eaf9a1362..ebc8b7c3a 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,12 +111,9 @@ 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.

    @@ -141,10 +138,9 @@ template: Change data
    - language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -156,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 + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 63fc16bf2..9f92c6ecf 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) => { @@ -39,7 +39,7 @@ script: } language: typescript template: - content: |- + 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 @@ -66,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 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 19b0ec0f8..4d3788c44 100644 --- a/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml +++ b/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml @@ -1,23 +1,24 @@ 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: ExcelApi: '1.7' script: content: |- - $("#register-on-add-handler").on("click", () => tryCatch(registerOnAddHandler)); - $("#add-worksheet").on("click", () => tryCatch(addWorksheet)); + document.getElementById("register-on-add-handler").addEventListener("click", () => tryCatch(registerOnAddHandler)); + document.getElementById("add-worksheet").addEventListener("click", () => tryCatch(addWorksheet)); - $("#register-on-activate-handler").on("click", () => tryCatch(registerOnActivateHandler)); - $("#register-on-deactivate-handler").on("click", () => tryCatch(registerOnDeactivateHandler)); - $("#delete-worksheet").on("click", () => tryCatch(deleteWorksheet)); + document.getElementById("register-on-activate-handler").addEventListener("click", () => tryCatch(registerOnActivateHandler)); + document.getElementById("register-on-deactivate-handler").addEventListener("click", () => tryCatch(registerOnDeactivateHandler)); + document.getElementById("delete-worksheet").addEventListener("click", () => tryCatch(deleteWorksheet)); - $("#create-setting").on("click", () => tryCatch(createSetting)); - $("#change-setting").on("click", () => tryCatch(changeSetting)); - $("#register-settings-changed-handler").on("click", () => tryCatch(registerSettingsChangedHandler)); + document.getElementById("create-setting").addEventListener("click", () => tryCatch(createSetting)); + document.getElementById("change-setting").addEventListener("click", () => tryCatch(changeSetting)); + document.getElementById("register-settings-changed-handler").addEventListener("click", () => tryCatch(registerSettingsChangedHandler)); async function registerOnAddHandler() { await Excel.run(async (context) => { @@ -170,14 +171,13 @@ script: } language: typescript template: - content: |- + content: >-

    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.

    Try it out

    -

    Added

    -

    Activated/Deactivated

    -

    Settings

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -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 + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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-protection.yaml b/samples/excel/30-events/events-worksheet-protection.yaml index a05efca9d..eff2c29b2 100644 --- a/samples/excel/30-events/events-worksheet-protection.yaml +++ b/samples/excel/30-events/events-worksheet-protection.yaml @@ -6,9 +6,13 @@ 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. @@ -25,7 +29,9 @@ script: }); } - async function checkProtection(event: Excel.WorksheetProtectionChangedEventArgs) { + + 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) => { @@ -38,6 +44,7 @@ script: }); } + async function changeProtection() { // This function toggles the protection status of a worksheet between "protected" and "unprotected". await Excel.run(async (context) => { @@ -57,7 +64,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -68,10 +77,11 @@ script: } language: typescript template: - content: |- + 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

    -
    +
    language: html style: content: |- @@ -97,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 diff --git a/samples/excel/30-events/events-worksheet.yaml b/samples/excel/30-events/events-worksheet.yaml index 63ab3d364..7daa5ff39 100644 --- a/samples/excel/30-events/events-worksheet.yaml +++ b/samples/excel/30-events/events-worksheet.yaml @@ -1,23 +1,25 @@ 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: 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) => { @@ -168,7 +170,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -178,11 +180,11 @@ template: +

    Try it out

    -

    Selection Changed

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -220,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 diff --git a/samples/excel/30-events/selection-changed-events.yaml b/samples/excel/30-events/selection-changed-events.yaml index 8950cfb0b..dfe92e876 100644 --- a/samples/excel/30-events/selection-changed-events.yaml +++ b/samples/excel/30-events/selection-changed-events.yaml @@ -1,15 +1,16 @@ 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. +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").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,7 +102,7 @@ script: } language: typescript template: - content: |+ + content: >-

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

    @@ -130,11 +131,9 @@ template:

    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 +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/34-named-item/create-and-remove-named-item.yaml b/samples/excel/34-named-item/create-and-remove-named-item.yaml index d4c24ffbd..6c3e4dd6a 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,19 +1,31 @@ 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' script: - content: |- - $("#setup").on("click", () => tryCatch(setup)); + content: >- + document.getElementById("setup").addEventListener("click", () => + tryCatch(setup)); + + + 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)); - $("#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) => { @@ -26,6 +38,7 @@ script: }); } + async function addNameToHeader() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -38,6 +51,7 @@ script: }); } + async function formatRangeByName() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -56,6 +70,7 @@ script: }); } + async function removeName() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -76,6 +91,7 @@ script: }); } + async function listNamedItems() { await Excel.run(async (context) => { // Log all the named items in the active worksheet. @@ -93,6 +109,7 @@ script: }); } + async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -114,64 +131,77 @@ script: }); } + 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(); @@ -182,7 +212,7 @@ script: } language: typescript template: - content: | + content: >-

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

    @@ -224,15 +254,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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/update-named-item.yaml b/samples/excel/34-named-item/update-named-item.yaml index d70a75135..eccac9941 100644 --- a/samples/excel/34-named-item/update-named-item.yaml +++ b/samples/excel/34-named-item/update-named-item.yaml @@ -7,10 +7,16 @@ host: EXCEL api_set: ExcelApi: '1.7' script: - content: |- - $("#add-named-item").on("click", () => tryCatch(addNamedItem)); - $("#update-named-item").on("click", () => tryCatch(updateNamedItem)); - $("#setup").on("click", () => tryCatch(setup)); + content: >- + document.getElementById("add-named-item").addEventListener("click", () + => tryCatch(addNamedItem)); + + document.getElementById("update-named-item").addEventListener("click", + () => tryCatch(updateNamedItem)); + + document.getElementById("setup").addEventListener("click", () => + tryCatch(setup)); + async function addNamedItem() { await Excel.run(async (context) => { @@ -36,6 +42,7 @@ script: }); } + async function updateNamedItem() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -58,6 +65,7 @@ script: }); } + async function setup() { await Excel.run(async (context) => { // Create and activate the worksheet @@ -78,7 +86,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -94,7 +104,6 @@ template:

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

    -

    Setup

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -124,13 +133,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 diff --git a/samples/excel/38-pivottable/pivottable-calculations.yaml b/samples/excel/38-pivottable/pivottable-calculations.yaml index a105bd44d..94c8e2d6e 100644 --- a/samples/excel/38-pivottable/pivottable-calculations.yaml +++ b/samples/excel/38-pivottable/pivottable-calculations.yaml @@ -7,12 +7,22 @@ host: EXCEL 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)); + content: >- + 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) => { @@ -38,6 +48,7 @@ script: }); } + async function showDifferenceFrom() { await Excel.run(async (context) => { const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); @@ -65,6 +76,7 @@ script: }); } + async function showSums() { await Excel.run(async (context) => { const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); @@ -87,6 +99,7 @@ script: }); } + async function setup() { await Excel.run(async (context) => { // Create the worksheets. @@ -136,6 +149,7 @@ script: }); } + async function deletePivot() { await Excel.run(async (context) => { context.workbook.worksheets.getItem("Pivot").pivotTables.getItem("Farm Sales").delete(); @@ -143,7 +157,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -152,10 +168,10 @@ 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: |- + content: >-

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

    @@ -199,15 +215,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 384a24b55..aba4d9105 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").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)); + document.getElementById("deletePivot").addEventListener("click", () => tryCatch(deletePivot)); + document.getElementById("createWithNames").addEventListener("click", () => tryCatch(createWithNames)); + document.getElementById("addRow").addEventListener("click", () => tryCatch(addRow)); + document.getElementById("removeRow").addEventListener("click", () => tryCatch(removeRow)); + document.getElementById("toggleColumn").addEventListener("click", () => tryCatch(toggleColumn)); + document.getElementById("addValues").addEventListener("click", () => tryCatch(addValues)); + document.getElementById("changeHierarchyNames").addEventListener("click", () => tryCatch(changeHierarchyNames)); + document.getElementById("changeLayout").addEventListener("click", () => tryCatch(changeLayout)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); async function createWithNames() { await Excel.run(async (context) => { @@ -194,7 +194,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -205,9 +205,11 @@ template: Setup sample
    +

    Try it out

    +

    Create the PivotTable

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

    Data Manipulation

    -

    PivotTable Status

    +

    Try it out

    +

    Try it out

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

    @@ -114,7 +125,7 @@ template:
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -126,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 diff --git a/samples/excel/38-pivottable/pivottable-slicer.yaml b/samples/excel/38-pivottable/pivottable-slicer.yaml index 05f37c4b8..f95a17238 100644 --- a/samples/excel/38-pivottable/pivottable-slicer.yaml +++ b/samples/excel/38-pivottable/pivottable-slicer.yaml @@ -6,15 +6,31 @@ 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) => { @@ -28,6 +44,7 @@ script: }); } + async function formatSlicer() { await Excel.run(async (context) => { const slicer = context.workbook.slicers.getItem("Fruit Slicer"); @@ -40,6 +57,7 @@ script: }); } + async function applyStyle() { await Excel.run(async (context) => { const slicer = context.workbook.slicers.getItem("Fruit Slicer"); @@ -48,6 +66,7 @@ script: }); } + async function addFilters() { await Excel.run(async (context) => { const slicer = context.workbook.slicers.getItem("Fruit Slicer"); @@ -56,6 +75,7 @@ script: }); } + async function removeFilters() { await Excel.run(async (context) => { const slicer = context.workbook.slicers.getItem("Fruit Slicer"); @@ -64,6 +84,7 @@ script: }); } + async function removeSlicer() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -72,6 +93,7 @@ script: }); } + async function addPivotTable() { await Excel.run(async (context) => { const rangeToAnalyze = context.workbook.worksheets.getItem("Data").getRange("A1:E21"); @@ -89,6 +111,7 @@ script: }); } + async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Data").delete(); @@ -130,7 +153,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -141,7 +166,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -156,6 +181,7 @@ template: Add PivotTable
    +

    Try it out

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

    @@ -188,7 +214,7 @@ template:
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -200,15 +226,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 f477ead82..6e0071465 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. @@ -88,7 +88,7 @@ script: } language: typescript template: - content: |- + 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.

    @@ -106,7 +106,7 @@ template: -
    + language: html style: content: |- @@ -121,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 diff --git a/samples/excel/42-range/cell-properties.yaml b/samples/excel/42-range/cell-properties.yaml index 373060786..beeb74134 100644 --- a/samples/excel/42-range/cell-properties.yaml +++ b/samples/excel/42-range/cell-properties.yaml @@ -7,10 +7,16 @@ 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) => { @@ -86,6 +92,7 @@ script: }); } + async function getCellProperties() { await Excel.run(async (context) => { const cell = context.workbook.getActiveCell(); @@ -112,6 +119,7 @@ script: }); } + async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -133,7 +141,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -144,7 +154,7 @@ script: } language: typescript template: - content: |- + content: >-

    This sample shows how to format a range.

    @@ -180,15 +190,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 89ecaaa0a..d8ef3ca1f 100644 --- a/samples/excel/42-range/dynamic-arrays.yaml +++ b/samples/excel/42-range/dynamic-arrays.yaml @@ -1,16 +1,17 @@ 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. +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").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)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("copy-table-headers").addEventListener("click", () => tryCatch(copyTableHeaders)); + document.getElementById("apply-filter-function").addEventListener("click", () => tryCatch(applyFilterFunction)); + document.getElementById("display-spill-information").addEventListener("click", () => tryCatch(displaySpillInformation)); async function copyTableHeaders() { await Excel.run(async (context) => { @@ -128,7 +129,7 @@ script: } language: typescript template: - content: |- + 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.

    @@ -159,7 +160,7 @@ template:
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -171,15 +172,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.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 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..435f0f3cf 100644 --- a/samples/excel/42-range/insert-delete-clear-range.yaml +++ b/samples/excel/42-range/insert-delete-clear-range.yaml @@ -1,18 +1,26 @@ 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: ExcelApi: '1.4' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); + content: >- + document.getElementById("setup").addEventListener("click", () => + tryCatch(setup)); + + + document.getElementById("insert-range").addEventListener("click", () => + tryCatch(insertRange)); + + document.getElementById("delete-range").addEventListener("click", () => + tryCatch(deleteRange)); + + document.getElementById("clear-range").addEventListener("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) => { @@ -25,6 +33,7 @@ script: }); } + async function deleteRange() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -36,6 +45,7 @@ script: }); } + async function clearRange() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -47,6 +57,7 @@ script: }); } + async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -73,7 +84,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -85,7 +98,7 @@ script: } language: typescript template: - content: | + content: >-

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

    @@ -111,7 +124,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -123,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 diff --git a/samples/excel/42-range/outline.yaml b/samples/excel/42-range/outline.yaml index 25b6bb2af..b23488f50 100644 --- a/samples/excel/42-range/outline.yaml +++ b/samples/excel/42-range/outline.yaml @@ -6,14 +6,28 @@ 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) => { @@ -31,6 +45,7 @@ script: }); } + async function groupColumns() { Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -48,6 +63,7 @@ script: }); } + async function collapseOutline() { Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -58,6 +74,7 @@ script: }); } + async function expandOutline() { Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -68,6 +85,7 @@ script: }); } + async function ungroup() { Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -82,6 +100,7 @@ script: }); } + async function setupData() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -107,6 +126,7 @@ script: }); } + async function setupTotals() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -159,7 +179,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback, option?) { try { await callback(option); @@ -170,7 +192,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -184,6 +206,7 @@ template: +
    @@ -226,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 diff --git a/samples/excel/42-range/precedents.yaml b/samples/excel/42-range/precedents.yaml index 81a41ae32..2111e863c 100644 --- a/samples/excel/42-range/precedents.yaml +++ b/samples/excel/42-range/precedents.yaml @@ -1,18 +1,20 @@ order: 13 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. +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.14' script: - content: | - $("#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)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("select-first-cell").addEventListener("click", () => tryCatch(selectFirstCell)); + document.getElementById("select-second-cell").addEventListener("click", () => tryCatch(selectSecondCell)); + document.getElementById("get-direct-precedents").addEventListener("click", () => tryCatch(getDirectPrecedents)); + document.getElementById("get-all-precedents").addEventListener("click", () => tryCatch(getAllPrecedents)); + document.getElementById("clear-highlighting").addEventListener("click", () => tryCatch(clearFormatting)); /** Select a cell with precedents on one worksheet. */ async function selectFirstCell() { @@ -158,17 +160,19 @@ script: } language: typescript template: - content: |- + 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. 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

    +

    Try it out

    -
    +
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -201,15 +205,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 91f2cce7f..21fd69e2a 100644 --- a/samples/excel/42-range/range-areas.yaml +++ b/samples/excel/42-range/range-areas.yaml @@ -1,18 +1,20 @@ 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' 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,7 +125,7 @@ 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.

    @@ -170,15 +172,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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-auto-fill.yaml b/samples/excel/42-range/range-auto-fill.yaml index 4d9918c69..1a83e08c2 100644 --- a/samples/excel/42-range/range-auto-fill.yaml +++ b/samples/excel/42-range/range-auto-fill.yaml @@ -6,12 +6,22 @@ host: EXCEL api_set: ExcelApi: '1.10' script: - content: | - $("#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)); + content: >- + document.getElementById("setup-data").addEventListener("click", () => + tryCatch(setupData)); + + document.getElementById("setup-first-sums").addEventListener("click", () + => tryCatch(setupFirstSums)); + + document.getElementById("auto-fill-values").addEventListener("click", () + => tryCatch(autoFillValues)); + + document.getElementById("auto-fill-formats").addEventListener("click", + () => tryCatch(autoFillFormats)); + + document.getElementById("auto-fill-copy").addEventListener("click", () + => tryCatch(autoFillCopy)); + async function autoFillValues() { await Excel.run(async (context) => { @@ -25,6 +35,7 @@ script: }); } + async function autoFillFormats() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -37,6 +48,7 @@ script: }); } + async function autoFillCopy() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -49,6 +61,7 @@ script: }); } + async function setupData() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -74,6 +87,7 @@ script: }); } + async function setupFirstSums() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -87,7 +101,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback, option?) { try { await callback(option); @@ -98,7 +114,7 @@ script: } language: typescript template: - content: |- + content: >-

    This sample shows how to provide cell data for surrounding cells using auto fill.

    @@ -112,6 +128,7 @@ template: +
    @@ -142,15 +159,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 f196ba4ce..2db113163 100644 --- a/samples/excel/42-range/range-copyfrom.yaml +++ b/samples/excel/42-range/range-copyfrom.yaml @@ -6,16 +6,16 @@ host: EXCEL api_set: ExcelApi: '1.10' script: - content: | - $("#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)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("copyAll").addEventListener("click", () => tryCatch(copyAll)); + document.getElementById("copyFormula").addEventListener("click", () => tryCatch(copyFormula)); + document.getElementById("copyFormulaResult").addEventListener("click", () => tryCatch(copyFormulaResult)); + document.getElementById("copySingleAcrossRange").addEventListener("click", () => tryCatch(copySingleAcrossRange)); + document.getElementById("copyOnlyFormat").addEventListener("click", () => tryCatch(copyOnlyFormat)); + document.getElementById("skipBlanks").addEventListener("click", () => tryCatch(skipBlanks)); + document.getElementById("transpose").addEventListener("click", () => tryCatch(transpose)); + document.getElementById("move").addEventListener("click", () => tryCatch(move)); async function copyAll() { await Excel.run(async (context) => { @@ -153,16 +153,18 @@ script: } language: typescript template: - content: |- + content: >-

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

    +

    Setup

    +

    Try it out

    +

    Try it out

    Cell D3 has dependents across worksheets.

    @@ -145,10 +164,10 @@ template: -
    +
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -160,15 +179,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 b929a80b2..d6105d9cc 100644 --- a/samples/excel/42-range/range-direct-dependents.yaml +++ b/samples/excel/42-range/range-direct-dependents.yaml @@ -1,16 +1,18 @@ 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. +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").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() { @@ -115,7 +117,7 @@ script: } language: typescript template: - content: |- + 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.

    @@ -155,15 +157,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 e447eceb7..5167a3c0c 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; @@ -112,16 +112,18 @@ script: } language: typescript template: - content: |- + content: >-

    This sample shows how to find a cell with a matching string value 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.

    @@ -159,13 +161,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 diff --git a/samples/excel/42-range/range-get-range-edge.yaml b/samples/excel/42-range/range-get-range-edge.yaml index e279163c5..59fd85e54 100644 --- a/samples/excel/42-range/range-get-range-edge.yaml +++ b/samples/excel/42-range/range-get-range-edge.yaml @@ -1,19 +1,20 @@ 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' 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) => { @@ -169,10 +170,11 @@ script: } language: typescript template: - content: |- + content: >-

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

    +

    Set up

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -313,15 +313,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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-merged-ranges.yaml b/samples/excel/42-range/range-merged-ranges.yaml index 9f38bbbb6..f37b9b6ff 100644 --- a/samples/excel/42-range/range-merged-ranges.yaml +++ b/samples/excel/42-range/range-merged-ranges.yaml @@ -6,10 +6,16 @@ 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) => { @@ -28,6 +34,7 @@ script: }); } + async function getMergedRange() { await Excel.run(async (context) => { // Retrieve the worksheet and the table in that worksheet. @@ -52,6 +59,7 @@ script: }); } + async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -80,7 +88,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -91,7 +101,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -125,15 +135,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 3c02d9d80..3a631a932 100644 --- a/samples/excel/42-range/range-relationships.yaml +++ b/samples/excel/42-range/range-relationships.yaml @@ -1,19 +1,20 @@ 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: ExcelApi: '1.4' script: - content: | - $("#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)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("bounding-rect").addEventListener("click", () => tryCatch(boundingRect)); + document.getElementById("intersection").addEventListener("click", () => tryCatch(intersection)); + document.getElementById("offset-range").addEventListener("click", () => tryCatch(offsetRange)); + document.getElementById("resized-range").addEventListener("click", () => tryCatch(resizedRange)); + document.getElementById("create-sales-contest-charts").addEventListener("click", () => tryCatch(createContestCharts)); async function boundingRect() { await Excel.run(async (context) => { @@ -203,7 +204,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -236,7 +237,7 @@ template:
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -248,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 diff --git a/samples/excel/42-range/range-remove-duplicates.yaml b/samples/excel/42-range/range-remove-duplicates.yaml index e2a182d4a..0fddc7e34 100644 --- a/samples/excel/42-range/range-remove-duplicates.yaml +++ b/samples/excel/42-range/range-remove-duplicates.yaml @@ -6,11 +6,17 @@ host: EXCEL api_set: ExcelApi: '1.9' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); + content: >- + document.getElementById("setup").addEventListener("click", () => + tryCatch(setup)); + + + document.getElementById("delete-name").addEventListener("click", () => + tryCatch(deleteName)); + + document.getElementById("delete-distributor").addEventListener("click", + () => tryCatch(deleteDistributor)); - $("#delete-name").on("click", () => tryCatch(deleteName)); - $("#delete-distributor").on("click", () => tryCatch(deleteDistributor)); async function deleteName() { await Excel.run(async (context) => { @@ -26,6 +32,7 @@ script: }); } + async function deleteDistributor() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -40,6 +47,7 @@ script: }); } + async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -72,7 +80,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -83,7 +93,7 @@ script: } language: typescript template: - content: | + content: >-

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

    @@ -107,7 +117,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -119,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 diff --git a/samples/excel/42-range/range-text-orientation.yaml b/samples/excel/42-range/range-text-orientation.yaml index 9c6cc34ae..de1f88b81 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,7 +75,7 @@ script: } language: typescript template: - content: | + content: >-

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

    @@ -101,7 +101,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -113,15 +113,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 diff --git a/samples/excel/42-range/selected-range.yaml b/samples/excel/42-range/selected-range.yaml index de07de00d..9fc12e71d 100644 --- a/samples/excel/42-range/selected-range.yaml +++ b/samples/excel/42-range/selected-range.yaml @@ -7,9 +7,13 @@ 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) => { @@ -22,6 +26,7 @@ script: }); } + async function setSelection() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -33,7 +38,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -45,7 +52,7 @@ script: } language: typescript template: - content: | + content: >-

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

    @@ -61,7 +68,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -73,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 diff --git a/samples/excel/42-range/set-get-values.yaml b/samples/excel/42-range/set-get-values.yaml index c6647d0ca..4ce1573a4 100644 --- a/samples/excel/42-range/set-get-values.yaml +++ b/samples/excel/42-range/set-get-values.yaml @@ -7,17 +7,35 @@ 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) => { @@ -31,6 +49,7 @@ script: }); } + async function setValues() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -47,6 +66,7 @@ script: }); } + async function setFormula() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -59,6 +79,7 @@ script: }); } + async function setFormulas() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -79,6 +100,7 @@ script: }); } + async function setFormulasR1C1() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -99,6 +121,7 @@ script: }); } + async function getValues() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -111,6 +134,7 @@ script: }); } + async function getTexts() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -123,6 +147,7 @@ script: }); } + async function getFormulas() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -135,6 +160,7 @@ script: }); } + async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -161,7 +187,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -173,7 +201,7 @@ script: } language: typescript template: - content: | + content: >-

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

    @@ -187,7 +215,6 @@ template:

    Try it out

    - @@ -203,9 +230,7 @@ template: -
    - @@ -218,7 +243,7 @@ template:
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -230,15 +255,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 f322a2d58..9b534dad4 100644 --- a/samples/excel/42-range/style.yaml +++ b/samples/excel/42-range/style.yaml @@ -1,20 +1,21 @@ 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: 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,12 +152,9 @@ script: console.error(error); } } - - - language: typescript template: - content: | + content: >-

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

    @@ -221,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 diff --git a/samples/excel/42-range/used-range.yaml b/samples/excel/42-range/used-range.yaml index 542ddab5b..388696d66 100644 --- a/samples/excel/42-range/used-range.yaml +++ b/samples/excel/42-range/used-range.yaml @@ -1,16 +1,17 @@ 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. +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: 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,7 +101,7 @@ script: } language: typescript template: - content: | + content: >-

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

    @@ -123,7 +124,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -135,15 +136,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 diff --git a/samples/excel/44-shape/shape-create-and-delete.yaml b/samples/excel/44-shape/shape-create-and-delete.yaml index 524efc7d6..318a936a3 100644 --- a/samples/excel/44-shape/shape-create-and-delete.yaml +++ b/samples/excel/44-shape/shape-create-and-delete.yaml @@ -6,12 +6,22 @@ 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) => { @@ -25,6 +35,7 @@ script: }); } + async function createTriangle() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); @@ -39,6 +50,7 @@ script: }); } + async function createSmileyFace() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); @@ -52,6 +64,7 @@ script: }); } + async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Shapes").delete(); @@ -62,6 +75,7 @@ script: }); } + async function removeAll() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Shapes").delete(); @@ -78,7 +92,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -89,16 +105,18 @@ script: } language: typescript template: - content: |- + content: >-

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

    +

    Setup

    +

    Try it out

    +

    Try it out

    +

    Try it out

    +

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -165,15 +165,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 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..6940f74b3 100644 --- a/samples/excel/46-table/create-table.yaml +++ b/samples/excel/46-table/create-table.yaml @@ -7,8 +7,10 @@ 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) => { @@ -39,7 +41,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -51,11 +55,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 +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 diff --git a/samples/excel/46-table/filter-data.yaml b/samples/excel/46-table/filter-data.yaml index e55d41ca1..19d1f32d6 100644 --- a/samples/excel/46-table/filter-data.yaml +++ b/samples/excel/46-table/filter-data.yaml @@ -7,10 +7,16 @@ 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) => { @@ -34,6 +40,7 @@ script: }); } + async function clearFilters() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -46,7 +53,9 @@ script: }); } + /** Create a new table with sample data */ + async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -75,7 +84,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -87,7 +98,7 @@ script: } language: typescript template: - content: | + content: >-

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

    @@ -110,7 +121,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -122,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 diff --git a/samples/excel/46-table/formatting.yaml b/samples/excel/46-table/formatting.yaml index 87e629d4f..2c0e627ad 100644 --- a/samples/excel/46-table/formatting.yaml +++ b/samples/excel/46-table/formatting.yaml @@ -7,9 +7,13 @@ 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) => { @@ -25,7 +29,9 @@ script: }); } + /** Create a new table with sample data */ + async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -54,7 +60,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -66,7 +74,7 @@ script: } language: typescript template: - content: | + content: >-

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

    @@ -86,7 +94,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -98,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 diff --git a/samples/excel/46-table/get-data-from-table.yaml b/samples/excel/46-table/get-data-from-table.yaml index 7620680aa..336ae264e 100644 --- a/samples/excel/46-table/get-data-from-table.yaml +++ b/samples/excel/46-table/get-data-from-table.yaml @@ -7,9 +7,13 @@ 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) => { @@ -38,7 +42,9 @@ script: }); } + /** Create a new table with some sample data */ + async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -67,7 +73,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -79,7 +87,7 @@ script: } language: typescript template: - content: |+ + content: >-

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

    @@ -97,11 +105,9 @@ template: Get data from a table - - language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -113,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 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..a16c434be 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,19 @@ 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) => { @@ -26,6 +34,7 @@ script: }); } + async function getRange() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -39,7 +48,9 @@ script: }); } + /** Create a new table with some sample data*/ + async function createTable() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -68,7 +79,9 @@ script: }); } + /** Filter the table*/ + async function filterTable() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -84,7 +97,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -94,10 +109,9 @@ script: console.error(error); } } - language: typescript template: - content: |+ + content: >-

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

    @@ -121,10 +135,9 @@ template: Get visible range - language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -136,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 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 35786a451..e2bc26ad4 100644 --- a/samples/excel/46-table/import-json-data.yaml +++ b/samples/excel/46-table/import-json-data.yaml @@ -7,8 +7,10 @@ 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) => { @@ -32,6 +34,7 @@ script: }); } + const transactions = [ { "DATE":"1/1/2017", @@ -101,7 +104,9 @@ script: } ]; + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -113,21 +118,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 +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 diff --git a/samples/excel/46-table/resize-table.yaml b/samples/excel/46-table/resize-table.yaml index dd3dbec90..27fcf568d 100644 --- a/samples/excel/46-table/resize-table.yaml +++ b/samples/excel/46-table/resize-table.yaml @@ -6,9 +6,13 @@ 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) => { @@ -23,6 +27,7 @@ script: }); } + async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -52,7 +57,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -67,14 +74,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 +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/50-workbook/create-get-change-delete-settings.yaml b/samples/excel/50-workbook/create-get-change-delete-settings.yaml index 51f102ebf..44a2f45aa 100644 --- a/samples/excel/50-workbook/create-get-change-delete-settings.yaml +++ b/samples/excel/50-workbook/create-get-change-delete-settings.yaml @@ -1,16 +1,23 @@ 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: 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) => { @@ -25,6 +32,7 @@ script: }); } + async function deleteSetting() { await Excel.run(async (context) => { const settings = context.workbook.settings; @@ -44,6 +52,7 @@ script: }); } + async function changeSetting() { await Excel.run(async (context) => { const settings = context.workbook.settings; @@ -61,7 +70,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -73,7 +84,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -95,7 +106,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -107,15 +118,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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-workbook.yaml b/samples/excel/50-workbook/create-workbook.yaml index e3df092fb..76a289b3d 100644 --- a/samples/excel/50-workbook/create-workbook.yaml +++ b/samples/excel/50-workbook/create-workbook.yaml @@ -1,14 +1,15 @@ 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: 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() { @@ -47,7 +48,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -78,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 diff --git a/samples/excel/50-workbook/culture-info-date-time.yaml b/samples/excel/50-workbook/culture-info-date-time.yaml index d460268f5..deda985db 100644 --- a/samples/excel/50-workbook/culture-info-date-time.yaml +++ b/samples/excel/50-workbook/culture-info-date-time.yaml @@ -1,15 +1,16 @@ 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. +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").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) => { @@ -104,22 +105,24 @@ script: } language: typescript template: - content: |- + content: >-

    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: | + content: |- section.samples { margin-top: 20px; } @@ -131,15 +134,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 92c0950c2..1b4a08fdc 100644 --- a/samples/excel/50-workbook/culture-info.yaml +++ b/samples/excel/50-workbook/culture-info.yaml @@ -1,16 +1,17 @@ order: 5 id: excel-culture-info name: Culture info -description: This sample shows how to apply the cultural settings APIs to help normalize data. +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").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) => { @@ -107,7 +108,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -133,7 +134,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -145,15 +146,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 a1156ca55..5c96392e5 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) => { @@ -174,7 +174,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -251,15 +251,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 e3a260e1c..c1055f0ec 100644 --- a/samples/excel/50-workbook/workbook-built-in-functions.yaml +++ b/samples/excel/50-workbook/workbook-built-in-functions.yaml @@ -6,10 +6,16 @@ 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) => { @@ -25,6 +31,7 @@ script: }); } + async function nestFunctions() { await Excel.run(async (context) => { // This function uses VLOOKUP to find data in the "Wrench" row @@ -45,6 +52,7 @@ script: }); } + async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -68,7 +76,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -79,7 +89,7 @@ script: } language: typescript template: - content: |- + 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.

    @@ -101,7 +111,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -113,15 +123,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 5c19fab32..d1887949c 100644 --- a/samples/excel/50-workbook/workbook-calculation.yaml +++ b/samples/excel/50-workbook/workbook-calculation.yaml @@ -1,19 +1,20 @@ 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.' +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' 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"); @@ -133,7 +134,7 @@ script: } language: typescript template: - content: |- + content: >-

    This sample shows how to use the calculation APIs.

    @@ -147,7 +148,6 @@ template:

    Try it out

    -

    Calculation events

    -

    Manual calculations

    Try switching to manual calculation, then editing the workbook.

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -186,15 +185,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 3d452bd3c..45e1aa1e6 100644 --- a/samples/excel/50-workbook/workbook-get-active-cell.yaml +++ b/samples/excel/50-workbook/workbook-get-active-cell.yaml @@ -6,8 +6,10 @@ 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) => { @@ -22,7 +24,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -34,7 +38,7 @@ script: } language: typescript template: - content: | + content: >-

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

    @@ -59,15 +63,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 04b0599b4..ad3881acc 100644 --- a/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml +++ b/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml @@ -6,12 +6,16 @@ host: EXCEL api_set: ExcelAPI: '1.13' script: - content: | + content: >- $("#file").on("change", getBase64); - $("#insert-sheets").on("click", () => tryCatch(insertSheets)); + + 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"); @@ -27,6 +31,7 @@ script: reader.readAsDataURL(myFile.files[0]); } + async function insertSheets() { await Excel.run(async (context) => { // Retrieve the source workbook. @@ -45,7 +50,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -56,7 +63,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -87,15 +94,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 c2bf8e546..a331016ff 100644 --- a/samples/excel/50-workbook/workbook-save-and-close.yaml +++ b/samples/excel/50-workbook/workbook-save-and-close.yaml @@ -6,11 +6,19 @@ host: EXCEL api_set: ExcelAPI: '1.11' script: - content: | - $("#saveWithPrompt").on("click", () => tryCatch(saveWithPrompt)); - $("#saveWithoutPrompt").on("click", () => tryCatch(saveWithoutPrompt)); - $("#closeWithSave").on("click", () => tryCatch(closeWithSave)); - $("#closeWithoutSave").on("click", () => tryCatch(closeWithoutSave)); + content: >- + document.getElementById("saveWithPrompt").addEventListener("click", () + => tryCatch(saveWithPrompt)); + + document.getElementById("saveWithoutPrompt").addEventListener("click", + () => tryCatch(saveWithoutPrompt)); + + document.getElementById("closeWithSave").addEventListener("click", () => + tryCatch(closeWithSave)); + + document.getElementById("closeWithoutSave").addEventListener("click", () + => tryCatch(closeWithoutSave)); + async function saveWithPrompt() { await Excel.run(async (context) => { @@ -18,25 +26,30 @@ script: }); } + 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(); @@ -47,7 +60,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -81,15 +94,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 7cf4c4c3b..3159d203c 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").on("click", () => tryCatch(setup)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); - $("#get-active-worksheet").on("click", () => tryCatch(getActiveWorksheet)); - $("#set-active-worksheet").on("click", () => tryCatch(setActiveWorksheet)); + document.getElementById("get-active-worksheet").addEventListener("click", () => tryCatch(getActiveWorksheet)); + document.getElementById("set-active-worksheet").addEventListener("click", () => tryCatch(setActiveWorksheet)); async function getActiveWorksheet() { await Excel.run(async (context) => { @@ -83,18 +83,16 @@ script: } language: typescript template: - content: | + content: |-

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

    -

    Set up

    -

    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..0d9d27236 100644 --- a/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml +++ b/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml @@ -1,17 +1,25 @@ 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: 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) => { @@ -25,6 +33,7 @@ script: }); } + async function deleteWorksheet() { await Excel.run(async (context) => { const sheets = context.workbook.worksheets; @@ -46,6 +55,7 @@ script: }); } + async function renameWorksheet() { await Excel.run(async (context) => { const currentSheet = context.workbook.worksheets.getActiveWorksheet(); @@ -57,6 +67,7 @@ script: }); } + async function uniqueWorksheetName(context: Excel.RequestContext) { let number = 1; let name: string; @@ -77,6 +88,7 @@ script: return name; } + async function moveWorksheet() { await Excel.run(async (context) => { const sheets = context.workbook.worksheets; @@ -91,7 +103,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -103,7 +117,7 @@ script: } language: typescript template: - content: | + content: >-

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

    @@ -125,7 +139,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -137,15 +151,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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/gridlines.yaml b/samples/excel/54-worksheet/gridlines.yaml index a33001240..c26a2e225 100644 --- a/samples/excel/54-worksheet/gridlines.yaml +++ b/samples/excel/54-worksheet/gridlines.yaml @@ -7,9 +7,13 @@ 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) => { @@ -20,6 +24,7 @@ script: }); } + async function showGridlines() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -29,7 +34,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -41,7 +48,7 @@ script: } language: typescript template: - content: |+ + content: >-

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

    @@ -57,10 +64,9 @@ template: Show gridlines - language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -72,15 +78,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 82cf87258..6607ee616 100644 --- a/samples/excel/54-worksheet/list-worksheets.yaml +++ b/samples/excel/54-worksheet/list-worksheets.yaml @@ -7,8 +7,10 @@ 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) => { @@ -28,7 +30,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -40,7 +44,7 @@ script: } language: typescript template: - content: | + content: >-

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

    @@ -53,7 +57,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -65,15 +69,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 686ff762f..006beb5aa 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,7 +119,7 @@ script: } language: typescript template: - content: | + content: >-

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

    @@ -144,7 +144,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -156,15 +156,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 diff --git a/samples/excel/54-worksheet/tab-color.yaml b/samples/excel/54-worksheet/tab-color.yaml index 8c0b98681..f569caf02 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) => { @@ -64,7 +64,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -89,7 +89,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -101,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 diff --git a/samples/excel/54-worksheet/worksheet-auto-filter.yaml b/samples/excel/54-worksheet/worksheet-auto-filter.yaml index c3659372e..0de48e6c0 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 @@ -152,7 +152,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -194,7 +194,7 @@ template: language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -206,15 +206,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 3e69dfe43..a01247863 100644 --- a/samples/excel/54-worksheet/worksheet-copy.yaml +++ b/samples/excel/54-worksheet/worksheet-copy.yaml @@ -6,9 +6,13 @@ 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) => { @@ -26,6 +30,7 @@ script: }); } + async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -53,7 +58,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -69,14 +76,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 +191,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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-page-layout.yaml b/samples/excel/54-worksheet/worksheet-page-layout.yaml index 597ad0518..671646f02 100644 --- a/samples/excel/54-worksheet/worksheet-page-layout.yaml +++ b/samples/excel/54-worksheet/worksheet-page-layout.yaml @@ -6,15 +6,31 @@ 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) => { @@ -24,6 +40,7 @@ script: }); } + async function center() { await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); @@ -33,6 +50,7 @@ script: }); } + async function setBlackAndWhite() { await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); @@ -41,6 +59,7 @@ script: }); } + async function setPrintTitleRow() { await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); @@ -49,6 +68,7 @@ script: }); } + async function setPrintArea() { await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); @@ -57,6 +77,7 @@ script: }); } + async function changeOrientation() { await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); @@ -65,6 +86,7 @@ script: }); } + async function setZoom() { await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); @@ -73,6 +95,7 @@ script: }); } + async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Print").delete(); @@ -133,7 +156,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -144,16 +169,18 @@ script: } language: typescript template: - content: |- + 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 @@ -202,15 +229,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.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 diff --git a/samples/excel/54-worksheet/worksheet-range-cell.yaml b/samples/excel/54-worksheet/worksheet-range-cell.yaml index b9a2c8040..0a47ac18f 100644 --- a/samples/excel/54-worksheet/worksheet-range-cell.yaml +++ b/samples/excel/54-worksheet/worksheet-range-cell.yaml @@ -1,19 +1,30 @@ 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: ExcelApi: '1.4' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); + content: >- + document.getElementById("setup").addEventListener("click", () => + tryCatch(setup)); + + + 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)); - $("#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) => { @@ -27,6 +38,7 @@ script: }); } + async function getEntireRange() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -39,6 +51,7 @@ script: }); } + async function getRange() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -51,6 +64,7 @@ script: }); } + async function getCell() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -63,6 +77,7 @@ script: }); } + async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -89,7 +104,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -101,7 +118,7 @@ script: } language: typescript template: - content: | + content: >-

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

    @@ -130,7 +147,7 @@ template:
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -142,15 +159,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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-visibility.yaml b/samples/excel/54-worksheet/worksheet-visibility.yaml index 821aa6009..0befda4c6 100644 --- a/samples/excel/54-worksheet/worksheet-visibility.yaml +++ b/samples/excel/54-worksheet/worksheet-visibility.yaml @@ -7,9 +7,13 @@ 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) => { @@ -29,6 +33,7 @@ script: }); } + async function unhideWorksheet() { await Excel.run(async (context) => { @@ -47,7 +52,9 @@ script: }); } - async function filterWorksheetsByVisibility(context: Excel.RequestContext, visibility: string): Promise { + + async function filterWorksheetsByVisibility(context: + Excel.RequestContext, visibility: string): Promise { const sheets = context.workbook.worksheets; sheets.load("items/name, items/visibility"); await context.sync(); @@ -55,6 +62,7 @@ script: return sheets.items.filter((s) => (s.visibility === visibility)); } + async function setup() { await Excel.run(async (context) => { const sheets = context.workbook.worksheets; @@ -70,7 +78,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -82,18 +92,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 +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 diff --git a/samples/excel/90-scenarios/currency-converter.yaml b/samples/excel/90-scenarios/currency-converter.yaml index f5cf82a87..7b43d642a 100644 --- a/samples/excel/90-scenarios/currency-converter.yaml +++ b/samples/excel/90-scenarios/currency-converter.yaml @@ -1,26 +1,39 @@ 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. +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: | + content: >- /* - * Copyright (c) Riwut Libinuko. All rights reserved. Licensed under the MIT license. + + * Copyright (c) Riwut Libinuko. All rights reserved. Licensed under the + MIT license. + */ + declare let moment: any; + const tableName = "TransactionTable"; + 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() { await Excel.run(async (context) => { const table = context.workbook.tables.getItem(tableName); @@ -84,9 +97,13 @@ script: }); } + /** 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 @@ -103,7 +120,9 @@ script: 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"; @@ -112,7 +131,9 @@ script: return baseUrl + query; } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -121,9 +142,14 @@ script: console.error(error); } } + /* Create sample data */ + /* Default header */ - /* "Currency","Price (Currency)","Transaction Date","Base","Price in Base" */ + + /* "Currency","Price (Currency)","Transaction Date","Base","Price in + Base" */ + async function setupSample() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -141,8 +167,9 @@ script: } language: typescript template: - content: | -
    + content: >- +

    Simple Currency Converter

    @@ -183,12 +210,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 - moment-msdate@0.2.2 \ 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 + moment@2.18.1 + 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 7efba6254..f9ac64618 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,7 +94,7 @@ script: } language: typescript template: - content: | + content: >-

    This sample shows how to format a range.

    @@ -129,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 diff --git a/samples/excel/90-scenarios/performance-optimization.yaml b/samples/excel/90-scenarios/performance-optimization.yaml index e18915c09..543e85920 100644 --- a/samples/excel/90-scenarios/performance-optimization.yaml +++ b/samples/excel/90-scenarios/performance-optimization.yaml @@ -1,18 +1,19 @@ 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' script: - content: | - $("#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)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("refresh-data").addEventListener("click", () => tryCatch(refreshData)); + document.getElementById("toggle-tracking").addEventListener("click", () => tryCatch(toggleTracking)); + document.getElementById("toggle-screen-painting").addEventListener("click", () => tryCatch(toggleScreenPainting)); + document.getElementById("toggle-calculation").addEventListener("click", () => tryCatch(toggleCalculationMode)); + document.getElementById("recalculate").addEventListener("click", () => tryCatch(recalculate)); const ROW_COUNT = 500; const COLUMN_COUNT = 20; @@ -133,7 +134,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -160,6 +161,7 @@ template: Toggle calculation mode
    +

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -129,18 +130,13 @@ 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 + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-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 - moment-msdate@0.2.2 \ No newline at end of file + moment@2.18.1 + 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 6417065de..7a426ea40 100644 --- a/samples/excel/99-just-for-fun/color-wheel.yaml +++ b/samples/excel/99-just-for-fun/color-wheel.yaml @@ -1,21 +1,27 @@ 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. +description: Uses chart formatting to draw a wheel with changing colors. + Contributed by Alexander Zlatkovski. author: AlexanderZlatkovski 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 + const pauseLength = 50; + const numberOfSlices = 32; + async function wheelGo() { try { Excel.run(async (context) => { @@ -85,7 +91,9 @@ script: } } - async function loopThroughColors(points: Excel.ChartPointsCollection, max, colorGenerator: (i: number) => string) { + + async function loopThroughColors(points: Excel.ChartPointsCollection, + max, colorGenerator: (i: number) => string) { for (let i = 0; i < max; i++) { if (isStopped) { return; @@ -98,20 +106,23 @@ script: } } + function wheelStop() { isStopped = true; } + function pause(milliseconds) { return new Promise(resolve => setTimeout(resolve, milliseconds)) } + function rgb(r, g, b) { return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1) } language: typescript template: - content: |+ + content: |-

    Spin the rainbow wheel

    @@ -124,10 +135,9 @@ template: - language: html style: - content: | + content: |- h2:not(:first-child) { margin-top: 35px; } @@ -144,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 diff --git a/samples/excel/99-just-for-fun/gradient.yaml b/samples/excel/99-just-for-fun/gradient.yaml index 11a3b84fa..a7ab51e04 100644 --- a/samples/excel/99-just-for-fun/gradient.yaml +++ b/samples/excel/99-just-for-fun/gradient.yaml @@ -1,20 +1,27 @@ 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. +description: Uses range formatting and external libraries to draw a colorful + gradient within a range. Contributed by Alexander Zlatkovski. author: AlexanderZlatkovski host: EXCEL api_set: ExcelApi: '1.4' script: - content: |- + content: >- initializeColorPickers(); + // 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() { $drawButton.prop("disabled", true); @@ -27,7 +34,9 @@ script: $drawButton.prop("disabled", false); } + /** 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"); @@ -72,6 +81,7 @@ script: await context.sync(); } + function createColorArray(size: number): string[][] { // Create a 2D in-memory array to hold the colors let colors2D = Array(size); @@ -101,8 +111,11 @@ script: return colors2D; } + /** Helper function to get an array of colors */ - function getColorsArray(color1: ColorFormats.RGB, color2: ColorFormats.RGB, count: number) { + + function getColorsArray(color1: ColorFormats.RGB, color2: + ColorFormats.RGB, count: number) { const result = new Array(count); for (let i = 0; i < count; i++) { const fraction = i / (count - 1); @@ -115,6 +128,7 @@ script: return result; } + function initializeColorPickers() { $("#color-table input[type='text']").spectrum({ preferredFormat: "rgb", @@ -122,6 +136,7 @@ script: }); } + function randomizeColors() { $("#color-table input[type='text']").each((index, element) => { $(element).spectrum("set", tinycolor.random().toHexString()); @@ -129,7 +144,7 @@ script: } language: typescript template: - content: |- + content: >-

    Color configuration

    @@ -151,20 +166,16 @@ template: Bottom right - -

    Size (width x height)

    - -
    Uses the Spectrum color picker, and the TinyColor libraries. @@ -212,19 +223,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 + https://unpkg.com/spectrum-colorpicker@1.8.0/spectrum.js + https://unpkg.com/spectrum-colorpicker@1.8.0/spectrum.css @types/spectrum 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..0825625b2 100644 --- a/samples/excel/99-just-for-fun/path-finder-game.yaml +++ b/samples/excel/99-just-for-fun/path-finder-game.yaml @@ -1,24 +1,32 @@ order: 3 id: excel-just-for-fun-path-finder-game name: Path finder -description: Uses 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: 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); + const GRID_ROW_COUNT = 25; + const GRID_COLUMN_COUNT = 30; + let matrixPrevious: string[][] + function setup() { const density = parseInt($("#density").val() as string) / 100; const symbol = "\u25cf"; @@ -37,11 +45,13 @@ script: setupHelper(matrix); } + function repeat() { setupHelper(matrixPrevious); } + function setupHelper(matrix: string[][]) { tryCatch(() => Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Path Finder").delete(); @@ -70,6 +80,7 @@ script: })); } + async function pruneTheGrid() { $pruneTheGrid.attr("disabled", "true"); @@ -87,6 +98,7 @@ script: $pruneTheGrid.removeAttr("disabled"); } + async function allAtOnce() { $allAtOnce.attr("disabled", "true"); let counter = 0; @@ -115,7 +127,10 @@ script: } - /** Remove unneeded values from one iteration of playing, and return true if made changes */ + + /** Remove unneeded values from one iteration of playing, and return + true if made changes */ + function playOnce(values: string[][]) { const gridSizeRows = values.length; const gridSizeColumns = values[0].length; @@ -157,12 +172,15 @@ script: return madeChanges; } + function hasValue(value: string) { return (value.length > 0); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback: () => OfficeExtension.IPromise) { try { await callback(); @@ -174,12 +192,13 @@ 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 (%)
    @@ -190,15 +209,16 @@ template: Repeat
    +

    Find the path:

    +

    - @@ -221,15 +241,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 diff --git a/samples/excel/99-just-for-fun/patterns.yaml b/samples/excel/99-just-for-fun/patterns.yaml index e29e1f0a0..2e3448ed2 100644 --- a/samples/excel/99-just-for-fun/patterns.yaml +++ b/samples/excel/99-just-for-fun/patterns.yaml @@ -1,16 +1,23 @@ order: 1 id: excel-just-for-fun-patterns name: Colorful Patterns -description: Uses 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: ExcelApi: '1.4' script: - content: |- - $("#squares").on("click", () => tryCatch(drawSquares)); - $("#spiral").on("click", () => tryCatch(drawSpiral)); - $("#decoration").on("click", () => tryCatch(drawDecoration)); + content: >- + 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) => { @@ -37,6 +44,7 @@ script: } + async function drawSpiral() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Patterns").delete(); @@ -98,6 +106,7 @@ script: }); } + async function drawDecoration() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Patterns").delete(); @@ -126,14 +135,17 @@ script: }); } + function rgb(r, g, b) { return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1); } + function pause(milliseconds) { return new Promise(resolve => setTimeout(resolve, milliseconds)); } + function formatBackground(sheet: Excel.Worksheet) { const range = sheet.getRange(); range.format.columnWidth = 7; @@ -142,7 +154,9 @@ script: } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -156,30 +170,26 @@ script: template: content: |-

    Draw colorful patterns

    -
    Choose size:
    -


    -

    -
    language: html style: - content: | + content: |- h2:not(:first-child) { margin-top: 35px; } @@ -188,15 +198,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 diff --git a/samples/excel/99-just-for-fun/tetrominos.yaml b/samples/excel/99-just-for-fun/tetrominos.yaml index 7f025bfd2..ef17b8318 100644 --- a/samples/excel/99-just-for-fun/tetrominos.yaml +++ b/samples/excel/99-just-for-fun/tetrominos.yaml @@ -7,17 +7,22 @@ host: EXCEL api_set: ExcelApi: '1.9' script: - content: |- + content: >- $("#run").on("click", () => { $("#setup").hide(); tryCatch(run); }); + $("#selectedFile").on("change", () => tryCatch(readImageFromFile)); - $("#focusButton").on("click", () => tryCatch(focus)); + + document.getElementById("focusButton").addEventListener("click", () => + tryCatch(focus)); + let backgroundPicture = getDefaultBackgroundPicture(); + function readImageFromFile() { const myFile = document.getElementById("selectedFile"); const reader = new FileReader(); @@ -32,10 +37,12 @@ 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; @@ -628,7 +635,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -639,17 +648,17 @@ script: } } + function getDefaultBackgroundPicture() { return "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"; } language: typescript template: - content: |- + 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

    @@ -784,17 +793,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 diff --git a/samples/excel/default.yaml b/samples/excel/default.yaml index 27bfc38f6..58ed02628 100644 --- a/samples/excel/default.yaml +++ b/samples/excel/default.yaml @@ -6,8 +6,10 @@ 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) => { @@ -19,7 +21,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -31,7 +35,7 @@ script: } language: typescript template: - content: | + content: |- @@ -49,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 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 6c419de50..75ffec20c 100644 --- a/samples/onenote/default.yaml +++ b/samples/onenote/default.yaml @@ -6,8 +6,10 @@ 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) => { @@ -17,7 +19,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -29,7 +33,7 @@ script: } language: typescript template: - content: | + content: |- @@ -47,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 diff --git a/samples/outlook/10-roaming-settings/roaming-settings.yaml b/samples/outlook/10-roaming-settings/roaming-settings.yaml index 30d3b22fa..71d85f295 100644 --- a/samples/outlook/10-roaming-settings/roaming-settings.yaml +++ b/samples/outlook/10-roaming-settings/roaming-settings.yaml @@ -1,14 +1,17 @@ id: outlook-roaming-settings-roaming-settings name: Use add-in settings -description: 'Gets, sets, and saves add-in roaming settings' +description: Gets, sets, and saves add-in roaming settings 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,7 +39,7 @@ 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.

    @@ -75,15 +78,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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/15-item-custom-properties/load-set-get-save.yaml b/samples/outlook/15-item-custom-properties/load-set-get-save.yaml index c772c4025..7e84ad839 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,19 +1,28 @@ 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' 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) => { @@ -27,12 +36,14 @@ script: }); } + function get() { const propertyName = $("#get-property-name").val(); const propertyValue = customProps.get(propertyName); console.log(`The value of custom property "${propertyName}" is "${propertyValue}".`); } + function getAll() { let allCustomProps; if (Office.context.requirements.isSetSupported("Mailbox", "1.9")) { @@ -44,6 +55,7 @@ script: console.log(allCustomProps); } + function set() { const propertyName = $("#set-property-name").val(); const propertyValue = $("#property-value").val(); @@ -51,12 +63,14 @@ script: console.log(`Custom property "${propertyName}" set to value "${propertyValue}".`); } + function remove() { const propertyName = $("#remove-property-name").val(); customProps.remove(propertyName); console.log(`Custom property "${propertyName}" removed.`); } + function save() { customProps.saveAsync((result) => { if (result.status === Office.AsyncResultStatus.Failed) { @@ -69,7 +83,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -127,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 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 d21f32e66..9996b2bac 100644 --- a/samples/outlook/20-item-body/add-inline-base64-image.yaml +++ b/samples/outlook/20-item-body/add-inline-base64-image.yaml @@ -1,14 +1,19 @@ order: 3 id: outlook-item-body-add-inline-base64-image name: Add inline Base64-encoded image to message or appointment body (Compose) -description: Add an inline Base64-encoded image to the body of a message or appointment being composed. +description: Add an inline Base64-encoded image to the body of a message or + appointment being composed. host: OUTLOOK api_set: Mailbox: '1.8' script: - content: |- - $("#prepend-image").on("click", prependImage); - $("#append-image").on("click", appendImage); + content: >- + document.getElementById("prepend-image").addEventListener("click", + prependImage); + + document.getElementById("append-image").addEventListener("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=="; @@ -32,6 +37,7 @@ script: }); } + function appendImage() { // Get the current body of the message or appointment. Office.context.mailbox.item.body.getAsync(Office.CoercionType.Html, (bodyResult) => { @@ -64,7 +70,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    Required mode: Compose

    @@ -93,15 +99,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 e768d32a4..824101550 100644 --- a/samples/outlook/20-item-body/append-text-on-send.yaml +++ b/samples/outlook/20-item-body/append-text-on-send.yaml @@ -6,8 +6,10 @@ host: OUTLOOK api_set: Mailbox: '1.9' script: - content: | - $("#append-on-send").on("click", appendOnSend); + content: >- + document.getElementById("append-on-send").addEventListener("click", + appendOnSend); + function appendOnSend() { // This snippet appends text to the end of the message or appointment's body once it's sent. @@ -33,7 +35,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    Required mode: Compose

    @@ -65,15 +67,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 af52a05ae..d4549bf21 100644 --- a/samples/outlook/20-item-body/get-body-format.yaml +++ b/samples/outlook/20-item-body/get-body-format.yaml @@ -6,8 +6,10 @@ 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. @@ -22,7 +24,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    Required mode: Compose

    @@ -48,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 diff --git a/samples/outlook/20-item-body/get-selected-data.yaml b/samples/outlook/20-item-body/get-selected-data.yaml index 0aee0b8f7..b1d4c970b 100644 --- a/samples/outlook/20-item-body/get-selected-data.yaml +++ b/samples/outlook/20-item-body/get-selected-data.yaml @@ -6,8 +6,10 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: | - $("#get-selected-data").on("click", getSelectedData); + content: >- + document.getElementById("get-selected-data").addEventListener("click", + getSelectedData); + function getSelectedData() { Office.context.mailbox.item.getSelectedDataAsync(Office.CoercionType.Text, function(asyncResult) { @@ -22,7 +24,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    Required mode: Compose

    @@ -49,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 + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 f20f8639d..e2a6ae2b2 100644 --- a/samples/outlook/20-item-body/prepend-text-on-send.yaml +++ b/samples/outlook/20-item-body/prepend-text-on-send.yaml @@ -1,13 +1,16 @@ 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. +description: Prepends text to the beginning of the message or appointment's body + once it's sent. 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. @@ -33,7 +36,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    Required mode: Compose

    @@ -65,15 +68,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.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 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..dc0dfee00 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,10 @@ 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. @@ -36,7 +38,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    Required mode: Compose

    @@ -67,15 +69,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 06ea6cb38..b9eaace59 100644 --- a/samples/outlook/20-item-body/replace-selected-text.yaml +++ b/samples/outlook/20-item-body/replace-selected-text.yaml @@ -1,13 +1,16 @@ 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. +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").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. @@ -36,7 +39,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    Required mode: Compose

    @@ -71,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 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..107e59f05 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,10 @@ 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,7 +26,7 @@ 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

    @@ -50,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 diff --git a/samples/outlook/25-item-save-and-close/close.yaml b/samples/outlook/25-item-save-and-close/close.yaml index daec136ae..f1d570d82 100644 --- a/samples/outlook/25-item-save-and-close/close.yaml +++ b/samples/outlook/25-item-save-and-close/close.yaml @@ -6,19 +6,18 @@ 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.close(); } language: typescript template: - content: | + content: |-

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

    -

    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..424b847be 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 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..a08039911 100644 --- a/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml @@ -6,8 +6,10 @@ host: OUTLOOK api_set: Mailbox: '1.7' script: - content: |- - $("#get-attendees").on("click", getAttendees); + content: >- + 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. @@ -44,6 +46,7 @@ script: } } + function organizeByResponse(attendees) { const accepted = []; const declined = []; @@ -80,6 +83,7 @@ script: printAttendees(noResponse); } + function printAttendees(attendees) { if (attendees.length === 0) { console.log("None"); @@ -91,7 +95,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    Required mode: Appointment Organizer, Appointment Read

    @@ -117,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 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 c09157c3a..eb0b114c6 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 @@ -6,8 +6,9 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: | - $("#get-cc").on("click", getCc); + content: >- + document.getElementById("get-cc").addEventListener("click", getCc); + function getCc() { const msgCc = Office.context.mailbox.item.cc; @@ -18,7 +19,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    Required mode: Message Read

    @@ -44,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 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 f36fb67a2..ccafb1cbd 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 @@ -6,8 +6,9 @@ host: OUTLOOK api_set: Mailbox: '1.7' script: - content: | - $("#get-from").on("click", getFrom); + content: >- + document.getElementById("get-from").addEventListener("click", getFrom); + function getFrom() { Office.context.mailbox.item.from.getAsync(function(asyncResult) { @@ -21,7 +22,7 @@ script: } language: typescript template: - content: | + content: >-

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

    Required mode: Message Compose

    @@ -47,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 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 3cf67cb86..33968c17d 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 @@ -6,8 +6,9 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: | - $("#get-from").on("click", getFrom); + content: >- + document.getElementById("get-from").addEventListener("click", getFrom); + function getFrom() { const msgFrom = Office.context.mailbox.item.from; @@ -15,7 +16,7 @@ script: } language: typescript template: - content: |- + content: >-

    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.

    @@ -42,15 +43,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 fed07d770..325782874 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 @@ -6,8 +6,8 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: | - $("#get-optional-attendees").on("click", getOptionalAttendees); + content: |- + document.getElementById("get-optional-attendees").addEventListener("click", getOptionalAttendees); function getOptionalAttendees() { const apptOptionalAttendees = Office.context.mailbox.item.optionalAttendees; @@ -24,7 +24,7 @@ script: } language: typescript template: - content: |- + content: >-

    This sample shows how to get the optional attendees.

    Required mode: Appointment Attendee

    @@ -50,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 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 3bedc8929..60165ae16 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 @@ -6,8 +6,10 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: | - $("#get-organizer").on("click", getOrganizer); + content: >- + document.getElementById("get-organizer").addEventListener("click", + getOrganizer); + function getOrganizer() { const apptOrganizer = Office.context.mailbox.item.organizer; @@ -15,7 +17,7 @@ script: } language: typescript template: - content: |- + content: >-

    This sample shows how to get the appointment organizer.

    Required mode: Appointment Attendee

    @@ -41,15 +43,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.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 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 155db1b15..07879a6c3 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 @@ -6,8 +6,10 @@ host: OUTLOOK api_set: Mailbox: '1.7' script: - content: | - $("#get-organizer").on("click", getOrganizer); + content: >- + document.getElementById("get-organizer").addEventListener("click", + getOrganizer); + function getOrganizer() { Office.context.mailbox.item.organizer.getAsync(function(asyncResult) { @@ -21,7 +23,7 @@ script: } language: typescript template: - content: |- + content: >-

    This sample shows how to get the appointment organizer.

    Required mode: Appointment Organizer

    @@ -47,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 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 74b2f4227..93b7e71a7 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 @@ -6,8 +6,8 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: | - $("#get-required-attendees").on("click", getRequiredAttendees); + content: |- + document.getElementById("get-required-attendees").addEventListener("click", getRequiredAttendees); function getRequiredAttendees() { const apptRequiredAttendees = Office.context.mailbox.item.requiredAttendees; @@ -24,7 +24,7 @@ script: } language: typescript template: - content: |- + content: >-

    This sample shows how to get the required attendees.

    Required mode: Appointment Attendee

    @@ -50,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 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 4d92516ef..ace114134 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 @@ -6,8 +6,10 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: | - $("#get-sender").on("click", getSender); + content: >- + document.getElementById("get-sender").addEventListener("click", + getSender); + function getSender() { const msgSender = Office.context.mailbox.item.sender; @@ -15,7 +17,7 @@ script: } language: typescript template: - content: |- + 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

    @@ -41,15 +43,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 7f945e4ab..2f4a5a189 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 @@ -6,9 +6,11 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: | - $("#get-bcc").on("click", getBcc); - $("#set-bcc").on("click", setBcc); + content: >- + document.getElementById("get-bcc").addEventListener("click", getBcc); + + document.getElementById("set-bcc").addEventListener("click", setBcc); + function getBcc() { Office.context.mailbox.item.bcc.getAsync(function(asyncResult) { @@ -24,6 +26,7 @@ script: }); } + function setBcc() { const email = $("#emailBcc") .val() @@ -39,7 +42,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    Required mode: Message Compose

    @@ -72,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 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..9ca9b3e02 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,11 @@ 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) { @@ -24,6 +26,7 @@ script: }); } + function setCc() { const email = $("#emailCc") .val() @@ -39,7 +42,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    Required mode: Message Compose

    @@ -72,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 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..e7971f584 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) { @@ -45,7 +45,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    Required mode: Appointment Organizer

    @@ -78,15 +78,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 c6d80e8e3..fe4687471 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) { @@ -45,7 +45,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    Required mode: Appointment Organizer

    @@ -78,15 +78,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 beba09e5e..8415a3f49 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,11 @@ 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) { @@ -24,6 +26,7 @@ script: }); } + function setTo() { const email = $("#emailTo") .val() @@ -39,7 +42,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    Required mode: Message Compose

    @@ -72,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 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..7fb203501 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,9 @@ 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; @@ -53,7 +54,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    Required mode: Message Read

    @@ -79,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 diff --git a/samples/outlook/35-notifications/add-getall-remove.yaml b/samples/outlook/35-notifications/add-getall-remove.yaml index edb03421c..87267ba80 100644 --- a/samples/outlook/35-notifications/add-getall-remove.yaml +++ b/samples/outlook/35-notifications/add-getall-remove.yaml @@ -1,19 +1,20 @@ 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' script: - content: | - $("#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); + content: |- + document.getElementById("addProgress").addEventListener("click", addProgress); + document.getElementById("addInformational").addEventListener("click", addInformational); + document.getElementById("addInformationalPersisted").addEventListener("click", addInformationalPersisted); + document.getElementById("addInsight").addEventListener("click", addInsight); + document.getElementById("addError").addEventListener("click", addError); + document.getElementById("getAll").addEventListener("click", getAll); + document.getElementById("replace").addEventListener("click", replace); + document.getElementById("remove").addEventListener("click", remove); function addProgress() { // Adds a progress indicator to the mail item. @@ -124,7 +125,7 @@ script: } language: typescript template: - content: | + content: >-

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

    @@ -191,15 +192,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.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 diff --git a/samples/outlook/40-attachments/attachments-compose.yaml b/samples/outlook/40-attachments/attachments-compose.yaml index c557d2757..7613875f3 100644 --- a/samples/outlook/40-attachments/attachments-compose.yaml +++ b/samples/outlook/40-attachments/attachments-compose.yaml @@ -1,15 +1,21 @@ 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' script: - content: | - $("#add").on("click", add); - $("#addBase64").on("click", addBase64); - $("#get").on("click", get); - $("#remove").on("click", remove); + content: >- + document.getElementById("add").addEventListener("click", add); + + document.getElementById("addBase64").addEventListener("click", + addBase64); + + document.getElementById("get").addEventListener("click", get); + + document.getElementById("remove").addEventListener("click", remove); + function add() { const attachmentUrl = $("#attachmentUrl") @@ -25,6 +31,7 @@ script: ); } + function addBase64() { const base64String = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsSAAALEgHS3X78AAACRUlEQVRYw82XzXHbMBCFP2F8tzsQc8Ixyh0zoiuIXIGdCsxUYKqC0B04FdiuwMoM7mGOOIXqQGoAymXhgSX+itJM9kIRFLAP+3YXD5Pdbscx5oxaAIW8Ztr6l2PWmQwF4IyaieP53qdfAqQ8CwBn1JU4vpWhrbxXQA5MZfynANmcDIAzKgcy4FKGXsVJFf3nLgKyBQptfT4KQMRz2N0fcbxqmRMDWXflx0VPnrdArq0vekQ1Dv0UeHZGNebHhwjU8AzwKM43RyZnbAf58Q6ghudeWd0Aus0+5EcMIIRi3beua0D3Nm39BEAx3i7HTK4DEBJn5YxKOnaRA5+ErpMBWMpzDvx1RuXCcxOISlufAjfC7zgAsqsvUvMAD0ApPaEtGi9AIlUzKgJo60tt/SyKRkzLrAXERluf7W1gOICWaMyB386oooOWsIHvXbSoHuUSFovtHqicUVnH3EJoeT0aQEf5/XBGlc6otIOWBXAtPeZkAIJ9Bt6cUU9tZautX2nrk3MACHYr1ZKProKRtDw4o8pzAPjWo+NtpXTTvoteDDg8noDAcwbcRedAkGdFXyk2GEDcegVAFp2gyVDHjRQ4o6q2smoqtR5Hd+qMqtoALCWUUymr1m43QMZfOaMK4C0SrMsDANJ2E5FNcbdbjHC+ENl+H0myJFbLtaq4Rt8dyPBYRQV1E40nMv9rl7xrOw3DGb+Whcqu3i/OM6CUOWvgRlufNmnLYy4m77uJI7AXtdNcTDrU71LEyv7v01/N/ovL6bmu5/8A1tNWZldH0W4AAAAASUVORK5CYII="; @@ -38,6 +45,7 @@ script: ); } + function get() { Office.context.mailbox.item.getAttachmentsAsync((result) => { if (result.status === Office.AsyncResultStatus.Failed) { @@ -83,6 +91,7 @@ script: }); } + function remove() { Office.context.mailbox.item.removeAttachmentAsync( $("#attachmentId") @@ -99,6 +108,7 @@ script: ); } + function getFileName(url) { const lastIndex = url.lastIndexOf("/"); if (lastIndex >= 0) { @@ -108,7 +118,7 @@ script: } 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

    @@ -145,7 +155,7 @@ template:
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -157,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 diff --git a/samples/outlook/40-attachments/get-attachment-content.yaml b/samples/outlook/40-attachments/get-attachment-content.yaml index 5cd62d50f..5c44ec966 100644 --- a/samples/outlook/40-attachments/get-attachment-content.yaml +++ b/samples/outlook/40-attachments/get-attachment-content.yaml @@ -5,9 +5,9 @@ host: OUTLOOK api_set: Mailbox: '1.8' script: - content: | - $("#attachment-content-compose").on("click", getAttachmentContentCompose); - $("#attachment-content-read").on("click", getAttachmentContentRead); + content: |- + document.getElementById("attachment-content-compose").addEventListener("click", getAttachmentContentCompose); + document.getElementById("attachment-content-read").addEventListener("click", getAttachmentContentRead); const item = Office.context.mailbox.item; @@ -77,7 +77,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    Required mode: Compose or Read

    @@ -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 diff --git a/samples/outlook/40-attachments/get-attachments-read.yaml b/samples/outlook/40-attachments/get-attachments-read.yaml index 5c158a457..97278217c 100644 --- a/samples/outlook/40-attachments/get-attachments-read.yaml +++ b/samples/outlook/40-attachments/get-attachments-read.yaml @@ -5,8 +5,8 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: | - $("#run").on("click", run); + content: |- + document.getElementById("run").addEventListener("click", run); function run() { const item = Office.context.mailbox.item; @@ -26,7 +26,7 @@ script: } language: typescript template: - content: | + content: >-

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

    Required mode: Item Read

    @@ -40,7 +40,7 @@ template:
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -52,15 +52,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 diff --git a/samples/outlook/45-categories/work-with-categories.yaml b/samples/outlook/45-categories/work-with-categories.yaml index 1a27e0edc..80338d7ad 100644 --- a/samples/outlook/45-categories/work-with-categories.yaml +++ b/samples/outlook/45-categories/work-with-categories.yaml @@ -1,15 +1,21 @@ 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' 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) { @@ -27,6 +33,7 @@ script: }); } + function addCategories() { // Note: In order for you to successfully add a category, // it must be in the mailbox categories master list. @@ -53,6 +60,7 @@ script: }); } + function removeCategories() { Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -77,7 +85,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -108,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/outlook/45-categories/work-with-master-categories.yaml b/samples/outlook/45-categories/work-with-master-categories.yaml index affc0154f..c0eca12bf 100644 --- a/samples/outlook/45-categories/work-with-master-categories.yaml +++ b/samples/outlook/45-categories/work-with-master-categories.yaml @@ -1,15 +1,15 @@ 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' script: - content: | - $("#get-master-categories").on("click", getMasterCategories); - $("#add-master-categories").on("click", addMasterCategories); - $("#remove-master-categories").on("click", removeMasterCategories); + content: |- + document.getElementById("get-master-categories").addEventListener("click", getMasterCategories); + document.getElementById("add-master-categories").addEventListener("click", addMasterCategories); + document.getElementById("remove-master-categories").addEventListener("click", removeMasterCategories); function getMasterCategories() { Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { @@ -57,7 +57,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -88,15 +88,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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-recurrence-read.yaml b/samples/outlook/50-recurrence/get-recurrence-read.yaml index d2565b90f..1189a1ac6 100644 --- a/samples/outlook/50-recurrence/get-recurrence-read.yaml +++ b/samples/outlook/50-recurrence/get-recurrence-read.yaml @@ -6,8 +6,8 @@ host: OUTLOOK api_set: Mailbox: '1.7' script: - content: | - $("#get").on("click", get); + content: |- + document.getElementById("get").addEventListener("click", get); function get() { const recurrence = Office.context.mailbox.item.recurrence; @@ -22,7 +22,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    Required modes: Appointment Attendee, Message Read

    @@ -48,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 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 cf975f140..d89f9837f 100644 --- a/samples/outlook/50-recurrence/get-series-id.yaml +++ b/samples/outlook/50-recurrence/get-series-id.yaml @@ -6,8 +6,10 @@ host: OUTLOOK api_set: Mailbox: '1.7' script: - content: | - $("#get-series-id").on("click", getSeriesId); + content: >- + document.getElementById("get-series-id").addEventListener("click", + getSeriesId); + function getSeriesId() { const seriesId = Office.context.mailbox.item.seriesId; @@ -22,7 +24,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -47,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 + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 3a6061e37..bcf7c9a17 100644 --- a/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml +++ b/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml @@ -6,9 +6,11 @@ host: OUTLOOK api_set: Mailbox: '1.7' script: - content: | - $("#get").on("click", get); - $("#set").on("click", set); + content: >- + document.getElementById("get").addEventListener("click", get); + + document.getElementById("set").addEventListener("click", set); + function get() { Office.context.mailbox.item.recurrence.getAsync(function(asyncResult) { @@ -25,6 +27,7 @@ script: }); } + function set() { // Important: Can only set the recurrence pattern of an appointment series. @@ -61,7 +64,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    Required mode: Appointment Organizer

    @@ -92,15 +95,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 570791575..7c8ce6bb5 100644 --- a/samples/outlook/55-display-items/display-existing-appointment.yaml +++ b/samples/outlook/55-display-items/display-existing-appointment.yaml @@ -6,18 +6,24 @@ host: OUTLOOK api_set: Mailbox: '1.9' script: - content: | + content: >- // Pre-populate with current item ID. + $("#itemId").val(Office.context.mailbox.item.itemId); - $("#run").on("click", run); - $("#run-async").on("click", runAsync); + + document.getElementById("run").addEventListener("click", run); + + document.getElementById("run-async").addEventListener("click", + runAsync); + function run() { const itemId = $("#itemId").val(); Office.context.mailbox.displayAppointmentForm(itemId); } + function runAsync() { const itemId = $("#itemId").val(); @@ -29,7 +35,7 @@ script: } language: typescript template: - content: | + content: >-

    This sample shows how to display an existing appointment in a separate window.

    @@ -49,7 +55,7 @@ template:
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -61,15 +67,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 afebe6f63..f1aa1ecd6 100644 --- a/samples/outlook/55-display-items/display-existing-message.yaml +++ b/samples/outlook/55-display-items/display-existing-message.yaml @@ -6,18 +6,24 @@ host: OUTLOOK api_set: Mailbox: '1.9' script: - content: | + content: >- // Pre-populate with current item ID. + $("#itemId").val(Office.context.mailbox.item.itemId); - $("#run").on("click", run); - $("#run-async").on("click", runAsync); + + document.getElementById("run").addEventListener("click", run); + + document.getElementById("run-async").addEventListener("click", + runAsync); + function run() { const itemId = $("#itemId").val(); Office.context.mailbox.displayMessageForm(itemId); } + function runAsync() { const itemId = $("#itemId").val(); @@ -29,7 +35,7 @@ script: } language: typescript template: - content: | + content: >-

    This sample shows how to display an existing message in a separate window.

    @@ -46,10 +52,10 @@ template: -
    +
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -61,15 +67,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 60c7f18ef..b44c8e414 100644 --- a/samples/outlook/55-display-items/display-new-appointment.yaml +++ b/samples/outlook/55-display-items/display-new-appointment.yaml @@ -6,9 +6,12 @@ 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(); @@ -27,6 +30,7 @@ script: }); } + function runAsync() { const start = new Date(); const end = new Date(); @@ -52,7 +56,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -66,10 +70,11 @@ template: +
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -81,15 +86,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 2cb258e7c..9da905831 100644 --- a/samples/outlook/55-display-items/display-new-message.yaml +++ b/samples/outlook/55-display-items/display-new-message.yaml @@ -1,14 +1,18 @@ 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' 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({ @@ -27,6 +31,7 @@ script: }); } + function runAsync() { // The async version is only available starting with requirement set 1.9, // and provides a callback when the new message form has been created. @@ -52,7 +57,7 @@ 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.

    @@ -68,7 +73,7 @@ template:
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -80,15 +85,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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-forms.yaml b/samples/outlook/55-display-items/display-reply-forms.yaml index ace941dc9..c7e2be604 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() { @@ -38,7 +38,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -61,7 +61,7 @@ template:
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -73,15 +73,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 91b1ae33b..f8f563beb 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,18 @@ 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. @@ -49,6 +56,7 @@ script: }); } + function replyAll() { // Define attachments. const base64Attachment = { @@ -86,6 +94,7 @@ script: }); } + function replyAsync() { // Define attachments. const base64Attachment = { @@ -126,6 +135,7 @@ script: ); } + function replyAllAsync() { // Define attachments. const base64Attachment = { @@ -167,7 +177,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    Required mode: Compose

    @@ -202,15 +212,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 6d2b1206c..d49ab5729 100644 --- a/samples/outlook/60-sensitivity-label/sensitivity-label.yaml +++ b/samples/outlook/60-sensitivity-label/sensitivity-label.yaml @@ -1,14 +1,15 @@ 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. +description: Gets and sets the sensitivity label on a message or appointment in + compose mode. host: OUTLOOK api_set: Mailbox: '1.13' script: - content: | - $("#get-sensitivity-label").on("click", getCurrentSensitivityLabel); - $("#set-sensitivity-label").on("click", setSensitivityLabel); + content: |- + document.getElementById("get-sensitivity-label").addEventListener("click", getCurrentSensitivityLabel); + document.getElementById("set-sensitivity-label").addEventListener("click", setSensitivityLabel); function getCurrentSensitivityLabel() { // This snippet gets the current mail item's sensitivity label. @@ -58,7 +59,7 @@ script: } language: typescript template: - content: |- + content: >-

    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

    @@ -87,15 +88,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.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 diff --git a/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml b/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml index 8dee81ff0..811965a02 100644 --- a/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml +++ b/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml @@ -1,14 +1,15 @@ 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. +description: Determines if sensitivity labels are enabled on the mailbox and + retrieves all available labels from the catalog. host: OUTLOOK api_set: Mailbox: '1.13' script: - content: | - $("#get-sensitivity-labels-enabled").on("click", getSensitivityLabelsCatalogIsEnabled); - $("#get-sensitivity-labels-catalog").on("click", getSensitivityLabelsCatalog); + content: |- + document.getElementById("get-sensitivity-labels-enabled").addEventListener("click", getSensitivityLabelsCatalogIsEnabled); + document.getElementById("get-sensitivity-labels-catalog").addEventListener("click", getSensitivityLabelsCatalog); function getSensitivityLabelsCatalogIsEnabled() { // This snippet determines if the sensitivity labels catalog is enabled on the current mailbox. @@ -41,7 +42,7 @@ script: } language: typescript template: - content: |- + content: >-

    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

    @@ -70,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 + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 dccbb1d83..13e61a577 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,12 +1,13 @@ id: outlook-delegates-and-shared-folders-get-shared-properties 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. +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.13' script: - content: | - $("#get").on("click", get); + content: |- + document.getElementById("get").addEventListener("click", get); function get() { Office.context.mailbox.item.getSharedPropertiesAsync((result) => { @@ -22,7 +23,7 @@ script: } language: typescript template: - content: |- + content: >-

    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.

    @@ -41,7 +42,7 @@ template:
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -53,15 +54,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 af91e6505..a47888405 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,9 @@ 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) { @@ -30,17 +31,22 @@ script: }); } + /* Sample output: + Sender's preferred fruit: orange + Sender's preferred vegetable: broccoli + */ language: typescript template: - content: |- + 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: @@ -65,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 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 83eb6cadb..d7e575717 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 @@ -6,9 +6,11 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: | - $("#get").on("click", get); - $("#set").on("click", set); + content: >- + document.getElementById("get").addEventListener("click", get); + + document.getElementById("set").addEventListener("click", set); + function get() { Office.context.mailbox.item.start.getAsync((result) => { @@ -20,6 +22,7 @@ script: }); } + function set() { const start = new Date(); // Represents current date and time. start.setDate(start.getDate() + 2); // Add 2 days to current date. @@ -33,11 +36,12 @@ script: } language: typescript template: - content: |- + 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: @@ -106,12 +123,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 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 196522028..3a6e12528 100644 --- a/samples/outlook/90-other-item-apis/set-selected-data.yaml +++ b/samples/outlook/90-other-item-apis/set-selected-data.yaml @@ -6,8 +6,10 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: | - $("#set-selected-data").on("click", setSelectedData); + content: >- + document.getElementById("set-selected-data").addEventListener("click", + setSelectedData); + function setSelectedData() { Office.context.mailbox.item.setSelectedDataAsync("Replaced", function(asyncResult) { @@ -20,7 +22,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    Required mode: Compose

    @@ -47,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 + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 7cbaccb5a..a37df7a97 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,17 +1,18 @@ 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' 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. @@ -90,7 +91,7 @@ script: } language: typescript template: - content: |- + 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. @@ -136,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 diff --git a/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml b/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml index 7dbed18a8..cd2cbebdf 100644 --- a/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml +++ b/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml @@ -6,9 +6,9 @@ host: OUTLOOK api_set: Mailbox: preview script: - content: | - $("#getIsAllDayEvent").on("click", getIsAllDayEvent); - $("#setIsAllDayEventTrue").on("click", setIsAllDayEventTrue); + content: |- + document.getElementById("getIsAllDayEvent").addEventListener("click", getIsAllDayEvent); + document.getElementById("setIsAllDayEventTrue").addEventListener("click", setIsAllDayEventTrue); function getIsAllDayEvent() { Office.context.mailbox.item.isAllDayEvent.getAsync(function(asyncResult) { @@ -31,7 +31,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -47,6 +47,7 @@ template: +

    language: html style: @@ -62,15 +63,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 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 faa5debbf..d96dc3e53 100644 --- a/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml +++ b/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml @@ -1,14 +1,19 @@ 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. +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").on("click", setDisplayedBody); - $("#set-subject").on("click", setDisplayedSubject); + content: >- + document.getElementById("set-body").addEventListener("click", + setDisplayedBody); + + document.getElementById("set-subject").addEventListener("click", + setDisplayedSubject); + function setDisplayedBody() { // This snippet temporarily sets the content displayed in the body of a message in read mode. @@ -26,6 +31,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. @@ -43,7 +49,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -83,15 +89,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 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..ffdcc42c5 100644 --- a/samples/powerpoint/basics/basic-api-call-js.yaml +++ b/samples/powerpoint/basics/basic-api-call-js.yaml @@ -6,8 +6,10 @@ 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, @@ -27,7 +29,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -38,10 +42,11 @@ script: } language: typescript template: - content: |- + content: >-
    This sample executes a code snippet that adds a text box to the first slide in the presentation.
    + @@ -59,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 diff --git a/samples/powerpoint/basics/basic-api-call-ts.yaml b/samples/powerpoint/basics/basic-api-call-ts.yaml index 0b3db65ff..5ee3164a4 100644 --- a/samples/powerpoint/basics/basic-api-call-ts.yaml +++ b/samples/powerpoint/basics/basic-api-call-ts.yaml @@ -6,8 +6,10 @@ 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, @@ -27,8 +29,11 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ - const tryCatch: (callback: Function) => void = async (callback: Function) => { + + const tryCatch: (callback: Function) => void = async (callback: + Function) => { try { await callback(); } catch (error) { @@ -38,10 +43,11 @@ script: } language: typescript template: - content: |- + content: >-
    This sample executes a code snippet that adds a text box to the first slide in the presentation.
    + @@ -59,15 +65,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 869630269..3d816624c 100644 --- a/samples/powerpoint/basics/basic-common-api-call.yaml +++ b/samples/powerpoint/basics/basic-common-api-call.yaml @@ -1,14 +1,16 @@ 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). +description: Executes a basic PowerPoint API call using the "common API" syntax + (compatible with Office 2013). author: OfficeDev 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 +23,7 @@ script: } language: typescript template: - content: | + content: |- @@ -39,15 +41,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 7b3f697fc..47793b832 100644 --- a/samples/powerpoint/default.yaml +++ b/samples/powerpoint/default.yaml @@ -5,8 +5,9 @@ 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 +20,7 @@ script: } language: typescript template: - content: | + content: |- @@ -37,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/powerpoint/document/create-presentation.yaml b/samples/powerpoint/document/create-presentation.yaml index d2aba3d06..b22a12dda 100644 --- a/samples/powerpoint/document/create-presentation.yaml +++ b/samples/powerpoint/document/create-presentation.yaml @@ -1,13 +1,14 @@ 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: 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() { @@ -41,7 +42,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -72,15 +73,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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/hyperlinks/manage-hyperlinks.yaml b/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml index 37790cb38..8ee160216 100644 --- a/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml +++ b/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml @@ -5,8 +5,10 @@ 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. @@ -23,7 +25,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -34,7 +38,7 @@ script: } language: typescript template: - content: |- + content: >-

    Demonstrates how to get the hyperlinks located in a slide.

    @@ -58,17 +62,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 diff --git a/samples/powerpoint/images/insert-image.yaml b/samples/powerpoint/images/insert-image.yaml index 9c4a0af2e..49ea56735 100644 --- a/samples/powerpoint/images/insert-image.yaml +++ b/samples/powerpoint/images/insert-image.yaml @@ -6,9 +6,10 @@ author: OfficeDev host: POWERPOINT api_set: {} script: - content: | + content: >- $('#insert').on("click", run); + function run() { Office.context.document.setSelectedDataAsync(getImageAsBase64String(), { coercionType: Office.CoercionType.Image, @@ -23,6 +24,7 @@ script: }); } + function getImageAsBase64String() { // A production add-in code could get an image from an // online source and pass it to a library function that @@ -35,7 +37,6 @@ template:

    Insert an image into the current slide.

    - @@ -53,15 +54,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 fb17d3eb0..73c7351ed 100644 --- a/samples/powerpoint/images/insert-svg.yaml +++ b/samples/powerpoint/images/insert-svg.yaml @@ -6,9 +6,10 @@ author: OfficeDev host: POWERPOINT api_set: {} script: - content: | + content: >- $('#insert').on("click", newImage); + function newImage() { Office.context.document.setSelectedDataAsync(getImageAsBase64String(), { coercionType: Office.CoercionType.XmlSvg, @@ -23,6 +24,7 @@ script: }); } + function getImageAsBase64String() { // A production add-in code could get an image from an // online source and pass it to a library function that @@ -32,7 +34,7 @@ script: } language: typescript template: - content: |- + content: >-

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

    @@ -57,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 diff --git a/samples/powerpoint/scenarios/searches-wikipedia-api.yaml b/samples/powerpoint/scenarios/searches-wikipedia-api.yaml index 01b78f9df..a8803d4df 100644 --- a/samples/powerpoint/scenarios/searches-wikipedia-api.yaml +++ b/samples/powerpoint/scenarios/searches-wikipedia-api.yaml @@ -6,19 +6,24 @@ author: cakriwut host: POWERPOINT api_set: {} script: - content: | + content: >- /* * Copyright (c) Riwut Libinuko. All rights reserved. Licensed under the MIT license. */ + declare let moment: any; - $("#search").on("click", run); + + document.getElementById("search").addEventListener("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('
      '); @@ -29,8 +34,10 @@ script: } } + /* Searching Wiki */ + function searchWiki(pattern) { let url = build_wiki_search_url(pattern); @@ -55,9 +62,12 @@ script: }); } + // 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) @@ -84,9 +94,12 @@ script: }); } + // 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) @@ -122,38 +135,50 @@ script: }); } + /* 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(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 ( '
    • + 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.

      @@ -206,7 +231,7 @@ template:

      Result

      -
      +
    • language: html style: content: |- @@ -221,17 +246,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 + https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js diff --git a/samples/powerpoint/shapes/get-set-shapes.yaml b/samples/powerpoint/shapes/get-set-shapes.yaml index c7c18a673..cea4551c3 100644 --- a/samples/powerpoint/shapes/get-set-shapes.yaml +++ b/samples/powerpoint/shapes/get-set-shapes.yaml @@ -1,19 +1,33 @@ 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: 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. @@ -36,6 +50,7 @@ script: }); } + async function setSelectedShapes() { // Selects the first two shapes on slide 1. await PowerPoint.run(async (context) => { @@ -55,6 +70,7 @@ script: }); } + async function changeFill() { // Changes the selected shapes fill color to red. await PowerPoint.run(async (context) => { @@ -69,8 +85,11 @@ script: }); } + let savedSlideSelection = []; + let savedShapeSelection = []; + async function saveShapeSelection() { // Saves which shapes are selected so that they can be reselected later. await PowerPoint.run(async (context) => { @@ -94,6 +113,7 @@ script: }); } + async function loadShapeSelection() { // Reselects shapes that were saved previously. await PowerPoint.run(async (context) => { @@ -104,18 +124,23 @@ script: }); } + 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) => { @@ -139,8 +164,11 @@ script: }); } + 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) => { @@ -165,7 +193,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -176,25 +206,40 @@ 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

      - -
      -
      -
      -
      -
      -
      + + +
      + +
      + +
      + +
      + +
      + +
      language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -213,15 +258,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 diff --git a/samples/powerpoint/shapes/get-shapes-by-type.yaml b/samples/powerpoint/shapes/get-shapes-by-type.yaml index 112edce73..0884c6e36 100644 --- a/samples/powerpoint/shapes/get-shapes-by-type.yaml +++ b/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -1,15 +1,15 @@ 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' 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. @@ -95,7 +95,7 @@ script: } language: typescript template: - content: |- + content: >-

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

      @@ -104,7 +104,6 @@ template:

      Setup

      Create some shapes in a new, blank presentation.

      - @@ -134,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 diff --git a/samples/powerpoint/shapes/shapes.yaml b/samples/powerpoint/shapes/shapes.yaml index 7310e0336..d1ece7f9d 100644 --- a/samples/powerpoint/shapes/shapes.yaml +++ b/samples/powerpoint/shapes/shapes.yaml @@ -1,18 +1,18 @@ 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' 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, @@ -151,7 +151,7 @@ script: } language: typescript template: - content: |- + content: >-

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

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

      -

      Create, shrink, and move a shape.

      -

      -

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

      Create other shapes.

      -

      -

      - -

      language: html style: @@ -216,15 +208,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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/add-slides.yaml b/samples/powerpoint/slide-management/add-slides.yaml index e69f9354f..965f82142 100644 --- a/samples/powerpoint/slide-management/add-slides.yaml +++ b/samples/powerpoint/slide-management/add-slides.yaml @@ -6,9 +6,13 @@ 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; @@ -25,6 +29,7 @@ script: }); } + async function logSlideMasters() { await PowerPoint.run(async function(context) { // Load information about all the slide masters and associated layouts. @@ -45,7 +50,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -56,7 +63,7 @@ script: } language: typescript template: - content: |- + content: >-

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

      @@ -67,24 +74,20 @@ template: target="_blank" href="https://support.microsoft.com/office/dc684a1d-9d14-4ead-9bb5-2303d4fedba8">Use multiple slide masters in one presentation. The page will open in your browser.

      -

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

      -

      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 +104,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.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 diff --git a/samples/powerpoint/slide-management/get-set-slides.yaml b/samples/powerpoint/slide-management/get-set-slides.yaml index 4d359b9d8..d94b12b11 100644 --- a/samples/powerpoint/slide-management/get-set-slides.yaml +++ b/samples/powerpoint/slide-management/get-set-slides.yaml @@ -1,17 +1,27 @@ 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: 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)); + content: >- + 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. @@ -46,6 +56,7 @@ script: $("#outputSpan").append(finalTable); }); } + async function deleteSlides() { // Deletes the selected slides. await PowerPoint.run(async (context) => { @@ -61,6 +72,7 @@ script: }); } + async function setSelectedSlides() { // Selects slides 2, 4, and 5. await PowerPoint.run(async (context) => { @@ -84,7 +96,9 @@ script: }); } + let savedSlideSelection = []; + async function saveSlideSelection() { // Saves which slides are currently selected so they can be reselected later. await PowerPoint.run(async (context) => { @@ -110,6 +124,7 @@ script: }); } + async function loadSlideSelection() { // Sets selection to the slides that were saved. await PowerPoint.run(async (context) => { @@ -118,7 +133,9 @@ script: }); } + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { try { await callback(); @@ -129,7 +146,7 @@ script: } language: typescript template: - content: | + content: >-

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

      @@ -145,7 +162,7 @@ template:
      language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -164,15 +181,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 diff --git a/samples/powerpoint/slide-management/get-slide-metadata.yaml b/samples/powerpoint/slide-management/get-slide-metadata.yaml index f84c6043b..2fdd0253b 100644 --- a/samples/powerpoint/slide-management/get-slide-metadata.yaml +++ b/samples/powerpoint/slide-management/get-slide-metadata.yaml @@ -1,13 +1,15 @@ 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: {} script: - content: |- - $("#get-slide-metadata").on("click", getSlideMetadata); + content: >- + document.getElementById("get-slide-metadata").addEventListener("click", + getSlideMetadata); + function getSlideMetadata() { Office.context.document.getSelectedDataAsync(Office.CoercionType.SlideRange, @@ -22,7 +24,7 @@ script: } language: typescript template: - content: |- + 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).

      @@ -43,17 +45,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 diff --git a/samples/powerpoint/slide-management/insert-slides.yaml b/samples/powerpoint/slide-management/insert-slides.yaml index 67e2b85ed..5f35bac61 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; @@ -67,7 +67,7 @@ script: } language: typescript template: - content: |- + content: >-

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

      @@ -109,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 diff --git a/samples/powerpoint/tags/tags.yaml b/samples/powerpoint/tags/tags.yaml index 4153e3973..adc799612 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) { @@ -150,42 +150,33 @@ script: } language: typescript template: - content: |- + 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.

      @@ -163,7 +164,7 @@ template:
      language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -182,15 +183,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 diff --git a/samples/project/basics/basic-common-api-call.yaml b/samples/project/basics/basic-common-api-call.yaml index e069060b8..73e45d256 100644 --- a/samples/project/basics/basic-common-api-call.yaml +++ b/samples/project/basics/basic-common-api-call.yaml @@ -1,14 +1,16 @@ order: 1000 id: project-basics-basic-common-api-call name: Basic API call (Office 2013) -description: Executes a basic Project API call using the "common API" syntax (compatible with Office 2013). +description: Executes a basic Project API call using the "common API" syntax + (compatible with Office 2013). author: OfficeDev 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 +23,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 - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/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 7f5b087a5..132b50fa5 100644 --- a/samples/project/default.yaml +++ b/samples/project/default.yaml @@ -5,8 +5,9 @@ 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 +20,7 @@ script: } language: typescript template: - content: | + content: |- @@ -37,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/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..5489c4969 100644 --- a/samples/word/01-basics/basic-api-call-es5.yaml +++ b/samples/word/01-basics/basic-api-call-es5.yaml @@ -7,8 +7,10 @@ host: WORD api_set: WordApi: '1.1' script: - content: |- - $("#run").on("click", () => tryCatch(run)); + content: >- + document.getElementById("run").addEventListener("click", () => + tryCatch(run)); + function run() { return Word.run(function (context) { @@ -23,7 +25,9 @@ script: }); } + // Default helper for invoking an action and handling errors. + function tryCatch(callback) { Promise.resolve() .then(callback) @@ -34,10 +38,11 @@ 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".
      + @@ -55,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 diff --git a/samples/word/01-basics/basic-api-call.yaml b/samples/word/01-basics/basic-api-call.yaml index 4128b7967..40f6803f4 100644 --- a/samples/word/01-basics/basic-api-call.yaml +++ b/samples/word/01-basics/basic-api-call.yaml @@ -7,8 +7,10 @@ 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() { // Gets the current selection and changes the font color to red. @@ -23,7 +25,9 @@ script: }); } + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { try { await callback(); @@ -35,10 +39,11 @@ 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".
      + @@ -56,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 diff --git a/samples/word/01-basics/basic-common-api-call.yaml b/samples/word/01-basics/basic-common-api-call.yaml index c71ebb2e5..9c81c084a 100644 --- a/samples/word/01-basics/basic-common-api-call.yaml +++ b/samples/word/01-basics/basic-common-api-call.yaml @@ -1,14 +1,16 @@ order: 3 id: word-basics-basic-common-api-call name: Basic API call (Office 2013) -description: Performs a basic Word API call using JavaScript with 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: 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,10 +23,11 @@ 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 +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 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..61130df44 100644 --- a/samples/word/10-content-controls/content-control-onadded-event.yaml +++ b/samples/word/10-content-controls/content-control-onadded-event.yaml @@ -1,16 +1,17 @@ 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' 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; @@ -89,7 +90,7 @@ script: } language: typescript template: - content: |- + content: >-
      This sample demonstrates how to use the onAdded event with content controls.
      @@ -132,13 +133,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 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..ba044f4ff 100644 --- a/samples/word/10-content-controls/content-control-ondatachanged-event.yaml +++ b/samples/word/10-content-controls/content-control-ondatachanged-event.yaml @@ -1,16 +1,17 @@ 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' 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 = []; @@ -106,7 +107,7 @@ script: } language: typescript template: - content: |- + content: >-
      This sample demonstrates how to use the onDataChanged event on content controls.
      @@ -150,13 +151,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 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..a989ad34a 100644 --- a/samples/word/10-content-controls/content-control-ondeleted-event.yaml +++ b/samples/word/10-content-controls/content-control-ondeleted-event.yaml @@ -1,17 +1,18 @@ 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' 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 = []; @@ -123,7 +124,7 @@ script: } language: typescript template: - content: |- + content: >-
      This sample demonstrates how to use the onDeleted event on content controls.
      @@ -170,13 +171,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 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..00b59bf49 100644 --- a/samples/word/10-content-controls/content-control-onentered-event.yaml +++ b/samples/word/10-content-controls/content-control-onentered-event.yaml @@ -1,16 +1,17 @@ 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' 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 = []; @@ -106,7 +107,7 @@ script: } language: typescript template: - content: |- + content: >-
      This sample demonstrates how to use the onEntered event on content controls.
      @@ -150,13 +151,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 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..68c2457c2 100644 --- a/samples/word/10-content-controls/content-control-onexited-event.yaml +++ b/samples/word/10-content-controls/content-control-onexited-event.yaml @@ -1,16 +1,17 @@ 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' 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 = []; @@ -106,7 +107,7 @@ script: } language: typescript template: - content: |- + content: >-
      This sample demonstrates how to use the onExited event on content controls.
      @@ -151,13 +152,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 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..fbaa0801b 100644 --- a/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml +++ b/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml @@ -1,16 +1,17 @@ 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' 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 = []; @@ -105,7 +106,7 @@ script: } language: typescript template: - content: |- + content: >-
      This sample demonstrates how to use the onSelectionChanged event on content controls.
      @@ -149,13 +150,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 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..d3bb4f366 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. @@ -117,7 +117,7 @@ script: } language: typescript template: - content: |- + content: >-
      This sample demonstrates how to insert and delete control controls then get their change tracking state.
      @@ -163,13 +163,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 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 b0c0589e3..20cb249db 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,17 +1,27 @@ 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' 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)); + content: >- + document.getElementById("insert-controls").addEventListener("click", () + => tryCatch(insertCheckboxContentControls)); + + document.getElementById("toggle-control").addEventListener("click", () + => tryCatch(toggleCheckboxContentControl)); + + document.getElementById("change-controls").addEventListener("click", () + => tryCatch(toggleCheckboxContentControls)); + + document.getElementById("delete-control").addEventListener("click", () + => tryCatch(deleteCheckboxContentControl)); + + document.getElementById("setup").addEventListener("click", () => + tryCatch(setup)); + async function insertCheckboxContentControls() { // Traverses each paragraph of the document and places a checkbox content control at the beginning of each. @@ -32,6 +42,7 @@ script: }); } + async function toggleCheckboxContentControl() { // Toggles the isChecked property of the first checkbox content control found in the selection. await Word.run(async (context) => { @@ -71,6 +82,7 @@ script: }); } + async function toggleCheckboxContentControls() { // Toggles the isChecked property on all checkbox content controls. await Word.run(async (context) => { @@ -121,6 +133,7 @@ script: }); } + async function deleteCheckboxContentControl() { // Deletes the first checkbox content control found in the selection. await Word.run(async (context) => { @@ -155,6 +168,7 @@ script: }); } + async function setup() { await Word.run(async (context) => { const body: Word.Body = context.document.body; @@ -166,7 +180,9 @@ script: }); } + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { try { await callback(); @@ -181,7 +197,7 @@ script: } language: typescript template: - content: |- + content: >-
      This sample demonstrates how to insert, change, and delete checkbox content controls.
      @@ -236,13 +252,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 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..6c5b43f7f 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,19 +1,33 @@ 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' 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. @@ -26,6 +40,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) => { @@ -62,6 +77,7 @@ script: }); } + async function getListFromComboBoxContentControl() { // Gets the list items from the first combo box content control found in the selection. await Word.run(async (context) => { @@ -96,6 +112,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) => { @@ -143,6 +160,7 @@ script: }); } + async function deleteListFromComboBoxContentControl() { // Deletes the list items from first combo box content control found in the selection. await Word.run(async (context) => { @@ -176,6 +194,7 @@ script: }); } + async function deleteComboBoxContentControl() { // Deletes the first combo box content control found in the selection. await Word.run(async (context) => { @@ -209,6 +228,7 @@ script: }); } + async function setup() { await Word.run(async (context) => { const body: Word.Body = context.document.body; @@ -228,7 +248,9 @@ script: }); } + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { try { await callback(); @@ -243,7 +265,7 @@ script: } language: typescript template: - content: |- + content: >-
      This sample demonstrates how to insert, change, and delete combo box content controls.
      @@ -318,13 +340,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 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..c851bffbe 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,16 +1,22 @@ 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: 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. @@ -35,6 +41,7 @@ script: }); } + async function modifyContentControls() { // Adds title and colors to odd and even content controls and changes their appearance. await Word.run(async (context) => { @@ -70,6 +77,7 @@ script: }); } + async function setup() { await Word.run(async (context) => { const body: Word.Body = context.document.body; @@ -89,7 +97,9 @@ script: }); } + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { try { await callback(); @@ -100,7 +110,7 @@ script: } language: typescript template: - content: |- + content: >-
      This sample demonstrates how to insert and change content control properties.
      @@ -139,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 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..7c2206a84 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,19 +1,33 @@ 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' 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. @@ -26,6 +40,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) => { @@ -62,6 +77,7 @@ script: }); } + async function getListFromDropdownListContentControl() { // Gets the list items from the first dropdown list content control found in the selection. await Word.run(async (context) => { @@ -96,6 +112,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) => { @@ -143,6 +160,7 @@ script: }); } + async function deleteListFromDropdownListContentControl() { // Deletes the list items from first dropdown list content control found in the selection. await Word.run(async (context) => { @@ -178,6 +196,7 @@ script: }); } + async function deleteDropdownListContentControl() { // Deletes the first dropdown list content control found in the selection. await Word.run(async (context) => { @@ -211,6 +230,7 @@ script: }); } + async function setup() { await Word.run(async (context) => { const body: Word.Body = context.document.body; @@ -230,7 +250,9 @@ script: }); } + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { try { await callback(); @@ -245,7 +267,7 @@ script: } language: typescript template: - content: |- + content: >-
      This sample demonstrates how to insert, change, and delete dropdown list content controls.
      @@ -320,13 +342,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 diff --git a/samples/word/15-images/insert-and-get-pictures.yaml b/samples/word/15-images/insert-and-get-pictures.yaml index 1c3c3e08a..8962b2220 100644 --- a/samples/word/15-images/insert-and-get-pictures.yaml +++ b/samples/word/15-images/insert-and-get-pictures.yaml @@ -6,10 +6,16 @@ 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. @@ -23,6 +29,7 @@ script: }); } + async function getImage() { // Gets the first image in the document. await Word.run(async (context) => { @@ -39,6 +46,7 @@ script: }); } + async function setup() { // Sets up by adding a dummy paragraph. await Word.run(async (context) => { @@ -57,7 +65,9 @@ script: }); } + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { try { await callback(); @@ -67,11 +77,12 @@ script: } } + const base64Image = "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"; language: typescript template: - content: |- + content: >-
      This sample demonstrates how to insert and get inline pictures in a document.
      @@ -106,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 diff --git a/samples/word/20-lists/insert-list.yaml b/samples/word/20-lists/insert-list.yaml index 22237ea74..8222ff723 100644 --- a/samples/word/20-lists/insert-list.yaml +++ b/samples/word/20-lists/insert-list.yaml @@ -7,9 +7,13 @@ host: WORD api_set: WordApi: '1.3' script: - content: | - $("#insert-list").on("click", () => tryCatch(insertList)); - $("#setup").on("click", () => tryCatch(setup)); + content: >- + document.getElementById("insert-list").addEventListener("click", () => + tryCatch(insertList)); + + document.getElementById("setup").addEventListener("click", () => + tryCatch(setup)); + async function insertList() { // This example starts a new list with the second paragraph. @@ -39,6 +43,7 @@ script: }); } + async function setup() { await Word.run(async (context) => { const body: Word.Body = context.document.body; @@ -64,7 +69,9 @@ script: }); } + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { try { await callback(); @@ -79,14 +86,12 @@ template:
      This sample demonstrates how to insert and change lists.
      -

      Set up

      -

      Try it out

      -
      language: html style: @@ -107,10 +113,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 diff --git a/samples/word/20-lists/organize-list.yaml b/samples/word/20-lists/organize-list.yaml index 28eaa77ab..bbb47b6b3 100644 --- a/samples/word/20-lists/organize-list.yaml +++ b/samples/word/20-lists/organize-list.yaml @@ -7,10 +7,16 @@ 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. @@ -45,6 +51,7 @@ script: }); } + async function getListProps() { // Gets information about the first list in the document. await Word.run(async (context) => { @@ -78,6 +85,7 @@ script: }); } + async function setup() { await Word.run(async (context) => { const body: Word.Body = context.document.body; @@ -89,7 +97,9 @@ script: }); } + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { try { await callback(); @@ -104,14 +114,12 @@ template:
      This sample demonstrates how to create and organize a list.
      -

      Set up

      -

      Try it out

      @@ -117,13 +128,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 diff --git a/samples/word/25-paragraph/get-text.yaml b/samples/word/25-paragraph/get-text.yaml index ebd2d19e3..5fb492b8e 100644 --- a/samples/word/25-paragraph/get-text.yaml +++ b/samples/word/25-paragraph/get-text.yaml @@ -1,15 +1,20 @@ 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: 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) => { @@ -25,6 +30,7 @@ script: }); } + async function setup() { await Word.run(async (context) => { const body: Word.Body = context.document.body; @@ -40,7 +46,9 @@ script: }); } + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { try { await callback(); @@ -51,7 +59,7 @@ script: } language: typescript template: - content: |- + content: >-

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

        @@ -95,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 diff --git a/samples/word/25-paragraph/get-word-count.yaml b/samples/word/25-paragraph/get-word-count.yaml index 91478aa3f..622ee1aef 100644 --- a/samples/word/25-paragraph/get-word-count.yaml +++ b/samples/word/25-paragraph/get-word-count.yaml @@ -7,9 +7,13 @@ host: WORD api_set: WordApi: '1.1' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#count").on("click", () => tryCatch(run)); + content: >- + document.getElementById("setup").addEventListener("click", () => + tryCatch(setup)); + + document.getElementById("count").addEventListener("click", () => + tryCatch(run)); + async function run() { // Counts how many times each term appears in the document. @@ -61,6 +65,7 @@ script: }); } + async function setup() { await Word.run(async (context) => { const body: Word.Body = context.document.body; @@ -76,7 +81,9 @@ script: }); } + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { try { await callback(); @@ -87,7 +94,7 @@ script: } language: typescript template: - content: |- + content: >-
        This sample demonstrates how to get the count for words and terms in the document body.
        @@ -122,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 diff --git a/samples/word/25-paragraph/insert-formatted-text.yaml b/samples/word/25-paragraph/insert-formatted-text.yaml index fc7c89344..da3f948d9 100644 --- a/samples/word/25-paragraph/insert-formatted-text.yaml +++ b/samples/word/25-paragraph/insert-formatted-text.yaml @@ -7,10 +7,16 @@ host: WORD 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)); + content: >- + 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) => { @@ -31,6 +37,7 @@ script: }); } + async function addFormattedParagraph() { await Word.run(async (context) => { // Second sentence, let's insert it as a paragraph after the previously inserted one. @@ -50,6 +57,7 @@ script: }); } + async function addPreStyledFormattedText() { await Word.run(async (context) => { const sentence: Word.Paragraph = context.document.body.insertParagraph( @@ -64,7 +72,9 @@ script: }); } + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { try { await callback(); @@ -75,7 +85,7 @@ script: } language: typescript template: - content: |- + content: >-
        This sample shows how to insert basic formatted text and apply built-in styles.
        @@ -108,13 +118,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 diff --git a/samples/word/25-paragraph/insert-header-and-footer.yaml b/samples/word/25-paragraph/insert-header-and-footer.yaml index 320453f83..4c12e14df 100644 --- a/samples/word/25-paragraph/insert-header-and-footer.yaml +++ b/samples/word/25-paragraph/insert-header-and-footer.yaml @@ -7,14 +7,14 @@ host: WORD api_set: WordApi: '1.1' script: - content: | - $("#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)); + content: |- + document.getElementById("add-header").addEventListener("click", () => tryCatch(addHeader)); + document.getElementById("add-footer").addEventListener("click", () => tryCatch(addFooter)); + document.getElementById("add-first-page-header").addEventListener("click", () => tryCatch(addFirstPageHeader)); + document.getElementById("add-first-page-footer").addEventListener("click", () => tryCatch(addFirstPageFooter)); + document.getElementById("add-even-pages-header").addEventListener("click", () => tryCatch(addEvenPagesHeader)); + document.getElementById("add-even-pages-footer").addEventListener("click", () => tryCatch(addEvenPagesFooter)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); async function addHeader() { await Word.run(async (context) => { @@ -126,7 +126,7 @@ script: } language: typescript template: - content: |- + content: >-
        This sample inserts headers and footers in the document.
        @@ -186,13 +186,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 diff --git a/samples/word/25-paragraph/insert-in-different-locations.yaml b/samples/word/25-paragraph/insert-in-different-locations.yaml index 8fb6815ce..24163e5ec 100644 --- a/samples/word/25-paragraph/insert-in-different-locations.yaml +++ b/samples/word/25-paragraph/insert-in-different-locations.yaml @@ -7,13 +7,25 @@ host: WORD api_set: WordApi: '1.2' script: - content: | - $("#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)); + content: >- + document.getElementById("setup").addEventListener("click", () => + tryCatch(setup)); + + document.getElementById("before").addEventListener("click", () => + tryCatch(before)); + + document.getElementById("start").addEventListener("click", () => + tryCatch(start)); + + document.getElementById("end").addEventListener("click", () => + tryCatch(end)); + + document.getElementById("after").addEventListener("click", () => + tryCatch(after)); + + document.getElementById("replace").addEventListener("click", () => + tryCatch(replace)); + async function before() { await Word.run(async (context) => { @@ -25,6 +37,7 @@ script: }); } + async function start() { await Word.run(async (context) => { // This button assumes before() ran. @@ -40,6 +53,7 @@ script: }); } + async function end() { await Word.run(async (context) => { // Insert text at the end of a paragraph. @@ -54,6 +68,7 @@ script: }); } + async function after() { await Word.run(async (context) => { // Insert a paragraph after an existing one. @@ -68,6 +83,7 @@ script: }); } + async function replace() { await Word.run(async (context) => { // Replace the last paragraph. @@ -79,6 +95,7 @@ script: }); } + async function setup() { await Word.run(async (context) => { const body: Word.Body = context.document.body; @@ -96,6 +113,7 @@ script: }); } + async function tryCatch(callback) { try { await callback(); @@ -106,7 +124,7 @@ script: } language: typescript template: - content: |- + content: >-
        This sample demonstrates a variety of insert locations available in the API.
        @@ -152,13 +170,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 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 526be67a2..835548594 100644 --- a/samples/word/25-paragraph/insert-line-and-page-breaks.yaml +++ b/samples/word/25-paragraph/insert-line-and-page-breaks.yaml @@ -7,10 +7,16 @@ host: WORD api_set: WordApi: '1.2' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#line").on("click", () => tryCatch(insertLineBreak)); - $("#page").on("click", () => tryCatch(insertPageBreak)); + content: >- + document.getElementById("setup").addEventListener("click", () => + tryCatch(setup)); + + document.getElementById("line").addEventListener("click", () => + tryCatch(insertLineBreak)); + + document.getElementById("page").addEventListener("click", () => + tryCatch(insertPageBreak)); + async function insertLineBreak() { Word.run(async (context) => { @@ -21,6 +27,7 @@ script: }); } + async function insertPageBreak() { await Word.run(async (context) => { context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.page, "After"); @@ -30,6 +37,7 @@ script: }); } + async function setup() { await Word.run(async (context) => { const body: Word.Body = context.document.body; @@ -49,6 +57,7 @@ script: }); } + async function tryCatch(callback) { try { await callback(); @@ -63,14 +72,12 @@ template:
        This sample demonstrates how to insert page and line breaks.
        -

        Set up

        -

        Try it out

        -

        Try it out

        -

        Try it out

        +

        Try it out

        Table formatting

        @@ -233,13 +235,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 diff --git a/samples/word/40-tables/table-cell-access.yaml b/samples/word/40-tables/table-cell-access.yaml index 2651321bc..e27e07b23 100644 --- a/samples/word/40-tables/table-cell-access.yaml +++ b/samples/word/40-tables/table-cell-access.yaml @@ -7,9 +7,13 @@ host: WORD api_set: WordApi: '1.3' script: - content: | - $("#run").on("click", () => tryCatch(getTableCell)); - $("#setup").on("click", () => tryCatch(insertTable)); + content: >- + document.getElementById("run").addEventListener("click", () => + tryCatch(getTableCell)); + + document.getElementById("setup").addEventListener("click", () => + tryCatch(insertTable)); + async function getTableCell() { // Gets the content of the first cell in the first table. @@ -22,6 +26,7 @@ script: }); } + async function insertTable() { await Word.run(async (context) => { // Use a two-dimensional array to hold the initial table values. @@ -37,7 +42,9 @@ script: }); } + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { try { await callback(); @@ -52,14 +59,12 @@ template:
        This sample demonstrates how to get a cell from a table.
        -

        Set up

        -

        Try it out

        -

        Get and update fields

        -

        Delete fields

        -

        Add a custom style

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

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

        Use custom style

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

        Update custom style

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

        Delete custom style

        @@ -342,10 +367,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 diff --git a/samples/word/50-document/manage-tracked-changes.yaml b/samples/word/50-document/manage-tracked-changes.yaml index 31796b541..ac11023a9 100644 --- a/samples/word/50-document/manage-tracked-changes.yaml +++ b/samples/word/50-document/manage-tracked-changes.yaml @@ -1,20 +1,21 @@ 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' 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. @@ -148,7 +149,7 @@ script: } language: typescript template: - content: |- + content: >-

        This sample shows how to manage tracked changes.
        @@ -178,6 +179,7 @@ template: Reject the first tracked change
        +

        First, choose the Add sample text button. @@ -49,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 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@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 2fcad11eac0c6fa6850e78675c4ba52c3d39b4d2 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Sat, 22 Mar 2025 13:41:05 -0700 Subject: [PATCH 2/2] Run yarn script --- .../excel/01-basics/basic-api-call-es5.yaml | 13 +- samples/excel/01-basics/basic-api-call.yaml | 13 +- .../01-basics/basic-common-api-call.yaml | 11 +- .../excel/10-chart/chart-axis-formatting.yaml | 7 +- samples/excel/10-chart/chart-axis.yaml | 47 +--- .../excel/10-chart/chart-bubble-chart.yaml | 11 +- .../10-chart/chart-create-several-charts.yaml | 10 +- samples/excel/10-chart/chart-data-source.yaml | 9 +- samples/excel/10-chart/chart-data-table.yaml | 6 +- samples/excel/10-chart/chart-formatting.yaml | 31 +-- samples/excel/10-chart/chart-legend.yaml | 17 +- .../excel/10-chart/chart-series-markers.yaml | 15 +- .../10-chart/chart-series-plotorder.yaml | 20 +- samples/excel/10-chart/chart-series.yaml | 21 +- samples/excel/10-chart/chart-trendlines.yaml | 40 +-- samples/excel/12-comment/comment-basics.yaml | 8 +- .../excel/12-comment/comment-mentions.yaml | 6 +- samples/excel/12-comment/comment-replies.yaml | 8 +- .../excel/12-comment/comment-resolution.yaml | 29 +- .../conditional-formatting-advanced.yaml | 6 +- .../conditional-formatting-basic.yaml | 6 +- .../custom-functions-errors.yaml | 12 +- .../data-types-custom-functions.yaml | 18 +- .../streaming-function.yaml | 7 +- .../web-call-function.yaml | 17 +- ...e-set-get-and-delete-custom-xml-parts.yaml | 8 +- .../test-xml-for-unique-namespace.yaml | 6 +- .../data-types-entity-attribution.yaml | 9 +- .../data-types-entity-icons.yaml | 23 +- .../data-types-entity-values.yaml | 36 +-- .../data-types-error-values.yaml | 26 +- .../data-types-formatted-number.yaml | 8 +- .../20-data-types/data-types-references.yaml | 11 +- .../20-data-types/data-types-web-image.yaml | 37 +-- .../22-data-validation/data-validation.yaml | 9 +- .../excel/26-document/custom-properties.yaml | 5 +- .../26-document/get-file-in-slices-async.yaml | 10 +- samples/excel/26-document/properties.yaml | 9 +- .../30-events/data-change-event-details.yaml | 20 +- samples/excel/30-events/data-changed.yaml | 6 +- .../30-events/event-column-and-row-sort.yaml | 9 +- .../event-worksheet-single-click.yaml | 8 +- .../30-events/events-chart-activated.yaml | 9 +- ...vents-chartcollection-added-activated.yaml | 10 +- .../events-comment-event-handler.yaml | 9 +- .../30-events/events-disable-events.yaml | 6 +- .../30-events/events-formula-changed.yaml | 5 +- .../excel/30-events/events-table-changed.yaml | 9 +- .../events-tablecollection-changed.yaml | 7 +- .../30-events/events-workbook-activated.yaml | 5 +- ...nts-workbook-and-worksheet-collection.yaml | 8 +- .../events-worksheet-protection.yaml | 22 +- samples/excel/30-events/events-worksheet.yaml | 11 +- .../30-events/selection-changed-events.yaml | 10 +- .../create-and-remove-named-item.yaml | 53 +--- .../34-named-item/update-named-item.yaml | 20 +- .../pivottable-calculations.yaml | 35 +-- .../pivottable-create-and-modify.yaml | 10 +- .../pivottable-filters-and-summaries.yaml | 61 +---- .../pivottable-get-pivottables.yaml | 10 +- .../pivottable-pivotfilters.yaml | 50 +--- .../38-pivottable/pivottable-pivotlayout.yaml | 6 +- .../38-pivottable/pivottable-refresh.yaml | 24 +- .../38-pivottable/pivottable-slicer.yaml | 49 +--- .../38-pivottable/pivottable-source-data.yaml | 6 +- samples/excel/42-range/cell-properties.yaml | 24 +- samples/excel/42-range/dynamic-arrays.yaml | 9 +- .../42-range/insert-delete-clear-range.yaml | 33 +-- samples/excel/42-range/outline.yaml | 45 +--- samples/excel/42-range/precedents.yaml | 10 +- samples/excel/42-range/range-areas.yaml | 9 +- samples/excel/42-range/range-auto-fill.yaml | 35 +-- samples/excel/42-range/range-copyfrom.yaml | 6 +- samples/excel/42-range/range-dependents.yaml | 37 +-- .../42-range/range-direct-dependents.yaml | 10 +- samples/excel/42-range/range-find.yaml | 6 +- .../excel/42-range/range-get-range-edge.yaml | 9 +- samples/excel/42-range/range-hyperlink.yaml | 8 +- .../excel/42-range/range-merged-ranges.yaml | 24 +- .../excel/42-range/range-relationships.yaml | 9 +- .../42-range/range-remove-duplicates.yaml | 24 +- .../42-range/range-text-orientation.yaml | 6 +- samples/excel/42-range/selected-range.yaml | 18 +- samples/excel/42-range/set-get-values.yaml | 54 +--- samples/excel/42-range/style.yaml | 14 +- samples/excel/42-range/used-range.yaml | 9 +- .../44-shape/shape-create-and-delete.yaml | 34 +-- samples/excel/44-shape/shape-groups.yaml | 34 +-- samples/excel/44-shape/shape-images.yaml | 27 +- .../excel/44-shape/shape-move-and-order.yaml | 44 +--- samples/excel/44-shape/shape-textboxes.yaml | 6 +- .../add-rows-and-columns-to-a-table.yaml | 6 +- samples/excel/46-table/create-table.yaml | 10 +- samples/excel/46-table/filter-data.yaml | 25 +- samples/excel/46-table/formatting.yaml | 20 +- .../excel/46-table/get-data-from-table.yaml | 20 +- ...get-visible-range-of-a-filtered-table.yaml | 31 +-- samples/excel/46-table/import-json-data.yaml | 11 +- samples/excel/46-table/resize-table.yaml | 15 +- samples/excel/46-table/sort-data.yaml | 16 +- .../create-get-change-delete-settings.yaml | 26 +- .../excel/50-workbook/create-workbook.yaml | 8 +- .../50-workbook/culture-info-date-time.yaml | 9 +- samples/excel/50-workbook/culture-info.yaml | 9 +- .../excel/50-workbook/data-protection.yaml | 6 +- .../workbook-built-in-functions.yaml | 23 +- .../50-workbook/workbook-calculation.yaml | 8 +- .../50-workbook/workbook-get-active-cell.yaml | 13 +- .../workbook-insert-external-worksheets.yaml | 16 +- .../50-workbook/workbook-save-and-close.yaml | 28 +- .../add-delete-rename-move-worksheet.yaml | 33 +-- samples/excel/54-worksheet/gridlines.yaml | 18 +- .../excel/54-worksheet/list-worksheets.yaml | 13 +- ...rence-worksheets-by-relative-position.yaml | 6 +- samples/excel/54-worksheet/tab-color.yaml | 5 +- .../54-worksheet/worksheet-auto-filter.yaml | 6 +- .../excel/54-worksheet/worksheet-copy.yaml | 15 +- .../54-worksheet/worksheet-find-all.yaml | 29 +- .../54-worksheet/worksheet-freeze-panes.yaml | 42 +-- .../54-worksheet/worksheet-page-layout.yaml | 49 +--- .../54-worksheet/worksheet-range-cell.yaml | 37 +-- .../54-worksheet/worksheet-visibility.yaml | 20 +- .../90-scenarios/currency-converter.yaml | 48 +--- .../90-scenarios/multiple-property-set.yaml | 6 +- .../performance-optimization.yaml | 10 +- .../excel/90-scenarios/report-generation.yaml | 18 +- .../90-scenarios/working-with-dates.yaml | 9 +- .../excel/99-just-for-fun/color-wheel.yaml | 19 +- samples/excel/99-just-for-fun/gradient.yaml | 28 +- .../99-just-for-fun/path-finder-game.yaml | 33 +-- samples/excel/99-just-for-fun/patterns.yaml | 26 +- samples/excel/99-just-for-fun/tetrominos.yaml | 18 +- samples/excel/default.yaml | 10 +- samples/onenote/default.yaml | 10 +- .../10-roaming-settings/roaming-settings.yaml | 12 +- .../load-set-get-save.yaml | 23 +- .../20-item-body/add-inline-base64-image.yaml | 19 +- .../20-item-body/append-text-on-send.yaml | 11 +- .../outlook/20-item-body/get-body-format.yaml | 11 +- .../20-item-body/get-selected-data.yaml | 11 +- .../20-item-body/prepend-text-on-send.yaml | 14 +- .../prepend-text-to-item-body.yaml | 11 +- .../20-item-body/replace-selected-text.yaml | 14 +- .../25-item-save-and-close/close-async.yaml | 11 +- .../outlook/25-item-save-and-close/save.yaml | 4 +- .../get-all-attendees.yaml | 13 +- .../get-cc-message-read.yaml | 8 +- .../get-from-message-compose.yaml | 8 +- .../get-from-message-read.yaml | 8 +- ...tional-attendees-appointment-attendee.yaml | 5 +- .../get-organizer-appointment-attendee.yaml | 11 +- .../get-organizer-appointment-organizer.yaml | 11 +- ...quired-attendees-appointment-attendee.yaml | 5 +- .../get-sender-message-read.yaml | 11 +- .../get-set-bcc-message-compose.yaml | 10 +- .../get-set-cc-message-compose.yaml | 10 +- ...ional-attendees-appointment-organizer.yaml | 5 +- ...uired-attendees-appointment-organizer.yaml | 5 +- .../get-set-to-message-compose.yaml | 10 +- .../get-to-message-read.yaml | 8 +- .../35-notifications/add-getall-remove.yaml | 8 +- .../40-attachments/attachments-compose.yaml | 21 +- .../get-attachment-content.yaml | 5 +- .../40-attachments/get-attachments-read.yaml | 5 +- .../45-categories/work-with-categories.yaml | 23 +- .../work-with-master-categories.yaml | 7 +- .../50-recurrence/get-recurrence-read.yaml | 5 +- .../outlook/50-recurrence/get-series-id.yaml | 11 +- ...-set-recurrence-appointment-organizer.yaml | 10 +- .../display-existing-appointment.yaml | 15 +- .../display-existing-message.yaml | 15 +- .../display-new-appointment.yaml | 14 +- .../55-display-items/display-new-message.yaml | 16 +- .../55-display-items/display-reply-forms.yaml | 5 +- .../display-reply-with-attachments.yaml | 23 +- .../sensitivity-label.yaml | 8 +- .../sensitivity-labels-catalog.yaml | 8 +- .../get-shared-properties.yaml | 8 +- .../get-internet-headers-message-read.yaml | 12 +- ...stom-internet-headers-message-compose.yaml | 7 +- .../outlook/75-regex-matches/contextual.yaml | 7 +- .../get-icaluid-as-attendee.yaml | 12 +- .../get-icaluid-as-organizer.yaml | 12 +- .../ids-and-urls.yaml | 10 +- .../make-ews-request-async.yaml | 7 +- ...-message-using-make-ews-request-async.yaml | 7 +- .../user-callback-token.yaml | 11 +- .../user-identity-token.yaml | 10 +- .../delay-message-delivery.yaml | 5 +- ...d-remove-enhancedlocation-appointment.yaml | 14 +- .../get-conversation-id-message.yaml | 8 +- .../get-conversation-index.yaml | 8 +- .../get-date-time-created-read.yaml | 8 +- .../get-date-time-modified-read.yaml | 8 +- .../get-diagnostic-information.yaml | 11 +- .../90-other-item-apis/get-eml-format.yaml | 11 +- .../90-other-item-apis/get-end-read.yaml | 5 +- .../90-other-item-apis/get-in-reply-to.yaml | 11 +- .../get-internet-message-id-read.yaml | 8 +- .../get-item-class-async.yaml | 5 +- .../get-item-class-read.yaml | 5 +- .../90-other-item-apis/get-item-type.yaml | 5 +- .../get-loaded-message-properties.yaml | 24 +- .../90-other-item-apis/get-location-read.yaml | 8 +- .../get-message-properties.yaml | 10 +- .../get-normalized-subject-read.yaml | 8 +- .../get-set-end-appointment-organizer.yaml | 10 +- ...et-set-location-appointment-organizer.yaml | 10 +- .../get-set-sensitivity-level.yaml | 6 +- .../get-set-start-appointment-organizer.yaml | 10 +- .../get-set-subject-compose.yaml | 10 +- .../90-other-item-apis/get-start-read.yaml | 8 +- .../90-other-item-apis/get-subject-read.yaml | 5 +- .../90-other-item-apis/item-id-compose.yaml | 7 +- .../90-other-item-apis/send-async.yaml | 11 +- .../90-other-item-apis/session-data-apis.yaml | 35 +-- .../90-other-item-apis/set-selected-data.yaml | 11 +- .../work-with-client-signatures.yaml | 8 +- .../get-set-isalldayevent.yaml | 6 +- .../set-displayed-body-subject.yaml | 19 +- .../powerpoint/basics/basic-api-call-js.yaml | 13 +- .../powerpoint/basics/basic-api-call-ts.yaml | 16 +- .../basics/basic-common-api-call.yaml | 8 +- samples/powerpoint/default.yaml | 5 +- .../document/create-presentation.yaml | 8 +- .../hyperlinks/manage-hyperlinks.yaml | 13 +- samples/powerpoint/images/insert-image.yaml | 6 +- samples/powerpoint/images/insert-svg.yaml | 9 +- .../scenarios/searches-wikipedia-api.yaml | 36 +-- samples/powerpoint/shapes/get-set-shapes.yaml | 82 ++---- .../powerpoint/shapes/get-shapes-by-type.yaml | 7 +- samples/powerpoint/shapes/shapes.yaml | 9 +- .../slide-management/add-slides.yaml | 18 +- .../slide-management/get-set-slides.yaml | 36 +-- .../slide-management/get-slide-metadata.yaml | 13 +- .../slide-management/insert-slides.yaml | 5 +- samples/powerpoint/tags/tags.yaml | 4 +- .../powerpoint/text/get-set-textrange.yaml | 7 +- .../project/basics/basic-common-api-call.yaml | 8 +- samples/project/default.yaml | 5 +- .../word/01-basics/basic-api-call-es5.yaml | 13 +- samples/word/01-basics/basic-api-call.yaml | 13 +- .../word/01-basics/basic-common-api-call.yaml | 11 +- .../content-control-onadded-event.yaml | 9 +- .../content-control-ondatachanged-event.yaml | 9 +- .../content-control-ondeleted-event.yaml | 9 +- .../content-control-onentered-event.yaml | 9 +- .../content-control-onexited-event.yaml | 9 +- ...tent-control-onselectionchanged-event.yaml | 9 +- .../get-change-tracking-states.yaml | 6 +- ...t-and-change-checkbox-content-control.yaml | 36 +-- ...-and-change-combo-box-content-control.yaml | 46 +--- .../insert-and-change-content-controls.yaml | 26 +- ...-change-dropdown-list-content-control.yaml | 46 +--- .../15-images/insert-and-get-pictures.yaml | 25 +- samples/word/20-lists/insert-list.yaml | 15 +- samples/word/20-lists/manage-list-styles.yaml | 18 +- samples/word/20-lists/organize-list.yaml | 20 +- .../get-paragraph-on-insertion-point.yaml | 27 +- samples/word/25-paragraph/get-text.yaml | 22 +- samples/word/25-paragraph/get-word-count.yaml | 19 +- .../25-paragraph/insert-formatted-text.yaml | 23 +- .../insert-header-and-footer.yaml | 6 +- .../insert-in-different-locations.yaml | 38 +-- .../insert-line-and-page-breaks.yaml | 19 +- samples/word/25-paragraph/onadded-event.yaml | 8 +- .../word/25-paragraph/onchanged-event.yaml | 9 +- .../word/25-paragraph/ondeleted-event.yaml | 9 +- .../25-paragraph/paragraph-properties.yaml | 10 +- samples/word/25-paragraph/search.yaml | 23 +- .../get-built-in-properties.yaml | 13 +- ...read-write-custom-document-properties.yaml | 24 +- samples/word/35-ranges/compare-location.yaml | 6 +- samples/word/35-ranges/scroll-to-range.yaml | 20 +- .../split-words-of-first-paragraph.yaml | 18 +- .../word/40-tables/manage-custom-style.yaml | 17 +- samples/word/40-tables/manage-formatting.yaml | 9 +- samples/word/40-tables/table-cell-access.yaml | 15 +- .../word/50-document/compare-documents.yaml | 13 +- .../word/50-document/get-external-styles.yaml | 16 +- .../50-document/insert-external-document.yaml | 9 +- .../50-document/insert-section-breaks.yaml | 6 +- .../word/50-document/manage-annotations.yaml | 9 +- samples/word/50-document/manage-body.yaml | 6 +- .../50-document/manage-change-tracking.yaml | 9 +- samples/word/50-document/manage-comments.yaml | 9 +- .../manage-custom-xml-part-ns.yaml | 8 +- .../50-document/manage-custom-xml-part.yaml | 8 +- samples/word/50-document/manage-fields.yaml | 9 +- .../word/50-document/manage-footnotes.yaml | 9 +- samples/word/50-document/manage-settings.yaml | 26 +- samples/word/50-document/manage-styles.yaml | 56 +--- .../50-document/manage-tracked-changes.yaml | 10 +- samples/word/50-document/save-close.yaml | 38 +-- .../correlated-objects-pattern.yaml | 6 +- samples/word/90-scenarios/doc-assembly.yaml | 5 +- .../90-scenarios/multiple-property-set.yaml | 6 +- .../insert-and-change-content-controls.yaml | 36 +-- .../word/99-preview-apis/manage-comments.yaml | 9 +- samples/word/default.yaml | 10 +- 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 ----- 337 files changed, 1269 insertions(+), 4313 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 d69f3759c..e2baf785a 100644 --- a/samples/excel/01-basics/basic-api-call-es5.yaml +++ b/samples/excel/01-basics/basic-api-call-es5.yaml @@ -7,10 +7,8 @@ host: EXCEL api_set: ExcelApi: '1.1' script: - content: >- - document.getElementById("run").addEventListener("click", () => - tryCatch(run)); - + content: |- + document.getElementById("run").addEventListener("click", () => tryCatch(run)); function run() { return Excel.run(function (context) { @@ -24,9 +22,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ - function tryCatch(callback) { Promise.resolve() .then(callback) @@ -37,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.

        @@ -68,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 + https://unpkg.com/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 b536144be..86ddf8c87 100644 --- a/samples/excel/01-basics/basic-api-call.yaml +++ b/samples/excel/01-basics/basic-api-call.yaml @@ -7,10 +7,8 @@ host: EXCEL api_set: ExcelApi: '1.1' script: - content: >- - document.getElementById("run").addEventListener("click", () => - tryCatch(run)); - + content: |- + document.getElementById("run").addEventListener("click", () => tryCatch(run)); async function run() { await Excel.run(async (context) => { @@ -24,9 +22,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ - async function tryCatch(callback) { try { await callback(); @@ -38,11 +34,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.

        @@ -69,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 + https://unpkg.com/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 1185499b2..539bee657 100644 --- a/samples/excel/01-basics/basic-common-api-call.yaml +++ b/samples/excel/01-basics/basic-common-api-call.yaml @@ -1,17 +1,15 @@ order: 3 id: excel-basics-basic-common-api-call name: Basic API call (Office 2013) -description: Performs a basic Excel API call using JavaScript with 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: Selection: 1.1 script: - content: >- + content: |- document.getElementById("run").addEventListener("click", run); - function run() { Office.context.document.getSelectedDataAsync( Office.CoercionType.Text, @@ -26,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.

        @@ -58,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 + https://unpkg.com/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 e1cfaab76..d82d312b1 100644 --- a/samples/excel/10-chart/chart-axis-formatting.yaml +++ b/samples/excel/10-chart/chart-axis-formatting.yaml @@ -117,25 +117,22 @@ script: } language: typescript template: - content: >- + content: |-

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

        -

        Set up

        -

        Try it out

        -
        -

        Try it out

        -
        -
        -
        -
        -

        Try it out

        -

        Try it out

        -
        language: html style: @@ -320,4 +316,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@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/excel/10-chart/chart-data-source.yaml b/samples/excel/10-chart/chart-data-source.yaml index a82449593..d4bb53742 100644 --- a/samples/excel/10-chart/chart-data-source.yaml +++ b/samples/excel/10-chart/chart-data-source.yaml @@ -1,8 +1,7 @@ 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. +description: This sample shows how to get information about the data source of a chart series. host: EXCEL api_set: ExcelApi: '1.15' @@ -81,11 +80,10 @@ script: } language: typescript template: - content: >- + 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.

        @@ -93,7 +91,6 @@ template: Add sample data
        -

        Try it out

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

        @@ -119,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 + https://unpkg.com/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 82f660525..a48cae0f3 100644 --- a/samples/excel/10-chart/chart-data-table.yaml +++ b/samples/excel/10-chart/chart-data-table.yaml @@ -113,11 +113,10 @@ script: } language: typescript template: - content: >- + content: |-

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

        -

        Set up

        -

        Try it out

        -

        Try it out

        -

        Try it out

        -
        -
        -
        -

        Try it out

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

        @@ -136,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 + https://unpkg.com/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-comment/comment-mentions.yaml b/samples/excel/12-comment/comment-mentions.yaml index d1d9c24fb..0ec354dba 100644 --- a/samples/excel/12-comment/comment-mentions.yaml +++ b/samples/excel/12-comment/comment-mentions.yaml @@ -53,11 +53,10 @@ script: } language: typescript template: - content: >- + content: |-

        This sample shows how to mention someone in a comment.

        -

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

        Setup

        @@ -65,7 +64,6 @@ template: Create a worksheet
        -

        Try it out

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

        @@ -95,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 + https://unpkg.com/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-comment/comment-replies.yaml b/samples/excel/12-comment/comment-replies.yaml index 2c31271dc..beed1063c 100644 --- a/samples/excel/12-comment/comment-replies.yaml +++ b/samples/excel/12-comment/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' @@ -102,18 +102,16 @@ script: } language: typescript template: - content: >- + 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.

        @@ -157,4 +155,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@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/excel/12-comment/comment-resolution.yaml b/samples/excel/12-comment/comment-resolution.yaml index 8068eed31..c77a480c3 100644 --- a/samples/excel/12-comment/comment-resolution.yaml +++ b/samples/excel/12-comment/comment-resolution.yaml @@ -6,19 +6,11 @@ host: EXCEL api_set: ExcelApi: '1.10' script: - content: >- - document.getElementById("setup").addEventListener("click", () => - tryCatch(setup)); - - document.getElementById("add-comment").addEventListener("click", () => - tryCatch(addComment)); - - document.getElementById("resolve-comment").addEventListener("click", () - => tryCatch(resolveComment)); - - document.getElementById("reopen-comment").addEventListener("click", () - => tryCatch(reopenComment)); - + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("add-comment").addEventListener("click", () => tryCatch(addComment)); + document.getElementById("resolve-comment").addEventListener("click", () => tryCatch(resolveComment)); + document.getElementById("reopen-comment").addEventListener("click", () => tryCatch(reopenComment)); async function addComment() { await Excel.run(async (context) => { @@ -30,7 +22,6 @@ script: }); } - async function resolveComment() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Comments"); @@ -39,7 +30,6 @@ script: }); } - async function reopenComment() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Comments"); @@ -48,7 +38,6 @@ script: }); } - async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Comments").delete(); @@ -59,9 +48,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ - async function tryCatch(callback) { try { await callback(); @@ -72,18 +59,16 @@ script: } language: typescript template: - content: >- + 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.

        @@ -119,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 + https://unpkg.com/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 8cffe798d..09600d694 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml @@ -178,19 +178,17 @@ script: } 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.

        -

        Set up

        -

        Try it out

        @@ -229,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 + https://unpkg.com/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 ef169c239..23f0d65e7 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -273,18 +273,16 @@ script: } language: typescript template: - content: >- + content: |-

        This sample shows how to apply conditional formatting to ranges.

        -

        Set up

        -

        Try it out

        @@ -346,4 +344,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@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/excel/16-custom-functions/custom-functions-errors.yaml b/samples/excel/16-custom-functions/custom-functions-errors.yaml index cccba8f42..e1f5582b1 100644 --- a/samples/excel/16-custom-functions/custom-functions-errors.yaml +++ b/samples/excel/16-custom-functions/custom-functions-errors.yaml @@ -6,23 +6,15 @@ host: EXCEL api_set: CustomFunctionsRuntime: 1.2 script: - content: >- + 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( @@ -43,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 + 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 7239d7a89..a5ebdbab6 100644 --- a/samples/excel/16-custom-functions/data-types-custom-functions.yaml +++ b/samples/excel/16-custom-functions/data-types-custom-functions.yaml @@ -1,13 +1,12 @@ 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. +description: This sample shows how to write custom functions that return entity value data types. host: EXCEL api_set: CustomFunctionsRuntime: 1.4 script: - content: > + content: | /** * Search for products that match a given substring. Try =SCRIPTLAB.DATATYPESCUSTOMFUNCTIONS.PRODUCTSEARCH("chef", false). * @customfunction @@ -15,8 +14,7 @@ script: * @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 { + async function productSearch(query: string, completeMatch?: boolean): Promise { // 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. @@ -48,9 +46,7 @@ script: } } - // Helper function to create entities from product properties. - function makeProductEntity(product?: any) { const entity: Excel.EntityCellValue = { type: "Entity", @@ -117,9 +113,7 @@ script: return entity; } - // Helper function to search the sample JSON product data. - function searchProduct(query: string, completeMatch: boolean): any { const queryUpperCase = query.toUpperCase(); if (completeMatch === true) { @@ -129,9 +123,7 @@ script: } } - /** Sample JSON product data. */ - const products = [ { productID: 1, @@ -239,7 +231,6 @@ script: }, ]; - const categories = [ { categoryID: 1, @@ -283,7 +274,6 @@ script: } ]; - const suppliers = [ { supplierID: 1, @@ -341,4 +331,4 @@ libraries: | @types/office-js core-js@2.4.1/client/core.min.js - @types/core-js + @types/core-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 260a91d6f..cdaf1ccb0 100644 --- a/samples/excel/16-custom-functions/streaming-function.yaml +++ b/samples/excel/16-custom-functions/streaming-function.yaml @@ -6,7 +6,7 @@ host: EXCEL api_set: CustomFunctionsRuntime: 1.1 script: - content: > + content: | /** @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. @@ -15,8 +15,7 @@ script: * or respond to the user canceling the function. * @returns An incrementing value. */ - function increment(amount: number, interval: number, invocation: - CustomFunctions.StreamingInvocation): void { + function increment(amount: number, interval: number, invocation: CustomFunctions.StreamingInvocation): void { let result = 0; const timer = setInterval(() => { result += amount; @@ -31,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/16-custom-functions/web-call-function.yaml b/samples/excel/16-custom-functions/web-call-function.yaml index e7884c3c4..faf57fbdb 100644 --- a/samples/excel/16-custom-functions/web-call-function.yaml +++ b/samples/excel/16-custom-functions/web-call-function.yaml @@ -6,24 +6,15 @@ host: EXCEL api_set: CustomFunctionsRuntime: 1.1 script: - content: > + content: | /** - - * Gets the star count for a given org/user and repo. Try - =GETSTARCOUNT("officedev","office-js") - + * 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") { + 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); @@ -39,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 311d8f792..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 @@ -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: @@ -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,7 +123,6 @@ template:
        -

        XML part display

        @@ -149,4 +147,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@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/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 a0f93220a..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 @@ -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,7 +109,6 @@ template: Delete all XML parts
        -

        XML part display

        @@ -135,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 + https://unpkg.com/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 09e9578ba..46adc2e94 100644 --- a/samples/excel/20-data-types/data-types-entity-attribution.yaml +++ b/samples/excel/20-data-types/data-types-entity-attribution.yaml @@ -1,8 +1,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. +description: This sample shows how to set data provider attributions on entity values in the card layout. host: EXCEL api_set: ExcelApi: '1.16' @@ -189,18 +188,16 @@ script: ]; language: typescript template: - content: >- + 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.

        @@ -341,4 +336,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@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/excel/20-data-types/data-types-web-image.yaml b/samples/excel/20-data-types/data-types-web-image.yaml index c9cfff555..9beed0017 100644 --- a/samples/excel/20-data-types/data-types-web-image.yaml +++ b/samples/excel/20-data-types/data-types-web-image.yaml @@ -1,28 +1,17 @@ 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. +description: This sample shows how to set and get web images in a worksheet using data types. host: EXCEL api_set: ExcelApi: '1.16' script: - 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)); - + 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. @@ -56,7 +45,6 @@ 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) => { @@ -82,7 +70,6 @@ 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) => { @@ -106,14 +93,12 @@ script: }); } - 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. @@ -124,9 +109,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ - async function tryCatch(callback) { try { await callback(); @@ -137,12 +120,11 @@ script: } language: typescript template: - content: >- + 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.

        @@ -154,7 +136,6 @@ template:
        -

        Try it out

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

        @@ -205,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 + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ 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 ee0298ebb..23d6089f9 100644 --- a/samples/excel/22-data-validation/data-validation.yaml +++ b/samples/excel/22-data-validation/data-validation.yaml @@ -1,8 +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' @@ -138,18 +137,16 @@ script: } language: typescript template: - content: >- + 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.

        @@ -184,4 +181,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@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/excel/26-document/custom-properties.yaml b/samples/excel/26-document/custom-properties.yaml index 9d3781104..90c3ab73d 100644 --- a/samples/excel/26-document/custom-properties.yaml +++ b/samples/excel/26-document/custom-properties.yaml @@ -89,11 +89,10 @@ script: } language: typescript template: - content: >- + 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:

        @@ -134,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 + https://unpkg.com/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 43444c0bb..3371746d2 100644 --- a/samples/excel/26-document/get-file-in-slices-async.yaml +++ b/samples/excel/26-document/get-file-in-slices-async.yaml @@ -1,8 +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' @@ -154,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

        -
        -
        -
        -
        -

        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.

        @@ -174,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 + https://unpkg.com/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 657abd603..49c754f27 100644 --- a/samples/excel/30-events/events-chartcollection-added-activated.yaml +++ b/samples/excel/30-events/events-chartcollection-added-activated.yaml @@ -1,9 +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' @@ -111,18 +109,16 @@ script: } language: typescript template: - content: >- + content: |-

        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.

        @@ -156,4 +152,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@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/excel/30-events/events-comment-event-handler.yaml b/samples/excel/30-events/events-comment-event-handler.yaml index 2417a5a6a..fbf4d77d1 100644 --- a/samples/excel/30-events/events-comment-event-handler.yaml +++ b/samples/excel/30-events/events-comment-event-handler.yaml @@ -1,8 +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' @@ -125,11 +124,10 @@ script: } language: typescript template: - content: >- + 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.

        @@ -175,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 + https://unpkg.com/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 0ec00ece5..d7711daf1 100644 --- a/samples/excel/30-events/events-disable-events.yaml +++ b/samples/excel/30-events/events-disable-events.yaml @@ -135,11 +135,10 @@ script: } language: typescript template: - content: >- + content: |-

        This sample shows how to turn events on and off.

        -

        Setup

        -

        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.

        @@ -180,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 + https://unpkg.com/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 c8174682a..89e3f9d1f 100644 --- a/samples/excel/30-events/events-formula-changed.yaml +++ b/samples/excel/30-events/events-formula-changed.yaml @@ -84,11 +84,10 @@ script: } language: typescript template: - content: >- + 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.

        @@ -123,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 + https://unpkg.com/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 3be83f9ac..4f686e1ce 100644 --- a/samples/excel/30-events/events-table-changed.yaml +++ b/samples/excel/30-events/events-table-changed.yaml @@ -106,38 +106,33 @@ 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

        -

        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.

        -
        -

        Try it out

        Selection Changed

        @@ -227,4 +222,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@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/excel/30-events/selection-changed-events.yaml b/samples/excel/30-events/selection-changed-events.yaml index dfe92e876..7e8108677 100644 --- a/samples/excel/30-events/selection-changed-events.yaml +++ b/samples/excel/30-events/selection-changed-events.yaml @@ -1,8 +1,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. +description: Registers handlers all the different `onSelectionChanged` events and displays how each event reports the selected addresses. author: OfficeDev host: EXCEL api_set: @@ -102,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.

      @@ -150,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 + https://unpkg.com/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 6c3e4dd6a..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 @@ -1,31 +1,19 @@ 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' script: - content: >- - document.getElementById("setup").addEventListener("click", () => - tryCatch(setup)); - - - 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)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + 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) => { @@ -38,7 +26,6 @@ script: }); } - async function addNameToHeader() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -51,7 +38,6 @@ script: }); } - async function formatRangeByName() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -70,7 +56,6 @@ script: }); } - async function removeName() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -91,7 +76,6 @@ script: }); } - async function listNamedItems() { await Excel.run(async (context) => { // Log all the named items in the active worksheet. @@ -109,7 +93,6 @@ script: }); } - async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -131,77 +114,64 @@ script: }); } - 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(); @@ -212,11 +182,10 @@ script: } language: typescript template: - content: >- + 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

      -

      Clean up

      -

      Try it out

      -
      -

      Try it out

      -

      Filters

      Manual filter

      @@ -343,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 + https://unpkg.com/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-pivotlayout.yaml b/samples/excel/38-pivottable/pivottable-pivotlayout.yaml index 2d6262999..2e45c708c 100644 --- a/samples/excel/38-pivottable/pivottable-pivotlayout.yaml +++ b/samples/excel/38-pivottable/pivottable-pivotlayout.yaml @@ -248,18 +248,16 @@ script: } language: typescript template: - content: >- + content: |-

      This sample shows how to work with the PivotLayout class to display the PivotTable.

      -

      Set up

      -

      Try it out

      -

      Try it out

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

      @@ -142,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 + https://unpkg.com/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 f95a17238..587b6562b 100644 --- a/samples/excel/38-pivottable/pivottable-slicer.yaml +++ b/samples/excel/38-pivottable/pivottable-slicer.yaml @@ -6,31 +6,15 @@ host: EXCEL api_set: ExcelApi: '1.10' script: - 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)); - + 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) => { @@ -44,7 +28,6 @@ script: }); } - async function formatSlicer() { await Excel.run(async (context) => { const slicer = context.workbook.slicers.getItem("Fruit Slicer"); @@ -57,7 +40,6 @@ script: }); } - async function applyStyle() { await Excel.run(async (context) => { const slicer = context.workbook.slicers.getItem("Fruit Slicer"); @@ -66,7 +48,6 @@ script: }); } - async function addFilters() { await Excel.run(async (context) => { const slicer = context.workbook.slicers.getItem("Fruit Slicer"); @@ -75,7 +56,6 @@ script: }); } - async function removeFilters() { await Excel.run(async (context) => { const slicer = context.workbook.slicers.getItem("Fruit Slicer"); @@ -84,7 +64,6 @@ script: }); } - async function removeSlicer() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -93,7 +72,6 @@ script: }); } - async function addPivotTable() { await Excel.run(async (context) => { const rangeToAnalyze = context.workbook.worksheets.getItem("Data").getRange("A1:E21"); @@ -111,7 +89,6 @@ script: }); } - async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Data").delete(); @@ -153,9 +130,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ - async function tryCatch(callback) { try { await callback(); @@ -166,11 +141,10 @@ script: } language: typescript template: - content: >- + 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.

      @@ -231,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 + https://unpkg.com/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 6e0071465..2da0cde5e 100644 --- a/samples/excel/38-pivottable/pivottable-source-data.yaml +++ b/samples/excel/38-pivottable/pivottable-source-data.yaml @@ -88,19 +88,17 @@ script: } language: typescript template: - content: >- + 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

      -

      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.

      @@ -184,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 + https://unpkg.com/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 d6105d9cc..339653430 100644 --- a/samples/excel/42-range/range-direct-dependents.yaml +++ b/samples/excel/42-range/range-direct-dependents.yaml @@ -1,9 +1,7 @@ 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. +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' @@ -117,18 +115,16 @@ script: } language: typescript template: - content: >- + 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.

      @@ -162,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 + https://unpkg.com/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 5167a3c0c..4b0c31b63 100644 --- a/samples/excel/42-range/range-find.yaml +++ b/samples/excel/42-range/range-find.yaml @@ -112,18 +112,16 @@ script: } language: typescript template: - content: >- + content: |-

      This sample shows how to find a cell with a matching string value 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.

      @@ -164,4 +162,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@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/excel/42-range/range-get-range-edge.yaml b/samples/excel/42-range/range-get-range-edge.yaml index 59fd85e54..1f28f89a2 100644 --- a/samples/excel/42-range/range-get-range-edge.yaml +++ b/samples/excel/42-range/range-get-range-edge.yaml @@ -1,8 +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' @@ -170,18 +169,16 @@ script: } language: typescript template: - content: >- + 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

      @@ -118,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 + https://unpkg.com/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 9fc12e71d..6ae16734d 100644 --- a/samples/excel/42-range/selected-range.yaml +++ b/samples/excel/42-range/selected-range.yaml @@ -7,13 +7,9 @@ host: EXCEL api_set: ExcelApi: '1.1' script: - content: >- - document.getElementById("get-selection").addEventListener("click", () => - tryCatch(getSelection)); - - document.getElementById("set-selection").addEventListener("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) => { @@ -26,7 +22,6 @@ script: }); } - async function setSelection() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -38,9 +33,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ - async function tryCatch(callback) { try { await callback(); @@ -52,11 +45,10 @@ script: } language: typescript template: - content: >- + content: |-

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

      -

      Try it out

      -

      Try it out

      -

      Try it out

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

      @@ -173,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.

      @@ -224,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 + https://unpkg.com/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 388696d66..d1761bbfe 100644 --- a/samples/excel/42-range/used-range.yaml +++ b/samples/excel/42-range/used-range.yaml @@ -1,8 +1,7 @@ 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. +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: @@ -101,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

      -

      Try it out

      -

      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.

      @@ -170,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 + https://unpkg.com/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/create-table.yaml b/samples/excel/46-table/create-table.yaml index 6940f74b3..7c458bb57 100644 --- a/samples/excel/46-table/create-table.yaml +++ b/samples/excel/46-table/create-table.yaml @@ -7,10 +7,8 @@ host: EXCEL api_set: ExcelApi: '1.4' script: - content: >- - document.getElementById("create-table").addEventListener("click", () => - tryCatch(createTable)); - + content: |- + document.getElementById("create-table").addEventListener("click", () => tryCatch(createTable)); async function createTable() { await Excel.run(async (context) => { @@ -41,9 +39,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ - async function tryCatch(callback) { try { await callback(); @@ -84,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 + https://unpkg.com/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 19d1f32d6..781dc4ac6 100644 --- a/samples/excel/46-table/filter-data.yaml +++ b/samples/excel/46-table/filter-data.yaml @@ -7,16 +7,10 @@ host: EXCEL api_set: ExcelApi: '1.4' script: - content: >- - document.getElementById("setup").addEventListener("click", () => - tryCatch(setup)); - - document.getElementById("filter-table").addEventListener("click", () => - tryCatch(filterTable)); - - document.getElementById("clear-filters").addEventListener("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) => { @@ -40,7 +34,6 @@ script: }); } - async function clearFilters() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -53,9 +46,7 @@ script: }); } - /** Create a new table with sample data */ - async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -84,9 +75,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ - async function tryCatch(callback) { try { await callback(); @@ -98,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

      -

      Try it out

      -

      Try it out

      -

      Try it out

      -

      Try it out

      @@ -139,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 + https://unpkg.com/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 1b4a08fdc..8de992922 100644 --- a/samples/excel/50-workbook/culture-info.yaml +++ b/samples/excel/50-workbook/culture-info.yaml @@ -1,8 +1,7 @@ order: 5 id: excel-culture-info name: Culture info -description: This sample shows how to apply the cultural settings APIs to help - normalize data. +description: This sample shows how to apply the cultural settings APIs to help normalize data. host: EXCEL api_set: ExcelApi: '1.11' @@ -108,18 +107,16 @@ script: } language: typescript template: - content: >- + 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

      @@ -256,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 + https://unpkg.com/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 c1055f0ec..3490d043b 100644 --- a/samples/excel/50-workbook/workbook-built-in-functions.yaml +++ b/samples/excel/50-workbook/workbook-built-in-functions.yaml @@ -6,16 +6,10 @@ host: EXCEL api_set: ExcelAPI: '1.2' script: - content: >- - document.getElementById("setup").addEventListener("click", () => - tryCatch(setup)); - - document.getElementById("call-vlookup").addEventListener("click", () => - tryCatch(callVlookup)); - - document.getElementById("nest-functions").addEventListener("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) => { @@ -31,7 +25,6 @@ script: }); } - async function nestFunctions() { await Excel.run(async (context) => { // This function uses VLOOKUP to find data in the "Wrench" row @@ -52,7 +45,6 @@ script: }); } - async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -76,9 +68,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ - async function tryCatch(callback) { try { await callback(); @@ -89,11 +79,10 @@ script: } language: typescript template: - content: >- + 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

      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.

      @@ -161,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 + https://unpkg.com/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 f569caf02..11f1917e8 100644 --- a/samples/excel/54-worksheet/tab-color.yaml +++ b/samples/excel/54-worksheet/tab-color.yaml @@ -64,11 +64,10 @@ script: } language: typescript template: - content: >- + content: |-

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

      -

      Try it out

      @@ -106,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 + https://unpkg.com/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 0de48e6c0..a4e887a21 100644 --- a/samples/excel/54-worksheet/worksheet-auto-filter.yaml +++ b/samples/excel/54-worksheet/worksheet-auto-filter.yaml @@ -152,18 +152,16 @@ script: } language: typescript template: - content: >- + content: |-

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

      @@ -211,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 + https://unpkg.com/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 a01247863..1fe3d9318 100644 --- a/samples/excel/54-worksheet/worksheet-copy.yaml +++ b/samples/excel/54-worksheet/worksheet-copy.yaml @@ -6,13 +6,9 @@ host: EXCEL api_set: ExcelApi: '1.7' script: - content: >- - document.getElementById("setup").addEventListener("click", () => - tryCatch(setup)); - - document.getElementById("copy-worksheet").addEventListener("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) => { @@ -30,7 +26,6 @@ script: }); } - async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -58,9 +53,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ - async function tryCatch(callback) { try { await callback(); @@ -107,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 + https://unpkg.com/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-find-all.yaml b/samples/excel/54-worksheet/worksheet-find-all.yaml index 748acd153..f47475263 100644 --- a/samples/excel/54-worksheet/worksheet-find-all.yaml +++ b/samples/excel/54-worksheet/worksheet-find-all.yaml @@ -6,19 +6,11 @@ host: EXCEL api_set: ExcelApi: '1.9' script: - content: >- - document.getElementById("setup").addEventListener("click", () => - tryCatch(setup)); - - document.getElementById("findCompleted").addEventListener("click", () => - tryCatch(findCompleted)); - - document.getElementById("findDelayed").addEventListener("click", () => - tryCatch(findDelayed)); - - document.getElementById("findCanceled").addEventListener("click", () => - tryCatch(findCanceled)); - + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("findCompleted").addEventListener("click", () => tryCatch(findCompleted)); + document.getElementById("findDelayed").addEventListener("click", () => tryCatch(findDelayed)); + document.getElementById("findCanceled").addEventListener("click", () => tryCatch(findCanceled)); async function findCompleted() { await Excel.run(async (context) => { @@ -38,7 +30,6 @@ script: }); } - async function findDelayed() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -57,7 +48,6 @@ script: }); } - async function findCanceled() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -80,7 +70,6 @@ script: }); } - async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -103,9 +92,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ - async function tryCatch(callback) { try { await callback(); @@ -116,18 +103,16 @@ script: } language: typescript template: - content: >- + content: |-

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

      -

      Setup

      -

      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 @@ -234,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 + https://unpkg.com/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 0a47ac18f..a26ccb9e3 100644 --- a/samples/excel/54-worksheet/worksheet-range-cell.yaml +++ b/samples/excel/54-worksheet/worksheet-range-cell.yaml @@ -1,30 +1,19 @@ 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: ExcelApi: '1.4' script: - content: >- - document.getElementById("setup").addEventListener("click", () => - tryCatch(setup)); - - - 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)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + 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) => { @@ -38,7 +27,6 @@ script: }); } - async function getEntireRange() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -51,7 +39,6 @@ script: }); } - async function getRange() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -64,7 +51,6 @@ script: }); } - async function getCell() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -77,7 +63,6 @@ script: }); } - async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -104,9 +89,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ - async function tryCatch(callback) { try { await callback(); @@ -118,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

      -

      Try it out

      The currency conversion is provided by exchangeratesapi.io which uses @@ -214,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 + 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 f9ac64618..e74a52b5c 100644 --- a/samples/excel/90-scenarios/multiple-property-set.yaml +++ b/samples/excel/90-scenarios/multiple-property-set.yaml @@ -94,18 +94,16 @@ script: } language: typescript template: - content: >- + content: |-

      This sample shows how to format a range.

      -

      Set up

      -

      Try it out

      -

      Performance settings

      -

      Try it out

      -

      Try it out

      -
      -

      Find the path:

      -
      -
      language: html style: @@ -91,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 + https://unpkg.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 9da905831..7ec9c407c 100644 --- a/samples/outlook/55-display-items/display-new-message.yaml +++ b/samples/outlook/55-display-items/display-new-message.yaml @@ -1,18 +1,14 @@ 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' script: - content: >- + content: |- document.getElementById("run").addEventListener("click", run); - - document.getElementById("run-async").addEventListener("click", - runAsync); - + document.getElementById("run-async").addEventListener("click", runAsync); function run() { Office.context.mailbox.displayNewMessageForm({ @@ -31,7 +27,6 @@ script: }); } - function runAsync() { // The async version is only available starting with requirement set 1.9, // and provides a callback when the new message form has been created. @@ -57,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

      @@ -83,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 + https://unpkg.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 9e13ee25f..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 @@ -1,13 +1,12 @@ 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' script: - content: >- + content: |- document.getElementById("run").addEventListener("click", run); function run() { @@ -26,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. @@ -34,7 +33,6 @@ template: to get an access token.

      -

      Try it out

      -
      language: html style: @@ -71,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 + https://unpkg.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 d7e575717..ad3713570 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 @@ -6,12 +6,10 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: >- + content: |- document.getElementById("get").addEventListener("click", get); - document.getElementById("set").addEventListener("click", set); - function get() { Office.context.mailbox.item.start.getAsync((result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { @@ -22,7 +20,6 @@ script: }); } - function set() { const start = new Date(); // Represents current date and time. start.setDate(start.getDate() + 2); // Add 2 days to current date. @@ -36,12 +33,11 @@ script: } language: typescript template: - content: >- + 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: @@ -127,4 +110,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 + https://unpkg.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 3a6e12528..8a0af7b5c 100644 --- a/samples/outlook/90-other-item-apis/set-selected-data.yaml +++ b/samples/outlook/90-other-item-apis/set-selected-data.yaml @@ -6,10 +6,8 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: >- - document.getElementById("set-selected-data").addEventListener("click", - setSelectedData); - + content: |- + document.getElementById("set-selected-data").addEventListener("click", setSelectedData); function setSelectedData() { Office.context.mailbox.item.setSelectedDataAsync("Replaced", function(asyncResult) { @@ -22,12 +20,11 @@ script: } language: typescript template: - content: >- + 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.

      @@ -54,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 + https://unpkg.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 a37df7a97..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 @@ -1,8 +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' @@ -91,7 +90,7 @@ script: } language: typescript template: - content: >- + 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. @@ -100,7 +99,6 @@ template:

      -

      Try it out

      -
      language: html style: @@ -68,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 + https://unpkg.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/set-displayed-body-subject.yaml b/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml index d96dc3e53..ea9d44c15 100644 --- a/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml +++ b/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml @@ -1,19 +1,14 @@ 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. +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: >- - document.getElementById("set-body").addEventListener("click", - setDisplayedBody); - - document.getElementById("set-subject").addEventListener("click", - setDisplayedSubject); - + content: |- + document.getElementById("set-body").addEventListener("click", setDisplayedBody); + document.getElementById("set-subject").addEventListener("click", setDisplayedSubject); function setDisplayedBody() { // This snippet temporarily sets the content displayed in the body of a message in read mode. @@ -31,7 +26,6 @@ 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. @@ -49,13 +43,12 @@ script: } language: typescript template: - content: >- + 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

      @@ -94,4 +87,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 + https://unpkg.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-js.yaml b/samples/powerpoint/basics/basic-api-call-js.yaml index ffdcc42c5..a07f9456e 100644 --- a/samples/powerpoint/basics/basic-api-call-js.yaml +++ b/samples/powerpoint/basics/basic-api-call-js.yaml @@ -6,10 +6,8 @@ host: POWERPOINT api_set: PowerPointApi: '1.4' script: - content: >- - document.getElementById("run").addEventListener("click", () => - tryCatch(run)); - + content: |- + document.getElementById("run").addEventListener("click", () => tryCatch(run)); function run() { // This function gets the collection of shapes on the first slide, @@ -29,9 +27,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ - async function tryCatch(callback) { try { await callback(); @@ -42,11 +38,10 @@ script: } language: typescript template: - content: >- + content: |-
      This sample executes a code snippet that adds a text box to the first slide in the presentation.
      - @@ -69,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 + https://unpkg.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 5ee3164a4..2ca0fd607 100644 --- a/samples/powerpoint/basics/basic-api-call-ts.yaml +++ b/samples/powerpoint/basics/basic-api-call-ts.yaml @@ -6,10 +6,8 @@ host: POWERPOINT api_set: PowerPointApi: '1.4' script: - content: >- - document.getElementById("run").addEventListener("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, @@ -29,11 +27,8 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ - - const tryCatch: (callback: Function) => void = async (callback: - Function) => { + const tryCatch: (callback: Function) => void = async (callback: Function) => { try { await callback(); } catch (error) { @@ -43,11 +38,10 @@ script: } language: typescript template: - content: >- + content: |-
      This sample executes a code snippet that adds a text box to the first slide in the presentation.
      - @@ -70,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 + https://unpkg.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 3d816624c..c3107a43e 100644 --- a/samples/powerpoint/basics/basic-common-api-call.yaml +++ b/samples/powerpoint/basics/basic-common-api-call.yaml @@ -1,17 +1,15 @@ 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). +description: Executes a basic PowerPoint API call using the "common API" syntax (compatible with Office 2013). author: OfficeDev host: POWERPOINT api_set: Selection: '1.1' script: - content: >- + content: |- document.getElementById("run").addEventListener("click", run); - function run() { Office.context.document.getSelectedDataAsync(Office.CoercionType.Text, (asyncResult) => { if (asyncResult.status === Office.AsyncResultStatus.Failed) { @@ -46,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 + https://unpkg.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 47793b832..0a15973de 100644 --- a/samples/powerpoint/default.yaml +++ b/samples/powerpoint/default.yaml @@ -5,10 +5,9 @@ author: OfficeDev host: POWERPOINT api_set: {} script: - content: >- + content: |- document.getElementById("run").addEventListener("click", run); - function run() { Office.context.document.getSelectedDataAsync(Office.CoercionType.Text, (asyncResult) => { if (asyncResult.status === Office.AsyncResultStatus.Failed) { @@ -43,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 + https://unpkg.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 b22a12dda..6011dfb8b 100644 --- a/samples/powerpoint/document/create-presentation.yaml +++ b/samples/powerpoint/document/create-presentation.yaml @@ -1,7 +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: @@ -42,11 +41,10 @@ script: } language: typescript template: - content: >- + 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

      @@ -78,4 +76,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@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/powerpoint/hyperlinks/manage-hyperlinks.yaml b/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml index 8ee160216..f8f486309 100644 --- a/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml +++ b/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml @@ -5,10 +5,8 @@ host: POWERPOINT api_set: PowerPointApi: '1.6' script: - content: >- - document.getElementById("get-hyperlinks").addEventListener("click", () - => tryCatch(getHyperlinks)); - + content: |- + document.getElementById("get-hyperlinks").addEventListener("click", () => tryCatch(getHyperlinks)); async function getHyperlinks() { // Gets the hyperlinks found in the first selected slide. @@ -25,9 +23,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ - async function tryCatch(callback) { try { await callback(); @@ -38,11 +34,10 @@ script: } language: typescript template: - content: >- + 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.

      @@ -69,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 + https://unpkg.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 49ea56735..a42fb4a33 100644 --- a/samples/powerpoint/images/insert-image.yaml +++ b/samples/powerpoint/images/insert-image.yaml @@ -6,10 +6,9 @@ author: OfficeDev host: POWERPOINT api_set: {} script: - content: >- + content: |- $('#insert').on("click", run); - function run() { Office.context.document.setSelectedDataAsync(getImageAsBase64String(), { coercionType: Office.CoercionType.Image, @@ -24,7 +23,6 @@ script: }); } - function getImageAsBase64String() { // A production add-in code could get an image from an // online source and pass it to a library function that @@ -59,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 + https://unpkg.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 73c7351ed..ced98b544 100644 --- a/samples/powerpoint/images/insert-svg.yaml +++ b/samples/powerpoint/images/insert-svg.yaml @@ -6,10 +6,9 @@ author: OfficeDev host: POWERPOINT api_set: {} script: - content: >- + content: |- $('#insert').on("click", newImage); - function newImage() { Office.context.document.setSelectedDataAsync(getImageAsBase64String(), { coercionType: Office.CoercionType.XmlSvg, @@ -24,7 +23,6 @@ script: }); } - function getImageAsBase64String() { // A production add-in code could get an image from an // online source and pass it to a library function that @@ -34,11 +32,10 @@ script: } language: typescript template: - content: >- + content: |-

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

      -

      Try it out

      -

      Result

      @@ -254,4 +226,4 @@ libraries: |- 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 + 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 cea4551c3..3a6dc8d9f 100644 --- a/samples/powerpoint/shapes/get-set-shapes.yaml +++ b/samples/powerpoint/shapes/get-set-shapes.yaml @@ -1,33 +1,19 @@ 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: PowerPointApi: '1.5' script: - 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)); - + 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. @@ -50,7 +36,6 @@ script: }); } - async function setSelectedShapes() { // Selects the first two shapes on slide 1. await PowerPoint.run(async (context) => { @@ -70,7 +55,6 @@ script: }); } - async function changeFill() { // Changes the selected shapes fill color to red. await PowerPoint.run(async (context) => { @@ -85,11 +69,8 @@ script: }); } - let savedSlideSelection = []; - let savedShapeSelection = []; - async function saveShapeSelection() { // Saves which shapes are selected so that they can be reselected later. await PowerPoint.run(async (context) => { @@ -113,7 +94,6 @@ script: }); } - async function loadShapeSelection() { // Reselects shapes that were saved previously. await PowerPoint.run(async (context) => { @@ -124,23 +104,18 @@ script: }); } - 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) => { @@ -164,11 +139,8 @@ script: }); } - 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) => { @@ -193,9 +165,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ - async function tryCatch(callback) { try { await callback(); @@ -206,35 +176,19 @@ 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

      - - -
      - -
      - -
      - -
      - -
      - -
      + +
      +
      +
      +
      +
      +
      language: html @@ -263,4 +217,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@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/powerpoint/shapes/get-shapes-by-type.yaml b/samples/powerpoint/shapes/get-shapes-by-type.yaml index 0884c6e36..9bca1519a 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' @@ -95,11 +95,10 @@ script: } language: typescript template: - content: >- + content: |-

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

      -

      Setup

      Create some shapes in a new, blank presentation.

      @@ -138,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 + https://unpkg.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 d1ece7f9d..8685c527e 100644 --- a/samples/powerpoint/shapes/shapes.yaml +++ b/samples/powerpoint/shapes/shapes.yaml @@ -1,6 +1,6 @@ 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' @@ -151,11 +151,10 @@ script: } language: typescript template: - content: >- + 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.

      @@ -213,4 +212,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@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/powerpoint/slide-management/add-slides.yaml b/samples/powerpoint/slide-management/add-slides.yaml index 965f82142..74e68bd1e 100644 --- a/samples/powerpoint/slide-management/add-slides.yaml +++ b/samples/powerpoint/slide-management/add-slides.yaml @@ -6,13 +6,9 @@ host: POWERPOINT api_set: PowerPointApi: '1.3' script: - content: >- - document.getElementById("slide-masters").addEventListener("click", () => - tryCatch(logSlideMasters)); - - document.getElementById("add-slide").addEventListener("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; @@ -29,7 +25,6 @@ script: }); } - async function logSlideMasters() { await PowerPoint.run(async function(context) { // Load information about all the slide masters and associated layouts. @@ -50,9 +45,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ - async function tryCatch(callback) { try { await callback(); @@ -63,11 +56,10 @@ script: } language: typescript template: - content: >- + 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 - - 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)); - + content: |- + 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. @@ -56,7 +46,6 @@ script: $("#outputSpan").append(finalTable); }); } - async function deleteSlides() { // Deletes the selected slides. await PowerPoint.run(async (context) => { @@ -72,7 +61,6 @@ script: }); } - async function setSelectedSlides() { // Selects slides 2, 4, and 5. await PowerPoint.run(async (context) => { @@ -96,9 +84,7 @@ script: }); } - let savedSlideSelection = []; - async function saveSlideSelection() { // Saves which slides are currently selected so they can be reselected later. await PowerPoint.run(async (context) => { @@ -124,7 +110,6 @@ script: }); } - async function loadSlideSelection() { // Sets selection to the slides that were saved. await PowerPoint.run(async (context) => { @@ -133,9 +118,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ - async function tryCatch(callback) { try { await callback(); @@ -146,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

      @@ -186,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 + https://unpkg.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 2fdd0253b..1e86a7752 100644 --- a/samples/powerpoint/slide-management/get-slide-metadata.yaml +++ b/samples/powerpoint/slide-management/get-slide-metadata.yaml @@ -1,15 +1,13 @@ 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: {} script: - content: >- - document.getElementById("get-slide-metadata").addEventListener("click", - getSlideMetadata); - + content: |- + document.getElementById("get-slide-metadata").addEventListener("click", getSlideMetadata); function getSlideMetadata() { Office.context.document.getSelectedDataAsync(Office.CoercionType.SlideRange, @@ -24,12 +22,11 @@ script: } language: typescript template: - content: >- + 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).

      - @@ -52,4 +49,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@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/powerpoint/slide-management/insert-slides.yaml b/samples/powerpoint/slide-management/insert-slides.yaml index 5f35bac61..d247a007a 100644 --- a/samples/powerpoint/slide-management/insert-slides.yaml +++ b/samples/powerpoint/slide-management/insert-slides.yaml @@ -67,11 +67,10 @@ script: } language: typescript template: - content: >- + content: |-

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

      -

      Try it out

      @@ -114,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 + https://unpkg.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 adc799612..94b85c9c3 100644 --- a/samples/powerpoint/tags/tags.yaml +++ b/samples/powerpoint/tags/tags.yaml @@ -150,7 +150,7 @@ script: } language: typescript template: - content: >- + content: |-

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

      @@ -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 + https://unpkg.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/text/get-set-textrange.yaml b/samples/powerpoint/text/get-set-textrange.yaml index 3e8d87597..2cfed52fb 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' @@ -148,11 +148,10 @@ script: } language: typescript template: - content: >- + content: |-

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

      -

      Try it out

      @@ -188,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 + https://unpkg.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 73e45d256..f8d4d189a 100644 --- a/samples/project/basics/basic-common-api-call.yaml +++ b/samples/project/basics/basic-common-api-call.yaml @@ -1,17 +1,15 @@ order: 1000 id: project-basics-basic-common-api-call name: Basic API call (Office 2013) -description: Executes a basic Project API call using the "common API" syntax - (compatible with Office 2013). +description: Executes a basic Project API call using the "common API" syntax (compatible with Office 2013). author: OfficeDev host: PROJECT api_set: Selection: 1.1 script: - content: >- + content: |- document.getElementById("run").addEventListener("click", run); - function run() { Office.context.document.getSelectedDataAsync(Office.CoercionType.Text, (asyncResult) => { if (asyncResult.status === Office.AsyncResultStatus.Failed) { @@ -36,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 + https://unpkg.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 132b50fa5..c73af1eeb 100644 --- a/samples/project/default.yaml +++ b/samples/project/default.yaml @@ -5,10 +5,9 @@ author: OfficeDev host: PROJECT api_set: {} script: - content: >- + content: |- document.getElementById("run").addEventListener("click", run); - function run() { Office.context.document.getSelectedDataAsync(Office.CoercionType.Text, (asyncResult) => { if (asyncResult.status === Office.AsyncResultStatus.Failed) { @@ -43,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 + https://unpkg.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-es5.yaml b/samples/word/01-basics/basic-api-call-es5.yaml index 5489c4969..a9cdf506b 100644 --- a/samples/word/01-basics/basic-api-call-es5.yaml +++ b/samples/word/01-basics/basic-api-call-es5.yaml @@ -7,10 +7,8 @@ host: WORD api_set: WordApi: '1.1' script: - content: >- - document.getElementById("run").addEventListener("click", () => - tryCatch(run)); - + content: |- + document.getElementById("run").addEventListener("click", () => tryCatch(run)); function run() { return Word.run(function (context) { @@ -25,9 +23,7 @@ script: }); } - // Default helper for invoking an action and handling errors. - function tryCatch(callback) { Promise.resolve() .then(callback) @@ -38,11 +34,10 @@ 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".
      - @@ -65,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 + https://unpkg.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 40f6803f4..6aab3ed8e 100644 --- a/samples/word/01-basics/basic-api-call.yaml +++ b/samples/word/01-basics/basic-api-call.yaml @@ -7,10 +7,8 @@ host: WORD api_set: WordApi: '1.1' script: - content: >- - document.getElementById("run").addEventListener("click", () => - tryCatch(run)); - + content: |- + document.getElementById("run").addEventListener("click", () => tryCatch(run)); async function run() { // Gets the current selection and changes the font color to red. @@ -25,9 +23,7 @@ script: }); } - // Default helper for invoking an action and handling errors. - async function tryCatch(callback) { try { await callback(); @@ -39,11 +35,10 @@ 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".
      - @@ -66,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 + https://unpkg.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 9c81c084a..d1b374d41 100644 --- a/samples/word/01-basics/basic-common-api-call.yaml +++ b/samples/word/01-basics/basic-common-api-call.yaml @@ -1,17 +1,15 @@ order: 3 id: word-basics-basic-common-api-call name: Basic API call (Office 2013) -description: Performs a basic Word API call using JavaScript with 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: Selection: 1.1 script: - content: >- + content: |- document.getElementById("run").addEventListener("click", run); - function run() { Office.context.document.getSelectedDataAsync(Office.CoercionType.Text, (asyncResult) => { if (asyncResult.status === Office.AsyncResultStatus.Failed) { @@ -23,11 +21,10 @@ 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".
      - @@ -50,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 + https://unpkg.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 61130df44..2ee82194f 100644 --- a/samples/word/10-content-controls/content-control-onadded-event.yaml +++ b/samples/word/10-content-controls/content-control-onadded-event.yaml @@ -1,8 +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' @@ -90,18 +89,16 @@ script: } language: typescript template: - content: >- + content: |-
      This sample demonstrates how to use the onAdded event with content controls.
      -

      Set up

      -

      Try it out

      Register event handler. @@ -136,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 + https://unpkg.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 ba044f4ff..976769d1a 100644 --- a/samples/word/10-content-controls/content-control-ondatachanged-event.yaml +++ b/samples/word/10-content-controls/content-control-ondatachanged-event.yaml @@ -1,8 +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' @@ -107,18 +106,16 @@ script: } language: typescript template: - content: >- + content: |-
      This sample demonstrates how to use the onDataChanged event on content controls.
      -

      Set up

      -

      Try it out

      1. Insert content controls. @@ -154,4 +151,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@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/word/10-content-controls/content-control-ondeleted-event.yaml b/samples/word/10-content-controls/content-control-ondeleted-event.yaml index a989ad34a..e98eec7af 100644 --- a/samples/word/10-content-controls/content-control-ondeleted-event.yaml +++ b/samples/word/10-content-controls/content-control-ondeleted-event.yaml @@ -1,8 +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' @@ -124,18 +123,16 @@ script: } language: typescript template: - content: >- + content: |-
      This sample demonstrates how to use the onDeleted event on content controls.
      -

      Set up

      -

      Try it out

      Insert content controls. @@ -174,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 + https://unpkg.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 00b59bf49..4c7128dc0 100644 --- a/samples/word/10-content-controls/content-control-onentered-event.yaml +++ b/samples/word/10-content-controls/content-control-onentered-event.yaml @@ -1,8 +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' @@ -107,18 +106,16 @@ script: } language: typescript template: - content: >- + content: |-
      This sample demonstrates how to use the onEntered event on content controls.
      -

      Set up

      -

      Try it out

      1. Insert content controls. @@ -154,4 +151,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@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/word/10-content-controls/content-control-onexited-event.yaml b/samples/word/10-content-controls/content-control-onexited-event.yaml index 68c2457c2..c2e5b4eab 100644 --- a/samples/word/10-content-controls/content-control-onexited-event.yaml +++ b/samples/word/10-content-controls/content-control-onexited-event.yaml @@ -1,8 +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' @@ -107,18 +106,16 @@ script: } language: typescript template: - content: >- + content: |-
      This sample demonstrates how to use the onExited event on content controls.
      -

      Set up

      -

      Try it out

      1. Insert content controls. @@ -155,4 +152,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@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/word/10-content-controls/content-control-onselectionchanged-event.yaml b/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml index fbaa0801b..989a07ac1 100644 --- a/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml +++ b/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml @@ -1,8 +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' @@ -106,18 +105,16 @@ script: } language: typescript template: - content: >- + content: |-
      This sample demonstrates how to use the onSelectionChanged event on content controls.
      -

      Set up

      -

      Try it out

      1. Insert content controls. @@ -153,4 +150,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@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/word/10-content-controls/get-change-tracking-states.yaml b/samples/word/10-content-controls/get-change-tracking-states.yaml index d3bb4f366..b59d84146 100644 --- a/samples/word/10-content-controls/get-change-tracking-states.yaml +++ b/samples/word/10-content-controls/get-change-tracking-states.yaml @@ -117,18 +117,16 @@ script: } language: typescript template: - content: >- + content: |-
      This sample demonstrates how to insert and delete control controls then get their change tracking state.
      -

      Set up

      -

      Try it out

      -

      Try it out

      @@ -255,4 +237,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@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/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 6c5b43f7f..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 @@ -1,33 +1,19 @@ 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' script: - 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)); - + 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. @@ -40,7 +26,6 @@ script: }); } - async function addItemToComboBoxContentControl() { // Adds the provided list item to the first combo box content control in the selection. await Word.run(async (context) => { @@ -77,7 +62,6 @@ script: }); } - async function getListFromComboBoxContentControl() { // Gets the list items from the first combo box content control found in the selection. await Word.run(async (context) => { @@ -112,7 +96,6 @@ script: }); } - async function deleteItemFromComboBoxContentControl() { // Deletes the provided list item from the first combo box content control in the selection. await Word.run(async (context) => { @@ -160,7 +143,6 @@ script: }); } - async function deleteListFromComboBoxContentControl() { // Deletes the list items from first combo box content control found in the selection. await Word.run(async (context) => { @@ -194,7 +176,6 @@ script: }); } - async function deleteComboBoxContentControl() { // Deletes the first combo box content control found in the selection. await Word.run(async (context) => { @@ -228,7 +209,6 @@ script: }); } - async function setup() { await Word.run(async (context) => { const body: Word.Body = context.document.body; @@ -248,9 +228,7 @@ script: }); } - // Default helper for invoking an action and handling errors. - async function tryCatch(callback) { try { await callback(); @@ -265,18 +243,16 @@ script: } language: typescript template: - content: >- + content: |-

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

      Set up

      -

      Try it out

      @@ -343,4 +319,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@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/word/10-content-controls/insert-and-change-content-controls.yaml b/samples/word/10-content-controls/insert-and-change-content-controls.yaml index c851bffbe..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 @@ -1,22 +1,16 @@ 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: WordApi: '1.1' script: - content: >- - document.getElementById("insert-controls").addEventListener("click", () - => tryCatch(insertContentControls)); - - document.getElementById("change-controls").addEventListener("click", () - => tryCatch(modifyContentControls)); - - document.getElementById("setup").addEventListener("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. @@ -41,7 +35,6 @@ script: }); } - async function modifyContentControls() { // Adds title and colors to odd and even content controls and changes their appearance. await Word.run(async (context) => { @@ -77,7 +70,6 @@ script: }); } - async function setup() { await Word.run(async (context) => { const body: Word.Body = context.document.body; @@ -97,9 +89,7 @@ script: }); } - // Default helper for invoking an action and handling errors. - async function tryCatch(callback) { try { await callback(); @@ -110,18 +100,16 @@ script: } language: typescript template: - content: >- + content: |-

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

      Set up

      -

      Try it out

      Insert content controls on each paragraph. @@ -152,4 +140,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@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/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 7c2206a84..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 @@ -1,33 +1,19 @@ 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' script: - 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)); - + 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. @@ -40,7 +26,6 @@ script: }); } - async function addItemToDropdownListContentControl() { // Adds the provided list item to the first dropdown list content control in the selection. await Word.run(async (context) => { @@ -77,7 +62,6 @@ script: }); } - async function getListFromDropdownListContentControl() { // Gets the list items from the first dropdown list content control found in the selection. await Word.run(async (context) => { @@ -112,7 +96,6 @@ script: }); } - async function deleteItemFromDropdownListContentControl() { // Deletes the provided list item from the first dropdown list content control in the selection. await Word.run(async (context) => { @@ -160,7 +143,6 @@ script: }); } - async function deleteListFromDropdownListContentControl() { // Deletes the list items from first dropdown list content control found in the selection. await Word.run(async (context) => { @@ -196,7 +178,6 @@ script: }); } - async function deleteDropdownListContentControl() { // Deletes the first dropdown list content control found in the selection. await Word.run(async (context) => { @@ -230,7 +211,6 @@ script: }); } - async function setup() { await Word.run(async (context) => { const body: Word.Body = context.document.body; @@ -250,9 +230,7 @@ script: }); } - // Default helper for invoking an action and handling errors. - async function tryCatch(callback) { try { await callback(); @@ -267,18 +245,16 @@ script: } language: typescript template: - content: >- + content: |-
      This sample demonstrates how to insert, change, and delete dropdown list content controls.
      -

      Set up

      -

      Try it out

      @@ -345,4 +321,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@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/word/15-images/insert-and-get-pictures.yaml b/samples/word/15-images/insert-and-get-pictures.yaml index 8962b2220..ee39795ab 100644 --- a/samples/word/15-images/insert-and-get-pictures.yaml +++ b/samples/word/15-images/insert-and-get-pictures.yaml @@ -6,16 +6,10 @@ host: WORD api_set: WordApiDesktop: '1.1' script: - content: >- - document.getElementById("setup").addEventListener("click", () => - tryCatch(setup)); - - document.getElementById("insert").addEventListener("click", () => - tryCatch(insertImage)); - - document.getElementById("get").addEventListener("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. @@ -29,7 +23,6 @@ script: }); } - async function getImage() { // Gets the first image in the document. await Word.run(async (context) => { @@ -46,7 +39,6 @@ script: }); } - async function setup() { // Sets up by adding a dummy paragraph. await Word.run(async (context) => { @@ -65,9 +57,7 @@ script: }); } - // Default helper for invoking an action and handling errors. - async function tryCatch(callback) { try { await callback(); @@ -77,23 +67,20 @@ script: } } - const base64Image = "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"; language: typescript template: - content: >- + content: |-

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

      Set up

      -

      Try it out

      -

      Try it out

      - Select an insertion point in the - document.

      + Select an insertion point in the document.

      @@ -131,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 + https://unpkg.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 5fb492b8e..06c427331 100644 --- a/samples/word/25-paragraph/get-text.yaml +++ b/samples/word/25-paragraph/get-text.yaml @@ -1,20 +1,15 @@ 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: WordApi: '1.7' script: - content: >- - document.getElementById("run").addEventListener("click", () => - tryCatch(run)); - - document.getElementById("setup").addEventListener("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) => { @@ -30,7 +25,6 @@ script: }); } - async function setup() { await Word.run(async (context) => { const body: Word.Body = context.document.body; @@ -46,9 +40,7 @@ script: }); } - // Default helper for invoking an action and handling errors. - async function tryCatch(callback) { try { await callback(); @@ -59,7 +51,7 @@ script: } language: typescript template: - content: >- + content: |-

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

        @@ -75,14 +67,12 @@ template: Word.
      -

      Set up

      -

      Try it out

      -

      Try it out

      Get the word/term count. @@ -134,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 + https://unpkg.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 da3f948d9..66b2fe227 100644 --- a/samples/word/25-paragraph/insert-formatted-text.yaml +++ b/samples/word/25-paragraph/insert-formatted-text.yaml @@ -7,16 +7,10 @@ host: WORD api_set: WordApi: '1.1' script: - content: >- - document.getElementById("add-text").addEventListener("click", () => - tryCatch(addFormattedText)); - - document.getElementById("add-paragraph").addEventListener("click", () => - tryCatch(addFormattedParagraph)); - - document.getElementById("add-preset").addEventListener("click", () => - tryCatch(addPreStyledFormattedText)); - + content: |- + 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) => { @@ -37,7 +31,6 @@ script: }); } - async function addFormattedParagraph() { await Word.run(async (context) => { // Second sentence, let's insert it as a paragraph after the previously inserted one. @@ -57,7 +50,6 @@ script: }); } - async function addPreStyledFormattedText() { await Word.run(async (context) => { const sentence: Word.Paragraph = context.document.body.insertParagraph( @@ -72,9 +64,7 @@ script: }); } - // Default helper for invoking an action and handling errors. - async function tryCatch(callback) { try { await callback(); @@ -85,11 +75,10 @@ script: } language: typescript template: - content: >- + content: |-
      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

      Compare location of first paragraph with location of second paragraph

      @@ -124,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 + https://unpkg.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 dc85af070..bc4ec0029 100644 --- a/samples/word/35-ranges/scroll-to-range.yaml +++ b/samples/word/35-ranges/scroll-to-range.yaml @@ -7,16 +7,10 @@ host: WORD api_set: WordApi: '1.2' script: - content: >- - document.getElementById("setup").addEventListener("click", () => - tryCatch(setup)); - - document.getElementById("scroll").addEventListener("click", () => - tryCatch(scroll)); - - document.getElementById("scroll-end").addEventListener("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) => { @@ -27,7 +21,6 @@ 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. @@ -37,7 +30,6 @@ script: }); } - async function setup() { await Word.run(async (context) => { const body: Word.Body = context.document.body; @@ -56,9 +48,7 @@ script: }); } - // Default helper for invoking an action and handling errors. - async function tryCatch(callback) { try { await callback(); @@ -107,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 + https://unpkg.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/split-words-of-first-paragraph.yaml b/samples/word/35-ranges/split-words-of-first-paragraph.yaml index ec6e6c17b..ab281397b 100644 --- a/samples/word/35-ranges/split-words-of-first-paragraph.yaml +++ b/samples/word/35-ranges/split-words-of-first-paragraph.yaml @@ -1,20 +1,15 @@ 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: WordApi: '1.3' script: - content: >- - document.getElementById("setup").addEventListener("click", () => - tryCatch(setup)); - - document.getElementById("highlight").addEventListener("click", () => - tryCatch(highlightWords)); - + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("highlight").addEventListener("click", () => tryCatch(highlightWords)); async function highlightWords() { await Word.run(async (context) => { @@ -36,12 +31,10 @@ script: }); } - function pause(milliseconds) { return new Promise((resolve) => setTimeout(resolve, milliseconds)); } - async function setup() { await Word.run(async (context) => { const body: Word.Body = context.document.body; @@ -59,7 +52,6 @@ script: }); } - async function tryCatch(callback) { try { await callback(); @@ -105,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 + https://unpkg.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 9e9444dc2..866087b30 100644 --- a/samples/word/40-tables/manage-custom-style.yaml +++ b/samples/word/40-tables/manage-custom-style.yaml @@ -1,8 +1,7 @@ order: 3 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. +description: Shows how to manage primarily margins and alignments of a custom table style in the current document. host: WORD api_set: WordApiDesktop: '1.1' @@ -332,14 +331,13 @@ script: } language: typescript template: - content: >- + 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

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

      Update custom style

      @@ -391,7 +387,6 @@ template: Set allowBreakAcrossPage property
      -
      @@ -400,7 +395,6 @@ template: Set top cell margin
      -
      @@ -409,7 +403,6 @@ template: Set bottom cell margin
      -
      @@ -418,7 +411,6 @@ template: Set left cell margin
      -
      @@ -427,7 +419,6 @@ template: Set right cell margin
      -
      @@ -436,7 +427,6 @@ template: Set cell spacing
      -

      Delete custom style

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

      Import styles from JSON string

      -

      Try it out

      Table formatting

      @@ -238,4 +235,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@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/word/40-tables/table-cell-access.yaml b/samples/word/40-tables/table-cell-access.yaml index e27e07b23..ea3f037f8 100644 --- a/samples/word/40-tables/table-cell-access.yaml +++ b/samples/word/40-tables/table-cell-access.yaml @@ -7,13 +7,9 @@ host: WORD api_set: WordApi: '1.3' script: - content: >- - document.getElementById("run").addEventListener("click", () => - tryCatch(getTableCell)); - - document.getElementById("setup").addEventListener("click", () => - tryCatch(insertTable)); - + content: |- + document.getElementById("run").addEventListener("click", () => tryCatch(getTableCell)); + document.getElementById("setup").addEventListener("click", () => tryCatch(insertTable)); async function getTableCell() { // Gets the content of the first cell in the first table. @@ -26,7 +22,6 @@ script: }); } - async function insertTable() { await Word.run(async (context) => { // Use a two-dimensional array to hold the initial table values. @@ -42,9 +37,7 @@ script: }); } - // Default helper for invoking an action and handling errors. - async function tryCatch(callback) { try { await callback(); @@ -90,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 + https://unpkg.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 54abae3f7..5d5d3afaf 100644 --- a/samples/word/50-document/compare-documents.yaml +++ b/samples/word/50-document/compare-documents.yaml @@ -7,10 +7,8 @@ host: WORD api_set: WordApiDesktop: '1.1' script: - content: >- - document.getElementById("run").addEventListener("click", () => - tryCatch(run)); - + content: |- + document.getElementById("run").addEventListener("click", () => tryCatch(run)); async function run() { // Compares the current document with a specified external document. @@ -33,9 +31,7 @@ script: }); } - // Default helper for invoking an action and handling errors. - async function tryCatch(callback) { try { await callback(); @@ -46,11 +42,10 @@ script: } language: typescript template: - content: >- + content: |-

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

      -

      Try it out

      @@ -78,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 + https://unpkg.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/get-external-styles.yaml b/samples/word/50-document/get-external-styles.yaml index c16255028..41677d3c8 100644 --- a/samples/word/50-document/get-external-styles.yaml +++ b/samples/word/50-document/get-external-styles.yaml @@ -6,16 +6,12 @@ host: WORD api_set: WordApi: '1.5' script: - content: >- + content: |- $("#file").on("change", getBase64); - - document.getElementById("get-external-styles").addEventListener("click", - () => tryCatch(getExternalStyles)); - + document.getElementById("get-external-styles").addEventListener("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) => { @@ -26,7 +22,6 @@ script: }); } - function getBase64() { // Retrieve the file and set up an HTML FileReader element. const myFile = document.getElementById("file"); @@ -42,9 +37,7 @@ script: reader.readAsDataURL(myFile.files[0]); } - // Default helper for invoking an action and handling errors. - async function tryCatch(callback) { try { await callback(); @@ -55,11 +48,10 @@ script: } language: typescript template: - content: >- + content: |-
      This sample demonstrates how to get styles from an external document.
      -

      Try it out

      Select a Word document to get its style info.

      @@ -90,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 + https://unpkg.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-external-document.yaml b/samples/word/50-document/insert-external-document.yaml index 015ab84c7..2c8f00b6e 100644 --- a/samples/word/50-document/insert-external-document.yaml +++ b/samples/word/50-document/insert-external-document.yaml @@ -1,9 +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' @@ -83,11 +81,10 @@ script: } language: typescript template: - content: >- + 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.

      @@ -124,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 + https://unpkg.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 d13fd0aa9..a8e6f38d3 100644 --- a/samples/word/50-document/insert-section-breaks.yaml +++ b/samples/word/50-document/insert-section-breaks.yaml @@ -89,11 +89,10 @@ script: } language: typescript template: - content: >- + 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

      -

      Try it out

      -

      Try it out

      -

      Try it out

      Get current change tracking mode

      @@ -146,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 + https://unpkg.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 23ff2f4a5..7593ebb46 100644 --- a/samples/word/50-document/manage-comments.yaml +++ b/samples/word/50-document/manage-comments.yaml @@ -1,8 +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' @@ -215,18 +214,16 @@ script: } language: typescript template: - content: >- + content: |-

      This sample shows basic operations using comments.

      -

      Set up

      -

      Try it out

      Manage comments in selection

      @@ -303,4 +300,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@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/word/50-document/manage-custom-xml-part-ns.yaml b/samples/word/50-document/manage-custom-xml-part-ns.yaml index 5b976c0db..84d012fdb 100644 --- a/samples/word/50-document/manage-custom-xml-part-ns.yaml +++ b/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -1,8 +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' @@ -253,12 +252,11 @@ script: } language: typescript template: - content: >- + 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

      @@ -242,4 +239,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@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/word/50-document/manage-footnotes.yaml b/samples/word/50-document/manage-footnotes.yaml index 2f29eb674..89ece99b7 100644 --- a/samples/word/50-document/manage-footnotes.yaml +++ b/samples/word/50-document/manage-footnotes.yaml @@ -1,8 +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' @@ -167,18 +166,16 @@ script: } language: typescript template: - content: >- + content: |-

      This sample shows basic operations using footnotes.

      -

      Set up

      -

      Try it out

      Insert footnote

      @@ -244,4 +241,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@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/word/50-document/manage-settings.yaml b/samples/word/50-document/manage-settings.yaml index 1ce672d0b..b80adc658 100644 --- a/samples/word/50-document/manage-settings.yaml +++ b/samples/word/50-document/manage-settings.yaml @@ -1,22 +1,15 @@ 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' script: - 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)); - + 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 @@ -44,7 +37,6 @@ script: }); } - async function getAllSettings() { // Gets all custom settings this add-in set on this document. await Word.run(async (context) => { @@ -63,7 +55,6 @@ script: }); } - async function deleteAllSettings() { // Deletes all custom settings this add-in had set on this document. await Word.run(async (context) => { @@ -74,9 +65,7 @@ script: }); } - // Default helper for invoking an action and handling errors. - async function tryCatch(callback) { try { await callback(); @@ -87,13 +76,12 @@ script: } language: typescript template: - content: >- + 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

      @@ -136,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 + https://unpkg.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 26b49310d..f798edc85 100644 --- a/samples/word/50-document/manage-styles.yaml +++ b/samples/word/50-document/manage-styles.yaml @@ -1,40 +1,21 @@ 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. +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: WordApiDesktop: '1.1' script: - 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)); - + 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. @@ -47,7 +28,6 @@ script: }); } - async function addStyle() { // Adds a new style. await Word.run(async (context) => { @@ -76,7 +56,6 @@ script: }); } - async function getProperties() { // Gets the properties of the specified style. await Word.run(async (context) => { @@ -102,7 +81,6 @@ script: }); } - async function applyStyle() { // Applies the specified style to a paragraph. await Word.run(async (context) => { @@ -134,7 +112,6 @@ script: }); } - async function setFontProperties() { // Updates font properties (e.g., color, size) of the specified style. await Word.run(async (context) => { @@ -159,7 +136,6 @@ 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) => { @@ -183,7 +159,6 @@ script: }); } - async function setBorderProperties() { // Updates border properties (e.g., type, width, color) of the specified style. await Word.run(async (context) => { @@ -212,7 +187,6 @@ script: }); } - async function setShadingProperties() { // Updates shading properties (e.g., texture, pattern colors) of the specified style. await Word.run(async (context) => { @@ -242,7 +216,6 @@ script: }); } - async function deleteStyle() { // Deletes the custom style. await Word.run(async (context) => { @@ -265,9 +238,7 @@ script: }); } - // Default helper for invoking an action and handling errors. - async function tryCatch(callback) { try { await callback(); @@ -278,11 +249,10 @@ script: } language: typescript template: - content: >- + content: |-
      This sample demonstrates how to manage styles.
      -

      Try it out

      @@ -369,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 + https://unpkg.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 ac11023a9..f692ef0e9 100644 --- a/samples/word/50-document/manage-tracked-changes.yaml +++ b/samples/word/50-document/manage-tracked-changes.yaml @@ -1,8 +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' @@ -149,18 +148,16 @@ script: } language: typescript template: - content: >- + content: |-

      This sample shows how to manage tracked changes.
      -

      Set up

      -

      Try it out

      -

      First, choose the Add sample text button.

      -

      Replace placeholder text

      -

      Try it out

      Set the styling of the first paragraph.

      @@ -111,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 + https://unpkg.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 175488217..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 @@ -1,27 +1,17 @@ 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: WordApi: '1.9' script: - 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)); - + 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. @@ -46,7 +36,6 @@ script: }); } - async function modifyContentControls() { // Adds title and colors to odd and even content controls and changes their appearance. await Word.run(async (context) => { @@ -82,7 +71,6 @@ script: }); } - async function setState() { // Sets the state of the first content control. await Word.run(async (context) => { @@ -103,7 +91,6 @@ script: }); } - async function resetState() { // Resets the state of the first content control. await Word.run(async (context) => { @@ -123,7 +110,6 @@ script: }); } - async function setup() { await Word.run(async (context) => { const body: Word.Body = context.document.body; @@ -143,9 +129,7 @@ script: }); } - // Default helper for invoking an action and handling errors. - async function tryCatch(callback) { try { await callback(); @@ -156,18 +140,16 @@ script: } language: typescript template: - content: >- + content: |-
      This sample demonstrates how to insert content controls and change their properties.
      -

      Set up

      -

      Try it out

      Insert content controls on each paragraph. @@ -215,4 +197,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 + https://unpkg.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 c02f25be0..679effec6 100644 --- a/samples/word/99-preview-apis/manage-comments.yaml +++ b/samples/word/99-preview-apis/manage-comments.yaml @@ -1,7 +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.9' @@ -267,21 +266,19 @@ script: } language: typescript template: - content: >- + 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

      @@ -368,4 +365,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 + https://unpkg.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 6a8e696c8..9d45b151a 100644 --- a/samples/word/default.yaml +++ b/samples/word/default.yaml @@ -6,10 +6,8 @@ host: WORD api_set: WordApi: '1.1' script: - content: >- - document.getElementById("run").addEventListener("click", () => - tryCatch(run)); - + content: |- + document.getElementById("run").addEventListener("click", () => tryCatch(run)); async function run() { await Word.run(async (context) => { @@ -21,9 +19,7 @@ script: }); } - // Default helper for invoking an action and handling errors. - async function tryCatch(callback) { try { await callback(); @@ -58,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 + https://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