ide.coffee 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. define [
  2. "base"
  3. "ide/file-tree/FileTreeManager"
  4. "ide/connection/ConnectionManager"
  5. "ide/editor/EditorManager"
  6. "ide/online-users/OnlineUsersManager"
  7. "ide/track-changes/TrackChangesManager"
  8. "ide/permissions/PermissionsManager"
  9. "ide/pdf/PdfManager"
  10. "ide/binary-files/BinaryFilesManager"
  11. "ide/references/ReferencesManager"
  12. "ide/settings/index"
  13. "ide/share/index"
  14. "ide/chat/index"
  15. "ide/clone/index"
  16. "ide/hotkeys/index"
  17. "ide/wordcount/index"
  18. "ide/directives/layout"
  19. "ide/services/ide"
  20. "__IDE_CLIENTSIDE_INCLUDES__"
  21. "analytics/AbTestingManager"
  22. "directives/focus"
  23. "directives/fineUpload"
  24. "directives/scroll"
  25. "directives/onEnter"
  26. "directives/stopPropagation"
  27. "directives/rightClick"
  28. "services/queued-http"
  29. "filters/formatDate"
  30. "main/event"
  31. "main/account-upgrade"
  32. ], (
  33. App
  34. FileTreeManager
  35. ConnectionManager
  36. EditorManager
  37. OnlineUsersManager
  38. TrackChangesManager
  39. PermissionsManager
  40. PdfManager
  41. BinaryFilesManager
  42. ReferencesManager
  43. ) ->
  44. App.controller "IdeController", ($scope, $timeout, ide, localStorage) ->
  45. # Don't freak out if we're already in an apply callback
  46. $scope.$originalApply = $scope.$apply
  47. $scope.$apply = (fn = () ->) ->
  48. phase = @$root.$$phase
  49. if (phase == '$apply' || phase == '$digest')
  50. fn()
  51. else
  52. this.$originalApply(fn);
  53. $scope.state = {
  54. loading: true
  55. load_progress: 40
  56. error: null
  57. }
  58. $scope.ui = {
  59. leftMenuShown: false
  60. view: "editor"
  61. chatOpen: false
  62. pdfLayout: 'sideBySide'
  63. }
  64. $scope.user = window.user
  65. $scope.settings = window.userSettings
  66. $scope.anonymous = window.anonymous
  67. $scope.chat = {}
  68. window._ide = ide
  69. ide.project_id = $scope.project_id = window.project_id
  70. ide.$scope = $scope
  71. ide.referencesSearchManager = new ReferencesManager(ide, $scope)
  72. ide.connectionManager = new ConnectionManager(ide, $scope)
  73. ide.fileTreeManager = new FileTreeManager(ide, $scope)
  74. ide.editorManager = new EditorManager(ide, $scope)
  75. ide.onlineUsersManager = new OnlineUsersManager(ide, $scope)
  76. ide.trackChangesManager = new TrackChangesManager(ide, $scope)
  77. ide.pdfManager = new PdfManager(ide, $scope)
  78. ide.permissionsManager = new PermissionsManager(ide, $scope)
  79. ide.binaryFilesManager = new BinaryFilesManager(ide, $scope)
  80. inited = false
  81. $scope.$on "project:joined", () ->
  82. return if inited
  83. inited = true
  84. if $scope?.project?.deletedByExternalDataSource
  85. ide.showGenericMessageModal("Project Renamed or Deleted", """
  86. This project has either been renamed or deleted by an external data source such as Dropbox.
  87. We don't want to delete your data on ShareLaTeX, so this project still contains your history and collaborators.
  88. If the project has been renamed please look in your project list for a new project under the new name.
  89. """)
  90. DARK_THEMES = [
  91. "ambiance", "chaos", "clouds_midnight", "cobalt", "idle_fingers",
  92. "merbivore", "merbivore_soft", "mono_industrial", "monokai",
  93. "pastel_on_dark", "solarized_dark", "terminal", "tomorrow_night",
  94. "tomorrow_night_blue", "tomorrow_night_bright", "tomorrow_night_eighties",
  95. "twilight", "vibrant_ink"
  96. ]
  97. $scope.darkTheme = false
  98. $scope.$watch "settings.theme", (theme) ->
  99. if theme in DARK_THEMES
  100. $scope.darkTheme = true
  101. else
  102. $scope.darkTheme = false
  103. ide.localStorage = localStorage
  104. ide.browserIsSafari = false
  105. try
  106. userAgent = navigator.userAgent
  107. ide.browserIsSafari = (
  108. userAgent &&
  109. userAgent.match(/.*Safari\/.*/) &&
  110. !userAgent.match(/.*Chrome\/.*/) &&
  111. !userAgent.match(/.*Chromium\/.*/)
  112. )
  113. catch err
  114. console.error err
  115. # User can append ?ft=somefeature to url to activate a feature toggle
  116. ide.featureToggle = location?.search?.match(/^\?ft=(\w+)$/)?[1]
  117. angular.bootstrap(document.body, ["SharelatexApp"])