From b2b07ab920cebdad90ebfb885774fc8a8830d6c9 Mon Sep 17 00:00:00 2001 From: Mohammad rezaei <93854988+rezaei92@users.noreply.github.com> Date: Sat, 1 Jul 2023 17:31:07 +0330 Subject: [PATCH] Added bidi button to Squire editor --- dev/External/SquireUI.js | 35 ++++++++++++++++++++---------- vendors/squire/build/squire-raw.js | 22 +++++++++++++++++++ 2 files changed, 46 insertions(+), 11 deletions(-) diff --git a/dev/External/SquireUI.js b/dev/External/SquireUI.js index 826e23020..cbe4b828b 100644 --- a/dev/External/SquireUI.js +++ b/dev/External/SquireUI.js @@ -110,17 +110,29 @@ class SquireUI select: ['11px','13px','16px','20px','24px','30px'], cmd: s => squire.setStyle({ fontSize: s.value }) }, - dir: { - select: [ - [i18n('EDITOR/DIR_LTR', 'LTR'),'ltr'], - [i18n('EDITOR/DIR_RTL', 'RTL'),'rtl'], - [i18n('EDITOR/DIR_AUTO', 'Auto'),'auto'], - ['',''], - ], - cmd: s => { - squire.setAttribute('dir', s.value || null); -// squire.setStyle({ 'unicode-bidi': 'plaintext' }); - } +// dir: { +// select: [ +// [i18n('EDITOR/DIR_LTR', 'LTR'),'ltr'], +// [i18n('EDITOR/DIR_RTL', 'RTL'),'rtl'], +// [i18n('EDITOR/DIR_AUTO', 'Auto'),'auto'], +// ['',''], +// ], +// cmd: s => { +// squire.setAttribute('dir', s.value || null); +// // squire.setStyle({ 'unicode-bidi': 'plaintext' }); +// } +// } + }, + dir: { + ltr: { + html: '⁋', + cmd: () => squire.bidi('ltr'), + hint: 'ltr direction' + }, + rtl: { + html: '¶', + cmd: () => squire.bidi('rtl'), + hint: 'rtl direction' } }, colors: { @@ -278,6 +290,7 @@ class SquireUI plain.className = 'squire-plain'; wysiwyg.className = 'squire-wysiwyg'; + wysiwyg.dir = 'auto'; this.mode = ''; // 'plain' | 'wysiwyg' this.__plain = { getRawData: () => this.plain.value, diff --git a/vendors/squire/build/squire-raw.js b/vendors/squire/build/squire-raw.js index 336de30e4..864294acf 100644 --- a/vendors/squire/build/squire-raw.js +++ b/vendors/squire/build/squire-raw.js @@ -1766,6 +1766,22 @@ const return frag; }, + setDirection = (self, frag, dir) => { + let walker = getBlockWalker(frag, self._root), + node; + + while(node = walker.nextNode()){ + + if (node.nodeName === "LI") { + node.parentNode.setAttribute("dir", dir); + break; + } + + node.setAttribute("dir", dir); + } + return frag; + }, + linkRegExp = /\b(?:((https?:\/\/)?(?:www\d{0,3}\.|[a-z0-9][a-z0-9.-]*\.[a-z]{2,}\/)(?:[^\s()<>]+|\([^\s()<>]+\))+(?:[^\s?&`!()[\]{};:'".,<>«»“”‘’]|\([^\s()<>]+\)))|([\w\-.%+]+@(?:[\w-]+\.)+[a-z]{2,}\b(?:\?[^&?\s]+=[^\s?&`!()[\]{};:'".,<>«»“”‘’]+(?:&[^&?\s]+=[^\s?&`!()[\]{};:'".,<>«»“”‘’]+)*)?))/i, addLinks = (frag, root) => { @@ -3663,6 +3679,12 @@ class Squire return this.focus(); } + bidi(dir) { + this.modifyBlocks(frag => setDirection(this, frag, dir)); + + return this.focus(); + } + makeUnorderedList() { this.modifyBlocks(frag => makeList(this, frag, 'UL')); return this.focus();