From c8ee803570d589b7ae642c9283d1a22c1269fcbb Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Tue, 6 Sep 2016 09:37:53 +0100 Subject: [PATCH 01/11] fix limits on sharing, account for both members and invites. --- .../ide/share/controllers/ShareProjectModalController.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/web/public/coffee/ide/share/controllers/ShareProjectModalController.coffee b/services/web/public/coffee/ide/share/controllers/ShareProjectModalController.coffee index 409608825e..48c6440718 100644 --- a/services/web/public/coffee/ide/share/controllers/ShareProjectModalController.coffee +++ b/services/web/public/coffee/ide/share/controllers/ShareProjectModalController.coffee @@ -19,7 +19,7 @@ define [ , 200 INFINITE_COLLABORATORS = -1 - $scope.$watch "project.members.length", (noOfMembers) -> + $scope.$watch "(project.members.length + project.invites.length)", (noOfMembers) -> allowedNoOfMembers = $scope.project.features.collaborators $scope.canAddCollaborators = noOfMembers < allowedNoOfMembers or allowedNoOfMembers == INFINITE_COLLABORATORS From afa910c32d3f34fd141e142b3bdfa6c42f2b7814 Mon Sep 17 00:00:00 2001 From: Brian Gough Date: Tue, 6 Sep 2016 11:19:14 +0100 Subject: [PATCH 02/11] turn on syntax check for all users --- .../web/public/coffee/ide/pdf/controllers/PdfController.coffee | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/services/web/public/coffee/ide/pdf/controllers/PdfController.coffee b/services/web/public/coffee/ide/pdf/controllers/PdfController.coffee index c79d654dbc..790f2384a1 100644 --- a/services/web/public/coffee/ide/pdf/controllers/PdfController.coffee +++ b/services/web/public/coffee/ide/pdf/controllers/PdfController.coffee @@ -74,7 +74,8 @@ define [ $scope.pdf.renderingError = true # abort compile if syntax checks fail - $scope.stop_on_validation_error = localStorage("stop_on_validation_error:#{$scope.project_id}") or ide.$scope?.user?.betaProgram + $scope.stop_on_validation_error = localStorage("stop_on_validation_error:#{$scope.project_id}") + $scope.stop_on_validation_error ?= true # turn on for all users by default $scope.$watch "stop_on_validation_error", (new_value, old_value) -> if new_value? and old_value != new_value localStorage("stop_on_validation_error:#{$scope.project_id}", new_value) From e412e662eef0107da7c3937f0a628d4459f28d47 Mon Sep 17 00:00:00 2001 From: James Allen Date: Tue, 6 Sep 2016 11:41:14 +0100 Subject: [PATCH 03/11] Set default compileTimeout to 3 minutes for onsite users --- services/web/config/settings.defaults.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/web/config/settings.defaults.coffee b/services/web/config/settings.defaults.coffee index 10fef74a11..ea5b6ef8a1 100644 --- a/services/web/config/settings.defaults.coffee +++ b/services/web/config/settings.defaults.coffee @@ -155,7 +155,7 @@ module.exports = settings = collaborators: -1 dropbox: true versioning: true - compileTimeout: 60 + compileTimeout: 180 compileGroup: "standard" references: true templates: true From afdded702b1bd01c6477f162e3f9b31dfd3f88fe Mon Sep 17 00:00:00 2001 From: Paulo Reis Date: Tue, 6 Sep 2016 14:59:18 +0100 Subject: [PATCH 04/11] Use an object instead of a string, to avoid writing to another scope. --- services/web/app/views/project/list/project-list.jade | 4 ++-- .../public/coffee/main/project-list/project-list.coffee | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/services/web/app/views/project/list/project-list.jade b/services/web/app/views/project/list/project-list.jade index 649c860b26..01007213d0 100644 --- a/services/web/app/views/project/list/project-list.jade +++ b/services/web/app/views/project/list/project-list.jade @@ -8,7 +8,7 @@ input.form-control.col-md-7.col-xs-12( placeholder="#{translate('search_projects')}…", autofocus='autofocus', - ng-model="searchText", + ng-model="searchText.value", focus-on='search:clear', ng-keyup="searchProjects()" ) @@ -16,7 +16,7 @@ i.fa.fa-times.form-control-feedback( ng-click="clearSearchText()", style="cursor: pointer;", - ng-show="searchText.length > 0" + ng-show="searchText.value.length > 0" ) //- i.fa.fa-remove diff --git a/services/web/public/coffee/main/project-list/project-list.coffee b/services/web/public/coffee/main/project-list/project-list.coffee index 313b52ba1f..39ce68043f 100644 --- a/services/web/public/coffee/main/project-list/project-list.coffee +++ b/services/web/public/coffee/main/project-list/project-list.coffee @@ -11,6 +11,8 @@ define [ $scope.filter = "all" $scope.predicate = "lastUpdated" $scope.reverse = true + $scope.searchText = + value : "" if $scope.projects.length == 0 $timeout () -> @@ -69,7 +71,7 @@ define [ $scope.updateVisibleProjects() $scope.clearSearchText = () -> - $scope.searchText = "" + $scope.searchText.value = "" $scope.filter = "all" $scope.$emit "search:clear" $scope.updateVisibleProjects() @@ -96,8 +98,8 @@ define [ for project in $scope.projects visible = true # Only show if it matches any search text - if $scope.searchText? and $scope.searchText != "" - if !project.name.toLowerCase().match($scope.searchText.toLowerCase()) + if $scope.searchText.value? and $scope.searchText.value != "" + if !project.name.toLowerCase().match($scope.searchText.value.toLowerCase()) visible = false # Only show if it matches the selected tag if $scope.filter == "tag" and selectedTag? and project.id not in selectedTag.project_ids From 1714b014bf9fe5533084a185982e4376e1156d46 Mon Sep 17 00:00:00 2001 From: James Allen Date: Tue, 13 Sep 2016 10:29:14 +0100 Subject: [PATCH 05/11] Force true or false for userHasNoSubscription, not blank --- services/web/app/views/project/list/side-bar.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/web/app/views/project/list/side-bar.jade b/services/web/app/views/project/list/side-bar.jade index 96365c813e..3738e9a4ae 100644 --- a/services/web/app/views/project/list/side-bar.jade +++ b/services/web/app/views/project/list/side-bar.jade @@ -155,6 +155,6 @@ | #{translate("or_unlock_features_bonus")} a(href="/user/bonus") #{translate("sharing_sl")} . script. - window.userHasNoSubscription = #{settings.enableSubscriptions && !hasSubscription} + window.userHasNoSubscription = #{!!(settings.enableSubscriptions && !hasSubscription)} From cc9791d3f452904e239e2464f56bfc5e290372cf Mon Sep 17 00:00:00 2001 From: James Allen Date: Tue, 13 Sep 2016 11:23:47 +0100 Subject: [PATCH 06/11] Redirect to login with a redirect back to the page we want if not logged in --- .../Authorization/AuthorizationMiddlewear.coffee | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/services/web/app/coffee/Features/Authorization/AuthorizationMiddlewear.coffee b/services/web/app/coffee/Features/Authorization/AuthorizationMiddlewear.coffee index 4888db0c8a..7f2f67e03c 100644 --- a/services/web/app/coffee/Features/Authorization/AuthorizationMiddlewear.coffee +++ b/services/web/app/coffee/Features/Authorization/AuthorizationMiddlewear.coffee @@ -99,13 +99,17 @@ module.exports = AuthorizationMiddlewear = callback null, user_id redirectToRestricted: (req, res, next) -> - res.redirect "/restricted" + res.redirect "/restricted?from=#{encodeURIComponent(req.url)}" restricted : (req, res, next)-> if req.session.user? res.render 'user/restricted', title:'restricted' else - logger.log "user not logged in and trying to access #{req.url}, being redirected to login" - res.redirect '/register' + from = req.query.from + logger.log {from: from}, "redirecting to login" + redirect_to = "/login" + if from? + redirect_to += "?redir=#{encodeURIComponent(from)}" + res.redirect redirect_to \ No newline at end of file From a45aa7b80eb5d4a9ff61516ea15ea43671e89262 Mon Sep 17 00:00:00 2001 From: James Allen Date: Tue, 13 Sep 2016 15:54:10 +0100 Subject: [PATCH 07/11] Show word count error messages --- services/web/app/views/project/editor/left-menu.jade | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/services/web/app/views/project/editor/left-menu.jade b/services/web/app/views/project/editor/left-menu.jade index 05fa19542f..90f7e20c5e 100644 --- a/services/web/app/views/project/editor/left-menu.jade +++ b/services/web/app/views/project/editor/left-menu.jade @@ -197,6 +197,10 @@ script(type='text/ng-template', id='wordCountModalTemplate') ) div(ng-if="!status.loading") .container-fluid + .row(ng-show='data.messages.length > 0') + .col-xs-12 + .alert.alert-danger + p {{data.messages}} .row .col-xs-4 .pull-right #{translate("total_words")} : From 53b3e3831d889f6b9d3e9c9cde3618a9684d3f49 Mon Sep 17 00:00:00 2001 From: James Allen Date: Wed, 14 Sep 2016 10:51:19 +0100 Subject: [PATCH 08/11] Update cancellation survey link --- services/web/app/coffee/Features/Email/EmailBuilder.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/web/app/coffee/Features/Email/EmailBuilder.coffee b/services/web/app/coffee/Features/Email/EmailBuilder.coffee index f7a7a78a05..0ac465a712 100644 --- a/services/web/app/coffee/Features/Email/EmailBuilder.coffee +++ b/services/web/app/coffee/Features/Email/EmailBuilder.coffee @@ -26,7 +26,7 @@ templates.canceledSubscription = compiledTemplate: _.template '''

Hi <%= first_name %>,

-

I'm sorry to see you cancelled your ShareLaTeX premium account. Would you mind giving me some advice on what the site is lacking at the moment via this survey?

+

I'm sorry to see you cancelled your ShareLaTeX premium account. Would you mind giving me some advice on what the site is lacking at the moment via this survey?

Thank you in advance.

From 9019b20d50c6a4d0e0368d993ee9f8f6828ab4a2 Mon Sep 17 00:00:00 2001 From: James Allen Date: Wed, 14 Sep 2016 11:21:00 +0100 Subject: [PATCH 09/11] Preserve line formatting in word count error message --- services/web/app/views/project/editor/left-menu.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/web/app/views/project/editor/left-menu.jade b/services/web/app/views/project/editor/left-menu.jade index 90f7e20c5e..695e24d05a 100644 --- a/services/web/app/views/project/editor/left-menu.jade +++ b/services/web/app/views/project/editor/left-menu.jade @@ -200,7 +200,7 @@ script(type='text/ng-template', id='wordCountModalTemplate') .row(ng-show='data.messages.length > 0') .col-xs-12 .alert.alert-danger - p {{data.messages}} + p(style="white-space: pre-wrap") {{data.messages}} .row .col-xs-4 .pull-right #{translate("total_words")} : From c9a17982cf298a62e26688c914cdeda6ce59d0ef Mon Sep 17 00:00:00 2001 From: James Allen Date: Wed, 14 Sep 2016 17:08:26 +0100 Subject: [PATCH 10/11] Add canonical url tag and don't include query string --- services/web/app/coffee/infrastructure/ExpressLocals.coffee | 4 +++- services/web/app/views/layout.jade | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/services/web/app/coffee/infrastructure/ExpressLocals.coffee b/services/web/app/coffee/infrastructure/ExpressLocals.coffee index d3b9d9a24b..b57556a42d 100644 --- a/services/web/app/coffee/infrastructure/ExpressLocals.coffee +++ b/services/web/app/coffee/infrastructure/ExpressLocals.coffee @@ -123,7 +123,9 @@ module.exports = (app, webRouter, apiRouter)-> res.locals.translate = (key, vars = {}) -> vars.appName = Settings.appName req.i18n.translate(key, vars) - res.locals.currentUrl = req.originalUrl + # Don't include the query string parameters, otherwise Google + # treats ?nocdn=true as the canonical version + res.locals.currentUrl = Url.parse(req.originalUrl).pathname next() webRouter.use (req, res, next)-> diff --git a/services/web/app/views/layout.jade b/services/web/app/views/layout.jade index 88fe4187fe..7d986e5abf 100644 --- a/services/web/app/views/layout.jade +++ b/services/web/app/views/layout.jade @@ -21,6 +21,7 @@ html(itemscope, itemtype='http://schema.org/Product') link(rel="icon", href="/favicon.ico") link(rel='stylesheet', href=buildCssPath('/style.css')) + link(rel="canonical", href=settings.siteUrl+currentUrl) if settings.i18n.subdomainLang each subdomainDetails in settings.i18n.subdomainLang if !subdomainDetails.hide From 06d67835e437118f2bb123f56c4a6c2b7799a81c Mon Sep 17 00:00:00 2001 From: James Allen Date: Thu, 15 Sep 2016 10:21:12 +0100 Subject: [PATCH 11/11] Don't redirect Google to nocdn=true, and remove canonical URL until we sort out translated domains --- services/web/app/views/layout.jade | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/services/web/app/views/layout.jade b/services/web/app/views/layout.jade index 7d986e5abf..30b6b2294b 100644 --- a/services/web/app/views/layout.jade +++ b/services/web/app/views/layout.jade @@ -21,7 +21,6 @@ html(itemscope, itemtype='http://schema.org/Product') link(rel="icon", href="/favicon.ico") link(rel='stylesheet', href=buildCssPath('/style.css')) - link(rel="canonical", href=settings.siteUrl+currentUrl) if settings.i18n.subdomainLang each subdomainDetails in settings.i18n.subdomainLang if !subdomainDetails.hide @@ -58,7 +57,7 @@ html(itemscope, itemtype='http://schema.org/Product') var noCdnKey = "nocdn=true" var cdnBlocked = typeof jQuery === 'undefined' var noCdnAlreadyInUrl = window.location.href.indexOf(noCdnKey) != -1 //prevent loops - if (cdnBlocked && !noCdnAlreadyInUrl) { + if (cdnBlocked && !noCdnAlreadyInUrl && navigator.userAgent.indexOf("Googlebot") == -1) { window.location.search += '&'+noCdnKey; } script(src=buildJsPath("libs/angular-1.3.15.min.js", {fingerprint:false}))