Sfoglia il codice sorgente

Merge pull request #2349 from overleaf/as-webpack-css

Compile CSS using webpack

GitOrigin-RevId: 489834038667dde572ea5d9b4b9392b362259a09
Alasdair Smith 6 anni fa
parent
commit
26190da566
100 ha cambiato i file con 79 aggiunte e 144 eliminazioni
  1. 4 7
      services/web/.gitignore
  2. 0 2
      services/web/Dockerfile
  3. 2 41
      services/web/Makefile
  4. 49 71
      services/web/app/src/infrastructure/ExpressLocals.js
  5. 3 3
      services/web/app/views/layout.pug
  6. 0 3
      services/web/app/views/project/editor/new-file-modal.pug
  7. 0 3
      services/web/app/views/project/list/modals.pug
  8. 1 1
      services/web/frontend/js/ide/pdfng/directives/pdfAnnotations.js
  9. 1 1
      services/web/frontend/js/ide/pdfng/directives/pdfHighlights.js
  10. 18 0
      services/web/frontend/js/ide/pdfng/directives/pdfJsLoader.js
  11. 1 1
      services/web/frontend/js/ide/pdfng/directives/pdfRenderer.js
  12. 0 0
      services/web/frontend/stylesheets/_ol_style_includes.less
  13. 0 1
      services/web/frontend/stylesheets/_style_includes.less
  14. 0 0
      services/web/frontend/stylesheets/app/about-page.less
  15. 0 0
      services/web/frontend/stylesheets/app/about.less
  16. 0 0
      services/web/frontend/stylesheets/app/account-settings.less
  17. 0 0
      services/web/frontend/stylesheets/app/admin-hub.less
  18. 0 0
      services/web/frontend/stylesheets/app/base.less
  19. 0 0
      services/web/frontend/stylesheets/app/beta-program.less
  20. 0 0
      services/web/frontend/stylesheets/app/blog-posts.less
  21. 0 0
      services/web/frontend/stylesheets/app/blog.less
  22. 0 0
      services/web/frontend/stylesheets/app/bonus.less
  23. 0 0
      services/web/frontend/stylesheets/app/cms-page.less
  24. 0 0
      services/web/frontend/stylesheets/app/contact-us.less
  25. 0 0
      services/web/frontend/stylesheets/app/content_page.less
  26. 0 0
      services/web/frontend/stylesheets/app/editor.less
  27. 0 0
      services/web/frontend/stylesheets/app/editor/binary-file.less
  28. 0 0
      services/web/frontend/stylesheets/app/editor/chat.less
  29. 0 0
      services/web/frontend/stylesheets/app/editor/file-tree.less
  30. 0 0
      services/web/frontend/stylesheets/app/editor/history-v2.less
  31. 0 0
      services/web/frontend/stylesheets/app/editor/history.less
  32. 0 0
      services/web/frontend/stylesheets/app/editor/hotkeys.less
  33. 0 0
      services/web/frontend/stylesheets/app/editor/left-menu.less
  34. 0 0
      services/web/frontend/stylesheets/app/editor/online-users.less
  35. 0 0
      services/web/frontend/stylesheets/app/editor/pdf.less
  36. 0 0
      services/web/frontend/stylesheets/app/editor/publish-modal.less
  37. 0 0
      services/web/frontend/stylesheets/app/editor/publish-template.less
  38. 0 0
      services/web/frontend/stylesheets/app/editor/review-panel.less
  39. 0 0
      services/web/frontend/stylesheets/app/editor/rich-text.less
  40. 0 0
      services/web/frontend/stylesheets/app/editor/search.less
  41. 0 0
      services/web/frontend/stylesheets/app/editor/share.less
  42. 0 0
      services/web/frontend/stylesheets/app/editor/toolbar.less
  43. 0 0
      services/web/frontend/stylesheets/app/error-pages.less
  44. 0 0
      services/web/frontend/stylesheets/app/features.less
  45. 0 0
      services/web/frontend/stylesheets/app/front-chat-widget.less
  46. 0 0
      services/web/frontend/stylesheets/app/homepage.less
  47. 0 0
      services/web/frontend/stylesheets/app/import.less
  48. 0 0
      services/web/frontend/stylesheets/app/institution-hub.less
  49. 0 0
      services/web/frontend/stylesheets/app/invite.less
  50. 0 0
      services/web/frontend/stylesheets/app/list/v1-import-modal.less
  51. 0 0
      services/web/frontend/stylesheets/app/login-register.less
  52. 0 0
      services/web/frontend/stylesheets/app/metrics.less
  53. 0 0
      services/web/frontend/stylesheets/app/ol-chat.less
  54. 0 0
      services/web/frontend/stylesheets/app/ol-style-guide.less
  55. 0 0
      services/web/frontend/stylesheets/app/open-in-overleaf.less
  56. 0 0
      services/web/frontend/stylesheets/app/plans-ol.less
  57. 0 0
      services/web/frontend/stylesheets/app/plans.less
  58. 0 0
      services/web/frontend/stylesheets/app/portals.less
  59. 0 0
      services/web/frontend/stylesheets/app/project-list.less
  60. 0 0
      services/web/frontend/stylesheets/app/publisher-hub.less
  61. 0 0
      services/web/frontend/stylesheets/app/recurly.less
  62. 0 0
      services/web/frontend/stylesheets/app/register.less
  63. 0 0
      services/web/frontend/stylesheets/app/review-features-page.less
  64. 0 0
      services/web/frontend/stylesheets/app/sidebar-v2-dash-pane.less
  65. 0 0
      services/web/frontend/stylesheets/app/sprites.less
  66. 0 0
      services/web/frontend/stylesheets/app/subscription.less
  67. 0 0
      services/web/frontend/stylesheets/app/templates-v2.less
  68. 0 0
      services/web/frontend/stylesheets/app/templates.less
  69. 0 0
      services/web/frontend/stylesheets/app/translations.less
  70. 0 0
      services/web/frontend/stylesheets/app/v1-badge.less
  71. 0 0
      services/web/frontend/stylesheets/app/wiki.less
  72. 0 0
      services/web/frontend/stylesheets/components/alerts.less
  73. 0 0
      services/web/frontend/stylesheets/components/badges.less
  74. 0 0
      services/web/frontend/stylesheets/components/breadcrumbs.less
  75. 0 0
      services/web/frontend/stylesheets/components/button-groups.less
  76. 0 0
      services/web/frontend/stylesheets/components/buttons.less
  77. 0 0
      services/web/frontend/stylesheets/components/card.less
  78. 0 0
      services/web/frontend/stylesheets/components/carousel.less
  79. 0 0
      services/web/frontend/stylesheets/components/close.less
  80. 0 0
      services/web/frontend/stylesheets/components/code.less
  81. 0 0
      services/web/frontend/stylesheets/components/component-animations.less
  82. 0 0
      services/web/frontend/stylesheets/components/daterange-picker.less
  83. 0 0
      services/web/frontend/stylesheets/components/dropdowns.less
  84. 0 0
      services/web/frontend/stylesheets/components/embed-responsive.less
  85. 0 10
      services/web/frontend/stylesheets/components/fineupload.less
  86. 0 0
      services/web/frontend/stylesheets/components/footer.less
  87. 0 0
      services/web/frontend/stylesheets/components/forms.less
  88. 0 0
      services/web/frontend/stylesheets/components/hover.less
  89. 0 0
      services/web/frontend/stylesheets/components/icons.less
  90. 0 0
      services/web/frontend/stylesheets/components/images.less
  91. 0 0
      services/web/frontend/stylesheets/components/input-groups.less
  92. 0 0
      services/web/frontend/stylesheets/components/input-suggestions.less
  93. 0 0
      services/web/frontend/stylesheets/components/jumbotron.less
  94. 0 0
      services/web/frontend/stylesheets/components/labels.less
  95. 0 0
      services/web/frontend/stylesheets/components/list-group.less
  96. 0 0
      services/web/frontend/stylesheets/components/lists.less
  97. 0 0
      services/web/frontend/stylesheets/components/media.less
  98. 0 0
      services/web/frontend/stylesheets/components/modals.less
  99. 0 0
      services/web/frontend/stylesheets/components/navbar.less
  100. 0 0
      services/web/frontend/stylesheets/components/navs-ol.less

