mirror of
				https://github.com/BookStackApp/BookStack.git
				synced 2025-10-31 03:50:27 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			89 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import {showLoading} from '../services/dom.ts';
 | |
| import {Component} from './component';
 | |
| 
 | |
| export class Attachments extends Component {
 | |
| 
 | |
|     setup() {
 | |
|         this.container = this.$el;
 | |
|         this.pageId = this.$opts.pageId;
 | |
|         this.editContainer = this.$refs.editContainer;
 | |
|         this.listContainer = this.$refs.listContainer;
 | |
|         this.linksContainer = this.$refs.linksContainer;
 | |
|         this.listPanel = this.$refs.listPanel;
 | |
|         this.attachLinkButton = this.$refs.attachLinkButton;
 | |
| 
 | |
|         this.setupListeners();
 | |
|     }
 | |
| 
 | |
|     setupListeners() {
 | |
|         const reloadListBound = this.reloadList.bind(this);
 | |
|         this.container.addEventListener('dropzone-upload-success', reloadListBound);
 | |
|         this.container.addEventListener('ajax-form-success', reloadListBound);
 | |
| 
 | |
|         this.container.addEventListener('sortable-list-sort', event => {
 | |
|             this.updateOrder(event.detail.ids);
 | |
|         });
 | |
| 
 | |
|         this.container.addEventListener('event-emit-select-edit', event => {
 | |
|             this.startEdit(event.detail.id);
 | |
|         });
 | |
| 
 | |
|         this.container.addEventListener('event-emit-select-edit-back', () => {
 | |
|             this.stopEdit();
 | |
|         });
 | |
| 
 | |
|         this.container.addEventListener('event-emit-select-insert', event => {
 | |
|             const insertContent = event.target.closest('[data-drag-content]').getAttribute('data-drag-content');
 | |
|             const contentTypes = JSON.parse(insertContent);
 | |
|             window.$events.emit('editor::insert', {
 | |
|                 html: contentTypes['text/html'],
 | |
|                 markdown: contentTypes['text/plain'],
 | |
|             });
 | |
|         });
 | |
| 
 | |
|         this.attachLinkButton.addEventListener('click', () => {
 | |
|             this.showSection('links');
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     showSection(section) {
 | |
|         const sectionMap = {
 | |
|             links: this.linksContainer,
 | |
|             edit: this.editContainer,
 | |
|             list: this.listContainer,
 | |
|         };
 | |
| 
 | |
|         for (const [name, elem] of Object.entries(sectionMap)) {
 | |
|             elem.toggleAttribute('hidden', name !== section);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     reloadList() {
 | |
|         this.stopEdit();
 | |
|         window.$http.get(`/attachments/get/page/${this.pageId}`).then(resp => {
 | |
|             this.listPanel.innerHTML = resp.data;
 | |
|             window.$components.init(this.listPanel);
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     updateOrder(idOrder) {
 | |
|         window.$http.put(`/attachments/sort/page/${this.pageId}`, {order: idOrder}).then(resp => {
 | |
|             window.$events.emit('success', resp.data.message);
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     async startEdit(id) {
 | |
|         this.showSection('edit');
 | |
| 
 | |
|         showLoading(this.editContainer);
 | |
|         const resp = await window.$http.get(`/attachments/edit/${id}`);
 | |
|         this.editContainer.innerHTML = resp.data;
 | |
|         window.$components.init(this.editContainer);
 | |
|     }
 | |
| 
 | |
|     stopEdit() {
 | |
|         this.showSection('list');
 | |
|     }
 | |
| 
 | |
| }
 |