1 import {showLoading} from '../services/dom.ts';
2 import {Component} from './component';
4 export class Attachments extends Component {
7 this.container = this.$el;
8 this.pageId = this.$opts.pageId;
9 this.editContainer = this.$refs.editContainer;
10 this.listContainer = this.$refs.listContainer;
11 this.linksContainer = this.$refs.linksContainer;
12 this.listPanel = this.$refs.listPanel;
13 this.attachLinkButton = this.$refs.attachLinkButton;
15 this.setupListeners();
19 const reloadListBound = this.reloadList.bind(this);
20 this.container.addEventListener('dropzone-upload-success', reloadListBound);
21 this.container.addEventListener('ajax-form-success', reloadListBound);
23 this.container.addEventListener('sortable-list-sort', event => {
24 this.updateOrder(event.detail.ids);
27 this.container.addEventListener('event-emit-select-edit', event => {
28 this.startEdit(event.detail.id);
31 this.container.addEventListener('event-emit-select-edit-back', () => {
35 this.container.addEventListener('event-emit-select-insert', event => {
36 const insertContent = event.target.closest('[data-drag-content]').getAttribute('data-drag-content');
37 const contentTypes = JSON.parse(insertContent);
38 window.$events.emit('editor::insert', {
39 html: contentTypes['text/html'],
40 markdown: contentTypes['text/plain'],
44 this.attachLinkButton.addEventListener('click', () => {
45 this.showSection('links');
49 showSection(section) {
51 links: this.linksContainer,
52 edit: this.editContainer,
53 list: this.listContainer,
56 for (const [name, elem] of Object.entries(sectionMap)) {
57 elem.toggleAttribute('hidden', name !== section);
63 window.$http.get(`/attachments/get/page/${this.pageId}`).then(resp => {
64 this.listPanel.innerHTML = resp.data;
65 window.$components.init(this.listPanel);
69 updateOrder(idOrder) {
70 window.$http.put(`/attachments/sort/page/${this.pageId}`, {order: idOrder}).then(resp => {
71 window.$events.emit('success', resp.data.message);
76 this.showSection('edit');
78 showLoading(this.editContainer);
79 const resp = await window.$http.get(`/attachments/edit/${id}`);
80 this.editContainer.innerHTML = resp.data;
81 window.$components.init(this.editContainer);
85 this.showSection('list');