@wordpress/format-library 3.0.4 → 3.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/bold/index.js +13 -8
- package/build/bold/index.js.map +1 -1
- package/build/code/index.js +12 -8
- package/build/code/index.js.map +1 -1
- package/build/image/index.js +27 -23
- package/build/image/index.js.map +1 -1
- package/build/index.js +7 -4
- package/build/index.js.map +1 -1
- package/build/italic/index.js +13 -8
- package/build/italic/index.js.map +1 -1
- package/build/keyboard/index.js +12 -8
- package/build/keyboard/index.js.map +1 -1
- package/build/link/index.js +15 -12
- package/build/link/index.js.map +1 -1
- package/build/link/inline.js +78 -16
- package/build/link/inline.js.map +1 -1
- package/build/link/modal-screens/link-picker-screen.native.js +6 -4
- package/build/link/modal-screens/link-picker-screen.native.js.map +1 -1
- package/build/link/modal-screens/link-settings-screen.native.js +15 -12
- package/build/link/modal-screens/link-settings-screen.native.js.map +1 -1
- package/build/link/modal.native.js +5 -4
- package/build/link/modal.native.js.map +1 -1
- package/build/link/use-link-instance-key.js +40 -0
- package/build/link/use-link-instance-key.js.map +1 -0
- package/build/link/utils.js +122 -7
- package/build/link/utils.js.map +1 -1
- package/build/strikethrough/index.js +12 -8
- package/build/strikethrough/index.js.map +1 -1
- package/build/subscript/index.js +12 -8
- package/build/subscript/index.js.map +1 -1
- package/build/superscript/index.js +12 -8
- package/build/superscript/index.js.map +1 -1
- package/build/text-color/index.js +20 -14
- package/build/text-color/index.js.map +1 -1
- package/build/text-color/inline.js +31 -18
- package/build/text-color/inline.js.map +1 -1
- package/build/underline/index.js +10 -6
- package/build/underline/index.js.map +1 -1
- package/build-module/bold/index.js +13 -8
- package/build-module/bold/index.js.map +1 -1
- package/build-module/code/index.js +12 -8
- package/build-module/code/index.js.map +1 -1
- package/build-module/image/index.js +27 -23
- package/build-module/image/index.js.map +1 -1
- package/build-module/index.js +7 -4
- package/build-module/index.js.map +1 -1
- package/build-module/italic/index.js +13 -8
- package/build-module/italic/index.js.map +1 -1
- package/build-module/keyboard/index.js +12 -8
- package/build-module/keyboard/index.js.map +1 -1
- package/build-module/link/index.js +15 -12
- package/build-module/link/index.js.map +1 -1
- package/build-module/link/inline.js +77 -18
- package/build-module/link/inline.js.map +1 -1
- package/build-module/link/modal-screens/link-picker-screen.native.js +6 -4
- package/build-module/link/modal-screens/link-picker-screen.native.js.map +1 -1
- package/build-module/link/modal-screens/link-settings-screen.native.js +15 -12
- package/build-module/link/modal-screens/link-settings-screen.native.js.map +1 -1
- package/build-module/link/modal.native.js +5 -4
- package/build-module/link/modal.native.js.map +1 -1
- package/build-module/link/use-link-instance-key.js +33 -0
- package/build-module/link/use-link-instance-key.js.map +1 -0
- package/build-module/link/utils.js +119 -7
- package/build-module/link/utils.js.map +1 -1
- package/build-module/strikethrough/index.js +12 -8
- package/build-module/strikethrough/index.js.map +1 -1
- package/build-module/subscript/index.js +12 -8
- package/build-module/subscript/index.js.map +1 -1
- package/build-module/superscript/index.js +12 -8
- package/build-module/superscript/index.js.map +1 -1
- package/build-module/text-color/index.js +16 -12
- package/build-module/text-color/index.js.map +1 -1
- package/build-module/text-color/inline.js +31 -18
- package/build-module/text-color/inline.js.map +1 -1
- package/build-module/underline/index.js +12 -6
- package/build-module/underline/index.js.map +1 -1
- package/package.json +16 -16
- package/src/bold/index.js +2 -2
- package/src/code/index.js +2 -1
- package/src/italic/index.js +2 -2
- package/src/keyboard/index.js +2 -1
- package/src/link/inline.js +75 -5
- package/src/link/test/utils.js +362 -1
- package/src/link/use-link-instance-key.js +34 -0
- package/src/link/utils.js +132 -1
- package/src/strikethrough/index.js +2 -1
- package/src/subscript/index.js +2 -1
- package/src/superscript/index.js +2 -1
- package/src/text-color/index.js +1 -0
- package/src/text-color/inline.js +12 -1
- package/src/underline/index.js +3 -1
|
@@ -17,15 +17,18 @@ export const keyboard = {
|
|
|
17
17
|
tagName: 'kbd',
|
|
18
18
|
className: null,
|
|
19
19
|
|
|
20
|
-
edit({
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
20
|
+
edit(_ref) {
|
|
21
|
+
let {
|
|
22
|
+
isActive,
|
|
23
|
+
value,
|
|
24
|
+
onChange,
|
|
25
|
+
onFocus
|
|
26
|
+
} = _ref;
|
|
27
|
+
|
|
26
28
|
function onToggle() {
|
|
27
29
|
onChange(toggleFormat(value, {
|
|
28
|
-
type: name
|
|
30
|
+
type: name,
|
|
31
|
+
title
|
|
29
32
|
}));
|
|
30
33
|
}
|
|
31
34
|
|
|
@@ -38,7 +41,8 @@ export const keyboard = {
|
|
|
38
41
|
icon: button,
|
|
39
42
|
title: title,
|
|
40
43
|
onClick: onClick,
|
|
41
|
-
isActive: isActive
|
|
44
|
+
isActive: isActive,
|
|
45
|
+
role: "menuitemcheckbox"
|
|
42
46
|
});
|
|
43
47
|
}
|
|
44
48
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/format-library/src/keyboard/index.js"],"names":["__","toggleFormat","RichTextToolbarButton","button","name","title","keyboard","tagName","className","edit","isActive","value","onChange","onFocus","onToggle","type","onClick"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,EAAT,QAAmB,iBAAnB;AACA,SAASC,YAAT,QAA6B,sBAA7B;AACA,SAASC,qBAAT,QAAsC,yBAAtC;AACA,SAASC,MAAT,QAAuB,kBAAvB;AAEA,MAAMC,IAAI,GAAG,eAAb;;AACA,MAAMC,KAAK,GAAGL,EAAE,CAAE,gBAAF,CAAhB;;AAEA,OAAO,MAAMM,QAAQ,GAAG;AACvBF,EAAAA,IADuB;AAEvBC,EAAAA,KAFuB;AAGvBE,EAAAA,OAAO,EAAE,KAHc;AAIvBC,EAAAA,SAAS,EAAE,IAJY;;AAKvBC,EAAAA,IAAI,
|
|
1
|
+
{"version":3,"sources":["@wordpress/format-library/src/keyboard/index.js"],"names":["__","toggleFormat","RichTextToolbarButton","button","name","title","keyboard","tagName","className","edit","isActive","value","onChange","onFocus","onToggle","type","onClick"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,EAAT,QAAmB,iBAAnB;AACA,SAASC,YAAT,QAA6B,sBAA7B;AACA,SAASC,qBAAT,QAAsC,yBAAtC;AACA,SAASC,MAAT,QAAuB,kBAAvB;AAEA,MAAMC,IAAI,GAAG,eAAb;;AACA,MAAMC,KAAK,GAAGL,EAAE,CAAE,gBAAF,CAAhB;;AAEA,OAAO,MAAMM,QAAQ,GAAG;AACvBF,EAAAA,IADuB;AAEvBC,EAAAA,KAFuB;AAGvBE,EAAAA,OAAO,EAAE,KAHc;AAIvBC,EAAAA,SAAS,EAAE,IAJY;;AAKvBC,EAAAA,IAAI,OAA2C;AAAA,QAAzC;AAAEC,MAAAA,QAAF;AAAYC,MAAAA,KAAZ;AAAmBC,MAAAA,QAAnB;AAA6BC,MAAAA;AAA7B,KAAyC;;AAC9C,aAASC,QAAT,GAAoB;AACnBF,MAAAA,QAAQ,CAAEX,YAAY,CAAEU,KAAF,EAAS;AAAEI,QAAAA,IAAI,EAAEX,IAAR;AAAcC,QAAAA;AAAd,OAAT,CAAd,CAAR;AACA;;AAED,aAASW,OAAT,GAAmB;AAClBF,MAAAA,QAAQ;AACRD,MAAAA,OAAO;AACP;;AAED,WACC,cAAC,qBAAD;AACC,MAAA,IAAI,EAAGV,MADR;AAEC,MAAA,KAAK,EAAGE,KAFT;AAGC,MAAA,OAAO,EAAGW,OAHX;AAIC,MAAA,QAAQ,EAAGN,QAJZ;AAKC,MAAA,IAAI,EAAC;AALN,MADD;AASA;;AAxBsB,CAAjB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { toggleFormat } from '@wordpress/rich-text';\nimport { RichTextToolbarButton } from '@wordpress/block-editor';\nimport { button } from '@wordpress/icons';\n\nconst name = 'core/keyboard';\nconst title = __( 'Keyboard input' );\n\nexport const keyboard = {\n\tname,\n\ttitle,\n\ttagName: 'kbd',\n\tclassName: null,\n\tedit( { isActive, value, onChange, onFocus } ) {\n\t\tfunction onToggle() {\n\t\t\tonChange( toggleFormat( value, { type: name, title } ) );\n\t\t}\n\n\t\tfunction onClick() {\n\t\t\tonToggle();\n\t\t\tonFocus();\n\t\t}\n\n\t\treturn (\n\t\t\t<RichTextToolbarButton\n\t\t\t\ticon={ button }\n\t\t\t\ttitle={ title }\n\t\t\t\tonClick={ onClick }\n\t\t\t\tisActive={ isActive }\n\t\t\t\trole=\"menuitemcheckbox\"\n\t\t\t/>\n\t\t);\n\t},\n};\n"]}
|
|
@@ -21,14 +21,15 @@ const name = 'core/link';
|
|
|
21
21
|
|
|
22
22
|
const title = __('Link');
|
|
23
23
|
|
|
24
|
-
function Edit({
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
24
|
+
function Edit(_ref) {
|
|
25
|
+
let {
|
|
26
|
+
isActive,
|
|
27
|
+
activeAttributes,
|
|
28
|
+
value,
|
|
29
|
+
onChange,
|
|
30
|
+
onFocus,
|
|
31
|
+
contentRef
|
|
32
|
+
} = _ref;
|
|
32
33
|
const [addingLink, setAddingLink] = useState(false);
|
|
33
34
|
|
|
34
35
|
function addLink() {
|
|
@@ -110,10 +111,12 @@ export const link = {
|
|
|
110
111
|
target: 'target'
|
|
111
112
|
},
|
|
112
113
|
|
|
113
|
-
__unstablePasteRule(value, {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
114
|
+
__unstablePasteRule(value, _ref2) {
|
|
115
|
+
let {
|
|
116
|
+
html,
|
|
117
|
+
plainText
|
|
118
|
+
} = _ref2;
|
|
119
|
+
|
|
117
120
|
if (isCollapsed(value)) {
|
|
118
121
|
return value;
|
|
119
122
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/format-library/src/link/index.js"],"names":["__","useState","getTextContent","applyFormat","removeFormat","slice","isCollapsed","isURL","isEmail","RichTextToolbarButton","RichTextShortcut","decodeEntities","link","linkIcon","linkOff","speak","InlineLinkUI","isValidHref","name","title","Edit","isActive","activeAttributes","value","onChange","onFocus","contentRef","addingLink","setAddingLink","addLink","text","type","attributes","url","stopAddingLink","onRemoveFormat","tagName","className","id","target","__unstablePasteRule","html","plainText","pastedText","replace","trim","window","console","log","edit"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,EAAT,QAAmB,iBAAnB;AACA,SAASC,QAAT,QAAyB,oBAAzB;AACA,SACCC,cADD,EAECC,WAFD,EAGCC,YAHD,EAICC,KAJD,EAKCC,WALD,QAMO,sBANP;AAOA,SAASC,KAAT,EAAgBC,OAAhB,QAA+B,gBAA/B;AACA,SACCC,qBADD,EAECC,gBAFD,QAGO,yBAHP;AAIA,SAASC,cAAT,QAA+B,0BAA/B;AACA,SAASC,IAAI,IAAIC,QAAjB,EAA2BC,OAA3B,QAA0C,kBAA1C;AACA,SAASC,KAAT,QAAsB,iBAAtB;AAEA;AACA;AACA;;AACA,OAAOC,YAAP,MAAyB,UAAzB;AACA,SAASC,WAAT,QAA4B,SAA5B;AAEA,MAAMC,IAAI,GAAG,WAAb;;AACA,MAAMC,KAAK,GAAGnB,EAAE,CAAE,MAAF,CAAhB;;AAEA,SAASoB,IAAT,
|
|
1
|
+
{"version":3,"sources":["@wordpress/format-library/src/link/index.js"],"names":["__","useState","getTextContent","applyFormat","removeFormat","slice","isCollapsed","isURL","isEmail","RichTextToolbarButton","RichTextShortcut","decodeEntities","link","linkIcon","linkOff","speak","InlineLinkUI","isValidHref","name","title","Edit","isActive","activeAttributes","value","onChange","onFocus","contentRef","addingLink","setAddingLink","addLink","text","type","attributes","url","stopAddingLink","onRemoveFormat","tagName","className","id","target","__unstablePasteRule","html","plainText","pastedText","replace","trim","window","console","log","edit"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useState } from '@wordpress/element';\nimport {\n\tgetTextContent,\n\tapplyFormat,\n\tremoveFormat,\n\tslice,\n\tisCollapsed,\n} from '@wordpress/rich-text';\nimport { isURL, isEmail } from '@wordpress/url';\nimport {\n\tRichTextToolbarButton,\n\tRichTextShortcut,\n} from '@wordpress/block-editor';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { link as linkIcon, linkOff } from '@wordpress/icons';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport InlineLinkUI from './inline';\nimport { isValidHref } from './utils';\n\nconst name = 'core/link';\nconst title = __( 'Link' );\n\nfunction Edit( {\n\tisActive,\n\tactiveAttributes,\n\tvalue,\n\tonChange,\n\tonFocus,\n\tcontentRef,\n} ) {\n\tconst [ addingLink, setAddingLink ] = useState( false );\n\n\tfunction addLink() {\n\t\tconst text = getTextContent( slice( value ) );\n\n\t\tif ( text && isURL( text ) && isValidHref( text ) ) {\n\t\t\tonChange(\n\t\t\t\tapplyFormat( value, {\n\t\t\t\t\ttype: name,\n\t\t\t\t\tattributes: { url: text },\n\t\t\t\t} )\n\t\t\t);\n\t\t} else if ( text && isEmail( text ) ) {\n\t\t\tonChange(\n\t\t\t\tapplyFormat( value, {\n\t\t\t\t\ttype: name,\n\t\t\t\t\tattributes: { url: `mailto:${ text }` },\n\t\t\t\t} )\n\t\t\t);\n\t\t} else {\n\t\t\tsetAddingLink( true );\n\t\t}\n\t}\n\n\tfunction stopAddingLink() {\n\t\tsetAddingLink( false );\n\t\tonFocus();\n\t}\n\n\tfunction onRemoveFormat() {\n\t\tonChange( removeFormat( value, name ) );\n\t\tspeak( __( 'Link removed.' ), 'assertive' );\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<RichTextShortcut type=\"primary\" character=\"k\" onUse={ addLink } />\n\t\t\t<RichTextShortcut\n\t\t\t\ttype=\"primaryShift\"\n\t\t\t\tcharacter=\"k\"\n\t\t\t\tonUse={ onRemoveFormat }\n\t\t\t/>\n\t\t\t{ isActive && (\n\t\t\t\t<RichTextToolbarButton\n\t\t\t\t\tname=\"link\"\n\t\t\t\t\ticon={ linkOff }\n\t\t\t\t\ttitle={ __( 'Unlink' ) }\n\t\t\t\t\tonClick={ onRemoveFormat }\n\t\t\t\t\tisActive={ isActive }\n\t\t\t\t\tshortcutType=\"primaryShift\"\n\t\t\t\t\tshortcutCharacter=\"k\"\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ ! isActive && (\n\t\t\t\t<RichTextToolbarButton\n\t\t\t\t\tname=\"link\"\n\t\t\t\t\ticon={ linkIcon }\n\t\t\t\t\ttitle={ title }\n\t\t\t\t\tonClick={ addLink }\n\t\t\t\t\tisActive={ isActive }\n\t\t\t\t\tshortcutType=\"primary\"\n\t\t\t\t\tshortcutCharacter=\"k\"\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ ( addingLink || isActive ) && (\n\t\t\t\t<InlineLinkUI\n\t\t\t\t\taddingLink={ addingLink }\n\t\t\t\t\tstopAddingLink={ stopAddingLink }\n\t\t\t\t\tisActive={ isActive }\n\t\t\t\t\tactiveAttributes={ activeAttributes }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\tcontentRef={ contentRef }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport const link = {\n\tname,\n\ttitle,\n\ttagName: 'a',\n\tclassName: null,\n\tattributes: {\n\t\turl: 'href',\n\t\ttype: 'data-type',\n\t\tid: 'data-id',\n\t\ttarget: 'target',\n\t},\n\t__unstablePasteRule( value, { html, plainText } ) {\n\t\tif ( isCollapsed( value ) ) {\n\t\t\treturn value;\n\t\t}\n\n\t\tconst pastedText = ( html || plainText )\n\t\t\t.replace( /<[^>]+>/g, '' )\n\t\t\t.trim();\n\n\t\t// A URL was pasted, turn the selection into a link\n\t\tif ( ! isURL( pastedText ) ) {\n\t\t\treturn value;\n\t\t}\n\n\t\t// Allows us to ask for this information when we get a report.\n\t\twindow.console.log( 'Created link:\\n\\n', pastedText );\n\n\t\treturn applyFormat( value, {\n\t\t\ttype: name,\n\t\t\tattributes: {\n\t\t\t\turl: decodeEntities( pastedText ),\n\t\t\t},\n\t\t} );\n\t},\n\tedit: Edit,\n};\n"]}
|
|
@@ -7,26 +7,31 @@ import { useState, useRef, createInterpolateElement } from '@wordpress/element';
|
|
|
7
7
|
import { __, sprintf } from '@wordpress/i18n';
|
|
8
8
|
import { withSpokenMessages, Popover } from '@wordpress/components';
|
|
9
9
|
import { prependHTTP } from '@wordpress/url';
|
|
10
|
-
import { create, insert, isCollapsed, applyFormat, useAnchorRef, removeFormat } from '@wordpress/rich-text';
|
|
10
|
+
import { create, insert, isCollapsed, applyFormat, useAnchorRef, removeFormat, slice, replace } from '@wordpress/rich-text';
|
|
11
11
|
import { __experimentalLinkControl as LinkControl, store as blockEditorStore } from '@wordpress/block-editor';
|
|
12
12
|
import { useSelect } from '@wordpress/data';
|
|
13
13
|
/**
|
|
14
14
|
* Internal dependencies
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import { createLinkFormat, isValidHref } from './utils';
|
|
17
|
+
import { createLinkFormat, isValidHref, getFormatBoundary } from './utils';
|
|
18
18
|
import { link as settings } from './index';
|
|
19
|
+
import useLinkInstanceKey from './use-link-instance-key';
|
|
19
20
|
|
|
20
|
-
function InlineLinkUI({
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
21
|
+
function InlineLinkUI(_ref) {
|
|
22
|
+
let {
|
|
23
|
+
isActive,
|
|
24
|
+
activeAttributes,
|
|
25
|
+
addingLink,
|
|
26
|
+
value,
|
|
27
|
+
onChange,
|
|
28
|
+
speak,
|
|
29
|
+
stopAddingLink,
|
|
30
|
+
contentRef
|
|
31
|
+
} = _ref;
|
|
32
|
+
const richLinkTextValue = getRichTextValueFromSelection(value, isActive); // Get the text content minus any HTML tags.
|
|
33
|
+
|
|
34
|
+
const richTextText = richLinkTextValue.text;
|
|
30
35
|
/**
|
|
31
36
|
* Pending settings to be applied to the next link. When inserting a new
|
|
32
37
|
* link, toggle values cannot be applied immediately, because there is not
|
|
@@ -35,6 +40,7 @@ function InlineLinkUI({
|
|
|
35
40
|
*
|
|
36
41
|
* @type {[Object|undefined,Function]}
|
|
37
42
|
*/
|
|
43
|
+
|
|
38
44
|
const [nextLinkValue, setNextLinkValue] = useState();
|
|
39
45
|
const {
|
|
40
46
|
createPageEntity,
|
|
@@ -56,6 +62,7 @@ function InlineLinkUI({
|
|
|
56
62
|
type: activeAttributes.type,
|
|
57
63
|
id: activeAttributes.id,
|
|
58
64
|
opensInNewTab: activeAttributes.target === '_blank',
|
|
65
|
+
title: richTextText,
|
|
59
66
|
...nextLinkValue
|
|
60
67
|
};
|
|
61
68
|
|
|
@@ -88,21 +95,45 @@ function InlineLinkUI({
|
|
|
88
95
|
}
|
|
89
96
|
|
|
90
97
|
const newUrl = prependHTTP(nextValue.url);
|
|
91
|
-
const
|
|
98
|
+
const linkFormat = createLinkFormat({
|
|
92
99
|
url: newUrl,
|
|
93
100
|
type: nextValue.type,
|
|
94
101
|
id: nextValue.id !== undefined && nextValue.id !== null ? String(nextValue.id) : undefined,
|
|
95
102
|
opensInNewWindow: nextValue.opensInNewTab
|
|
96
103
|
});
|
|
104
|
+
const newText = nextValue.title || newUrl;
|
|
97
105
|
|
|
98
106
|
if (isCollapsed(value) && !isActive) {
|
|
99
|
-
|
|
107
|
+
// Scenario: we don't have any actively selected text or formats.
|
|
100
108
|
const toInsert = applyFormat(create({
|
|
101
109
|
text: newText
|
|
102
|
-
}),
|
|
110
|
+
}), linkFormat, 0, newText.length);
|
|
103
111
|
onChange(insert(value, toInsert));
|
|
104
112
|
} else {
|
|
105
|
-
|
|
113
|
+
// Scenario: we have any active text selection or an active format
|
|
114
|
+
let newValue;
|
|
115
|
+
|
|
116
|
+
if (newText === richTextText) {
|
|
117
|
+
// If we're not updating the text then ignore
|
|
118
|
+
newValue = applyFormat(value, linkFormat);
|
|
119
|
+
} else {
|
|
120
|
+
// Create new RichText value for the new text in order that we
|
|
121
|
+
// can apply formats to it.
|
|
122
|
+
newValue = create({
|
|
123
|
+
text: newText
|
|
124
|
+
}); // Apply the new Link format to this new text value.
|
|
125
|
+
|
|
126
|
+
newValue = applyFormat(newValue, linkFormat, 0, newText.length); // Update the original (full) RichTextValue replacing the
|
|
127
|
+
// target text with the *new* RichTextValue containing:
|
|
128
|
+
// 1. The new text content.
|
|
129
|
+
// 2. The new link format.
|
|
130
|
+
// Note original formats will be lost when applying this change.
|
|
131
|
+
// That is expected behaviour.
|
|
132
|
+
// See: https://github.com/WordPress/gutenberg/pull/33849#issuecomment-936134179.
|
|
133
|
+
|
|
134
|
+
newValue = replace(value, richTextText, newValue);
|
|
135
|
+
}
|
|
136
|
+
|
|
106
137
|
newValue.start = newValue.end;
|
|
107
138
|
newValue.activeFormats = [];
|
|
108
139
|
onChange(newValue);
|
|
@@ -127,7 +158,12 @@ function InlineLinkUI({
|
|
|
127
158
|
ref: contentRef,
|
|
128
159
|
value,
|
|
129
160
|
settings
|
|
130
|
-
}); //
|
|
161
|
+
}); // Generate a string based key that is unique to this anchor reference.
|
|
162
|
+
// This is used to force re-mount the LinkControl component to avoid
|
|
163
|
+
// potential stale state bugs caused by the component not being remounted
|
|
164
|
+
// See https://github.com/WordPress/gutenberg/pull/34742.
|
|
165
|
+
|
|
166
|
+
const forceRemountKey = useLinkInstanceKey(anchorRef); // The focusOnMount prop shouldn't evolve during render of a Popover
|
|
131
167
|
// otherwise it causes a render of the content.
|
|
132
168
|
|
|
133
169
|
const focusOnMount = useRef(addingLink ? 'firstElement' : false);
|
|
@@ -160,6 +196,7 @@ function InlineLinkUI({
|
|
|
160
196
|
onClose: stopAddingLink,
|
|
161
197
|
position: "bottom center"
|
|
162
198
|
}, createElement(LinkControl, {
|
|
199
|
+
key: forceRemountKey,
|
|
163
200
|
value: linkValue,
|
|
164
201
|
onChange: onChangeLink,
|
|
165
202
|
onRemove: removeLink,
|
|
@@ -167,9 +204,31 @@ function InlineLinkUI({
|
|
|
167
204
|
hasRichPreviews: true,
|
|
168
205
|
createSuggestion: createPageEntity && handleCreate,
|
|
169
206
|
withCreateSuggestion: userCanCreatePages,
|
|
170
|
-
createSuggestionButtonText: createButtonText
|
|
207
|
+
createSuggestionButtonText: createButtonText,
|
|
208
|
+
hasTextControl: true
|
|
171
209
|
}));
|
|
172
210
|
}
|
|
173
211
|
|
|
212
|
+
function getRichTextValueFromSelection(value, isActive) {
|
|
213
|
+
// Default to the selection ranges on the RichTextValue object.
|
|
214
|
+
let textStart = value.start;
|
|
215
|
+
let textEnd = value.end; // If the format is currently active then the rich text value
|
|
216
|
+
// should always be taken from the bounds of the active format
|
|
217
|
+
// and not the selected text.
|
|
218
|
+
|
|
219
|
+
if (isActive) {
|
|
220
|
+
const boundary = getFormatBoundary(value, {
|
|
221
|
+
type: 'core/link'
|
|
222
|
+
});
|
|
223
|
+
textStart = boundary.start; // Text *selection* always extends +1 beyond the edge of the format.
|
|
224
|
+
// We account for that here.
|
|
225
|
+
|
|
226
|
+
textEnd = boundary.end + 1;
|
|
227
|
+
} // Get a RichTextValue containing the selected text content.
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
return slice(value, textStart, textEnd);
|
|
231
|
+
}
|
|
232
|
+
|
|
174
233
|
export default withSpokenMessages(InlineLinkUI);
|
|
175
234
|
//# sourceMappingURL=inline.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/format-library/src/link/inline.js"],"names":["useState","useRef","createInterpolateElement","__","sprintf","withSpokenMessages","Popover","prependHTTP","create","insert","isCollapsed","applyFormat","useAnchorRef","removeFormat","__experimentalLinkControl","LinkControl","store","blockEditorStore","useSelect","createLinkFormat","isValidHref","link","settings","InlineLinkUI","isActive","activeAttributes","addingLink","value","onChange","speak","stopAddingLink","contentRef","nextLinkValue","setNextLinkValue","createPageEntity","userCanCreatePages","select","getSettings","_settings","__experimentalCreatePageEntity","__experimentalUserCanCreatePages","linkValue","url","type","id","opensInNewTab","target","removeLink","newValue","onChangeLink","nextValue","didToggleSetting","didToggleSettingForNewLink","undefined","newUrl","format","String","opensInNewWindow","newText","title","toInsert","text","length","start","end","activeFormats","anchorRef","ref","focusOnMount","handleCreate","pageTitle","page","status","rendered","kind","createButtonText","searchTerm","mark","current"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useState, useRef, createInterpolateElement } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { withSpokenMessages, Popover } from '@wordpress/components';\nimport { prependHTTP } from '@wordpress/url';\nimport {\n\tcreate,\n\tinsert,\n\tisCollapsed,\n\tapplyFormat,\n\tuseAnchorRef,\n\tremoveFormat,\n} from '@wordpress/rich-text';\nimport {\n\t__experimentalLinkControl as LinkControl,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { createLinkFormat, isValidHref } from './utils';\nimport { link as settings } from './index';\n\nfunction InlineLinkUI( {\n\tisActive,\n\tactiveAttributes,\n\taddingLink,\n\tvalue,\n\tonChange,\n\tspeak,\n\tstopAddingLink,\n\tcontentRef,\n} ) {\n\t/**\n\t * Pending settings to be applied to the next link. When inserting a new\n\t * link, toggle values cannot be applied immediately, because there is not\n\t * yet a link for them to apply to. Thus, they are maintained in a state\n\t * value until the time that the link can be inserted or edited.\n\t *\n\t * @type {[Object|undefined,Function]}\n\t */\n\tconst [ nextLinkValue, setNextLinkValue ] = useState();\n\n\tconst { createPageEntity, userCanCreatePages } = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\tconst _settings = getSettings();\n\n\t\treturn {\n\t\t\tcreatePageEntity: _settings.__experimentalCreatePageEntity,\n\t\t\tuserCanCreatePages: _settings.__experimentalUserCanCreatePages,\n\t\t};\n\t}, [] );\n\n\tconst linkValue = {\n\t\turl: activeAttributes.url,\n\t\ttype: activeAttributes.type,\n\t\tid: activeAttributes.id,\n\t\topensInNewTab: activeAttributes.target === '_blank',\n\t\t...nextLinkValue,\n\t};\n\n\tfunction removeLink() {\n\t\tconst newValue = removeFormat( value, 'core/link' );\n\t\tonChange( newValue );\n\t\tstopAddingLink();\n\t\tspeak( __( 'Link removed.' ), 'assertive' );\n\t}\n\n\tfunction onChangeLink( nextValue ) {\n\t\t// Merge with values from state, both for the purpose of assigning the\n\t\t// next state value, and for use in constructing the new link format if\n\t\t// the link is ready to be applied.\n\t\tnextValue = {\n\t\t\t...nextLinkValue,\n\t\t\t...nextValue,\n\t\t};\n\n\t\t// LinkControl calls `onChange` immediately upon the toggling a setting.\n\t\tconst didToggleSetting =\n\t\t\tlinkValue.opensInNewTab !== nextValue.opensInNewTab &&\n\t\t\tlinkValue.url === nextValue.url;\n\n\t\t// If change handler was called as a result of a settings change during\n\t\t// link insertion, it must be held in state until the link is ready to\n\t\t// be applied.\n\t\tconst didToggleSettingForNewLink =\n\t\t\tdidToggleSetting && nextValue.url === undefined;\n\n\t\t// If link will be assigned, the state value can be considered flushed.\n\t\t// Otherwise, persist the pending changes.\n\t\tsetNextLinkValue( didToggleSettingForNewLink ? nextValue : undefined );\n\n\t\tif ( didToggleSettingForNewLink ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst newUrl = prependHTTP( nextValue.url );\n\t\tconst format = createLinkFormat( {\n\t\t\turl: newUrl,\n\t\t\ttype: nextValue.type,\n\t\t\tid:\n\t\t\t\tnextValue.id !== undefined && nextValue.id !== null\n\t\t\t\t\t? String( nextValue.id )\n\t\t\t\t\t: undefined,\n\t\t\topensInNewWindow: nextValue.opensInNewTab,\n\t\t} );\n\n\t\tif ( isCollapsed( value ) && ! isActive ) {\n\t\t\tconst newText = nextValue.title || newUrl;\n\t\t\tconst toInsert = applyFormat(\n\t\t\t\tcreate( { text: newText } ),\n\t\t\t\tformat,\n\t\t\t\t0,\n\t\t\t\tnewText.length\n\t\t\t);\n\t\t\tonChange( insert( value, toInsert ) );\n\t\t} else {\n\t\t\tconst newValue = applyFormat( value, format );\n\t\t\tnewValue.start = newValue.end;\n\t\t\tnewValue.activeFormats = [];\n\t\t\tonChange( newValue );\n\t\t}\n\n\t\t// Focus should only be shifted back to the formatted segment when the\n\t\t// URL is submitted.\n\t\tif ( ! didToggleSetting ) {\n\t\t\tstopAddingLink();\n\t\t}\n\n\t\tif ( ! isValidHref( newUrl ) ) {\n\t\t\tspeak(\n\t\t\t\t__(\n\t\t\t\t\t'Warning: the link has been inserted but may have errors. Please test it.'\n\t\t\t\t),\n\t\t\t\t'assertive'\n\t\t\t);\n\t\t} else if ( isActive ) {\n\t\t\tspeak( __( 'Link edited.' ), 'assertive' );\n\t\t} else {\n\t\t\tspeak( __( 'Link inserted.' ), 'assertive' );\n\t\t}\n\t}\n\n\tconst anchorRef = useAnchorRef( { ref: contentRef, value, settings } );\n\n\t// The focusOnMount prop shouldn't evolve during render of a Popover\n\t// otherwise it causes a render of the content.\n\tconst focusOnMount = useRef( addingLink ? 'firstElement' : false );\n\n\tasync function handleCreate( pageTitle ) {\n\t\tconst page = await createPageEntity( {\n\t\t\ttitle: pageTitle,\n\t\t\tstatus: 'draft',\n\t\t} );\n\n\t\treturn {\n\t\t\tid: page.id,\n\t\t\ttype: page.type,\n\t\t\ttitle: page.title.rendered,\n\t\t\turl: page.link,\n\t\t\tkind: 'post-type',\n\t\t};\n\t}\n\n\tfunction createButtonText( searchTerm ) {\n\t\treturn createInterpolateElement(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %s: search term. */\n\t\t\t\t__( 'Create Page: <mark>%s</mark>' ),\n\t\t\t\tsearchTerm\n\t\t\t),\n\t\t\t{ mark: <mark /> }\n\t\t);\n\t}\n\n\treturn (\n\t\t<Popover\n\t\t\tanchorRef={ anchorRef }\n\t\t\tfocusOnMount={ focusOnMount.current }\n\t\t\tonClose={ stopAddingLink }\n\t\t\tposition=\"bottom center\"\n\t\t>\n\t\t\t<LinkControl\n\t\t\t\tvalue={ linkValue }\n\t\t\t\tonChange={ onChangeLink }\n\t\t\t\tonRemove={ removeLink }\n\t\t\t\tforceIsEditingLink={ addingLink }\n\t\t\t\thasRichPreviews\n\t\t\t\tcreateSuggestion={ createPageEntity && handleCreate }\n\t\t\t\twithCreateSuggestion={ userCanCreatePages }\n\t\t\t\tcreateSuggestionButtonText={ createButtonText }\n\t\t\t/>\n\t\t</Popover>\n\t);\n}\n\nexport default withSpokenMessages( InlineLinkUI );\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/format-library/src/link/inline.js"],"names":["useState","useRef","createInterpolateElement","__","sprintf","withSpokenMessages","Popover","prependHTTP","create","insert","isCollapsed","applyFormat","useAnchorRef","removeFormat","slice","replace","__experimentalLinkControl","LinkControl","store","blockEditorStore","useSelect","createLinkFormat","isValidHref","getFormatBoundary","link","settings","useLinkInstanceKey","InlineLinkUI","isActive","activeAttributes","addingLink","value","onChange","speak","stopAddingLink","contentRef","richLinkTextValue","getRichTextValueFromSelection","richTextText","text","nextLinkValue","setNextLinkValue","createPageEntity","userCanCreatePages","select","getSettings","_settings","__experimentalCreatePageEntity","__experimentalUserCanCreatePages","linkValue","url","type","id","opensInNewTab","target","title","removeLink","newValue","onChangeLink","nextValue","didToggleSetting","didToggleSettingForNewLink","undefined","newUrl","linkFormat","String","opensInNewWindow","newText","toInsert","length","start","end","activeFormats","anchorRef","ref","forceRemountKey","focusOnMount","handleCreate","pageTitle","page","status","rendered","kind","createButtonText","searchTerm","mark","current","textStart","textEnd","boundary"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useState, useRef, createInterpolateElement } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { withSpokenMessages, Popover } from '@wordpress/components';\nimport { prependHTTP } from '@wordpress/url';\nimport {\n\tcreate,\n\tinsert,\n\tisCollapsed,\n\tapplyFormat,\n\tuseAnchorRef,\n\tremoveFormat,\n\tslice,\n\treplace,\n} from '@wordpress/rich-text';\nimport {\n\t__experimentalLinkControl as LinkControl,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { createLinkFormat, isValidHref, getFormatBoundary } from './utils';\nimport { link as settings } from './index';\nimport useLinkInstanceKey from './use-link-instance-key';\n\nfunction InlineLinkUI( {\n\tisActive,\n\tactiveAttributes,\n\taddingLink,\n\tvalue,\n\tonChange,\n\tspeak,\n\tstopAddingLink,\n\tcontentRef,\n} ) {\n\tconst richLinkTextValue = getRichTextValueFromSelection( value, isActive );\n\n\t// Get the text content minus any HTML tags.\n\tconst richTextText = richLinkTextValue.text;\n\n\t/**\n\t * Pending settings to be applied to the next link. When inserting a new\n\t * link, toggle values cannot be applied immediately, because there is not\n\t * yet a link for them to apply to. Thus, they are maintained in a state\n\t * value until the time that the link can be inserted or edited.\n\t *\n\t * @type {[Object|undefined,Function]}\n\t */\n\tconst [ nextLinkValue, setNextLinkValue ] = useState();\n\n\tconst { createPageEntity, userCanCreatePages } = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\tconst _settings = getSettings();\n\n\t\treturn {\n\t\t\tcreatePageEntity: _settings.__experimentalCreatePageEntity,\n\t\t\tuserCanCreatePages: _settings.__experimentalUserCanCreatePages,\n\t\t};\n\t}, [] );\n\n\tconst linkValue = {\n\t\turl: activeAttributes.url,\n\t\ttype: activeAttributes.type,\n\t\tid: activeAttributes.id,\n\t\topensInNewTab: activeAttributes.target === '_blank',\n\t\ttitle: richTextText,\n\t\t...nextLinkValue,\n\t};\n\n\tfunction removeLink() {\n\t\tconst newValue = removeFormat( value, 'core/link' );\n\t\tonChange( newValue );\n\t\tstopAddingLink();\n\t\tspeak( __( 'Link removed.' ), 'assertive' );\n\t}\n\n\tfunction onChangeLink( nextValue ) {\n\t\t// Merge with values from state, both for the purpose of assigning the\n\t\t// next state value, and for use in constructing the new link format if\n\t\t// the link is ready to be applied.\n\t\tnextValue = {\n\t\t\t...nextLinkValue,\n\t\t\t...nextValue,\n\t\t};\n\n\t\t// LinkControl calls `onChange` immediately upon the toggling a setting.\n\t\tconst didToggleSetting =\n\t\t\tlinkValue.opensInNewTab !== nextValue.opensInNewTab &&\n\t\t\tlinkValue.url === nextValue.url;\n\n\t\t// If change handler was called as a result of a settings change during\n\t\t// link insertion, it must be held in state until the link is ready to\n\t\t// be applied.\n\t\tconst didToggleSettingForNewLink =\n\t\t\tdidToggleSetting && nextValue.url === undefined;\n\n\t\t// If link will be assigned, the state value can be considered flushed.\n\t\t// Otherwise, persist the pending changes.\n\t\tsetNextLinkValue( didToggleSettingForNewLink ? nextValue : undefined );\n\n\t\tif ( didToggleSettingForNewLink ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst newUrl = prependHTTP( nextValue.url );\n\t\tconst linkFormat = createLinkFormat( {\n\t\t\turl: newUrl,\n\t\t\ttype: nextValue.type,\n\t\t\tid:\n\t\t\t\tnextValue.id !== undefined && nextValue.id !== null\n\t\t\t\t\t? String( nextValue.id )\n\t\t\t\t\t: undefined,\n\t\t\topensInNewWindow: nextValue.opensInNewTab,\n\t\t} );\n\n\t\tconst newText = nextValue.title || newUrl;\n\t\tif ( isCollapsed( value ) && ! isActive ) {\n\t\t\t// Scenario: we don't have any actively selected text or formats.\n\t\t\tconst toInsert = applyFormat(\n\t\t\t\tcreate( { text: newText } ),\n\t\t\t\tlinkFormat,\n\t\t\t\t0,\n\t\t\t\tnewText.length\n\t\t\t);\n\t\t\tonChange( insert( value, toInsert ) );\n\t\t} else {\n\t\t\t// Scenario: we have any active text selection or an active format\n\t\t\tlet newValue;\n\n\t\t\tif ( newText === richTextText ) {\n\t\t\t\t// If we're not updating the text then ignore\n\t\t\t\tnewValue = applyFormat( value, linkFormat );\n\t\t\t} else {\n\t\t\t\t// Create new RichText value for the new text in order that we\n\t\t\t\t// can apply formats to it.\n\t\t\t\tnewValue = create( { text: newText } );\n\n\t\t\t\t// Apply the new Link format to this new text value.\n\t\t\t\tnewValue = applyFormat(\n\t\t\t\t\tnewValue,\n\t\t\t\t\tlinkFormat,\n\t\t\t\t\t0,\n\t\t\t\t\tnewText.length\n\t\t\t\t);\n\n\t\t\t\t// Update the original (full) RichTextValue replacing the\n\t\t\t\t// target text with the *new* RichTextValue containing:\n\t\t\t\t// 1. The new text content.\n\t\t\t\t// 2. The new link format.\n\t\t\t\t// Note original formats will be lost when applying this change.\n\t\t\t\t// That is expected behaviour.\n\t\t\t\t// See: https://github.com/WordPress/gutenberg/pull/33849#issuecomment-936134179.\n\t\t\t\tnewValue = replace( value, richTextText, newValue );\n\t\t\t}\n\n\t\t\tnewValue.start = newValue.end;\n\t\t\tnewValue.activeFormats = [];\n\t\t\tonChange( newValue );\n\t\t}\n\n\t\t// Focus should only be shifted back to the formatted segment when the\n\t\t// URL is submitted.\n\t\tif ( ! didToggleSetting ) {\n\t\t\tstopAddingLink();\n\t\t}\n\n\t\tif ( ! isValidHref( newUrl ) ) {\n\t\t\tspeak(\n\t\t\t\t__(\n\t\t\t\t\t'Warning: the link has been inserted but may have errors. Please test it.'\n\t\t\t\t),\n\t\t\t\t'assertive'\n\t\t\t);\n\t\t} else if ( isActive ) {\n\t\t\tspeak( __( 'Link edited.' ), 'assertive' );\n\t\t} else {\n\t\t\tspeak( __( 'Link inserted.' ), 'assertive' );\n\t\t}\n\t}\n\n\tconst anchorRef = useAnchorRef( { ref: contentRef, value, settings } );\n\n\t// Generate a string based key that is unique to this anchor reference.\n\t// This is used to force re-mount the LinkControl component to avoid\n\t// potential stale state bugs caused by the component not being remounted\n\t// See https://github.com/WordPress/gutenberg/pull/34742.\n\tconst forceRemountKey = useLinkInstanceKey( anchorRef );\n\n\t// The focusOnMount prop shouldn't evolve during render of a Popover\n\t// otherwise it causes a render of the content.\n\tconst focusOnMount = useRef( addingLink ? 'firstElement' : false );\n\n\tasync function handleCreate( pageTitle ) {\n\t\tconst page = await createPageEntity( {\n\t\t\ttitle: pageTitle,\n\t\t\tstatus: 'draft',\n\t\t} );\n\n\t\treturn {\n\t\t\tid: page.id,\n\t\t\ttype: page.type,\n\t\t\ttitle: page.title.rendered,\n\t\t\turl: page.link,\n\t\t\tkind: 'post-type',\n\t\t};\n\t}\n\n\tfunction createButtonText( searchTerm ) {\n\t\treturn createInterpolateElement(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %s: search term. */\n\t\t\t\t__( 'Create Page: <mark>%s</mark>' ),\n\t\t\t\tsearchTerm\n\t\t\t),\n\t\t\t{ mark: <mark /> }\n\t\t);\n\t}\n\n\treturn (\n\t\t<Popover\n\t\t\tanchorRef={ anchorRef }\n\t\t\tfocusOnMount={ focusOnMount.current }\n\t\t\tonClose={ stopAddingLink }\n\t\t\tposition=\"bottom center\"\n\t\t>\n\t\t\t<LinkControl\n\t\t\t\tkey={ forceRemountKey }\n\t\t\t\tvalue={ linkValue }\n\t\t\t\tonChange={ onChangeLink }\n\t\t\t\tonRemove={ removeLink }\n\t\t\t\tforceIsEditingLink={ addingLink }\n\t\t\t\thasRichPreviews\n\t\t\t\tcreateSuggestion={ createPageEntity && handleCreate }\n\t\t\t\twithCreateSuggestion={ userCanCreatePages }\n\t\t\t\tcreateSuggestionButtonText={ createButtonText }\n\t\t\t\thasTextControl\n\t\t\t/>\n\t\t</Popover>\n\t);\n}\n\nfunction getRichTextValueFromSelection( value, isActive ) {\n\t// Default to the selection ranges on the RichTextValue object.\n\tlet textStart = value.start;\n\tlet textEnd = value.end;\n\n\t// If the format is currently active then the rich text value\n\t// should always be taken from the bounds of the active format\n\t// and not the selected text.\n\tif ( isActive ) {\n\t\tconst boundary = getFormatBoundary( value, {\n\t\t\ttype: 'core/link',\n\t\t} );\n\n\t\ttextStart = boundary.start;\n\n\t\t// Text *selection* always extends +1 beyond the edge of the format.\n\t\t// We account for that here.\n\t\ttextEnd = boundary.end + 1;\n\t}\n\n\t// Get a RichTextValue containing the selected text content.\n\treturn slice( value, textStart, textEnd );\n}\n\nexport default withSpokenMessages( InlineLinkUI );\n"]}
|
|
@@ -22,10 +22,12 @@ const LinkPickerScreen = () => {
|
|
|
22
22
|
const navigation = useNavigation();
|
|
23
23
|
const route = useRoute();
|
|
24
24
|
|
|
25
|
-
const onLinkPicked =
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
const onLinkPicked = _ref => {
|
|
26
|
+
let {
|
|
27
|
+
url,
|
|
28
|
+
title
|
|
29
|
+
} = _ref;
|
|
30
|
+
|
|
29
31
|
if (Platform.OS === 'android') {
|
|
30
32
|
Keyboard.dismiss();
|
|
31
33
|
delay(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/format-library/src/link/modal-screens/link-picker-screen.native.js"],"names":["Platform","Keyboard","useNavigation","useRoute","delay","useMemo","LinkPicker","linkSettingsScreens","LinkPickerScreen","navigation","route","onLinkPicked","url","title","OS","dismiss","navigate","settings","inputValue","text","onCancel","goBack","params"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,QAAT,EAAmBC,QAAnB,QAAmC,cAAnC;AACA,SAASC,aAAT,EAAwBC,QAAxB,QAAwC,0BAAxC;AACA,SAASC,KAAT,QAAsB,QAAtB;AACA;AACA;AACA;;AACA,SAASC,OAAT,QAAwB,oBAAxB;AAEA,SAASC,UAAT,QAA2B,uBAA3B;AAEA;AACA;AACA;;AACA,OAAOC,mBAAP,MAAgC,WAAhC;;AAEA,MAAMC,gBAAgB,GAAG,MAAM;AAC9B,QAAMC,UAAU,GAAGP,aAAa,EAAhC;AACA,QAAMQ,KAAK,GAAGP,QAAQ,EAAtB;;AACA,QAAMQ,YAAY,GAAG,
|
|
1
|
+
{"version":3,"sources":["@wordpress/format-library/src/link/modal-screens/link-picker-screen.native.js"],"names":["Platform","Keyboard","useNavigation","useRoute","delay","useMemo","LinkPicker","linkSettingsScreens","LinkPickerScreen","navigation","route","onLinkPicked","url","title","OS","dismiss","navigate","settings","inputValue","text","onCancel","goBack","params"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,QAAT,EAAmBC,QAAnB,QAAmC,cAAnC;AACA,SAASC,aAAT,EAAwBC,QAAxB,QAAwC,0BAAxC;AACA,SAASC,KAAT,QAAsB,QAAtB;AACA;AACA;AACA;;AACA,SAASC,OAAT,QAAwB,oBAAxB;AAEA,SAASC,UAAT,QAA2B,uBAA3B;AAEA;AACA;AACA;;AACA,OAAOC,mBAAP,MAAgC,WAAhC;;AAEA,MAAMC,gBAAgB,GAAG,MAAM;AAC9B,QAAMC,UAAU,GAAGP,aAAa,EAAhC;AACA,QAAMQ,KAAK,GAAGP,QAAQ,EAAtB;;AACA,QAAMQ,YAAY,GAAG,QAAsB;AAAA,QAApB;AAAEC,MAAAA,GAAF;AAAOC,MAAAA;AAAP,KAAoB;;AAC1C,QAAKb,QAAQ,CAACc,EAAT,KAAgB,SAArB,EAAiC;AAChCb,MAAAA,QAAQ,CAACc,OAAT;AACAX,MAAAA,KAAK,CAAE,MAAM;AACZK,QAAAA,UAAU,CAACO,QAAX,CAAqBT,mBAAmB,CAACU,QAAzC,EAAmD;AAClDC,UAAAA,UAAU,EAAEN,GADsC;AAElDO,UAAAA,IAAI,EAAEN;AAF4C,SAAnD;AAIA,OALI,EAKF,GALE,CAAL;AAMA;AACA;;AACDJ,IAAAA,UAAU,CAACO,QAAX,CAAqBT,mBAAmB,CAACU,QAAzC,EAAmD;AAClDC,MAAAA,UAAU,EAAEN,GADsC;AAElDO,MAAAA,IAAI,EAAEN;AAF4C,KAAnD;AAIA,GAfD;;AAiBA,QAAMO,QAAQ,GAAG,MAAM;AACtB,QAAKpB,QAAQ,CAACc,EAAT,KAAgB,SAArB,EAAiC;AAChCb,MAAAA,QAAQ,CAACc,OAAT;AACAX,MAAAA,KAAK,CAAE,MAAM;AACZK,QAAAA,UAAU,CAACY,MAAX;AACA,OAFI,EAEF,GAFE,CAAL;AAGA;AACA;;AACDZ,IAAAA,UAAU,CAACY,MAAX;AACA,GATD;;AAWA,QAAM;AAAEH,IAAAA;AAAF,MAAiBR,KAAK,CAACY,MAA7B;AACA,SAAOjB,OAAO,CAAE,MAAM;AACrB,WACC,cAAC,UAAD;AACC,MAAA,KAAK,EAAGa,UADT;AAEC,MAAA,YAAY,EAAGP,YAFhB;AAGC,MAAA,QAAQ,EAAGS;AAHZ,MADD;AAOA,GARa,EAQX,CAAEF,UAAF,CARW,CAAd;AASA,CAzCD;;AA2CA,eAAeV,gBAAf","sourcesContent":["/**\n * External dependencies\n */\nimport { Platform, Keyboard } from 'react-native';\nimport { useNavigation, useRoute } from '@react-navigation/native';\nimport { delay } from 'lodash';\n/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\n\nimport { LinkPicker } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport linkSettingsScreens from './screens';\n\nconst LinkPickerScreen = () => {\n\tconst navigation = useNavigation();\n\tconst route = useRoute();\n\tconst onLinkPicked = ( { url, title } ) => {\n\t\tif ( Platform.OS === 'android' ) {\n\t\t\tKeyboard.dismiss();\n\t\t\tdelay( () => {\n\t\t\t\tnavigation.navigate( linkSettingsScreens.settings, {\n\t\t\t\t\tinputValue: url,\n\t\t\t\t\ttext: title,\n\t\t\t\t} );\n\t\t\t}, 100 );\n\t\t\treturn;\n\t\t}\n\t\tnavigation.navigate( linkSettingsScreens.settings, {\n\t\t\tinputValue: url,\n\t\t\ttext: title,\n\t\t} );\n\t};\n\n\tconst onCancel = () => {\n\t\tif ( Platform.OS === 'android' ) {\n\t\t\tKeyboard.dismiss();\n\t\t\tdelay( () => {\n\t\t\t\tnavigation.goBack();\n\t\t\t}, 100 );\n\t\t\treturn;\n\t\t}\n\t\tnavigation.goBack();\n\t};\n\n\tconst { inputValue } = route.params;\n\treturn useMemo( () => {\n\t\treturn (\n\t\t\t<LinkPicker\n\t\t\t\tvalue={ inputValue }\n\t\t\t\tonLinkPicked={ onLinkPicked }\n\t\t\t\tonCancel={ onCancel }\n\t\t\t/>\n\t\t);\n\t}, [ inputValue ] );\n};\n\nexport default LinkPickerScreen;\n"]}
|
|
@@ -22,18 +22,19 @@ import { createLinkFormat, isValidHref } from '../utils';
|
|
|
22
22
|
import linkSettingsScreens from './screens';
|
|
23
23
|
import styles from '../modal.scss';
|
|
24
24
|
|
|
25
|
-
const LinkSettingsScreen =
|
|
26
|
-
onRemove,
|
|
27
|
-
onClose,
|
|
28
|
-
onChange,
|
|
29
|
-
speak,
|
|
30
|
-
value,
|
|
31
|
-
isActive,
|
|
32
|
-
activeAttributes,
|
|
33
|
-
isVisible
|
|
34
|
-
}) => {
|
|
25
|
+
const LinkSettingsScreen = _ref => {
|
|
35
26
|
var _route$params;
|
|
36
27
|
|
|
28
|
+
let {
|
|
29
|
+
onRemove,
|
|
30
|
+
onClose,
|
|
31
|
+
onChange,
|
|
32
|
+
speak,
|
|
33
|
+
value,
|
|
34
|
+
isActive,
|
|
35
|
+
activeAttributes,
|
|
36
|
+
isVisible
|
|
37
|
+
} = _ref;
|
|
37
38
|
const [text, setText] = useState(getTextContent(slice(value)));
|
|
38
39
|
const [opensInNewWindow, setOpensInNewWindows] = useState(activeAttributes.target === '_blank');
|
|
39
40
|
const [linkValues, setLinkValues] = useState({
|
|
@@ -86,7 +87,8 @@ const LinkSettingsScreen = ({
|
|
|
86
87
|
});
|
|
87
88
|
};
|
|
88
89
|
|
|
89
|
-
const submitLink = (
|
|
90
|
+
const submitLink = function () {
|
|
91
|
+
let shouldCloseBottomSheet = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
90
92
|
const url = prependHTTP(inputValue);
|
|
91
93
|
const linkText = text || inputValue;
|
|
92
94
|
const format = createLinkFormat({
|
|
@@ -145,7 +147,8 @@ const LinkSettingsScreen = ({
|
|
|
145
147
|
}
|
|
146
148
|
};
|
|
147
149
|
|
|
148
|
-
const removeLink = (
|
|
150
|
+
const removeLink = function () {
|
|
151
|
+
let shouldCloseBottomSheet = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
149
152
|
clearFormat();
|
|
150
153
|
onRemove();
|
|
151
154
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/format-library/src/link/modal-screens/link-settings-screen.native.js"],"names":["useNavigation","useRoute","__","useState","useContext","useEffect","useMemo","prependHTTP","BottomSheet","BottomSheetContext","create","insert","isCollapsed","applyFormat","getTextContent","slice","external","textColor","createLinkFormat","isValidHref","linkSettingsScreens","styles","LinkSettingsScreen","onRemove","onClose","onChange","speak","value","isActive","activeAttributes","isVisible","text","setText","opensInNewWindow","setOpensInNewWindows","target","linkValues","setLinkValues","isActiveLink","isRemovingLink","shouldEnableBottomSheetMaxHeight","onHandleClosingBottomSheet","listProps","navigation","route","inputValue","url","params","onLinkCellPressed","navigate","picker","submit","submitLink","removeLink","clearFormat","activeFormats","shouldCloseBottomSheet","linkText","format","newAttributes","toInsert","length","start","end","textLength","needsSelectionUpdate","submitValue","unsubscribe","addListener","shouldShowLinkOptions","undefined","clearLinkButton","safeAreaBottomInset"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { useNavigation, useRoute } from '@react-navigation/native';\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useState, useContext, useEffect, useMemo } from '@wordpress/element';\nimport { prependHTTP } from '@wordpress/url';\n\nimport { BottomSheet, BottomSheetContext } from '@wordpress/components';\nimport {\n\tcreate,\n\tinsert,\n\tisCollapsed,\n\tapplyFormat,\n\tgetTextContent,\n\tslice,\n} from '@wordpress/rich-text';\nimport { external, textColor } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { createLinkFormat, isValidHref } from '../utils';\nimport linkSettingsScreens from './screens';\n\nimport styles from '../modal.scss';\n\nconst LinkSettingsScreen = ( {\n\tonRemove,\n\tonClose,\n\tonChange,\n\tspeak,\n\tvalue,\n\tisActive,\n\tactiveAttributes,\n\tisVisible,\n} ) => {\n\tconst [ text, setText ] = useState( getTextContent( slice( value ) ) );\n\tconst [ opensInNewWindow, setOpensInNewWindows ] = useState(\n\t\tactiveAttributes.target === '_blank'\n\t);\n\tconst [ linkValues, setLinkValues ] = useState( {\n\t\tisActiveLink: isActive,\n\t\tisRemovingLink: false,\n\t} );\n\n\tconst {\n\t\tshouldEnableBottomSheetMaxHeight,\n\t\tonHandleClosingBottomSheet,\n\t\tlistProps,\n\t} = useContext( BottomSheetContext );\n\n\tconst navigation = useNavigation();\n\tconst route = useRoute();\n\tconst { inputValue = activeAttributes.url || '' } = route.params || {};\n\tconst onLinkCellPressed = () => {\n\t\tshouldEnableBottomSheetMaxHeight( false );\n\t\tnavigation.navigate( linkSettingsScreens.picker, { inputValue } );\n\t};\n\tuseEffect( () => {\n\t\tonHandleClosingBottomSheet( () => {\n\t\t\tsubmit( inputValue );\n\t\t} );\n\t}, [ inputValue, opensInNewWindow, text ] );\n\n\tuseEffect( () => {\n\t\tconst { isActiveLink, isRemovingLink } = linkValues;\n\t\tif ( !! inputValue && ! isActiveLink && isVisible ) {\n\t\t\tsubmitLink( false );\n\t\t} else if ( ( inputValue === '' && isActiveLink ) || isRemovingLink ) {\n\t\t\tremoveLink( false );\n\t\t}\n\t}, [\n\t\tinputValue,\n\t\tisVisible,\n\t\tlinkValues.isActiveLink,\n\t\tlinkValues.isRemovingLink,\n\t] );\n\n\tconst clearFormat = () => {\n\t\tonChange( { ...value, activeFormats: [] } );\n\t\tsetLinkValues( { isActiveLink: false, isRemovingLink: true } );\n\t};\n\n\tconst submitLink = ( shouldCloseBottomSheet = true ) => {\n\t\tconst url = prependHTTP( inputValue );\n\t\tconst linkText = text || inputValue;\n\t\tconst format = createLinkFormat( {\n\t\t\turl,\n\t\t\topensInNewWindow,\n\t\t\ttext: linkText,\n\t\t} );\n\t\tlet newAttributes;\n\t\tif ( isCollapsed( value ) && ! isActive ) {\n\t\t\t// insert link\n\t\t\tconst toInsert = applyFormat(\n\t\t\t\tcreate( { text: linkText } ),\n\t\t\t\tformat,\n\t\t\t\t0,\n\t\t\t\tlinkText.length\n\t\t\t);\n\t\t\tnewAttributes = insert( value, toInsert );\n\t\t} else if ( text !== getTextContent( slice( value ) ) ) {\n\t\t\t// edit text in selected link\n\t\t\tconst toInsert = applyFormat(\n\t\t\t\tcreate( { text } ),\n\t\t\t\tformat,\n\t\t\t\t0,\n\t\t\t\ttext.length\n\t\t\t);\n\t\t\tnewAttributes = insert( value, toInsert, value.start, value.end );\n\t\t} else {\n\t\t\t// transform selected text into link\n\t\t\tnewAttributes = applyFormat( value, format );\n\t\t}\n\t\t// move selection to end of link\n\t\tconst textLength = newAttributes.text.length;\n\t\t// check for zero width spaces\n\t\tif ( newAttributes.end > textLength ) {\n\t\t\tnewAttributes.start = textLength;\n\t\t\tnewAttributes.end = textLength;\n\t\t} else {\n\t\t\tnewAttributes.start = newAttributes.end;\n\t\t}\n\t\tnewAttributes.activeFormats = [];\n\t\tonChange( { ...newAttributes, needsSelectionUpdate: true } );\n\t\tsetLinkValues( { isActiveLink: true, isRemovingLink: false } );\n\n\t\tif ( ! isValidHref( url ) ) {\n\t\t\tspeak(\n\t\t\t\t__(\n\t\t\t\t\t'Warning: the link has been inserted but may have errors. Please test it.'\n\t\t\t\t),\n\t\t\t\t'assertive'\n\t\t\t);\n\t\t} else if ( isActive ) {\n\t\t\tspeak( __( 'Link edited.' ), 'assertive' );\n\t\t} else {\n\t\t\tspeak( __( 'Link inserted' ), 'assertive' );\n\t\t}\n\n\t\tif ( shouldCloseBottomSheet ) {\n\t\t\tonClose();\n\t\t}\n\t};\n\n\tconst removeLink = ( shouldCloseBottomSheet = true ) => {\n\t\tclearFormat();\n\t\tonRemove();\n\t\tif ( shouldCloseBottomSheet ) {\n\t\t\tonClose();\n\t\t}\n\t};\n\n\tconst submit = ( submitValue ) => {\n\t\tif ( submitValue === '' ) {\n\t\t\tremoveLink();\n\t\t} else {\n\t\t\tsubmitLink();\n\t\t}\n\t};\n\n\tuseEffect( () => {\n\t\tconst unsubscribe = navigation.addListener( 'focus', () => {\n\t\t\tconst { params = {} } = route;\n\t\t\tif ( ! text && params.text ) {\n\t\t\t\tsetText( params.text );\n\t\t\t}\n\t\t} );\n\t\treturn unsubscribe;\n\t}, [ navigation, route.params?.text, text ] );\n\n\treturn useMemo( () => {\n\t\tconst shouldShowLinkOptions = !! inputValue;\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<BottomSheet.LinkCell\n\t\t\t\t\tvalue={ inputValue }\n\t\t\t\t\tonPress={ onLinkCellPressed }\n\t\t\t\t/>\n\t\t\t\t<BottomSheet.Cell\n\t\t\t\t\ticon={ textColor }\n\t\t\t\t\tlabel={ __( 'Link text' ) }\n\t\t\t\t\tvalue={ text }\n\t\t\t\t\tplaceholder={ __( 'Add link text' ) }\n\t\t\t\t\tonChangeValue={ setText }\n\t\t\t\t\tonSubmit={ submit }\n\t\t\t\t\tseparatorType={ shouldShowLinkOptions ? undefined : 'none' }\n\t\t\t\t/>\n\t\t\t\t{ shouldShowLinkOptions && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<BottomSheet.SwitchCell\n\t\t\t\t\t\t\ticon={ external }\n\t\t\t\t\t\t\tlabel={ __( 'Open in new tab' ) }\n\t\t\t\t\t\t\tvalue={ opensInNewWindow }\n\t\t\t\t\t\t\tonValueChange={ setOpensInNewWindows }\n\t\t\t\t\t\t\tseparatorType={ 'fullWidth' }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<BottomSheet.Cell\n\t\t\t\t\t\t\tlabel={ __( 'Remove link' ) }\n\t\t\t\t\t\t\tlabelStyle={ styles.clearLinkButton }\n\t\t\t\t\t\t\tseparatorType={ 'none' }\n\t\t\t\t\t\t\tonPress={ removeLink }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</>\n\t\t\t\t) }\n\t\t\t</>\n\t\t);\n\t}, [ inputValue, text, opensInNewWindow, listProps.safeAreaBottomInset ] );\n};\n\nexport default LinkSettingsScreen;\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/format-library/src/link/modal-screens/link-settings-screen.native.js"],"names":["useNavigation","useRoute","__","useState","useContext","useEffect","useMemo","prependHTTP","BottomSheet","BottomSheetContext","create","insert","isCollapsed","applyFormat","getTextContent","slice","external","textColor","createLinkFormat","isValidHref","linkSettingsScreens","styles","LinkSettingsScreen","onRemove","onClose","onChange","speak","value","isActive","activeAttributes","isVisible","text","setText","opensInNewWindow","setOpensInNewWindows","target","linkValues","setLinkValues","isActiveLink","isRemovingLink","shouldEnableBottomSheetMaxHeight","onHandleClosingBottomSheet","listProps","navigation","route","inputValue","url","params","onLinkCellPressed","navigate","picker","submit","submitLink","removeLink","clearFormat","activeFormats","shouldCloseBottomSheet","linkText","format","newAttributes","toInsert","length","start","end","textLength","needsSelectionUpdate","submitValue","unsubscribe","addListener","shouldShowLinkOptions","undefined","clearLinkButton","safeAreaBottomInset"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { useNavigation, useRoute } from '@react-navigation/native';\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useState, useContext, useEffect, useMemo } from '@wordpress/element';\nimport { prependHTTP } from '@wordpress/url';\n\nimport { BottomSheet, BottomSheetContext } from '@wordpress/components';\nimport {\n\tcreate,\n\tinsert,\n\tisCollapsed,\n\tapplyFormat,\n\tgetTextContent,\n\tslice,\n} from '@wordpress/rich-text';\nimport { external, textColor } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { createLinkFormat, isValidHref } from '../utils';\nimport linkSettingsScreens from './screens';\n\nimport styles from '../modal.scss';\n\nconst LinkSettingsScreen = ( {\n\tonRemove,\n\tonClose,\n\tonChange,\n\tspeak,\n\tvalue,\n\tisActive,\n\tactiveAttributes,\n\tisVisible,\n} ) => {\n\tconst [ text, setText ] = useState( getTextContent( slice( value ) ) );\n\tconst [ opensInNewWindow, setOpensInNewWindows ] = useState(\n\t\tactiveAttributes.target === '_blank'\n\t);\n\tconst [ linkValues, setLinkValues ] = useState( {\n\t\tisActiveLink: isActive,\n\t\tisRemovingLink: false,\n\t} );\n\n\tconst {\n\t\tshouldEnableBottomSheetMaxHeight,\n\t\tonHandleClosingBottomSheet,\n\t\tlistProps,\n\t} = useContext( BottomSheetContext );\n\n\tconst navigation = useNavigation();\n\tconst route = useRoute();\n\tconst { inputValue = activeAttributes.url || '' } = route.params || {};\n\tconst onLinkCellPressed = () => {\n\t\tshouldEnableBottomSheetMaxHeight( false );\n\t\tnavigation.navigate( linkSettingsScreens.picker, { inputValue } );\n\t};\n\tuseEffect( () => {\n\t\tonHandleClosingBottomSheet( () => {\n\t\t\tsubmit( inputValue );\n\t\t} );\n\t}, [ inputValue, opensInNewWindow, text ] );\n\n\tuseEffect( () => {\n\t\tconst { isActiveLink, isRemovingLink } = linkValues;\n\t\tif ( !! inputValue && ! isActiveLink && isVisible ) {\n\t\t\tsubmitLink( false );\n\t\t} else if ( ( inputValue === '' && isActiveLink ) || isRemovingLink ) {\n\t\t\tremoveLink( false );\n\t\t}\n\t}, [\n\t\tinputValue,\n\t\tisVisible,\n\t\tlinkValues.isActiveLink,\n\t\tlinkValues.isRemovingLink,\n\t] );\n\n\tconst clearFormat = () => {\n\t\tonChange( { ...value, activeFormats: [] } );\n\t\tsetLinkValues( { isActiveLink: false, isRemovingLink: true } );\n\t};\n\n\tconst submitLink = ( shouldCloseBottomSheet = true ) => {\n\t\tconst url = prependHTTP( inputValue );\n\t\tconst linkText = text || inputValue;\n\t\tconst format = createLinkFormat( {\n\t\t\turl,\n\t\t\topensInNewWindow,\n\t\t\ttext: linkText,\n\t\t} );\n\t\tlet newAttributes;\n\t\tif ( isCollapsed( value ) && ! isActive ) {\n\t\t\t// insert link\n\t\t\tconst toInsert = applyFormat(\n\t\t\t\tcreate( { text: linkText } ),\n\t\t\t\tformat,\n\t\t\t\t0,\n\t\t\t\tlinkText.length\n\t\t\t);\n\t\t\tnewAttributes = insert( value, toInsert );\n\t\t} else if ( text !== getTextContent( slice( value ) ) ) {\n\t\t\t// edit text in selected link\n\t\t\tconst toInsert = applyFormat(\n\t\t\t\tcreate( { text } ),\n\t\t\t\tformat,\n\t\t\t\t0,\n\t\t\t\ttext.length\n\t\t\t);\n\t\t\tnewAttributes = insert( value, toInsert, value.start, value.end );\n\t\t} else {\n\t\t\t// transform selected text into link\n\t\t\tnewAttributes = applyFormat( value, format );\n\t\t}\n\t\t// move selection to end of link\n\t\tconst textLength = newAttributes.text.length;\n\t\t// check for zero width spaces\n\t\tif ( newAttributes.end > textLength ) {\n\t\t\tnewAttributes.start = textLength;\n\t\t\tnewAttributes.end = textLength;\n\t\t} else {\n\t\t\tnewAttributes.start = newAttributes.end;\n\t\t}\n\t\tnewAttributes.activeFormats = [];\n\t\tonChange( { ...newAttributes, needsSelectionUpdate: true } );\n\t\tsetLinkValues( { isActiveLink: true, isRemovingLink: false } );\n\n\t\tif ( ! isValidHref( url ) ) {\n\t\t\tspeak(\n\t\t\t\t__(\n\t\t\t\t\t'Warning: the link has been inserted but may have errors. Please test it.'\n\t\t\t\t),\n\t\t\t\t'assertive'\n\t\t\t);\n\t\t} else if ( isActive ) {\n\t\t\tspeak( __( 'Link edited.' ), 'assertive' );\n\t\t} else {\n\t\t\tspeak( __( 'Link inserted' ), 'assertive' );\n\t\t}\n\n\t\tif ( shouldCloseBottomSheet ) {\n\t\t\tonClose();\n\t\t}\n\t};\n\n\tconst removeLink = ( shouldCloseBottomSheet = true ) => {\n\t\tclearFormat();\n\t\tonRemove();\n\t\tif ( shouldCloseBottomSheet ) {\n\t\t\tonClose();\n\t\t}\n\t};\n\n\tconst submit = ( submitValue ) => {\n\t\tif ( submitValue === '' ) {\n\t\t\tremoveLink();\n\t\t} else {\n\t\t\tsubmitLink();\n\t\t}\n\t};\n\n\tuseEffect( () => {\n\t\tconst unsubscribe = navigation.addListener( 'focus', () => {\n\t\t\tconst { params = {} } = route;\n\t\t\tif ( ! text && params.text ) {\n\t\t\t\tsetText( params.text );\n\t\t\t}\n\t\t} );\n\t\treturn unsubscribe;\n\t}, [ navigation, route.params?.text, text ] );\n\n\treturn useMemo( () => {\n\t\tconst shouldShowLinkOptions = !! inputValue;\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<BottomSheet.LinkCell\n\t\t\t\t\tvalue={ inputValue }\n\t\t\t\t\tonPress={ onLinkCellPressed }\n\t\t\t\t/>\n\t\t\t\t<BottomSheet.Cell\n\t\t\t\t\ticon={ textColor }\n\t\t\t\t\tlabel={ __( 'Link text' ) }\n\t\t\t\t\tvalue={ text }\n\t\t\t\t\tplaceholder={ __( 'Add link text' ) }\n\t\t\t\t\tonChangeValue={ setText }\n\t\t\t\t\tonSubmit={ submit }\n\t\t\t\t\tseparatorType={ shouldShowLinkOptions ? undefined : 'none' }\n\t\t\t\t/>\n\t\t\t\t{ shouldShowLinkOptions && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<BottomSheet.SwitchCell\n\t\t\t\t\t\t\ticon={ external }\n\t\t\t\t\t\t\tlabel={ __( 'Open in new tab' ) }\n\t\t\t\t\t\t\tvalue={ opensInNewWindow }\n\t\t\t\t\t\t\tonValueChange={ setOpensInNewWindows }\n\t\t\t\t\t\t\tseparatorType={ 'fullWidth' }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<BottomSheet.Cell\n\t\t\t\t\t\t\tlabel={ __( 'Remove link' ) }\n\t\t\t\t\t\t\tlabelStyle={ styles.clearLinkButton }\n\t\t\t\t\t\t\tseparatorType={ 'none' }\n\t\t\t\t\t\t\tonPress={ removeLink }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</>\n\t\t\t\t) }\n\t\t\t</>\n\t\t);\n\t}, [ inputValue, text, opensInNewWindow, listProps.safeAreaBottomInset ] );\n};\n\nexport default LinkSettingsScreen;\n"]}
|
|
@@ -14,10 +14,11 @@ import screens from './modal-screens/screens';
|
|
|
14
14
|
import LinkSettingsScreen from './modal-screens/link-settings-screen';
|
|
15
15
|
import LinkPickerScreen from './modal-screens/link-picker-screen';
|
|
16
16
|
|
|
17
|
-
const ModalLinkUI =
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
const ModalLinkUI = _ref => {
|
|
18
|
+
let {
|
|
19
|
+
isVisible,
|
|
20
|
+
...restProps
|
|
21
|
+
} = _ref;
|
|
21
22
|
return useMemo(() => {
|
|
22
23
|
return createElement(BottomSheet, {
|
|
23
24
|
isVisible: isVisible,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/format-library/src/link/modal.native.js"],"names":["useMemo","BottomSheet","withSpokenMessages","screens","LinkSettingsScreen","LinkPickerScreen","ModalLinkUI","isVisible","restProps","onClose","settings","picker"],"mappings":";;;AAAA;AACA;AACA;AACA,SAASA,OAAT,QAAwB,oBAAxB;AACA,SAASC,WAAT,EAAsBC,kBAAtB,QAAgD,uBAAhD;AAEA;AACA;AACA;;AACA,OAAOC,OAAP,MAAoB,yBAApB;AACA,OAAOC,kBAAP,MAA+B,sCAA/B;AACA,OAAOC,gBAAP,MAA6B,oCAA7B;;AAEA,MAAMC,WAAW,GAAG,
|
|
1
|
+
{"version":3,"sources":["@wordpress/format-library/src/link/modal.native.js"],"names":["useMemo","BottomSheet","withSpokenMessages","screens","LinkSettingsScreen","LinkPickerScreen","ModalLinkUI","isVisible","restProps","onClose","settings","picker"],"mappings":";;;AAAA;AACA;AACA;AACA,SAASA,OAAT,QAAwB,oBAAxB;AACA,SAASC,WAAT,EAAsBC,kBAAtB,QAAgD,uBAAhD;AAEA;AACA;AACA;;AACA,OAAOC,OAAP,MAAoB,yBAApB;AACA,OAAOC,kBAAP,MAA+B,sCAA/B;AACA,OAAOC,gBAAP,MAA6B,oCAA7B;;AAEA,MAAMC,WAAW,GAAG,QAAmC;AAAA,MAAjC;AAAEC,IAAAA,SAAF;AAAa,OAAGC;AAAhB,GAAiC;AACtD,SAAOR,OAAO,CAAE,MAAM;AACrB,WACC,cAAC,WAAD;AACC,MAAA,SAAS,EAAGO,SADb;AAEC,MAAA,UAAU,MAFX;AAGC,MAAA,OAAO,EAAGC,SAAS,CAACC,OAHrB;AAIC,MAAA,aAAa;AAJd,OAMC,cAAC,WAAD,CAAa,mBAAb;AAAiC,MAAA,OAAO,MAAxC;AAAyC,MAAA,IAAI;AAA7C,OACC,cAAC,WAAD,CAAa,gBAAb;AAA8B,MAAA,IAAI,EAAGN,OAAO,CAACO;AAA7C,OACC,cAAC,kBAAD;AACC,MAAA,SAAS,EAAGH;AADb,OAEMC,SAFN,EADD,CADD,EAOC,cAAC,WAAD,CAAa,gBAAb;AACC,MAAA,IAAI,EAAGL,OAAO,CAACQ,MADhB;AAEC,MAAA,YAAY,MAFb;AAGC,MAAA,UAAU;AAHX,OAKC,cAAC,gBAAD,OALD,CAPD,CAND,CADD;AAwBA,GAzBa,EAyBX,CAAEJ,SAAF,CAzBW,CAAd;AA0BA,CA3BD;;AA6BA,eAAeL,kBAAkB,CAAEI,WAAF,CAAjC","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport { BottomSheet, withSpokenMessages } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport screens from './modal-screens/screens';\nimport LinkSettingsScreen from './modal-screens/link-settings-screen';\nimport LinkPickerScreen from './modal-screens/link-picker-screen';\n\nconst ModalLinkUI = ( { isVisible, ...restProps } ) => {\n\treturn useMemo( () => {\n\t\treturn (\n\t\t\t<BottomSheet\n\t\t\t\tisVisible={ isVisible }\n\t\t\t\thideHeader\n\t\t\t\tonClose={ restProps.onClose }\n\t\t\t\thasNavigation\n\t\t\t>\n\t\t\t\t<BottomSheet.NavigationContainer animate main>\n\t\t\t\t\t<BottomSheet.NavigationScreen name={ screens.settings }>\n\t\t\t\t\t\t<LinkSettingsScreen\n\t\t\t\t\t\t\tisVisible={ isVisible }\n\t\t\t\t\t\t\t{ ...restProps }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</BottomSheet.NavigationScreen>\n\t\t\t\t\t<BottomSheet.NavigationScreen\n\t\t\t\t\t\tname={ screens.picker }\n\t\t\t\t\t\tisScrollable\n\t\t\t\t\t\tfullScreen\n\t\t\t\t\t>\n\t\t\t\t\t\t<LinkPickerScreen />\n\t\t\t\t\t</BottomSheet.NavigationScreen>\n\t\t\t\t</BottomSheet.NavigationContainer>\n\t\t\t</BottomSheet>\n\t\t);\n\t}, [ isVisible ] );\n};\n\nexport default withSpokenMessages( ModalLinkUI );\n"]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// Weakly referenced map allows unused ids to be garbage collected.
|
|
2
|
+
const weakMap = new WeakMap(); // Incrementing zero-based ID value
|
|
3
|
+
|
|
4
|
+
let id = -1;
|
|
5
|
+
const prefix = 'link-control-instance';
|
|
6
|
+
|
|
7
|
+
function getKey(_id) {
|
|
8
|
+
return `${prefix}-${_id}`;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Builds a unique link control key for the given object reference.
|
|
12
|
+
*
|
|
13
|
+
* @param {Object} instance an unique object reference specific to this link control instance.
|
|
14
|
+
* @return {string} the unique key to use for this link control.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
function useLinkInstanceKey(instance) {
|
|
19
|
+
if (!instance) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (weakMap.has(instance)) {
|
|
24
|
+
return getKey(weakMap.get(instance));
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
id += 1;
|
|
28
|
+
weakMap.set(instance, id);
|
|
29
|
+
return getKey(id);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export default useLinkInstanceKey;
|
|
33
|
+
//# sourceMappingURL=use-link-instance-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["@wordpress/format-library/src/link/use-link-instance-key.js"],"names":["weakMap","WeakMap","id","prefix","getKey","_id","useLinkInstanceKey","instance","has","get","set"],"mappings":"AAAA;AACA,MAAMA,OAAO,GAAG,IAAIC,OAAJ,EAAhB,C,CAEA;;AACA,IAAIC,EAAE,GAAG,CAAC,CAAV;AAEA,MAAMC,MAAM,GAAG,uBAAf;;AAEA,SAASC,MAAT,CAAiBC,GAAjB,EAAuB;AACtB,SAAQ,GAAGF,MAAQ,IAAIE,GAAK,EAA5B;AACA;AAED;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASC,kBAAT,CAA6BC,QAA7B,EAAwC;AACvC,MAAK,CAAEA,QAAP,EAAkB;AACjB;AACA;;AACD,MAAKP,OAAO,CAACQ,GAAR,CAAaD,QAAb,CAAL,EAA+B;AAC9B,WAAOH,MAAM,CAAEJ,OAAO,CAACS,GAAR,CAAaF,QAAb,CAAF,CAAb;AACA;;AAEDL,EAAAA,EAAE,IAAI,CAAN;AAEAF,EAAAA,OAAO,CAACU,GAAR,CAAaH,QAAb,EAAuBL,EAAvB;AAEA,SAAOE,MAAM,CAAEF,EAAF,CAAb;AACA;;AAED,eAAeI,kBAAf","sourcesContent":["// Weakly referenced map allows unused ids to be garbage collected.\nconst weakMap = new WeakMap();\n\n// Incrementing zero-based ID value\nlet id = -1;\n\nconst prefix = 'link-control-instance';\n\nfunction getKey( _id ) {\n\treturn `${ prefix }-${ _id }`;\n}\n\n/**\n * Builds a unique link control key for the given object reference.\n *\n * @param {Object} instance an unique object reference specific to this link control instance.\n * @return {string} the unique key to use for this link control.\n */\nfunction useLinkInstanceKey( instance ) {\n\tif ( ! instance ) {\n\t\treturn;\n\t}\n\tif ( weakMap.has( instance ) ) {\n\t\treturn getKey( weakMap.get( instance ) );\n\t}\n\n\tid += 1;\n\n\tweakMap.set( instance, id );\n\n\treturn getKey( id );\n}\n\nexport default useLinkInstanceKey;\n"]}
|