mirror of
https://github.com/PrivateBin/PrivateBin.git
synced 2025-05-02 06:26:16 -04:00
Enhance URL shortener integration, clear address bar when create new paste from existing paste
This commit is contained in:
parent
c66bff9d1b
commit
cd5ede5670
3 changed files with 56 additions and 5 deletions
|
@ -1711,8 +1711,58 @@ jQuery.PrivateBin = (function($, RawDeflate) {
|
|||
*/
|
||||
function sendToShortener()
|
||||
{
|
||||
window.location.href = $shortenButton.data('shortener') +
|
||||
encodeURIComponent($pasteUrl.attr('href'));
|
||||
if ($shortenButton.hasClass('buttondisabled')) {
|
||||
return;
|
||||
}
|
||||
$.ajax({
|
||||
type: 'GET',
|
||||
url: `${$shortenButton.data('shortener')}${encodeURIComponent($pasteUrl.attr('href'))}`,
|
||||
headers: {'Accept': 'text/html, application/xhtml+xml, application/xml, application/json'},
|
||||
processData: false,
|
||||
timeout: 10000,
|
||||
xhrFields: {
|
||||
withCredentials: false
|
||||
},
|
||||
success: function(response) {
|
||||
let responseString = response;
|
||||
if (typeof responseString === 'object') {
|
||||
responseString = JSON.stringify(responseString);
|
||||
}
|
||||
if (typeof responseString === 'string' && responseString.length > 0) {
|
||||
const shortUrlMatcher = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/g;
|
||||
const shortUrl = responseString.match(shortUrlMatcher).sort(function(a, b) {
|
||||
return a.length - b.length;
|
||||
})[0];
|
||||
if (typeof shortUrl === 'string' && shortUrl.length > 0) {
|
||||
$('#pastelink').html(
|
||||
I18n._(
|
||||
'Your paste is <a id="pasteurl" href="%s">%s</a> <span id="copyhint">(Hit [Ctrl]+[c] to copy)</span>',
|
||||
shortUrl, shortUrl
|
||||
)
|
||||
);
|
||||
// we disable the button to avoid calling shortener again
|
||||
$shortenButton.addClass('buttondisabled');
|
||||
// save newly created element
|
||||
$pasteUrl = $('#pasteurl');
|
||||
// we pre-select the link so that the user only has to [Ctrl]+[c] the link
|
||||
Helper.selectText($pasteUrl[0]);
|
||||
return;
|
||||
}
|
||||
}
|
||||
Alert.showError(
|
||||
I18n._('Cannot parse response from URL shortener.')
|
||||
);
|
||||
}
|
||||
})
|
||||
.fail(function(data, textStatus, errorThrown) {
|
||||
console.error(textStatus, errorThrown);
|
||||
// we don't know why it failed, could be CORS of the external server not setup properly, in which case we follow old behavior to open it in new tab
|
||||
window.open(
|
||||
`${$shortenButton.data('shortener')}${encodeURIComponent($pasteUrl.attr('href'))}`,
|
||||
'_blank',
|
||||
'noopener, noreferrer'
|
||||
)
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1754,7 +1804,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
|
|||
// and add click event
|
||||
$pasteUrl.click(pasteLinkClick);
|
||||
|
||||
// shorten button
|
||||
// delete link
|
||||
$('#deletelink').html('<a href="' + deleteUrl + '">' + I18n._('Delete data') + '</a>');
|
||||
|
||||
// show result
|
||||
|
@ -4688,6 +4738,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
|
|||
|
||||
TopNav.showCreateButtons();
|
||||
Alert.hideLoading();
|
||||
history.pushState({type: 'create'}, document.title, Helper.baseUri());
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue