diff options
-rw-r--r-- | css/news.css | 4 | ||||
-rw-r--r-- | index.php | 1 | ||||
-rw-r--r-- | js/jquery.onscreen.js | 22 | ||||
-rw-r--r-- | js/news.js | 13 | ||||
-rw-r--r-- | js/settings.js | 7 | ||||
-rw-r--r-- | opmlexporter.php | 65 |
6 files changed, 86 insertions, 26 deletions
diff --git a/css/news.css b/css/news.css index 007a917a2..3775c6599 100644 --- a/css/news.css +++ b/css/news.css @@ -181,6 +181,7 @@ div.add_parentfolder { #feeds li#selected_feed { background-color: #ffffff !important; + font-style: oblique; } #feeds li.feed.updating { @@ -198,6 +199,7 @@ div.add_parentfolder { #feeds li.feed .feeds_delete, #feeds li.feed .feeds_edit { display: none; + border: none; } #feeds li.feed:hover .unreaditemcounter { @@ -213,7 +215,7 @@ div.add_parentfolder { #feeds .feeds_delete { position: absolute; - right: 0.1em; + right: 0.2em; background: url('%webroot%/core/img/actions/delete.svg') no-repeat center; display: none; padding: 0; @@ -19,6 +19,7 @@ OCP\App::setActiveNavigationEntry('news'); OCP\Util::addScript('news','news'); OCP\Util::addScript('news','jquery.timeago'); +OCP\Util::addScript('news','jquery.onscreen'); OCP\Util::addStyle('news','news'); OCP\Util::addStyle('news','settings'); diff --git a/js/jquery.onscreen.js b/js/jquery.onscreen.js new file mode 100644 index 000000000..bbd1f3d4d --- /dev/null +++ b/js/jquery.onscreen.js @@ -0,0 +1,22 @@ +// onScreen jQuery plugin v0.2.1 +// (c) 2011 Ben Pickles +// +// http://benpickles.github.com/onScreen +// +// Released under MIT license. +;(function($) { + $.expr[":"].onScreen = function(elem) { + var $window = $(window) + var viewport_top = $window.scrollTop() + var viewport_height = $window.height() + var viewport_bottom = viewport_top + viewport_height + var $elem = $(elem) + var top = $elem.offset().top + var height = $elem.height() + var bottom = top + height + + return (top >= viewport_top && top < viewport_bottom) || + (bottom > viewport_top && bottom <= viewport_bottom) || + (height > viewport_height && top <= viewport_top && bottom >= viewport_bottom) + } +})(jQuery); diff --git a/js/news.js b/js/news.js index 2b18ffb59..b1c1fc8ce 100644 --- a/js/news.js +++ b/js/news.js @@ -622,7 +622,7 @@ function bindItemEventListeners(){ $('#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); + var handler = new News.ItemStatusHandler(itemId); handler.toggleImportant(); }); @@ -630,13 +630,13 @@ function bindItemEventListeners(){ $('#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); + 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); + var handler = new News.ItemStatusHandler(itemId); handler.toggleKeepUnread(); }); @@ -726,7 +726,12 @@ $(document).ready(function(){ }); $('#feed_items').scrollTop(0); - + + $(document).keydown(function(e) { + if ((e.keyCode || e.which) == 74) { // 'j' key shortcut + + } + }); }); /** diff --git a/js/settings.js b/js/settings.js index 6709884ec..b10f3c4fe 100644 --- a/js/settings.js +++ b/js/settings.js @@ -53,8 +53,11 @@ News.Settings={ }); }, exportOpml:function(button){ - //TODO - alert("test"); + $(button).attr("disabled", true); + $(button).prop('value', t('news', 'Downloading...')); + document.location.href = OC.linkTo('news', 'opmlexporter.php'); + $(button).prop('value', t('news', 'Download')); + $(button).attr("disabled", false); } } diff --git a/opmlexporter.php b/opmlexporter.php index 86b8bee81..e247056c6 100644 --- a/opmlexporter.php +++ b/opmlexporter.php @@ -11,25 +11,52 @@ * */ -class OPMLExporter { +function feedsToXML($data, $xml_el, $dom){ - - public static function feedToXML(OCA\News\Feed $feed){ - - } - - /** - * @brief - */ - public static function export(OCA\News\Collection $data){ - foreach($children as $child) { - if ($child instanceOf OCA\News\Folder){ - } - elseif ($child instanceOf OCA\News\Feed) { //onhover $(element).attr('id', 'newID'); - } - else { - //TODO:handle error in this case - } + foreach($data as $collection) { + $outline_el = $dom->createElement('outline'); + if ($collection instanceOf OCA\News\Folder){ + $outline_el->setAttribute('title', $collection->getName()); + $outline_el->setAttribute('text', $collection->getName()); + feedsToXML($collection->getChildren(), $outline_el, $dom); + } + elseif ($collection instanceOf OCA\News\Feed) { + $outline_el->setAttribute('title', $collection->getTitle()); + $outline_el->setAttribute('text', $collection->getTitle()); + $outline_el->setAttribute('type', 'rss'); + $outline_el->setAttribute('xmlUrl', $collection->getUrl()); } + $xml_el->appendChild( $outline_el ); } -}
\ No newline at end of file +} + +$l = OC_L10N::get('news'); + +OCP\User::checkLoggedIn(); +OCP\App::checkAppEnabled('news'); + +$userid = OCP\USER::getUser(); +$foldermapper = new OCA\News\FolderMapper($userid); +$allfeeds = $foldermapper->childrenOfWithFeeds(0); + +header('Content-Type: application/x.opml+xml'); +header('Content-Disposition: inline; filename=owncloud_news_subscriptions.xml'); + +$dom = new DomDocument('1.0', 'UTF-8'); +$dom->formatOutput = true; + +$opml_el = $dom->createElement('opml'); +$opml_el->setAttribute('version', '2.0'); + +$head_el = $dom->createElement('head'); +$title_el = $dom->createElement('title', $userid . ' ' . $l->t('subscriptions in ownCloud - News')); +$head_el->appendChild( $title_el ); +$opml_el->appendChild( $head_el ); + +$body_el = $dom->createElement('body'); +feedsToXML($allfeeds, $body_el, $dom); + +$opml_el->appendChild( $body_el ); +$dom->appendChild( $opml_el ); + +echo $dom->saveXML();
\ No newline at end of file |