diff --git a/js/privatebin.js b/js/privatebin.js
index 850dfc93..4887e8c4 100644
--- a/js/privatebin.js
+++ b/js/privatebin.js
@@ -1121,6 +1121,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
deleteUrl = helper.scriptLocation() + '?pasteid=' + data.id + '&deletetoken=' + data.deletetoken;
controller.showStatus('');
controller.errorMessage.addClass('hidden');
+ // show new URL in browser bar
history.pushState({type: 'newpaste'}, document.title, url);
$('#pastelink').html(
@@ -1129,6 +1130,11 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
url, url
) + controller.shortenUrl(url)
);
+ // save newly created element
+ controller.pasteUrl = $('#pasteurl');
+ // and add click event
+ controller.pasteUrl.click($.proxy(controller.pasteLinkClick, controller));
+
var shortenButton = $('#shortenbutton');
if (shortenButton) {
shortenButton.click($.proxy(controller.sendToShortener, controller));
@@ -1489,6 +1495,25 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
}
},
+ /**
+ * Forces opening the paste if the link does not do this automatically.
+ *
+ * This is necessary as browsers will not reload the page when it is
+ * already loaded (which is fake as it is set via history.pushState()).
+ *
+ * @name controller.pasteLinkClick
+ * @function
+ * @param {Event} event
+ */
+ pasteLinkClick: function(event)
+ {
+ // check if location is (already) correctly shown in URL bar
+ if (window.location.href === this.pasteUrl.attr('href')) {
+ // if so we need to load link by reloading the site
+ location.reload(true);
+ }
+ },
+
/**
* create a new paste
*
@@ -1689,6 +1714,8 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
this.passwordForm = $('#passwordform');
this.passwordDecrypt = $('#passworddecrypt');
this.pasteResult = $('#pasteresult');
+ // this.pasteUrl is saved in sendDataContinue() if/after it is
+ // actually created
this.prettyMessage = $('#prettymessage');
this.prettyPrint = $('#prettyprint');
this.preview = $('#preview');
diff --git a/js/test.js b/js/test.js
index 5e4d3c39..b2d5f005 100644
--- a/js/test.js
+++ b/js/test.js
@@ -91,14 +91,14 @@ describe('helper', function () {
jsc.array(jsc.elements(queryString)),
'string',
function (schema, address, query, fragment) {
- var query = query.join(''),
+ var queryString = query.join(''),
clean = jsdom('', {
url: schema.join('') + '://' + address.join('') +
- '/?' + query + '#' + fragment
+ '/?' + queryString + '#' + fragment
}),
result = $.PrivateBin.helper.pasteId();
clean();
- return query === result;
+ return queryString === result;
}
);
});
@@ -111,14 +111,14 @@ describe('helper', function () {
jsc.array(jsc.elements(queryString)),
jsc.array(jsc.elements(base64String)),
function (schema, address, query, fragment) {
- var fragment = fragment.join(''),
+ var fragmentString = fragment.join(''),
clean = jsdom('', {
url: schema.join('') + '://' + address.join('') +
- '/?' + query.join('') + '#' + fragment
+ '/?' + query.join('') + '#' + fragmentString
}),
result = $.PrivateBin.helper.pageKey();
clean();
- return fragment === result;
+ return fragmentString === result;
}
);
jsc.property(
@@ -129,14 +129,14 @@ describe('helper', function () {
jsc.array(jsc.elements(base64String)),
jsc.array(jsc.elements(queryString)),
function (schema, address, query, fragment, trail) {
- var fragment = fragment.join(''),
+ var fragmentString = fragment.join(''),
clean = jsdom('', {
url: schema.join('') + '://' + address.join('') + '/?' +
- query.join('') + '#' + fragment + '&' + trail.join('')
+ query.join('') + '#' + fragmentString + '&' + trail.join('')
}),
result = $.PrivateBin.helper.pageKey();
clean();
- return fragment === result;
+ return fragmentString === result;
}
);
});
@@ -156,4 +156,3 @@ describe('helper', function () {
);
});
});
-
diff --git a/tpl/bootstrap.php b/tpl/bootstrap.php
index b4572219..cf418712 100644
--- a/tpl/bootstrap.php
+++ b/tpl/bootstrap.php
@@ -69,7 +69,7 @@ if ($MARKDOWN):
-
+
diff --git a/tpl/page.php b/tpl/page.php
index 491be5da..042bc42a 100644
--- a/tpl/page.php
+++ b/tpl/page.php
@@ -47,7 +47,7 @@ if ($MARKDOWN):
-
+