Explorar o código

Merge pull request #473 from sharelatex/hob-publish-modal-setup

Publish modal web setup
Hugh O'Brien %!s(int64=8) %!d(string=hai) anos
pai
achega
2d3f169c49

+ 2 - 0
services/web/app/coffee/infrastructure/Features.coffee

@@ -14,6 +14,8 @@ module.exports = Features =
 				return Settings.enableGithubSync
 				return Settings.enableGithubSync
 			when 'v1-return-message'
 			when 'v1-return-message'
 				return Settings.accountMerge? and Settings.overleaf?
 				return Settings.accountMerge? and Settings.overleaf?
+			when 'publish-modal'
+				return Settings.showPublishModal
 			when 'custom-togglers'
 			when 'custom-togglers'
 				return Settings.overleaf?
 				return Settings.overleaf?
 			else
 			else

+ 2 - 0
services/web/app/views/project/editor.pug

@@ -55,6 +55,7 @@ block content
 				include ./editor/header
 				include ./editor/header
 
 
 				include ./editor/share
 				include ./editor/share
+				!= moduleIncludes("publish:body", locals)
 
 
 				#ide-body(
 				#ide-body(
 					ng-cloak,
 					ng-cloak,
@@ -137,6 +138,7 @@ block requirejs
 				"ide": "#{buildJsPath('ide.js', {hashedPath:settings.useMinifiedJs, removeExtension:true})}",
 				"ide": "#{buildJsPath('ide.js', {hashedPath:settings.useMinifiedJs, removeExtension:true})}",
 				"libraries": "#{buildJsPath('libraries.js', {hashedPath:settings.useMinifiedJs, removeExtension:true})}",
 				"libraries": "#{buildJsPath('libraries.js', {hashedPath:settings.useMinifiedJs, removeExtension:true})}",
 				!{moduleIncludes("editor:script", locals)}
 				!{moduleIncludes("editor:script", locals)}
+				!{moduleIncludes("publish:script", locals)}
 			},
 			},
 			"waitSeconds": 0,
 			"waitSeconds": 0,
 			"shim": {
 			"shim": {

+ 3 - 0
services/web/app/views/project/editor/header.pug

@@ -107,6 +107,9 @@ header.toolbar.toolbar-header.toolbar-with-labels(
 		)
 		)
 			i.fa.fa-fw.fa-group
 			i.fa.fa-fw.fa-group
 			p.toolbar-label #{translate("share")}
 			p.toolbar-label #{translate("share")}
+
+		!= moduleIncludes('publish:button', locals)
+
 		a.btn.btn-full-height(
 		a.btn.btn-full-height(
 			href,
 			href,
 			ng-click="toggleHistory();",
 			ng-click="toggleHistory();",

+ 126 - 8
services/web/npm-shrinkwrap.json

@@ -533,6 +533,12 @@
       "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz",
       "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz",
       "dev": true
       "dev": true
     },
     },
+    "babel-helper-builder-react-jsx": {
+      "version": "6.26.0",
+      "from": "babel-helper-builder-react-jsx@>=6.24.1 <7.0.0",
+      "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz",
+      "dev": true
+    },
     "babel-helper-call-delegate": {
     "babel-helper-call-delegate": {
       "version": "6.24.1",
       "version": "6.24.1",
       "from": "babel-helper-call-delegate@>=6.24.1 <7.0.0",
       "from": "babel-helper-call-delegate@>=6.24.1 <7.0.0",
@@ -629,6 +635,18 @@
       "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz",
       "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz",
       "dev": true
       "dev": true
     },
     },
+    "babel-plugin-syntax-flow": {
+      "version": "6.18.0",
+      "from": "babel-plugin-syntax-flow@>=6.18.0 <7.0.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz",
+      "dev": true
+    },
+    "babel-plugin-syntax-jsx": {
+      "version": "6.18.0",
+      "from": "babel-plugin-syntax-jsx@>=6.3.13 <7.0.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
+      "dev": true
+    },
     "babel-plugin-syntax-trailing-function-commas": {
     "babel-plugin-syntax-trailing-function-commas": {
       "version": "6.22.0",
       "version": "6.22.0",
       "from": "babel-plugin-syntax-trailing-function-commas@>=6.22.0 <7.0.0",
       "from": "babel-plugin-syntax-trailing-function-commas@>=6.22.0 <7.0.0",
@@ -779,6 +797,36 @@
       "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz",
       "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz",
       "dev": true
       "dev": true
     },
     },
+    "babel-plugin-transform-flow-strip-types": {
+      "version": "6.22.0",
+      "from": "babel-plugin-transform-flow-strip-types@>=6.22.0 <7.0.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz",
+      "dev": true
+    },
+    "babel-plugin-transform-react-display-name": {
+      "version": "6.25.0",
+      "from": "babel-plugin-transform-react-display-name@>=6.23.0 <7.0.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz",
+      "dev": true
+    },
+    "babel-plugin-transform-react-jsx": {
+      "version": "6.24.1",
+      "from": "babel-plugin-transform-react-jsx@>=6.24.1 <7.0.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz",
+      "dev": true
+    },
+    "babel-plugin-transform-react-jsx-self": {
+      "version": "6.22.0",
+      "from": "babel-plugin-transform-react-jsx-self@>=6.22.0 <7.0.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz",
+      "dev": true
+    },
+    "babel-plugin-transform-react-jsx-source": {
+      "version": "6.22.0",
+      "from": "babel-plugin-transform-react-jsx-source@>=6.22.0 <7.0.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz",
+      "dev": true
+    },
     "babel-plugin-transform-regenerator": {
     "babel-plugin-transform-regenerator": {
       "version": "6.26.0",
       "version": "6.26.0",
       "from": "babel-plugin-transform-regenerator@>=6.22.0 <7.0.0",
       "from": "babel-plugin-transform-regenerator@>=6.22.0 <7.0.0",
@@ -805,6 +853,18 @@
         }
         }
       }
       }
     },
     },
