nextcloud/apps/bookmarks/js/bookmarks.js

184 lines
5.2 KiB
JavaScript
Raw Normal View History

2011-08-16 00:05:07 +04:00
var bookmarks_page = 0;
var bookmarks_loading = false;
2011-08-25 14:55:13 +04:00
var bookmarks_sorting = 'bookmarks_sorting_recent';
2012-02-23 02:22:17 +04:00
$(document).ready(function() {
2011-09-13 15:08:11 +04:00
$('#bookmark_add_submit').click(addOrEditBookmark);
$(window).resize(function () {
fillWindow($('.bookmarks_list'));
});
$(window).resize();
2012-03-24 22:54:54 +04:00
$('.bookmarks_list').scroll(updateOnBottom).empty().width($('#content').width());
2011-08-16 00:05:07 +04:00
getBookmarks();
});
function getBookmarks() {
if(bookmarks_loading) {
//have patience :)
return;
}
2011-08-25 14:55:13 +04:00
2011-08-16 00:05:07 +04:00
$.ajax({
url: 'ajax/updateList.php',
2011-08-25 14:55:13 +04:00
data: 'tag=' + encodeURI($('#bookmarkFilterTag').val()) + '&page=' + bookmarks_page + '&sort=' + bookmarks_sorting,
2011-08-16 00:05:07 +04:00
success: function(bookmarks){
if (bookmarks.data.length) {
bookmarks_page += 1;
}
2011-08-16 00:05:07 +04:00
$('.bookmark_link').unbind('click', recordClick);
$('.bookmark_delete').unbind('click', delBookmark);
2011-09-13 15:08:11 +04:00
$('.bookmark_edit').unbind('click', showBookmark);
2011-08-16 00:05:07 +04:00
for(var i in bookmarks.data) {
updateBookmarksList(bookmarks.data[i]);
$("#firstrun").hide();
2011-08-16 00:05:07 +04:00
}
2012-02-23 02:58:38 +04:00
if($('.bookmarks_list').is(':empty')) {
$("#firstrun").show();
}
2011-08-16 00:05:07 +04:00
$('.bookmark_link').click(recordClick);
$('.bookmark_delete').click(delBookmark);
2011-09-13 15:08:11 +04:00
$('.bookmark_edit').click(showBookmark);
2011-08-16 00:05:07 +04:00
bookmarks_loading = false;
if (bookmarks.data.length) {
updateOnBottom()
}
2011-08-16 00:05:07 +04:00
}
});
}
2011-09-13 15:08:11 +04:00
// function addBookmark() {
// Instead of creating editBookmark() function, Converted the one above to
// addOrEditBookmark() to make .js file more compact.
function addOrEditBookmark(event) {
var id = $('#bookmark_add_id').val();
var url = encodeEntities($('#bookmark_add_url').val());
var title = encodeEntities($('#bookmark_add_title').val());
var tags = encodeEntities($('#bookmark_add_tags').val());
$("#firstrun").hide();
2011-09-13 15:08:11 +04:00
if (id == 0) {
$.ajax({
url: 'ajax/addBookmark.php',
data: 'url=' + encodeURI(url) + '&title=' + encodeURI(title) + '&tags=' + encodeURI(tags),
success: function(response){
2012-02-23 02:22:17 +04:00
$('.bookmarks_input').val('');
2012-02-22 19:04:17 +04:00
$('.bookmarks_list').empty();
bookmarks_page = 0;
getBookmarks();
2011-09-13 15:08:11 +04:00
}
});
}
else {
$.ajax({
url: 'ajax/editBookmark.php',
data: 'id=' + id + '&url=' + encodeURI(url) + '&title=' + encodeURI(title) + '&tags=' + encodeURI(tags),
2011-09-13 15:08:11 +04:00
success: function(){
2012-02-23 02:22:17 +04:00
$('.bookmarks_input').val('');
$('#bookmark_add_id').val('0');
2012-02-22 19:04:17 +04:00
$('.bookmarks_list').empty();
bookmarks_page = 0;
getBookmarks();
2011-09-13 15:08:11 +04:00
}
});
}
2011-08-16 00:05:07 +04:00
}
function delBookmark(event) {
var record = $(this).parent().parent();
2011-08-16 00:05:07 +04:00
$.ajax({
url: 'ajax/delBookmark.php',
data: 'url=' + encodeURI($(this).parent().parent().children('.bookmark_url:first').text()),
success: function(data){
record.remove();
if($('.bookmarks_list').is(':empty')) {
$("#firstrun").show();
}
}
2011-08-16 00:05:07 +04:00
});
}
2011-09-13 15:08:11 +04:00
function showBookmark(event) {
var record = $(this).parent().parent();
$('#bookmark_add_id').val(record.attr('data-id'));
$('#bookmark_add_url').val(record.children('.bookmark_url:first').text());
$('#bookmark_add_title').val(record.children('.bookmark_title:first').text());
$('#bookmark_add_tags').val(record.children('.bookmark_tags:first').text());
if ($('.bookmarks_add').css('display') == 'none') {
$('.bookmarks_add').slideToggle();
}
$('html, body').animate({
scrollTop: ($('.bookmarks_menu'))?$('.bookmarks_menu').offset().top:0
2011-09-13 15:08:11 +04:00
}, 500);
}
2011-08-16 00:05:07 +04:00
function updateBookmarksList(bookmark) {
var tags = encodeEntities(bookmark.tags).split(' ');
var taglist = '';
2011-08-16 00:05:07 +04:00
for ( var i=0, len=tags.length; i<len; ++i ){
2012-02-02 01:02:06 +04:00
if(tags[i] != '')
taglist = taglist + '<a class="bookmark_tag" href="?tag=' + encodeURI(tags[i]) + '">' + tags[i] + '</a> ';
2011-08-16 00:05:07 +04:00
}
if(!hasProtocol(bookmark.url)) {
bookmark.url = 'http://' + bookmark.url;
}
2012-02-22 19:04:17 +04:00
if(bookmark.title == '') bookmark.title = bookmark.url;
2011-08-16 00:05:07 +04:00
$('.bookmarks_list').append(
2011-09-13 15:08:11 +04:00
'<div class="bookmark_single" data-id="' + bookmark.id +'" >' +
'<p class="bookmark_actions">' +
'<span class="bookmark_edit">' +
'<img class="svg" src="'+OC.imagePath('core', 'actions/rename')+'" title="Edit">' +
'</span>' +
2012-02-23 23:35:48 +04:00
'<span class="bookmark_delete">' +
'<img class="svg" src="'+OC.imagePath('core', 'actions/delete')+'" title="Delete">' +
'</span>&nbsp;' +
'</p>' +
'<p class="bookmark_title">'+
'<a href="' + encodeEntities(bookmark.url) + '" target="_blank" class="bookmark_link">' + encodeEntities(bookmark.title) + '</a>' +
'</p>' +
'<p class="bookmark_url"><a href="' + encodeEntities(bookmark.url) + '" target="_blank" class="bookmark_link">' + encodeEntities(bookmark.url) + '</a></p>' +
'</div>'
2011-08-16 00:05:07 +04:00
);
2012-02-02 01:02:06 +04:00
if(taglist != '') {
$('div[data-id="'+ bookmark.id +'"]').append('<p class="bookmark_tags">' + taglist + '</p>');
}
2011-08-16 00:05:07 +04:00
}
function updateOnBottom() {
//check wether user is on bottom of the page
var top = $('.bookmarks_list>:last-child').position().top;
var height = $('.bookmarks_list').height();
// use a bit of margin to begin loading before we are really at the
// bottom
if (top < height * 1.2) {
2011-08-16 00:05:07 +04:00
getBookmarks();
}
}
function recordClick(event) {
$.ajax({
url: 'ajax/recordClick.php',
data: 'url=' + encodeURI($(this).attr('href')),
2011-08-16 00:05:07 +04:00
});
}
function encodeEntities(s){
try {
return $('<div/>').text(s).html();
2011-08-16 00:05:07 +04:00
} catch (ex) {
return "";
}
}
function hasProtocol(url) {
var regexp = /(ftp|http|https|sftp)/;
return regexp.test(url);
}