Merge pull request #380 from MageFroh/feed-link

Feed link support
This commit is contained in:
Athou
2013-07-01 22:11:10 -07:00
33 changed files with 70 additions and 13 deletions

View File

@@ -26,6 +26,9 @@ public class Entries implements Serializable {
@ApiProperty("times the server tried to refresh the feed and failed") @ApiProperty("times the server tried to refresh the feed and failed")
private int errorCount; private int errorCount;
@ApiProperty("URL of the website, extracted from the feed")
private String feedLink;
@ApiProperty("list generation timestamp") @ApiProperty("list generation timestamp")
private long timestamp; private long timestamp;
@@ -67,6 +70,14 @@ public class Entries implements Serializable {
this.errorCount = errorCount; this.errorCount = errorCount;
} }
public String getFeedLink() {
return feedLink;
}
public void setFeedLink(String feedLink) {
this.feedLink = feedLink;
}
public long getTimestamp() { public long getTimestamp() {
return timestamp; return timestamp;
} }

View File

@@ -99,6 +99,7 @@ public class FeedREST extends AbstractResourceREST {
entries.setName(subscription.getTitle()); entries.setName(subscription.getTitle());
entries.setMessage(subscription.getFeed().getMessage()); entries.setMessage(subscription.getFeed().getMessage());
entries.setErrorCount(subscription.getFeed().getErrorCount()); entries.setErrorCount(subscription.getFeed().getErrorCount());
entries.setFeedLink(subscription.getFeed().getLink());
List<FeedEntryStatus> list = null; List<FeedEntryStatus> list = null;
if (unreadOnly) { if (unreadOnly) {

View File

@@ -67,6 +67,7 @@ settings.custom_css=Custom CSS
details.feed_details=Feed details details.feed_details=Feed details
details.url=URL details.url=URL
details.website=Website ####### Needs translation
details.name=Name details.name=Name
details.category=Category details.category=Category
details.position=Position details.position=Position

View File

@@ -67,6 +67,7 @@ settings.custom_css=Vlastní téma (CSS)
details.feed_details=Detaily odběru details.feed_details=Detaily odběru
details.url=URL odkaz details.url=URL odkaz
details.website=Website ####### Needs translation
details.name=Název details.name=Název
details.category=Kategorie details.category=Kategorie
details.position=Pozice details.position=Pozice

View File

@@ -67,6 +67,7 @@ settings.custom_css=CSS wedi'i addasu
details.feed_details=Manylion ffrwd details.feed_details=Manylion ffrwd
details.url=URL details.url=URL
details.website=Website ####### Needs translation
details.name=Enw details.name=Enw
details.category=Categori details.category=Categori
details.position=Safle details.position=Safle

View File

@@ -67,6 +67,7 @@ settings.custom_css=Brugerdefineret CSS
details.feed_details=Abonnementsdetaljer details.feed_details=Abonnementsdetaljer
details.url=URL details.url=URL
details.website=Website ####### Needs translation
details.name=Navn details.name=Navn
details.category=Kategori details.category=Kategori
details.position=Position details.position=Position

View File

@@ -67,6 +67,7 @@ settings.custom_css=Eigenes CSS
details.feed_details=Feed details details.feed_details=Feed details
details.url=URL details.url=URL
details.website=Website ####### Needs translation
details.name=Name details.name=Name
details.category=Kategorie details.category=Kategorie
details.position=Position details.position=Position

View File

@@ -67,6 +67,7 @@ settings.custom_css=Custom CSS
details.feed_details=Feed details details.feed_details=Feed details
details.url=URL details.url=URL
details.website=Website
details.name=Name details.name=Name
details.category=Category details.category=Category
details.position=Position details.position=Position

View File

@@ -67,6 +67,7 @@ settings.custom_css=CSS Personalizado
details.feed_details=Detalles de Canales details.feed_details=Detalles de Canales
details.url=URL details.url=URL
details.website=Website ####### Needs translation
details.name=Nombre details.name=Nombre
details.category=Categoría details.category=Categoría
details.position=Position ####### Needs translation details.position=Position ####### Needs translation

View File

@@ -67,6 +67,7 @@ settings.custom_css=سی‌اس‌اس شخصی‌سازی‌شده
details.feed_details=جزئیات خوراک details.feed_details=جزئیات خوراک
details.url=نشانی details.url=نشانی
details.website=Website ####### Needs translation
details.name=نام details.name=نام
details.category=دسته details.category=دسته
details.position=Position ####### Needs translation details.position=Position ####### Needs translation

View File

@@ -67,6 +67,7 @@ settings.custom_css=Oma CSS
details.feed_details=Tilauksen tiedot details.feed_details=Tilauksen tiedot
details.url=Osoite details.url=Osoite
details.website=Website ####### Needs translation
details.name=Nimi details.name=Nimi
details.category=Kansio details.category=Kansio
details.position=Position ####### Needs translation details.position=Position ####### Needs translation

View File

@@ -67,6 +67,7 @@ settings.custom_css=CSS personnelle
details.feed_details=Détails du flux details.feed_details=Détails du flux
details.url=URL details.url=URL
details.website=Site web
details.name=Nom details.name=Nom
details.category=Catégorie details.category=Catégorie
details.position=Position details.position=Position

View File

@@ -67,6 +67,7 @@ settings.custom_css=CSS Personalizado
details.feed_details=Detalles de fontes details.feed_details=Detalles de fontes
details.url=URL details.url=URL
details.website=Website ####### Needs translation
details.name=Nome details.name=Nome
details.category=Categoría details.category=Categoría
details.position=Position ####### Needs translation details.position=Position ####### Needs translation

View File

@@ -67,6 +67,7 @@ settings.custom_css=سی‌اس‌اس شخصی‌سازی‌شده
details.feed_details=جزئیات خوراک details.feed_details=جزئیات خوراک
details.url=نشانی details.url=نشانی
details.website=Website ####### Needs translation
details.name=نام details.name=نام
details.category=جرگه details.category=جرگه
details.position=Position ####### Needs translation details.position=Position ####### Needs translation

View File

@@ -67,6 +67,7 @@ settings.custom_css=Saját CSS
details.feed_details=Hírcsatorna részletei details.feed_details=Hírcsatorna részletei
details.url=URL details.url=URL
details.website=Website ####### Needs translation
details.name=Név details.name=Név
details.category=Kategória details.category=Kategória
details.position=Position ####### Needs translation details.position=Position ####### Needs translation

View File

@@ -67,6 +67,7 @@ settings.custom_css=Css modificato
details.feed_details=Dettagli feed details.feed_details=Dettagli feed
details.url=URL details.url=URL
details.website=Website ####### Needs translation
details.name=Nome details.name=Nome
details.category=Categoria details.category=Categoria
details.position=Posizione details.position=Posizione

View File

@@ -67,6 +67,7 @@ settings.custom_css=커스톰 CSS
details.feed_details=피드 세부 details.feed_details=피드 세부
details.url=유알엘 details.url=유알엘
details.website=Website ####### Needs translation
details.name=이름 details.name=이름
details.category=카테고리 details.category=카테고리
details.position=Position ####### Needs translation details.position=Position ####### Needs translation

View File

@@ -67,6 +67,7 @@ settings.custom_css=Custom CSS
details.feed_details=Butir-butir Feed details.feed_details=Butir-butir Feed
details.url=URL details.url=URL
details.website=Website ####### Needs translation
details.name=Nama details.name=Nama
details.category=Kategori details.category=Kategori
details.position=Posisi details.position=Posisi

View File

@@ -67,6 +67,7 @@ settings.custom_css=Egendefinert CSS
details.feed_details=Abonnementsdetaljer details.feed_details=Abonnementsdetaljer
details.url=URL details.url=URL
details.website=Website ####### Needs translation
details.name=Navn details.name=Navn
details.category=Kategori details.category=Kategori
details.position=Posisjon details.position=Posisjon

View File

@@ -67,6 +67,7 @@ settings.custom_css=Op maat gemaakte CSS
details.feed_details=Feed Details details.feed_details=Feed Details
details.url=URL details.url=URL
details.website=Website ####### Needs translation
details.name=Naam details.name=Naam
details.category=Categorie details.category=Categorie
details.position=Position ####### Needs translation details.position=Position ####### Needs translation

View File

@@ -67,6 +67,7 @@ settings.custom_css=Skreddarsydd CSS
details.feed_details=Abonnementsdetaljar details.feed_details=Abonnementsdetaljar
details.url=URL details.url=URL
details.website=Website ####### Needs translation
details.name=Namn details.name=Namn
details.category=Kategori details.category=Kategori
details.position=Posisjon details.position=Posisjon

View File

@@ -67,6 +67,7 @@ settings.custom_css=Własny styl CSS
details.feed_details=Szczegóły kanału details.feed_details=Szczegóły kanału
details.url=URL details.url=URL
details.website=Website ####### Needs translation
details.name=Nazwa details.name=Nazwa
details.category=Kategoria details.category=Kategoria
details.position=Pozycja details.position=Pozycja

View File

@@ -67,6 +67,7 @@ settings.custom_css=CSS personalizado
details.feed_details=Detalhes do feed details.feed_details=Detalhes do feed
details.url=URL details.url=URL
details.website=Website ####### Needs translation
details.name=Nome details.name=Nome
details.category=Categoria details.category=Categoria
details.position=Posição details.position=Posição

View File

@@ -67,6 +67,7 @@ settings.custom_css=Собственная CSS
details.feed_details=Информация о ленте details.feed_details=Информация о ленте
details.url=URL details.url=URL
details.website=Website ####### Needs translation
details.name=Название details.name=Название
details.category=Категория details.category=Категория
details.position=Позиция details.position=Позиция

View File

@@ -67,6 +67,7 @@ settings.custom_css=Vlastný motív (CSS)
details.feed_details=Detaily odoberania details.feed_details=Detaily odoberania
details.url=URL odkaz details.url=URL odkaz
details.website=Website ####### Needs translation
details.name=Meno details.name=Meno
details.category=Kategória details.category=Kategória
details.position=Pozícia details.position=Pozícia

View File

@@ -67,6 +67,7 @@ settings.custom_css=Anpassad CSS
details.feed_details=Prenumerationsdetaljer details.feed_details=Prenumerationsdetaljer
details.url=URL details.url=URL
details.website=Website ####### Needs translation
details.name=Namn details.name=Namn
details.category=Kategori details.category=Kategori
details.position=Position details.position=Position

View File

@@ -67,6 +67,7 @@ settings.custom_css=Kişiselleştirilmiş CSS
details.feed_details=Yayın detayları details.feed_details=Yayın detayları
details.url=URL details.url=URL
details.website=Website ####### Needs translation
details.name=İsim details.name=İsim
details.category=Kategori details.category=Kategori
details.position=Pozisyon details.position=Pozisyon

View File

@@ -67,6 +67,7 @@ settings.custom_css=自定义 CSS 样式
details.feed_details=订阅详情 details.feed_details=订阅详情
details.url=地址 details.url=地址
details.website=Website ####### Needs translation
details.name=名称 details.name=名称
details.category=目录 details.category=目录
details.position=Position ####### Needs translation details.position=Position ####### Needs translation

View File

@@ -703,6 +703,7 @@ function($scope, $stateParams, $http, $route, $window, EntryService, SettingsSer
$scope.timestamp = data.timestamp; $scope.timestamp = data.timestamp;
$scope.busy = false; $scope.busy = false;
$scope.hasMore = data.hasMore; $scope.hasMore = data.hasMore;
$scope.feedLink = data.feedLink;
}; };
if (!$scope.keywords) { if (!$scope.keywords) {
var service = $scope.selectedType == 'feed' ? FeedService var service = $scope.selectedType == 'feed' ? FeedService

View File

@@ -257,16 +257,24 @@ module.directive('category', [ function() {
return label; return label;
}; };
$scope.feedClicked = function(id) { $scope.feedClicked = function(id, event) {
MobileService.toggleLeftMenu(); // Could be called by a middle click
if ($scope.selectedType == 'feed' if (!event || (!event.ctrlKey && event.which == 1)) {
&& id == $scope.selectedId) { MobileService.toggleLeftMenu();
$scope.$emit('emitReload'); if ($scope.selectedType == 'feed'
} else { && id == $scope.selectedId) {
$state.transitionTo('feeds.view', { $scope.$emit('emitReload');
_type : 'feed', } else {
_id : id $state.transitionTo('feeds.view', {
}); _type : 'feed',
_id : id
});
}
if (event) {
event.preventDefault();
event.stopPropagation();
}
} }
}; };

View File

@@ -34,7 +34,8 @@
<div class="pull-right" ng-click="showFeedDetails(feed)"> <div class="pull-right" ng-click="showFeedDetails(feed)">
<i class="icon-wrench config pointer"></i> <i class="icon-wrench config pointer"></i>
</div> </div>
<a ng-click="feedClicked(feed.id)" class="feed-link" <a ng-click="feedClicked(feed.id, $event)" class="feed-link"
href="{{feed.feedLink}}" target="_blank"
ng-class="{error: feed.message && feed.errorCount > 10, selected: (feed.id == selectedId && selectedType == 'feed') }"> ng-class="{error: feed.message && feed.errorCount > 10, selected: (feed.id == selectedId && selectedType == 'feed') }">
<favicon url="feed.iconUrl" /> <favicon url="feed.iconUrl" />
<span ng-class="{unread: feed.unread}"> <span ng-class="{unread: feed.unread}">
@@ -47,4 +48,4 @@
</a> </a>
</li> </li>
</ul> </ul>
</li> </li>

View File

@@ -9,6 +9,12 @@
<a href="{{sub.feedUrl}}" target="_blank">{{sub.feedUrl}}</a> <a href="{{sub.feedUrl}}" target="_blank">{{sub.feedUrl}}</a>
</div> </div>
</div> </div>
<div class="control-group">
<label class="control-label">${details.website}</label>
<div class="controls horizontal-align">
<a href="{{sub.feedLink}}" target="_blank">{{sub.feedLink}}</a>
</div>
</div>
<div class="control-group" ng-class="{error : !form.name.$valid}"> <div class="control-group" ng-class="{error : !form.name.$valid}">
<label class="control-label">${details.name}</label> <label class="control-label">${details.name}</label>
<div class="controls"> <div class="controls">

View File

@@ -4,7 +4,10 @@
<span ng-switch on="selectedId"> <span ng-switch on="selectedId">
<span ng-switch-when="all">${tree.all}</span> <span ng-switch-when="all">${tree.all}</span>
<span ng-switch-when="starred">${tree.starred}</span> <span ng-switch-when="starred">${tree.starred}</span>
<span ng-switch-default>{{name}}</span> <span ng-switch-default>
<span ng-hide="feedLink">{{name}}</span>
<a ng-show="feedLink" href="{{feedLink}}" target="_blank">{{name}}</a>
</span>
</span> </span>
&nbsp; &nbsp;
<span ng-show="name && selectedType == 'category'"> &#187;</span> <span ng-show="name && selectedType == 'category'"> &#187;</span>