diff options
Diffstat (limited to 'js/news.js')
-rw-r--r-- | js/news.js | 104 |
1 files changed, 64 insertions, 40 deletions
diff --git a/js/news.js b/js/news.js index 59db7cf19..c53f364c4 100644 --- a/js/news.js +++ b/js/news.js @@ -22,7 +22,7 @@ News={ }, UI: { overview:function(dialogtype, dialogfile){ - if($(dialogtype).dialog('isOpen') == true){ + if($(dialogtype).dialog('isOpen') == true){ $(dialogtype).dialog('moveToTop'); }else{ $('#dialog_holder').load(OC.filePath('news', 'ajax', dialogfile), function(jsondata){ @@ -62,14 +62,15 @@ News={ $.post(url, { name: displayname, parentid: folderid }, function(jsondata){ if(jsondata.status == 'success'){ - $('.collapsable_container[data-id="' + folderid + '"] > ul').append(jsondata.data.listfolder); + // if we got a parent folder + if(folderid > 0){ + $('.collapsable_container[data-id="' + folderid + '"] > ul').append(jsondata.data.listfolder); + } else { + $('#feeds').append(jsondata.data.listfolder); + } setupFeedList(); transformCollapsableTrigger(); - //OC.dialogs.confirm(t('news', 'Do you want to add another folder?'), t('news', 'Folder added!'), function(answer) { - // if(!answer) { - $('#addfolder_dialog').dialog('destroy').remove(); - // } - //}); + $('#addfolder_dialog').dialog('destroy').remove(); } else { OC.dialogs.alert(jsondata.data.message, t('news', 'Error')); } @@ -124,23 +125,31 @@ News={ data: { 'feedurl': feedurl, 'folderid': folderid }, dataType: "json", success: function(jsondata){ - if(jsondata.status == 'success'){ - $('.collapsable_container[data-id="' + folderid + '"] > ul').append(jsondata.data.listfeed); - setupFeedList(); - News.Feed.load(jsondata.data.feedid); - - OC.dialogs.confirm(t('news', 'Do you want to add another feed?'), t('news', 'Feed added!'), function(answer) { - if(!answer) { - $('#addfeed_dialog').dialog('destroy').remove(); - $('ul.accordion').before(jsondata.data.part_newfeed); - } - }); + if($('#firstrun').length > 0){ + window.location.reload(); } else { - OC.dialogs.alert(jsondata.data.message, t('news', 'Error')); + if(jsondata.status == 'success'){ + if(folderid > 0){ + $('.collapsable_container[data-id="' + folderid + '"] > ul').append(jsondata.data.listfeed); + } else { + $('#feeds').append(jsondata.data.listfeed); + } + setupFeedList(); + News.Feed.load(jsondata.data.feedid); + + OC.dialogs.confirm(t('news', 'Do you want to add another feed?'), t('news', 'Feed added!'), function(answer) { + if(!answer) { + $('#addfeed_dialog').dialog('destroy').remove(); + $('ul.accordion').before(jsondata.data.part_newfeed); + } + }); + } else { + OC.dialogs.alert(jsondata.data.message, t('news', 'Error')); + } + $("#feed_add_url").val(''); + $(button).attr("disabled", false); + $(button).prop('value', t('news', 'Add feed')); } - $("#feed_add_url").val(''); - $(button).attr("disabled", false); - $(button).prop('value', t('news', 'Add feed')); }, error: function(xhr) { OC.dialogs.alert(t('news', 'Error while parsing the feed'), t('news', 'Fatal Error')); @@ -286,17 +295,14 @@ News={ }); }, filter:function(value){ - // TODO: safe this on the server var data; switch(value){ case 'all': - $("#feed_items .feed_item").show(); data = { show: 'all' }; break; case 'unread': - $("#feed_items .feed_item.read").hide(); data = { show: 'unread' }; @@ -313,7 +319,10 @@ News={ //TODO } }); - } + }, + // this array is used to store ids to prevent sending too + // many posts when scrolling. the structure is: feed_id: boolean + processing:{}, }, /** @@ -401,19 +410,17 @@ News={ * This handler handles changes in the ui when the itemstatus changes */ ItemStatusHandler: function(itemId){ - var _itemId = itemId; + var _itemId = parseInt(itemId); var _$currentItem = $('#feed_items li[data-id="' + itemId + '"]'); - var _$currentItemStar = _$currentItem.children('.utils').children('.primary_item_utils').children('.star'); - var _$currentItemKeepUnread = _$currentItem.children('.utils').children('.secondary_item_utils').children('.keep_unread').children('input[type=checkbox]'); var _feedId = _$currentItem.data('feedid'); var _read = _$currentItem.hasClass('read'); - var _important = _$currentItemStar.hasClass('important'); - var _keepUnread = _$currentItemKeepUnread.prop('checked'); /** * Switches important items to unimportant and vice versa */ var _toggleImportant = function(){ + var _$currentItemStar = _$currentItem.children('.utils').children('.primary_item_utils').children('.star'); + var _important = _$currentItemStar.hasClass('important'); if(_important){ status = 'unimportant'; } else { @@ -421,7 +428,7 @@ News={ } var data = { - itemId: itemId, + itemId: _itemId, status: status }; @@ -439,14 +446,25 @@ News={ }; /** + * Checks the state of the keep read checkbox + * @return true if its checked, otherwise false + */ + var _isKeptRead = function(){ + var _$currentItemKeepUnread = _$currentItem.children('.utils').children('.secondary_item_utils').children('.keep_unread').children('input[type=checkbox]'); + return _$currentItemKeepUnread.prop('checked'); + } + + /** * Toggles an item as "keep unread". This prevents all handlers to mark it as unread * except the current one */ var _toggleKeepUnread = function(){ - if(_keepUnread){ + var _$currentItemKeepUnread = _$currentItem.children('.utils').children('.secondary_item_utils').children('.keep_unread').children('input[type=checkbox]'); + if(_isKeptRead()){ _$currentItemKeepUnread.prop("checked", false); } else { _$currentItemKeepUnread.prop("checked", true); + News.Feed.processing[_itemId] = true; _setRead(false); } }; @@ -459,9 +477,15 @@ News={ var status; // if we already have the status, do nothing - if(read === _read) return; + if(read === _read){ + News.Feed.processing[_itemId] = false; + return; + } // check if the keep unread flag was set - if(read && _keepUnread) return; + if(read && _isKeptRead()){ + News.Feed.processing[_itemId] = false; + return; + } if(read){ status = 'read'; @@ -470,7 +494,7 @@ News={ } var data = { - itemId: itemId, + itemId: _itemId, status: status }; @@ -487,7 +511,7 @@ News={ } else { OC.dialogs.alert(jsonData.data.message, t('news', 'Error')); } - _$currentItem.data('processing', 'false'); + News.Feed.processing[_itemId] = false; }) }; @@ -650,10 +674,10 @@ $(document).ready(function(){ $(this).children('ul').children('.feed_item:not(.read)').each(function(){ var itemOffset = $(this).position().top; if(itemOffset <= 0 || scrolled >= scrollHeight){ - var itemId = $(this).data('id'); - if($(this).data('processing') != true){ + var itemId = parseInt($(this).data('id')); + if(News.Feed.processing[itemId] === undefined || News.Feed.processing[itemId] === false){ // mark item as processing to prevent unecessary post requests - $(this).data('processing', 'true'); + News.Feed.processing[itemId] = true; var handler = new News.ItemStatusHandler(itemId); handler.setRead(true); } |