summaryrefslogtreecommitdiffstats
path: root/js
diff options
context:
space:
mode:
authorBernhard Posselt <nukeawhale@gmail.com>2012-08-31 19:14:57 +0200
committerBernhard Posselt <nukeawhale@gmail.com>2012-09-01 00:31:39 +0200
commit9df1c658c1db523d42e77fe2ab938aeddbde8695 (patch)
tree624baa038b195b3620258691c7ef544fee3d7555 /js
parent401371d2137f96100324ff9ab4ac9a8388df02d5 (diff)
prevent loading when drag and dropping feeds
Diffstat (limited to 'js')
-rw-r--r--js/items.js185
-rw-r--r--js/menu.js60
-rw-r--r--js/news.js88
3 files changed, 173 insertions, 160 deletions
diff --git a/js/items.js b/js/items.js
index 7946e796a..87242de13 100644
--- a/js/items.js
+++ b/js/items.js
@@ -18,11 +18,106 @@ var t = t || function(app, string){ return string; }; // mock translation for lo
(function(){
+ /**
+ * Creates a new item instance and tells it to put the items into
+ * the selected div
+ * @param cssSelector the selector of the div which holds the ul for the feeds
+ */
var Items = function(cssSelector){
this._$articleList = $(cssSelector);
this._$articleList.scrollTop(0);
+ // this array is used to store ids to prevent sending too
+ // many posts when scrolling. the structure is: feed_id: boolean
+ this._processing = {};
}
+ /**
+ * Loads the feeds into the righ view
+ * @param type the type (MenuNodeType)
+ * @param id the id
+ * @param onSuccessCallback a callback that is executed when the loading succeeded
+ */
+ Items.prototype.load = function(type, id, onSuccessCallback) {
+ var self = this;
+ var data = {
+ feedId: id,
+ feedType: type
+ };
+
+ this._$articleList.addClass('loading');
+ this._$articleList.children('ul').hide();
+
+ $.post(OC.filePath('news', 'ajax', 'loadfeed.php'), data, function(jsonData) {
+ if(jsonData.status == 'success'){
+ // FIXME: caching? split whole html into single articles
+ self._$articleList.empty().html(jsonData.data.feedItems)
+ self._bindItemEventListeners();
+ self._$articleList.scrollTop(0);
+ onSuccessCallback();
+ } else {
+ OC.dialogs.alert(t('news', 'Error while loading the feed'), t('news', 'Error'));
+ this._$articleList.children('ul').show();
+ }
+ self._$articleList.removeClass('loading');
+ });
+ };
+
+
+ // FIXME
+ /**
+ * Binds a listener on the feed item list to detect scrolling and mark previous
+ * items as read
+ */
+ Items.prototype._bindItemEventListeners = function() {
+ // single hover on item should mark it as read too
+ $('#feed_items h1.item_title a').click(function(){
+ var $item = $(this).parent().parent('.feed_item');
+ var itemId = $item.data('id');
+ var handler = new News.ItemStatusHandler(itemId);
+ handler.setRead(true);
+ });
+
+ // single hover on item should mark it as read too
+ $('#feed_items .body').click(function(){
+ var $item = $(this).parent('.feed_item');
+ var itemId = $item.data('id');
+ var handler = new News.ItemStatusHandler(itemId);
+ handler.setRead(true);
+ });
+
+ // mark or unmark as important
+ $('#feed_items li.star').click(function(){
+ var $item = $(this).parent().parent().parent('.feed_item');
+ var itemId = $item.data('id');
+ var handler = new News.ItemStatusHandler(itemId);
+ handler.toggleImportant();
+ });
+
+ // toggle logic for the keep unread handler
+ $('#feed_items .keep_unread').click(function(){
+ var $item = $(this).parent().parent().parent('.feed_item');
+ var itemId = $item.data('id');
+ var handler = new News.ItemStatusHandler(itemId);
+ handler.toggleKeepUnread();
+ });
+ $('#feed_items .keep_unread input[type=checkbox]').click(function(){
+ var $item = $(this).parent().parent().parent().parent('.feed_item');
+ var itemId = $item.data('id');
+ var handler = new News.ItemStatusHandler(itemId);
+ handler.toggleKeepUnread();
+ });
+
+ // bind the mark all as read button
+ $('#mark_all_as_read').unbind();
+ $('#mark_all_as_read').click(function(){
+ var feedId = News.Feed.activeFeedId;
+ News.Feed.setAllItemsRead(feedId);
+ });
+
+ $("time.timeago").timeago();
+ };
+
+
Items.prototype.length = function(type, id) {
return 0;
};
@@ -38,81 +133,29 @@ var t = t || function(app, string){ return string; }; // mock translation for lo
// TODO: integrate This
-/**
- * Binds a listener on the feed item list to detect scrolling and mark previous
- * items as read
- */
-function bindItemEventListeners(){
-
- // single hover on item should mark it as read too
- $('#feed_items h1.item_title a').click(function(){
- var $item = $(this).parent().parent('.feed_item');
- var itemId = $item.data('id');
- var handler = new News.ItemStatusHandler(itemId);
- handler.setRead(true);
- });
- // single hover on item should mark it as read too
- $('#feed_items .body').click(function(){
- var $item = $(this).parent('.feed_item');
- var itemId = $item.data('id');
- var handler = new News.ItemStatusHandler(itemId);
- handler.setRead(true);
- });
-
- // mark or unmark as important
- $('#feed_items li.star').click(function(){
- var $item = $(this).parent().parent().parent('.feed_item');
- var itemId = $item.data('id');
- var handler = new News.ItemStatusHandler(itemId);
- handler.toggleImportant();
- });
- // toggle logic for the keep unread handler
- $('#feed_items .keep_unread').click(function(){
- var $item = $(this).parent().parent().parent('.feed_item');
- var itemId = $item.data('id');
- var handler = new News.ItemStatusHandler(itemId);
- handler.toggleKeepUnread();
- });
- $('#feed_items .keep_unread input[type=checkbox]').click(function(){
- var $item = $(this).parent().parent().parent().parent('.feed_item');
- var itemId = $item.data('id');
- var handler = new News.ItemStatusHandler(itemId);
- handler.toggleKeepUnread();
- });
- // bind the mark all as read button
- $('#mark_all_as_read').unbind();
- $('#mark_all_as_read').click(function(){
- var feedId = News.Feed.activeFeedId;
- News.Feed.setAllItemsRead(feedId);
- });
- $("time.timeago").timeago();
-
-}
-
-
-/**
- * Marks an item as read which is called by the timeout
- * @param item the dom item
- */
-function markItemAsRead(scrollArea, item){
- var itemId = parseInt($(item).data('id'));
- var itemOffset = $(item).position().top;
- var boxHeight = $(scrollArea).height();
- var scrollHeight = $(scrollArea).prop('scrollHeight');
- var scrolled = $(scrollArea).scrollTop() + boxHeight;
- if(itemOffset < 0 || scrolled >= scrollHeight){
- if(News.Feed.processing[itemId] === undefined || News.Feed.processing[itemId] === false){
- // mark item as processing to prevent unecessary post requests
- News.Feed.processing[itemId] = true;
- var handler = new News.ItemStatusHandler(itemId);
- handler.setRead(true);
- }
- }
-}
+ /**
+ * Marks an item as read which is called by the timeout
+ * @param item the dom item
+ */
+ function markItemAsRead(scrollArea, item){
+ var itemId = parseInt($(item).data('id'));
+ var itemOffset = $(item).position().top;
+ var boxHeight = $(scrollArea).height();
+ var scrollHeight = $(scrollArea).prop('scrollHeight');
+ var scrolled = $(scrollArea).scrollTop() + boxHeight;
+ if(itemOffset < 0 || scrolled >= scrollHeight){
+ if(News.Feed.processing[itemId] === undefined || News.Feed.processing[itemId] === false){
+ // mark item as processing to prevent unecessary post requests
+ News.Feed.processing[itemId] = true;
+ var handler = new News.ItemStatusHandler(itemId);
+ handler.setRead(true);
+ }
+ }
+ }
/**
* This handler handles changes in the ui when the itemstatus changes
diff --git a/js/menu.js b/js/menu.js
index ba66c0f76..a306ff9fd 100644
--- a/js/menu.js
+++ b/js/menu.js
@@ -368,7 +368,12 @@ var News = News || {};
this._getAndRemoveUnreadCount($listItem));
$listItem.children('.title').click(function(){
- self._load(MenuNodeType.Feed, id);
+ // prevent loading when dragging
+ if($(this).hasClass('noclick')){
+ $(this).removeClass('noclick');
+ } else {
+ self._load(MenuNodeType.Feed, id);
+ }
return false;
});
@@ -385,6 +390,9 @@ var News = News || {};
stack: '> li',
zIndex: 1000,
axis: 'y',
+ start: function(event, ui){
+ $(this).children('.title').addClass('noclick');
+ }
});
};
@@ -424,8 +432,11 @@ var News = News || {};
* @param id the id
*/
Menu.prototype._load = function(type, id){
- this._setActiveFeed(type, id);
- this._items.load(type, id);
+ var self = this;
+ this._items.load(type, id, function(){
+ self._setActiveFeed(type, id);
+ self.triggerHideRead();
+ });
};
/**
@@ -434,7 +445,44 @@ var News = News || {};
* @param id the id
*/
Menu.prototype._delete = function(type, id){
- // TODO:
+ var self = this;
+ var confirmMessage;
+ var url;
+ var data;
+
+ switch(type){
+ case MenuNodeType.Feed:
+ confirmMessage = t('news', 'Are you sure you want to delete this feed?');
+ url = 'deletefeed.php';
+ data = {
+ feedid: id
+ };
+ break;
+
+ case MenuNodeType.Folder:
+ confirmMessage = t('news', 'Are you sure you want to delete this folder and all its feeds?');
+ url = 'deletefolder.php';
+ data = {
+ folderid: id
+ };
+ break;
+ }
+
+ OC.dialogs.confirm(confirmMessage, t('news', 'Warning'), function(answer) {
+ if(answer == true) {
+ $.post(OC.filePath('news', 'ajax', url), data,function(jsonData){
+ if(jsonData.status == 'success'){
+ self.removeNode(type, id);
+ // if we move the current feed or folder, reload page
+ if(type === self._activeFeedType && id === self._activeFeedId){
+ window.location.reload();
+ }
+ } else{
+ OC.dialogs.alert(jsondata.data.message, t('news', 'Error'));
+ }
+ });
+ }
+ });
};
/**
@@ -740,6 +788,10 @@ var News = News || {};
self._resetOpenFolders();
self._moveFeedToFolder(feedId, folderId);
+
+ event.stopImmediatePropagation();
+ event.stopPropagation();
+ return false;
}
});
};
diff --git a/js/news.js b/js/news.js
index 2c6a20e6a..57c70a066 100644
--- a/js/news.js
+++ b/js/news.js
@@ -1,4 +1,4 @@
-News={
+News = {
DropDownMenu: {
fade:function(menu){
$(menu).toggle();
@@ -78,25 +78,6 @@ News={
$(button).prop('value', t('news','Add folder'));
});
},
- 'delete':function(folderid) {
- $('.feeds_delete').tipsy('hide');
- OC.dialogs.confirm(t('news', 'Are you sure you want to delete this folder and all its feeds?'), t('news', 'Warning'), function(answer) {
- if(answer == true) {
- var rightcontent = $('div.rightcontent');
- var shownfeedid = rightcontent.attr('data-id');
- $.post(OC.filePath('news', 'ajax', 'deletefolder.php'),{'folderid':folderid, 'shownfeedid':shownfeedid},function(jsondata){
- if(jsondata.status == 'success'){
- $('.collapsable_container[data-id="' + jsondata.data.folderid + '"]').remove();
- transformCollapsableTrigger();
- }
- else{
- OC.dialogs.alert(jsondata.data.message, t('news', 'Error'));
- }
- });
- }
- });
- return false;
- }
},
Feed: {
id:'',
@@ -160,75 +141,12 @@ News={
}
});
},
- 'delete':function(feedid) {
- $('.feeds_delete').tipsy('hide');
- OC.dialogs.confirm(t('news', 'Are you sure you want to delete this feed?'), t('news', 'Warning'), function(answer) {
- if(answer == true) {
- $.post(OC.filePath('news', 'ajax', 'deletefeed.php'),{'feedid':feedid},function(jsondata){
- if(jsondata.status == 'success'){
- $('li.feed[data-id="'+jsondata.data.feedid+'"]').remove();
-
- var rightcontent = $('div.rightcontent');
- if(rightcontent.attr('data-id') == feedid) {
- rightcontent.find('div#feedadded').remove();
- rightcontent.find('ul.accordion').before(jsondata.data.part_items);
- transformCollapsableTrigger();
- // if the deleted feed is the current feed, reload the page
- // window.location.reload();
- }
- }
- else{
- OC.dialogs.alert(jsondata.data.message, t('news', 'Error'));
- }
- });
- }
- });
- return false;
- },
load:function(feedId) {
- var $feedItems = $('#feed_items');
- $feedItems.empty();
- $feedItems.addClass('loading');
- $.post(OC.filePath('news', 'ajax', 'loadfeed.php'), { 'feedId' : feedId }, function(jsonData) {
- if(jsonData.status == 'success'){
- // set active id
- var $rightContent = $(".rightcontent");
- $rightContent.attr('data-id', feedId);
- News.Feed.activeFeedId = parseInt(feedId);
- // load in new items
- $feedItems.html(jsonData.data.feedItems);
- // scroll to the top position
- $feedItems.scrollTop(0);
- // set title
- var $feedTitle = $(".feed_controls .feed_title h1");
- $feedTitle.html(jsonData.data.feedTitle);
- $feedTitle.attr('title', jsonData.data.feedTitle);
- // update unread count
- $feedHandler = new News.FeedStatusHandler(feedId);
- $feedHandler.setUnreadCount(jsonData.data.unreadItemCount);
- // select new feed
- $('li#selected_feed').attr('id', '');
- if(feedId < 0){
- $('li[data-id="' + feedId + '"]').attr('id', 'selected_feed');
- } else {
- $('li.feed[data-id="' + feedId + '"]').attr('id', 'selected_feed');
- }
- // refresh callbacks
- transformCollapsableTrigger();
- bindItemEventListeners();
- }
- else {
- OC.dialogs.alert(t('news', 'Error while loading the feed'), t('news', 'Error'));
- }
- $feedItems.removeClass('loading');
- });
+
},
- // this array is used to store ids to prevent sending too
- // many posts when scrolling. the structure is: feed_id: boolean
- processing:{},
- activeFeedId: -1000,
+
},