UNPKG

10.5 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports.default = void 0;
9
10var _element = require("@wordpress/element");
11
12var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
14var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
16var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
17
18var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
19
20var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
21
22var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
23
24var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
25
26var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
27
28var _classnames = _interopRequireDefault(require("classnames"));
29
30var _blob = require("@wordpress/blob");
31
32var _components = require("@wordpress/components");
33
34var _compose = require("@wordpress/compose");
35
36var _data = require("@wordpress/data");
37
38var _blockEditor = require("@wordpress/block-editor");
39
40var _editor = require("@wordpress/editor");
41
42var _i18n = require("@wordpress/i18n");
43
44var _icon = _interopRequireDefault(require("./icon"));
45
46var _inspector = _interopRequireDefault(require("./inspector"));
47
48/**
49 * External dependencies
50 */
51
52/**
53 * WordPress dependencies
54 */
55
56/**
57 * Internal dependencies
58 */
59var FileEdit =
60/*#__PURE__*/
61function (_Component) {
62 (0, _inherits2.default)(FileEdit, _Component);
63
64 function FileEdit() {
65 var _this;
66
67 (0, _classCallCheck2.default)(this, FileEdit);
68 _this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(FileEdit).apply(this, arguments));
69 _this.onSelectFile = _this.onSelectFile.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
70 _this.confirmCopyURL = _this.confirmCopyURL.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
71 _this.resetCopyConfirmation = _this.resetCopyConfirmation.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
72 _this.changeLinkDestinationOption = _this.changeLinkDestinationOption.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
73 _this.changeOpenInNewWindow = _this.changeOpenInNewWindow.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
74 _this.changeShowDownloadButton = _this.changeShowDownloadButton.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
75 _this.state = {
76 hasError: false,
77 showCopyConfirmation: false
78 };
79 return _this;
80 }
81
82 (0, _createClass2.default)(FileEdit, [{
83 key: "componentDidMount",
84 value: function componentDidMount() {
85 var _this2 = this;
86
87 var _this$props = this.props,
88 attributes = _this$props.attributes,
89 noticeOperations = _this$props.noticeOperations;
90 var href = attributes.href; // Upload a file drag-and-dropped into the editor
91
92 if ((0, _blob.isBlobURL)(href)) {
93 var file = (0, _blob.getBlobByURL)(href);
94 (0, _editor.mediaUpload)({
95 filesList: [file],
96 onFileChange: function onFileChange(_ref) {
97 var _ref2 = (0, _slicedToArray2.default)(_ref, 1),
98 media = _ref2[0];
99
100 return _this2.onSelectFile(media);
101 },
102 onError: function onError(message) {
103 _this2.setState({
104 hasError: true
105 });
106
107 noticeOperations.createErrorNotice(message);
108 }
109 });
110 (0, _blob.revokeBlobURL)(href);
111 }
112 }
113 }, {
114 key: "componentDidUpdate",
115 value: function componentDidUpdate(prevProps) {
116 // Reset copy confirmation state when block is deselected
117 if (prevProps.isSelected && !this.props.isSelected) {
118 this.setState({
119 showCopyConfirmation: false
120 });
121 }
122 }
123 }, {
124 key: "onSelectFile",
125 value: function onSelectFile(media) {
126 if (media && media.url) {
127 this.setState({
128 hasError: false
129 });
130 this.props.setAttributes({
131 href: media.url,
132 fileName: media.title,
133 textLinkHref: media.url,
134 id: media.id
135 });
136 }
137 }
138 }, {
139 key: "confirmCopyURL",
140 value: function confirmCopyURL() {
141 this.setState({
142 showCopyConfirmation: true
143 });
144 }
145 }, {
146 key: "resetCopyConfirmation",
147 value: function resetCopyConfirmation() {
148 this.setState({
149 showCopyConfirmation: false
150 });
151 }
152 }, {
153 key: "changeLinkDestinationOption",
154 value: function changeLinkDestinationOption(newHref) {
155 // Choose Media File or Attachment Page (when file is in Media Library)
156 this.props.setAttributes({
157 textLinkHref: newHref
158 });
159 }
160 }, {
161 key: "changeOpenInNewWindow",
162 value: function changeOpenInNewWindow(newValue) {
163 this.props.setAttributes({
164 textLinkTarget: newValue ? '_blank' : false
165 });
166 }
167 }, {
168 key: "changeShowDownloadButton",
169 value: function changeShowDownloadButton(newValue) {
170 this.props.setAttributes({
171 showDownloadButton: newValue
172 });
173 }
174 }, {
175 key: "render",
176 value: function render() {
177 var _this$props2 = this.props,
178 className = _this$props2.className,
179 isSelected = _this$props2.isSelected,
180 attributes = _this$props2.attributes,
181 setAttributes = _this$props2.setAttributes,
182 noticeUI = _this$props2.noticeUI,
183 noticeOperations = _this$props2.noticeOperations,
184 media = _this$props2.media;
185 var fileName = attributes.fileName,
186 href = attributes.href,
187 textLinkHref = attributes.textLinkHref,
188 textLinkTarget = attributes.textLinkTarget,
189 showDownloadButton = attributes.showDownloadButton,
190 downloadButtonText = attributes.downloadButtonText,
191 id = attributes.id;
192 var _this$state = this.state,
193 hasError = _this$state.hasError,
194 showCopyConfirmation = _this$state.showCopyConfirmation;
195 var attachmentPage = media && media.link;
196
197 if (!href || hasError) {
198 return (0, _element.createElement)(_blockEditor.MediaPlaceholder, {
199 icon: (0, _element.createElement)(_blockEditor.BlockIcon, {
200 icon: _icon.default
201 }),
202 labels: {
203 title: (0, _i18n.__)('File'),
204 instructions: (0, _i18n.__)('Drag a file, upload a new one or select a file from your library.')
205 },
206 onSelect: this.onSelectFile,
207 notices: noticeUI,
208 onError: noticeOperations.createErrorNotice,
209 accept: "*"
210 });
211 }
212
213 var classes = (0, _classnames.default)(className, {
214 'is-transient': (0, _blob.isBlobURL)(href)
215 });
216 return (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)(_inspector.default, (0, _extends2.default)({
217 hrefs: {
218 href: href,
219 textLinkHref: textLinkHref,
220 attachmentPage: attachmentPage
221 }
222 }, {
223 openInNewWindow: !!textLinkTarget,
224 showDownloadButton: showDownloadButton,
225 changeLinkDestinationOption: this.changeLinkDestinationOption,
226 changeOpenInNewWindow: this.changeOpenInNewWindow,
227 changeShowDownloadButton: this.changeShowDownloadButton
228 })), (0, _element.createElement)(_blockEditor.BlockControls, null, (0, _element.createElement)(_blockEditor.MediaUploadCheck, null, (0, _element.createElement)(_components.Toolbar, null, (0, _element.createElement)(_blockEditor.MediaUpload, {
229 onSelect: this.onSelectFile,
230 value: id,
231 render: function render(_ref3) {
232 var open = _ref3.open;
233 return (0, _element.createElement)(_components.IconButton, {
234 className: "components-toolbar__control",
235 label: (0, _i18n.__)('Edit file'),
236 onClick: open,
237 icon: "edit"
238 });
239 }
240 })))), (0, _element.createElement)("div", {
241 className: classes
242 }, (0, _element.createElement)("div", {
243 className: 'wp-block-file__content-wrapper'
244 }, (0, _element.createElement)(_blockEditor.RichText, {
245 wrapperClassName: 'wp-block-file__textlink',
246 tagName: "div" // must be block-level or else cursor disappears
247 ,
248 value: fileName,
249 placeholder: (0, _i18n.__)('Write file name…'),
250 keepPlaceholderOnFocus: true,
251 formattingControls: [] // disable controls
252 ,
253 onChange: function onChange(text) {
254 return setAttributes({
255 fileName: text
256 });
257 }
258 }), showDownloadButton && (0, _element.createElement)("div", {
259 className: 'wp-block-file__button-richtext-wrapper'
260 }, (0, _element.createElement)(_blockEditor.RichText, {
261 tagName: "div" // must be block-level or else cursor disappears
262 ,
263 className: 'wp-block-file__button',
264 value: downloadButtonText,
265 formattingControls: [] // disable controls
266 ,
267 placeholder: (0, _i18n.__)('Add text…'),
268 keepPlaceholderOnFocus: true,
269 onChange: function onChange(text) {
270 return setAttributes({
271 downloadButtonText: text
272 });
273 }
274 }))), isSelected && (0, _element.createElement)(_components.ClipboardButton, {
275 isDefault: true,
276 text: href,
277 className: 'wp-block-file__copy-url-button',
278 onCopy: this.confirmCopyURL,
279 onFinishCopy: this.resetCopyConfirmation,
280 disabled: (0, _blob.isBlobURL)(href)
281 }, showCopyConfirmation ? (0, _i18n.__)('Copied!') : (0, _i18n.__)('Copy URL'))));
282 }
283 }]);
284 return FileEdit;
285}(_element.Component);
286
287var _default = (0, _compose.compose)([(0, _data.withSelect)(function (select, props) {
288 var _select = select('core'),
289 getMedia = _select.getMedia;
290
291 var id = props.attributes.id;
292 return {
293 media: id === undefined ? undefined : getMedia(id)
294 };
295}), _components.withNotices])(FileEdit);
296
297exports.default = _default;
298//# sourceMappingURL=edit.js.map
\No newline at end of file