diff --git a/bower.json b/bower.json index 872d209..df8b41d 100644 --- a/bower.json +++ b/bower.json @@ -26,21 +26,21 @@ ], "dependencies": { "polymer": "^2.0.0", - "vaadin-themable-mixin": "vaadin/vaadin-themable-mixin#^1.4.0", - "vaadin-element-mixin": "vaadin/vaadin-element-mixin#^2.0.0", - "vaadin-lumo-styles": "vaadin/vaadin-lumo-styles#^1.1.0", - "vaadin-material-styles": "vaadin/vaadin-material-styles#^1.1.0", + "vaadin-themable-mixin": "vaadin/vaadin-themable-mixin#^1.5.2", + "vaadin-element-mixin": "vaadin/vaadin-element-mixin#^2.3.2", + "vaadin-lumo-styles": "vaadin/vaadin-lumo-styles#^1.6.0", + "vaadin-material-styles": "vaadin/vaadin-material-styles#^1.3.0", "vaadin-license-checker": "vaadin/license-checker#^2.1.0", - "vaadin-dialog": "vaadin/vaadin-dialog#^2.1.0", - "vaadin-button": "vaadin/vaadin-button#^2.1.0", - "vaadin-overlay": "vaadin/vaadin-overlay#^3.2.0" + "vaadin-dialog": "vaadin/vaadin-dialog#^2.3.0", + "vaadin-button": "vaadin/vaadin-button#^2.3.0-alpha1", + "vaadin-overlay": "vaadin/vaadin-overlay#^3.4.0" }, "devDependencies": { "iron-component-page": "^3.0.0", "iron-demo-helpers": "^2.0.0", "webcomponentsjs": "^1.0.0", "web-component-tester": "^6.1.5", - "vaadin-demo-helpers": "vaadin/vaadin-demo-helpers#^3.0.0", + "vaadin-demo-helpers": "vaadin/vaadin-demo-helpers#^3.1.0-alpha1", "vaadin-icons": "vaadin/vaadin-icons#^4.2.0", "iron-test-helpers": "^2.0.0" } diff --git a/src/vaadin-confirm-dialog.html b/src/vaadin-confirm-dialog.html index 28f22da..a8aa68a 100644 --- a/src/vaadin-confirm-dialog.html +++ b/src/vaadin-confirm-dialog.html @@ -242,6 +242,27 @@

