Shane Kilkelly 10 лет назад
Родитель
Сommit
eae82a2b20

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

@@ -10,6 +10,7 @@ div.binary-file.full-size(
 		onerror="sl_binaryFilePreviewError()"
 		onerror="sl_binaryFilePreviewError()"
 		onabort="sl_binaryFilePreviewError()"
 		onabort="sl_binaryFilePreviewError()"
 	)
 	)
+
 	img(
 	img(
 		ng-show="!failedLoad"
 		ng-show="!failedLoad"
 		ng-src="/project/{{ project_id }}/file/{{ openFile.id }}?format=png"
 		ng-src="/project/{{ project_id }}/file/{{ openFile.id }}?format=png"
@@ -17,9 +18,24 @@ div.binary-file.full-size(
 		onerror="sl_binaryFilePreviewError()"
 		onerror="sl_binaryFilePreviewError()"
 		onabort="sl_binaryFilePreviewError()"
 		onabort="sl_binaryFilePreviewError()"
 	)
 	)
+	
+	p(
+		ng-if="(['bib'].indexOf(extension(openFile)) > -1) && !bibtex.error" 
+		ng-init="loadBibtexFilePreview()"
+	)
+		div(ng-if="bibtex.loading")
+			| #{translate('loading')}...
+		div.bib-preview(ng-if="!bibtex.loading && !bibtex.error")
+			div.scroll-container
+				p
+					| {{ bibtexPreview.data }}
+				p
+					| ...
+	
 	p.no-preview(
 	p.no-preview(
-		ng-if="failedLoad || ['png', 'jpg', 'jpeg', 'gif', 'pdf', 'eps'].indexOf(extension(openFile)) == -1"
+		ng-if="failedLoad || bibtex.error || ['bib', 'png', 'jpg', 'jpeg', 'gif', 'pdf', 'eps'].indexOf(extension(openFile)) == -1"
 	) #{translate("no_preview_available")}
 	) #{translate("no_preview_available")}
+
 	a.btn.btn-info(
 	a.btn.btn-info(
 		ng-href="/project/{{ project_id }}/file/{{ openFile.id }}"
 		ng-href="/project/{{ project_id }}/file/{{ openFile.id }}"
 	) #{translate("download")} {{ openFile.name }}
 	) #{translate("download")} {{ openFile.name }}

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

@@ -1,7 +1,12 @@
 define [
 define [
 	"base"
 	"base"
 ], (App) ->
 ], (App) ->
-	App.controller "BinaryFileController", ["$scope", "$rootScope", ($scope, $rootScope) ->
+	App.controller "BinaryFileController", ["$scope", "$rootScope", "$http", "$timeout", ($scope, $rootScope, $http, $timeout) ->
+
+		$scope.bibtexPreview =
+			loading: false
+			error: false
+			data: ""
 
 
 		$scope.failedLoad = false
 		$scope.failedLoad = false
 		$rootScope.$on 'entity:selected', () ->
 		$rootScope.$on 'entity:selected', () ->
@@ -13,4 +18,31 @@ define [
 
 
 		$scope.extension = (file) ->
 		$scope.extension = (file) ->
 			return file.name.split(".").pop()?.toLowerCase()
 			return file.name.split(".").pop()?.toLowerCase()
+
+		$scope.loadBibtexFilePreview = () ->
+			url = "/project/#{project_id}/file/#{$scope.openFile.id}?range=0-5000"
+			$scope.bibtexPreview.loading = true
+			$http.get(url)
+				.success (data) ->
+					$scope.bibtexPreview.loading = false
+					$scope.bibtexPreview.error = false
+					try
+						# remove last partial line
+						data = data.replace(/\n.*$/, '')
+					finally
+						$scope.bibtexPreview.data = data
+					$timeout($scope.setHeight, 0)
+				.error (err) ->
+					$scope.bibtexPreview.error = true
+					$scope.bibtexPreview.loading = false
+
+		$scope.setHeight = () ->
+			# Behold, a ghastly hack
+			guide = document.querySelector('.file-tree-inner')
+			table_wrap = document.querySelector('.bib-preview .scroll-container')
+			if table_wrap
+				desired_height = guide.offsetHeight - 60
+				if table_wrap.offsetHeight > desired_height
+					table_wrap.style.height = desired_height + 'px'
+					table_wrap.style['max-height'] = desired_height + 'px'
 	]
 	]

+ 16 - 0
services/web/public/stylesheets/app/editor/binary-file.less

@@ -17,5 +17,21 @@
 		font-size: 24px;
 		font-size: 24px;
 		color: @gray;
 		color: @gray;
 	}
 	}
+	.bib-preview {
+		margin-bottom: 12px;
+		.scroll-container {
+			font-size: 0.8em;
+			line-height: 1.1em;
+			overflow: auto;
+			border: 1px solid @gray-lighter;
+			padding-left: 12px;
+			padding-right: 12px;
+			padding-top: 8px;
+			padding-bottom: 8px;
+			text-align: left;
+			white-space: pre;
+			font-family: monospace;
+		}
+	}
 
 
 }
 }