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.') }} + +

+

+

+ + + {{ _('Download resource') }} + +

+
+ {% endif %} - \ No newline at end of file + diff --git a/ckanext/reclinepreview/theme/public/preview_recline.js b/ckanext/reclinepreview/theme/public/preview_recline.js index 1a45848569e..574d717db99 100644 --- a/ckanext/reclinepreview/theme/public/preview_recline.js +++ b/ckanext/reclinepreview/theme/public/preview_recline.js @@ -36,10 +36,7 @@ this.ckan.module('reclinepreview', function (jQuery, _) { function showError(msg){ msg = msg || _('error loading preview'); - return self.el - .append('
') - .addClass('alert alert-error fade in') - .html(msg); + window.parent.ckan.pubsub.publish('data-viewer-error', msg); } recline.Backend.DataProxy.timeout = 10000; @@ -87,14 +84,12 @@ this.ckan.module('reclinepreview', function (jQuery, _) { errorMsg = this.options.i18n.errorLoadingPreview + ': ' +this.options.i18n.errorDataProxy; dataset.fetch() .done(function(dataset){ - dataset.bind('query:fail', function (error) { jQuery('.data-view-container', self.el).hide(); jQuery('.header', self.el).hide(); }); self.initializeDataExplorer(dataset); - jQuery('.recline-query-editor .text-query').hide(); }) .fail(function(error){ if (error.message) errorMsg += ' (' + error.message + ')';