summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBernhard Posselt <Raydiation@users.noreply.github.com>2014-07-24 09:52:19 +0200
committerBernhard Posselt <Raydiation@users.noreply.github.com>2014-07-24 09:52:19 +0200
commita09e452c6e4796432b92fe52ec54900bad702c66 (patch)
tree097242cbe294f4884ee174ba5a8adb18c66cac7b
parent3d53db02a8ef65b20c42f92d51656fcef811a7c9 (diff)
parent97c23d6910e22dcbf17deeb988ff0ebf7a0ea568 (diff)
Merge pull request #544 from Xefir/fix-enclosure
Fix audio tag and basic video enclosure support
-rw-r--r--css/items.css4
-rw-r--r--fetcher/feedfetcher.php8
-rw-r--r--js/app/directives/audio.coffee4
-rw-r--r--js/app/directives/video.coffee44
-rw-r--r--js/public/app.js56
-rw-r--r--templates/part.items.php17
6 files changed, 120 insertions, 13 deletions
diff --git a/css/items.css b/css/items.css
index 04cd0ac63..f1657090e 100644
--- a/css/items.css
+++ b/css/items.css
@@ -300,6 +300,10 @@
padding: 14px 42px 0 49px;
}
+ .feed_item .enclosure img {
+ max-width: 100%;
+ }
+
.feed_item .item_body {
padding: 10px 42px 0 42px;
max-width: 770px;
diff --git a/fetcher/feedfetcher.php b/fetcher/feedfetcher.php
index 9c2049395..643f37282 100644
--- a/fetcher/feedfetcher.php
+++ b/fetcher/feedfetcher.php
@@ -160,14 +160,10 @@ class FeedFetcher implements IFeedFetcher {
}
}
- // TODO: make it work for video files also
$enclosure = $simplePieItem->get_enclosure();
if($enclosure !== null) {
- $enclosureType = $enclosure->get_type();
- if(stripos($enclosureType, "audio/") !== false) {
- $item->setEnclosureMime($enclosureType);
- $item->setEnclosureLink($enclosure->get_link());
- }
+ $item->setEnclosureMime($enclosure->get_type());
+ $item->setEnclosureLink($enclosure->get_link());
}
return $item;
diff --git a/js/app/directives/audio.coffee b/js/app/directives/audio.coffee
index 3d6d94062..719adc282 100644
--- a/js/app/directives/audio.coffee
+++ b/js/app/directives/audio.coffee
@@ -34,8 +34,8 @@ angular.module('News').directive 'newsAudio', ->
'<a ng-href="{{ src|trustUrl }}" class="button" ng-show="cantPlay()" ' +
'ng-transclude></a>'
link: (scope, elm, attrs) ->
- source = elm.children().children('source')[0]
- cantPlay = false
+ source = elm.children('audio').children('source')[0]
+ cantPlay = !document.createElement('audio').canPlayType(attrs['type']);
source.addEventListener 'error', ->
scope.$apply ->
cantPlay = true
diff --git a/js/app/directives/video.coffee b/js/app/directives/video.coffee
new file mode 100644
index 000000000..cf7454f84
--- /dev/null
+++ b/js/app/directives/video.coffee
@@ -0,0 +1,44 @@
+###
+
+ownCloud - News
+
+@author Bernhard Posselt
+@copyright 2012 Bernhard Posselt dev@bernhard-posselt.com
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+License as published by the Free Software Foundation; either
+version 3 of the License, or any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+
+You should have received a copy of the GNU Affero General Public
+License along with this library. If not, see <http://www.gnu.org/licenses/>.
+
+###
+
+angular.module('News').directive 'newsVideo', ->
+ directive =
+ restrict: 'E'
+ scope:
+ src: '@'
+ type: '@'
+ transclude: true
+ template: '' +
+ '<video controls="controls" preload="none" ng-hide="cantPlay()">' +
+ '<source ng-src="{{ src|trustUrl }}">' +
+ '</video>' +
+ '<a ng-href="{{ src|trustUrl }}" class="button" ng-show="cantPlay()" ' +
+ 'ng-transclude></a>'
+ link: (scope, elm, attrs) ->
+ source = elm.children('video').children('source')[0]
+ cantPlay = !document.createElement('video').canPlayType(attrs['type']);
+ source.addEventListener 'error', ->
+ scope.$apply ->
+ cantPlay = true
+
+ scope.cantPlay = -> cantPlay
+
diff --git a/js/public/app.js b/js/public/app.js
index c1c2363be..fcdf6934e 100644
--- a/js/public/app.js
+++ b/js/public/app.js
@@ -105,8 +105,60 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>.
template: '' + '<audio controls="controls" preload="none" ng-hide="cantPlay()">' + '<source ng-src="{{ src|trustUrl }}">' + '</audio>' + '<a ng-href="{{ src|trustUrl }}" class="button" ng-show="cantPlay()" ' + 'ng-transclude></a>',
link: function(scope, elm, attrs) {
var cantPlay, source;
- source = elm.children().children('source')[0];
- cantPlay = false;
+ source = elm.children('audio').children('source')[0];
+ cantPlay = !document.createElement('audio').canPlayType(attrs['type']);
+ source.addEventListener('error', function() {
+ return scope.$apply(function() {
+ return cantPlay = true;
+ });
+ });
+ return scope.cantPlay = function() {
+ return cantPlay;
+ };
+ }
+ };
+ });
+
+}).call(this);
+
+// Generated by CoffeeScript 1.6.3
+/*
+
+ownCloud - News
+
+@author Bernhard Posselt
+@copyright 2012 Bernhard Posselt dev@bernhard-posselt.com
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+License as published by the Free Software Foundation; either
+version 3 of the License, or any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+
+You should have received a copy of the GNU Affero General Public
+License along with this library. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+
+(function() {
+ angular.module('News').directive('newsVideo', function() {
+ var directive;
+ return directive = {
+ restrict: 'E',
+ scope: {
+ src: '@',
+ type: '@'
+ },
+ transclude: true,
+ template: '' + '<video controls="controls" preload="none" ng-hide="cantPlay()">' + '<source ng-src="{{ src|trustUrl }}">' + '</video>' + '<a ng-href="{{ src|trustUrl }}" class="button" ng-show="cantPlay()" ' + 'ng-transclude></a>',
+ link: function(scope, elm, attrs) {
+ var cantPlay, source;
+ source = elm.children('video').children('source')[0];
+ cantPlay = !document.createElement('video').canPlayType(attrs['type']);
source.addEventListener('error', function() {
return scope.$apply(function() {
return cantPlay = true;
diff --git a/templates/part.items.php b/templates/part.items.php
index 8b062b787..d189f2b0f 100644
--- a/templates/part.items.php
+++ b/templates/part.items.php
@@ -63,10 +63,21 @@
</span>
</h2>
- <div class="enclosure" ui-if="item.enclosureLink">
- <news-audio type="{{ item.enclosureType }}" ng-src="{{ item.enclosureLink|trustUrl }}"/><?php
+ <div class="enclosure" ui-if="item.enclosureLink" ng-switch="item.enclosureMime.split('/')[0]">
+ <div ng-switch-when="audio">
+ <news-audio type="{{ item.enclosureMime }}" ng-src="{{ item.enclosureLink|trustUrl }}"><?php
+ p($l->t('Download'))
+ ?></news-audio>
+ </div>
+ <div ng-switch-when="video">
+ <news-video type="{{ item.enclosureMime }}" ng-src="{{ item.enclosureLink|trustUrl }}"><?php
+ p($l->t('Download'))
+ ?></news-video>
+ </div>
+ <img ng-switch-when="image" type="{{ item.enclosureMime }}" ng-src="{{ item.enclosureLink|trustUrl }}" alt="" />
+ <a class="button" ng-switch-default type="{{ item.enclosureMime }}" ng-href="{{ item.enclosureLink|trustUrl }}"><?php
p($l->t('Download'))
- ?></audio>
+ ?></a>
</div>
<div class="item_body" news-bind-html-unsafe="item.body">