@ablogcms/media 3.2.28-beta.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/README.md +28 -0
- package/dist/acms.d.ts +10 -0
- package/dist/acms.mjs +1 -0
- package/dist/acms.mjs.map +1 -0
- package/dist/chunk-32U7ADG2.mjs +456 -0
- package/dist/chunk-32U7ADG2.mjs.map +1 -0
- package/dist/chunk-3SYVRD3N.mjs +37 -0
- package/dist/chunk-3SYVRD3N.mjs.map +1 -0
- package/dist/chunk-5P6HFS6L.mjs +90 -0
- package/dist/chunk-5P6HFS6L.mjs.map +1 -0
- package/dist/chunk-J5LGTIGS.mjs +10 -0
- package/dist/chunk-J5LGTIGS.mjs.map +1 -0
- package/dist/chunk-JJTHI4QP.mjs +1783 -0
- package/dist/chunk-JJTHI4QP.mjs.map +1 -0
- package/dist/chunk-KQNVYJOK.mjs +1814 -0
- package/dist/chunk-KQNVYJOK.mjs.map +1 -0
- package/dist/chunk-LAZAMWG6.mjs +231 -0
- package/dist/chunk-LAZAMWG6.mjs.map +1 -0
- package/dist/components/media-admin/media-admin-view.d.ts +22 -0
- package/dist/components/media-admin/media-admin.d.ts +6 -0
- package/dist/components/media-admin/media-admin.mjs +148 -0
- package/dist/components/media-admin/media-admin.mjs.map +1 -0
- package/dist/components/media-droparea/media-droparea.d.ts +63 -0
- package/dist/components/media-droparea/media-droparea.mjs +152 -0
- package/dist/components/media-droparea/media-droparea.mjs.map +1 -0
- package/dist/components/media-edit-modal/media-edit-modal.d.ts +58 -0
- package/dist/components/media-insert/media-insert-modal.d.ts +30 -0
- package/dist/components/media-insert/media-insert.d.ts +5 -0
- package/dist/components/media-insert/media-insert.mjs +11 -0
- package/dist/components/media-insert/media-insert.mjs.map +1 -0
- package/dist/components/media-list/media-list.d.ts +125 -0
- package/dist/components/media-modal/media-modal.d.ts +94 -0
- package/dist/components/media-modal/pdf-previewer.d.ts +8 -0
- package/dist/components/media-unit/media-unit.d.ts +65 -0
- package/dist/components/media-unit/media-unit.mjs +13 -0
- package/dist/components/media-unit/media-unit.mjs.map +1 -0
- package/dist/components/media-update/media-update-modal.d.ts +12 -0
- package/dist/components/media-update/media-update.d.ts +5 -0
- package/dist/components/media-update/media-update.mjs +10 -0
- package/dist/components/media-update/media-update.mjs.map +1 -0
- package/dist/components/media-uploader/media-uploader.d.ts +69 -0
- package/dist/constants/index.d.ts +19 -0
- package/dist/containers/media-admin.d.ts +10 -0
- package/dist/containers/media-insert.d.ts +17 -0
- package/dist/containers/media-update.d.ts +13 -0
- package/dist/dataview/column-type.d.ts +10 -0
- package/dist/dataview/column-type.mjs +75 -0
- package/dist/dataview/column-type.mjs.map +1 -0
- package/dist/events.d.ts +70 -0
- package/dist/media-crop-focal-OQHAYXEP.svg +1 -0
- package/dist/media-crop-icon-LD2QEJHL.svg +12 -0
- package/dist/media-focal-point-OQQ3MQM2.svg +3 -0
- package/dist/media-rotate-icon-HBMXAPD4.svg +7 -0
- package/dist/runtime.d.ts +20 -0
- package/dist/runtime.mjs +16 -0
- package/dist/runtime.mjs.map +1 -0
- package/dist/setup-media-unit.d.ts +2 -0
- package/dist/setup-media-unit.mjs +118 -0
- package/dist/setup-media-unit.mjs.map +1 -0
- package/dist/stores/actions.d.ts +64 -0
- package/dist/stores/reducer.d.ts +5 -0
- package/dist/stores/saga.d.ts +35 -0
- package/dist/types/config.d.ts +29 -0
- package/dist/types/index.d.ts +83 -0
- package/dist/types/index.mjs +1 -0
- package/dist/types/index.mjs.map +1 -0
- package/dist/types/transport.d.ts +76 -0
- package/dist/utils/index.d.ts +5 -0
- package/package.json +112 -0
package/README.md
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# @ablogcms/media
|
|
2
|
+
|
|
3
|
+
メディアライブラリ(アップロード・一覧・タグ・トリミング・差し替え・ユニット埋め込み)の
|
|
4
|
+
React 実装一式を提供するパッケージ。
|
|
5
|
+
|
|
6
|
+
## 使い方
|
|
7
|
+
|
|
8
|
+
このパッケージ自体は HTTP 通信を行わない。データの取得方法(`MediaTransport`)を呼び出し側が
|
|
9
|
+
実装し、アプリ起動時に一度登録する。
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
import { configureMediaRuntime } from '@ablogcms/media/runtime';
|
|
13
|
+
|
|
14
|
+
configureMediaRuntime(myMediaTransport, myMediaConfig);
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
登録後は次のコンポーネントがこの transport を通じてデータを取得する。
|
|
18
|
+
|
|
19
|
+
| コンポーネント | import パス |
|
|
20
|
+
|---|---|
|
|
21
|
+
| `MediaAdmin`(メディア一覧画面) | `@ablogcms/media/components/media-admin/media-admin` |
|
|
22
|
+
| `MediaInsert`(挿入用ピッカー) | `@ablogcms/media/components/media-insert/media-insert` |
|
|
23
|
+
| `MediaUpdate`(詳細・編集) | `@ablogcms/media/components/media-update/media-update` |
|
|
24
|
+
| `MediaDroparea`(ドラッグ&ドロップ領域) | `@ablogcms/media/components/media-droparea/media-droparea` |
|
|
25
|
+
| `MediaUnit`(ユニット埋め込み用) | `@ablogcms/media/components/media-unit/media-unit` |
|
|
26
|
+
|
|
27
|
+
テストでは `configureMediaRuntime(mockTransport)` でモックに差し替え、
|
|
28
|
+
`resetMediaRuntimeForTesting()`(同じく `./runtime`)でリセットできる。
|
package/dist/acms.d.ts
ADDED
package/dist/acms.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=acms.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
import {
|
|
2
|
+
media_update_default
|
|
3
|
+
} from "./chunk-5P6HFS6L.mjs";
|
|
4
|
+
import {
|
|
5
|
+
media_insert_default
|
|
6
|
+
} from "./chunk-LAZAMWG6.mjs";
|
|
7
|
+
|
|
8
|
+
// src/components/media-unit/media-unit.tsx
|
|
9
|
+
import { Component, createRef } from "react";
|
|
10
|
+
import { DropZone, DropZoneFileSelector, DropZoneText } from "@ablogcms/components/drop-zone";
|
|
11
|
+
import { AutoResizeTextarea } from "@ablogcms/components/textarea";
|
|
12
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
13
|
+
var MediaUnit = class extends Component {
|
|
14
|
+
static defaultProps = {
|
|
15
|
+
items: [],
|
|
16
|
+
mediaSizes: [],
|
|
17
|
+
lang: "ja"
|
|
18
|
+
};
|
|
19
|
+
rootRef = createRef();
|
|
20
|
+
handleMediaUpdated;
|
|
21
|
+
constructor(props) {
|
|
22
|
+
super(props);
|
|
23
|
+
let newMedia = false;
|
|
24
|
+
if (props.items.length === 0) {
|
|
25
|
+
newMedia = true;
|
|
26
|
+
}
|
|
27
|
+
this.state = {
|
|
28
|
+
insertModalOpened: false,
|
|
29
|
+
updateModalOpened: false,
|
|
30
|
+
modalType: "upload",
|
|
31
|
+
targetId: null,
|
|
32
|
+
items: props.items,
|
|
33
|
+
files: [],
|
|
34
|
+
landscape: true,
|
|
35
|
+
newMedia,
|
|
36
|
+
noLarge: props.enlarged === "true" ? "no" : "yes",
|
|
37
|
+
noLink: props.hasLink === "true" ? "no" : "yes",
|
|
38
|
+
useIcon: props.usePdfIcon === "yes" ? "yes" : "no",
|
|
39
|
+
link: props.overrideLink,
|
|
40
|
+
alt: props.overrideAlt,
|
|
41
|
+
caption: props.overrideCaption
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
componentDidMount() {
|
|
45
|
+
const { items, newMedia } = this.state;
|
|
46
|
+
if (items.length > 0 && !newMedia) {
|
|
47
|
+
const [item] = items;
|
|
48
|
+
const img = new Image();
|
|
49
|
+
img.onload = () => {
|
|
50
|
+
if (img.width < img.height) {
|
|
51
|
+
this.setState({
|
|
52
|
+
landscape: false
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
img.src = item.media_thumbnail;
|
|
57
|
+
}
|
|
58
|
+
if (this.props.onMount) {
|
|
59
|
+
this.props.onMount();
|
|
60
|
+
}
|
|
61
|
+
this.handleMediaUpdated = (event) => {
|
|
62
|
+
if (!(event instanceof CustomEvent)) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const updatedMedia = event.detail.data;
|
|
66
|
+
const { items: currentItems } = this.state;
|
|
67
|
+
const findIndex = currentItems.findIndex((item) => item.media_id === updatedMedia.media_id);
|
|
68
|
+
if (findIndex !== -1) {
|
|
69
|
+
const newItems = [...currentItems.slice(0, findIndex), updatedMedia, ...currentItems.slice(findIndex + 1)];
|
|
70
|
+
this.setState({
|
|
71
|
+
items: newItems
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
document.addEventListener("acms.media-updated", this.handleMediaUpdated);
|
|
76
|
+
}
|
|
77
|
+
componentWillUnmount() {
|
|
78
|
+
if (this.handleMediaUpdated) {
|
|
79
|
+
document.removeEventListener("acms.media-updated", this.handleMediaUpdated);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
componentDidUpdate(_, prevState) {
|
|
83
|
+
if (prevState.items !== this.state.items && this.props.onChange) {
|
|
84
|
+
this.props.onChange(this.state.items);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
openInsertModal = () => {
|
|
88
|
+
this.setState({
|
|
89
|
+
modalType: "select",
|
|
90
|
+
insertModalOpened: true
|
|
91
|
+
});
|
|
92
|
+
};
|
|
93
|
+
onInsert = (items) => {
|
|
94
|
+
this.setState({
|
|
95
|
+
items,
|
|
96
|
+
insertModalOpened: false
|
|
97
|
+
});
|
|
98
|
+
};
|
|
99
|
+
onClose = () => {
|
|
100
|
+
this.setState({
|
|
101
|
+
insertModalOpened: false
|
|
102
|
+
});
|
|
103
|
+
};
|
|
104
|
+
onUpdateModalClose = () => {
|
|
105
|
+
this.setState({
|
|
106
|
+
updateModalOpened: false
|
|
107
|
+
});
|
|
108
|
+
};
|
|
109
|
+
onUpdateModalUpdate = (item) => {
|
|
110
|
+
const { items, targetId } = this.state;
|
|
111
|
+
const findIndex = items.findIndex((currentItem) => {
|
|
112
|
+
if (currentItem.media_id === targetId) {
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
return false;
|
|
116
|
+
});
|
|
117
|
+
const updated = [...items.slice(0, findIndex), item, ...items.slice(findIndex + 1)];
|
|
118
|
+
this.setState({
|
|
119
|
+
updateModalOpened: false,
|
|
120
|
+
items: updated
|
|
121
|
+
});
|
|
122
|
+
};
|
|
123
|
+
removeMediaAt = (index) => {
|
|
124
|
+
const { items } = this.state;
|
|
125
|
+
const filtered = items.filter((item, i) => i !== index);
|
|
126
|
+
this.setState({
|
|
127
|
+
items: filtered
|
|
128
|
+
});
|
|
129
|
+
};
|
|
130
|
+
openEditModal = (targetId) => {
|
|
131
|
+
this.setState({
|
|
132
|
+
targetId,
|
|
133
|
+
updateModalOpened: true
|
|
134
|
+
});
|
|
135
|
+
};
|
|
136
|
+
onComplete = (files) => {
|
|
137
|
+
this.setState({
|
|
138
|
+
files: files.map((item) => item.file),
|
|
139
|
+
insertModalOpened: true,
|
|
140
|
+
modalType: "upload"
|
|
141
|
+
});
|
|
142
|
+
};
|
|
143
|
+
uploadFile = (e) => {
|
|
144
|
+
if (!(e.target.files instanceof FileList)) {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
this.setState({
|
|
148
|
+
files: Array.from(e.target.files),
|
|
149
|
+
insertModalOpened: true,
|
|
150
|
+
modalType: "upload"
|
|
151
|
+
});
|
|
152
|
+
};
|
|
153
|
+
render() {
|
|
154
|
+
const {
|
|
155
|
+
insertModalOpened,
|
|
156
|
+
updateModalOpened,
|
|
157
|
+
modalType,
|
|
158
|
+
targetId,
|
|
159
|
+
items,
|
|
160
|
+
files,
|
|
161
|
+
newMedia,
|
|
162
|
+
noLarge,
|
|
163
|
+
useIcon,
|
|
164
|
+
link,
|
|
165
|
+
alt,
|
|
166
|
+
caption
|
|
167
|
+
} = this.state;
|
|
168
|
+
const { mediaSizes, primaryImageId, id, active, enlarged, usePdfIcon, primary, lang, multiUpload } = this.props;
|
|
169
|
+
const item = items.at(0);
|
|
170
|
+
return /* @__PURE__ */ jsx("div", { ref: this.rootRef, children: /* @__PURE__ */ jsxs(
|
|
171
|
+
DropZone,
|
|
172
|
+
{
|
|
173
|
+
onComplete: (files2) => {
|
|
174
|
+
this.onComplete(files2);
|
|
175
|
+
},
|
|
176
|
+
children: [
|
|
177
|
+
/* @__PURE__ */ jsx("table", { className: "entryFormColumnSettingTable entryFormColumnTable", children: /* @__PURE__ */ jsxs("tbody", { children: [
|
|
178
|
+
/* @__PURE__ */ jsxs("tr", { className: "entryFormFileControl", children: [
|
|
179
|
+
/* @__PURE__ */ jsxs("td", { className: "acms-admin-media-unit-preview-area", children: [
|
|
180
|
+
items.length === 0 && /* @__PURE__ */ jsxs("div", { children: [
|
|
181
|
+
/* @__PURE__ */ jsxs("div", { className: "acms-admin-media-unit-droparea", children: [
|
|
182
|
+
/* @__PURE__ */ jsx(DropZoneText, { children: ACMS.i18n("media.add_new_media") }),
|
|
183
|
+
/* @__PURE__ */ jsx(DropZoneFileSelector, { onChange: this.uploadFile, disabled: insertModalOpened }),
|
|
184
|
+
/* @__PURE__ */ jsx(DropZoneText, { children: ACMS.i18n("media.drop_file") })
|
|
185
|
+
] }),
|
|
186
|
+
/* @__PURE__ */ jsx("input", { type: "hidden", name: `media_id_${id}[]`, value: "" })
|
|
187
|
+
] }),
|
|
188
|
+
items.length > 0 && items.length < 2 && item !== void 0 && /* @__PURE__ */ jsxs("div", { className: "acms-admin-media-unit-preview-wrap", children: [
|
|
189
|
+
/* @__PURE__ */ jsx("div", { className: "acms-admin-media-unit-preview-overlay" }),
|
|
190
|
+
/* @__PURE__ */ jsx(
|
|
191
|
+
"button",
|
|
192
|
+
{
|
|
193
|
+
type: "button",
|
|
194
|
+
className: "acms-admin-media-unit-preview-remove-btn",
|
|
195
|
+
onClick: () => this.removeMediaAt(0),
|
|
196
|
+
"aria-label": ACMS.i18n("media.clear_button_label")
|
|
197
|
+
}
|
|
198
|
+
),
|
|
199
|
+
/* @__PURE__ */ jsx("div", { className: "acms-admin-media-unit-preview-edit-overlay" }),
|
|
200
|
+
(item.media_type === "image" || item.media_type === "svg") && /* @__PURE__ */ jsx("img", { className: "acms-admin-media-unit-preview", src: `${item.media_thumbnail}`, alt: "" }),
|
|
201
|
+
item.media_type === "file" && /* @__PURE__ */ jsxs("div", { className: "acms-admin-media-unit-file-icon-wrap", children: [
|
|
202
|
+
/* @__PURE__ */ jsx("img", { className: "acms-admin-media-unit-file-icon", src: `${item.media_thumbnail}`, alt: "" }),
|
|
203
|
+
/* @__PURE__ */ jsx("p", { className: "acms-admin-media-unit-file-caption", children: item.media_title })
|
|
204
|
+
] }),
|
|
205
|
+
/* @__PURE__ */ jsx(
|
|
206
|
+
"button",
|
|
207
|
+
{
|
|
208
|
+
type: "button",
|
|
209
|
+
className: "acms-admin-media-edit-btn acms-admin-media-unit-preview-edit-btn",
|
|
210
|
+
onClick: () => this.openEditModal(item.media_id),
|
|
211
|
+
children: ACMS.i18n("media.edit")
|
|
212
|
+
}
|
|
213
|
+
),
|
|
214
|
+
/* @__PURE__ */ jsx("input", { type: "hidden", name: `media_id_${id}[]`, value: item.media_id.toString() })
|
|
215
|
+
] })
|
|
216
|
+
] }),
|
|
217
|
+
/* @__PURE__ */ jsxs("td", { className: "entryFormFileControl", children: [
|
|
218
|
+
/* @__PURE__ */ jsx("table", { className: "acms-admin-margin-bottom-mini", style: { width: "100%" }, children: /* @__PURE__ */ jsxs("tbody", { children: [
|
|
219
|
+
/* @__PURE__ */ jsxs("tr", { children: [
|
|
220
|
+
/* @__PURE__ */ jsx("th", { children: "ID" }),
|
|
221
|
+
/* @__PURE__ */ jsxs("td", { children: [
|
|
222
|
+
/* @__PURE__ */ jsx("div", { style: { display: "inline-block" }, children: item && item.media_id && /* @__PURE__ */ jsx("span", { className: "acms-admin-label acms-admin-label-default acms-admin-margin-right-mini", children: item.media_id }) }),
|
|
223
|
+
/* @__PURE__ */ jsx("button", { type: "button", className: "acms-admin-btn-admin", onClick: this.openInsertModal, children: ACMS.i18n("media.select_from_media") }),
|
|
224
|
+
active !== "on" && /* @__PURE__ */ jsx("span", { style: { color: "red" }, children: ACMS.i18n("media.media_unit_use") })
|
|
225
|
+
] })
|
|
226
|
+
] }),
|
|
227
|
+
mediaSizes && mediaSizes.length !== 0 && /* @__PURE__ */ jsxs("tr", { children: [
|
|
228
|
+
/* @__PURE__ */ jsx("th", { children: /* @__PURE__ */ jsx("label", { htmlFor: `unit-media-size-${id}`, children: ACMS.i18n("media.size") }) }),
|
|
229
|
+
/* @__PURE__ */ jsxs("td", { children: [
|
|
230
|
+
/* @__PURE__ */ jsx(
|
|
231
|
+
"select",
|
|
232
|
+
{
|
|
233
|
+
defaultValue: mediaSizes.find((size) => size.selected)?.value,
|
|
234
|
+
name: `media_size_${id}[]`,
|
|
235
|
+
id: `unit-media-size-${id}`,
|
|
236
|
+
children: mediaSizes.map((mediaSize) => /* @__PURE__ */ jsx("option", { value: mediaSize.value, children: mediaSize.label }, mediaSize.label))
|
|
237
|
+
},
|
|
238
|
+
mediaSizes.find((size) => size.selected)?.value
|
|
239
|
+
),
|
|
240
|
+
item && item.media_type === "file" && (item.media_pdf === "yes" || item.media_ext && item.media_ext.toUpperCase() === "PDF") && /* @__PURE__ */ jsxs("div", { className: "acms-admin-form-checkbox", style: { marginLeft: "10px" }, children: [
|
|
241
|
+
/* @__PURE__ */ jsx("input", { type: "hidden", name: `media_use_icon_${id}[]`, value: useIcon }),
|
|
242
|
+
/* @__PURE__ */ jsx(
|
|
243
|
+
"input",
|
|
244
|
+
{
|
|
245
|
+
type: "checkbox",
|
|
246
|
+
value: "yes",
|
|
247
|
+
id: `input-checkbox-media_use_icon_${id}_${lang}`,
|
|
248
|
+
defaultChecked: usePdfIcon === "yes",
|
|
249
|
+
onChange: (e) => {
|
|
250
|
+
if (e.target.checked) {
|
|
251
|
+
this.setState({
|
|
252
|
+
useIcon: "yes"
|
|
253
|
+
});
|
|
254
|
+
} else {
|
|
255
|
+
this.setState({
|
|
256
|
+
useIcon: "no"
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
),
|
|
262
|
+
/* @__PURE__ */ jsxs("label", { htmlFor: `input-checkbox-media_use_icon_${id}_${lang}`, children: [
|
|
263
|
+
/* @__PURE__ */ jsx("i", { className: "acms-admin-ico-checkbox" }),
|
|
264
|
+
ACMS.i18n("media.use_icon")
|
|
265
|
+
] })
|
|
266
|
+
] })
|
|
267
|
+
] })
|
|
268
|
+
] }),
|
|
269
|
+
items.length < 2 && /* @__PURE__ */ jsxs("tr", { children: [
|
|
270
|
+
/* @__PURE__ */ jsx("th", { children: /* @__PURE__ */ jsx("label", { id: `unit-media-caption-label-${id}`, htmlFor: `unit-media-caption-${id}`, children: ACMS.i18n("media.caption") }) }),
|
|
271
|
+
/* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsx(
|
|
272
|
+
"input",
|
|
273
|
+
{
|
|
274
|
+
type: "text",
|
|
275
|
+
name: `media_caption_${id}[]`,
|
|
276
|
+
id: `unit-media-caption-${id}`,
|
|
277
|
+
"aria-labelledby": `unit-media-caption-label-${id}`,
|
|
278
|
+
className: "acms-admin-form-width-full",
|
|
279
|
+
defaultValue: caption,
|
|
280
|
+
placeholder: item && item.media_caption ? `${item.media_caption}` : ""
|
|
281
|
+
}
|
|
282
|
+
) })
|
|
283
|
+
] }),
|
|
284
|
+
items.length < 2 && /* @__PURE__ */ jsxs("tr", { children: [
|
|
285
|
+
/* @__PURE__ */ jsx("th", { children: /* @__PURE__ */ jsx("label", { id: `unit-media-alt-text-label-${id}`, htmlFor: `unit-media-alt-text-${id}`, children: ACMS.i18n("media.alt") }) }),
|
|
286
|
+
/* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsx(
|
|
287
|
+
AutoResizeTextarea,
|
|
288
|
+
{
|
|
289
|
+
name: `media_alt_${id}[]`,
|
|
290
|
+
defaultValue: alt,
|
|
291
|
+
id: `unit-media-alt-text-${id}`,
|
|
292
|
+
"aria-labelledby": `unit-media-alt-text-label-${id}`,
|
|
293
|
+
className: "acms-admin-form-width-full",
|
|
294
|
+
placeholder: item && item.media_alt ? `${item.media_alt}` : "",
|
|
295
|
+
maxRows: 4
|
|
296
|
+
}
|
|
297
|
+
) })
|
|
298
|
+
] }),
|
|
299
|
+
items.length < 2 && item !== void 0 && (item.media_type === "image" || item.media_type === "svg") && /* @__PURE__ */ jsxs("tr", { children: [
|
|
300
|
+
/* @__PURE__ */ jsx("th", { children: /* @__PURE__ */ jsx(
|
|
301
|
+
"label",
|
|
302
|
+
{
|
|
303
|
+
id: `input-text-media_link-label-${id}-${lang}`,
|
|
304
|
+
htmlFor: `input-text-media_link_${id}_${lang}`,
|
|
305
|
+
children: ACMS.i18n("media.url_link_to")
|
|
306
|
+
}
|
|
307
|
+
) }),
|
|
308
|
+
/* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsx(
|
|
309
|
+
"input",
|
|
310
|
+
{
|
|
311
|
+
type: "text",
|
|
312
|
+
id: `input-text-media_link_${id}_${lang}`,
|
|
313
|
+
"aria-labelledby": `input-text-media_link-label-${id}-${lang}`,
|
|
314
|
+
name: `media_link_${id}[]`,
|
|
315
|
+
className: "acms-admin-form-width-full",
|
|
316
|
+
placeholder: item.media_link || "",
|
|
317
|
+
defaultValue: link
|
|
318
|
+
}
|
|
319
|
+
) })
|
|
320
|
+
] }),
|
|
321
|
+
items.length < 2 && item !== void 0 && (item.media_type === "image" || item.media_type === "svg") && /* @__PURE__ */ jsxs("tr", { children: [
|
|
322
|
+
/* @__PURE__ */ jsx("th", { children: /* @__PURE__ */ jsx("label", { htmlFor: `input-checkbox-media_enlarged_${id}_${lang}`, children: ACMS.i18n("media.image_link") }) }),
|
|
323
|
+
/* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsxs("div", { className: "acms-admin-form-checkbox", children: [
|
|
324
|
+
/* @__PURE__ */ jsx("input", { type: "hidden", name: `media_enlarged_${id}[]`, value: noLarge }),
|
|
325
|
+
/* @__PURE__ */ jsx(
|
|
326
|
+
"input",
|
|
327
|
+
{
|
|
328
|
+
type: "checkbox",
|
|
329
|
+
value: "no",
|
|
330
|
+
id: `input-checkbox-media_enlarged_${id}_${lang}`,
|
|
331
|
+
defaultChecked: enlarged === "true",
|
|
332
|
+
onChange: (e) => {
|
|
333
|
+
if (e.target.checked) {
|
|
334
|
+
this.setState({
|
|
335
|
+
noLarge: "no"
|
|
336
|
+
});
|
|
337
|
+
} else {
|
|
338
|
+
this.setState({
|
|
339
|
+
noLarge: "yes"
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
),
|
|
345
|
+
/* @__PURE__ */ jsxs("label", { htmlFor: `input-checkbox-media_enlarged_${id}_${lang}`, children: [
|
|
346
|
+
/* @__PURE__ */ jsx("i", { className: "acms-admin-ico-checkbox" }),
|
|
347
|
+
ACMS.i18n("media.no_image_link")
|
|
348
|
+
] })
|
|
349
|
+
] }) })
|
|
350
|
+
] }),
|
|
351
|
+
items.length < 2 && primaryImageId !== "no" && item && item.media_type === "image" && !newMedia && /* @__PURE__ */ jsxs("tr", { children: [
|
|
352
|
+
/* @__PURE__ */ jsx("th", { children: /* @__PURE__ */ jsx("label", { htmlFor: `input-radio-image_primary_image_${id}_${lang}`, children: ACMS.i18n("media.main_image") }) }),
|
|
353
|
+
/* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsxs("div", { className: "acms-admin-form-radio", children: [
|
|
354
|
+
/* @__PURE__ */ jsx(
|
|
355
|
+
"input",
|
|
356
|
+
{
|
|
357
|
+
type: "radio",
|
|
358
|
+
name: "primary_image",
|
|
359
|
+
value: primaryImageId,
|
|
360
|
+
id: `input-radio-image_primary_image_${id}_${lang}`,
|
|
361
|
+
defaultChecked: primary === "true"
|
|
362
|
+
}
|
|
363
|
+
),
|
|
364
|
+
/* @__PURE__ */ jsxs("label", { htmlFor: `input-radio-image_primary_image_${id}_${lang}`, children: [
|
|
365
|
+
/* @__PURE__ */ jsx("i", { className: "acms-admin-ico-radio" }),
|
|
366
|
+
ACMS.i18n("media.set_as_main_image")
|
|
367
|
+
] })
|
|
368
|
+
] }) })
|
|
369
|
+
] })
|
|
370
|
+
] }) }),
|
|
371
|
+
!(items.length < 2 && item && (item.media_type === "image" || item.media_type === "svg")) && /* @__PURE__ */ jsx("input", { type: "hidden", name: `media_enlarged_${id}[]`, value: "no" })
|
|
372
|
+
] })
|
|
373
|
+
] }),
|
|
374
|
+
items.length >= 2 && /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", { colSpan: 2, children: /* @__PURE__ */ jsx("div", { className: "acms-admin-media-unit-preview-group", children: items.map((item2, index) => /* @__PURE__ */ jsxs(
|
|
375
|
+
"div",
|
|
376
|
+
{
|
|
377
|
+
className: "acms-admin-media-unit-preview-wrap acms-admin-media-unit-preview-group-item",
|
|
378
|
+
children: [
|
|
379
|
+
/* @__PURE__ */ jsxs("div", { className: "acms-admin-media-unit-preview-group-item-inner", children: [
|
|
380
|
+
/* @__PURE__ */ jsx("div", { className: "acms-admin-media-unit-preview-edit-overlay" }),
|
|
381
|
+
(item2.media_type === "image" || item2.media_type === "svg") && /* @__PURE__ */ jsx(
|
|
382
|
+
"img",
|
|
383
|
+
{
|
|
384
|
+
className: "acms-admin-media-unit-preview-group-img",
|
|
385
|
+
src: `${item2.media_thumbnail}`,
|
|
386
|
+
alt: ""
|
|
387
|
+
}
|
|
388
|
+
),
|
|
389
|
+
item2.media_type === "file" && /* @__PURE__ */ jsxs("div", { className: "acms-admin-media-unit-file-icon-wrap", children: [
|
|
390
|
+
/* @__PURE__ */ jsx(
|
|
391
|
+
"img",
|
|
392
|
+
{
|
|
393
|
+
className: "acms-admin-media-unit-file-icon",
|
|
394
|
+
src: `${item2.media_thumbnail}`,
|
|
395
|
+
alt: ""
|
|
396
|
+
}
|
|
397
|
+
),
|
|
398
|
+
/* @__PURE__ */ jsx("p", { className: "acms-admin-media-unit-file-caption", children: item2.media_title })
|
|
399
|
+
] }),
|
|
400
|
+
/* @__PURE__ */ jsx("input", { type: "hidden", name: `media_id_${id}[]`, value: item2.media_id.toString() })
|
|
401
|
+
] }),
|
|
402
|
+
/* @__PURE__ */ jsx("div", { className: "acms-admin-media-unit-preview-overlay" }),
|
|
403
|
+
/* @__PURE__ */ jsx(
|
|
404
|
+
"button",
|
|
405
|
+
{
|
|
406
|
+
type: "button",
|
|
407
|
+
className: "acms-admin-media-unit-preview-remove-btn",
|
|
408
|
+
onClick: () => this.removeMediaAt(index),
|
|
409
|
+
"aria-label": ACMS.i18n("media.clear_button_label")
|
|
410
|
+
}
|
|
411
|
+
),
|
|
412
|
+
/* @__PURE__ */ jsx(
|
|
413
|
+
"button",
|
|
414
|
+
{
|
|
415
|
+
type: "button",
|
|
416
|
+
className: "acms-admin-media-edit-btn acms-admin-media-unit-preview-edit-btn",
|
|
417
|
+
onClick: () => this.openEditModal(item2.media_id),
|
|
418
|
+
children: ACMS.i18n("media.edit")
|
|
419
|
+
}
|
|
420
|
+
)
|
|
421
|
+
]
|
|
422
|
+
},
|
|
423
|
+
item2.media_id
|
|
424
|
+
)) }) }) })
|
|
425
|
+
] }) }),
|
|
426
|
+
/* @__PURE__ */ jsx(
|
|
427
|
+
media_insert_default,
|
|
428
|
+
{
|
|
429
|
+
isOpen: insertModalOpened,
|
|
430
|
+
onInsert: this.onInsert,
|
|
431
|
+
radioMode: multiUpload === "false",
|
|
432
|
+
files,
|
|
433
|
+
onClose: this.onClose,
|
|
434
|
+
tab: modalType,
|
|
435
|
+
filetype: "all"
|
|
436
|
+
}
|
|
437
|
+
),
|
|
438
|
+
targetId != null && targetId > 0 && /* @__PURE__ */ jsx(
|
|
439
|
+
media_update_default,
|
|
440
|
+
{
|
|
441
|
+
isOpen: updateModalOpened,
|
|
442
|
+
mid: targetId,
|
|
443
|
+
onClose: this.onUpdateModalClose,
|
|
444
|
+
onUpdate: this.onUpdateModalUpdate
|
|
445
|
+
}
|
|
446
|
+
)
|
|
447
|
+
]
|
|
448
|
+
}
|
|
449
|
+
) });
|
|
450
|
+
}
|
|
451
|
+
};
|
|
452
|
+
|
|
453
|
+
export {
|
|
454
|
+
MediaUnit
|
|
455
|
+
};
|
|
456
|
+
//# sourceMappingURL=chunk-32U7ADG2.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/media-unit/media-unit.tsx"],"sourcesContent":["import { Component, createRef } from 'react';\nimport { ExtendedFile } from '@ablogcms/lib/read-files';\nimport { DropZone, DropZoneFileSelector, DropZoneText } from '@ablogcms/components/drop-zone';\nimport { AutoResizeTextarea } from '@ablogcms/components/textarea';\nimport MediaInsert from '../media-insert/media-insert';\nimport MediaUpdate from '../media-update/media-update';\nimport { MediaItem } from '../../types';\n\ntype MediaUnitProps = {\n items: MediaItem[];\n mediaSizes?: { value: string; label: string; selected: boolean }[];\n primaryImageId: string;\n id: string;\n active: 'on' | 'off';\n lang?: string;\n usePdfIcon: 'yes' | 'no';\n primary: 'true' | 'false';\n hasLink: 'true' | 'false';\n multiUpload: 'true' | 'false';\n enlarged: 'true' | 'false';\n overrideLink: string;\n overrideAlt: string;\n overrideCaption: string;\n onMount?: () => void;\n onChange?: (mediaItems: MediaItem[]) => void;\n};\n\ntype MediaUnitState = {\n insertModalOpened: boolean;\n updateModalOpened: boolean;\n newMedia: boolean;\n noLink: 'yes' | 'no';\n noLarge: 'yes' | 'no';\n useIcon: 'yes' | 'no';\n modalType: 'upload' | 'select';\n link: string;\n targetId: number | null;\n items: MediaItem[];\n files: File[];\n landscape: boolean;\n alt: string;\n caption: string;\n};\n\nexport default class MediaUnit extends Component<MediaUnitProps, MediaUnitState> {\n static defaultProps = {\n items: [],\n mediaSizes: [],\n lang: 'ja',\n };\n\n rootRef = createRef<HTMLDivElement>();\n\n handleMediaUpdated?: (event: Event) => void;\n\n constructor(props: MediaUnitProps) {\n super(props);\n\n let newMedia = false;\n if (props.items.length === 0) {\n newMedia = true;\n }\n this.state = {\n insertModalOpened: false,\n updateModalOpened: false,\n modalType: 'upload',\n targetId: null,\n items: props.items,\n files: [],\n landscape: true,\n newMedia,\n noLarge: props.enlarged === 'true' ? 'no' : 'yes',\n noLink: props.hasLink === 'true' ? 'no' : 'yes',\n useIcon: props.usePdfIcon === 'yes' ? 'yes' : 'no',\n link: props.overrideLink,\n alt: props.overrideAlt,\n caption: props.overrideCaption,\n };\n }\n\n componentDidMount() {\n const { items, newMedia } = this.state;\n if (items.length > 0 && !newMedia) {\n const [item] = items;\n const img = new Image();\n img.onload = () => {\n if (img.width < img.height) {\n this.setState({\n landscape: false,\n });\n }\n };\n img.src = item.media_thumbnail;\n }\n\n if (this.props.onMount) {\n this.props.onMount();\n }\n\n // メディア更新イベントを購読\n this.handleMediaUpdated = (event: Event) => {\n if (!(event instanceof CustomEvent)) {\n return;\n }\n const updatedMedia = event.detail.data as MediaItem;\n const { items: currentItems } = this.state;\n // 現在のitems内に該当するメディアIDがあるか確認\n const findIndex = currentItems.findIndex((item) => item.media_id === updatedMedia.media_id);\n if (findIndex !== -1) {\n // 該当するメディアを更新\n const newItems = [...currentItems.slice(0, findIndex), updatedMedia, ...currentItems.slice(findIndex + 1)];\n this.setState({\n items: newItems,\n });\n }\n };\n document.addEventListener('acms.media-updated', this.handleMediaUpdated);\n }\n\n componentWillUnmount() {\n if (this.handleMediaUpdated) {\n document.removeEventListener('acms.media-updated', this.handleMediaUpdated);\n }\n }\n\n componentDidUpdate(_: MediaUnitProps, prevState: MediaUnitState) {\n if (prevState.items !== this.state.items && this.props.onChange) {\n this.props.onChange(this.state.items);\n }\n }\n\n openInsertModal = () => {\n this.setState({\n modalType: 'select',\n insertModalOpened: true,\n });\n };\n\n onInsert = (items: MediaItem[]) => {\n this.setState({\n items,\n insertModalOpened: false,\n });\n };\n\n onClose = () => {\n this.setState({\n insertModalOpened: false,\n });\n };\n\n onUpdateModalClose = () => {\n this.setState({\n updateModalOpened: false,\n });\n };\n\n onUpdateModalUpdate = (item: MediaItem) => {\n const { items, targetId } = this.state;\n const findIndex = items.findIndex((currentItem) => {\n if (currentItem.media_id === targetId) {\n return true;\n }\n return false;\n });\n const updated = [...items.slice(0, findIndex), item, ...items.slice(findIndex + 1)];\n this.setState({\n updateModalOpened: false,\n items: updated,\n });\n };\n\n removeMediaAt = (index: number) => {\n const { items } = this.state;\n const filtered = items.filter((item, i) => i !== index);\n this.setState({\n items: filtered,\n });\n };\n\n openEditModal = (targetId: number) => {\n this.setState({\n targetId,\n updateModalOpened: true,\n });\n };\n\n onComplete = (files: ExtendedFile[]) => {\n this.setState({\n files: files.map((item) => item.file),\n insertModalOpened: true,\n modalType: 'upload',\n });\n };\n\n uploadFile = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!(e.target.files instanceof FileList)) {\n return;\n }\n this.setState({\n files: Array.from(e.target.files),\n insertModalOpened: true,\n modalType: 'upload',\n });\n };\n\n render() {\n const {\n insertModalOpened,\n updateModalOpened,\n modalType,\n targetId,\n items,\n files,\n newMedia,\n noLarge,\n useIcon,\n link,\n alt,\n caption,\n } = this.state;\n const { mediaSizes, primaryImageId, id, active, enlarged, usePdfIcon, primary, lang, multiUpload } = this.props;\n const item = items.at(0);\n\n return (\n <div ref={this.rootRef}>\n <DropZone\n onComplete={(files) => {\n this.onComplete(files);\n }}\n >\n <table className=\"entryFormColumnSettingTable entryFormColumnTable\">\n <tbody>\n <tr className=\"entryFormFileControl\">\n <td className=\"acms-admin-media-unit-preview-area\">\n {items.length === 0 && (\n <div>\n <div className=\"acms-admin-media-unit-droparea\">\n <DropZoneText>{ACMS.i18n('media.add_new_media')}</DropZoneText>\n <DropZoneFileSelector onChange={this.uploadFile} disabled={insertModalOpened} />\n <DropZoneText>{ACMS.i18n('media.drop_file')}</DropZoneText>\n </div>\n <input type=\"hidden\" name={`media_id_${id}[]`} value=\"\" />\n </div>\n )}\n {items.length > 0 && items.length < 2 && item !== undefined && (\n <div className=\"acms-admin-media-unit-preview-wrap\">\n <div className=\"acms-admin-media-unit-preview-overlay\" />\n <button\n type=\"button\"\n className=\"acms-admin-media-unit-preview-remove-btn\"\n onClick={() => this.removeMediaAt(0)}\n aria-label={ACMS.i18n('media.clear_button_label')}\n />\n <div className=\"acms-admin-media-unit-preview-edit-overlay\" />\n {(item.media_type === 'image' || item.media_type === 'svg') && (\n <img className=\"acms-admin-media-unit-preview\" src={`${item.media_thumbnail}`} alt=\"\" />\n )}\n {item.media_type === 'file' && (\n <div className=\"acms-admin-media-unit-file-icon-wrap\">\n <img className=\"acms-admin-media-unit-file-icon\" src={`${item.media_thumbnail}`} alt=\"\" />\n <p className=\"acms-admin-media-unit-file-caption\">{item.media_title}</p>\n </div>\n )}\n <button\n type=\"button\"\n className=\"acms-admin-media-edit-btn acms-admin-media-unit-preview-edit-btn\"\n onClick={() => this.openEditModal(item.media_id)}\n >\n {ACMS.i18n('media.edit')}\n </button>\n <input type=\"hidden\" name={`media_id_${id}[]`} value={item.media_id.toString()} />\n </div>\n )}\n </td>\n <td className=\"entryFormFileControl\">\n <table className=\"acms-admin-margin-bottom-mini\" style={{ width: '100%' }}>\n <tbody>\n <tr>\n <th>ID</th>\n <td>\n <div style={{ display: 'inline-block' }}>\n {item && item.media_id && (\n <span className=\"acms-admin-label acms-admin-label-default acms-admin-margin-right-mini\">\n {item.media_id}\n </span>\n )}\n </div>\n <button type=\"button\" className=\"acms-admin-btn-admin\" onClick={this.openInsertModal}>\n {ACMS.i18n('media.select_from_media')}\n </button>\n {active !== 'on' && <span style={{ color: 'red' }}>{ACMS.i18n('media.media_unit_use')}</span>}\n </td>\n </tr>\n {mediaSizes && mediaSizes.length !== 0 && (\n <tr>\n <th>\n <label htmlFor={`unit-media-size-${id}`}>{ACMS.i18n('media.size')}</label>\n </th>\n <td>\n <select\n defaultValue={mediaSizes.find((size) => size.selected)?.value}\n key={mediaSizes.find((size) => size.selected)?.value}\n name={`media_size_${id}[]`}\n id={`unit-media-size-${id}`}\n >\n {mediaSizes.map((mediaSize) => (\n <option value={mediaSize.value} key={mediaSize.label}>\n {mediaSize.label}\n </option>\n ))}\n </select>\n {item &&\n item.media_type === 'file' &&\n (item.media_pdf === 'yes' ||\n (item.media_ext && item.media_ext.toUpperCase() === 'PDF')) && (\n <div className=\"acms-admin-form-checkbox\" style={{ marginLeft: '10px' }}>\n <input type=\"hidden\" name={`media_use_icon_${id}[]`} value={useIcon} />\n <input\n type=\"checkbox\"\n value=\"yes\"\n id={`input-checkbox-media_use_icon_${id}_${lang}`}\n defaultChecked={usePdfIcon === 'yes'}\n onChange={(e) => {\n if (e.target.checked) {\n this.setState({\n useIcon: 'yes',\n });\n } else {\n this.setState({\n useIcon: 'no',\n });\n }\n }}\n />\n <label htmlFor={`input-checkbox-media_use_icon_${id}_${lang}`}>\n <i className=\"acms-admin-ico-checkbox\" />\n {ACMS.i18n('media.use_icon')}\n </label>\n </div>\n )}\n </td>\n </tr>\n )}\n {items.length < 2 && (\n <tr>\n <th>\n <label id={`unit-media-caption-label-${id}`} htmlFor={`unit-media-caption-${id}`}>\n {ACMS.i18n('media.caption')}\n </label>\n </th>\n <td>\n <input\n type=\"text\"\n name={`media_caption_${id}[]`}\n id={`unit-media-caption-${id}`}\n aria-labelledby={`unit-media-caption-label-${id}`}\n className=\"acms-admin-form-width-full\"\n defaultValue={caption}\n placeholder={item && item.media_caption ? `${item.media_caption}` : ''}\n />\n </td>\n </tr>\n )}\n {items.length < 2 && (\n <tr>\n <th>\n <label id={`unit-media-alt-text-label-${id}`} htmlFor={`unit-media-alt-text-${id}`}>\n {ACMS.i18n('media.alt')}\n </label>\n </th>\n <td>\n <AutoResizeTextarea\n name={`media_alt_${id}[]`}\n defaultValue={alt}\n id={`unit-media-alt-text-${id}`}\n aria-labelledby={`unit-media-alt-text-label-${id}`}\n className=\"acms-admin-form-width-full\"\n placeholder={item && item.media_alt ? `${item.media_alt}` : ''}\n maxRows={4}\n />\n </td>\n </tr>\n )}\n {items.length < 2 &&\n item !== undefined &&\n (item.media_type === 'image' || item.media_type === 'svg') && (\n <tr>\n <th>\n <label\n id={`input-text-media_link-label-${id}-${lang}`}\n htmlFor={`input-text-media_link_${id}_${lang}`}\n >\n {ACMS.i18n('media.url_link_to')}\n </label>\n </th>\n <td>\n <input\n type=\"text\"\n id={`input-text-media_link_${id}_${lang}`}\n aria-labelledby={`input-text-media_link-label-${id}-${lang}`}\n name={`media_link_${id}[]`}\n className=\"acms-admin-form-width-full\"\n placeholder={item.media_link || ''}\n defaultValue={link}\n />\n </td>\n </tr>\n )}\n {items.length < 2 &&\n item !== undefined &&\n (item.media_type === 'image' || item.media_type === 'svg') && (\n <tr>\n <th>\n <label htmlFor={`input-checkbox-media_enlarged_${id}_${lang}`}>\n {ACMS.i18n('media.image_link')}\n </label>\n </th>\n <td>\n <div className=\"acms-admin-form-checkbox\">\n <input type=\"hidden\" name={`media_enlarged_${id}[]`} value={noLarge} />\n <input\n type=\"checkbox\"\n value=\"no\"\n id={`input-checkbox-media_enlarged_${id}_${lang}`}\n defaultChecked={enlarged === 'true'}\n onChange={(e) => {\n if (e.target.checked) {\n this.setState({\n noLarge: 'no',\n });\n } else {\n this.setState({\n noLarge: 'yes',\n });\n }\n }}\n />\n <label htmlFor={`input-checkbox-media_enlarged_${id}_${lang}`}>\n <i className=\"acms-admin-ico-checkbox\" />\n {ACMS.i18n('media.no_image_link')}\n </label>\n </div>\n </td>\n </tr>\n )}\n {items.length < 2 &&\n primaryImageId !== 'no' &&\n item &&\n item.media_type === 'image' &&\n !newMedia && (\n <tr>\n <th>\n <label htmlFor={`input-radio-image_primary_image_${id}_${lang}`}>\n {ACMS.i18n('media.main_image')}\n </label>\n </th>\n <td>\n <div className=\"acms-admin-form-radio\">\n <input\n type=\"radio\"\n name=\"primary_image\"\n value={primaryImageId}\n id={`input-radio-image_primary_image_${id}_${lang}`}\n defaultChecked={primary === 'true'}\n />\n <label htmlFor={`input-radio-image_primary_image_${id}_${lang}`}>\n <i className=\"acms-admin-ico-radio\" />\n {ACMS.i18n('media.set_as_main_image')}\n </label>\n </div>\n </td>\n </tr>\n )}\n </tbody>\n </table>\n {!(items.length < 2 && item && (item.media_type === 'image' || item.media_type === 'svg')) && (\n <input type=\"hidden\" name={`media_enlarged_${id}[]`} value=\"no\" />\n )}\n </td>\n </tr>\n {items.length >= 2 && (\n <tr>\n <td colSpan={2}>\n <div className=\"acms-admin-media-unit-preview-group\">\n {items.map((item, index) => (\n <div\n className=\"acms-admin-media-unit-preview-wrap acms-admin-media-unit-preview-group-item\"\n key={item.media_id}\n >\n <div className=\"acms-admin-media-unit-preview-group-item-inner\">\n <div className=\"acms-admin-media-unit-preview-edit-overlay\" />\n {(item.media_type === 'image' || item.media_type === 'svg') && (\n <img\n className=\"acms-admin-media-unit-preview-group-img\"\n src={`${item.media_thumbnail}`}\n alt=\"\"\n />\n )}\n {item.media_type === 'file' && (\n <div className=\"acms-admin-media-unit-file-icon-wrap\">\n <img\n className=\"acms-admin-media-unit-file-icon\"\n src={`${item.media_thumbnail}`}\n alt=\"\"\n />\n <p className=\"acms-admin-media-unit-file-caption\">{item.media_title}</p>\n </div>\n )}\n <input type=\"hidden\" name={`media_id_${id}[]`} value={item.media_id.toString()} />\n </div>\n <div className=\"acms-admin-media-unit-preview-overlay\" />\n <button\n type=\"button\"\n className=\"acms-admin-media-unit-preview-remove-btn\"\n onClick={() => this.removeMediaAt(index)}\n aria-label={ACMS.i18n('media.clear_button_label')}\n />\n <button\n type=\"button\"\n className=\"acms-admin-media-edit-btn acms-admin-media-unit-preview-edit-btn\"\n onClick={() => this.openEditModal(item.media_id)}\n >\n {ACMS.i18n('media.edit')}\n </button>\n </div>\n ))}\n </div>\n </td>\n </tr>\n )}\n </tbody>\n </table>\n <MediaInsert\n isOpen={insertModalOpened}\n onInsert={this.onInsert}\n radioMode={multiUpload === 'false'}\n files={files}\n onClose={this.onClose}\n tab={modalType}\n filetype=\"all\"\n />\n {targetId != null && targetId > 0 && (\n <MediaUpdate\n isOpen={updateModalOpened}\n mid={targetId}\n onClose={this.onUpdateModalClose}\n onUpdate={this.onUpdateModalUpdate}\n />\n )}\n </DropZone>\n </div>\n );\n }\n}\n"],"mappings":"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","names":["files","item"]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// src/runtime.ts
|
|
2
|
+
var currentTransport = null;
|
|
3
|
+
var currentConfig = {};
|
|
4
|
+
var currentFillStore;
|
|
5
|
+
function configureMediaRuntime(transport, config = {}, fillStore) {
|
|
6
|
+
currentTransport = transport;
|
|
7
|
+
currentConfig = config;
|
|
8
|
+
currentFillStore = fillStore;
|
|
9
|
+
}
|
|
10
|
+
function getMediaTransport() {
|
|
11
|
+
if (!currentTransport) {
|
|
12
|
+
throw new Error(
|
|
13
|
+
"[@ablogcms/media] MediaTransport \u304C\u672A\u8A2D\u5B9A\u3067\u3059\u3002configureMediaRuntime() \u3092\u547C\u3073\u51FA\u3057\u3066\u304B\u3089\u5229\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002"
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
return currentTransport;
|
|
17
|
+
}
|
|
18
|
+
function getMediaConfig() {
|
|
19
|
+
return currentConfig;
|
|
20
|
+
}
|
|
21
|
+
function getMediaFillStore() {
|
|
22
|
+
return currentFillStore;
|
|
23
|
+
}
|
|
24
|
+
function resetMediaRuntimeForTesting() {
|
|
25
|
+
currentTransport = null;
|
|
26
|
+
currentConfig = {};
|
|
27
|
+
currentFillStore = void 0;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export {
|
|
31
|
+
configureMediaRuntime,
|
|
32
|
+
getMediaTransport,
|
|
33
|
+
getMediaConfig,
|
|
34
|
+
getMediaFillStore,
|
|
35
|
+
resetMediaRuntimeForTesting
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=chunk-3SYVRD3N.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/runtime.ts"],"sourcesContent":["import type { SlotFillStore } from '@ablogcms/components/slot-fill';\nimport type { MediaTransport } from './types/transport';\nimport type { MediaConfig } from './types/config';\n\n/**\n * `@ablogcms/media` の実行時依存(データ取得・設定値)を保持するレジストリ。\n *\n * このパッケージは webpack の単一バンドル内で複数箇所(管理画面のメディアライブラリ、\n * リッチエディタ/ブロックエディタのメディア挿入、バナーエディタ、ナビゲーションエディタ等)\n * から静的 import されるため、モジュールはバンドル内で単一インスタンスとして共有される\n * (webpack のモジュールキャッシュにより、動的 import で分かれる非同期チャンクからも\n * 同一インスタンスを参照する)。\n *\n * a-block cms コア側(`ablogcms/js/src/features/media/bootstrap.ts`)が\n * アプリ起動時に一度だけ `configureMediaRuntime()` を呼び、以降すべての呼び出し箇所は\n * `getMediaTransport()` / `getMediaConfig()` で読み出す。これは `ACMS.i18n` と同種の\n * 「起動時に一度だけ設定するアンビエントな実行契約」であり、React コンポーネントツリーや\n * redux-saga の外側(複数の独立した Provider/ストアにまたがる箇所)からも一様に参照できる\n * ようにするため、React Context ではなくこの形を採る。\n *\n * テストではモジュールをモックするか、テストごとに `configureMediaRuntime()` で\n * モック実装を差し替える。\n */\n\nlet currentTransport: MediaTransport | null = null;\nlet currentConfig: MediaConfig = {};\nlet currentFillStore: SlotFillStore | undefined;\n\n/**\n * `fillStore` は MediaModal を開く 8 経路(メディア管理 / カスタムフィールド / ブロックエディター\n * 画像・ファイル / リッチエディター / バナー / ナビゲーション / ユニット)を横断する `Slot` 差し込み口を\n * 提供するための注入。`@ablogcms/media` は `@ablogcms/plugins/core`(`getGlobalFillBridge()`)に\n * 直接依存しない設計のため、コア(`ablogcms/js/src/features/media/bootstrap.ts`)がここへ注入する。\n * 省略時は `SlotFillProvider` がローカルストアにフォールバックし、`Slot` が throw しない状態を保つ\n * (その場合 Fill はページ横断で共有されない)。\n */\nexport function configureMediaRuntime(\n transport: MediaTransport,\n config: MediaConfig = {},\n fillStore?: SlotFillStore\n): void {\n currentTransport = transport;\n currentConfig = config;\n currentFillStore = fillStore;\n}\n\nexport function getMediaTransport(): MediaTransport {\n if (!currentTransport) {\n throw new Error(\n '[@ablogcms/media] MediaTransport が未設定です。configureMediaRuntime() を呼び出してから利用してください。'\n );\n }\n return currentTransport;\n}\n\nexport function getMediaConfig(): MediaConfig {\n return currentConfig;\n}\n\n/** 未注入時は `undefined` を返す。`SlotFillProvider` の `store` prop はこれをそのまま受け取れる(省略時ローカルストアへフォールバック) */\nexport function getMediaFillStore(): SlotFillStore | undefined {\n return currentFillStore;\n}\n\n/**\n * テスト専用のリセットヘルパー。`configureMediaRuntime` した内容を次のテストへ持ち越さないために使う。\n */\nexport function resetMediaRuntimeForTesting(): void {\n currentTransport = null;\n currentConfig = {};\n currentFillStore = undefined;\n}\n"],"mappings":";AAwBA,IAAI,mBAA0C;AAC9C,IAAI,gBAA6B,CAAC;AAClC,IAAI;AAUG,SAAS,sBACd,WACA,SAAsB,CAAC,GACvB,WACM;AACN,qBAAmB;AACnB,kBAAgB;AAChB,qBAAmB;AACrB;AAEO,SAAS,oBAAoC;AAClD,MAAI,CAAC,kBAAkB;AACrB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,iBAA8B;AAC5C,SAAO;AACT;AAGO,SAAS,oBAA+C;AAC7D,SAAO;AACT;AAKO,SAAS,8BAAoC;AAClD,qBAAmB;AACnB,kBAAgB,CAAC;AACjB,qBAAmB;AACrB;","names":[]}
|