@wordpress/format-library 4.9.0 → 4.11.0
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/CHANGELOG.md +4 -0
- package/build/default-formats.js +3 -1
- package/build/default-formats.js.map +1 -1
- package/build/language/index.js +114 -0
- package/build/language/index.js.map +1 -0
- package/build/link/index.native.js +2 -1
- package/build/link/index.native.js.map +1 -1
- package/build/link/modal.native.js +2 -1
- package/build/link/modal.native.js.map +1 -1
- package/build-module/default-formats.js +2 -1
- package/build-module/default-formats.js.map +1 -1
- package/build-module/language/index.js +104 -0
- package/build-module/language/index.js.map +1 -0
- package/build-module/link/index.native.js +2 -1
- package/build-module/link/index.native.js.map +1 -1
- package/build-module/link/modal.native.js +2 -1
- package/build-module/link/modal.native.js.map +1 -1
- package/build-style/style-rtl.css +6 -1
- package/build-style/style.css +6 -1
- package/package.json +13 -13
- package/src/default-formats.js +2 -0
- package/src/language/index.js +124 -0
- package/src/language/style.scss +6 -0
- package/src/link/index.native.js +1 -0
- package/src/link/modal.native.js +1 -0
- package/src/style.scss +1 -0
package/CHANGELOG.md
CHANGED
package/build/default-formats.js
CHANGED
|
@@ -29,9 +29,11 @@ var _keyboard = require("./keyboard");
|
|
|
29
29
|
|
|
30
30
|
var _unknown = require("./unknown");
|
|
31
31
|
|
|
32
|
+
var _language = require("./language");
|
|
33
|
+
|
|
32
34
|
/**
|
|
33
35
|
* Internal dependencies
|
|
34
36
|
*/
|
|
35
|
-
var _default = [_bold.bold, _code.code, _image.image, _italic.italic, _link.link, _strikethrough.strikethrough, _underline.underline, _textColor.textColor, _subscript.subscript, _superscript.superscript, _keyboard.keyboard, _unknown.unknown];
|
|
37
|
+
var _default = [_bold.bold, _code.code, _image.image, _italic.italic, _link.link, _strikethrough.strikethrough, _underline.underline, _textColor.textColor, _subscript.subscript, _superscript.superscript, _keyboard.keyboard, _unknown.unknown, _language.language];
|
|
36
38
|
exports.default = _default;
|
|
37
39
|
//# sourceMappingURL=default-formats.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/format-library/src/default-formats.js"],"names":["bold","code","image","italic","link","strikethrough","underline","textColor","subscript","superscript","keyboard","unknown"],"mappings":";;;;;;;AAGA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;
|
|
1
|
+
{"version":3,"sources":["@wordpress/format-library/src/default-formats.js"],"names":["bold","code","image","italic","link","strikethrough","underline","textColor","subscript","superscript","keyboard","unknown","language"],"mappings":";;;;;;;AAGA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAfA;AACA;AACA;eAee,CACdA,UADc,EAEdC,UAFc,EAGdC,YAHc,EAIdC,cAJc,EAKdC,UALc,EAMdC,4BANc,EAOdC,oBAPc,EAQdC,oBARc,EASdC,oBATc,EAUdC,wBAVc,EAWdC,kBAXc,EAYdC,gBAZc,EAadC,kBAbc,C","sourcesContent":["/**\n * Internal dependencies\n */\nimport { bold } from './bold';\nimport { code } from './code';\nimport { image } from './image';\nimport { italic } from './italic';\nimport { link } from './link';\nimport { strikethrough } from './strikethrough';\nimport { underline } from './underline';\nimport { textColor } from './text-color';\nimport { subscript } from './subscript';\nimport { superscript } from './superscript';\nimport { keyboard } from './keyboard';\nimport { unknown } from './unknown';\nimport { language } from './language';\n\nexport default [\n\tbold,\n\tcode,\n\timage,\n\titalic,\n\tlink,\n\tstrikethrough,\n\tunderline,\n\ttextColor,\n\tsubscript,\n\tsuperscript,\n\tkeyboard,\n\tunknown,\n\tlanguage,\n];\n"]}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.language = void 0;
|
|
7
|
+
|
|
8
|
+
var _element = require("@wordpress/element");
|
|
9
|
+
|
|
10
|
+
var _i18n = require("@wordpress/i18n");
|
|
11
|
+
|
|
12
|
+
var _blockEditor = require("@wordpress/block-editor");
|
|
13
|
+
|
|
14
|
+
var _components = require("@wordpress/components");
|
|
15
|
+
|
|
16
|
+
var _richText = require("@wordpress/rich-text");
|
|
17
|
+
|
|
18
|
+
var _icons = require("@wordpress/icons");
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* WordPress dependencies
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* WordPress dependencies
|
|
26
|
+
*/
|
|
27
|
+
const name = 'core/language';
|
|
28
|
+
const title = (0, _i18n.__)('Language');
|
|
29
|
+
const language = {
|
|
30
|
+
name,
|
|
31
|
+
tagName: 'bdo',
|
|
32
|
+
className: null,
|
|
33
|
+
edit: Edit,
|
|
34
|
+
title
|
|
35
|
+
};
|
|
36
|
+
exports.language = language;
|
|
37
|
+
|
|
38
|
+
function Edit(props) {
|
|
39
|
+
const {
|
|
40
|
+
contentRef,
|
|
41
|
+
isActive,
|
|
42
|
+
onChange,
|
|
43
|
+
value
|
|
44
|
+
} = props;
|
|
45
|
+
const popoverAnchor = (0, _richText.useAnchor)({
|
|
46
|
+
editableContentElement: contentRef.current,
|
|
47
|
+
settings: language
|
|
48
|
+
});
|
|
49
|
+
const [lang, setLang] = (0, _element.useState)('');
|
|
50
|
+
const [dir, setDir] = (0, _element.useState)('ltr');
|
|
51
|
+
const [isPopoverVisible, setIsPopoverVisible] = (0, _element.useState)(false);
|
|
52
|
+
|
|
53
|
+
const togglePopover = () => {
|
|
54
|
+
setIsPopoverVisible(state => !state);
|
|
55
|
+
setLang('');
|
|
56
|
+
setDir('ltr');
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
return (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)(_blockEditor.RichTextToolbarButton, {
|
|
60
|
+
icon: _icons.language,
|
|
61
|
+
label: title,
|
|
62
|
+
title: title,
|
|
63
|
+
onClick: () => {
|
|
64
|
+
if (isActive) {
|
|
65
|
+
onChange((0, _richText.removeFormat)(value, name));
|
|
66
|
+
} else {
|
|
67
|
+
togglePopover();
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
isActive: isActive,
|
|
71
|
+
role: "menuitemcheckbox"
|
|
72
|
+
}), isPopoverVisible && (0, _element.createElement)(_components.Popover, {
|
|
73
|
+
className: "block-editor-format-toolbar__language-popover",
|
|
74
|
+
anchor: popoverAnchor,
|
|
75
|
+
placement: "bottom",
|
|
76
|
+
onClose: togglePopover
|
|
77
|
+
}, (0, _element.createElement)("form", {
|
|
78
|
+
className: "block-editor-format-toolbar__language-container-content",
|
|
79
|
+
onSubmit: event => {
|
|
80
|
+
onChange((0, _richText.applyFormat)(value, {
|
|
81
|
+
type: name,
|
|
82
|
+
attributes: {
|
|
83
|
+
lang,
|
|
84
|
+
dir
|
|
85
|
+
}
|
|
86
|
+
}));
|
|
87
|
+
togglePopover();
|
|
88
|
+
event.preventDefault();
|
|
89
|
+
}
|
|
90
|
+
}, (0, _element.createElement)(_components.TextControl, {
|
|
91
|
+
label: title,
|
|
92
|
+
value: lang,
|
|
93
|
+
onChange: val => setLang(val),
|
|
94
|
+
help: (0, _i18n.__)('A valid language attribute, like "en" or "fr".')
|
|
95
|
+
}), (0, _element.createElement)(_components.SelectControl, {
|
|
96
|
+
label: (0, _i18n.__)('Text direction'),
|
|
97
|
+
value: dir,
|
|
98
|
+
options: [{
|
|
99
|
+
label: (0, _i18n.__)('Left to right'),
|
|
100
|
+
value: 'ltr'
|
|
101
|
+
}, {
|
|
102
|
+
label: (0, _i18n.__)('Right to left'),
|
|
103
|
+
value: 'rtl'
|
|
104
|
+
}],
|
|
105
|
+
onChange: val => setDir(val)
|
|
106
|
+
}), (0, _element.createElement)(_components.__experimentalHStack, {
|
|
107
|
+
alignment: "right"
|
|
108
|
+
}, (0, _element.createElement)(_components.Button, {
|
|
109
|
+
variant: "primary",
|
|
110
|
+
type: "submit",
|
|
111
|
+
text: (0, _i18n.__)('Apply')
|
|
112
|
+
})))));
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["@wordpress/format-library/src/language/index.js"],"names":["name","title","language","tagName","className","edit","Edit","props","contentRef","isActive","onChange","value","popoverAnchor","editableContentElement","current","settings","lang","setLang","dir","setDir","isPopoverVisible","setIsPopoverVisible","togglePopover","state","languageIcon","event","type","attributes","preventDefault","val","label"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\n\n/**\n * WordPress dependencies\n */\nimport { RichTextToolbarButton } from '@wordpress/block-editor';\nimport {\n\tTextControl,\n\tSelectControl,\n\tButton,\n\tPopover,\n\t__experimentalHStack as HStack,\n} from '@wordpress/components';\nimport { useState } from '@wordpress/element';\nimport { applyFormat, removeFormat, useAnchor } from '@wordpress/rich-text';\nimport { language as languageIcon } from '@wordpress/icons';\n\nconst name = 'core/language';\nconst title = __( 'Language' );\n\nexport const language = {\n\tname,\n\ttagName: 'bdo',\n\tclassName: null,\n\tedit: Edit,\n\ttitle,\n};\n\nfunction Edit( props ) {\n\tconst { contentRef, isActive, onChange, value } = props;\n\tconst popoverAnchor = useAnchor( {\n\t\teditableContentElement: contentRef.current,\n\t\tsettings: language,\n\t} );\n\n\tconst [ lang, setLang ] = useState( '' );\n\tconst [ dir, setDir ] = useState( 'ltr' );\n\n\tconst [ isPopoverVisible, setIsPopoverVisible ] = useState( false );\n\tconst togglePopover = () => {\n\t\tsetIsPopoverVisible( ( state ) => ! state );\n\t\tsetLang( '' );\n\t\tsetDir( 'ltr' );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<RichTextToolbarButton\n\t\t\t\ticon={ languageIcon }\n\t\t\t\tlabel={ title }\n\t\t\t\ttitle={ title }\n\t\t\t\tonClick={ () => {\n\t\t\t\t\tif ( isActive ) {\n\t\t\t\t\t\tonChange( removeFormat( value, name ) );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttogglePopover();\n\t\t\t\t\t}\n\t\t\t\t} }\n\t\t\t\tisActive={ isActive }\n\t\t\t\trole=\"menuitemcheckbox\"\n\t\t\t/>\n\n\t\t\t{ isPopoverVisible && (\n\t\t\t\t<Popover\n\t\t\t\t\tclassName=\"block-editor-format-toolbar__language-popover\"\n\t\t\t\t\tanchor={ popoverAnchor }\n\t\t\t\t\tplacement=\"bottom\"\n\t\t\t\t\tonClose={ togglePopover }\n\t\t\t\t>\n\t\t\t\t\t<form\n\t\t\t\t\t\tclassName=\"block-editor-format-toolbar__language-container-content\"\n\t\t\t\t\t\tonSubmit={ ( event ) => {\n\t\t\t\t\t\t\tonChange(\n\t\t\t\t\t\t\t\tapplyFormat( value, {\n\t\t\t\t\t\t\t\t\ttype: name,\n\t\t\t\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\t\t\t\tlang,\n\t\t\t\t\t\t\t\t\t\tdir,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\ttogglePopover();\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\tlabel={ title }\n\t\t\t\t\t\t\tvalue={ lang }\n\t\t\t\t\t\t\tonChange={ ( val ) => setLang( val ) }\n\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t'A valid language attribute, like \"en\" or \"fr\".'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<SelectControl\n\t\t\t\t\t\t\tlabel={ __( 'Text direction' ) }\n\t\t\t\t\t\t\tvalue={ dir }\n\t\t\t\t\t\t\toptions={ [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tlabel: __( 'Left to right' ),\n\t\t\t\t\t\t\t\t\tvalue: 'ltr',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tlabel: __( 'Right to left' ),\n\t\t\t\t\t\t\t\t\tvalue: 'rtl',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t] }\n\t\t\t\t\t\t\tonChange={ ( val ) => setDir( val ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<HStack alignment=\"right\">\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t\t\ttext={ __( 'Apply' ) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</HStack>\n\t\t\t\t\t</form>\n\t\t\t\t</Popover>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/format-library/src/link/index.native.js"],"names":["name","link","title","tagName","className","attributes","url","target","edit","LinkEdit","Component","constructor","arguments","addLink","bind","stopAddingLink","onRemoveFormat","getURLFromClipboard","state","addingLink","value","onChange","props","text","newValue","type","start","end","activeFormats","needsSelectionUpdate","setState","clipboardURL","undefined","getLinkSelection","isActive","startFormat","startIndex","endIndex","formats","find","format","speak","linkSelection","clipboardText","Clipboard","getString","render","activeAttributes","linkIcon"],"mappings":";;;;;;;;;AASA;;AANA;;AAKA;;AAEA;;AACA;;AACA;;AAQA;;AACA;;AAKA;;AACA;;AA3BA;AACA;AACA;;AAGA;AACA;AACA;;AAgBA;AACA;AACA;AAIA,MAAMA,IAAI,GAAG,WAAb;AAEO,MAAMC,IAAI,GAAG;AACnBD,EAAAA,IADmB;AAEnBE,EAAAA,KAAK,EAAE,cAAI,MAAJ,CAFY;AAGnBC,EAAAA,OAAO,EAAE,GAHU;AAInBC,EAAAA,SAAS,EAAE,IAJQ;AAKnBC,EAAAA,UAAU,EAAE;AACXC,IAAAA,GAAG,EAAE,MADM;AAEXC,IAAAA,MAAM,EAAE;
|
|
1
|
+
{"version":3,"sources":["@wordpress/format-library/src/link/index.native.js"],"names":["name","link","title","tagName","className","attributes","url","target","rel","edit","LinkEdit","Component","constructor","arguments","addLink","bind","stopAddingLink","onRemoveFormat","getURLFromClipboard","state","addingLink","value","onChange","props","text","newValue","type","start","end","activeFormats","needsSelectionUpdate","setState","clipboardURL","undefined","getLinkSelection","isActive","startFormat","startIndex","endIndex","formats","find","format","speak","linkSelection","clipboardText","Clipboard","getString","render","activeAttributes","linkIcon"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport Clipboard from '@react-native-clipboard/clipboard';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Component } from '@wordpress/element';\nimport { withSpokenMessages } from '@wordpress/components';\nimport { RichTextToolbarButton } from '@wordpress/block-editor';\nimport {\n\tapplyFormat,\n\tgetActiveFormat,\n\tgetTextContent,\n\tisCollapsed,\n\tremoveFormat,\n\tslice,\n} from '@wordpress/rich-text';\nimport { isURL } from '@wordpress/url';\nimport { link as linkIcon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport ModalLinkUI from './modal';\nimport { isValidHref } from './utils';\n\nconst name = 'core/link';\n\nexport const link = {\n\tname,\n\ttitle: __( 'Link' ),\n\ttagName: 'a',\n\tclassName: null,\n\tattributes: {\n\t\turl: 'href',\n\t\ttarget: 'target',\n\t\trel: 'rel',\n\t},\n\tedit: withSpokenMessages(\n\t\tclass LinkEdit extends Component {\n\t\t\tconstructor() {\n\t\t\t\tsuper( ...arguments );\n\n\t\t\t\tthis.addLink = this.addLink.bind( this );\n\t\t\t\tthis.stopAddingLink = this.stopAddingLink.bind( this );\n\t\t\t\tthis.onRemoveFormat = this.onRemoveFormat.bind( this );\n\t\t\t\tthis.getURLFromClipboard =\n\t\t\t\t\tthis.getURLFromClipboard.bind( this );\n\t\t\t\tthis.state = {\n\t\t\t\t\taddingLink: false,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\taddLink() {\n\t\t\t\tconst { value, onChange } = this.props;\n\t\t\t\tconst text = getTextContent( slice( value ) );\n\n\t\t\t\tif ( text && isURL( text ) && isValidHref( text ) ) {\n\t\t\t\t\tconst newValue = applyFormat( value, {\n\t\t\t\t\t\ttype: name,\n\t\t\t\t\t\tattributes: { url: text },\n\t\t\t\t\t} );\n\t\t\t\t\tnewValue.start = newValue.end;\n\t\t\t\t\tnewValue.activeFormats = [];\n\t\t\t\t\tonChange( { ...newValue, needsSelectionUpdate: true } );\n\t\t\t\t} else {\n\t\t\t\t\tthis.setState( { addingLink: true } );\n\t\t\t\t\tthis.getURLFromClipboard();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstopAddingLink() {\n\t\t\t\tthis.setState( { addingLink: false, clipboardURL: undefined } );\n\t\t\t}\n\n\t\t\tgetLinkSelection() {\n\t\t\t\tconst { value, isActive } = this.props;\n\t\t\t\tconst startFormat = getActiveFormat( value, 'core/link' );\n\n\t\t\t\t// If the link isn't selected, get the link manually by looking around the cursor\n\t\t\t\t// TODO: handle partly selected links.\n\t\t\t\tif ( startFormat && isCollapsed( value ) && isActive ) {\n\t\t\t\t\tlet startIndex = value.start;\n\t\t\t\t\tlet endIndex = value.end;\n\n\t\t\t\t\twhile (\n\t\t\t\t\t\tvalue.formats[ startIndex ]?.find(\n\t\t\t\t\t\t\t( format ) => format?.type === startFormat.type\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tstartIndex--;\n\t\t\t\t\t}\n\n\t\t\t\t\tendIndex++;\n\n\t\t\t\t\twhile (\n\t\t\t\t\t\tvalue.formats[ endIndex ]?.find(\n\t\t\t\t\t\t\t( format ) => format?.type === startFormat.type\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tendIndex++;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...value,\n\t\t\t\t\t\tstart: startIndex + 1,\n\t\t\t\t\t\tend: endIndex,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tonRemoveFormat() {\n\t\t\t\tconst { onChange, speak, value } = this.props;\n\t\t\t\tconst startFormat = getActiveFormat( value, 'core/link' );\n\n\t\t\t\t// Before we try to remove anything we check if there is something at the caret position to remove.\n\t\t\t\tif ( isCollapsed( value ) && startFormat === undefined ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst linkSelection = this.getLinkSelection();\n\n\t\t\t\tonChange( removeFormat( linkSelection, name ) );\n\t\t\t\tspeak( __( 'Link removed.' ), 'assertive' );\n\t\t\t}\n\n\t\t\tasync getURLFromClipboard() {\n\t\t\t\tconst clipboardText = await Clipboard.getString();\n\t\t\t\tif ( ! clipboardText ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Check if pasted text is URL.\n\t\t\t\tif ( ! isURL( clipboardText ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.setState( { clipboardURL: clipboardText } );\n\t\t\t}\n\n\t\t\trender() {\n\t\t\t\tconst { isActive, activeAttributes, onChange } = this.props;\n\t\t\t\tconst linkSelection = this.getLinkSelection();\n\t\t\t\t// If no URL is set and we have a clipboard URL let's use it.\n\t\t\t\tif ( ! activeAttributes.url && this.state.clipboardURL ) {\n\t\t\t\t\tactiveAttributes.url = this.state.clipboardURL;\n\t\t\t\t}\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<ModalLinkUI\n\t\t\t\t\t\t\tisVisible={ this.state.addingLink }\n\t\t\t\t\t\t\tisActive={ isActive }\n\t\t\t\t\t\t\tactiveAttributes={ activeAttributes }\n\t\t\t\t\t\t\tonClose={ this.stopAddingLink }\n\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t\tonRemove={ this.onRemoveFormat }\n\t\t\t\t\t\t\tvalue={ linkSelection }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<RichTextToolbarButton\n\t\t\t\t\t\t\tname=\"link\"\n\t\t\t\t\t\t\ticon={ linkIcon }\n\t\t\t\t\t\t\ttitle={ __( 'Link' ) }\n\t\t\t\t\t\t\tonClick={ this.addLink }\n\t\t\t\t\t\t\tisActive={ isActive }\n\t\t\t\t\t\t\tshortcutType=\"primary\"\n\t\t\t\t\t\t\tshortcutCharacter=\"k\"\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),\n};\n"]}
|
|
@@ -36,7 +36,8 @@ const ModalLinkUI = _ref => {
|
|
|
36
36
|
isVisible: isVisible,
|
|
37
37
|
hideHeader: true,
|
|
38
38
|
onClose: restProps.onClose,
|
|
39
|
-
hasNavigation: true
|
|
39
|
+
hasNavigation: true,
|
|
40
|
+
testID: "link-settings-modal"
|
|
40
41
|
}, (0, _element.createElement)(_components.BottomSheet.NavigationContainer, {
|
|
41
42
|
animate: true,
|
|
42
43
|
main: true
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/format-library/src/link/modal.native.js"],"names":["ModalLinkUI","isVisible","restProps","onClose","screens","settings","picker"],"mappings":";;;;;;;;;AAGA;;;;AACA;;AAKA;;AACA;;AACA;;AAXA;AACA;AACA;;AAIA;AACA;AACA;AAKA,MAAMA,WAAW,GAAG,QAAmC;AAAA,MAAjC;AAAEC,IAAAA,SAAF;AAAa,OAAGC;AAAhB,GAAiC;AACtD,SAAO,sBAAS,MAAM;AACrB,WACC,4BAAC,uBAAD;AACC,MAAA,SAAS,EAAGD,SADb;AAEC,MAAA,UAAU,MAFX;AAGC,MAAA,OAAO,EAAGC,SAAS,CAACC,OAHrB;AAIC,MAAA,aAAa;
|
|
1
|
+
{"version":3,"sources":["@wordpress/format-library/src/link/modal.native.js"],"names":["ModalLinkUI","isVisible","restProps","onClose","screens","settings","picker"],"mappings":";;;;;;;;;AAGA;;;;AACA;;AAKA;;AACA;;AACA;;AAXA;AACA;AACA;;AAIA;AACA;AACA;AAKA,MAAMA,WAAW,GAAG,QAAmC;AAAA,MAAjC;AAAEC,IAAAA,SAAF;AAAa,OAAGC;AAAhB,GAAiC;AACtD,SAAO,sBAAS,MAAM;AACrB,WACC,4BAAC,uBAAD;AACC,MAAA,SAAS,EAAGD,SADb;AAEC,MAAA,UAAU,MAFX;AAGC,MAAA,OAAO,EAAGC,SAAS,CAACC,OAHrB;AAIC,MAAA,aAAa,MAJd;AAKC,MAAA,MAAM,EAAC;AALR,OAOC,4BAAC,uBAAD,CAAa,mBAAb;AAAiC,MAAA,OAAO,MAAxC;AAAyC,MAAA,IAAI;AAA7C,OACC,4BAAC,uBAAD,CAAa,gBAAb;AAA8B,MAAA,IAAI,EAAGC,iBAAQC;AAA7C,OACC,4BAAC,2BAAD;AACC,MAAA,SAAS,EAAGJ;AADb,OAEMC,SAFN,EADD,CADD,EAOC,4BAAC,uBAAD,CAAa,gBAAb;AACC,MAAA,IAAI,EAAGE,iBAAQE,MADhB;AAEC,MAAA,YAAY,MAFb;AAGC,MAAA,UAAU;AAHX,OAKC,4BAAC,yBAAD,OALD,CAPD,CAPD,CADD;AAyBA,GA1BM,EA0BJ,CAAEL,SAAF,CA1BI,CAAP;AA2BA,CA5BD;;eA8Be,oCAAoBD,WAApB,C","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\ttestID=\"link-settings-modal\"\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"]}
|
|
@@ -13,5 +13,6 @@ import { subscript } from './subscript';
|
|
|
13
13
|
import { superscript } from './superscript';
|
|
14
14
|
import { keyboard } from './keyboard';
|
|
15
15
|
import { unknown } from './unknown';
|
|
16
|
-
|
|
16
|
+
import { language } from './language';
|
|
17
|
+
export default [bold, code, image, italic, link, strikethrough, underline, textColor, subscript, superscript, keyboard, unknown, language];
|
|
17
18
|
//# sourceMappingURL=default-formats.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/format-library/src/default-formats.js"],"names":["bold","code","image","italic","link","strikethrough","underline","textColor","subscript","superscript","keyboard","unknown"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,IAAT,QAAqB,QAArB;AACA,SAASC,IAAT,QAAqB,QAArB;AACA,SAASC,KAAT,QAAsB,SAAtB;AACA,SAASC,MAAT,QAAuB,UAAvB;AACA,SAASC,IAAT,QAAqB,QAArB;AACA,SAASC,aAAT,QAA8B,iBAA9B;AACA,SAASC,SAAT,QAA0B,aAA1B;AACA,SAASC,SAAT,QAA0B,cAA1B;AACA,SAASC,SAAT,QAA0B,aAA1B;AACA,SAASC,WAAT,QAA4B,eAA5B;AACA,SAASC,QAAT,QAAyB,YAAzB;AACA,SAASC,OAAT,QAAwB,WAAxB;AAEA,eAAe,
|
|
1
|
+
{"version":3,"sources":["@wordpress/format-library/src/default-formats.js"],"names":["bold","code","image","italic","link","strikethrough","underline","textColor","subscript","superscript","keyboard","unknown","language"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,IAAT,QAAqB,QAArB;AACA,SAASC,IAAT,QAAqB,QAArB;AACA,SAASC,KAAT,QAAsB,SAAtB;AACA,SAASC,MAAT,QAAuB,UAAvB;AACA,SAASC,IAAT,QAAqB,QAArB;AACA,SAASC,aAAT,QAA8B,iBAA9B;AACA,SAASC,SAAT,QAA0B,aAA1B;AACA,SAASC,SAAT,QAA0B,cAA1B;AACA,SAASC,SAAT,QAA0B,aAA1B;AACA,SAASC,WAAT,QAA4B,eAA5B;AACA,SAASC,QAAT,QAAyB,YAAzB;AACA,SAASC,OAAT,QAAwB,WAAxB;AACA,SAASC,QAAT,QAAyB,YAAzB;AAEA,eAAe,CACdZ,IADc,EAEdC,IAFc,EAGdC,KAHc,EAIdC,MAJc,EAKdC,IALc,EAMdC,aANc,EAOdC,SAPc,EAQdC,SARc,EASdC,SATc,EAUdC,WAVc,EAWdC,QAXc,EAYdC,OAZc,EAadC,QAbc,CAAf","sourcesContent":["/**\n * Internal dependencies\n */\nimport { bold } from './bold';\nimport { code } from './code';\nimport { image } from './image';\nimport { italic } from './italic';\nimport { link } from './link';\nimport { strikethrough } from './strikethrough';\nimport { underline } from './underline';\nimport { textColor } from './text-color';\nimport { subscript } from './subscript';\nimport { superscript } from './superscript';\nimport { keyboard } from './keyboard';\nimport { unknown } from './unknown';\nimport { language } from './language';\n\nexport default [\n\tbold,\n\tcode,\n\timage,\n\titalic,\n\tlink,\n\tstrikethrough,\n\tunderline,\n\ttextColor,\n\tsubscript,\n\tsuperscript,\n\tkeyboard,\n\tunknown,\n\tlanguage,\n];\n"]}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { createElement, Fragment } from "@wordpress/element";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* WordPress dependencies
|
|
5
|
+
*/
|
|
6
|
+
import { __ } from '@wordpress/i18n';
|
|
7
|
+
/**
|
|
8
|
+
* WordPress dependencies
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { RichTextToolbarButton } from '@wordpress/block-editor';
|
|
12
|
+
import { TextControl, SelectControl, Button, Popover, __experimentalHStack as HStack } from '@wordpress/components';
|
|
13
|
+
import { useState } from '@wordpress/element';
|
|
14
|
+
import { applyFormat, removeFormat, useAnchor } from '@wordpress/rich-text';
|
|
15
|
+
import { language as languageIcon } from '@wordpress/icons';
|
|
16
|
+
const name = 'core/language';
|
|
17
|
+
|
|
18
|
+
const title = __('Language');
|
|
19
|
+
|
|
20
|
+
export const language = {
|
|
21
|
+
name,
|
|
22
|
+
tagName: 'bdo',
|
|
23
|
+
className: null,
|
|
24
|
+
edit: Edit,
|
|
25
|
+
title
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
function Edit(props) {
|
|
29
|
+
const {
|
|
30
|
+
contentRef,
|
|
31
|
+
isActive,
|
|
32
|
+
onChange,
|
|
33
|
+
value
|
|
34
|
+
} = props;
|
|
35
|
+
const popoverAnchor = useAnchor({
|
|
36
|
+
editableContentElement: contentRef.current,
|
|
37
|
+
settings: language
|
|
38
|
+
});
|
|
39
|
+
const [lang, setLang] = useState('');
|
|
40
|
+
const [dir, setDir] = useState('ltr');
|
|
41
|
+
const [isPopoverVisible, setIsPopoverVisible] = useState(false);
|
|
42
|
+
|
|
43
|
+
const togglePopover = () => {
|
|
44
|
+
setIsPopoverVisible(state => !state);
|
|
45
|
+
setLang('');
|
|
46
|
+
setDir('ltr');
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
return createElement(Fragment, null, createElement(RichTextToolbarButton, {
|
|
50
|
+
icon: languageIcon,
|
|
51
|
+
label: title,
|
|
52
|
+
title: title,
|
|
53
|
+
onClick: () => {
|
|
54
|
+
if (isActive) {
|
|
55
|
+
onChange(removeFormat(value, name));
|
|
56
|
+
} else {
|
|
57
|
+
togglePopover();
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
isActive: isActive,
|
|
61
|
+
role: "menuitemcheckbox"
|
|
62
|
+
}), isPopoverVisible && createElement(Popover, {
|
|
63
|
+
className: "block-editor-format-toolbar__language-popover",
|
|
64
|
+
anchor: popoverAnchor,
|
|
65
|
+
placement: "bottom",
|
|
66
|
+
onClose: togglePopover
|
|
67
|
+
}, createElement("form", {
|
|
68
|
+
className: "block-editor-format-toolbar__language-container-content",
|
|
69
|
+
onSubmit: event => {
|
|
70
|
+
onChange(applyFormat(value, {
|
|
71
|
+
type: name,
|
|
72
|
+
attributes: {
|
|
73
|
+
lang,
|
|
74
|
+
dir
|
|
75
|
+
}
|
|
76
|
+
}));
|
|
77
|
+
togglePopover();
|
|
78
|
+
event.preventDefault();
|
|
79
|
+
}
|
|
80
|
+
}, createElement(TextControl, {
|
|
81
|
+
label: title,
|
|
82
|
+
value: lang,
|
|
83
|
+
onChange: val => setLang(val),
|
|
84
|
+
help: __('A valid language attribute, like "en" or "fr".')
|
|
85
|
+
}), createElement(SelectControl, {
|
|
86
|
+
label: __('Text direction'),
|
|
87
|
+
value: dir,
|
|
88
|
+
options: [{
|
|
89
|
+
label: __('Left to right'),
|
|
90
|
+
value: 'ltr'
|
|
91
|
+
}, {
|
|
92
|
+
label: __('Right to left'),
|
|
93
|
+
value: 'rtl'
|
|
94
|
+
}],
|
|
95
|
+
onChange: val => setDir(val)
|
|
96
|
+
}), createElement(HStack, {
|
|
97
|
+
alignment: "right"
|
|
98
|
+
}, createElement(Button, {
|
|
99
|
+
variant: "primary",
|
|
100
|
+
type: "submit",
|
|
101
|
+
text: __('Apply')
|
|
102
|
+
})))));
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["@wordpress/format-library/src/language/index.js"],"names":["__","RichTextToolbarButton","TextControl","SelectControl","Button","Popover","__experimentalHStack","HStack","useState","applyFormat","removeFormat","useAnchor","language","languageIcon","name","title","tagName","className","edit","Edit","props","contentRef","isActive","onChange","value","popoverAnchor","editableContentElement","current","settings","lang","setLang","dir","setDir","isPopoverVisible","setIsPopoverVisible","togglePopover","state","event","type","attributes","preventDefault","val","label"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\n\n/**\n * WordPress dependencies\n */\nimport { RichTextToolbarButton } from '@wordpress/block-editor';\nimport {\n\tTextControl,\n\tSelectControl,\n\tButton,\n\tPopover,\n\t__experimentalHStack as HStack,\n} from '@wordpress/components';\nimport { useState } from '@wordpress/element';\nimport { applyFormat, removeFormat, useAnchor } from '@wordpress/rich-text';\nimport { language as languageIcon } from '@wordpress/icons';\n\nconst name = 'core/language';\nconst title = __( 'Language' );\n\nexport const language = {\n\tname,\n\ttagName: 'bdo',\n\tclassName: null,\n\tedit: Edit,\n\ttitle,\n};\n\nfunction Edit( props ) {\n\tconst { contentRef, isActive, onChange, value } = props;\n\tconst popoverAnchor = useAnchor( {\n\t\teditableContentElement: contentRef.current,\n\t\tsettings: language,\n\t} );\n\n\tconst [ lang, setLang ] = useState( '' );\n\tconst [ dir, setDir ] = useState( 'ltr' );\n\n\tconst [ isPopoverVisible, setIsPopoverVisible ] = useState( false );\n\tconst togglePopover = () => {\n\t\tsetIsPopoverVisible( ( state ) => ! state );\n\t\tsetLang( '' );\n\t\tsetDir( 'ltr' );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<RichTextToolbarButton\n\t\t\t\ticon={ languageIcon }\n\t\t\t\tlabel={ title }\n\t\t\t\ttitle={ title }\n\t\t\t\tonClick={ () => {\n\t\t\t\t\tif ( isActive ) {\n\t\t\t\t\t\tonChange( removeFormat( value, name ) );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttogglePopover();\n\t\t\t\t\t}\n\t\t\t\t} }\n\t\t\t\tisActive={ isActive }\n\t\t\t\trole=\"menuitemcheckbox\"\n\t\t\t/>\n\n\t\t\t{ isPopoverVisible && (\n\t\t\t\t<Popover\n\t\t\t\t\tclassName=\"block-editor-format-toolbar__language-popover\"\n\t\t\t\t\tanchor={ popoverAnchor }\n\t\t\t\t\tplacement=\"bottom\"\n\t\t\t\t\tonClose={ togglePopover }\n\t\t\t\t>\n\t\t\t\t\t<form\n\t\t\t\t\t\tclassName=\"block-editor-format-toolbar__language-container-content\"\n\t\t\t\t\t\tonSubmit={ ( event ) => {\n\t\t\t\t\t\t\tonChange(\n\t\t\t\t\t\t\t\tapplyFormat( value, {\n\t\t\t\t\t\t\t\t\ttype: name,\n\t\t\t\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\t\t\t\tlang,\n\t\t\t\t\t\t\t\t\t\tdir,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\ttogglePopover();\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\tlabel={ title }\n\t\t\t\t\t\t\tvalue={ lang }\n\t\t\t\t\t\t\tonChange={ ( val ) => setLang( val ) }\n\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t'A valid language attribute, like \"en\" or \"fr\".'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<SelectControl\n\t\t\t\t\t\t\tlabel={ __( 'Text direction' ) }\n\t\t\t\t\t\t\tvalue={ dir }\n\t\t\t\t\t\t\toptions={ [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tlabel: __( 'Left to right' ),\n\t\t\t\t\t\t\t\t\tvalue: 'ltr',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tlabel: __( 'Right to left' ),\n\t\t\t\t\t\t\t\t\tvalue: 'rtl',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t] }\n\t\t\t\t\t\t\tonChange={ ( val ) => setDir( val ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<HStack alignment=\"right\">\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t\t\ttext={ __( 'Apply' ) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</HStack>\n\t\t\t\t\t</form>\n\t\t\t\t</Popover>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/format-library/src/link/index.native.js"],"names":["Clipboard","__","Component","withSpokenMessages","RichTextToolbarButton","applyFormat","getActiveFormat","getTextContent","isCollapsed","removeFormat","slice","isURL","link","linkIcon","ModalLinkUI","isValidHref","name","title","tagName","className","attributes","url","target","edit","LinkEdit","constructor","arguments","addLink","bind","stopAddingLink","onRemoveFormat","getURLFromClipboard","state","addingLink","value","onChange","props","text","newValue","type","start","end","activeFormats","needsSelectionUpdate","setState","clipboardURL","undefined","getLinkSelection","isActive","startFormat","startIndex","endIndex","formats","find","format","speak","linkSelection","clipboardText","getString","render","activeAttributes"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport Clipboard from '@react-native-clipboard/clipboard';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Component } from '@wordpress/element';\nimport { withSpokenMessages } from '@wordpress/components';\nimport { RichTextToolbarButton } from '@wordpress/block-editor';\nimport {\n\tapplyFormat,\n\tgetActiveFormat,\n\tgetTextContent,\n\tisCollapsed,\n\tremoveFormat,\n\tslice,\n} from '@wordpress/rich-text';\nimport { isURL } from '@wordpress/url';\nimport { link as linkIcon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport ModalLinkUI from './modal';\nimport { isValidHref } from './utils';\n\nconst name = 'core/link';\n\nexport const link = {\n\tname,\n\ttitle: __( 'Link' ),\n\ttagName: 'a',\n\tclassName: null,\n\tattributes: {\n\t\turl: 'href',\n\t\ttarget: 'target',\n\t},\n\tedit: withSpokenMessages(\n\t\tclass LinkEdit extends Component {\n\t\t\tconstructor() {\n\t\t\t\tsuper( ...arguments );\n\n\t\t\t\tthis.addLink = this.addLink.bind( this );\n\t\t\t\tthis.stopAddingLink = this.stopAddingLink.bind( this );\n\t\t\t\tthis.onRemoveFormat = this.onRemoveFormat.bind( this );\n\t\t\t\tthis.getURLFromClipboard =\n\t\t\t\t\tthis.getURLFromClipboard.bind( this );\n\t\t\t\tthis.state = {\n\t\t\t\t\taddingLink: false,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\taddLink() {\n\t\t\t\tconst { value, onChange } = this.props;\n\t\t\t\tconst text = getTextContent( slice( value ) );\n\n\t\t\t\tif ( text && isURL( text ) && isValidHref( text ) ) {\n\t\t\t\t\tconst newValue = applyFormat( value, {\n\t\t\t\t\t\ttype: name,\n\t\t\t\t\t\tattributes: { url: text },\n\t\t\t\t\t} );\n\t\t\t\t\tnewValue.start = newValue.end;\n\t\t\t\t\tnewValue.activeFormats = [];\n\t\t\t\t\tonChange( { ...newValue, needsSelectionUpdate: true } );\n\t\t\t\t} else {\n\t\t\t\t\tthis.setState( { addingLink: true } );\n\t\t\t\t\tthis.getURLFromClipboard();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstopAddingLink() {\n\t\t\t\tthis.setState( { addingLink: false, clipboardURL: undefined } );\n\t\t\t}\n\n\t\t\tgetLinkSelection() {\n\t\t\t\tconst { value, isActive } = this.props;\n\t\t\t\tconst startFormat = getActiveFormat( value, 'core/link' );\n\n\t\t\t\t// If the link isn't selected, get the link manually by looking around the cursor\n\t\t\t\t// TODO: handle partly selected links.\n\t\t\t\tif ( startFormat && isCollapsed( value ) && isActive ) {\n\t\t\t\t\tlet startIndex = value.start;\n\t\t\t\t\tlet endIndex = value.end;\n\n\t\t\t\t\twhile (\n\t\t\t\t\t\tvalue.formats[ startIndex ]?.find(\n\t\t\t\t\t\t\t( format ) => format?.type === startFormat.type\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tstartIndex--;\n\t\t\t\t\t}\n\n\t\t\t\t\tendIndex++;\n\n\t\t\t\t\twhile (\n\t\t\t\t\t\tvalue.formats[ endIndex ]?.find(\n\t\t\t\t\t\t\t( format ) => format?.type === startFormat.type\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tendIndex++;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...value,\n\t\t\t\t\t\tstart: startIndex + 1,\n\t\t\t\t\t\tend: endIndex,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tonRemoveFormat() {\n\t\t\t\tconst { onChange, speak, value } = this.props;\n\t\t\t\tconst startFormat = getActiveFormat( value, 'core/link' );\n\n\t\t\t\t// Before we try to remove anything we check if there is something at the caret position to remove.\n\t\t\t\tif ( isCollapsed( value ) && startFormat === undefined ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst linkSelection = this.getLinkSelection();\n\n\t\t\t\tonChange( removeFormat( linkSelection, name ) );\n\t\t\t\tspeak( __( 'Link removed.' ), 'assertive' );\n\t\t\t}\n\n\t\t\tasync getURLFromClipboard() {\n\t\t\t\tconst clipboardText = await Clipboard.getString();\n\t\t\t\tif ( ! clipboardText ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Check if pasted text is URL.\n\t\t\t\tif ( ! isURL( clipboardText ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.setState( { clipboardURL: clipboardText } );\n\t\t\t}\n\n\t\t\trender() {\n\t\t\t\tconst { isActive, activeAttributes, onChange } = this.props;\n\t\t\t\tconst linkSelection = this.getLinkSelection();\n\t\t\t\t// If no URL is set and we have a clipboard URL let's use it.\n\t\t\t\tif ( ! activeAttributes.url && this.state.clipboardURL ) {\n\t\t\t\t\tactiveAttributes.url = this.state.clipboardURL;\n\t\t\t\t}\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<ModalLinkUI\n\t\t\t\t\t\t\tisVisible={ this.state.addingLink }\n\t\t\t\t\t\t\tisActive={ isActive }\n\t\t\t\t\t\t\tactiveAttributes={ activeAttributes }\n\t\t\t\t\t\t\tonClose={ this.stopAddingLink }\n\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t\tonRemove={ this.onRemoveFormat }\n\t\t\t\t\t\t\tvalue={ linkSelection }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<RichTextToolbarButton\n\t\t\t\t\t\t\tname=\"link\"\n\t\t\t\t\t\t\ticon={ linkIcon }\n\t\t\t\t\t\t\ttitle={ __( 'Link' ) }\n\t\t\t\t\t\t\tonClick={ this.addLink }\n\t\t\t\t\t\t\tisActive={ isActive }\n\t\t\t\t\t\t\tshortcutType=\"primary\"\n\t\t\t\t\t\t\tshortcutCharacter=\"k\"\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),\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/format-library/src/link/index.native.js"],"names":["Clipboard","__","Component","withSpokenMessages","RichTextToolbarButton","applyFormat","getActiveFormat","getTextContent","isCollapsed","removeFormat","slice","isURL","link","linkIcon","ModalLinkUI","isValidHref","name","title","tagName","className","attributes","url","target","rel","edit","LinkEdit","constructor","arguments","addLink","bind","stopAddingLink","onRemoveFormat","getURLFromClipboard","state","addingLink","value","onChange","props","text","newValue","type","start","end","activeFormats","needsSelectionUpdate","setState","clipboardURL","undefined","getLinkSelection","isActive","startFormat","startIndex","endIndex","formats","find","format","speak","linkSelection","clipboardText","getString","render","activeAttributes"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport Clipboard from '@react-native-clipboard/clipboard';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Component } from '@wordpress/element';\nimport { withSpokenMessages } from '@wordpress/components';\nimport { RichTextToolbarButton } from '@wordpress/block-editor';\nimport {\n\tapplyFormat,\n\tgetActiveFormat,\n\tgetTextContent,\n\tisCollapsed,\n\tremoveFormat,\n\tslice,\n} from '@wordpress/rich-text';\nimport { isURL } from '@wordpress/url';\nimport { link as linkIcon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport ModalLinkUI from './modal';\nimport { isValidHref } from './utils';\n\nconst name = 'core/link';\n\nexport const link = {\n\tname,\n\ttitle: __( 'Link' ),\n\ttagName: 'a',\n\tclassName: null,\n\tattributes: {\n\t\turl: 'href',\n\t\ttarget: 'target',\n\t\trel: 'rel',\n\t},\n\tedit: withSpokenMessages(\n\t\tclass LinkEdit extends Component {\n\t\t\tconstructor() {\n\t\t\t\tsuper( ...arguments );\n\n\t\t\t\tthis.addLink = this.addLink.bind( this );\n\t\t\t\tthis.stopAddingLink = this.stopAddingLink.bind( this );\n\t\t\t\tthis.onRemoveFormat = this.onRemoveFormat.bind( this );\n\t\t\t\tthis.getURLFromClipboard =\n\t\t\t\t\tthis.getURLFromClipboard.bind( this );\n\t\t\t\tthis.state = {\n\t\t\t\t\taddingLink: false,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\taddLink() {\n\t\t\t\tconst { value, onChange } = this.props;\n\t\t\t\tconst text = getTextContent( slice( value ) );\n\n\t\t\t\tif ( text && isURL( text ) && isValidHref( text ) ) {\n\t\t\t\t\tconst newValue = applyFormat( value, {\n\t\t\t\t\t\ttype: name,\n\t\t\t\t\t\tattributes: { url: text },\n\t\t\t\t\t} );\n\t\t\t\t\tnewValue.start = newValue.end;\n\t\t\t\t\tnewValue.activeFormats = [];\n\t\t\t\t\tonChange( { ...newValue, needsSelectionUpdate: true } );\n\t\t\t\t} else {\n\t\t\t\t\tthis.setState( { addingLink: true } );\n\t\t\t\t\tthis.getURLFromClipboard();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstopAddingLink() {\n\t\t\t\tthis.setState( { addingLink: false, clipboardURL: undefined } );\n\t\t\t}\n\n\t\t\tgetLinkSelection() {\n\t\t\t\tconst { value, isActive } = this.props;\n\t\t\t\tconst startFormat = getActiveFormat( value, 'core/link' );\n\n\t\t\t\t// If the link isn't selected, get the link manually by looking around the cursor\n\t\t\t\t// TODO: handle partly selected links.\n\t\t\t\tif ( startFormat && isCollapsed( value ) && isActive ) {\n\t\t\t\t\tlet startIndex = value.start;\n\t\t\t\t\tlet endIndex = value.end;\n\n\t\t\t\t\twhile (\n\t\t\t\t\t\tvalue.formats[ startIndex ]?.find(\n\t\t\t\t\t\t\t( format ) => format?.type === startFormat.type\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tstartIndex--;\n\t\t\t\t\t}\n\n\t\t\t\t\tendIndex++;\n\n\t\t\t\t\twhile (\n\t\t\t\t\t\tvalue.formats[ endIndex ]?.find(\n\t\t\t\t\t\t\t( format ) => format?.type === startFormat.type\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tendIndex++;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...value,\n\t\t\t\t\t\tstart: startIndex + 1,\n\t\t\t\t\t\tend: endIndex,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tonRemoveFormat() {\n\t\t\t\tconst { onChange, speak, value } = this.props;\n\t\t\t\tconst startFormat = getActiveFormat( value, 'core/link' );\n\n\t\t\t\t// Before we try to remove anything we check if there is something at the caret position to remove.\n\t\t\t\tif ( isCollapsed( value ) && startFormat === undefined ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst linkSelection = this.getLinkSelection();\n\n\t\t\t\tonChange( removeFormat( linkSelection, name ) );\n\t\t\t\tspeak( __( 'Link removed.' ), 'assertive' );\n\t\t\t}\n\n\t\t\tasync getURLFromClipboard() {\n\t\t\t\tconst clipboardText = await Clipboard.getString();\n\t\t\t\tif ( ! clipboardText ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Check if pasted text is URL.\n\t\t\t\tif ( ! isURL( clipboardText ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.setState( { clipboardURL: clipboardText } );\n\t\t\t}\n\n\t\t\trender() {\n\t\t\t\tconst { isActive, activeAttributes, onChange } = this.props;\n\t\t\t\tconst linkSelection = this.getLinkSelection();\n\t\t\t\t// If no URL is set and we have a clipboard URL let's use it.\n\t\t\t\tif ( ! activeAttributes.url && this.state.clipboardURL ) {\n\t\t\t\t\tactiveAttributes.url = this.state.clipboardURL;\n\t\t\t\t}\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<ModalLinkUI\n\t\t\t\t\t\t\tisVisible={ this.state.addingLink }\n\t\t\t\t\t\t\tisActive={ isActive }\n\t\t\t\t\t\t\tactiveAttributes={ activeAttributes }\n\t\t\t\t\t\t\tonClose={ this.stopAddingLink }\n\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t\tonRemove={ this.onRemoveFormat }\n\t\t\t\t\t\t\tvalue={ linkSelection }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<RichTextToolbarButton\n\t\t\t\t\t\t\tname=\"link\"\n\t\t\t\t\t\t\ticon={ linkIcon }\n\t\t\t\t\t\t\ttitle={ __( 'Link' ) }\n\t\t\t\t\t\t\tonClick={ this.addLink }\n\t\t\t\t\t\t\tisActive={ isActive }\n\t\t\t\t\t\t\tshortcutType=\"primary\"\n\t\t\t\t\t\t\tshortcutCharacter=\"k\"\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),\n};\n"]}
|
|
@@ -24,7 +24,8 @@ const ModalLinkUI = _ref => {
|
|
|
24
24
|
isVisible: isVisible,
|
|
25
25
|
hideHeader: true,
|
|
26
26
|
onClose: restProps.onClose,
|
|
27
|
-
hasNavigation: true
|
|
27
|
+
hasNavigation: true,
|
|
28
|
+
testID: "link-settings-modal"
|
|
28
29
|
}, createElement(BottomSheet.NavigationContainer, {
|
|
29
30
|
animate: true,
|
|
30
31
|
main: true
|
|
@@ -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,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;
|
|
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,MAJd;AAKC,MAAA,MAAM,EAAC;AALR,OAOC,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,CAPD,CADD;AAyBA,GA1Ba,EA0BX,CAAEJ,SAAF,CA1BW,CAAd;AA2BA,CA5BD;;AA8BA,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\ttestID=\"link-settings-modal\"\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"]}
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
--wp-block-synced-color: #7a00df;
|
|
98
98
|
--wp-block-synced-color--rgb: 122, 0, 223;
|
|
99
99
|
}
|
|
100
|
-
@media (
|
|
100
|
+
@media (min-resolution: 192dpi) {
|
|
101
101
|
:root {
|
|
102
102
|
--wp-admin-border-width-focus: 1.5px;
|
|
103
103
|
}
|
|
@@ -149,4 +149,9 @@
|
|
|
149
149
|
}
|
|
150
150
|
.components-inline-color-popover .components-popover__content .component-color-indicator {
|
|
151
151
|
vertical-align: text-bottom;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.block-editor-format-toolbar__language-popover .components-popover__content {
|
|
155
|
+
width: auto;
|
|
156
|
+
padding: 1rem;
|
|
152
157
|
}
|
package/build-style/style.css
CHANGED
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
--wp-block-synced-color: #7a00df;
|
|
98
98
|
--wp-block-synced-color--rgb: 122, 0, 223;
|
|
99
99
|
}
|
|
100
|
-
@media (
|
|
100
|
+
@media (min-resolution: 192dpi) {
|
|
101
101
|
:root {
|
|
102
102
|
--wp-admin-border-width-focus: 1.5px;
|
|
103
103
|
}
|
|
@@ -149,4 +149,9 @@
|
|
|
149
149
|
}
|
|
150
150
|
.components-inline-color-popover .components-popover__content .component-color-indicator {
|
|
151
151
|
vertical-align: text-bottom;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.block-editor-format-toolbar__language-popover .components-popover__content {
|
|
155
|
+
width: auto;
|
|
156
|
+
padding: 1rem;
|
|
152
157
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wordpress/format-library",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.11.0",
|
|
4
4
|
"description": "Format library for the WordPress editor.",
|
|
5
5
|
"author": "The WordPress Contributors",
|
|
6
6
|
"license": "GPL-2.0-or-later",
|
|
@@ -26,17 +26,17 @@
|
|
|
26
26
|
"react-native": "src/index",
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"@babel/runtime": "^7.16.0",
|
|
29
|
-
"@wordpress/a11y": "^3.
|
|
30
|
-
"@wordpress/block-editor": "^12.
|
|
31
|
-
"@wordpress/components": "^
|
|
32
|
-
"@wordpress/compose": "^6.
|
|
33
|
-
"@wordpress/data": "^9.
|
|
34
|
-
"@wordpress/element": "^5.
|
|
35
|
-
"@wordpress/html-entities": "^3.
|
|
36
|
-
"@wordpress/i18n": "^4.
|
|
37
|
-
"@wordpress/icons": "^9.
|
|
38
|
-
"@wordpress/rich-text": "^6.
|
|
39
|
-
"@wordpress/url": "^3.
|
|
29
|
+
"@wordpress/a11y": "^3.34.0",
|
|
30
|
+
"@wordpress/block-editor": "^12.2.0",
|
|
31
|
+
"@wordpress/components": "^25.0.0",
|
|
32
|
+
"@wordpress/compose": "^6.11.0",
|
|
33
|
+
"@wordpress/data": "^9.4.0",
|
|
34
|
+
"@wordpress/element": "^5.11.0",
|
|
35
|
+
"@wordpress/html-entities": "^3.34.0",
|
|
36
|
+
"@wordpress/i18n": "^4.34.0",
|
|
37
|
+
"@wordpress/icons": "^9.25.0",
|
|
38
|
+
"@wordpress/rich-text": "^6.11.0",
|
|
39
|
+
"@wordpress/url": "^3.35.0"
|
|
40
40
|
},
|
|
41
41
|
"peerDependencies": {
|
|
42
42
|
"react": "^18.0.0",
|
|
@@ -45,5 +45,5 @@
|
|
|
45
45
|
"publishConfig": {
|
|
46
46
|
"access": "public"
|
|
47
47
|
},
|
|
48
|
-
"gitHead": "
|
|
48
|
+
"gitHead": "c7c79cb11b677adcbf06cf5f8cfb6c5ec1699f19"
|
|
49
49
|
}
|
package/src/default-formats.js
CHANGED
|
@@ -13,6 +13,7 @@ import { subscript } from './subscript';
|
|
|
13
13
|
import { superscript } from './superscript';
|
|
14
14
|
import { keyboard } from './keyboard';
|
|
15
15
|
import { unknown } from './unknown';
|
|
16
|
+
import { language } from './language';
|
|
16
17
|
|
|
17
18
|
export default [
|
|
18
19
|
bold,
|
|
@@ -27,4 +28,5 @@ export default [
|
|
|
27
28
|
superscript,
|
|
28
29
|
keyboard,
|
|
29
30
|
unknown,
|
|
31
|
+
language,
|
|
30
32
|
];
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { __ } from '@wordpress/i18n';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* WordPress dependencies
|
|
8
|
+
*/
|
|
9
|
+
import { RichTextToolbarButton } from '@wordpress/block-editor';
|
|
10
|
+
import {
|
|
11
|
+
TextControl,
|
|
12
|
+
SelectControl,
|
|
13
|
+
Button,
|
|
14
|
+
Popover,
|
|
15
|
+
__experimentalHStack as HStack,
|
|
16
|
+
} from '@wordpress/components';
|
|
17
|
+
import { useState } from '@wordpress/element';
|
|
18
|
+
import { applyFormat, removeFormat, useAnchor } from '@wordpress/rich-text';
|
|
19
|
+
import { language as languageIcon } from '@wordpress/icons';
|
|
20
|
+
|
|
21
|
+
const name = 'core/language';
|
|
22
|
+
const title = __( 'Language' );
|
|
23
|
+
|
|
24
|
+
export const language = {
|
|
25
|
+
name,
|
|
26
|
+
tagName: 'bdo',
|
|
27
|
+
className: null,
|
|
28
|
+
edit: Edit,
|
|
29
|
+
title,
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
function Edit( props ) {
|
|
33
|
+
const { contentRef, isActive, onChange, value } = props;
|
|
34
|
+
const popoverAnchor = useAnchor( {
|
|
35
|
+
editableContentElement: contentRef.current,
|
|
36
|
+
settings: language,
|
|
37
|
+
} );
|
|
38
|
+
|
|
39
|
+
const [ lang, setLang ] = useState( '' );
|
|
40
|
+
const [ dir, setDir ] = useState( 'ltr' );
|
|
41
|
+
|
|
42
|
+
const [ isPopoverVisible, setIsPopoverVisible ] = useState( false );
|
|
43
|
+
const togglePopover = () => {
|
|
44
|
+
setIsPopoverVisible( ( state ) => ! state );
|
|
45
|
+
setLang( '' );
|
|
46
|
+
setDir( 'ltr' );
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
return (
|
|
50
|
+
<>
|
|
51
|
+
<RichTextToolbarButton
|
|
52
|
+
icon={ languageIcon }
|
|
53
|
+
label={ title }
|
|
54
|
+
title={ title }
|
|
55
|
+
onClick={ () => {
|
|
56
|
+
if ( isActive ) {
|
|
57
|
+
onChange( removeFormat( value, name ) );
|
|
58
|
+
} else {
|
|
59
|
+
togglePopover();
|
|
60
|
+
}
|
|
61
|
+
} }
|
|
62
|
+
isActive={ isActive }
|
|
63
|
+
role="menuitemcheckbox"
|
|
64
|
+
/>
|
|
65
|
+
|
|
66
|
+
{ isPopoverVisible && (
|
|
67
|
+
<Popover
|
|
68
|
+
className="block-editor-format-toolbar__language-popover"
|
|
69
|
+
anchor={ popoverAnchor }
|
|
70
|
+
placement="bottom"
|
|
71
|
+
onClose={ togglePopover }
|
|
72
|
+
>
|
|
73
|
+
<form
|
|
74
|
+
className="block-editor-format-toolbar__language-container-content"
|
|
75
|
+
onSubmit={ ( event ) => {
|
|
76
|
+
onChange(
|
|
77
|
+
applyFormat( value, {
|
|
78
|
+
type: name,
|
|
79
|
+
attributes: {
|
|
80
|
+
lang,
|
|
81
|
+
dir,
|
|
82
|
+
},
|
|
83
|
+
} )
|
|
84
|
+
);
|
|
85
|
+
togglePopover();
|
|
86
|
+
event.preventDefault();
|
|
87
|
+
} }
|
|
88
|
+
>
|
|
89
|
+
<TextControl
|
|
90
|
+
label={ title }
|
|
91
|
+
value={ lang }
|
|
92
|
+
onChange={ ( val ) => setLang( val ) }
|
|
93
|
+
help={ __(
|
|
94
|
+
'A valid language attribute, like "en" or "fr".'
|
|
95
|
+
) }
|
|
96
|
+
/>
|
|
97
|
+
<SelectControl
|
|
98
|
+
label={ __( 'Text direction' ) }
|
|
99
|
+
value={ dir }
|
|
100
|
+
options={ [
|
|
101
|
+
{
|
|
102
|
+
label: __( 'Left to right' ),
|
|
103
|
+
value: 'ltr',
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
label: __( 'Right to left' ),
|
|
107
|
+
value: 'rtl',
|
|
108
|
+
},
|
|
109
|
+
] }
|
|
110
|
+
onChange={ ( val ) => setDir( val ) }
|
|
111
|
+
/>
|
|
112
|
+
<HStack alignment="right">
|
|
113
|
+
<Button
|
|
114
|
+
variant="primary"
|
|
115
|
+
type="submit"
|
|
116
|
+
text={ __( 'Apply' ) }
|
|
117
|
+
/>
|
|
118
|
+
</HStack>
|
|
119
|
+
</form>
|
|
120
|
+
</Popover>
|
|
121
|
+
) }
|
|
122
|
+
</>
|
|
123
|
+
);
|
|
124
|
+
}
|
package/src/link/index.native.js
CHANGED
package/src/link/modal.native.js
CHANGED
|
@@ -19,6 +19,7 @@ const ModalLinkUI = ( { isVisible, ...restProps } ) => {
|
|
|
19
19
|
hideHeader
|
|
20
20
|
onClose={ restProps.onClose }
|
|
21
21
|
hasNavigation
|
|
22
|
+
testID="link-settings-modal"
|
|
22
23
|
>
|
|
23
24
|
<BottomSheet.NavigationContainer animate main>
|
|
24
25
|
<BottomSheet.NavigationScreen name={ screens.settings }>
|
package/src/style.scss
CHANGED