diff --git a/ckan/lib/helpers.py b/ckan/lib/helpers.py
index 384f08c8581..07eb5dd0565 100644
--- a/ckan/lib/helpers.py
+++ b/ckan/lib/helpers.py
@@ -1364,8 +1364,8 @@ def resource_preview(resource, pkg_id):
Returns a rendered snippet for a embedded resource preview.
Depending on the type, different previews are loaded.
- This could be an img tag where the image is loaded directly or an iframe that
- embeds a web page, recline or a pdf preview.
+ This could be an img tag where the image is loaded directly or an iframe
+ that embeds a web page, recline or a pdf preview.
'''
format_lower = resource['format'].lower()
@@ -1376,11 +1376,9 @@ def resource_preview(resource, pkg_id):
if not resource['url']:
log.info('No url for resource {0} defined.'.format(resource['id']))
- return snippet(
- "dataviewer/snippets/no_preview.html",
- resource_type=format_lower,
- reason='No valid resource url has been defined.'
- )
+ return snippet("dataviewer/snippets/no_preview.html",
+ resource_type=format_lower,
+ reason='No valid resource url has been defined.')
direct_embed = config.get('ckan.preview.direct', '').split()
if not direct_embed:
direct_embed = datapreview.DEFAULT_DIRECT_EMBED
@@ -1390,24 +1388,23 @@ def resource_preview(resource, pkg_id):
if datapreview.can_be_previewed(data_dict):
url = url_for(controller='package', action='resource_datapreview',
- resource_id=resource['id'], id=pkg_id, qualified=True)
+ resource_id=resource['id'], id=pkg_id, qualified=True)
elif format_lower in direct_embed:
directly = True
url = resource['url']
elif format_lower in loadable_in_iframe:
url = resource['url']
else:
- log.info('No preview handler for resource type {0}'.format(format_lower))
- return snippet(
- "dataviewer/snippets/no_preview.html",
- resource_type=format_lower
- )
-
- return snippet(
- "dataviewer/snippets/data_preview.html",
- embed=directly,
- resource_url=url
+ log.info(
+ 'No preview handler for resource type {0}'.format(format_lower)
)
+ return snippet("dataviewer/snippets/no_preview.html",
+ resource_type=format_lower)
+
+ return snippet("dataviewer/snippets/data_preview.html",
+ embed=directly,
+ resource_url=url,
+ raw_resource_url=resource.get('url'))
def SI_number_span(number):
diff --git a/ckan/public/base/javascript/modules/data-viewer.js b/ckan/public/base/javascript/modules/data-viewer.js
index f928ed1c0d3..5b9cbafce98 100644
--- a/ckan/public/base/javascript/modules/data-viewer.js
+++ b/ckan/public/base/javascript/modules/data-viewer.js
@@ -12,6 +12,14 @@ this.ckan.module('data-viewer', function (jQuery) {
jQuery.proxyAll(this, /_on/);
this.el.on('load', this._onLoad);
this._FirefoxFix();
+ this.sandbox.subscribe('data-viewer-error', this._onDataViewerError);
+ },
+
+ _onDataViewerError: function(message) {
+ var parent = this.el.parent();
+ $('.data-viewer-error .collapse', parent).html(message);
+ $('.data-viewer-error', parent).removeClass('js-hide');
+ this.el.hide();
},
_onLoad: function() {
diff --git a/ckan/templates/dataviewer/snippets/data_preview.html b/ckan/templates/dataviewer/snippets/data_preview.html
index 48ce3b16e1c..d77593d6e04 100644
--- a/ckan/templates/dataviewer/snippets/data_preview.html
+++ b/ckan/templates/dataviewer/snippets/data_preview.html
@@ -3,8 +3,24 @@
{# images can be embedded directly #}
{% else %}
-
+
+ + {{ _('This resource can not be previewed at the moment.') }} + + {{ _('Click here for more information.') }} + +
+ + +