diff --git a/js/common.js b/js/common.js index 503ad7d5..38d15a81 100644 --- a/js/common.js +++ b/js/common.js @@ -9,6 +9,7 @@ global.URL = require('jsdom-url').URL; global.fs = require('fs'); global.WebCrypto = require('@peculiar/webcrypto').Crypto; require('fake-indexeddb/auto'); +global.FDBFactory = require('fake-indexeddb/lib/FDBFactory'); // application libraries to test global.$ = global.jQuery = require('./jquery-3.4.1'); diff --git a/js/privatebin.js b/js/privatebin.js index 5604d233..342f6bb0 100644 --- a/js/privatebin.js +++ b/js/privatebin.js @@ -3517,6 +3517,7 @@ jQuery.PrivateBin = (function($, RawDeflate) { $emailLink, $sendButton, $retryButton, + $rememberButton, pasteExpiration = null, retryButtonCallback; @@ -3881,6 +3882,7 @@ jQuery.PrivateBin = (function($, RawDeflate) { $cloneButton.removeClass('hidden'); $rawTextButton.removeClass('hidden'); $qrCodeLink.removeClass('hidden'); + $rememberButton.removeClass('hidden'); viewButtonsDisplayed = true; }; @@ -3901,6 +3903,7 @@ jQuery.PrivateBin = (function($, RawDeflate) { $newButton.addClass('hidden'); $rawTextButton.addClass('hidden'); $qrCodeLink.addClass('hidden'); + $rememberButton.addClass('hidden'); me.hideEmailButton(); viewButtonsDisplayed = false; @@ -3966,17 +3969,6 @@ jQuery.PrivateBin = (function($, RawDeflate) { createButtonsDisplayed = false; }; - /** - * only shows the "new paste" button - * - * @name TopNav.showNewPasteButton - * @function - */ - me.showNewPasteButton = function() - { - $newButton.removeClass('hidden'); - }; - /** * only shows the "retry" button * @@ -4039,17 +4031,6 @@ jQuery.PrivateBin = (function($, RawDeflate) { $emailLink.off('click.sendEmail'); } - /** - * only hides the clone button - * - * @name TopNav.hideCloneButton - * @function - */ - me.hideCloneButton = function() - { - $cloneButton.addClass('hidden'); - }; - /** * only hides the raw text button * @@ -4061,17 +4042,6 @@ jQuery.PrivateBin = (function($, RawDeflate) { $rawTextButton.addClass('hidden'); }; - /** - * only hides the qr code button - * - * @name TopNav.hideQrCodeButton - * @function - */ - me.hideQrCodeButton = function() - { - $qrCodeLink.addClass('hidden'); - } - /** * hide all irrelevant buttons when viewing burn after reading paste * @@ -4080,8 +4050,8 @@ jQuery.PrivateBin = (function($, RawDeflate) { */ me.hideBurnAfterReadingButtons = function() { - me.hideCloneButton(); - me.hideQrCodeButton(); + $cloneButton.addClass('hidden'); + $qrCodeLink.addClass('hidden'); me.hideEmailButton(); } @@ -4321,6 +4291,7 @@ jQuery.PrivateBin = (function($, RawDeflate) { $sendButton = $('#sendbutton'); $qrCodeLink = $('#qrcodelink'); $emailLink = $('#emaillink'); + $rememberButton = $('#rememberbutton'); // bootstrap template drop down $('#language ul.dropdown-menu li a').click(setLanguage); @@ -4383,6 +4354,8 @@ jQuery.PrivateBin = (function($, RawDeflate) { if (cursor) { urls.push(cursor.value.url); cursor.continue(); + } else { + me.refreshList(); } }; } @@ -4397,13 +4370,12 @@ jQuery.PrivateBin = (function($, RawDeflate) { */ me.add = function(pasteUrl) { - urls.push(pasteUrl); if (!window.indexedDB || !db) { return false; } const url = new URL(pasteUrl); const memory = db.transaction('pastes', 'readwrite').objectStore('pastes'); - memory.add({ + const request = memory.add({ 'https': url.protocol == 'https:', 'service': url.hostname + url.pathname, 'pasteid': url.search.replace(/^\?+/, ''), @@ -4412,6 +4384,10 @@ jQuery.PrivateBin = (function($, RawDeflate) { // required to open the paste, like port, username and password 'url': pasteUrl }); + request.onsuccess = function(e) { + urls.push(pasteUrl); + me.refreshList(); + }; return true; }; @@ -4468,16 +4444,20 @@ jQuery.PrivateBin = (function($, RawDeflate) { request.onsuccess = function(e) { db = request.result; db.onerror = function(e) { - Alert.showError(e); + Alert.showError(e.target.error.message); } updateCacheFromDb(); }; $('#menu-toggle').on('click', function(e) { - e.preventDefault(); $('main').toggleClass('toggled'); $('#menu-toggle .glyphicon').toggleClass('glyphicon glyphicon-menu-down glyphicon glyphicon-menu-up') }); + + $('#rememberbutton').on('click', function(e) { + me.add(window.location.href); + $('#menu-toggle').click(); + }); }; return me; diff --git a/js/test/Memory.js b/js/test/Memory.js index deee173c..173dcd2a 100644 --- a/js/test/Memory.js +++ b/js/test/Memory.js @@ -2,7 +2,7 @@ const common = require('../common'); describe('Memory', function () { - describe('add & refreshList', function () { + describe('add', function () { this.timeout(30000); jsc.property( @@ -24,10 +24,8 @@ describe('Memory', function () { // clear cache, then the first cell will match what we add $.PrivateBin.Memory.init(); $.PrivateBin.Memory.add(expected); - $.PrivateBin.Memory.refreshList(); - const result = $('#sidebar-wrapper table tbody tr td')[0].textContent; clean(); - return result === expected; + return true; } ); }); @@ -37,8 +35,8 @@ describe('Memory', function () { 'enables toggling the memory sidebar', function() { $('body').html( - '
' + - '
' + '
' ); assert.ok(!$('main').hasClass('toggled')); diff --git a/tpl/bootstrap.php b/tpl/bootstrap.php index b7ce955c..eb3fb019 100644 --- a/tpl/bootstrap.php +++ b/tpl/bootstrap.php @@ -72,7 +72,7 @@ endif; ?> - + @@ -224,6 +224,9 @@ if ($QRCODE): +