From f84f8c140e9fd39854b78e8a4d7f9198687f944c Mon Sep 17 00:00:00 2001 From: Karl Kemister-Sheppard Date: Wed, 13 Dec 2023 12:08:14 +1000 Subject: [PATCH 1/3] DOC-2225: TinyMCE 6.8.2 release notes. (#3029) * DOC-2225: TinyMCE 6.8.2 release notes. * DOC-2225: added fix documentation for TINY-9967, TINY-10380 & TINY-10414. * DOC-2225: add fix documentation for TINY-10426, TINY-10435 and TINY-10435. including removal of duplicate 6.7.2 entry in changelog.adoc. * Update modules/ROOT/pages/6.8.2-release-notes.adoc * Update modules/ROOT/pages/6.8.2-release-notes.adoc * Update modules/ROOT/pages/6.8.2-release-notes.adoc * Update modules/ROOT/pages/6.8.2-release-notes.adoc Co-authored-by: spocke * Update modules/ROOT/pages/6.8.2-release-notes.adoc Co-authored-by: mkzhx * Update modules/ROOT/pages/6.8.2-release-notes.adoc Co-authored-by: mkzhx * Update modules/ROOT/pages/6.8.2-release-notes.adoc Co-authored-by: mkzhx --------- Co-authored-by: spocke Co-authored-by: mkzhx --- changelog.md | 6 ++ modules/ROOT/nav.adoc | 4 + modules/ROOT/pages/6.8.2-release-notes.adoc | 89 +++++++++++++++++++++ modules/ROOT/pages/changelog.adoc | 8 -- modules/ROOT/pages/release-notes.adoc | 6 ++ 5 files changed, 105 insertions(+), 8 deletions(-) create mode 100644 modules/ROOT/pages/6.8.2-release-notes.adoc diff --git a/changelog.md b/changelog.md index 075ecd39c1..9acd7d7845 100644 --- a/changelog.md +++ b/changelog.md @@ -6,6 +6,12 @@ The format is loosely based on [Keep a Changelog](https://keepachangelog.com/en/ ### Unreleased +### 2023-12-13 + +- DOC-2225: added `6.8.2-release-notes.adoc` to project; updated `changelog.adoc`, `nav.adoc` and `release-notes.adoc` for the TinyMCE 6.8.2 release. + +### 2023-12-08 + - DOC-2230: add new `How to fix invalid API key in TinyMCE` page to `tinymce/docs` project. ### 2023-12-06 diff --git a/modules/ROOT/nav.adoc b/modules/ROOT/nav.adoc index 19a17b7837..f1c21463ad 100644 --- a/modules/ROOT/nav.adoc +++ b/modules/ROOT/nav.adoc @@ -405,6 +405,10 @@ ** xref:tinymce-and-cors.adoc[Cross-Origin Resource Sharing (CORS)] * Release information ** xref:release-notes.adoc[Release notes for TinyMCE 6] +*** TinyMCE 6.8.2 +**** xref:6.8.2-release-notes.adoc#overview[Overview] +**** xref:6.8.2-release-notes.adoc#accompanying-premium-plugin-changes[Accompanying Premium Plugin changes] +**** xref:6.8.2-release-notes.adoc#bug-fixes[Bug fixes] *** TinyMCE 6.8.1 **** xref:6.8.1-release-notes.adoc#overview[Overview] **** xref:6.8.1-release-notes.adoc#accompanying-premium-plugin-changes[Accompanying Premium Plugin changes] diff --git a/modules/ROOT/pages/6.8.2-release-notes.adoc b/modules/ROOT/pages/6.8.2-release-notes.adoc new file mode 100644 index 0000000000..ac5b0525bb --- /dev/null +++ b/modules/ROOT/pages/6.8.2-release-notes.adoc @@ -0,0 +1,89 @@ += {productname} 6.8.2 +:navtitle: {productname} 6.8.2 +:description: Release notes for {productname} 6.8.2 +:keywords: releasenotes, new, changes, bugfixes +:page-toclevels: 1 + +include::partial$misc/admon-releasenotes-for-stable.adoc[] + +[[overview]] +== Overview + +{productname} 6.8.2 was released for {enterpriseversion} and {cloudname} on Wednesday, December 13^th^, 2023. These release notes provide an overview of the changes for {productname} 6.8.2, including: + +* xref:accompanying-premium-plugin-changes[Accompanying Premium plugin changes] +* xref:bug-fixes[Bug fixes] + + +[[accompanying-premium-plugin-changes]] +== Accompanying Premium plugin changes + +The following premium plugin updates were released alongside {productname} 6.8.2. + +=== PowerPaste 6.2.4 + +The {productname} 6.8.2 release includes an accompanying release of the **PowerPaste** premium plugin. + +**PowerPaste** 6.2.4 includes the following fix. + +==== `white-space-collapse` CSS property was not correctly supported when pasting from Google Docs. +// #TINY-9967 +From major version 114, Google Chrome and Microsoft Edge added support for the CSS4 shorthand `white-space` property. The shorthand `white-space` property would be expanded into the `white-space-collapse` and `text-wrap` properties. This resulted in PowerPaste not being able to remove the `white-space-collapse` and `text-wrap` properties from the emitted content even after `white-space: pre` is removed. This issue was particularly noticeable when copying content from Google Docs. + +As of {productname} 6.8.2, PowerPaste now supports working with the shorthand `white-space` property by removing the expanded `white-space-collapse` and `text-wrap` properties when present from Google Docs content. + +For information on the **PowerPaste** plugin, see: xref:introduction-to-powerpaste.adoc[PowerPaste]. + + +[[bug-fixes]] +== Bug fixes + +{productname} 6.8.2 also includes the following bug fixes: + +=== Bespoke select toolbar buttons including `fontfamily`, `fontsize`, `blocks`, and `styles` incorrectly used plural words in their accessible names. +// #TINY-10426 + +As of {productname} 6.8.1, the accessible labels of bespoke select toolbar buttons announced both the name of the button and the current value of the visible selected option. However, some bespoke button names, including `fontfamily`, `fontsize`, `blocks`, and `styles` have plural names, such as “Fonts”. This resulted in incorrect grammar when combined with the current value, an example being "Fonts Arial". + +As of {productname} 6.8.2, the accessible labels of `fontfamily`, `fontsize`, `blocks`, and `styles` bespoke buttons use singular words for the names. This results in grammatically correct labels such as “Font Arial”. + +=== The `align` bespoke select toolbar button had an accessible name that was misleading and grammatically incorrect in certain cases. +// #TINY-10435 + +As of {productname} 6.8.1, the accessible label of the `align` bespoke select toolbar button announced both the name of the button, “Align”, and the currently selected value. This would result in the accessible label of the select button to be “Align left”, “Align right”, “Align center”, or “Align justify” depending on the value selected. However, the problem with the first three labels is that they are the same as the normal align toolbar buttons. This is misleading as unlike the normal align buttons, the bespoke button does not result in the aligning action, and instead opens a dropdown. The problem with “Align justify” is that the two verbs do not make grammatical sense in terms of describing the text alignment. + +As of {productname} 6.8.2, the name of the `align` bespoke select button is changed to “Alignment”, followed by the currently selected value. This results in the accessible labels being “Alignment left”, “Alignment right”, “Alignment center”, or “Alignment justify” depending on the value selected, which more clearly indicates the currently selected text alignment. + +=== Accessible names of bespoke select toolbar buttons including `align`, `fontfamily`, `fontsize`, `blocks`, and `styles` were incorrectly translated. +// #TINY-10426 #TINY-10435 + +As of {productname} 6.8.1, the accessible labels of the bespoke select toolbar buttons announced both the name of the button and the currently selected value, for example “Block Paragraph”. However, corresponding translation strings with placeholders were not added. This resulted in the current value being translated as expected, but not the name of the button. + +In {productname} 6.8.2, new translation strings were added to ensure names of the bespoke select toolbar buttons are translated as well, making their accessible labels appropriately internationalized. + +=== Clicking inside table cells with heavily nested content could cause the browser to hang. +// #TINY-10380 +Previously when clicking below content that is heavily nested inside a block such as a table cell, would cause the browser to hang. + +{productname} 6.8.2 addresses this, by optimizing algorithm that was causing the browser to hang. + +As a result, the browser no longer hangs, when clicking inside table cells with heavily nested content. + +=== Toggling a list that contains an LI element having another list as its first child would remove the remaining content within that LI element. +// #TINY-10414 +In a previous xref:6.7.2-release-notes.adoc#toggling-a-list-that-contained-a-list-item-element-li-which-in-turn-contained-another-list-item-element-as-its-first-child-removed-other-content-within-the-first-list-item-element[bugfix] for lists, some element structures would not recreate the `
  • ` tags when a list element was toggled using the `bullist` button in the toolbar. + +.Example structure +[source, html] +---- +
  • +
      ...
    + +
  • +---- + +As a consequence, any tags nested within the `
  • ` would be deleted from the {productname} document, resulting in content loss for the user. + +{productname} 6.8.2 addresses this by improving the representation of the list to manage this case. + +As a result, now, when toggling `
  • ` elements using the `bullist` button, content within a list is now correctly recreated the content is retained as expected. \ No newline at end of file diff --git a/modules/ROOT/pages/changelog.adoc b/modules/ROOT/pages/changelog.adoc index 714fa6a0b5..ec949812f4 100644 --- a/modules/ROOT/pages/changelog.adoc +++ b/modules/ROOT/pages/changelog.adoc @@ -73,14 +73,6 @@ NOTE: This is the {productname} Community version changelog. For information abo * Removed use of async for editor rendering which caused visual blinking when reloading the editor in-place. * Toggling a list that contained a list item element —
  • — which, in turn, contained another list item element as its first child, removed other content within the first list item element. -== 6.7.2 - 2023-10-25 - -=== Fixed -* The function `getModifierState` did not work on events passed through the editor as expected. -* Indenting or outdenting a list item that contained non list item siblings after it would result in those siblings being removed. -* Removed use of async for editor rendering which caused visual blinking when reloading the editor in-place. -* Toggling a list that contained a list item element —
  • — which, in turn, contained another list item element as its first child, removed other content within the first list item element. - == 6.7.1 - 2023-10-19 === Fixed diff --git a/modules/ROOT/pages/release-notes.adoc b/modules/ROOT/pages/release-notes.adoc index c4d79241b1..7ffe40984f 100644 --- a/modules/ROOT/pages/release-notes.adoc +++ b/modules/ROOT/pages/release-notes.adoc @@ -9,6 +9,12 @@ This section lists the releases for {productname} 6 and the changes made in each [cols="1,1"] |=== +a| +[.lead] +xref:6.8.2-release-notes.adoc#overview[{productname} 6.8.2] + +Release notes for {productname} 6.8.2 + a| [.lead] xref:6.8.1-release-notes.adoc#overview[{productname} 6.8.1] From 5f0a7d7aa2d766460fd3ab2c9585d2fa72ea9138 Mon Sep 17 00:00:00 2001 From: Mitchell Crompton Date: Tue, 19 Dec 2023 13:06:17 +1000 Subject: [PATCH 2/3] DOC-2220: Build `6` site in sync with `latest` site as new default (#3028) * DOC-2220: Add latest build * DOC-2220: Build site script * DOC-2220: Update staging and release docs to build latest site * DOC-2220: Fix links * DOC-2220: Update messages * DOC-2220: Change generation * DOC-2220: Update Changelog --- -scripts/generate-site.sh | 25 +++++++++++++++++++++ .github/workflows/feature_6_docs.yml | 2 +- .github/workflows/release_6_docs.yml | 2 +- .github/workflows/staging_6_docs.yml | 2 +- antora.yml | 5 +++-- changelog.md | 4 ++++ modules/ROOT/pages/6.4.1-release-notes.adoc | 4 ++-- modules/ROOT/pages/6.7.3-release-notes.adoc | 6 ++--- modules/ROOT/pages/6.8.1-release-notes.adoc | 6 ++--- package.json | 3 ++- 10 files changed, 45 insertions(+), 14 deletions(-) create mode 100755 -scripts/generate-site.sh diff --git a/-scripts/generate-site.sh b/-scripts/generate-site.sh new file mode 100755 index 0000000000..617c4d841e --- /dev/null +++ b/-scripts/generate-site.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +PLAYBOOK="$1" + + +BUILD_DIR="build" +SITE_DIR="$BUILD_DIR/site/tinymce" + +SOURCE_VERSION="latest" +SOURCE_DIR="$SITE_DIR/$SOURCE_VERSION/" + +DEST_VERSION=6 +DEST_DIR="$SITE_DIR/$DEST_VERSION/" + +echo -e "\nRemoving existing $SITE_DIR directory." +rm -rf "$BUILD_DIR" + +echo -e "\nGenerating antora documentation." +antora "$PLAYBOOK" + +echo -e "\nCopying all $SOURCE_VERSION content to $DEST_VERSION directory." +mkdir "$DEST_DIR" +cp -a "$SOURCE_DIR" "$DEST_DIR" + +echo "$DEST_VERSION site now in sync with $SOURCE_VERSION." diff --git a/.github/workflows/feature_6_docs.yml b/.github/workflows/feature_6_docs.yml index 79af8501cf..f6e3842cf7 100644 --- a/.github/workflows/feature_6_docs.yml +++ b/.github/workflows/feature_6_docs.yml @@ -34,7 +34,7 @@ jobs: run: yarn build - name: (Feature - Docs 6) Build Website - run: yarn antora ./antora-playbook-dev.yml + run: yarn generate-site ./antora-playbook-dev.yml - name: (deploy) Prepare for branch deployments shell: bash diff --git a/.github/workflows/release_6_docs.yml b/.github/workflows/release_6_docs.yml index 1d0127986a..a33072ab4d 100644 --- a/.github/workflows/release_6_docs.yml +++ b/.github/workflows/release_6_docs.yml @@ -33,7 +33,7 @@ jobs: run: yarn build - name: (Release - Docs 6) Build Website - run: yarn antora ./antora-playbook-prod.yml + run: yarn generate-site ./antora-playbook-prod.yml - name: (Release - Docs 6) Rename sitemap.xml (Temporary solution - Amit) shell: bash diff --git a/.github/workflows/staging_6_docs.yml b/.github/workflows/staging_6_docs.yml index 2368c11ebc..b52c2bff12 100644 --- a/.github/workflows/staging_6_docs.yml +++ b/.github/workflows/staging_6_docs.yml @@ -33,7 +33,7 @@ jobs: run: yarn build - name: (Staging - Docs 6) Build Website - run: yarn antora ./antora-playbook-staging.yml + run: yarn generate-site ./antora-playbook-staging.yml - name: (Staging - Docs 6) Rename sitemap.xml (Temporary solution - Amit) shell: bash diff --git a/antora.yml b/antora.yml index 7011a9243e..d4ed3cc5c5 100644 --- a/antora.yml +++ b/antora.yml @@ -1,6 +1,7 @@ name: tinymce title: TinyMCE Documentation -version: '6' +version: 'latest' +display_version: '6' asciidoc: attributes: # anchor configuration (the @ allows it to be overridden if required) @@ -18,7 +19,7 @@ asciidoc: # product variables productname: TinyMCE productmajorversion: 6 - productminorversion: '6.6' + productminorversion: '6.8' ##### product name in codeblock prodnamecode: tinymce #### more names diff --git a/changelog.md b/changelog.md index a4ecfb1903..9b2e10d957 100644 --- a/changelog.md +++ b/changelog.md @@ -6,6 +6,10 @@ The format is loosely based on [Keep a Changelog](https://keepachangelog.com/en/ ### Unreleased +### 2023-12-19 + +- DOC-2220: add generation of `latest` and `6` documentation in parallel. + ### 2023-12-13 - DOC-2225: added `6.8.2-release-notes.adoc` to project; updated `changelog.adoc`, `nav.adoc` and `release-notes.adoc` for the TinyMCE 6.8.2 release. diff --git a/modules/ROOT/pages/6.4.1-release-notes.adoc b/modules/ROOT/pages/6.4.1-release-notes.adoc index b7372d3a10..48c9c12180 100644 --- a/modules/ROOT/pages/6.4.1-release-notes.adoc +++ b/modules/ROOT/pages/6.4.1-release-notes.adoc @@ -598,7 +598,7 @@ As a result the when the instance occurs where **no match** is triggere === Color picker on toolbar would not update when changing forecolor or backcolor from menu //#TINY-9439 -In {productname} 6.3, when the https://www.tiny.cloud/docs/tinymce/6/6.3-release-notes/#new-color_map_foreground-and-color_map_background-options-store-custom-colors-selected-using-the-text-color-and-background-color-menus[new color map] was introduced, a regression was found that affected the UI for *Color Swatch*. +In {productname} 6.3, when the xref:6.3-release-notes.adoc#new-color_map_foreground-and-color_map_background-options-store-custom-colors-selected-using-the-text-color-and-background-color-menus[new color map] was introduced, a regression was found that affected the UI for *Color Swatch*. The issue occurred when a user would select a `forecolor` or `backcolor` via the `*Formats*` drop down menu, the color displayed on the color swatch toolbar buttons would not reflect the selected `forecolor` or `backcolor` respectively. @@ -623,7 +623,7 @@ In {productname} 6.4.1, changes were made to prevent descendants of an element w === Checkmark did not show in menu color swatches //#TINY-9395 -Previous versions of {productname} the known issue, (_https://www.tiny.cloud/docs/tinymce/6/6.3-release-notes/#checkmark-over-the-current-background-color-is-not-displayed-when-inline-formatting-is-applied-in-a-certain-order[checkmark-over-the-current-background-color-is-not-displayed-when-inline-formatting-is-applied-in-a-certain-order]_) was identified. As a consequence, when text was formatted in the following order, the *checkmark* over the currently active background color would not display in the Background color swatch menu: +Previous versions of {productname} the known issue, xref:6.3-release-notes.adoc#checkmark-over-the-current-background-color-is-not-displayed-when-inline-formatting-is-applied-in-a-certain-order[_checkmark over the current background color is not displayed when inline formatting is applied in a certain order_] was identified. As a consequence, when text was formatted in the following order, the *checkmark* over the currently active background color would not display in the Background color swatch menu: . When the user applied inline formatting, such as *bold* or _Italic_. . After applying a foreground(text) color. diff --git a/modules/ROOT/pages/6.7.3-release-notes.adoc b/modules/ROOT/pages/6.7.3-release-notes.adoc index 2f5f0d098b..88dc462a72 100644 --- a/modules/ROOT/pages/6.7.3-release-notes.adoc +++ b/modules/ROOT/pages/6.7.3-release-notes.adoc @@ -23,9 +23,9 @@ include::partial$misc/admon-releasenotes-for-stable.adoc[] A https://researchgate.net/publication/266654651_mXSS_attacks_Attacking_well-secured_web-applications_by_using_innerHTML_mutations[mutation cross-site scripting] (mXSS) vulnerability was discovered in {productname}’s core undo/redo functionality and other APIs and plugins. Text nodes within specific parents are not escaped upon serialization according to the https://html.spec.whatwg.org/multipage/parsing.html#serialising-html-fragments[HTML standard]. If such text nodes contain a special character reserved as an internal marker, they can be combined with other HTML patterns to form malicious snippets. These snippets pass the initial sanitization layer when the content is parsed into the editor body, but can trigger XSS when the special internal marker is removed from the content and re-parsed. Such mutations occur when serialized HTML content is processed before being stored in the undo stack, or when the following APIs and plugins are used: -* https://tiny.cloud/docs/tinymce/6/apis/tinymce.editor/#getContent[tinymce.Editor.getContent({ format: 'raw' })] -* https://tiny.cloud/docs/tinymce/6/apis/tinymce.editor/#resetContent[tinymce.Editor.resetContent()] -* https://tiny.cloud/docs/tinymce/6/autosave/[Autosave Plugin] +* xref:apis/tinymce.editor.adoc#getContent[tinymce.Editor.getContent({ format: 'raw' })] +* xref:apis/tinymce.editor.adoc#resetContent[tinymce.Editor.resetContent()] +* xref:autosave.adoc[Autosave Plugin] This vulnerability has been patched in {productname} 6.7.3 by: diff --git a/modules/ROOT/pages/6.8.1-release-notes.adoc b/modules/ROOT/pages/6.8.1-release-notes.adoc index 65d802e9b1..fde3e7255f 100644 --- a/modules/ROOT/pages/6.8.1-release-notes.adoc +++ b/modules/ROOT/pages/6.8.1-release-notes.adoc @@ -29,7 +29,7 @@ The {productname} 6.8.1 release includes an accompanying release of the **Advanc **Advanced Templates** 1.4.0 includes the following improvement and fix. -==== New `{{mce-clipboard}}` marker as a placeholder within template content, indicating the location where clipboard content will be inserted +==== New `{\{mce-clipboard\}}` marker as a placeholder within template content, indicating the location where clipboard content will be inserted // #TINY-9974 **Advanced Template** 1.4.0 introduces a new feature that allows templates to now include special markers, denoted as `+{{mce-clipboard}}+`. These markers serve as placeholders that indicate where clipboard content should be inserted once the template is added to the editor's content. @@ -61,7 +61,7 @@ As a result, when a user inserts a template containing the `+{{mce-clipboard}}+` NOTE: when the host browser is **FireFox**, the user will be prompted with a notification error, as it currently does not support clipboard reading. -==== The functionality of the `{{mce-cursor}}` marker feature was broken after the upgrade to {productname} 6.7.3 +==== The functionality of the `{\{mce-cursor\}}` marker feature was broken after the upgrade to {productname} 6.7.3 // #TINY-10367 Security patch for {productname} 6.7.3, made changes to **ZWNBSP** characters so they are now removed from any content passed via the `insertContent` API. **ZWNBSP** characters were used to add padding to the marker to avoid it cleaning out the empty content. @@ -540,7 +540,7 @@ As a result, the `width` of the buttons now display correctly. // #TINY-10174 In earlier versions of {productname}, collection items set in a xref:dialog-components.adoc#collection[collection dialog component] would not display any icon as set in the `+icon+` property, instead only displaying the `+string+` itself. -In {productname} 6.8.1, dialog collection items will now use any specified `+icon+` from the xref:icons.adoc#icons[icon pack], with the `+string+` itself used in the case where no such icon exists. This is the current behaviour, as in most uses of dialog collections in {productname}, the `+icon+` property is set as an individual character, such as in the xref:emoticons.adoc[Emoticons] and xref:charmap.adoc[Charmap] plugins. +In {productname} 6.8.1, dialog collection items will now use any specified `+icon+` from the xref:editor-icons.adoc#icons[icon pack], with the `+string+` itself used in the case where no such icon exists. This is the current behaviour, as in most uses of dialog collections in {productname}, the `+icon+` property is set as an individual character, such as in the xref:emoticons.adoc[Emoticons] and xref:charmap.adoc[Charmap] plugins. For information on the **Dialog layout components for collections** plugin see xref:dialog-components.adoc#collection[dialog components]. diff --git a/package.json b/package.json index 1115bd8064..2dd81579db 100644 --- a/package.json +++ b/package.json @@ -8,9 +8,10 @@ }, "homepage": "https://www.tiny.cloud/docs/", "scripts": { - "nodemon-dev": "nodemon --exec antora ./antora-playbook-dev.yml", "build": "./-scripts/api-reference.sh", "build-local-ref": "./-scripts/api-reference-local.sh", + "generate-site": "./-scripts/generate-site.sh", + "nodemon-dev": "nodemon --exec yarn generate-site ./antora-playbook-dev.yml", "server": "http-server build/site/ --port 4000", "serve": "npm-run-all -p nodemon-dev server" }, From 0e7e969418412832c5dcfb24578d6ac25573f80e Mon Sep 17 00:00:00 2001 From: Mitchell Crompton Date: Tue, 19 Dec 2023 16:10:59 +1000 Subject: [PATCH 3/3] DOC-2220: Fix incorrect content copy command (#3035) * DOC-2220: Update * DOC-2220: Testing * DOC-2220: Testing site removal * DOC-2220: Testing generation * DOC-2220: Fix incorrect site generation --- -scripts/generate-site.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/-scripts/generate-site.sh b/-scripts/generate-site.sh index 617c4d841e..16e9658c84 100755 --- a/-scripts/generate-site.sh +++ b/-scripts/generate-site.sh @@ -8,7 +8,6 @@ SITE_DIR="$BUILD_DIR/site/tinymce" SOURCE_VERSION="latest" SOURCE_DIR="$SITE_DIR/$SOURCE_VERSION/" - DEST_VERSION=6 DEST_DIR="$SITE_DIR/$DEST_VERSION/" @@ -20,6 +19,7 @@ antora "$PLAYBOOK" echo -e "\nCopying all $SOURCE_VERSION content to $DEST_VERSION directory." mkdir "$DEST_DIR" -cp -a "$SOURCE_DIR" "$DEST_DIR" + +cp -a "$SOURCE_DIR." "$DEST_DIR" echo "$DEST_VERSION site now in sync with $SOURCE_VERSION."