]> BookStack Code Mirror - bookstack/commitdiff
Merge branch 'page_link_selector'
authorDan Brown <redacted>
Sat, 3 Sep 2016 09:40:27 +0000 (10:40 +0100)
committerDan Brown <redacted>
Sat, 3 Sep 2016 09:40:27 +0000 (10:40 +0100)
1  2 
resources/assets/js/controllers.js
resources/assets/js/directives.js
resources/assets/js/pages/page-form.js
resources/assets/sass/styles.scss
resources/views/pages/form.blade.php

Simple merge
index 286854832d75a2730a85c49b94976596ad4e7e7f,4e1bb0dfd368737007c89fc5b6cce34dd92232ab..1271b31123dc937ddfc07c220367b204799dc7fc
@@@ -370,83 -376,26 +376,103 @@@ module.exports = function (ngApp, event
                      });
                  });
  
+                 function showLinkSelector() {
+                     window.showEntityLinkSelector((entity) => {
+                         let selectionStart = currentCaretPos;
+                         let selectionEnd = input[0].selectionEnd;
+                         let textSelected = (selectionEnd !== selectionStart);
+                         let currentContent = input.val();
+                         if (textSelected) {
+                             let selectedText = currentContent.substring(selectionStart, selectionEnd);
+                             let linkText = `[${selectedText}](${entity.link})`;
+                             input.val(currentContent.substring(0, selectionStart) + linkText + currentContent.substring(selectionEnd));
+                         } else {
+                             let linkText = ` [${entity.name}](${entity.link}) `;
+                             input.val(currentContent.substring(0, selectionStart) + linkText + currentContent.substring(selectionStart))
+                         }
+                         input.change();
+                     });
+                 }
+                 insertEntityLink.click(showLinkSelector);
 +                // Upload and insert image on paste
 +                function editorPaste(e) {
 +                    e = e.originalEvent;
 +                    if (!e.clipboardData) return
 +                    var items = e.clipboardData.items;
 +                    if (!items) return;
 +                    for (var i = 0; i < items.length; i++) {
 +                        uploadImage(items[i].getAsFile());
 +                    }
 +                }
 +
 +                input.on('paste', editorPaste);
 +
 +                // Handle image drop, Uploads images to BookStack.
 +                function handleImageDrop(event) {
 +                    event.stopPropagation();
 +                    event.preventDefault();
 +                    let files = event.originalEvent.dataTransfer.files;
 +                    for (let i = 0; i < files.length; i++) {
 +                        uploadImage(files[i]);
 +                    }
 +                }
 +
 +                input.on('drop', handleImageDrop);
 +
 +                // Handle image upload and add image into markdown content
 +                function uploadImage(file) {
 +                    if (file.type.indexOf('image') !== 0) return;
 +                    var formData = new FormData();
 +                    var ext = 'png';
 +                    var xhr = new XMLHttpRequest();
 +
 +                    if (file.name) {
 +                        var fileNameMatches = file.name.match(/\.(.+)$/);
 +                        if (fileNameMatches) {
 +                            ext = fileNameMatches[1];
 +                        }
 +                    }
 +
 +                    // Insert image into markdown
 +                    let id = "image-" + Math.random().toString(16).slice(2);
 +                    let selectStart = input[0].selectionStart;
 +                    let selectEnd = input[0].selectionEnd;
 +                    let content = input[0].value;
 +                    let selectText = content.substring(selectStart, selectEnd);
 +                    let placeholderImage = `/loading.gif#upload${id}`;
 +                    let innerContent = ((selectEnd > selectStart) ? `![${selectText}]` : '![]') + `(${placeholderImage})`;
 +                    input[0].value = content.substring(0, selectStart) +  innerContent + content.substring(selectEnd);
 +
 +                    input.focus();
 +                    input[0].selectionStart = selectStart;
 +                    input[0].selectionEnd = selectStart;
 +
 +                    let remoteFilename = "image-" + Date.now() + "." + ext;
 +                    formData.append('file', file, remoteFilename);
 +                    formData.append('_token', document.querySelector('meta[name="token"]').getAttribute('content'));
 +
 +                    xhr.open('POST', window.baseUrl('/images/gallery/upload'));
 +                    xhr.onload = function () {
 +                        let selectStart = input[0].selectionStart;
 +                        if (xhr.status === 200 || xhr.status === 201) {
 +                            var result = JSON.parse(xhr.responseText);
 +                            input[0].value = input[0].value.replace(placeholderImage, result.url);
 +                            input.change();
 +                        } else {
 +                            console.log('An error occurred uploading the image');
 +                            console.log(xhr.responseText);
 +                            input[0].value = input[0].value.replace(innerContent, '');
 +                            input.change();
 +                        }
 +                        input.focus();
 +                        input[0].selectionStart = selectStart;
 +                        input[0].selectionEnd = selectStart;
 +                    };
 +                    xhr.send(formData);
 +                }
 +
              }
          }
      }]);
Simple merge
Simple merge
Morty Proxy This is a proxified and sanitized view of the page, visit original site.