diff --git a/services/web/app/views/project/editor.jade b/services/web/app/views/project/editor.jade index 5f261a0990..2193b2a927 100644 --- a/services/web/app/views/project/editor.jade +++ b/services/web/app/views/project/editor.jade @@ -85,7 +85,9 @@ block content "underscore": "../libs/underscore-1.3.3", "mathjax": "https://c328740.ssl.cf1.rackcdn.com/mathjax/latest/MathJax.js?config=TeX-AMS_HTML", "moment": "libs/moment-2.4.0", - "ace": "#{jsPath}ace" + "ace": "#{jsPath}ace", + "libs": "#{jsPath}libs", + "text": "#{jsPath}text" }, "urlArgs" : "fingerprint=#{fingerprint(jsPath + 'ide.js')}", "waitSeconds": 0, diff --git a/services/web/app/views/project/editor/editor.jade b/services/web/app/views/project/editor/editor.jade index a0630b9588..394d432c27 100644 --- a/services/web/app/views/project/editor/editor.jade +++ b/services/web/app/views/project/editor/editor.jade @@ -4,7 +4,7 @@ div.full-size( resize-on="layout:main:resize" ) .ui-layout-center - .loading-panel(ng-show="true || !editor.sharejs_doc || editor.opening") + .loading-panel(ng-show="!editor.sharejs_doc || editor.opening") i.fa.fa-spin.fa-refresh | Loading... diff --git a/services/web/app/views/project/editor/pdf.jade b/services/web/app/views/project/editor/pdf.jade index dd73044b6f..233a5bbee3 100644 --- a/services/web/app/views/project/editor/pdf.jade +++ b/services/web/app/views/project/editor/pdf.jade @@ -1,12 +1,19 @@ -.toolbar.toolbar-tall - a.btn.btn-primary( - href - ) - i.fa.fa-refresh - | Recompile - a( - href - tooltip="Logs" - tooltip-placement="bottom" - ) - i.fa.fa-file-text-o \ No newline at end of file +div.full-size(ng-controller="PdfController") + .toolbar.toolbar-tall + a.btn.btn-primary( + href + ) + i.fa.fa-refresh + | Recompile + a( + href + tooltip="Logs" + tooltip-placement="bottom" + ) + i.fa.fa-file-text-o + + .pdf-viewer + div( + pdfjs + pdf-src="pdf.url" + ) \ No newline at end of file diff --git a/services/web/public/ScalaByExample.pdf b/services/web/public/ScalaByExample.pdf new file mode 100644 index 0000000000..cc5a857591 Binary files /dev/null and b/services/web/public/ScalaByExample.pdf differ diff --git a/services/web/public/coffee/app/ide.coffee b/services/web/public/coffee/app/ide.coffee index e5395c9b4a..87bb3a78dc 100644 --- a/services/web/public/coffee/app/ide.coffee +++ b/services/web/public/coffee/app/ide.coffee @@ -6,6 +6,7 @@ define [ "ide/settings/SettingsManager" "ide/online-users/OnlineUsersManager" "ide/track-changes/TrackChangesManager" + "ide/pdf/PdfManager" "ide/directives/layout" "ide/services/ide" "directives/focus" @@ -20,6 +21,7 @@ define [ SettingsManager OnlineUsersManager TrackChangesManager + PdfManager ) -> App.controller "IdeController", ["$scope", "$timeout", "ide", ($scope, $timeout, ide) -> # Don't freak out if we're already in an apply callback @@ -52,6 +54,7 @@ define [ ide.settingsManager = new SettingsManager(ide, $scope) ide.onlineUsersManager = new OnlineUsersManager(ide, $scope) ide.trackChangesManager = new TrackChangesManager(ide, $scope) + ide.pdfManager = new PdfManager(ide, $scope) ] angular.bootstrap(document.body, ["SharelatexApp"]) \ No newline at end of file diff --git a/services/web/public/coffee/app/ide/pdf/PdfManager.coffee b/services/web/public/coffee/app/ide/pdf/PdfManager.coffee new file mode 100644 index 0000000000..07ae03ce58 --- /dev/null +++ b/services/web/public/coffee/app/ide/pdf/PdfManager.coffee @@ -0,0 +1,6 @@ +define [ + "ide/pdf/controllers/PdfController" + "ide/pdf/directives/pdfJs" +], () -> + class PdfManager + constructor: (@ide, @$scope) -> \ No newline at end of file diff --git a/services/web/public/coffee/app/ide/pdf/controllers/PdfController.coffee b/services/web/public/coffee/app/ide/pdf/controllers/PdfController.coffee new file mode 100644 index 0000000000..c60c14e55e --- /dev/null +++ b/services/web/public/coffee/app/ide/pdf/controllers/PdfController.coffee @@ -0,0 +1,7 @@ +define [ + "base" +], (App) -> + App.controller "PdfController", ["$scope", ($scope) -> + $scope.pdf = + url: "/ScalaByExample.pdf" + ] \ No newline at end of file diff --git a/services/web/public/coffee/app/ide/pdf/directives/pdfJs.coffee b/services/web/public/coffee/app/ide/pdf/directives/pdfJs.coffee new file mode 100644 index 0000000000..5011fb805f --- /dev/null +++ b/services/web/public/coffee/app/ide/pdf/directives/pdfJs.coffee @@ -0,0 +1,66 @@ +define [ + "base" + "libs/pdfListView/PdfListView" + "libs/pdfListView/TextLayerBuilder" + "libs/pdfListView/AnnotationsLayerBuilder" + "libs/pdfListView/HighlightsLayerBuilder" + "text!libs/pdfListView/TextLayer.css" + "text!libs/pdfListView/AnnotationsLayer.css" + "text!libs/pdfListView/HighlightsLayer.css" +], ( + App + PDFListView + TextLayerBuilder + AnnotationsLayerBuilder + HighlightsLayerBuilder + textLayerCss + annotationsLayerCss + highlightsLayerCss +) -> + if PDFJS? + PDFJS.workerSrc = "#{window.sharelatex.pdfJsWorkerPath}" + + style = $("") + style.text(textLayerCss + "\n" + annotationsLayerCss + "\n" + highlightsLayerCss) + $("body").append(style) + + App.directive "pdfjs", () -> + return { + scope: { + "pdfSrc": "=" + } + link: (scope, element, attrs) -> + pdfListView = new PDFListView element.find(".pdfjs-viewer")[0], + textLayerBuilder: TextLayerBuilder + annotationsLayerBuilder: AnnotationsLayerBuilder + highlightsLayerBuilder: HighlightsLayerBuilder + logLevel: PDFListView.Logger.DEBUG + pdfListView.listView.pageWidthOffset = 20 + pdfListView.listView.pageHeightOffset = 20 + + scope.loading = false + + onProgress = (progress) -> + scope.$apply () -> + scope.progress = Math.floor(progress.loaded/progress.total*100) + console.log "PROGRESS", scope.progress, progress.loaded, progress.total + + scope.$watch "pdfSrc", (url) -> + if url + scope.loading = true + scope.progress = 0 + + pdfListView + .loadPdf(url, onProgress) + .then () -> + scope.$apply () -> + scope.loading = false + delete scope.progress + + template: """ +
+