+ 4 - 7
services/web/.gitignore

@@ -1,4 +1,4 @@
-Compiled source #
+# Compiled source #
 ###################
 *.com
 *.class
@@ -42,14 +42,11 @@ TpdsWorker.js
 BackgroundJobsWorker.js
 UserAndProjectPopulator.coffee
 
+public/manifest.json
+
 public/js
 public/minjs
-
-public/stylesheets/style*.css
-public/stylesheets/sl-style*.css
-public/stylesheets/light-style*.css
-public/stylesheets/ieee-style*.css
-public/stylesheets/*.map
+public/stylesheets
 
 Gemfile.lock
 

+ 0 - 2
services/web/Dockerfile

@@ -10,8 +10,6 @@ RUN npm install --quiet
 
 COPY . /app
 
-RUN make compile_full
-
 FROM node:10.15.3
 
 COPY --from=app /app /app

+ 2 - 41
services/web/Makefile

@@ -16,41 +16,6 @@ MODULE_DIRS := $(shell find modules -mindepth 1 -maxdepth 1 -type d -not -name '
 MODULE_MAKEFILES := $(MODULE_DIRS:=/Makefile)
 MODULE_NAME=$(shell basename $(MODULE))
 
-LESSC := node_modules/.bin/lessc
-CLEANCSS := node_modules/.bin/cleancss
-
-LESS_FILES := $(shell find public/stylesheets -name '*.less')
-LESSC_COMMON_FLAGS := --source-map --autoprefix="last 2 versions, ie >= 10"
-CLEANCSS_FLAGS := --s0 --source-map
-
-LESS_SL_FILE := public/stylesheets/sl-style.less
-CSS_SL_FILE := public/stylesheets/sl-style.css
-LESS_OL_FILE := public/stylesheets/style.less
-CSS_OL_FILE := public/stylesheets/style.css
-LESS_OL_LIGHT_FILE := public/stylesheets/light-style.less
-CSS_OL_LIGHT_FILE := public/stylesheets/light-style.css
-LESS_OL_IEEE_FILE := public/stylesheets/ieee-style.less
-CSS_OL_IEEE_FILE := public/stylesheets/ieee-style.css
-
-CSS_FILES := $(CSS_SL_FILE) $(CSS_OL_FILE) $(CSS_OL_LIGHT_FILE) $(CSS_OL_IEEE_FILE)
-
-public/stylesheets/%.css: $(LESS_FILES)
-	$(LESSC) $(LESSC_COMMON_FLAGS) $(@D)/$*.less $(@D)/$*.css
-
-css_full: $(CSS_FILES)
-
-css: $(CSS_OL_FILE)
-
-minify: $(CSS_FILES)
-	$(CLEANCSS) $(CLEANCSS_FLAGS) -o $(CSS_SL_FILE) $(CSS_SL_FILE)
-	$(CLEANCSS) $(CLEANCSS_FLAGS) -o $(CSS_OL_FILE) $(CSS_OL_FILE)
-	$(CLEANCSS) $(CLEANCSS_FLAGS) -o $(CSS_OL_LIGHT_FILE) $(CSS_OL_LIGHT_FILE)
-	$(CLEANCSS) $(CLEANCSS_FLAGS) -o $(CSS_OL_IEEE_FILE) $(CSS_OL_IEEE_FILE)
-
-compile: css
-
-compile_full: css_full
-
 $(MODULE_MAKEFILES): Makefile.module
 	@set -e; \
 	for makefile in $(MODULE_MAKEFILES); \
@@ -62,9 +27,6 @@ $(MODULE_MAKEFILES): Makefile.module
 # Clean
 #
 
-clean:
-	rm -f public/stylesheets/*.css*
-
 clean_ci:
 	$(DOCKER_COMPOSE) down -v -t 0
 	docker container list | grep 'days ago' | cut -d ' ' -f 1 - | xargs -r docker container stop
@@ -187,9 +149,8 @@ tar:
 	COMPOSE_PROJECT_NAME=tar_$(BUILD_DIR_NAME) $(DOCKER_COMPOSE) down -v -t 0
 
 .PHONY:
-	css_full css minify minify_css minify_es compile compile_full \
-	compile_css_full compile_modules compile_modules_full clean clean_frontend \
-	clean_css clean_tests clean_ci test test_module test_unit test_unit_app \
+	compile_modules compile_modules_full clean_ci \
+	test test_module test_unit test_unit_app \
 	test_unit_modules test_unit_module test_frontend test_frontend_run \
 	test_frontend_build_run test_acceptance test_acceptance_app \
 	test_acceptance_modules test_acceptance_module ci format format_fix lint \

+ 49 - 71
services/web/app/src/infrastructure/ExpressLocals.js

@@ -1,6 +1,4 @@
 const logger = require('logger-sharelatex')
-const fs = require('fs')
-const crypto = require('crypto')
 const Settings = require('settings-sharelatex')
 const querystring = require('querystring')
 const _ = require('lodash')
@@ -25,52 +23,7 @@ if (!IS_DEV_ENV) {
   // containers can't coordinate, so there no guarantee that the manifest file
   // exists when the web server boots. We therefore ignore the manifest file in
   // dev reload
-  webpackManifest = require(`../../../public/js/manifest.json`)
-}
-
-function getFileContent(filePath) {
-  filePath = Path.join(__dirname, '../../../', `public${filePath}`)
-  const exists = fs.existsSync(filePath)
-  if (exists) {
-    const content = fs.readFileSync(filePath, 'UTF-8')
-    return content
-  } else {
-    logger.log({ filePath }, 'file does not exist for hashing')
-    return ''
-  }
-}
-
-const pathList = [
-  '/stylesheets/style.css',
-  '/stylesheets/light-style.css',
-  '/stylesheets/ieee-style.css',
-  '/stylesheets/sl-style.css'
-]
-const hashedFiles = {}
-if (!Settings.useMinifiedJs) {
-  logger.log('not using minified JS, not hashing static files')
-} else {
-  logger.log('Generating file hashes...')
-  for (let path of pathList) {
-    const content = getFileContent(path)
-    const hash = crypto
-      .createHash('md5')
-      .update(content)
-      .digest('hex')
-
-    const splitPath = path.split('/')
-    const filenameSplit = splitPath.pop().split('.')
-    filenameSplit.splice(filenameSplit.length - 1, 0, hash)
-    splitPath.push(filenameSplit.join('.'))
-
-    const hashPath = splitPath.join('/')
-    hashedFiles[path] = hashPath
-
-    const fsHashPath = Path.join(__dirname, '../../../', `public${hashPath}`)
-    fs.writeFileSync(fsHashPath, content)
-
-    logger.log('Finished hashing static content')
-  }
+  webpackManifest = require(`../../../public/manifest.json`)
 }
 
 module.exports = function(webRouter, privateApiRouter, publicApiRouter) {
@@ -125,7 +78,7 @@ module.exports = function(webRouter, privateApiRouter, publicApiRouter) {
       staticFilesBase = ''
     }
 
-    res.locals.buildJsPath = function(jsFile, opts = {}) {
+    res.locals.buildJsPath = function(jsFile) {
       let path
       if (IS_DEV_ENV) {
         // In dev: resolve path within JS asset directory
@@ -139,6 +92,25 @@ module.exports = function(webRouter, privateApiRouter, publicApiRouter) {
         path = webpackManifest[jsFile]
       }
 
+      return Url.resolve(staticFilesBase, path)
+    }
+
+    // Temporary hack while jQuery/Angular dependencies are *not* bundled,
+    // instead copied into output directory
+    res.locals.buildCopiedJsAssetPath = function(jsFile, opts = {}) {
+      let path
+      if (IS_DEV_ENV) {
+        // In dev: resolve path to root directory
+        // We are *not* guaranteed to have a manifest file when the server
+        // starts up
+        path = Path.join('/', jsFile)
+      } else {
+        // In production: resolve path from webpack manifest file
+        // We are guaranteed to have a manifest file since webpack compiles in
+        // the build
+        path = webpackManifest[jsFile]
+      }
+
       if (opts.cdn !== false) {
         path = Url.resolve(staticFilesBase, path)
       }
@@ -150,10 +122,13 @@ module.exports = function(webRouter, privateApiRouter, publicApiRouter) {
       return path
     }
 
-    res.locals.mathJaxPath = res.locals.buildJsPath('libs/mathjax/MathJax.js', {
-      cdn: false,
-      qs: { config: 'TeX-AMS_HTML,Safe' }
-    })
+    res.locals.mathJaxPath = res.locals.buildCopiedJsAssetPath(
+      'js/libs/mathjax/MathJax.js',
+      {
+        cdn: false,
+        qs: { config: 'TeX-AMS_HTML,Safe' }
+      }
+    )
 
     res.locals.lib = PackageVersions.lib
 
@@ -164,36 +139,39 @@ module.exports = function(webRouter, privateApiRouter, publicApiRouter) {
       (brandVariation != null ? brandVariation.brand_id : undefined) ===
       IEEE_BRAND_ID
 
-    const _buildCssFileName = themeModifier =>
-      `/${Settings.brandPrefix}${themeModifier || ''}style.css`
-
     res.locals.getCssThemeModifier = function(userSettings, brandVariation) {
       // Themes only exist in OL v2
-      let themeModifier
       if (Settings.overleaf != null) {
         // The IEEE theme takes precedence over the user personal setting, i.e. a user with
         // a theme setting of "light" will still get the IEE theme in IEEE branded projects.
         if (res.locals.isIEEE(brandVariation)) {
-          themeModifier = 'ieee-'
-        } else if (
-          (userSettings != null ? userSettings.overallTheme : undefined) != null
-        ) {
-          themeModifier = userSettings.overallTheme
+          return 'ieee-'
+        } else if (userSettings && userSettings.overallTheme != null) {
+          return userSettings.overallTheme
         }
       }
-      return themeModifier
     }
 
-    res.locals.buildCssPath = function(themeModifier, buildOpts) {
+    function _buildCssFileName(themeModifier) {
+      return `${Settings.brandPrefix}${themeModifier || ''}style.css`
+    }
+
+    res.locals.buildCssPath = function(themeModifier) {
       const cssFileName = _buildCssFileName(themeModifier)
-      const path = Path.join('/stylesheets/', cssFileName)
-      if (
-        (buildOpts != null ? buildOpts.hashedPath : undefined) &&
-        hashedFiles[path] != null
-      ) {
-        const hashedPath = hashedFiles[path]
-        return Url.resolve(staticFilesBase, hashedPath)
+
+      let path
+      if (IS_DEV_ENV) {
+        // In dev: resolve path within CSS asset directory
+        // We are *not* guaranteed to have a manifest file when the server
+        // starts up
+        path = Path.join('/stylesheets/', cssFileName)
+      } else {
+        // In production: resolve path from webpack manifest file
+        // We are guaranteed to have a manifest file since webpack compiles in
+        // the build
+        path = webpackManifest[cssFileName]
       }
+
       return Url.resolve(staticFilesBase, path)
     }
 

+ 3 - 3
services/web/app/views/layout.pug

@@ -17,7 +17,7 @@ html(
 			|!{gaExperiments}
 
 		//- Stylesheet
-		link(rel='stylesheet', href=buildCssPath(getCssThemeModifier(userSettings, brandVariation), { hashedPath: true }), id="main-stylesheet")
+		link(rel='stylesheet', href=buildCssPath(getCssThemeModifier(userSettings, brandVariation)), id="main-stylesheet")
 
 		block _headLinks
 
@@ -44,7 +44,7 @@ html(
 		script(type="text/javascript").
 			window.csrfToken = "#{csrfToken}";
 
-		script(src=buildJsPath("libs/jquery-1.11.1.min.js"))
+		script(src=buildCopiedJsAssetPath('js/libs/jquery-1.11.1.min.js'))
 		script(type="text/javascript").
 			var noCdnKey = "nocdn=true"
 			var cdnBlocked = typeof jQuery === 'undefined'
@@ -55,7 +55,7 @@ html(
 
 		block head-scripts
 
-		script(src=buildJsPath("libs/angular-1.6.4.min.js"))
+		script(src=buildCopiedJsAssetPath('js/libs/angular-1.6.4.min.js'))
 
 		script.
 			window.sharelatex = {

+ 0 - 3
services/web/app/views/project/editor/new-file-modal.pug

@@ -209,9 +209,6 @@ script(type="text/template", id="qq-file-uploader-template")
 		div.row-spaced-small
 			div.qq-upload-button-selector.btn.btn-primary
 				| Select from your computer
-		span.qq-drop-processing-selector
-			span #{translate('processing')}
-			span.qq-drop-processing-spinner-selector
 		ul.qq-upload-list-selector
 			li
 				div.qq-progress-bar-container-selector

+ 0 - 3
services/web/app/views/project/list/modals.pug

@@ -242,9 +242,6 @@ script(type="text/template", id="qq-project-uploader-template")
 			div #{translate('select_a_zip_file')}
 		span.or.btn-lg #{translate('or')}
 		span.drag-here.btn-lg #{translate('drag_a_zip_file')}
-		span.qq-drop-processing-selector
-			span #{translate('creating_project')}
-			span.qq-drop-processing-spinner-selector
 		ul.qq-upload-list-selector
 			li
 				div.qq-progress-bar-container-selector

+ 1 - 1
services/web/frontend/js/ide/pdfng/directives/pdfAnnotations.js

@@ -1,4 +1,4 @@
-define(['base', 'pdfjs-dist/webpack'], (App, PDFJS) => {
+define(['base', './pdfJsLoader'], (App, PDFJS) => {
   const EXTERNAL_LINK_TARGET = '_blank'
   const REL_NOOPENER = 'noreferrer noopener'
 

+ 1 - 1
services/web/frontend/js/ide/pdfng/directives/pdfHighlights.js

@@ -13,7 +13,7 @@
  * DS207: Consider shorter variations of null checks
  * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  */
