1
0
mirror of https://github.com/owncloud/bookmarks.git synced 2024-11-29 04:24:11 +01:00
OwncloudBookmarksOfficial/js/bookmarks.js

380 lines
11 KiB
JavaScript
Raw Normal View History

2011-08-15 22:05:07 +02:00
var bookmarks_page = 0;
var bookmarks_loading = false;
2011-08-25 12:55:13 +02:00
var bookmarks_sorting = 'bookmarks_sorting_recent';
var bookmark_view = 'image';
$(document).ready(function() {
$('.centercontent').click(clickSideBar);
$('#view_type input').click(clickSwitchView);
2012-06-29 14:12:29 +02:00
$('#bookmark_add_submit').click(addBookmark);
$(window).resize(function () {
fillWindow($('.bookmarks_list'));
});
$(window).resize();
2012-06-27 16:32:04 +02:00
$('.bookmarks_list').scroll(updateOnBottom).empty().width($('#rightcontent').width());
2012-06-28 11:40:42 +02:00
$('#tag_filter input').tagit({
allowSpaces: true,
availableTags: fullTags,
onTagRemoved: filterTagsChanged
}).tagit('option', 'onTagAdded', filterTagsChanged);
2011-08-15 22:05:07 +02:00
getBookmarks();
if(init_sidebar != 'true')
toggleSideBar();
bookmark_view = init_view;
switchView();
2011-08-15 22:05:07 +02:00
});
2012-07-31 22:48:11 +02:00
var formatString = (function() {
var replacer = function(context) {
return function(s, name) {
return context[name];
};
};
return function(input, context) {
return input.replace(/\{(\w+)\}/g, replacer(context));
};
})();
function clickSideBar() {
$.post(OC.filePath('bookmarks', 'ajax', 'changescreen.php'), {sidebar: $('.right_img').is(':visible')});
toggleSideBar();
}
2012-07-03 13:47:09 +02:00
function toggleSideBar(){
var left_pan_visible = $('.right_img').is(':visible');
anim_duration = 1000;
if( left_pan_visible) { // then show the left panel
$('#rightcontent').animate({'left':'32.5em'},{duration: anim_duration, queue: false });
$('.bookmarks_list').animate({'width': '-=15em'},{duration: anim_duration, queue: false });
$('#leftcontent').animate({'margin-left':'0', 'opacity': 1},{duration: anim_duration, queue: false, complete: function() { $(window).trigger('resize'); }});
2012-07-03 13:47:09 +02:00
$('.right_img').hide();
$('.left_img').show();
} else { // hide the left panel
$('#rightcontent').animate({'left':'15.5em'},{duration: anim_duration, queue: false });
$('.bookmarks_list').animate({'width': '+=15em'},{duration: anim_duration, queue: false });
$('#leftcontent').animate({'margin-left':'-17em', 'opacity': 0.5 },{duration: anim_duration, queue: false, complete: function() { $(window).trigger('resize'); } });
$('.left_img').hide();
$('.right_img').show();
2012-07-03 13:47:09 +02:00
}
}
2012-06-28 11:40:42 +02:00
function clickSwitchView(){
$.post(OC.filePath('bookmarks', 'ajax', 'changescreen.php'), {view:bookmark_view});
switchView();
2012-07-03 13:47:09 +02:00
}
function switchView(){
if(bookmark_view == 'list') { //Then switch to img
$('.bookmarks_list').addClass('bm_view_img');
$('.bookmarks_list').removeClass('bm_view_list');
$('#view_type input.image').hide();
$('#view_type input.list').show();
bookmark_view = 'image';
} else { // Then Image
$('.bookmarks_list').addClass('bm_view_list');
$('.bookmarks_list').removeClass('bm_view_img');
$('#view_type input.list').hide();
$('#view_type input.image').show();
bookmark_view = 'list';
}
filterTagsChanged(); //Refresh the view
}
2012-06-29 14:12:29 +02:00
function addFilterTag(event) {
event.preventDefault();
$('#tag_filter input').tagit('createTag', $(this).text());
2012-06-28 11:40:42 +02:00
}
2012-06-28 00:43:11 +02:00
function updateTagsList(tag) {
$('.tag_list').append('<li><a href="" class="tag">'+tag['tag']+'</a>'+
'<p class="tags_actions">'+
'<span class="tag_edit">'+
2012-06-28 00:43:11 +02:00
'<img class="svg" src="'+OC.imagePath('core', 'actions/rename')+'" title="Edit">'+
'</span>'+
'<span class="tag_delete">'+
2012-06-28 00:43:11 +02:00
'<img class="svg" src="'+OC.imagePath('core', 'actions/delete')+'" title="Delete">'+
'</span>'+
'</p>'+
'<em>'+tag['nbr']+'</em>'+
'</li>');
2012-06-28 00:43:11 +02:00
}
2012-06-28 11:40:42 +02:00
function filterTagsChanged()
{
$('#bookmarkFilterTag').val($('#tag_filter input:hidden').val());
$('.bookmarks_list').empty();
bookmarks_page = 0;
2012-06-28 11:40:42 +02:00
getBookmarks();
}
2011-08-15 22:05:07 +02:00
function getBookmarks() {
if(bookmarks_loading) {
//have patience :)
return;
}
bookmarks_loading = true;
//Update Rel Tags if first page
if(bookmarks_page == 0) {
$.ajax({
type: 'GET',
url: OC.filePath('bookmarks', 'ajax', 'updateList.php') + '&type=rel_tags',
data: {tag: $('#bookmarkFilterTag').val(), page:bookmarks_page, sort:bookmarks_sorting },
success: function(tags){
$('.tag_list').empty();
for(var i in tags.data) {
updateTagsList(tags.data[i]);
}
$('.tag_list .tag_edit').click(renameTag);
$('.tag_list .tag_delete').click(deleteTag);
$('.tag_list a.tag').click(addFilterTag);
}
});
}
2011-08-15 22:05:07 +02:00
$.ajax({
type: 'GET',
2012-06-28 00:43:11 +02:00
url: OC.filePath('bookmarks', 'ajax', 'updateList.php') + '&type=bookmark',
data: {tag: $('#bookmarkFilterTag').val(), page:bookmarks_page, sort:bookmarks_sorting },
2011-08-15 22:05:07 +02:00
success: function(bookmarks){
if (bookmarks.data.length) {
bookmarks_page += 1;
}
2011-08-15 22:05:07 +02:00
$('.bookmark_link').unbind('click', recordClick);
$('.bookmark_delete').unbind('click', delBookmark);
2012-06-29 14:12:29 +02:00
$('.bookmark_edit').unbind('click', editBookmark);
2011-08-15 22:05:07 +02:00
for(var i in bookmarks.data) {
updateBookmarksList(bookmarks.data[i]);
$("#firstrun").hide();
2011-08-15 22:05:07 +02:00
}
2012-02-22 23:58:38 +01:00
if($('.bookmarks_list').is(':empty')) {
$("#firstrun").show();
}
2011-08-15 22:05:07 +02:00
$('.bookmark_link').click(recordClick);
$('.bookmark_delete').click(delBookmark);
2012-06-29 14:12:29 +02:00
$('.bookmark_edit').click(editBookmark);
2011-08-15 22:05:07 +02:00
bookmarks_loading = false;
if (bookmarks.data.length) {
updateOnBottom()
}
2011-08-15 22:05:07 +02:00
}
});
2011-08-15 22:05:07 +02:00
}
2011-09-13 13:08:11 +02:00
2012-06-29 14:12:29 +02:00
function createEditDialog(record){
dialog_html = $('#edit_dialog').html();
var dialog = $(dialog_html).dialog({
width : 620,
height: 450,
title: t('bookmark', 'Edit bookmark'),
modal: true,
close : function(event, ui) {
$(this).dialog('destroy').remove();
}
});
$('.ui-dialog').bookmark_dialog({
2012-06-29 14:12:29 +02:00
on_success: function(){
dialog.dialog('destroy').remove();
filterTagsChanged();
2012-06-29 14:12:29 +02:00
},
record: record
});
2012-06-29 14:12:29 +02:00
}
2012-06-29 14:12:29 +02:00
function addBookmark(event) {
createEditDialog();
2011-08-15 22:05:07 +02:00
}
function delBookmark(event) {
var record = $(this).parent().parent();
2011-08-15 22:05:07 +02:00
$.ajax({
2012-06-10 23:38:26 +02:00
type: 'POST',
2012-04-25 21:20:06 +02:00
url: OC.filePath('bookmarks', 'ajax', 'delBookmark.php'),
data: 'id=' + record.data('id'),
success: function(data){
if (data.status == 'success') {
record.remove();
if($('.bookmarks_list').is(':empty')) {
$("#firstrun").show();
}
}
}
2011-08-15 22:05:07 +02:00
});
}
2012-06-29 14:12:29 +02:00
function editBookmark(event) {
2011-09-13 13:08:11 +02:00
var record = $(this).parent().parent();
2012-06-29 14:12:29 +02:00
bookmark = record.data('record');
createEditDialog(bookmark);
2011-09-13 13:08:11 +02:00
}
2011-08-15 22:05:07 +02:00
function updateBookmarksList(bookmark) {
2012-06-27 14:14:45 +02:00
var tags = bookmark.tags;
var taglist = '';
2011-08-15 22:05:07 +02:00
for ( var i=0, len=tags.length; i<len; ++i ){
2012-02-01 22:02:06 +01:00
if(tags[i] != '')
2012-06-29 14:36:37 +02:00
taglist = taglist + '<a class="bookmark_tag" href="#">' + encodeEntities(tags[i]) + '</a> ';
2011-08-15 22:05:07 +02:00
}
if(!hasProtocol(bookmark.url)) {
bookmark.url = 'http://' + bookmark.url;
}
2012-02-22 16:04:17 +01:00
if(bookmark.title == '') bookmark.title = bookmark.url;
bookmark.added_date = new Date();
bookmark.added_date.setTime(parseInt(bookmark.added)*1000);
if(bookmark_view == 'image') { //View in images
2012-07-31 22:48:11 +02:00
service_url = formatString(shot_provider, {url: encodeEntities(bookmark.url), title: bookmark.title, width: 200});
$('.bookmarks_list').append(
'<div class="bookmark_single" data-id="' + bookmark.id +'" >' +
2012-07-31 22:48:11 +02:00
'<p class="shot"><img src="'+ service_url +'"></p>'+
'<p class="bookmark_actions">' +
'<span class="bookmark_edit">' +
'<img class="svg" src="'+OC.imagePath('core', 'actions/rename')+'" title="Edit">' +
'</span>' +
'<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_desc">'+ encodeEntities(bookmark.description) + '</p>' +
'<p class="bookmark_url"><a href="' + encodeEntities(bookmark.url) + '" target="_blank" class="bookmark_link">' + encodeEntities(bookmark.url) + '</a></p>' +
'</div>'
);
$('div[data-id="'+ bookmark.id +'"]').data('record', bookmark);
if(taglist != '') {
$('div[data-id="'+ bookmark.id +'"]').append('<p class="bookmark_tags">' + taglist + '</p>');
}
$('div[data-id="'+ bookmark.id +'"] a.bookmark_tag').bind('click', addFilterTag);
}
else { // View in text
$('.bookmarks_list').append(
'<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>' +
'<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>' +
'<p class="bookmark_date">' + formatDate(bookmark.added_date) + '</p>' +
'<p class="bookmark_desc">'+ encodeEntities(bookmark.description) + '</p>' +
'</div>'
);
$('div[data-id="'+ bookmark.id +'"]').data('record', bookmark);
if(taglist != '') {
$('div[data-id="'+ bookmark.id +'"]').append('<p class="bookmark_tags">' + taglist + '</p>');
}
$('div[data-id="'+ bookmark.id +'"] a.bookmark_tag').bind('click', addFilterTag);
2012-02-01 22:02:06 +01:00
}
2012-06-29 14:36:37 +02:00
2011-08-15 22:05:07 +02: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) {
2012-07-01 23:08:41 +02:00
getBookmarks();
2011-08-15 22:05:07 +02:00
}
}
function recordClick(event) {
$.ajax({
2012-06-10 23:38:26 +02:00
type: 'POST',
2012-04-25 21:20:06 +02:00
url: OC.filePath('bookmarks', 'ajax', 'recordClick.php'),
data: 'url=' + encodeURIComponent($(this).attr('href')),
});
2011-08-15 22:05:07 +02:00
}
function encodeEntities(s){
try {
return $('<div/>').text(s).html();
2011-08-15 22:05:07 +02:00
} catch (ex) {
return "";
}
}
function hasProtocol(url) {
var regexp = /(ftp|http|https|sftp)/;
return regexp.test(url);
}
function renameTag(event) {
if($('input[name="tag_new_name"]').length) return; // Do nothing if a tag is currenlty edited
tag_el = $(this).closest('li');
tag_el.append('<form><input name="tag_new_name" type="text"></form>');
var form = tag_el.find('form');
tag_el.find('.tags_actions').hide();
tag_name = tag_el.find('.tag').hide().text();
tag_el.find('input').val(tag_name).focus().bind('blur',function() {
form.trigger('submit');
});
form.bind('submit',submitTagName);
}
function submitTagName(event) {
event.preventDefault();
tag_el = $(this).closest('li')
new_tag_name = tag_el.find('input').val();
old_tag_name = tag_el.find('.tag').show().text();
tag_el.find('.tag_edit').show();
tag_el.find('.tags_actions').show();
tag_el.find('input').unbind('blur');
tag_el.find('form').unbind('submit').remove();
if(new_tag_name != old_tag_name && new_tag_name != '') {
//submit
$.ajax({
type: 'POST',
url: OC.filePath('bookmarks', 'ajax', 'renameTag.php'),
data: { old_name: old_tag_name, new_name: new_tag_name},
success: function(bookmarks){
if (bookmarks.status =='success') {
filterTagsChanged();
}
}
});
}
}
function deleteTag(event){
tag_el = $(this).closest('li');
var old_tag_name = tag_el.find('.tag').show().text();
OC.dialogs.confirm(t('bookmarks', 'Are you sure you want to remove this tag fro every entry?'),
t('bookmarks', 'Warning'), function(answer) {
if(answer) {
$.ajax({
type: 'POST',
url: OC.filePath('bookmarks', 'ajax', 'delTag.php'),
data: { old_name: old_tag_name},
success: function(bookmarks){
if (bookmarks.status =='success') {
filterTagsChanged();
}
}
});
}
});
2012-07-31 22:48:11 +02:00
}