[[header]]

} } + attributeChangedCallback(name, oldValue, newValue) { + super.attributeChangedCallback(name, oldValue, newValue); + if (name === 'dir') { + const value = newValue === 'rtl'; + this.__isRTL = value; + this.opened && this.__toggleContentRTL(value); + } + } + + __toggleContentRTL(rtl) { + const contentBlock = this.$.dialog.$.overlay.content.querySelector('#content'); + const footerBlock = this.$.dialog.$.overlay.content.querySelector('[part=footer]'); + if (rtl) { + contentBlock.setAttribute('dir', 'rtl'); + footerBlock.setAttribute('dir', 'rtl'); + } else { + contentBlock.removeAttribute('dir'); + footerBlock.removeAttribute('dir'); + } + } + _openedChanged() { if (!this.opened) { return; @@ -254,6 +275,8 @@

[[header]]

} }); + this.opened && this.__toggleContentRTL(this.__isRTL); + Polymer.RenderStatus.beforeNextRender(this, () => { var confirmButton = this._confirmButton || this.$.dialog.$.overlay.content.querySelector('#confirm'); confirmButton.focus(); diff --git a/test/alert-api-test.html b/test/alert-api-test.html index c5ca7a9..3a8c867 100644 --- a/test/alert-api-test.html +++ b/test/alert-api-test.html @@ -51,6 +51,22 @@ var confirmButtonText = confirmButton.textContent; expect(confirmButtonText).to.contain('Of course'); }); + + describe('RTL', function() { + it('should apply rtl to content and footer before openning', function() { + confirm.setAttribute('dir', 'rtl'); + confirm.opened = true; + expect(content.querySelector('#content').getAttribute('dir')).to.be.equal('rtl'); + expect(content.querySelector('[part="footer"]').getAttribute('dir')).to.be.equal('rtl'); + }); + + it('should apply rtl to content and footer when opened', function() { + confirm.opened = true; + confirm.setAttribute('dir', 'rtl'); + expect(content.querySelector('#content').getAttribute('dir')).to.be.equal('rtl'); + expect(content.querySelector('[part="footer"]').getAttribute('dir')).to.be.equal('rtl'); + }); + }); }); diff --git a/test/visual/custom-buttons.html b/test/visual/custom-buttons.html index 3ddaef4..cdc56be 100644 --- a/test/visual/custom-buttons.html +++ b/test/visual/custom-buttons.html @@ -22,6 +22,9 @@ `); + const direction = window.location.search.replace(/.*dir=(\w+).*/, '$1') || 'ltr'; + document.documentElement.setAttribute('dir', direction); + window.addEventListener('WebComponentsReady', function() { setTimeout(function() { window.ShadyDOM && window.ShadyDOM.flush(); // Force DOM composition diff --git a/test/visual/default.html b/test/visual/default.html index 648ec8a..470aa85 100644 --- a/test/visual/default.html +++ b/test/visual/default.html @@ -20,6 +20,9 @@ `); + const direction = window.location.search.replace(/.*dir=(\w+).*/, '$1') || 'ltr'; + document.documentElement.setAttribute('dir', direction); + window.addEventListener('WebComponentsReady', function() { setTimeout(function() { window.ShadyDOM && window.ShadyDOM.flush(); // Force DOM composition diff --git a/test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-lumo-ltr/confirm-dialog/chrome.png b/test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-lumo-ltr/confirm-dialog/chrome.png new file mode 100644 index 0000000..543eca0 Binary files /dev/null and b/test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-lumo-ltr/confirm-dialog/chrome.png differ diff --git a/test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-lumo/confirm-dialog/firefox.png b/test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-lumo-ltr/confirm-dialog/firefox.png similarity index 100% rename from test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-lumo/confirm-dialog/firefox.png rename to test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-lumo-ltr/confirm-dialog/firefox.png diff --git a/test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-lumo-rtl/confirm-dialog/chrome.png b/test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-lumo-rtl/confirm-dialog/chrome.png new file mode 100644 index 0000000..91c6782 Binary files /dev/null and b/test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-lumo-rtl/confirm-dialog/chrome.png differ diff --git a/test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-lumo-rtl/confirm-dialog/firefox.png b/test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-lumo-rtl/confirm-dialog/firefox.png new file mode 100644 index 0000000..8a09d04 Binary files /dev/null and b/test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-lumo-rtl/confirm-dialog/firefox.png differ diff --git a/test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-lumo/confirm-dialog/chrome.png b/test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-lumo/confirm-dialog/chrome.png deleted file mode 100644 index d6a6b97..0000000 Binary files a/test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-lumo/confirm-dialog/chrome.png and /dev/null differ diff --git a/test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-material/confirm-dialog/chrome.png b/test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-material-ltr/confirm-dialog/chrome.png similarity index 100% rename from test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-material/confirm-dialog/chrome.png rename to test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-material-ltr/confirm-dialog/chrome.png diff --git a/test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-material/confirm-dialog/firefox.png b/test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-material-ltr/confirm-dialog/firefox.png similarity index 100% rename from test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-material/confirm-dialog/firefox.png rename to test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-material-ltr/confirm-dialog/firefox.png diff --git a/test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-material-rtl/confirm-dialog/chrome.png b/test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-material-rtl/confirm-dialog/chrome.png new file mode 100644 index 0000000..cf4d64e Binary files /dev/null and b/test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-material-rtl/confirm-dialog/chrome.png differ diff --git a/test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-material-rtl/confirm-dialog/firefox.png b/test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-material-rtl/confirm-dialog/firefox.png new file mode 100644 index 0000000..9aff058 Binary files /dev/null and b/test/visual/screens/vaadin-confirm-dialog/custom-buttons-tests-material-rtl/confirm-dialog/firefox.png differ diff --git a/test/visual/screens/vaadin-confirm-dialog/default-tests-lumo-ltr/confirm-dialog/chrome.png b/test/visual/screens/vaadin-confirm-dialog/default-tests-lumo-ltr/confirm-dialog/chrome.png new file mode 100644 index 0000000..74a755d Binary files /dev/null and b/test/visual/screens/vaadin-confirm-dialog/default-tests-lumo-ltr/confirm-dialog/chrome.png differ diff --git a/test/visual/screens/vaadin-confirm-dialog/default-tests-lumo-ltr/confirm-dialog/firefox.png b/test/visual/screens/vaadin-confirm-dialog/default-tests-lumo-ltr/confirm-dialog/firefox.png new file mode 100644 index 0000000..26b15be Binary files /dev/null and b/test/visual/screens/vaadin-confirm-dialog/default-tests-lumo-ltr/confirm-dialog/firefox.png differ diff --git a/test/visual/screens/vaadin-confirm-dialog/default-tests-lumo-rtl/confirm-dialog/chrome.png b/test/visual/screens/vaadin-confirm-dialog/default-tests-lumo-rtl/confirm-dialog/chrome.png new file mode 100644 index 0000000..2d75e34 Binary files /dev/null and b/test/visual/screens/vaadin-confirm-dialog/default-tests-lumo-rtl/confirm-dialog/chrome.png differ diff --git a/test/visual/screens/vaadin-confirm-dialog/default-tests-lumo-rtl/confirm-dialog/firefox.png b/test/visual/screens/vaadin-confirm-dialog/default-tests-lumo-rtl/confirm-dialog/firefox.png new file mode 100644 index 0000000..54bbd2f Binary files /dev/null and b/test/visual/screens/vaadin-confirm-dialog/default-tests-lumo-rtl/confirm-dialog/firefox.png differ diff --git a/test/visual/screens/vaadin-confirm-dialog/default-tests-lumo/confirm-dialog/chrome.png b/test/visual/screens/vaadin-confirm-dialog/default-tests-lumo/confirm-dialog/chrome.png deleted file mode 100644 index 58cfdbd..0000000 Binary files a/test/visual/screens/vaadin-confirm-dialog/default-tests-lumo/confirm-dialog/chrome.png and /dev/null differ diff --git a/test/visual/screens/vaadin-confirm-dialog/default-tests-lumo/confirm-dialog/firefox.png b/test/visual/screens/vaadin-confirm-dialog/default-tests-lumo/confirm-dialog/firefox.png deleted file mode 100644 index 5158e92..0000000 Binary files a/test/visual/screens/vaadin-confirm-dialog/default-tests-lumo/confirm-dialog/firefox.png and /dev/null differ diff --git a/test/visual/screens/vaadin-confirm-dialog/default-tests-material/confirm-dialog/chrome.png b/test/visual/screens/vaadin-confirm-dialog/default-tests-material-ltr/confirm-dialog/chrome.png similarity index 100% rename from test/visual/screens/vaadin-confirm-dialog/default-tests-material/confirm-dialog/chrome.png rename to test/visual/screens/vaadin-confirm-dialog/default-tests-material-ltr/confirm-dialog/chrome.png diff --git a/test/visual/screens/vaadin-confirm-dialog/default-tests-material/confirm-dialog/firefox.png b/test/visual/screens/vaadin-confirm-dialog/default-tests-material-ltr/confirm-dialog/firefox.png similarity index 100% rename from test/visual/screens/vaadin-confirm-dialog/default-tests-material/confirm-dialog/firefox.png rename to test/visual/screens/vaadin-confirm-dialog/default-tests-material-ltr/confirm-dialog/firefox.png diff --git a/test/visual/screens/vaadin-confirm-dialog/default-tests-material-rtl/confirm-dialog/chrome.png b/test/visual/screens/vaadin-confirm-dialog/default-tests-material-rtl/confirm-dialog/chrome.png new file mode 100644 index 0000000..d166b1d Binary files /dev/null and b/test/visual/screens/vaadin-confirm-dialog/default-tests-material-rtl/confirm-dialog/chrome.png differ diff --git a/test/visual/screens/vaadin-confirm-dialog/default-tests-material-rtl/confirm-dialog/firefox.png b/test/visual/screens/vaadin-confirm-dialog/default-tests-material-rtl/confirm-dialog/firefox.png new file mode 100644 index 0000000..1597173 Binary files /dev/null and b/test/visual/screens/vaadin-confirm-dialog/default-tests-material-rtl/confirm-dialog/firefox.png differ diff --git a/test/visual/screens/vaadin-confirm-dialog/three-actions-tests-lumo/confirm-dialog/chrome.png b/test/visual/screens/vaadin-confirm-dialog/three-actions-tests-lumo-ltr/confirm-dialog/chrome.png similarity index 70% rename from test/visual/screens/vaadin-confirm-dialog/three-actions-tests-lumo/confirm-dialog/chrome.png rename to test/visual/screens/vaadin-confirm-dialog/three-actions-tests-lumo-ltr/confirm-dialog/chrome.png index 5ff7fc6..0ff816e 100644 Binary files a/test/visual/screens/vaadin-confirm-dialog/three-actions-tests-lumo/confirm-dialog/chrome.png and b/test/visual/screens/vaadin-confirm-dialog/three-actions-tests-lumo-ltr/confirm-dialog/chrome.png differ diff --git a/test/visual/screens/vaadin-confirm-dialog/three-actions-tests-lumo/confirm-dialog/firefox.png b/test/visual/screens/vaadin-confirm-dialog/three-actions-tests-lumo-ltr/confirm-dialog/firefox.png similarity index 100% rename from test/visual/screens/vaadin-confirm-dialog/three-actions-tests-lumo/confirm-dialog/firefox.png rename to test/visual/screens/vaadin-confirm-dialog/three-actions-tests-lumo-ltr/confirm-dialog/firefox.png diff --git a/test/visual/screens/vaadin-confirm-dialog/three-actions-tests-lumo-rtl/confirm-dialog/chrome.png b/test/visual/screens/vaadin-confirm-dialog/three-actions-tests-lumo-rtl/confirm-dialog/chrome.png new file mode 100644 index 0000000..f8a7370 Binary files /dev/null and b/test/visual/screens/vaadin-confirm-dialog/three-actions-tests-lumo-rtl/confirm-dialog/chrome.png differ diff --git a/test/visual/screens/vaadin-confirm-dialog/three-actions-tests-lumo-rtl/confirm-dialog/firefox.png b/test/visual/screens/vaadin-confirm-dialog/three-actions-tests-lumo-rtl/confirm-dialog/firefox.png new file mode 100644 index 0000000..ace4171 Binary files /dev/null and b/test/visual/screens/vaadin-confirm-dialog/three-actions-tests-lumo-rtl/confirm-dialog/firefox.png differ diff --git a/test/visual/screens/vaadin-confirm-dialog/three-actions-tests-material/confirm-dialog/chrome.png b/test/visual/screens/vaadin-confirm-dialog/three-actions-tests-material-ltr/confirm-dialog/chrome.png similarity index 100% rename from test/visual/screens/vaadin-confirm-dialog/three-actions-tests-material/confirm-dialog/chrome.png rename to test/visual/screens/vaadin-confirm-dialog/three-actions-tests-material-ltr/confirm-dialog/chrome.png diff --git a/test/visual/screens/vaadin-confirm-dialog/three-actions-tests-material/confirm-dialog/firefox.png b/test/visual/screens/vaadin-confirm-dialog/three-actions-tests-material-ltr/confirm-dialog/firefox.png similarity index 100% rename from test/visual/screens/vaadin-confirm-dialog/three-actions-tests-material/confirm-dialog/firefox.png rename to test/visual/screens/vaadin-confirm-dialog/three-actions-tests-material-ltr/confirm-dialog/firefox.png diff --git a/test/visual/screens/vaadin-confirm-dialog/three-actions-tests-material-rtl/confirm-dialog/chrome.png b/test/visual/screens/vaadin-confirm-dialog/three-actions-tests-material-rtl/confirm-dialog/chrome.png new file mode 100644 index 0000000..40aab79 Binary files /dev/null and b/test/visual/screens/vaadin-confirm-dialog/three-actions-tests-material-rtl/confirm-dialog/chrome.png differ diff --git a/test/visual/screens/vaadin-confirm-dialog/three-actions-tests-material-rtl/confirm-dialog/firefox.png b/test/visual/screens/vaadin-confirm-dialog/three-actions-tests-material-rtl/confirm-dialog/firefox.png new file mode 100644 index 0000000..dc32552 Binary files /dev/null and b/test/visual/screens/vaadin-confirm-dialog/three-actions-tests-material-rtl/confirm-dialog/firefox.png differ diff --git a/test/visual/test.js b/test/visual/test.js index b782c19..5ef0c80 100644 --- a/test/visual/test.js +++ b/test/visual/test.js @@ -17,27 +17,29 @@ gemini.suite('vaadin-confirm-dialog', function(rootSuite) { .before(wait) .after(goToAboutBlank); - ['lumo', 'material'].forEach(theme => { + ['ltr', 'rtl'].forEach(direction => { + ['lumo', 'material'].forEach(theme => { - gemini.suite(`default-tests-${theme}`, function(suite) { - suite - .setUrl(`default.html?theme=${theme}`) - .setCaptureElements('body') - .capture('confirm-dialog'); - }); + gemini.suite(`default-tests-${theme}-${direction}`, function(suite) { + suite + .setUrl(`default.html?theme=${theme}&dir=${direction}`) + .setCaptureElements('body') + .capture('confirm-dialog'); + }); - gemini.suite(`three-actions-tests-${theme}`, function(suite) { - suite - .setUrl(`three-actions.html?theme=${theme}`) - .setCaptureElements('body') - .capture('confirm-dialog'); - }); + gemini.suite(`three-actions-tests-${theme}-${direction}`, function(suite) { + suite + .setUrl(`three-actions.html?theme=${theme}&dir=${direction}`) + .setCaptureElements('body') + .capture('confirm-dialog'); + }); - gemini.suite(`custom-buttons-tests-${theme}`, function(suite) { - suite - .setUrl(`custom-buttons.html?theme=${theme}`) - .setCaptureElements('body') - .capture('confirm-dialog'); + gemini.suite(`custom-buttons-tests-${theme}-${direction}`, function(suite) { + suite + .setUrl(`custom-buttons.html?theme=${theme}&dir=${direction}`) + .setCaptureElements('body') + .capture('confirm-dialog'); + }); }); }); diff --git a/test/visual/three-actions.html b/test/visual/three-actions.html index 6ced3a4..5e575cc 100644 --- a/test/visual/three-actions.html +++ b/test/visual/three-actions.html @@ -20,6 +20,9 @@ `); + const direction = window.location.search.replace(/.*dir=(\w+).*/, '$1') || 'ltr'; + document.documentElement.setAttribute('dir', direction); + window.addEventListener('WebComponentsReady', function() { setTimeout(function() { window.ShadyDOM && window.ShadyDOM.flush(); // Force DOM composition diff --git a/theme/lumo/vaadin-confirm-dialog-styles.html b/theme/lumo/vaadin-confirm-dialog-styles.html index e3a5b03..3ffa2a8 100644 --- a/theme/lumo/vaadin-confirm-dialog-styles.html +++ b/theme/lumo/vaadin-confirm-dialog-styles.html @@ -56,15 +56,18 @@ .cancel-button { flex-grow: 1; + } + + :not([dir="rtl"]) > .cancel-button { margin-left: calc(var(--lumo-space-s) * -1); } - .confirm-button { + :not([dir="rtl"]) > .confirm-button { margin-right: calc(var(--lumo-space-s) * -1); } - .reject-button, - .confirm-button { + :not([dir="rtl"]) > .reject-button, + :not([dir="rtl"]) > .confirm-button { margin-left: var(--lumo-space-s); } @@ -92,6 +95,21 @@ margin-bottom: var(--lumo-space-s); } } + + /* RTL specific styles */ + + [dir="rtl"] > .cancel-button { + margin-right: calc(var(--lumo-space-s) * -1); + } + + [dir="rtl"] > .confirm-button { + margin-left: calc(var(--lumo-space-s) * -1); + } + + [dir="rtl"] > .reject-button, + [dir="rtl"] > .confirm-button { + margin-right: var(--lumo-space-s); + } diff --git a/theme/material/vaadin-confirm-dialog-styles.html b/theme/material/vaadin-confirm-dialog-styles.html index 03c34a3..9778459 100644 --- a/theme/material/vaadin-confirm-dialog-styles.html +++ b/theme/material/vaadin-confirm-dialog-styles.html @@ -20,8 +20,8 @@ margin-right: -16px; } - [part="footer"] div:nth-child(-n + 2) vaadin-button, - [part="footer"] div:nth-child(-n + 2) ::slotted(*) { + [part="footer"]:not([dir="rtl"]) div:nth-child(-n + 2) vaadin-button, + [part="footer"]:not([dir="rtl"]) div:nth-child(-n + 2) ::slotted(*) { margin-right: 8px; } @@ -41,6 +41,30 @@ [part="footer"] div:nth-last-child(1) ::slotted(*) { margin-top: 8px; } + + /* RTL specific styles */ + + [part="footer"][dir="rtl"] div:nth-child(-n + 2) vaadin-button, + [part="footer"][dir="rtl"] div:nth-child(-n + 2) ::slotted(*) { + margin-left: 0; + } + } + + /* RTL specific styles */ + + [dir="rtl"] > [part="message"] { + margin-left: 24px; + margin-right: 0; + } + + [part="footer"][dir="rtl"] { + margin-left: -16px; + margin-right: 0; + } + + [part="footer"][dir="rtl"] div:nth-child(-n + 2) vaadin-button, + [part="footer"][dir="rtl"] div:nth-child(-n + 2) ::slotted(*) { + margin-left: 8px; }