+    "babel-preset-flow": {
+      "version": "6.23.0",
+      "from": "babel-preset-flow@>=6.23.0 <7.0.0",
+      "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz",
+      "dev": true
+    },
+    "babel-preset-react": {
+      "version": "6.24.1",
+      "from": "babel-preset-react@>=6.16.0 <7.0.0",
+      "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz",
+      "dev": true
+    },
     "babel-register": {
     "babel-register": {
       "version": "6.26.0",
       "version": "6.26.0",
       "from": "babel-register@>=6.26.0 <7.0.0",
       "from": "babel-register@>=6.26.0 <7.0.0",
@@ -2031,6 +2091,11 @@
       "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz",
       "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz",
       "dev": true
       "dev": true
     },
     },
+    "create-react-class": {
+      "version": "15.6.3",
+      "from": "create-react-class@>=15.6.0 <16.0.0",
+      "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz"
+    },
     "cross-spawn": {
     "cross-spawn": {
       "version": "5.1.0",
       "version": "5.1.0",
       "from": "cross-spawn@>=5.0.1 <6.0.0",
       "from": "cross-spawn@>=5.0.1 <6.0.0",
@@ -3429,6 +3494,23 @@
       "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
       "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
       "dev": true
       "dev": true
     },
     },
+    "fbjs": {
+      "version": "0.8.16",
+      "from": "fbjs@>=0.8.9 <0.9.0",
+      "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz",
+      "dependencies": {
+        "core-js": {
+          "version": "1.2.7",
+          "from": "core-js@>=1.0.0 <2.0.0",
+          "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz"
+        },
+        "promise": {
+          "version": "7.3.1",
+          "from": "promise@>=7.1.1 <8.0.0",
+          "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz"
+        }
+      }
+    },
     "fd-slicer": {
     "fd-slicer": {
       "version": "1.0.1",
       "version": "1.0.1",
       "from": "fd-slicer@>=1.0.1 <1.1.0",
       "from": "fd-slicer@>=1.0.1 <1.1.0",
@@ -3744,6 +3826,11 @@
       "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
       "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
       "dev": true
       "dev": true
     },
     },
