From 627f9e47c66d1b218bedf707058d4502b830ac42 Mon Sep 17 00:00:00 2001 From: James Allen Date: Tue, 29 Jul 2014 11:25:26 +0100 Subject: [PATCH 01/21] Bring back Prof. Lion --- services/web/public/img/lion-128.png | Bin 0 -> 10601 bytes services/web/public/stylesheets/app/editor.less | 9 ++++++++- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 services/web/public/img/lion-128.png diff --git a/services/web/public/img/lion-128.png b/services/web/public/img/lion-128.png new file mode 100644 index 0000000000000000000000000000000000000000..8660218b7b15437ae0070f86952cf8432aa34a08 GIT binary patch literal 10601 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 Date: Tue, 29 Jul 2014 11:35:56 +0100 Subject: [PATCH 02/21] Fix alignment of 'view all templates' --- services/web/app/views/templates/index.jade | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/services/web/app/views/templates/index.jade b/services/web/app/views/templates/index.jade index feade78f51..cd0717ba8e 100644 --- a/services/web/app/views/templates/index.jade +++ b/services/web/app/views/templates/index.jade @@ -47,10 +47,10 @@ block content div.caption h3.txt-middle #{template.name} - -if(tag.totalNumberOfTemplates > 4) - .row-fluid - .col-md-6.offset3.more-templates - a(href=tag.tagPagePath) View all #{tag.totalNumberOfTemplates} #{tag.name} templates » + -if(tag.totalNumberOfTemplates > 4) + .row + .col-md-12.text-center + a(href=tag.tagPagePath) View all #{tag.totalNumberOfTemplates} #{tag.name} templates » From 87aa860c87d9461e9e54f3c9680f7ccd8b197aff Mon Sep 17 00:00:00 2001 From: James Allen Date: Tue, 29 Jul 2014 12:29:00 +0100 Subject: [PATCH 03/21] Update about page css --- services/web/public/stylesheets/app/about-page.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/web/public/stylesheets/app/about-page.less b/services/web/public/stylesheets/app/about-page.less index 651e71ca53..f92d2fbf3c 100644 --- a/services/web/public/stylesheets/app/about-page.less +++ b/services/web/public/stylesheets/app/about-page.less @@ -3,6 +3,6 @@ .img-container { float: left; overflow: hidden; - margin: (@line-height-computed / 2) @line-height-computed @line-height-computed (@line-height-computed / 2); + margin: (@line-height-computed / 4) @line-height-computed @line-height-computed (@line-height-computed / 2); } } \ No newline at end of file From 4160101570f9d3063973bb61aa67061e5c965c24 Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Wed, 30 Jul 2014 10:44:46 +0100 Subject: [PATCH 04/21] moved got link status outside of the if so if they are not registered we can start the link process --- .../coffee/ide/dropbox/controllers/DropboxController.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/web/public/coffee/ide/dropbox/controllers/DropboxController.coffee b/services/web/public/coffee/ide/dropbox/controllers/DropboxController.coffee index 6307516b67..afe4be5c4c 100644 --- a/services/web/public/coffee/ide/dropbox/controllers/DropboxController.coffee +++ b/services/web/public/coffee/ide/dropbox/controllers/DropboxController.coffee @@ -38,10 +38,10 @@ define [ $timeout calculatePollTime, 60 * 1000 ide.socket.emit "getUserDropboxLinkStatus", user_id, (err, status)=> + $scope.dbState.gotLinkStatus = true if status.registered calculatePollTime() $scope.dbState.userIsLinkedToDropbox = true - $scope.dbState.gotLinkStatus = true cachedState = $scope.dbState $scope.linkToDropbox = -> From 49258fe3dd34beb6825e122c2dd497fe07be362d Mon Sep 17 00:00:00 2001 From: James Allen Date: Wed, 30 Jul 2014 15:44:03 +0100 Subject: [PATCH 05/21] Proxy to wiki --- .../Features/Wiki/WikiController.coffee | 34 +++++++ services/web/app/coffee/router.coffee | 3 + services/web/app/views/wiki/page.jade | 17 ++++ .../web/public/stylesheets/app/editor.less | 2 +- services/web/public/stylesheets/app/wiki.less | 92 +++++++++++++++++++ services/web/public/stylesheets/style.less | 1 + 6 files changed, 148 insertions(+), 1 deletion(-) create mode 100644 services/web/app/coffee/Features/Wiki/WikiController.coffee create mode 100644 services/web/app/views/wiki/page.jade create mode 100644 services/web/public/stylesheets/app/wiki.less diff --git a/services/web/app/coffee/Features/Wiki/WikiController.coffee b/services/web/app/coffee/Features/Wiki/WikiController.coffee new file mode 100644 index 0000000000..4be6a960ea --- /dev/null +++ b/services/web/app/coffee/Features/Wiki/WikiController.coffee @@ -0,0 +1,34 @@ +request = require("request") +settings = require("settings-sharelatex") +logger = require("logger-sharelatex") +ErrorController = require "../Errors/ErrorController" + +module.exports = WikiController = + getPage: (req, res, next) -> + page = req.url.replace(/^\/learn/, "").replace(/^\//, "") + if page == "" + page = "Main_Page" + + wikiUrl = "#{settings.apis.wiki.url}/api.php" + + logger.log page: page, "proxying request to wiki" + + request { + url: wikiUrl + qs: { + page: page + action: "parse" + format: "json" + } + }, (err, response, data)-> + if response?.statusCode == 404 + return ErrorController.notFound(req, res, next) + try + data = JSON.parse(data) + catch err + logger.err err:err, data:data, "error parsing data from wiki" + logger.log data: data, "got response from wiki" + res.render "wiki/page", { + content: data.parse.text['*'] + title: data.parse.title + } diff --git a/services/web/app/coffee/router.coffee b/services/web/app/coffee/router.coffee index 83bec789aa..0fbb31e18c 100644 --- a/services/web/app/coffee/router.coffee +++ b/services/web/app/coffee/router.coffee @@ -37,6 +37,7 @@ PasswordResetRouter = require("./Features/PasswordReset/PasswordResetRouter") StaticPagesRouter = require("./Features/StaticPages/StaticPagesRouter") ChatController = require("./Features/Chat/ChatController") BlogController = require("./Features/Blog/BlogController") +WikiController = require("./Features/Wiki/WikiController") ConnectedUsersController = require("./Features/ConnectedUsers/ConnectedUsersController") logger = require("logger-sharelatex") @@ -162,6 +163,8 @@ module.exports = class Router app.get "/project/:Project_id/messages", SecurityManager.requestCanAccessProject, ChatController.getMessages app.post "/project/:Project_id/messages", SecurityManager.requestCanAccessProject, ChatController.sendMessage + + app.get /learn(\/.*)?/, WikiController.getPage #Admin Stuff app.get '/admin', SecurityManager.requestIsAdmin, AdminController.index diff --git a/services/web/app/views/wiki/page.jade b/services/web/app/views/wiki/page.jade new file mode 100644 index 0000000000..903d2a5097 --- /dev/null +++ b/services/web/app/views/wiki/page.jade @@ -0,0 +1,17 @@ +extends ../layout + +block content + .content + .container.wiki + .row + .col-lg-8.col-lg-offset-2.col-md-10.col-md-offset-1 + .page-header + - if (title == "Main Page") + h1 ShareLaTeX Documentation + - else + h1 #{title} + a(href="/learn") + i.fa.fa-long-arrow-left + |   Back to all articles + + | !{content} \ No newline at end of file diff --git a/services/web/public/stylesheets/app/editor.less b/services/web/public/stylesheets/app/editor.less index ac985ff76d..6c0da22dc5 100644 --- a/services/web/public/stylesheets/app/editor.less +++ b/services/web/public/stylesheets/app/editor.less @@ -65,7 +65,7 @@ left: 50%; width: 400px; margin-left: -200px; - margin-top: -140px; + margin-top: -200px; } } diff --git a/services/web/public/stylesheets/app/wiki.less b/services/web/public/stylesheets/app/wiki.less new file mode 100644 index 0000000000..4cbf995de8 --- /dev/null +++ b/services/web/public/stylesheets/app/wiki.less @@ -0,0 +1,92 @@ +.wiki { + .page-header { + a { + font-size: 0.8em; + line-height: 1; + } + } + + .editsection { + display: none; + } + + table { + th, td { + padding: (@line-height-computed / 4) (@line-height-computed / 2); + border-bottom: 1px solid @gray-lighter; + } + th { + font-weight: 700; + text-align: left; + font-family: @font-family-serif; + } + margin-bottom: @line-height-computed / 2; + } + + .example { + .code { + pre { + background-color: @gray-lightest; + border-radius: 6px; + padding: (@line-height-computed / 2); + white-space: pre-wrap; + margin: 0; + } + } + .output { + img { + width: auto !important; + height: auto !important; + max-width: 100% !important; + box-shadow: 0 1px 3px @gray-light; + border-radius: 6px; + } + } + } + @media (min-width: 1190px) { + .example { + margin-right: -200px; + } + } + + /**/ + +} \ No newline at end of file diff --git a/services/web/public/stylesheets/style.less b/services/web/public/stylesheets/style.less index f05070664b..1aac74dcd4 100755 --- a/services/web/public/stylesheets/style.less +++ b/services/web/public/stylesheets/style.less @@ -65,3 +65,4 @@ @import "app/blog.less"; @import "app/features.less"; @import "app/templates.less"; +@import "app/wiki.less"; From 94bcfc0eac131c3efbc4b2dce461b7ee11be4467 Mon Sep 17 00:00:00 2001 From: James Allen Date: Wed, 30 Jul 2014 15:56:27 +0100 Subject: [PATCH 06/21] Only store host, not path in wiki URL setting --- services/web/app/coffee/Features/Wiki/WikiController.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/web/app/coffee/Features/Wiki/WikiController.coffee b/services/web/app/coffee/Features/Wiki/WikiController.coffee index 4be6a960ea..e970cfa781 100644 --- a/services/web/app/coffee/Features/Wiki/WikiController.coffee +++ b/services/web/app/coffee/Features/Wiki/WikiController.coffee @@ -9,7 +9,7 @@ module.exports = WikiController = if page == "" page = "Main_Page" - wikiUrl = "#{settings.apis.wiki.url}/api.php" + wikiUrl = "#{settings.apis.wiki.url}/learn-scripts/api.php" logger.log page: page, "proxying request to wiki" From 42c63dd5a2db3097b47dbac3a3e3b744e9991458 Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Thu, 31 Jul 2014 11:09:17 +0100 Subject: [PATCH 07/21] equals checks work, uses id now as well. Taken from: http://blog.brunoscopelliti.com/angularjs-directive-to-check-that-passwords-match the old one from SO does not seem to work any more --- services/web/app/views/user/settings.jade | 3 ++- .../web/public/coffee/directives/equals.coffee | 18 +++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/services/web/app/views/user/settings.jade b/services/web/app/views/user/settings.jade index ef23470149..2934748b01 100644 --- a/services/web/app/views/user/settings.jade +++ b/services/web/app/views/user/settings.jade @@ -70,6 +70,7 @@ block content .form-group label(for='newPassword1') New Password input.form-control( + id='newPassword1', type='password', name='newPassword1', placeholder='*********', @@ -85,7 +86,7 @@ block content name='newPassword2', placeholder='*********', ng-model="newPassword2", - equals="{{newPassword1}}" + equals="newPassword1" ) span.small.text-primary(ng-show="changePasswordForm.newPassword2.$invalid && changePasswordForm.newPassword2.$dirty") | Doesn't match diff --git a/services/web/public/coffee/directives/equals.coffee b/services/web/public/coffee/directives/equals.coffee index e41a39a322..7d925fde1c 100644 --- a/services/web/public/coffee/directives/equals.coffee +++ b/services/web/public/coffee/directives/equals.coffee @@ -2,14 +2,14 @@ define [ "base" ], (App) -> - App.directive 'equals', () -> + App.directive "equals", [-> return { - require: "ngModel", - link: (scope, element, attrs, ngModel) -> - scope.$watch attrs.ngModel, () -> validate() - attrs.$observe 'equals', () -> validate() - - validate = () -> - equal = (attrs.equals == ngModel.$viewValue) - ngModel.$setValidity('areEqual', equal) + require: "ngModel" + link: (scope, elem, attrs, ctrl) -> + firstField = "#" + attrs.equals + elem.add(firstField).on "keyup", -> + scope.$apply -> + equal = elem.val() == $(firstField).val() + ctrl.$setValidity "areEqual", equal } + ] \ No newline at end of file From f886f19429d533c9237909ac26874e7645c870d2 Mon Sep 17 00:00:00 2001 From: James Allen Date: Thu, 31 Jul 2014 12:37:37 +0100 Subject: [PATCH 08/21] Keep root doc list in sync with file tree updates --- .../coffee/ide/file-tree/FileTreeManager.coffee | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/services/web/public/coffee/ide/file-tree/FileTreeManager.coffee b/services/web/public/coffee/ide/file-tree/FileTreeManager.coffee index 167efa3005..547749cc89 100644 --- a/services/web/public/coffee/ide/file-tree/FileTreeManager.coffee +++ b/services/web/public/coffee/ide/file-tree/FileTreeManager.coffee @@ -23,49 +23,55 @@ define [ _bindToSocketEvents: () -> @ide.socket.on "reciveNewDoc", (parent_folder_id, doc) => parent_folder = @findEntityById(parent_folder_id) or @$scope.rootFolder - @$scope.$apply () -> + @$scope.$apply () => parent_folder.children.push { name: doc.name id: doc._id type: "doc" } + @recalculateDocList() @ide.socket.on "reciveNewFile", (parent_folder_id, file) => parent_folder = @findEntityById(parent_folder_id) or @$scope.rootFolder - @$scope.$apply () -> + @$scope.$apply () => parent_folder.children.push { name: file.name id: file._id type: "file" } - + @recalculateDocList() + @ide.socket.on "reciveNewFolder", (parent_folder_id, folder) => parent_folder = @findEntityById(parent_folder_id) or @$scope.rootFolder - @$scope.$apply () -> + @$scope.$apply () => parent_folder.children.push { name: folder.name id: folder._id type: "folder" children: [] } + @recalculateDocList() @ide.socket.on "reciveEntityRename", (entity_id, name) => entity = @findEntityById(entity_id) return if !entity? - @$scope.$apply () -> + @$scope.$apply () => entity.name = name + @recalculateDocList() @ide.socket.on "removeEntity", (entity_id) => entity = @findEntityById(entity_id) return if !entity? @$scope.$apply () => @_deleteEntityFromScope entity + @recalculateDocList() @ide.socket.on "reciveEntityMove", (entity_id, folder_id) => entity = @findEntityById(entity_id) folder = @findEntityById(folder_id) @$scope.$apply () => @_moveEntityInScope(entity, folder) + @recalculateDocList() selectEntity: (entity) -> @selected_entity_id = entity.id # For reselecting after a reconnect From 330d4f5a16e0b62f915e4920fb1ca15d77b65460 Mon Sep 17 00:00:00 2001 From: James Allen Date: Thu, 31 Jul 2014 12:39:23 +0100 Subject: [PATCH 09/21] Redirect to cloned project after copy --- .../ide/clone/controllers/CloneProjectModalController.coffee | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/services/web/public/coffee/ide/clone/controllers/CloneProjectModalController.coffee b/services/web/public/coffee/ide/clone/controllers/CloneProjectModalController.coffee index c8d5d3268c..5c7cc55ea3 100644 --- a/services/web/public/coffee/ide/clone/controllers/CloneProjectModalController.coffee +++ b/services/web/public/coffee/ide/clone/controllers/CloneProjectModalController.coffee @@ -22,8 +22,7 @@ define [ $scope.state.inflight = true cloneProject($scope.inputs.projectName) .then (data) -> - console.log "DATA", data - #window.location = "/project/#{data.project_id}" + window.location = "/project/#{data.data.project_id}" $scope.cancel = () -> $modalInstance.dismiss('cancel') \ No newline at end of file From e1c14b0cf82477f20a21481e9ae72ad36e722f01 Mon Sep 17 00:00:00 2001 From: James Allen Date: Thu, 31 Jul 2014 12:42:06 +0100 Subject: [PATCH 10/21] Mask iframe so resizer can go over native PDF --- services/web/app/views/project/editor/editor.jade | 1 + 1 file changed, 1 insertion(+) diff --git a/services/web/app/views/project/editor/editor.jade b/services/web/app/views/project/editor/editor.jade index 4a327dc40a..624471690d 100644 --- a/services/web/app/views/project/editor/editor.jade +++ b/services/web/app/views/project/editor/editor.jade @@ -2,6 +2,7 @@ div.full-size( ng-show="ui.view == 'editor'" layout="pdf" layout-disabled="ui.pdfLayout != 'sideBySide'" + mask-iframes-on-resize="true" resize-on="layout:main:resize" resize-proportionally="true" initial-size-east="'50%'" From e6c04bbeeb11ab78f359b4be7edca81e417fbcf4 Mon Sep 17 00:00:00 2001 From: James Allen Date: Thu, 31 Jul 2014 12:46:44 +0100 Subject: [PATCH 11/21] Clear message from chat box immediately on pressing enter --- .../coffee/ide/chat/controllers/ChatController.coffee | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/services/web/public/coffee/ide/chat/controllers/ChatController.coffee b/services/web/public/coffee/ide/chat/controllers/ChatController.coffee index ec06f3ca64..0089783cd4 100644 --- a/services/web/public/coffee/ide/chat/controllers/ChatController.coffee +++ b/services/web/public/coffee/ide/chat/controllers/ChatController.coffee @@ -21,10 +21,10 @@ define [ ide.$scope.$broadcast "chat:resetUnreadMessages" $scope.sendMessage = -> + message = $scope.newMessageContent + $scope.newMessageContent = "" chatMessages - .sendMessage $scope.newMessageContent - .then () -> - $scope.newMessageContent = "" + .sendMessage message $scope.loadMoreMessages = -> chatMessages.loadMoreMessages() From bc2147993adabd78cdea879dfc3831fb9dd37f63 Mon Sep 17 00:00:00 2001 From: James Allen Date: Thu, 31 Jul 2014 13:03:34 +0100 Subject: [PATCH 12/21] Show project path in Dropbox folder --- services/web/app/views/project/editor/dropbox.jade | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/services/web/app/views/project/editor/dropbox.jade b/services/web/app/views/project/editor/dropbox.jade index 40d2cce851..b4200ab6c0 100644 --- a/services/web/app/views/project/editor/dropbox.jade +++ b/services/web/app/views/project/editor/dropbox.jade @@ -5,7 +5,7 @@ script(type="text/ng-template", id="dropboxModalTemplate") data-dismiss="modal" ng-click="cancel()" ) × - h3 Dropbox link + h3 Dropbox Sync .modal-body.modal-body-share div(ng-show="dbState.gotLinkStatus") @@ -21,9 +21,12 @@ script(type="text/ng-template", id="dropboxModalTemplate") div(ng-show="dbState.hasDropboxFeature && dbState.userIsLinkedToDropbox") progressbar.progress-striped.active(value='dbState.percentageLeftTillNextPoll', type="info") - span + p strong {{dbState.minsTillNextPoll}} minutes - span until dropbox is next checked for changes. + span until Dropbox is next checked for changes. + p.small + | This project will appear in your Dropbox folder at + strong Dropbox/sharelatex/{{ project.name }} div.text-center(ng-hide="dbState.hasDropboxFeature") p You need to upgrade your account to link to dropbox. @@ -33,8 +36,8 @@ script(type="text/ng-template", id="dropboxModalTemplate") | Please refresh this page after starting your free trial. div(ng-hide="dbState.gotLinkStatus") - span.small   checking dropbox status   i.fa.fa-refresh.fa-spin + span.small   Checking dropbox status From 13c6fcb8d908cc27f0f7c352f2e6a3a3987f6d96 Mon Sep 17 00:00:00 2001 From: James Allen Date: Thu, 31 Jul 2014 13:12:24 +0100 Subject: [PATCH 13/21] Handle encoded parameters in request URL to wiki --- services/web/app/coffee/Features/Wiki/WikiController.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/web/app/coffee/Features/Wiki/WikiController.coffee b/services/web/app/coffee/Features/Wiki/WikiController.coffee index e970cfa781..624e4e8917 100644 --- a/services/web/app/coffee/Features/Wiki/WikiController.coffee +++ b/services/web/app/coffee/Features/Wiki/WikiController.coffee @@ -16,7 +16,7 @@ module.exports = WikiController = request { url: wikiUrl qs: { - page: page + page: decodeURI(page) action: "parse" format: "json" } From be725c50ba7fffd89f1f35422f5578072648d855 Mon Sep 17 00:00:00 2001 From: James Allen Date: Thu, 31 Jul 2014 14:20:56 +0100 Subject: [PATCH 14/21] Make right click on menus behave like native right click --- .../app/views/project/editor/file-tree.jade | 63 +++++++++---------- .../coffee/directives/rightClick.coffee | 12 ++++ services/web/public/coffee/ide.coffee | 2 + .../public/js/libs/ng-context-menu-0.1.4.js | 2 +- 4 files changed, 43 insertions(+), 36 deletions(-) create mode 100644 services/web/public/coffee/directives/rightClick.coffee diff --git a/services/web/app/views/project/editor/file-tree.jade b/services/web/app/views/project/editor/file-tree.jade index 8753bc82d7..4cf93468fd 100644 --- a/services/web/app/views/project/editor/file-tree.jade +++ b/services/web/app/views/project/editor/file-tree.jade @@ -134,15 +134,15 @@ script(type='text/ng-template', id='entityListItemTemplate') ul.dropdown-menu.dropdown-menu-right li a( - href="#" - prevent-default="click" + href ng-click="startRenaming()" + right-click="startRenaming()" ) Rename li a( - href="#" - prevent-default="click" + href ng-click="openDeleteModal()" + right-click="openDeleteModal()" ) Delete div.dropdown.context-menu( @@ -152,17 +152,15 @@ script(type='text/ng-template', id='entityListItemTemplate') ul.dropdown-menu li a( - href="#" - prevent-default="click" - stop-propagation="click" + href ng-click="startRenaming()" + right-click="startRenaming()" ) Rename li a( - href="#" - prevent-default="click" - stop-propagation="click" + href ng-click="openDeleteModal()" + right-click="openDeleteModal()" ) Delete @@ -218,34 +216,34 @@ script(type='text/ng-template', id='entityListItemTemplate') ul.dropdown-menu.dropdown-menu-right li a( - href="#" - prevent-default="click" + href ng-click="startRenaming()" + right-click="startRenaming()" ) Rename li a( - href="#" - prevent-default="click" + href ng-click="openDeleteModal()" + right-click="openDeleteModal()" ) Delete li.divider li a( - href="#" - prevent-default="click" + href ng-click="openNewDocModal()" + right-click="openNewDocModal()" ) New File li a( - href="#" - prevent-default="click" + href ng-click="openNewFolderModal()" + right-click="openNewFolderModal()" ) New Folder li a( - href="#" - prevent-default="click" + href ng-click="openUploadFileModal()" + right-click="openUploadFileModal()" ) Upload File .dropdown.context-menu( @@ -255,39 +253,34 @@ script(type='text/ng-template', id='entityListItemTemplate') ul.dropdown-menu li a( - href="#" - prevent-default="click" - stop-propagation="click" + href ng-click="startRenaming()" + right-click="startRenaming()" ) Rename li a( - href="#" - prevent-default="click" - stop-propagation="click" + href ng-click="openDeleteModal()" + right-click="openDeleteModal()" ) Delete li.divider li a( - href="#" - prevent-default="click" - stop-propagation="click" + href ng-click="openNewDocModal()" + right-click="openNewDocModal()" ) New File li a( - href="#" - prevent-default="click" - stop-propagation="click" + href ng-click="openNewFolderModal()" + right-click="openNewFolderModal()" ) New Folder li a( - href="#" - prevent-default="click" - stop-propagation="click" + href ng-click="openUploadFileModal()" + right-click="openUploadFileModal()" ) Upload File ul.list-unstyled( diff --git a/services/web/public/coffee/directives/rightClick.coffee b/services/web/public/coffee/directives/rightClick.coffee new file mode 100644 index 0000000000..d384fcf9cb --- /dev/null +++ b/services/web/public/coffee/directives/rightClick.coffee @@ -0,0 +1,12 @@ +define [ + "base" +], (App) -> + App.directive "rightClick", () -> + return { + restrict: "A", + link: (scope, element, attrs) -> + element.bind "contextmenu", (e) -> + e.preventDefault() + e.stopPropagation() + scope.$eval(attrs.rightClick) + } diff --git a/services/web/public/coffee/ide.coffee b/services/web/public/coffee/ide.coffee index 3adc1c9e53..561bfa344a 100644 --- a/services/web/public/coffee/ide.coffee +++ b/services/web/public/coffee/ide.coffee @@ -21,6 +21,8 @@ define [ "directives/fineUpload" "directives/scroll" "directives/onEnter" + "directives/stopPropagation" + "directives/rightClick" "filters/formatDate" "main/event-tracking" ], ( diff --git a/services/web/public/js/libs/ng-context-menu-0.1.4.js b/services/web/public/js/libs/ng-context-menu-0.1.4.js index a072ba0e27..29a7d202f8 100644 --- a/services/web/public/js/libs/ng-context-menu-0.1.4.js +++ b/services/web/public/js/libs/ng-context-menu-0.1.4.js @@ -61,7 +61,7 @@ angular ContextMenuService.container = angular.element($attrs.contextMenuContainer) } ContextMenuService.element = event.target; - console.log('set', ContextMenuService.element); + // console.log('set', ContextMenuService.element); event.preventDefault(); event.stopPropagation(); From 55ad2ce78d5afcf9f487a0009a8b8c6149579432 Mon Sep 17 00:00:00 2001 From: James Allen Date: Thu, 31 Jul 2014 16:26:02 +0100 Subject: [PATCH 15/21] Include contents page down side of wiki --- .../Features/Wiki/WikiController.coffee | 26 ++++++++++++------- services/web/app/views/wiki/page.jade | 13 +++++----- services/web/public/stylesheets/app/wiki.less | 17 +++++++++++- 3 files changed, 38 insertions(+), 18 deletions(-) diff --git a/services/web/app/coffee/Features/Wiki/WikiController.coffee b/services/web/app/coffee/Features/Wiki/WikiController.coffee index 624e4e8917..8e743a634c 100644 --- a/services/web/app/coffee/Features/Wiki/WikiController.coffee +++ b/services/web/app/coffee/Features/Wiki/WikiController.coffee @@ -8,27 +8,33 @@ module.exports = WikiController = page = req.url.replace(/^\/learn/, "").replace(/^\//, "") if page == "" page = "Main_Page" - - wikiUrl = "#{settings.apis.wiki.url}/learn-scripts/api.php" - logger.log page: page, "proxying request to wiki" + logger.log page: page, "getting page from wiki" + WikiController._getPageContent "Contents", (error, contents) -> + return next(error) if error? + WikiController._getPageContent page, (error, page) -> + return next(error) if error? + res.render "wiki/page", { + page: page + contents: contents + } + + _getPageContent: (page, callback = (error, data = { content: "", title: "" }) ->) -> request { - url: wikiUrl + url: "#{settings.apis.wiki.url}/learn-scripts/api.php" qs: { page: decodeURI(page) action: "parse" format: "json" } }, (err, response, data)-> - if response?.statusCode == 404 - return ErrorController.notFound(req, res, next) + return callback(err) if err? try data = JSON.parse(data) catch err logger.err err:err, data:data, "error parsing data from wiki" - logger.log data: data, "got response from wiki" - res.render "wiki/page", { - content: data.parse.text['*'] - title: data.parse.title + callback null, { + content: data?.parse?.text?['*'] + title: data?.parse?.title } diff --git a/services/web/app/views/wiki/page.jade b/services/web/app/views/wiki/page.jade index 903d2a5097..d55ce41695 100644 --- a/services/web/app/views/wiki/page.jade +++ b/services/web/app/views/wiki/page.jade @@ -4,14 +4,13 @@ block content .content .container.wiki .row - .col-lg-8.col-lg-offset-2.col-md-10.col-md-offset-1 + .col-xs-3.contents + | !{contents.content} + .col-xs-8.page .page-header - - if (title == "Main Page") + - if (page.title == "Main Page") h1 ShareLaTeX Documentation - else - h1 #{title} - a(href="/learn") - i.fa.fa-long-arrow-left - |   Back to all articles + h1 #{page.title} - | !{content} \ No newline at end of file + | !{page.content} \ No newline at end of file diff --git a/services/web/public/stylesheets/app/wiki.less b/services/web/public/stylesheets/app/wiki.less index 4cbf995de8..cd4022dd89 100644 --- a/services/web/public/stylesheets/app/wiki.less +++ b/services/web/public/stylesheets/app/wiki.less @@ -1,4 +1,19 @@ .wiki { + .contents { + ul { + padding: 0; + li { + font-size: 14px; + list-style: none; + margin-bottom: 6px; + } + } + + h2 { + font-size: 18px; + } + } + .page-header { a { font-size: 0.8em; @@ -43,7 +58,7 @@ } } } - @media (min-width: 1190px) { + @media (min-width: 1360px) { .example { margin-right: -200px; } From 2ea7dee68299b53e6c25b7f045c2d30679e30cfd Mon Sep 17 00:00:00 2001 From: James Allen Date: Fri, 1 Aug 2014 08:51:01 +0100 Subject: [PATCH 16/21] Add card around wiki content to make it stand out --- services/web/app/views/wiki/page.jade | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/services/web/app/views/wiki/page.jade b/services/web/app/views/wiki/page.jade index d55ce41695..63fb3e65fb 100644 --- a/services/web/app/views/wiki/page.jade +++ b/services/web/app/views/wiki/page.jade @@ -1,16 +1,17 @@ extends ../layout block content - .content + .content.content-alt .container.wiki .row .col-xs-3.contents | !{contents.content} - .col-xs-8.page - .page-header - - if (page.title == "Main Page") - h1 ShareLaTeX Documentation - - else - h1 #{page.title} - - | !{page.content} \ No newline at end of file + .col-xs-9.page + .card + .page-header + - if (page.title == "Main Page") + h1 ShareLaTeX Documentation + - else + h1 #{page.title} + + | !{page.content} \ No newline at end of file From a7cf8d6b0a4173ab1c59c5ef17041c4239d95f6a Mon Sep 17 00:00:00 2001 From: James Allen Date: Tue, 5 Aug 2014 17:08:38 +0100 Subject: [PATCH 17/21] Sort out title of wiki --- .../coffee/Features/StaticPages/HomeController.coffee | 9 ++------- .../app/coffee/Features/User/UserPagesController.coffee | 2 +- .../web/app/coffee/Features/Wiki/WikiController.coffee | 6 ++++++ services/web/app/views/layout.jade | 8 ++++---- services/web/app/views/wiki/page.jade | 5 +---- 5 files changed, 14 insertions(+), 16 deletions(-) diff --git a/services/web/app/coffee/Features/StaticPages/HomeController.coffee b/services/web/app/coffee/Features/StaticPages/HomeController.coffee index ab60616d3e..3e9ac8439c 100755 --- a/services/web/app/coffee/Features/StaticPages/HomeController.coffee +++ b/services/web/app/coffee/Features/StaticPages/HomeController.coffee @@ -16,16 +16,11 @@ module.exports = HomeController = else res.redirect '/project' else - if homepageExists - res.render 'external/home', - title: 'ShareLaTeX.com' - else - res.redirect "/login" + HomeController.home(req, res) home: (req, res)-> if homepageExists - res.render 'external/home', - title: 'ShareLaTeX.com' + res.render 'external/home' else res.redirect "/login" diff --git a/services/web/app/coffee/Features/User/UserPagesController.coffee b/services/web/app/coffee/Features/User/UserPagesController.coffee index c082440e76..b3041bfa7a 100644 --- a/services/web/app/coffee/Features/User/UserPagesController.coffee +++ b/services/web/app/coffee/Features/User/UserPagesController.coffee @@ -34,7 +34,7 @@ module.exports = dropboxHandler.getUserRegistrationStatus user._id, (err, status)-> userIsRegisteredWithDropbox = !err? and status.registered res.render 'user/settings', - title:'Your settings', + title:'Account Settings', userHasDropboxFeature: user.features.dropbox userIsRegisteredWithDropbox: userIsRegisteredWithDropbox user: user, diff --git a/services/web/app/coffee/Features/Wiki/WikiController.coffee b/services/web/app/coffee/Features/Wiki/WikiController.coffee index 8e743a634c..69dda8bba0 100644 --- a/services/web/app/coffee/Features/Wiki/WikiController.coffee +++ b/services/web/app/coffee/Features/Wiki/WikiController.coffee @@ -15,9 +15,15 @@ module.exports = WikiController = return next(error) if error? WikiController._getPageContent page, (error, page) -> return next(error) if error? + if page.title == "Main Page" + title = "Documentation" + else + title = page.title + res.render "wiki/page", { page: page contents: contents + title: title } _getPageContent: (page, callback = (error, data = { content: "", title: "" }) ->) -> diff --git a/services/web/app/views/layout.jade b/services/web/app/views/layout.jade index 0f38f197ca..daa8701c60 100644 --- a/services/web/app/views/layout.jade +++ b/services/web/app/views/layout.jade @@ -3,10 +3,10 @@ html(itemscope, itemtype='http://schema.org/Product') block vars head - - if (typeof(priority_title) !== "undefined" && priority_title) - title= title + ' - Online LaTeX Editor ShareLaTeX' - - else - title= 'Online LaTeX Editor ShareLaTeX - ' +title + -if (typeof(title) == "undefined") + title ShareLaTeX, the Online LaTeX Editor + -else + title= title + ' - ShareLaTeX, the Online LaTeX Editor' link(rel="icon", href="/favicon.ico") link(rel='stylesheet', href='/stylesheets/style.css?fingerprint='+fingerprint('/stylesheets/style.css')) link(href="//netdna.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css",rel="stylesheet") diff --git a/services/web/app/views/wiki/page.jade b/services/web/app/views/wiki/page.jade index 63fb3e65fb..d457325b41 100644 --- a/services/web/app/views/wiki/page.jade +++ b/services/web/app/views/wiki/page.jade @@ -9,9 +9,6 @@ block content .col-xs-9.page .card .page-header - - if (page.title == "Main Page") - h1 ShareLaTeX Documentation - - else - h1 #{page.title} + h1 #{title} | !{page.content} \ No newline at end of file From 0111d699a38d9eb6096fad941aab7dfc3ff7c0ff Mon Sep 17 00:00:00 2001 From: James Allen Date: Tue, 5 Aug 2014 17:10:24 +0100 Subject: [PATCH 18/21] Move sort click action to just the header text, not select all input --- .../web/app/views/project/list/project-list.jade | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/services/web/app/views/project/list/project-list.jade b/services/web/app/views/project/list/project-list.jade index 14ab4fc3ce..3d82d4c550 100644 --- a/services/web/app/views/project/list/project-list.jade +++ b/services/web/app/views/project/list/project-list.jade @@ -118,18 +118,18 @@ ) li.container-fluid .row - .col-xs-6(ng-click="changePredicate('name')") + .col-xs-6 input.select-all( select-all, type="checkbox" ) - span.header.clickable Title + span.header.clickable(ng-click="changePredicate('name')") Title i.tablesort.fa(ng-class="getSortIconClass('name')") - .col-xs-2(ng-click="changePredicate('accessLevel')") - span.header.clickable Owner + .col-xs-2 + span.header.clickable(ng-click="changePredicate('accessLevel')") Owner i.tablesort.fa(ng-class="getSortIconClass('accessLevel')") - .col-xs-4(ng-click="changePredicate('lastUpdated')") - span.header.clickable Last Modified + .col-xs-4 + span.header.clickable(ng-click="changePredicate('lastUpdated')") Last Modified i.tablesort.fa(ng-class="getSortIconClass('lastUpdated')") li.project_entry.container-fluid( ng-repeat="project in visibleProjects | orderBy:predicate:reverse", From 07a2955341625f92337ec22e54f7207f95a1d495 Mon Sep 17 00:00:00 2001 From: James Allen Date: Tue, 5 Aug 2014 17:16:34 +0100 Subject: [PATCH 19/21] Add in timeout documentation link to error message --- services/web/app/views/project/editor/pdf.jade | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/services/web/app/views/project/editor/pdf.jade b/services/web/app/views/project/editor/pdf.jade index 0af9b60425..6f218d4aa2 100644 --- a/services/web/app/views/project/editor/pdf.jade +++ b/services/web/app/views/project/editor/pdf.jade @@ -83,11 +83,14 @@ div.full-size.pdf(ng-controller="PdfController") strong Server Error. span Sorry, something went wrong and your project could not be compiled. Please try again in a few moments. - .alert.alert-danger(ng-show="pdf.timedout") - strong Timed out. - span Sorry, your compile was taking too long and timed out. - | This may be due to a large number of high-res images, or lots of complicated diagrams. - | Please try to make your document simpler, or contact support for help. + .alert.alert-danger(ng-show="pdf.timedout") + p + strong Your compile timed out. + | Sorry, your compile was taking too long and timed out. + | This may be due to a problem with your LaTeX code, or too many high-res images. + p + a.text-info(href="https://www.sharelatex.com/learn/Debugging_Compilation_timeout_errors", target="_blank") + | Please see our help guide for more information. .pdf-logs(ng-show="(pdf.view == 'logs' || pdf.failure) && !pdf.error && !pdf.timeout && !pdf.uncompiled") .alert.alert-success(ng-show="pdf.logEntries.all.length == 0") From dc54fe3d2e0e1243e531b75fa8e680fe060e4bc4 Mon Sep 17 00:00:00 2001 From: James Allen Date: Wed, 6 Aug 2014 11:50:19 +0100 Subject: [PATCH 20/21] Fix Smoke test to use new title --- services/web/test/smoke/coffee/SmokeTests.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/web/test/smoke/coffee/SmokeTests.coffee b/services/web/test/smoke/coffee/SmokeTests.coffee index e102d0ec05..2408b3144f 100644 --- a/services/web/test/smoke/coffee/SmokeTests.coffee +++ b/services/web/test/smoke/coffee/SmokeTests.coffee @@ -66,7 +66,7 @@ describe "Opening", -> }, (error, response, body) -> expect(error, "smoke test: error returned in getting project list").to.not.exist expect(response.statusCode, "smoke test: response code is not 200 getting project list").to.equal(200) - expect(!!body.match("Your Projects - Online LaTeX Editor ShareLaTeX"), "smoke test: body does not have correct title").to.equal true + expect(!!body.match("Your Projects - ShareLaTeX, the Online LaTeX Editor"), "smoke test: body does not have correct title").to.equal true expect(!!body.match("ProjectPageController"), "smoke test: body does not have correct angular controller").to.equal true done() From d0e51fb637c69473bfe3c100e23377829949663f Mon Sep 17 00:00:00 2001 From: James Allen Date: Wed, 6 Aug 2014 15:49:40 +0100 Subject: [PATCH 21/21] Fix context menu in firefox on windows --- services/web/public/js/ace/ace.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/web/public/js/ace/ace.js b/services/web/public/js/ace/ace.js index ef80d363f0..818cd4b7a8 100644 --- a/services/web/public/js/ace/ace.js +++ b/services/web/public/js/ace/ace.js @@ -2313,14 +2313,14 @@ var TextInput = function(parentNode, host) { } }, 0); } - if (!useragent.isGecko || useragent.isMac) { + // if (!useragent.isGecko || useragent.isMac) { var onContextMenu = function(e) { host.textInput.onContextMenu(e); onContextMenuClose(); }; event.addListener(host.renderer.scroller, "contextmenu", onContextMenu); event.addListener(text, "contextmenu", onContextMenu); - } + // } }; exports.TextInput = TextInput;