diff --git a/services/web/public/coffee/ide.coffee b/services/web/public/coffee/ide.coffee index 161289d055..af6111cd44 100644 --- a/services/web/public/coffee/ide.coffee +++ b/services/web/public/coffee/ide.coffee @@ -112,4 +112,17 @@ define [ ide.localStorage = localStorage + ide.browserIsSafari = false + try + userAgent = navigator.userAgent + ide.browserIsSafari = ( + userAgent && + userAgent.match(/.*Safari\/.*/) && + !userAgent.match(/.*Chrome\/.*/) && + !userAgent.match(/.*Chromium\/.*/) + ) + catch err + console.error err + + angular.bootstrap(document.body, ["SharelatexApp"]) diff --git a/services/web/public/coffee/ide/editor/directives/aceEditor/auto-complete/SuggestionManager.coffee b/services/web/public/coffee/ide/editor/directives/aceEditor/auto-complete/SuggestionManager.coffee index e0c3710358..97241a90ce 100644 --- a/services/web/public/coffee/ide/editor/directives/aceEditor/auto-complete/SuggestionManager.coffee +++ b/services/web/public/coffee/ide/editor/directives/aceEditor/auto-complete/SuggestionManager.coffee @@ -1,11 +1,23 @@ define [], () -> + class Parser constructor: (@doc) -> parse: () -> + # Safari regex is super slow, freezes browser for minutes on end, + # hacky solution: limit iterations + limit = null + if window?._ide?.browserIsSafari + limit = 100 + commands = [] seen = {} + iterations = 0 while command = @nextCommand() + iterations += 1 + if limit && iterations > limit + return commands + docState = @doc optionalArgs = 0