]> BookStack Code Mirror - bookstack/commitdiff
Added button for inserting attachment link to a page
authorDan Brown <redacted>
Sun, 13 Sep 2020 17:58:05 +0000 (18:58 +0100)
committerDan Brown <redacted>
Sun, 13 Sep 2020 17:58:05 +0000 (18:58 +0100)
For #1460

resources/js/components/attachments.js
resources/js/components/markdown-editor.js
resources/js/components/wysiwyg-editor.js
resources/lang/en/entities.php
resources/views/attachments/manager-list.blade.php

index 51e54054ebabba076089798a3c7591088ac18caa..6dcfe9f128cf39a8e7a2d0586b32b9320613c5f8 100644 (file)
@@ -33,6 +33,15 @@ class Attachments {
         this.container.addEventListener('event-emit-select-edit-back', event => {
             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'],
+            });
+        });
     }
 
     reloadList() {
index 5ffe4ef4d32b18d6e352831bd0fd3b10cb41ac77..c371a983991dfa333429b824122d0758628a4599 100644 (file)
@@ -563,6 +563,12 @@ class MarkdownEditor {
             this.cm.setCursor(cursorPos.line + prependLineCount, cursorPos.ch);
         });
 
+        // Insert editor content at the current location
+        window.$events.listen('editor::insert', (eventContent) => {
+            const markdown = getContentToInsert(eventContent);
+            this.cm.replaceSelection(markdown);
+        });
+
         // Focus on editor
         window.$events.listen('editor::focus', () => {
             this.cm.focus();
index 05897c250dd52eb373e510f0bbad907ea1b39024..a32e78161649e6337ee45bb6d9ab76f8bbf5fc9c 100644 (file)
@@ -401,6 +401,11 @@ function listenForBookStackEditorEvents(editor) {
         editor.setContent(content);
     });
 
+    // Insert editor content at the current location
+    window.$events.listen('editor::insert', ({html}) => {
+        editor.insertContent(html);
+    });
+
     // Focus on the editor
     window.$events.listen('editor::focus', () => {
         editor.focus();
index ac17a10d4e9cd78a66e7f0023273989031930422..f64867a56c31736a1730d58c51f3fe0c088364d1 100644 (file)
@@ -265,6 +265,7 @@ return [
     'attachments_link_url' => 'Link to file',
     'attachments_link_url_hint' => 'Url of site or file',
     'attach' => 'Attach',
+    'attachments_insert_link' => 'Add Attachment Link to Page',
     'attachments_edit_file' => 'Edit File',
     'attachments_edit_file_name' => 'File Name',
     'attachments_edit_drop_upload' => 'Drop files or click here to upload and overwrite',
index 30307ff4122515bf0b7dba1ab822b20a2f71fd40..313faa5755f34e9aebda614f47f563a762911956 100644 (file)
                 <a href="{{ $attachment->getUrl() }}" target="_blank">{{ $attachment->name }}</a>
             </div>
             <div class="flex-fill justify-flex-end">
+                <button component="event-emit-select"
+                        option:event-emit-select:name="insert"
+                        type="button"
+                        title="{{ trans('entities.attachments_insert_link') }}"
+                        class="drag-card-action text-center text-primary">@icon('link')                 </button>
                 <button component="event-emit-select"
                         option:event-emit-select:name="edit"
                         option:event-emit-select:id="{{ $attachment->id }}"
                         type="button"
+                        title="{{ trans('common.edit') }}"
                         class="drag-card-action text-center text-primary">@icon('edit')</button>
                 <div component="dropdown" class="flex-fill relative">
-                    <button refs="dropdown@toggle" type="button" class="drag-card-action text-center text-neg">@icon('close')</button>
+                    <button refs="dropdown@toggle"
+                            type="button"
+                            title="{{ trans('common.delete') }}"
+                            class="drag-card-action text-center text-neg">@icon('close')</button>
                     <div refs="dropdown@menu" class="dropdown-menu">
                         <p class="text-neg small px-m mb-xs">{{ trans('entities.attachments_delete') }}</p>
                         <button refs="ajax-delete-row@delete" type="button" class="text-primary small delete">{{ trans('common.confirm') }}</button>