Преглед изворни кода

If image preview fails to load, just show the "no preview" message

Shane Kilkelly пре 10 година
родитељ
комит
9738703424

+ 7 - 1
services/web/app/views/project/editor/binary-file.jade

@@ -4,15 +4,21 @@ div.binary-file.full-size(
 	ng-if="openFile"
 )
 	img(
+		ng-show="!failedLoad"
 		ng-src="/project/{{ project_id }}/file/{{ openFile.id }}"
 		ng-if="['png', 'jpg', 'jpeg', 'gif'].indexOf(extension(openFile)) > -1"
+		onerror="sl_binaryFilePreviewError()"
+		onabort="sl_binaryFilePreviewError()"
 	)
 	img(
+		ng-show="!failedLoad"
 		ng-src="/project/{{ project_id }}/file/{{ openFile.id }}?format=png"
 		ng-if="['pdf', 'eps'].indexOf(extension(openFile)) > -1"
+		onerror="sl_binaryFilePreviewError()"
+		onabort="sl_binaryFilePreviewError()"
 	)
 	p.no-preview(
-		ng-if="['png', 'jpg', 'jpeg', 'gif', 'pdf', 'eps'].indexOf(extension(openFile)) == -1"
+		ng-if="failedLoad || ['png', 'jpg', 'jpeg', 'gif', 'pdf', 'eps'].indexOf(extension(openFile)) == -1"
 	) #{translate("no_preview_available")}
 	a.btn.btn-info(
 		ng-href="/project/{{ project_id }}/file/{{ openFile.id }}"

+ 8 - 1
services/web/public/coffee/ide/binary-files/controllers/BinaryFileController.coffee

@@ -2,6 +2,13 @@ define [
 	"base"
 ], (App) ->
 	App.controller "BinaryFileController", ["$scope", ($scope) ->
+
+		$scope.failedLoad = false
+
+		window.sl_binaryFilePreviewError = () =>
+			$scope.failedLoad = true
+			$scope.$apply()
+
 		$scope.extension = (file) ->
 			return file.name.split(".").pop()?.toLowerCase()
-	]
+	]