-define(['base', 'pdfjs-dist/webpack'], (App, PDFJS) =>
+define(['base', './pdfJsLoader'], (App, PDFJS) =>
   // app = angular.module 'pdfHighlights', []
 
   App.factory('pdfHighlights', function() {

+ 18 - 0
services/web/frontend/js/ide/pdfng/directives/pdfJsLoader.js

@@ -0,0 +1,18 @@
+/*
+ * Adapted from https://github.com/mozilla/pdfjs-dist/blob/e9492b7a725ec4edd466880223474f4295a5fb45/webpack.js
+ * The PDF.js worker needs to be loaded in a Web Worker. This can be done
+ * automatically with webpack via worker-loader.
+ * PDF.js has the above file to do this, however it uses the webpack loader
+ * module loading syntax, which prevents us from customising the loader.
+ * We need to output the worker file to the public/js directory, and so we need
+ * to customise the loader's options. However the rest of the file is identical
+ * to the one provided by PDF.js.
+ */
+var pdfjs = require('pdfjs-dist/build/pdf.js')
+var PdfjsWorker = require('pdfjs-dist/build/pdf.worker.js')
+
+if (typeof window !== 'undefined' && 'Worker' in window) {
+  pdfjs.GlobalWorkerOptions.workerPort = new PdfjsWorker()
+}
+
+module.exports = pdfjs

+ 1 - 1
services/web/frontend/js/ide/pdfng/directives/pdfRenderer.js

@@ -18,7 +18,7 @@
  * DS207: Consider shorter variations of null checks
  * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  */
-define(['base', 'pdfjs-dist/webpack'], (App, PDFJS) =>
+define(['base', './pdfJsLoader'], (App, PDFJS) =>
   // App = angular.module 'PDFRenderer', ['pdfAnnotations', 'pdfTextLayer']
 
   App.factory('PDFRenderer', function(

+ 0 - 0
services/web/public/stylesheets/_ol_style_includes.less → services/web/frontend/stylesheets/_ol_style_includes.less


+ 0 - 1
services/web/public/stylesheets/_style_includes.less → services/web/frontend/stylesheets/_style_includes.less

@@ -28,7 +28,6 @@
 @import "components/card.less";
 //@import "components/code.less";
 @import "components/component-animations.less";
-@import "components/glyphicons.less";
 @import "components/dropdowns.less";
 @import "components/button-groups.less";
 @import "components/input-groups.less";

+ 0 - 0
services/web/public/stylesheets/app/about-page.less → services/web/frontend/stylesheets/app/about-page.less


+ 0 - 0
services/web/public/stylesheets/app/about.less → services/web/frontend/stylesheets/app/about.less


+ 0 - 0
services/web/public/stylesheets/app/account-settings.less → services/web/frontend/stylesheets/app/account-settings.less


+ 0 - 0
services/web/public/stylesheets/app/admin-hub.less → services/web/frontend/stylesheets/app/admin-hub.less


+ 0 - 0
services/web/public/stylesheets/app/base.less → services/web/frontend/stylesheets/app/base.less


+ 0 - 0
services/web/public/stylesheets/app/beta-program.less → services/web/frontend/stylesheets/app/beta-program.less


+ 0 - 0
services/web/public/stylesheets/app/blog-posts.less → services/web/frontend/stylesheets/app/blog-posts.less


+ 0 - 0
services/web/public/stylesheets/app/blog.less → services/web/frontend/stylesheets/app/blog.less


+ 0 - 0
services/web/public/stylesheets/app/bonus.less → services/web/frontend/stylesheets/app/bonus.less


+ 0 - 0
services/web/public/stylesheets/app/cms-page.less → services/web/frontend/stylesheets/app/cms-page.less


+ 0 - 0
services/web/public/stylesheets/app/contact-us.less → services/web/frontend/stylesheets/app/contact-us.less


+ 0 - 0
services/web/public/stylesheets/app/content_page.less → services/web/frontend/stylesheets/app/content_page.less


+ 0 - 0
services/web/public/stylesheets/app/editor.less → services/web/frontend/stylesheets/app/editor.less


+ 0 - 0
services/web/public/stylesheets/app/editor/binary-file.less → services/web/frontend/stylesheets/app/editor/binary-file.less


+ 0 - 0
services/web/public/stylesheets/app/editor/chat.less → services/web/frontend/stylesheets/app/editor/chat.less


+ 0 - 0
services/web/public/stylesheets/app/editor/file-tree.less → services/web/frontend/stylesheets/app/editor/file-tree.less


+ 0 - 0
services/web/public/stylesheets/app/editor/history-v2.less → services/web/frontend/stylesheets/app/editor/history-v2.less


+ 0 - 0
services/web/public/stylesheets/app/editor/history.less → services/web/frontend/stylesheets/app/editor/history.less


+ 0 - 0
services/web/public/stylesheets/app/editor/hotkeys.less → services/web/frontend/stylesheets/app/editor/hotkeys.less


+ 0 - 0
services/web/public/stylesheets/app/editor/left-menu.less → services/web/frontend/stylesheets/app/editor/left-menu.less


+ 0 - 0
services/web/public/stylesheets/app/editor/online-users.less → services/web/frontend/stylesheets/app/editor/online-users.less


+ 0 - 0
services/web/public/stylesheets/app/editor/pdf.less → services/web/frontend/stylesheets/app/editor/pdf.less


+ 0 - 0
services/web/public/stylesheets/app/editor/publish-modal.less → services/web/frontend/stylesheets/app/editor/publish-modal.less


+ 0 - 0
services/web/public/stylesheets/app/editor/publish-template.less → services/web/frontend/stylesheets/app/editor/publish-template.less


+ 0 - 0
services/web/public/stylesheets/app/editor/review-panel.less → services/web/frontend/stylesheets/app/editor/review-panel.less


+ 0 - 0
services/web/public/stylesheets/app/editor/rich-text.less → services/web/frontend/stylesheets/app/editor/rich-text.less


+ 0 - 0
services/web/public/stylesheets/app/editor/search.less → services/web/frontend/stylesheets/app/editor/search.less


+ 0 - 0
services/web/public/stylesheets/app/editor/share.less → services/web/frontend/stylesheets/app/editor/share.less


+ 0 - 0
services/web/public/stylesheets/app/editor/toolbar.less → services/web/frontend/stylesheets/app/editor/toolbar.less


+ 0 - 0
services/web/public/stylesheets/app/error-pages.less → services/web/frontend/stylesheets/app/error-pages.less


+ 0 - 0
services/web/public/stylesheets/app/features.less → services/web/frontend/stylesheets/app/features.less


+ 0 - 0
services/web/public/stylesheets/app/front-chat-widget.less → services/web/frontend/stylesheets/app/front-chat-widget.less


+ 0 - 0
services/web/public/stylesheets/app/homepage.less → services/web/frontend/stylesheets/app/homepage.less


+ 0 - 0
services/web/public/stylesheets/app/import.less → services/web/frontend/stylesheets/app/import.less


+ 0 - 0
services/web/public/stylesheets/app/institution-hub.less → services/web/frontend/stylesheets/app/institution-hub.less


+ 0 - 0
services/web/public/stylesheets/app/invite.less → services/web/frontend/stylesheets/app/invite.less


+ 0 - 0
services/web/public/stylesheets/app/list/v1-import-modal.less → services/web/frontend/stylesheets/app/list/v1-import-modal.less


+ 0 - 0
services/web/public/stylesheets/app/login-register.less → services/web/frontend/stylesheets/app/login-register.less


+ 0 - 0
services/web/public/stylesheets/app/metrics.less → services/web/frontend/stylesheets/app/metrics.less


+ 0 - 0
services/web/public/stylesheets/app/ol-chat.less → services/web/frontend/stylesheets/app/ol-chat.less


+ 0 - 0
services/web/public/stylesheets/app/ol-style-guide.less → services/web/frontend/stylesheets/app/ol-style-guide.less


+ 0 - 0
services/web/public/stylesheets/app/open-in-overleaf.less → services/web/frontend/stylesheets/app/open-in-overleaf.less


+ 0 - 0
services/web/public/stylesheets/app/plans-ol.less → services/web/frontend/stylesheets/app/plans-ol.less


+ 0 - 0
services/web/public/stylesheets/app/plans.less → services/web/frontend/stylesheets/app/plans.less


+ 0 - 0
services/web/public/stylesheets/app/portals.less → services/web/frontend/stylesheets/app/portals.less


+ 0 - 0
services/web/public/stylesheets/app/project-list.less → services/web/frontend/stylesheets/app/project-list.less


+ 0 - 0
services/web/public/stylesheets/app/publisher-hub.less → services/web/frontend/stylesheets/app/publisher-hub.less


+ 0 - 0
services/web/public/stylesheets/app/recurly.less → services/web/frontend/stylesheets/app/recurly.less


+ 0 - 0
services/web/public/stylesheets/app/register.less → services/web/frontend/stylesheets/app/register.less


+ 0 - 0
services/web/public/stylesheets/app/review-features-page.less → services/web/frontend/stylesheets/app/review-features-page.less


+ 0 - 0
services/web/public/stylesheets/app/sidebar-v2-dash-pane.less → services/web/frontend/stylesheets/app/sidebar-v2-dash-pane.less


+ 0 - 0
services/web/public/stylesheets/app/sprites.less → services/web/frontend/stylesheets/app/sprites.less


+ 0 - 0
services/web/public/stylesheets/app/subscription.less → services/web/frontend/stylesheets/app/subscription.less


+ 0 - 0
services/web/public/stylesheets/app/templates-v2.less → services/web/frontend/stylesheets/app/templates-v2.less


+ 0 - 0
services/web/public/stylesheets/app/templates.less → services/web/frontend/stylesheets/app/templates.less


+ 0 - 0
services/web/public/stylesheets/app/translations.less → services/web/frontend/stylesheets/app/translations.less


+ 0 - 0
services/web/public/stylesheets/app/v1-badge.less → services/web/frontend/stylesheets/app/v1-badge.less


+ 0 - 0
services/web/public/stylesheets/app/wiki.less → services/web/frontend/stylesheets/app/wiki.less


+ 0 - 0
services/web/public/stylesheets/components/alerts.less → services/web/frontend/stylesheets/components/alerts.less


+ 0 - 0
services/web/public/stylesheets/components/badges.less → services/web/frontend/stylesheets/components/badges.less


+ 0 - 0
services/web/public/stylesheets/components/breadcrumbs.less → services/web/frontend/stylesheets/components/breadcrumbs.less


+ 0 - 0
services/web/public/stylesheets/components/button-groups.less → services/web/frontend/stylesheets/components/button-groups.less


+ 0 - 0
services/web/public/stylesheets/components/buttons.less → services/web/frontend/stylesheets/components/buttons.less


+ 0 - 0
services/web/public/stylesheets/components/card.less → services/web/frontend/stylesheets/components/card.less


+ 0 - 0
services/web/public/stylesheets/components/carousel.less → services/web/frontend/stylesheets/components/carousel.less


+ 0 - 0
services/web/public/stylesheets/components/close.less → services/web/frontend/stylesheets/components/close.less


+ 0 - 0
services/web/public/stylesheets/components/code.less → services/web/frontend/stylesheets/components/code.less


+ 0 - 0
services/web/public/stylesheets/components/component-animations.less → services/web/frontend/stylesheets/components/component-animations.less


+ 0 - 0
services/web/public/stylesheets/components/daterange-picker.less → services/web/frontend/stylesheets/components/daterange-picker.less


+ 0 - 0
services/web/public/stylesheets/components/dropdowns.less → services/web/frontend/stylesheets/components/dropdowns.less


+ 0 - 0
services/web/public/stylesheets/components/embed-responsive.less → services/web/frontend/stylesheets/components/embed-responsive.less


+ 0 - 10
services/web/public/stylesheets/components/fineupload.less → services/web/frontend/stylesheets/components/fineupload.less

@@ -101,16 +101,6 @@
   height: 15px;
   vertical-align: text-bottom;
 }
-.qq-drop-processing-selector {
-  display: none;
-}
-.qq-drop-processing-spinner-selector {
-  display: inline-block;
-  background: url('processing.gif');
-  width: 24px;
-  height: 24px;
-  vertical-align: text-bottom;
-}
 .qq-upload-finished-selector {
   display: none;
   width: 15px;

+ 0 - 0
services/web/public/stylesheets/components/footer.less → services/web/frontend/stylesheets/components/footer.less


+ 0 - 0
services/web/public/stylesheets/components/forms.less → services/web/frontend/stylesheets/components/forms.less


+ 0 - 0
services/web/public/stylesheets/components/hover.less → services/web/frontend/stylesheets/components/hover.less


+ 0 - 0
services/web/public/stylesheets/components/icons.less → services/web/frontend/stylesheets/components/icons.less


+ 0 - 0
services/web/public/stylesheets/components/images.less → services/web/frontend/stylesheets/components/images.less


+ 0 - 0
services/web/public/stylesheets/components/input-groups.less → services/web/frontend/stylesheets/components/input-groups.less


+ 0 - 0
services/web/public/stylesheets/components/input-suggestions.less → services/web/frontend/stylesheets/components/input-suggestions.less


+ 0 - 0
services/web/public/stylesheets/components/jumbotron.less → services/web/frontend/stylesheets/components/jumbotron.less


+ 0 - 0
services/web/public/stylesheets/components/labels.less → services/web/frontend/stylesheets/components/labels.less


+ 0 - 0
services/web/public/stylesheets/components/list-group.less → services/web/frontend/stylesheets/components/list-group.less


+ 0 - 0
services/web/public/stylesheets/components/lists.less → services/web/frontend/stylesheets/components/lists.less


+ 0 - 0
services/web/public/stylesheets/components/media.less → services/web/frontend/stylesheets/components/media.less


+ 0 - 0
services/web/public/stylesheets/components/modals.less → services/web/frontend/stylesheets/components/modals.less


+ 0 - 0
services/web/public/stylesheets/components/navbar.less → services/web/frontend/stylesheets/components/navbar.less


+ 0 - 0
services/web/public/stylesheets/components/navs-ol.less → services/web/frontend/stylesheets/components/navs-ol.less


Some files were not shown because too many files changed in this diff