+    "fuse.js": {
+      "version": "3.2.0",
+      "from": "fuse.js@>=3.0.0 <4.0.0",
+      "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-3.2.0.tgz"
+    },
     "gauge": {
     "gauge": {
       "version": "2.7.4",
       "version": "2.7.4",
       "from": "gauge@>=2.7.3 <2.8.0",
       "from": "gauge@>=2.7.3 <2.8.0",
@@ -5307,8 +5394,7 @@
     "is-stream": {
     "is-stream": {
       "version": "1.1.0",
       "version": "1.1.0",
       "from": "is-stream@>=1.1.0 <2.0.0",
       "from": "is-stream@>=1.1.0 <2.0.0",
-      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
-      "dev": true
+      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz"
     },
     },
     "is-symbol": {
     "is-symbol": {
       "version": "1.0.1",
       "version": "1.0.1",
@@ -5355,6 +5441,11 @@
       "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
       "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
       "dev": true
       "dev": true
     },
     },
+    "isomorphic-fetch": {
+      "version": "2.2.1",
+      "from": "isomorphic-fetch@>=2.1.1 <3.0.0",
+      "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz"
+    },
     "isstream": {
     "isstream": {
       "version": "0.1.2",
       "version": "0.1.2",
       "from": "isstream@>=0.1.2 <0.2.0",
       "from": "isstream@>=0.1.2 <0.2.0",
@@ -5391,8 +5482,7 @@
     "js-tokens": {
     "js-tokens": {
       "version": "3.0.2",
       "version": "3.0.2",
       "from": "js-tokens@>=3.0.2 <4.0.0",
       "from": "js-tokens@>=3.0.2 <4.0.0",
-      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
-      "dev": true
+      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz"
     },
     },
     "js-yaml": {
     "js-yaml": {
       "version": "2.0.5",
       "version": "2.0.5",
@@ -6858,8 +6948,7 @@
     "loose-envify": {
     "loose-envify": {
       "version": "1.3.1",
       "version": "1.3.1",
       "from": "loose-envify@>=1.0.0 <2.0.0",
       "from": "loose-envify@>=1.0.0 <2.0.0",
-      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
-      "dev": true
+      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz"
     },
     },
     "loud-rejection": {
     "loud-rejection": {
       "version": "1.6.0",
       "version": "1.6.0",
@@ -7620,6 +7709,11 @@
       "from": "nocache@2.0.0",
       "from": "nocache@2.0.0",
       "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.0.0.tgz"
       "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.0.0.tgz"
     },
     },
+    "node-fetch": {
+      "version": "1.7.3",
+      "from": "node-fetch@>=1.0.1 <2.0.0",
+      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz"
+    },
     "node-forge": {
     "node-forge": {
       "version": "0.2.24",
       "version": "0.2.24",
       "from": "node-forge@0.2.24",
       "from": "node-forge@0.2.24",
@@ -8663,6 +8757,11 @@
       "resolved": "https://registry.npmjs.org/prompt/-/prompt-0.2.14.tgz",
       "resolved": "https://registry.npmjs.org/prompt/-/prompt-0.2.14.tgz",
       "dev": true
       "dev": true
     },
     },
+    "prop-types": {
+      "version": "15.6.1",
+      "from": "prop-types@>=15.5.10 <16.0.0",
+      "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz"
+    },
     "proxy-addr": {
     "proxy-addr": {
       "version": "1.0.10",
       "version": "1.0.10",
       "from": "proxy-addr@>=1.0.8 <1.1.0",
       "from": "proxy-addr@>=1.0.8 <1.1.0",
@@ -8967,6 +9066,16 @@
         }
         }
       }
       }
     },
     },
+    "react": {
+      "version": "15.6.2",
+      "from": "react@>=15.4.2 <16.0.0",
+      "resolved": "https://registry.npmjs.org/react/-/react-15.6.2.tgz"
+    },
+    "react-dom": {
+      "version": "15.6.2",
+      "from": "react-dom@>=15.4.2 <16.0.0",
+      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.6.2.tgz"
+    },
     "read": {
     "read": {
       "version": "1.0.7",
       "version": "1.0.7",
       "from": "read@>=1.0.0 <1.1.0",
       "from": "read@>=1.0.0 <1.1.0",
@@ -9676,8 +9785,7 @@
     "setimmediate": {
     "setimmediate": {
       "version": "1.0.5",
       "version": "1.0.5",
       "from": "setimmediate@>=1.0.4 <2.0.0",
       "from": "setimmediate@>=1.0.4 <2.0.0",
-      "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
-      "dev": true
+      "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz"
     },
     },
     "setprototypeof": {
     "setprototypeof": {
       "version": "1.0.3",
       "version": "1.0.3",
@@ -10945,6 +11053,11 @@
       "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
       "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
       "dev": true
       "dev": true
     },
     },
+    "ua-parser-js": {
+      "version": "0.7.17",
+      "from": "ua-parser-js@>=0.7.9 <0.8.0",
+      "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz"
+    },
     "uglify-js": {
     "uglify-js": {
       "version": "2.4.24",
       "version": "2.4.24",
       "from": "uglify-js@>=2.4.0 <2.5.0",
       "from": "uglify-js@>=2.4.0 <2.5.0",
@@ -12061,6 +12174,11 @@
       "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
       "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
       "dev": true
       "dev": true
     },
     },
+    "whatwg-fetch": {
+      "version": "2.0.4",
+      "from": "whatwg-fetch@>=0.10.0",
+      "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz"
+    },
     "when": {
     "when": {
       "version": "3.7.8",
       "version": "3.7.8",
       "from": "when@>=3.7.7 <4.0.0",
       "from": "when@>=3.7.7 <4.0.0",

+ 4 - 0
services/web/package.json

@@ -42,6 +42,7 @@
     "express-http-proxy": "^1.1.0",
     "express-http-proxy": "^1.1.0",
     "express-session": "^1.14.2",
     "express-session": "^1.14.2",
     "fs-extra": "^4.0.2",
     "fs-extra": "^4.0.2",
+    "fuse.js": "^3.0.0",
     "heapdump": "^0.3.7",
     "heapdump": "^0.3.7",
     "helmet": "^3.8.1",
     "helmet": "^3.8.1",
     "http-proxy": "^1.8.1",
     "http-proxy": "^1.8.1",
@@ -72,6 +73,8 @@
     "passport-oauth2-refresh": "^1.0.0",
     "passport-oauth2-refresh": "^1.0.0",
     "passport-saml": "^0.15.0",
     "passport-saml": "^0.15.0",
     "pug": "^2.0.0-beta6",
     "pug": "^2.0.0-beta6",
+    "react": "^15.4.2",
+    "react-dom": "^15.4.2",
     "redis-sharelatex": "git+https://github.com/sharelatex/redis-sharelatex.git#v1.0.4",
     "redis-sharelatex": "git+https://github.com/sharelatex/redis-sharelatex.git#v1.0.4",
     "request": "^2.69.0",
     "request": "^2.69.0",
     "requestretry": "^1.13.0",
     "requestretry": "^1.13.0",
@@ -95,6 +98,7 @@
     "babel-core": "^6.26.0",
     "babel-core": "^6.26.0",
     "babel-loader": "^7.1.2",
     "babel-loader": "^7.1.2",
     "babel-preset-env": "^1.6.1",
     "babel-preset-env": "^1.6.1",
+    "babel-preset-react": "^6.16.0",
     "bunyan": "0.22.1",
     "bunyan": "0.22.1",
     "chai": "3.5.0",
     "chai": "3.5.0",
     "chai-spies": "",
     "chai-spies": "",

+ 3 - 1
services/web/webpack.config.js

@@ -52,6 +52,7 @@ module.exports = {
 				loader: 'babel-loader',
 				loader: 'babel-loader',
 				options: {
 				options: {
 					presets: [
 					presets: [
+						'react',
 						['env', { modules: false }]
 						['env', { modules: false }]
 					],
 					],
 					// Configure babel-loader to cache compiled output so that subsequent
 					// Configure babel-loader to cache compiled output so that subsequent
@@ -64,4 +65,5 @@ module.exports = {
 
 
 	// TODO
 	// TODO
 	// plugins: {}
 	// plugins: {}
-}
+}
+