mirror of
https://github.com/owncloud/bookmarks.git
synced 2024-11-29 04:24:11 +01:00
js cleanup: refactor addBookmark functionality
This commit is contained in:
parent
b58c90249b
commit
f27723369f
88
js/addBookmarkView.js
Normal file
88
js/addBookmarkView.js
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015
|
||||||
|
*
|
||||||
|
* This file is licensed under the Affero General Public License version 3
|
||||||
|
* or later.
|
||||||
|
*
|
||||||
|
* See the COPYING-README file.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
|
||||||
|
var AddBookmarkView = OC.Backbone.View.extend({
|
||||||
|
|
||||||
|
initialize: function() {
|
||||||
|
_.bindAll(this, 'onAddBookmark', 'onTypeUrl', 'onAddBookmarkError');
|
||||||
|
|
||||||
|
view = this;
|
||||||
|
|
||||||
|
this.$el.find('#add_url').on('keydown keyup change click', view.onTypeUrl);
|
||||||
|
},
|
||||||
|
|
||||||
|
onTypeUrl: function() {
|
||||||
|
var button = this.$el.find('#bookmark_add_submit');
|
||||||
|
this.$el.off('submit');
|
||||||
|
if(!this.$el.find('#add_url').val().trim()) {
|
||||||
|
this.$el.on('submit', function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
});
|
||||||
|
button.addClass('disabled');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
button.removeClass('disabled');
|
||||||
|
this.$el.on('submit', this.onAddBookmark);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
onAddBookmark: function(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
var url = this.$el.find('#add_url').val();
|
||||||
|
if (!url.trim()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var bookmark = new OCA.Bookmarks.BookmarkModel({url: url});
|
||||||
|
bookmark.once('sync', this.onAddBookmarkSuccessful, this);
|
||||||
|
this.$el.find('#bookmark_add_submit').addClass('icon-loading-small');
|
||||||
|
this.$el.find('#bookmark_add_submit').removeClass('icon-add');
|
||||||
|
bookmark.save(null, {
|
||||||
|
error: this.onAddBookmarkError
|
||||||
|
});
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is called when the save operation on a bookmark is done, no
|
||||||
|
* matter the outcome
|
||||||
|
*
|
||||||
|
* @this {OCA.Bookmarks.AddBookmarkView}
|
||||||
|
*/
|
||||||
|
onAddBookmarkSuccessful: function(model, response, options) {
|
||||||
|
//FIXME: introduce BookmarksCollection and it this model thereto
|
||||||
|
// also introduce BookmarksListView which should update the list
|
||||||
|
$('.bookmark_single').filterAttr('data-id', response.item.id).remove();
|
||||||
|
updateBookmarksList(response.item, 'prepend');
|
||||||
|
this.$el.find('#add_url').val('');
|
||||||
|
checkEmpty();
|
||||||
|
|
||||||
|
this.resetElements();
|
||||||
|
},
|
||||||
|
|
||||||
|
onAddBookmarkError: function() {
|
||||||
|
OC.Notification.showTemporary(t('bookmark', 'Error when saving bookmark – sorry!'));
|
||||||
|
|
||||||
|
this.resetElements();
|
||||||
|
},
|
||||||
|
|
||||||
|
resetElements: function() {
|
||||||
|
this.$el.find('#bookmark_add_submit').addClass('icon-add');
|
||||||
|
this.$el.find('#bookmark_add_submit').removeClass('icon-loading-small');
|
||||||
|
this.onTypeUrl();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
OCA.Bookmarks = OCA.Bookmarks || {};
|
||||||
|
OCA.Bookmarks.AddBookmarkView = AddBookmarkView;
|
||||||
|
})();
|
12
js/app.js
12
js/app.js
@ -57,10 +57,15 @@
|
|||||||
tagFilterView: null,
|
tagFilterView: null,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @member OCA.Bookmarks.SettinsView
|
* @member OCA.Bookmarks.SettingsView
|
||||||
*/
|
*/
|
||||||
settingsView: null,
|
settingsView: null,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @member OCA.Bookmarks.AddBookmarkView
|
||||||
|
*/
|
||||||
|
addBookmarkView: null,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes the bookmarks app
|
* Initializes the bookmarks app
|
||||||
*/
|
*/
|
||||||
@ -88,6 +93,11 @@
|
|||||||
id: 'appSettings'
|
id: 'appSettings'
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.addBookmarkView = new OCA.Bookmarks.AddBookmarkView({
|
||||||
|
el: '#add_form',
|
||||||
|
id: 'addBookmark'
|
||||||
|
});
|
||||||
|
|
||||||
this.allTagsCollection.fetch();
|
this.allTagsCollection.fetch();
|
||||||
console.warn('INiT DONE');
|
console.warn('INiT DONE');
|
||||||
}
|
}
|
||||||
|
28
js/bookmarkModel.js
Normal file
28
js/bookmarkModel.js
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015
|
||||||
|
*
|
||||||
|
* This file is licensed under the Affero General Public License version 3
|
||||||
|
* or later.
|
||||||
|
*
|
||||||
|
* See the COPYING-README file.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
|
||||||
|
var BookmarkModel = OC.Backbone.Model.extend({
|
||||||
|
idAttribute: 'id',
|
||||||
|
|
||||||
|
defaults: {
|
||||||
|
description: '',
|
||||||
|
from_own: 0,
|
||||||
|
title: '',
|
||||||
|
item: {tags: ''}
|
||||||
|
},
|
||||||
|
|
||||||
|
url: 'bookmark'
|
||||||
|
});
|
||||||
|
|
||||||
|
OCA.Bookmarks = OCA.Bookmarks || {};
|
||||||
|
OCA.Bookmarks.BookmarkModel = BookmarkModel;
|
||||||
|
})();
|
@ -5,8 +5,6 @@ var bookmarksSorting = 'bookmarks_sorting_recent';
|
|||||||
var ajaxCallCount = 0;
|
var ajaxCallCount = 0;
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
watchUrlField();
|
|
||||||
$('#add_url').on('keydown keyup change click', watchUrlField);
|
|
||||||
$('.bookmarks_list').scroll(updateOnBottom).empty();
|
$('.bookmarks_list').scroll(updateOnBottom).empty();
|
||||||
$('.navigationAllBookmarks').click(resetTagFilter);
|
$('.navigationAllBookmarks').click(resetTagFilter);
|
||||||
|
|
||||||
@ -161,59 +159,6 @@ function getBookmarks() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function watchUrlField() {
|
|
||||||
var form = $('#add_form');
|
|
||||||
var el = $('#add_url');
|
|
||||||
var button = $('#bookmark_add_submit');
|
|
||||||
form.unbind('submit');
|
|
||||||
if (!acceptUrl(el.val())) {
|
|
||||||
form.bind('submit', function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
});
|
|
||||||
button.addClass('disabled');
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
button.removeClass('disabled');
|
|
||||||
form.bind('submit', addBookmark);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function acceptUrl(url) {
|
|
||||||
return url.replace(/^\s+/g, '').replace(/\s+$/g, '') !== '';
|
|
||||||
}
|
|
||||||
|
|
||||||
function addBookmark(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
var url = $('#add_url').val();
|
|
||||||
//If trim is empty
|
|
||||||
if (!acceptUrl(url)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$('#add_url').val('');
|
|
||||||
var bookmark = {url: url, description: '', title: '', from_own: 0, added_date: new Date()};
|
|
||||||
increaseAjaxCallCount();
|
|
||||||
$.ajax({
|
|
||||||
type: 'POST',
|
|
||||||
url: 'bookmark',
|
|
||||||
data: bookmark,
|
|
||||||
complete: function () {
|
|
||||||
decreaseAjaxCallCount();
|
|
||||||
},
|
|
||||||
success: function (data) {
|
|
||||||
if (data.status === 'success') {
|
|
||||||
// First remove old BM if exists
|
|
||||||
$('.bookmark_single').filterAttr('data-id', data.item.id).remove();
|
|
||||||
|
|
||||||
var bookmark = $.extend({}, bookmark, data.item);
|
|
||||||
updateBookmarksList(bookmark, 'prepend');
|
|
||||||
checkEmpty();
|
|
||||||
watchUrlField();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function delBookmark() {
|
function delBookmark() {
|
||||||
var record = $(this).parent().parent();
|
var record = $(this).parent().parent();
|
||||||
OC.dialogs.confirm(t('bookmarks', 'Are you sure you want to remove this bookmark?'),
|
OC.dialogs.confirm(t('bookmarks', 'Are you sure you want to remove this bookmark?'),
|
||||||
|
@ -3,9 +3,11 @@ script('bookmarks', '3rdparty/tag-it');
|
|||||||
script('bookmarks', '3rdparty/js_tpl');
|
script('bookmarks', '3rdparty/js_tpl');
|
||||||
|
|
||||||
script('bookmarks', 'tagModel');
|
script('bookmarks', 'tagModel');
|
||||||
|
script('bookmarks', 'bookmarkModel');
|
||||||
script('bookmarks', 'tagCollection');
|
script('bookmarks', 'tagCollection');
|
||||||
script('bookmarks', 'tagListView');
|
script('bookmarks', 'tagListView');
|
||||||
script('bookmarks', 'tagFilterView');
|
script('bookmarks', 'tagFilterView');
|
||||||
|
script('bookmarks', 'addBookmarkView');
|
||||||
script('bookmarks', 'settingsView');
|
script('bookmarks', 'settingsView');
|
||||||
script('bookmarks', 'app');
|
script('bookmarks', 'app');
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user