소스 검색

Merge pull request #1590 from Ribas160/adding_attachments_from_clipboard

Adding attachments from clipboard
El RIDO 1 년 전
부모
커밋
03e0c81fbf
4개의 변경된 파일41개의 추가작업 그리고 11개의 파일을 삭제
  1. 1 0
      CHANGELOG.md
  2. 26 10
      js/privatebin.js
  3. 13 0
      js/test/Helper.js
  4. 1 1
      lib/Configuration.php

+ 1 - 0
CHANGELOG.md

@@ -3,6 +3,7 @@
 ## 2.0.0 (not yet released)
 * CHANGED: Remove page template (#265)
 * FIXED: Name mismatches in attached files (#1584)
+* FIXED: Unable to paste attachments from clipboard (#1589)
 
 ## 1.7.8 (2025-06-30)
 * FIXED: Duplicate attachment for every comment (#1577)

+ 26 - 10
js/privatebin.js

@@ -628,6 +628,17 @@ jQuery.PrivateBin = (function($, RawDeflate) {
             baseUri = null;
         };
 
+        /**
+         * check if bootstrap5 object detected
+         *
+         * @name Helper.isBootstrap5
+         * @returns {Boolean}
+         */
+        me.isBootstrap5 = function ()
+        {
+            return typeof bootstrap !== 'undefined';
+        };
+
         return me;
     })();
 
@@ -3421,16 +3432,17 @@ jQuery.PrivateBin = (function($, RawDeflate) {
         function addClipboardEventHandler() {
             $(document).on('paste', function (event) {
                 const items = (event.clipboardData || event.originalEvent.clipboardData).items;
-                const lastItem = items[items.length - 1];
-                if (lastItem.kind === 'file') {
-                    if (TopNav.isAttachmentReadonly()) {
-                        event.stopPropagation();
-                        event.preventDefault();
-                        return false;
-                    } else {
-                        readFileData(lastItem.getAsFile());
-                    }
+                const files = [...items]
+                                    .filter(item => item.kind === 'file')
+                                    .map(item => item.getAsFile());
+
+                if (TopNav.isAttachmentReadonly()) {
+                    event.stopPropagation();
+                    event.preventDefault();
+                    return false;
                 }
+
+                readFileData(files);
             });
         }
 
@@ -4631,7 +4643,11 @@ jQuery.PrivateBin = (function($, RawDeflate) {
             // visually indicate file uploaded
             const $attachDropdownToggle = $attach.children('.dropdown-toggle');
             if ($attachDropdownToggle.attr('aria-expanded') === 'false') {
-                $attachDropdownToggle.click();
+                if (Helper.isBootstrap5()) {
+                    new bootstrap.Dropdown($attachDropdownToggle).toggle();
+                } else {
+                    $attachDropdownToggle.click();
+                }
             }
             $fileWrap.addClass('highlight');
             setTimeout(function () {

+ 13 - 0
js/test/Helper.js

@@ -316,5 +316,18 @@ describe('Helper', function () {
             return $.PrivateBin.Helper.formatBytes(1234567) === '1.18 MiB';
         });
     });
+
+
+    describe('isBootstrap5', function () {
+        jsc.property('Bootstrap 5 has been detected', function () {
+            global.bootstrap = {};
+            return $.PrivateBin.Helper.isBootstrap5() === true;
+        });
+
+        jsc.property('Bootstrap 5 has not been detected', function () {
+            delete global.bootstrap;
+            return $.PrivateBin.Helper.isBootstrap5() === false;
+        });
+    });
 });
 

+ 1 - 1
lib/Configuration.php

@@ -118,7 +118,7 @@ class Configuration
             'js/kjua-0.9.0.js'       => 'sha512-CVn7af+vTMBd9RjoS4QM5fpLFEOtBCoB0zPtaqIDC7sF4F8qgUSRFQQpIyEDGsr6yrjbuOLzdf20tkHHmpaqwQ==',
             'js/legacy.js'           => 'sha512-UxW/TOZKon83n6dk/09GsYKIyeO5LeBHokxyIq+r7KFS5KMBeIB/EM7NrkVYIezwZBaovnyNtY2d9tKFicRlXg==',
             'js/prettify.js'         => 'sha512-puO0Ogy++IoA2Pb9IjSxV1n4+kQkKXYAEUtVzfZpQepyDPyXk8hokiYDS7ybMogYlyyEIwMLpZqVhCkARQWLMg==',
-            'js/privatebin.js'       => 'sha512-lP3oQM8eZ6HNCUUZC2HvmNTO3RRNw7WPCCWbVVr0e9DHvgprYr6tYtDYzmWdpD6rzjHOgekHhFMO8LIO9ufyug==',
+            'js/privatebin.js'       => 'sha512-9X1Ns+w/WPlWde118Mbl1UFDPsFmBcXK2zr6ny7oDOuZMVP1hFCPzXjKbC+59xDQW0Q+NmyT4NC6/5B6UzkkDw==',
             'js/purify-3.2.6.js'     => 'sha512-zqwL4OoBLFx89QPewkz4Lz5CSA2ktU+f31fuECkF0iK3Id5qd3Zpq5dMby8KwHjIEpsUgOqwF58cnmcaNem0EA==',
             'js/rawinflate-0.3.js'   => 'sha512-g8uelGgJW9A/Z1tB6Izxab++oj5kdD7B4qC7DHwZkB6DGMXKyzx7v5mvap2HXueI2IIn08YlRYM56jwWdm2ucQ==',
             'js/showdown-2.1.0.js'   => 'sha512-WYXZgkTR0u/Y9SVIA4nTTOih0kXMEd8RRV6MLFdL6YU8ymhR528NLlYQt1nlJQbYz4EW+ZsS0fx1awhiQJme1Q==',