mirror of
https://github.com/overleaf/overleaf.git
synced 2025-02-12 11:23:51 +00:00
Remove Angular (#17534)
GitOrigin-RevId: 7a0d45e17d9905fa75569e2d19ca59caa4a41565
This commit is contained in:
parent
b3d33fe813
commit
c24ace801b
149 changed files with 665 additions and 21004 deletions
224
package-lock.json
generated
224
package-lock.json
generated
|
@ -12243,12 +12243,6 @@
|
|||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/angular": {
|
||||
"version": "1.8.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/angular/-/angular-1.8.4.tgz",
|
||||
"integrity": "sha512-wPS/ncJWhyxJsndsW1B6Ta8D4mi97x1yItSu+rkLDytU3oRIh2CFAjMuJceYwFAh9+DIohndWM0QBA9OU2Hv0g==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/aria-query": {
|
||||
"version": "4.2.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz",
|
||||
|
@ -12691,15 +12685,6 @@
|
|||
"integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/lodash.frompairs": {
|
||||
"version": "4.0.6",
|
||||
"resolved": "https://registry.npmjs.org/@types/lodash.frompairs/-/lodash.frompairs-4.0.6.tgz",
|
||||
"integrity": "sha512-rwCUf4NMKhXpiVjL/RXP8YOk+rd02/J4tACADEgaMXRVnzDbSSlBMKFZoX/ARmHVLg3Qc98Um4PErGv8FbxU7w==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/lodash": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/long": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
|
||||
|
@ -14733,25 +14718,6 @@
|
|||
"integrity": "sha512-VJK1SRmXBpjwsB4YOHYSturx48rLKMzHgCqDH2ZDa6ZbMS/N5huoNqyQdK5Fj/xayu3fqbXckn5SeCS1EbMDZg==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/angular": {
|
||||
"version": "1.8.3",
|
||||
"resolved": "https://registry.npmjs.org/angular/-/angular-1.8.3.tgz",
|
||||
"integrity": "sha512-5qjkWIQQVsHj4Sb5TcEs4WZWpFeVFHXwxEBHUhrny41D8UrBAd6T/6nPPAsLngJCReIOqi95W3mxdveveutpZw==",
|
||||
"deprecated": "For the actively supported Angular, see https://www.npmjs.com/package/@angular/core. AngularJS support has officially ended. For extended AngularJS support options, see https://goo.gle/angularjs-path-forward.",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/angular-mocks": {
|
||||
"version": "1.8.2",
|
||||
"resolved": "https://registry.npmjs.org/angular-mocks/-/angular-mocks-1.8.2.tgz",
|
||||
"integrity": "sha512-I5L3P0l21HPdVsP4A4qWmENt4ePjjbkDFdAzOaM7QiibFySbt14DptPbt2IjeG4vFBr4vSLbhIz8Fk03DISl8Q==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/angular-sanitize": {
|
||||
"version": "1.8.2",
|
||||
"resolved": "https://registry.npmjs.org/angular-sanitize/-/angular-sanitize-1.8.2.tgz",
|
||||
"integrity": "sha512-OB6Goa+QN3byf5asQ7XRl7DKZejm/F/ZOqa9z1skqYVOWA2hoBxoCmt9E7+i7T/TbxZP5zYzKxNZVVJNu860Hg==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/ansi-color": {
|
||||
"version": "0.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-color/-/ansi-color-0.2.1.tgz",
|
||||
|
@ -15617,17 +15583,6 @@
|
|||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/babel-plugin-angularjs-annotate": {
|
||||
"version": "0.10.0",
|
||||
"resolved": "https://registry.npmjs.org/babel-plugin-angularjs-annotate/-/babel-plugin-angularjs-annotate-0.10.0.tgz",
|
||||
"integrity": "sha512-NPE7FOAxcLPCUR/kNkrhHIjoScR3RyIlRH3yRn79j8EZWtpILVnCOdA9yKfsOmRh6BHnLHKl8ZAThc+YDd/QwQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "^7.0.0",
|
||||
"@babel/types": "^7.2.0",
|
||||
"simple-is": "~0.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/babel-plugin-macros": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
|
||||
|
@ -27997,12 +27952,6 @@
|
|||
"lodash.keys": "~2.4.1"
|
||||
}
|
||||
},
|
||||
"node_modules/lodash.frompairs": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/lodash.frompairs/-/lodash.frompairs-4.0.1.tgz",
|
||||
"integrity": "sha1-vE5SB/onV8E25XNhTpZkUGsrG9I=",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/lodash.get": {
|
||||
"version": "4.4.2",
|
||||
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
|
||||
|
@ -30011,18 +29960,6 @@
|
|||
"resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
|
||||
"integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ=="
|
||||
},
|
||||
"node_modules/ngcomponent": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/ngcomponent/-/ngcomponent-4.1.0.tgz",
|
||||
"integrity": "sha512-cGL3iVoqMWTpCfaIwgRKhdaGqiy2Z+CCG0cVfjlBvdqE8saj8xap9B4OTf+qwObxLVZmDTJPDgx3bN6Q/lZ7BQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/angular": "^1.6.39",
|
||||
"@types/lodash": "^4.14.85",
|
||||
"angular": ">=1.5.0",
|
||||
"lodash": "^4.17.4"
|
||||
}
|
||||
},
|
||||
"node_modules/nise": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/nise/-/nise-4.1.0.tgz",
|
||||
|
@ -34807,52 +34744,6 @@
|
|||
"react-dom": ">=15.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/react2angular": {
|
||||
"version": "4.0.6",
|
||||
"resolved": "https://registry.npmjs.org/react2angular/-/react2angular-4.0.6.tgz",
|
||||
"integrity": "sha512-MDl2WRoTyu7Gyh4+FAIlmsM2mxIa/DjSz6G/d90L1tK8ZRubqVEayKF6IPyAruC5DMhGDVJ7tlAIcu/gMNDjXg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/lodash.frompairs": "^4.0.5",
|
||||
"angular": ">=1.5",
|
||||
"lodash.frompairs": "^4.0.1",
|
||||
"ngcomponent": "^4.1.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@types/angular": ">=1.5",
|
||||
"@types/prop-types": ">=15",
|
||||
"@types/react": ">=16",
|
||||
"@types/react-dom": ">=16",
|
||||
"prop-types": ">=15",
|
||||
"react": ">=15",
|
||||
"react-dom": ">=15"
|
||||
}
|
||||
},
|
||||
"node_modules/react2angular-shared-context": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/react2angular-shared-context/-/react2angular-shared-context-1.1.2.tgz",
|
||||
"integrity": "sha512-0zrxBjmBs+et5zYNknx/jvrJCzGz6KbF8BHfzXHTl9ms6iMsbmmXkZiQQksVT1Og5wnkmVq9nlLVfWYJLSXF0w==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"uuid": "^8.3.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": "^16.0.0 || ^17",
|
||||
"react-dom": "^16.0.0 || ^17"
|
||||
}
|
||||
},
|
||||
"node_modules/react2angular-shared-context/node_modules/uuid": {
|
||||
"version": "8.3.2",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
|
||||
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"uuid": "dist/bin/uuid"
|
||||
}
|
||||
},
|
||||
"node_modules/reactcss": {
|
||||
"version": "1.2.3",
|
||||
"resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz",
|
||||
|
@ -36673,12 +36564,6 @@
|
|||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/simple-is": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/simple-is/-/simple-is-0.2.0.tgz",
|
||||
"integrity": "sha1-Krt1qt453rXMgVzhDmGRFkhQuvA=",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/simple-oauth2": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/simple-oauth2/-/simple-oauth2-5.0.0.tgz",
|
||||
|
@ -44616,12 +44501,8 @@
|
|||
"acorn": "^7.1.1",
|
||||
"acorn-walk": "^7.1.1",
|
||||
"algoliasearch": "^3.35.1",
|
||||
"angular": "~1.8.0",
|
||||
"angular-mocks": "~1.8.0",
|
||||
"angular-sanitize": "~1.8.0",
|
||||
"autoprefixer": "^10.4.16",
|
||||
"babel-loader": "^9.1.2",
|
||||
"babel-plugin-angularjs-annotate": "^0.10.0",
|
||||
"babel-plugin-macros": "^3.1.0",
|
||||
"babel-plugin-module-resolver": "^5.0.0",
|
||||
"backbone": "^1.3.3",
|
||||
|
@ -44698,8 +44579,6 @@
|
|||
"react-linkify": "^1.0.0-alpha",
|
||||
"react-refresh": "^0.14.0",
|
||||
"react-resizable-panels": "^1.0.3",
|
||||
"react2angular": "^4.0.6",
|
||||
"react2angular-shared-context": "^1.1.0",
|
||||
"requirejs": "^2.3.6",
|
||||
"resolve-url-loader": "^5.0.0",
|
||||
"samlp": "^7.0.2",
|
||||
|
@ -53003,14 +52882,10 @@
|
|||
"acorn": "^7.1.1",
|
||||
"acorn-walk": "^7.1.1",
|
||||
"algoliasearch": "^3.35.1",
|
||||
"angular": "~1.8.0",
|
||||
"angular-mocks": "~1.8.0",
|
||||
"angular-sanitize": "~1.8.0",
|
||||
"archiver": "^5.3.0",
|
||||
"async": "3.2.2",
|
||||
"autoprefixer": "^10.4.16",
|
||||
"babel-loader": "^9.1.2",
|
||||
"babel-plugin-angularjs-annotate": "^0.10.0",
|
||||
"babel-plugin-macros": "^3.1.0",
|
||||
"babel-plugin-module-resolver": "^5.0.0",
|
||||
"backbone": "^1.3.3",
|
||||
|
@ -53152,8 +53027,6 @@
|
|||
"react-linkify": "^1.0.0-alpha",
|
||||
"react-refresh": "^0.14.0",
|
||||
"react-resizable-panels": "^1.0.3",
|
||||
"react2angular": "^4.0.6",
|
||||
"react2angular-shared-context": "^1.1.0",
|
||||
"recurly": "^4.0.0",
|
||||
"referer-parser": "github:overleaf/nodejs-referer-parser#8b8b103762d05b7be4cfa2f810e1d408be67d7bb",
|
||||
"request": "^2.88.2",
|
||||
|
@ -57040,12 +56913,6 @@
|
|||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"@types/angular": {
|
||||
"version": "1.8.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/angular/-/angular-1.8.4.tgz",
|
||||
"integrity": "sha512-wPS/ncJWhyxJsndsW1B6Ta8D4mi97x1yItSu+rkLDytU3oRIh2CFAjMuJceYwFAh9+DIohndWM0QBA9OU2Hv0g==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/aria-query": {
|
||||
"version": "4.2.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz",
|
||||
|
@ -57487,15 +57354,6 @@
|
|||
"integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/lodash.frompairs": {
|
||||
"version": "4.0.6",
|
||||
"resolved": "https://registry.npmjs.org/@types/lodash.frompairs/-/lodash.frompairs-4.0.6.tgz",
|
||||
"integrity": "sha512-rwCUf4NMKhXpiVjL/RXP8YOk+rd02/J4tACADEgaMXRVnzDbSSlBMKFZoX/ARmHVLg3Qc98Um4PErGv8FbxU7w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/lodash": "*"
|
||||
}
|
||||
},
|
||||
"@types/long": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
|
||||
|
@ -59081,24 +58939,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"angular": {
|
||||
"version": "1.8.3",
|
||||
"resolved": "https://registry.npmjs.org/angular/-/angular-1.8.3.tgz",
|
||||
"integrity": "sha512-5qjkWIQQVsHj4Sb5TcEs4WZWpFeVFHXwxEBHUhrny41D8UrBAd6T/6nPPAsLngJCReIOqi95W3mxdveveutpZw==",
|
||||
"dev": true
|
||||
},
|
||||
"angular-mocks": {
|
||||
"version": "1.8.2",
|
||||
"resolved": "https://registry.npmjs.org/angular-mocks/-/angular-mocks-1.8.2.tgz",
|
||||
"integrity": "sha512-I5L3P0l21HPdVsP4A4qWmENt4ePjjbkDFdAzOaM7QiibFySbt14DptPbt2IjeG4vFBr4vSLbhIz8Fk03DISl8Q==",
|
||||
"dev": true
|
||||
},
|
||||
"angular-sanitize": {
|
||||
"version": "1.8.2",
|
||||
"resolved": "https://registry.npmjs.org/angular-sanitize/-/angular-sanitize-1.8.2.tgz",
|
||||
"integrity": "sha512-OB6Goa+QN3byf5asQ7XRl7DKZejm/F/ZOqa9z1skqYVOWA2hoBxoCmt9E7+i7T/TbxZP5zYzKxNZVVJNu860Hg==",
|
||||
"dev": true
|
||||
},
|
||||
"ansi-color": {
|
||||
"version": "0.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-color/-/ansi-color-0.2.1.tgz",
|
||||
|
@ -59740,17 +59580,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"babel-plugin-angularjs-annotate": {
|
||||
"version": "0.10.0",
|
||||
"resolved": "https://registry.npmjs.org/babel-plugin-angularjs-annotate/-/babel-plugin-angularjs-annotate-0.10.0.tgz",
|
||||
"integrity": "sha512-NPE7FOAxcLPCUR/kNkrhHIjoScR3RyIlRH3yRn79j8EZWtpILVnCOdA9yKfsOmRh6BHnLHKl8ZAThc+YDd/QwQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.0.0",
|
||||
"@babel/types": "^7.2.0",
|
||||
"simple-is": "~0.2.0"
|
||||
}
|
||||
},
|
||||
"babel-plugin-macros": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
|
||||
|
@ -70105,12 +69934,6 @@
|
|||
"lodash.keys": "~2.4.1"
|
||||
}
|
||||
},
|
||||
"lodash.frompairs": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/lodash.frompairs/-/lodash.frompairs-4.0.1.tgz",
|
||||
"integrity": "sha1-vE5SB/onV8E25XNhTpZkUGsrG9I=",
|
||||
"dev": true
|
||||
},
|
||||
"lodash.get": {
|
||||
"version": "4.4.2",
|
||||
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
|
||||
|
@ -71596,18 +71419,6 @@
|
|||
"resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
|
||||
"integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ=="
|
||||
},
|
||||
"ngcomponent": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/ngcomponent/-/ngcomponent-4.1.0.tgz",
|
||||
"integrity": "sha512-cGL3iVoqMWTpCfaIwgRKhdaGqiy2Z+CCG0cVfjlBvdqE8saj8xap9B4OTf+qwObxLVZmDTJPDgx3bN6Q/lZ7BQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/angular": "^1.6.39",
|
||||
"@types/lodash": "^4.14.85",
|
||||
"angular": ">=1.5.0",
|
||||
"lodash": "^4.17.4"
|
||||
}
|
||||
},
|
||||
"nise": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/nise/-/nise-4.1.0.tgz",
|
||||
|
@ -75149,35 +74960,6 @@
|
|||
"react-lifecycles-compat": "^3.0.4"
|
||||
}
|
||||
},
|
||||
"react2angular": {
|
||||
"version": "4.0.6",
|
||||
"resolved": "https://registry.npmjs.org/react2angular/-/react2angular-4.0.6.tgz",
|
||||
"integrity": "sha512-MDl2WRoTyu7Gyh4+FAIlmsM2mxIa/DjSz6G/d90L1tK8ZRubqVEayKF6IPyAruC5DMhGDVJ7tlAIcu/gMNDjXg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/lodash.frompairs": "^4.0.5",
|
||||
"angular": ">=1.5",
|
||||
"lodash.frompairs": "^4.0.1",
|
||||
"ngcomponent": "^4.1.0"
|
||||
}
|
||||
},
|
||||
"react2angular-shared-context": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/react2angular-shared-context/-/react2angular-shared-context-1.1.2.tgz",
|
||||
"integrity": "sha512-0zrxBjmBs+et5zYNknx/jvrJCzGz6KbF8BHfzXHTl9ms6iMsbmmXkZiQQksVT1Og5wnkmVq9nlLVfWYJLSXF0w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"uuid": "^8.3.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"uuid": {
|
||||
"version": "8.3.2",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
|
||||
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"reactcss": {
|
||||
"version": "1.2.3",
|
||||
"resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz",
|
||||
|
@ -76578,12 +76360,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"simple-is": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/simple-is/-/simple-is-0.2.0.tgz",
|
||||
"integrity": "sha1-Krt1qt453rXMgVzhDmGRFkhQuvA=",
|
||||
"dev": true
|
||||
},
|
||||
"simple-oauth2": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/simple-oauth2/-/simple-oauth2-5.0.0.tgz",
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
diff --git a/node_modules/ngcomponent/index.ts b/node_modules/ngcomponent/index.ts
|
||||
index 5fe33c5..8e1c6fc 100644
|
||||
--- a/node_modules/ngcomponent/index.ts
|
||||
+++ b/node_modules/ngcomponent/index.ts
|
||||
@@ -1,3 +1,4 @@
|
||||
+// @ts-nocheck
|
||||
import { IChangesObject } from 'angular'
|
||||
import assign = require('lodash/assign')
|
||||
import mapValues = require('lodash/mapValues')
|
|
@ -1,9 +0,0 @@
|
|||
diff --git a/node_modules/react2angular/index.tsx b/node_modules/react2angular/index.tsx
|
||||
index 5cee831..a07e040 100644
|
||||
--- a/node_modules/react2angular/index.tsx
|
||||
+++ b/node_modules/react2angular/index.tsx
|
||||
@@ -1,3 +1,4 @@
|
||||
+// @ts-nocheck
|
||||
import { IAugmentedJQuery, IComponentOptions } from 'angular'
|
||||
import fromPairs = require('lodash.frompairs')
|
||||
import NgComponent from 'ngcomponent'
|
|
@ -603,15 +603,10 @@ const _ProjectController = {
|
|||
!showPersonalAccessToken &&
|
||||
splitTestAssignments['personal-access-token'].variant === 'enabled' // `?personal-access-token=enabled`
|
||||
|
||||
const idePageReact = splitTestAssignments['ide-page'].variant === 'react'
|
||||
|
||||
const template =
|
||||
detachRole === 'detached'
|
||||
? // TODO: Create React version of detached page
|
||||
'project/editor_detached'
|
||||
: idePageReact
|
||||
? 'project/ide-react'
|
||||
: 'project/editor'
|
||||
? 'project/ide-react-detached'
|
||||
: 'project/ide-react'
|
||||
|
||||
res.render(template, {
|
||||
title: project.name,
|
||||
|
@ -681,7 +676,6 @@ const _ProjectController = {
|
|||
showUpgradePrompt,
|
||||
fixedSizeDocument: true,
|
||||
useOpenTelemetry: Settings.useOpenTelemetryClient,
|
||||
idePageReact,
|
||||
showPersonalAccessToken,
|
||||
optionalPersonalAccessToken,
|
||||
hasTrackChangesFeature: Features.hasFeature('track-changes'),
|
||||
|
|
|
@ -12,7 +12,6 @@ const {
|
|||
handleAdminDomainRedirect,
|
||||
} = require('../Authorization/AuthorizationMiddleware')
|
||||
const ProjectAuditLogHandler = require('../Project/ProjectAuditLogHandler')
|
||||
const SplitTestHandler = require('../SplitTests/SplitTestHandler')
|
||||
|
||||
const orderedPrivilegeLevels = [
|
||||
PrivilegeLevels.NONE,
|
||||
|
@ -98,18 +97,7 @@ async function tokenAccessPage(req, res, next) {
|
|||
}
|
||||
}
|
||||
|
||||
const { variant } = await SplitTestHandler.promises.getAssignment(
|
||||
req,
|
||||
res,
|
||||
'token-access-page'
|
||||
)
|
||||
|
||||
const view =
|
||||
variant === 'react'
|
||||
? 'project/token/access-react'
|
||||
: 'project/token/access'
|
||||
|
||||
res.render(view, {
|
||||
res.render('project/token/access-react', {
|
||||
postUrl: makePostUrl(token),
|
||||
})
|
||||
} catch (err) {
|
||||
|
|
|
@ -72,7 +72,7 @@ html(
|
|||
|
||||
block head-scripts
|
||||
|
||||
body(ng-csp=(cspEnabled ? "no-unsafe-eval" : false) class=(showThinFooter ? 'thin-footer' : undefined))
|
||||
body(class=(showThinFooter ? 'thin-footer' : undefined))
|
||||
if(settings.recaptcha && settings.recaptcha.siteKeyV3)
|
||||
script(type="text/javascript", nonce=scriptNonce, src="https://www.recaptcha.net/recaptcha/api.js?render="+settings.recaptcha.siteKeyV3, defer=deferScripts)
|
||||
|
||||
|
|
|
@ -1,21 +0,0 @@
|
|||
extends ./layout-base
|
||||
|
||||
block entrypointVar
|
||||
- entrypoint = 'main'
|
||||
|
||||
block body
|
||||
if (typeof(suppressNavbar) == "undefined")
|
||||
include layout/navbar
|
||||
|
||||
block content
|
||||
|
||||
if (typeof(suppressFooter) == "undefined")
|
||||
if showThinFooter
|
||||
include layout/footer
|
||||
else
|
||||
include layout/fat-footer
|
||||
|
||||
if (typeof(suppressCookieBanner) == 'undefined')
|
||||
include _cookie_banner
|
||||
|
||||
!= moduleIncludes("contactModal", locals)
|
|
@ -1,42 +0,0 @@
|
|||
|
||||
|
||||
footer.site-footer
|
||||
- var showLanguagePicker = Object.keys(settings.i18n.subdomainLang).length > 1
|
||||
- var hasCustomLeftNav = nav.left_footer && nav.left_footer.length > 0
|
||||
.site-footer-content.hidden-print
|
||||
.row
|
||||
ul.col-md-9
|
||||
if hasFeature('saas')
|
||||
li © #{new Date().getFullYear()} Overleaf
|
||||
else if !settings.nav.hide_powered_by
|
||||
li
|
||||
//- year of Server Pro release, static
|
||||
| © 2024
|
||||
|
|
||||
a(href='https://www.overleaf.com/for/enterprises') Powered by Overleaf
|
||||
|
||||
if showLanguagePicker || hasCustomLeftNav
|
||||
li
|
||||
strong.text-muted |
|
||||
|
||||
if showLanguagePicker
|
||||
include language-picker
|
||||
|
||||
if showLanguagePicker && hasCustomLeftNav
|
||||
li
|
||||
strong.text-muted |
|
||||
|
||||
each item in nav.left_footer
|
||||
li
|
||||
if item.url
|
||||
a(href=item.url, class=item.class) !{translate(item.text)}
|
||||
else
|
||||
| !{item.text}
|
||||
|
||||
ul.col-md-3.text-right
|
||||
each item in nav.right_footer
|
||||
li
|
||||
if item.url
|
||||
a(href=item.url, class=item.class, aria-label=item.label) !{item.text}
|
||||
else
|
||||
| !{item.text}
|
|
@ -1,147 +0,0 @@
|
|||
nav.navbar.navbar-default.navbar-main
|
||||
.container-fluid
|
||||
.navbar-header
|
||||
if (typeof(suppressNavbarRight) == "undefined")
|
||||
button.navbar-toggle(ng-init="navCollapsed = true", ng-click="navCollapsed = !navCollapsed", ng-class="{active: !navCollapsed}", aria-label="Toggle " + translate('navigation'))
|
||||
i.fa.fa-bars(aria-hidden="true")
|
||||
if settings.nav.custom_logo
|
||||
a(href='/', aria-label=settings.appName, style='background-image:url("'+settings.nav.custom_logo+'")').navbar-brand
|
||||
else if (nav.title)
|
||||
a(href='/', aria-label=settings.appName, ng-non-bindable).navbar-title #{nav.title}
|
||||
else
|
||||
a(href='/', aria-label=settings.appName).navbar-brand
|
||||
|
||||
- var canDisplayAdminMenu = hasAdminAccess()
|
||||
- var canDisplayAdminRedirect = canRedirectToAdminDomain()
|
||||
- var canDisplaySplitTestMenu = hasFeature('saas') && (canDisplayAdminMenu || (getSessionUser() && getSessionUser().staffAccess && (getSessionUser().staffAccess.splitTestMetrics || getSessionUser().staffAccess.splitTestManagement)))
|
||||
- var canDisplaySurveyMenu = hasFeature('saas') && canDisplayAdminMenu
|
||||
|
||||
if (typeof(suppressNavbarRight) == "undefined")
|
||||
.navbar-collapse.collapse(collapse="navCollapsed")
|
||||
ul.nav.navbar-nav.navbar-right
|
||||
if (canDisplayAdminMenu || canDisplayAdminRedirect || canDisplaySplitTestMenu)
|
||||
li.dropdown(class="subdued", dropdown)
|
||||
a.dropdown-toggle(href, dropdown-toggle)
|
||||
| Admin
|
||||
b.caret
|
||||
ul.dropdown-menu
|
||||
if canDisplayAdminMenu
|
||||
li
|
||||
a(href="/admin") Manage Site
|
||||
li
|
||||
a(href="/admin/user") Manage Users
|
||||
li
|
||||
a(href="/admin/project") Project URL Lookup
|
||||
li
|
||||
a(href="/admin/saml/logs") SAML logs
|
||||
if canDisplayAdminRedirect
|
||||
li
|
||||
a(href=settings.adminUrl) Switch to Admin
|
||||
if canDisplaySplitTestMenu
|
||||
li
|
||||
a(href="/admin/split-test") Manage Feature Flags
|
||||
if canDisplaySurveyMenu
|
||||
li
|
||||
a(href="/admin/survey") Manage Surveys
|
||||
|
||||
// loop over header_extras
|
||||
each item in nav.header_extras
|
||||
-
|
||||
if ((item.only_when_logged_in && getSessionUser())
|
||||
|| (item.only_when_logged_out && (!getSessionUser()))
|
||||
|| (!item.only_when_logged_out && !item.only_when_logged_in && !item.only_content_pages)
|
||||
|| (item.only_content_pages && (typeof(suppressNavContentLinks) == "undefined" || !suppressNavContentLinks))
|
||||
){
|
||||
var showNavItem = true
|
||||
} else {
|
||||
var showNavItem = false
|
||||
}
|
||||
|
||||
if showNavItem
|
||||
if item.dropdown
|
||||
li.dropdown(class=item.class, dropdown)
|
||||
a.dropdown-toggle(href, dropdown-toggle)
|
||||
| !{translate(item.text)}
|
||||
b.caret
|
||||
ul.dropdown-menu
|
||||
each child in item.dropdown
|
||||
if child.divider
|
||||
li.divider
|
||||
else if child.isContactUs
|
||||
li
|
||||
a(ng-controller="ContactModal" ng-click="contactUsModal()" href)
|
||||
span(event-tracking="menu-clicked-contact" event-tracking-mb="true" event-tracking-trigger="click")
|
||||
| #{translate("contact_us")}
|
||||
else
|
||||
li
|
||||
if child.url
|
||||
a(
|
||||
href=child.url,
|
||||
class=child.class,
|
||||
event-tracking=child.event
|
||||
event-tracking-mb="true"
|
||||
event-tracking-trigger="click"
|
||||
event-segmentation=child.eventSegmentation
|
||||
) !{translate(child.text)}
|
||||
else
|
||||
| !{translate(child.text)}
|
||||
else
|
||||
li(class=item.class)
|
||||
if item.url
|
||||
a(
|
||||
href=item.url,
|
||||
class=item.class,
|
||||
event-tracking=item.event
|
||||
event-tracking-mb="true"
|
||||
event-tracking-trigger="click"
|
||||
) !{translate(item.text)}
|
||||
else
|
||||
| !{translate(item.text)}
|
||||
|
||||
// logged out
|
||||
if !getSessionUser()
|
||||
// register link
|
||||
if hasFeature('registration-page')
|
||||
li
|
||||
a(
|
||||
href="/register"
|
||||
event-tracking="menu-clicked-register"
|
||||
event-tracking-action="clicked"
|
||||
event-tracking-trigger="click"
|
||||
event-tracking-mb="true"
|
||||
event-segmentation={ page: currentUrl }
|
||||
) #{translate('register')}
|
||||
|
||||
// login link
|
||||
li
|
||||
a(
|
||||
href="/login"
|
||||
event-tracking="menu-clicked-login"
|
||||
event-tracking-action="clicked"
|
||||
event-tracking-trigger="click"
|
||||
event-tracking-mb="true"
|
||||
event-segmentation={ page: currentUrl }
|
||||
).text-capitalize #{translate('log_in')}
|
||||
|
||||
// projects link and account menu
|
||||
if getSessionUser()
|
||||
li
|
||||
a(href="/project") #{translate('Projects')}
|
||||
li.dropdown(dropdown)
|
||||
a.dropdown-toggle(href, dropdown-toggle)
|
||||
| #{translate('Account')}
|
||||
b.caret
|
||||
ul.dropdown-menu
|
||||
li
|
||||
div.subdued {{ usersEmail }}
|
||||
li.divider.hidden-xs.hidden-sm
|
||||
li
|
||||
a(href="/user/settings") #{translate('Account Settings')}
|
||||
if nav.showSubscriptionLink
|
||||
li
|
||||
a(href="/user/subscription") #{translate('subscription')}
|
||||
li.divider.hidden-xs.hidden-sm
|
||||
li
|
||||
form(method="POST" action="/logout")
|
||||
input(name='_csrf', type='hidden', value=csrfToken)
|
||||
button.btn-link.text-left.dropdown-menu-button #{translate('log_out')}
|
|
@ -1,124 +0,0 @@
|
|||
extends ../layout
|
||||
|
||||
block vars
|
||||
- var suppressNavbar = true
|
||||
- var suppressFooter = true
|
||||
- var suppressSkipToContent = true
|
||||
- var suppressCookieBanner = true
|
||||
- metadata.robotsNoindexNofollow = true
|
||||
|
||||
block entrypointVar
|
||||
- entrypoint = 'ide'
|
||||
|
||||
block content
|
||||
.editor(ng-controller="IdeController").full-size
|
||||
//- required by react2angular-shared-context, must be rendered as a top level component
|
||||
shared-context-react()
|
||||
.loading-screen(ng-if="state.loading")
|
||||
.loading-screen-brand-container
|
||||
.loading-screen-brand(
|
||||
style="height: 20%;"
|
||||
ng-style="{ 'height': state.load_progress + '%' }"
|
||||
)
|
||||
h3.loading-screen-label(ng-if="!state.error") #{translate("loading")}
|
||||
span.loading-screen-ellip .
|
||||
span.loading-screen-ellip .
|
||||
span.loading-screen-ellip .
|
||||
p.loading-screen-error(ng-if="state.error").ng-cloak
|
||||
span(ng-bind-html="state.error")
|
||||
|
||||
.global-alerts(ng-cloak ng-hide="editor.error_state")
|
||||
.alert.alert-danger.small(ng-if="connection.forced_disconnect")
|
||||
strong #{translate("disconnected")}
|
||||
|
||||
.alert.alert-warning.small(ng-if="connection.reconnection_countdown")
|
||||
strong #{translate("lost_connection")}.
|
||||
| #{translate("reconnecting_in_x_secs", {seconds:"{{ connection.reconnection_countdown }}"})}.
|
||||
a#try-reconnect-now-button.alert-link-as-btn.pull-right(href, ng-click="tryReconnectNow()") #{translate("try_now")}
|
||||
|
||||
.alert.alert-warning.small(ng-if="connection.reconnecting && connection.stillReconnecting")
|
||||
strong #{translate("reconnecting")}…
|
||||
|
||||
.alert.alert-warning.small(ng-if="sync_tex_error")
|
||||
strong #{translate("synctex_failed")}.
|
||||
a#synctex-more-info-button.alert-link-as-btn.pull-right(
|
||||
href="/learn/how-to/SyncTeX_Errors"
|
||||
target="_blank"
|
||||
) #{translate("more_info")}
|
||||
|
||||
.alert.alert-warning.small(ng-if="connection.inactive_disconnect")
|
||||
strong #{translate("editor_disconected_click_to_reconnect")}
|
||||
|
||||
.alert.alert-warning.small(ng-if="connection.debug") {{ connection.state }}
|
||||
|
||||
.div(ng-controller="SavingNotificationController")
|
||||
.alert.alert-warning.small(ng-repeat="(doc_id, state) in docSavingStatus" ng-if="state.unsavedSeconds > 8") #{translate("saving_notification_with_seconds", {docname:"{{ state.doc.name }}", seconds:"{{ state.unsavedSeconds }}"})}
|
||||
|
||||
.div(ng-controller="SystemMessagesController")
|
||||
.alert.alert-warning.system-message(
|
||||
ng-repeat="message in messages"
|
||||
ng-controller="SystemMessageController"
|
||||
ng-hide="hidden"
|
||||
)
|
||||
button(ng-hide="protected" ng-click="hide()").close.pull-right
|
||||
span(aria-hidden="true") ×
|
||||
span.sr-only #{translate("close")}
|
||||
.system-message-content
|
||||
| {{htmlContent}}
|
||||
|
||||
if hasFeature('saas')
|
||||
legacy-editor-warning(delay=10000)
|
||||
|
||||
include ./editor/main
|
||||
|
||||
script(type="text/ng-template" id="genericMessageModalTemplate")
|
||||
.modal-header
|
||||
button.close(
|
||||
type="button"
|
||||
data-dismiss="modal"
|
||||
ng-click="done()"
|
||||
aria-label="Close"
|
||||
)
|
||||
span(aria-hidden="true") ×
|
||||
h3 {{ title }}
|
||||
.modal-body(ng-bind-html="message")
|
||||
.modal-footer
|
||||
button.btn.btn-info(ng-click="done()") #{translate("ok")}
|
||||
|
||||
script(type="text/ng-template" id="outOfSyncModalTemplate")
|
||||
.modal-header
|
||||
button.close(
|
||||
type="button"
|
||||
data-dismiss="modal"
|
||||
ng-click="done()"
|
||||
aria-label="Close"
|
||||
)
|
||||
span(aria-hidden="true") ×
|
||||
h3 {{ title }}
|
||||
.modal-body(ng-bind-html="message")
|
||||
|
||||
.modal-body
|
||||
button.btn.btn-info(
|
||||
ng-init="showFileContents = false"
|
||||
ng-click="showFileContents = !showFileContents"
|
||||
)
|
||||
| {{showFileContents ? "Hide" : "Show"}} Local File Contents
|
||||
.text-preview(ng-show="showFileContents")
|
||||
textarea.scroll-container(readonly="readonly" rows="{{editorContentRows}}")
|
||||
| {{editorContent}}
|
||||
|
||||
.modal-footer
|
||||
button.btn.btn-info(ng-click="done()") #{translate("reload_editor")}
|
||||
|
||||
script(type="text/ng-template" id="lockEditorModalTemplate")
|
||||
.modal-header
|
||||
h3 {{ title }}
|
||||
.modal-body(ng-bind-html="message")
|
||||
|
||||
block append meta
|
||||
include ./editor/meta
|
||||
|
||||
block prepend foot-scripts
|
||||
each file in (useOpenTelemetry ? entrypointScripts("tracing") : [])
|
||||
script(type="text/javascript", nonce=scriptNonce, src=file)
|
||||
script(type="text/javascript", nonce=scriptNonce, src=(wsUrl || '/socket.io') + '/socket.io.js')
|
|
@ -1,52 +0,0 @@
|
|||
.ui-layout-center(
|
||||
ng-controller="ReviewPanelController",
|
||||
ng-class="{\
|
||||
'rp-state-current-file': (reviewPanel.subView === SubViews.CUR_FILE),\
|
||||
'rp-state-current-file-expanded': (reviewPanel.subView === SubViews.CUR_FILE && ui.reviewPanelOpen),\
|
||||
'rp-state-current-file-mini': (reviewPanel.subView === SubViews.CUR_FILE && !ui.reviewPanelOpen),\
|
||||
'rp-state-overview': (reviewPanel.subView === SubViews.OVERVIEW),\
|
||||
'rp-size-mini': ui.miniReviewPanelVisible,\
|
||||
'rp-size-expanded': ui.reviewPanelOpen,\
|
||||
'rp-layout-left': reviewPanel.layoutToLeft,\
|
||||
'rp-loading-threads': loadingThreads,\
|
||||
}"
|
||||
)
|
||||
|
||||
.multi-selection-ongoing(
|
||||
ng-show="editor.multiSelectedCount > 0"
|
||||
)
|
||||
.multi-selection-message
|
||||
h4 {{ editor.multiSelectedCount }} #{translate('files_selected')}
|
||||
|
||||
include ./file-view
|
||||
|
||||
.editor-container.full-size(
|
||||
ng-show="ui.view == 'editor' && editor.multiSelectedCount === 0"
|
||||
vertical-resizable-panes="south-pane-resizer"
|
||||
vertical-resizable-panes-hidden-externally-on="south-pane-toggled"
|
||||
vertical-resizable-panes-hidden-initially="true"
|
||||
vertical-resizable-panes-default-size="250"
|
||||
vertical-resizable-panes-min-size="250"
|
||||
vertical-resizable-panes-max-size="336"
|
||||
vertical-resizable-panes-resize-on="layout:flat-screen:toggle,south-pane-toggled"
|
||||
)
|
||||
.div(vertical-resizable-top)
|
||||
|
||||
.loading-panel(
|
||||
ng-show="(!editor.sharejs_doc || editor.opening) && !editor.error_state",
|
||||
)
|
||||
span(ng-show="editor.open_doc_id")
|
||||
i.fa.fa-spin.fa-refresh
|
||||
| #{translate("loading")}…
|
||||
span(ng-show="!editor.open_doc_id")
|
||||
i.fa.fa-arrow-left
|
||||
| #{translate("open_a_file_on_the_left")}
|
||||
|
||||
div(ng-controller="EditorLoaderController")
|
||||
|
||||
include ../../source-editor/source-editor
|
||||
|
||||
if moduleIncludesAvailable('editor:symbol-palette')
|
||||
.div(vertical-resizable-bottom)
|
||||
if moduleIncludesAvailable('editor:symbol-palette')
|
||||
!= moduleIncludes('editor:symbol-palette', locals)
|
|
@ -1,53 +0,0 @@
|
|||
div.full-size(
|
||||
ng-show="ui.view == 'editor' || ui.view === 'file'"
|
||||
layout="pdf"
|
||||
open-east="ui.pdfOpen"
|
||||
mask-iframes-on-resize="true"
|
||||
resize-on="layout:main:resize"
|
||||
resize-proportionally="true"
|
||||
initial-size-east="'50%'"
|
||||
minimum-restore-size-east="300"
|
||||
allow-overflow-on="'center'"
|
||||
custom-toggler-pane="east"
|
||||
custom-toggler-msg-when-open=translate("tooltip_hide_pdf")
|
||||
custom-toggler-msg-when-closed=translate("tooltip_show_pdf")
|
||||
)
|
||||
include ./editor-pane
|
||||
|
||||
.ui-layout-east
|
||||
div(ng-if="ui.pdfLayout == 'sideBySide'")
|
||||
pdf-preview()
|
||||
|
||||
.ui-layout-resizer-controls.synctex-controls(
|
||||
ng-show="settings.pdfViewer !== 'native'"
|
||||
)
|
||||
pdf-synctex-controls()
|
||||
|
||||
div.full-size(
|
||||
ng-if="ui.pdfLayout == 'flat'"
|
||||
ng-show="ui.view == 'pdf'"
|
||||
)
|
||||
pdf-preview()
|
||||
|
||||
// fallback, shown when no file/view is selected
|
||||
div.full-size.no-file-selection(
|
||||
ng-if="!ui.view"
|
||||
)
|
||||
.no-file-selection-message(
|
||||
ng-if="rootFolder.children && rootFolder.children.length > 0"
|
||||
)
|
||||
h3
|
||||
| #{translate('no_selection_select_file')}
|
||||
.no-file-selection-message(
|
||||
ng-if="rootFolder.children && rootFolder.children.length === 0"
|
||||
)
|
||||
h3
|
||||
| #{translate('no_selection_create_new_file')}
|
||||
div(
|
||||
ng-controller="FileTreeController"
|
||||
)
|
||||
button.btn.btn-primary(
|
||||
ng-click="openNewDocModal()"
|
||||
)
|
||||
| #{translate('new_file')}
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
aside.editor-sidebar.full-size.history-file-tree#history-file-tree(
|
||||
ng-show="ui.view == 'history'"
|
||||
)
|
|
@ -1,27 +0,0 @@
|
|||
aside.editor-sidebar.full-size(
|
||||
ng-show="ui.view != 'history'"
|
||||
vertical-resizable-panes="outline-resizer"
|
||||
vertical-resizable-panes-toggled-externally-on="outline-toggled"
|
||||
vertical-resizable-panes-default-size="350"
|
||||
vertical-resizable-panes-min-size="32"
|
||||
vertical-resizable-panes-max-size="'75%'"
|
||||
vertical-resizable-panes-resize-on="left-pane-resize-all"
|
||||
)
|
||||
|
||||
div(
|
||||
ng-controller="ReactFileTreeController"
|
||||
vertical-resizable-top
|
||||
)
|
||||
file-tree-root(
|
||||
on-select="onSelect"
|
||||
on-init="onInit"
|
||||
is-connected="isConnected"
|
||||
ref-providers="refProviders"
|
||||
reindex-references="reindexReferences"
|
||||
set-ref-provider-enabled="setRefProviderEnabled"
|
||||
set-started-free-trial="setStartedFreeTrial"
|
||||
)
|
||||
|
||||
outline-container(
|
||||
vertical-resizable-bottom
|
||||
)
|
|
@ -1,9 +0,0 @@
|
|||
div(
|
||||
ng-controller="FileViewController"
|
||||
ng-show="ui.view == 'file'"
|
||||
ng-if="openFile && editor.multiSelectedCount === 0"
|
||||
)
|
||||
file-view(
|
||||
file='file'
|
||||
store-references-keys='storeReferencesKeys'
|
||||
)
|
|
@ -1,12 +0,0 @@
|
|||
div(ng-controller="ReactShareProjectModalController")
|
||||
share-project-modal(
|
||||
handle-hide="handleHide"
|
||||
show="show"
|
||||
)
|
||||
|
||||
div(ng-controller="EditorNavigationToolbarController")
|
||||
editor-navigation-toolbar-root(
|
||||
open-doc="openDoc"
|
||||
online-users-array="onlineUsersArray"
|
||||
open-share-project-modal="openShareProjectModal"
|
||||
)
|
|
@ -1 +0,0 @@
|
|||
editor-left-menu()
|
|
@ -1,39 +0,0 @@
|
|||
include ./left-menu-react
|
||||
|
||||
#chat-wrapper.full-size(
|
||||
layout="chat",
|
||||
spacing-open="{{ui.chatResizerSizeOpen}}",
|
||||
spacing-closed="{{ui.chatResizerSizeClosed}}",
|
||||
ng-hide="state.loading",
|
||||
ng-cloak
|
||||
)
|
||||
.ui-layout-center
|
||||
include ./header-react
|
||||
|
||||
main#ide-body(
|
||||
ng-cloak,
|
||||
role="main",
|
||||
layout="main",
|
||||
ng-hide="state.loading",
|
||||
resize-on="layout:chat:resize,history:toggle,layout:flat-screen:toggle,south-pane-toggled",
|
||||
minimum-restore-size-west="130"
|
||||
custom-toggler-pane="west"
|
||||
custom-toggler-msg-when-open=translate("tooltip_hide_filetree")
|
||||
custom-toggler-msg-when-closed=translate("tooltip_show_filetree")
|
||||
tabindex="0"
|
||||
initial-size-east="250"
|
||||
init-closed-east="true"
|
||||
open-east="ui.chatOpen"
|
||||
)
|
||||
.ui-layout-west
|
||||
include ./file-tree-react
|
||||
include ./file-tree-history-react
|
||||
|
||||
.ui-layout-center
|
||||
include ./editor
|
||||
history-root()
|
||||
|
||||
if !isRestrictedTokenMember
|
||||
.ui-layout-east
|
||||
aside.chat
|
||||
chat()
|
|
@ -35,7 +35,6 @@ meta(name="ol-optionalPersonalAccessToken", data-type="boolean" content=optional
|
|||
meta(name="ol-hasTrackChangesFeature", data-type="boolean" content=hasTrackChangesFeature)
|
||||
meta(name="ol-inactiveTutorials", data-type="json" content=user.inactiveTutorials)
|
||||
meta(name="ol-projectTags" data-type="json" content=projectTags)
|
||||
meta(name="ol-idePageReact", data-type="boolean" content=idePageReact)
|
||||
meta(name="ol-loadingText", data-type="string" content=translate("loading"))
|
||||
meta(name="ol-translationLoadErrorMessage", data-type="string" content=translate("could_not_load_translations"))
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
extends ../layout
|
||||
extends ../layout-marketing
|
||||
|
||||
block entrypointVar
|
||||
- entrypoint = 'ide-detached'
|
|
@ -1,4 +1,4 @@
|
|||
extends ../layout
|
||||
extends ../layout-marketing
|
||||
|
||||
block vars
|
||||
- var suppressNavbar = true
|
||||
|
|
|
@ -1,127 +0,0 @@
|
|||
extends ../../layout
|
||||
|
||||
block vars
|
||||
- var suppressFooter = true
|
||||
- var suppressCookieBanner = true
|
||||
- var suppressSkipToContent = true
|
||||
|
||||
block content
|
||||
|
||||
script(type="template", id="overleaf-token-access-data")!= StringHelper.stringifyJsonForScript({ postUrl: postUrl, csrfToken: csrfToken})
|
||||
|
||||
div(
|
||||
ng-controller="TokenAccessPageController",
|
||||
ng-init="post()"
|
||||
)
|
||||
.editor.full-size
|
||||
div
|
||||
|
|
||||
a(href="/project", style="font-size: 2rem; margin-left: 1rem; color: #ddd;")
|
||||
i.fa.fa-arrow-left
|
||||
|
||||
.loading-screen(
|
||||
ng-show="mode == 'accessAttempt'"
|
||||
)
|
||||
.loading-screen-brand-container
|
||||
.loading-screen-brand()
|
||||
|
||||
h3.loading-screen-label.text-center
|
||||
| #{translate('join_project')}
|
||||
span(ng-show="accessInFlight == true")
|
||||
span.loading-screen-ellip .
|
||||
span.loading-screen-ellip .
|
||||
span.loading-screen-ellip .
|
||||
|
||||
|
||||
.global-alerts.text-center(ng-cloak)
|
||||
div(ng-show="accessError", ng-cloak)
|
||||
br
|
||||
div(ng-switch="accessError", ng-cloak)
|
||||
div(ng-switch-when="not_found")
|
||||
h4(aria-live="assertive")
|
||||
| Project not found
|
||||
|
||||
div(ng-switch-default)
|
||||
.alert.alert-danger(aria-live="assertive") #{translate('token_access_failure')}
|
||||
p
|
||||
a(href="/") #{translate('home')}
|
||||
|
||||
.loading-screen(
|
||||
ng-show="mode == 'v1Import'"
|
||||
)
|
||||
.container
|
||||
.row
|
||||
.col-sm-8.col-sm-offset-2
|
||||
h1.text-center
|
||||
span(ng-if="v1ImportData.status != 'mustLogin'") Overleaf v1 Project
|
||||
span(ng-if="v1ImportData.status == 'mustLogin'") Please Log In
|
||||
img.v2-import__img(
|
||||
src="/img/v1-import/v2-editor.png"
|
||||
alt="The new V2 editor."
|
||||
)
|
||||
|
||||
div(ng-if="v1ImportData.status == 'cannotImport'")
|
||||
h2.text-center
|
||||
| Cannot Access Overleaf v1 Project
|
||||
p.text-center.row-spaced-small
|
||||
| Please contact the project owner or
|
||||
|
|
||||
a(href="/contact") contact support
|
||||
|
|
||||
| for assistance.
|
||||
|
||||
div(ng-if="v1ImportData.status == 'mustLogin'")
|
||||
p.text-center.row-spaced-small
|
||||
| You will need to log in to access this project.
|
||||
|
||||
.row-spaced.text-center
|
||||
a.btn.btn-primary(
|
||||
href="/login?redir={{ currentPath() }}"
|
||||
) Log In To Access Project
|
||||
|
||||
div(ng-if="v1ImportData.status == 'canDownloadZip'")
|
||||
p.text-center.row-spaced.small
|
||||
| #[strong() {{ getProjectName() }}] has not yet been moved into
|
||||
| the new version of Overleaf. This project was created
|
||||
| anonymously and therefore cannot be automatically imported.
|
||||
| Please download a zip file of the project and upload that to
|
||||
| continue editing it. If you would like to delete this project
|
||||
| after you have made a copy, please contact support.
|
||||
|
||||
.row-spaced.text-center
|
||||
a.btn.btn-primary(ng-href="{{ buildZipDownloadPath(v1ImportData.projectId) }}")
|
||||
| Download project zip file
|
||||
|
||||
.loading-screen(
|
||||
ng-show="mode == 'requireAccept'"
|
||||
)
|
||||
.container
|
||||
.row
|
||||
.col-md-8.col-md-offset-2
|
||||
.card
|
||||
.page-header.text-centered
|
||||
h1 #{translate("invited_to_join")}
|
||||
br
|
||||
em {{ getProjectName() }}
|
||||
.row.text-center
|
||||
.col-md-12
|
||||
p
|
||||
if user
|
||||
| #{translate("accepting_invite_as")}
|
||||
|
|
||||
em #{user.email}
|
||||
.row.text-center
|
||||
.col-md-12
|
||||
button.btn.btn-lg.btn-primary(
|
||||
type='submit'
|
||||
ng-click="postConfirmedByUser()"
|
||||
) #{translate("join_project")}
|
||||
|
||||
|
||||
block append foot-scripts
|
||||
script(type="text/javascript", nonce=scriptNonce).
|
||||
$(document).ready(function () {
|
||||
setTimeout(function() {
|
||||
$('.loading-screen-brand').css('height', '20%')
|
||||
}, 500);
|
||||
});
|
|
@ -1,3 +0,0 @@
|
|||
source-editor.review-panel-react#editor(
|
||||
ng-show="!!editor.sharejs_doc && !editor.opening && multiSelectedCount === 0 && !editor.error_state"
|
||||
)
|
|
@ -1,10 +1,11 @@
|
|||
extends ../layout
|
||||
extends ../layout-marketing
|
||||
|
||||
include ./plans/_mixins
|
||||
include ../_mixins/bootstrap_js
|
||||
|
||||
block entrypointVar
|
||||
- entrypoint = 'pages/user/subscription/plans-v2/plans-v2-main'
|
||||
|
||||
block vars
|
||||
- entrypoint = 'pages/user/subscription/plans-v2/plans-v2-main'
|
||||
- var suppressFooter = true
|
||||
- var suppressNavbarRight = true
|
||||
- var suppressCookieBanner = true
|
||||
|
@ -66,6 +67,3 @@ block content
|
|||
| #{translate("continue_with_free_plan")}
|
||||
|
||||
!= moduleIncludes("contactModalGeneral-marketing", locals)
|
||||
|
||||
block prepend foot-scripts
|
||||
+bootstrap-js(bootstrapVersion)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
extends ../layout-marketing
|
||||
|
||||
block vars
|
||||
block entrypointVar
|
||||
- entrypoint = 'pages/user/subscription/plans-v2/plans-v2-main'
|
||||
|
||||
block append meta
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
extends ../../layout
|
||||
extends ../../layout-marketing
|
||||
|
||||
block content
|
||||
main.content.content-alt.team-invite#main-content
|
||||
|
|
|
@ -1,47 +0,0 @@
|
|||
script(type="text/ng-template", id="BonusLinkToUsModal")
|
||||
.modal-header
|
||||
button.close(
|
||||
type="button"
|
||||
data-dismiss="modal"
|
||||
ng-click="cancel()"
|
||||
aria-label="Close"
|
||||
)
|
||||
span(aria-hidden="true") ×
|
||||
h3 Dropbox link
|
||||
.modal-body.modal-body-share
|
||||
|
||||
div(ng-show="dbState.gotLinkStatus")
|
||||
div(ng-hide="dbState.userIsLinkedToDropbox || !dbState.hasDropboxFeature")
|
||||
|
||||
span(ng-hide="dbState.startedLinkProcess") Your account is not linked to dropbox
|
||||
|
|
||||
a(ng-click="linkToDropbox()").btn.btn-info Update Dropbox Settings
|
||||
|
||||
p.small.text-center(ng-show="dbState.startedLinkProcess")
|
||||
| Please refresh this page after starting your free trial.
|
||||
|
||||
|
||||
div(ng-show="dbState.hasDropboxFeature && dbState.userIsLinkedToDropbox")
|
||||
progressbar.progress-striped.active(value='dbState.percentageLeftTillNextPoll', type="info")
|
||||
span
|
||||
strong {{dbState.minsTillNextPoll}} minutes
|
||||
span until dropbox is next checked for changes.
|
||||
|
||||
div.text-center(ng-hide="dbState.hasDropboxFeature")
|
||||
p You need to upgrade your account to link to dropbox.
|
||||
p
|
||||
a.btn(ng-click="startFreeTrial('dropbox')", ng-class="buttonClass") Start Free Trial
|
||||
p.small(ng-show="startedFreeTrial")
|
||||
| Please refresh this page after starting your free trial.
|
||||
|
||||
div(ng-hide="dbState.gotLinkStatus")
|
||||
span.small checking dropbox status
|
||||
i.fa.fa-refresh.fa-spin(aria-hidden="true")
|
||||
|
||||
|
||||
|
||||
.modal-footer()
|
||||
button.btn.btn-default(
|
||||
ng-click="cancel()",
|
||||
)
|
||||
span Dismiss
|
|
@ -27,7 +27,7 @@
|
|||
["@babel/react", { "runtime": "automatic" }],
|
||||
"@babel/typescript"
|
||||
],
|
||||
"plugins": ["angularjs-annotate", "macros"],
|
||||
"plugins": ["macros"],
|
||||
"overrides": [
|
||||
// treat .cjs files (e.g. libraries symlinked into node_modules) as commonjs
|
||||
{
|
||||
|
|
|
@ -1,33 +1,6 @@
|
|||
const fs = require('fs')
|
||||
const Path = require('path')
|
||||
const { merge } = require('@overleaf/settings/merge')
|
||||
|
||||
// Automatically detect module imports that are included in this version of the application (SaaS, Server-CE, Server Pro).
|
||||
// E.g. during a Server-CE build, we will not find imports for proprietary modules.
|
||||
//
|
||||
// Restart webpack after adding/removing modules.
|
||||
const MODULES_PATH = Path.join(__dirname, '../modules')
|
||||
const entryPointsIde = []
|
||||
const entryPointsMain = []
|
||||
fs.readdirSync(MODULES_PATH).forEach(module => {
|
||||
const entryPathIde = Path.join(
|
||||
MODULES_PATH,
|
||||
module,
|
||||
'/frontend/js/ide/index.js'
|
||||
)
|
||||
if (fs.existsSync(entryPathIde)) {
|
||||
entryPointsIde.push(entryPathIde)
|
||||
}
|
||||
const entryPathMain = Path.join(
|
||||
MODULES_PATH,
|
||||
module,
|
||||
'/frontend/js/main/index.js'
|
||||
)
|
||||
if (fs.existsSync(entryPathMain)) {
|
||||
entryPointsMain.push(entryPathMain)
|
||||
}
|
||||
})
|
||||
|
||||
let defaultFeatures, siteUrl
|
||||
|
||||
// Make time interval config easier.
|
||||
|
@ -918,9 +891,6 @@ module.exports = {
|
|||
managedGroupSubscriptionEnrollmentNotification: [],
|
||||
managedGroupEnrollmentInvite: [],
|
||||
ssoCertificateInfo: [],
|
||||
// See comment at the definition of these variables.
|
||||
entryPointsIde,
|
||||
entryPointsMain,
|
||||
},
|
||||
|
||||
moduleImportSequence: [
|
||||
|
@ -935,7 +905,7 @@ module.exports = {
|
|||
reportOnly: process.env.CSP_REPORT_ONLY === 'true',
|
||||
reportPercentage: parseFloat(process.env.CSP_REPORT_PERCENTAGE) || 0,
|
||||
reportUri: process.env.CSP_REPORT_URI,
|
||||
exclude: ['app/views/project/editor'],
|
||||
exclude: [],
|
||||
},
|
||||
|
||||
unsupportedBrowsers: {
|
||||
|
|
|
@ -11,6 +11,7 @@ import { interceptFileUpload } from './upload'
|
|||
import { interceptProjectListing } from './project-list'
|
||||
import { interceptLinkedFile } from './linked-file'
|
||||
import { interceptMathJax } from './mathjax'
|
||||
import { interceptMetadata } from './metadata'
|
||||
|
||||
// eslint-disable-next-line no-unused-vars,@typescript-eslint/no-namespace
|
||||
declare global {
|
||||
|
@ -21,6 +22,7 @@ declare global {
|
|||
interceptAsync: typeof interceptAsync
|
||||
interceptCompile: typeof interceptCompile
|
||||
interceptEvents: typeof interceptEvents
|
||||
interceptMetadata: typeof interceptMetadata
|
||||
interceptSpelling: typeof interceptSpelling
|
||||
waitForCompile: typeof waitForCompile
|
||||
interceptDeferredCompile: typeof interceptDeferredCompile
|
||||
|
@ -35,6 +37,7 @@ declare global {
|
|||
Cypress.Commands.add('interceptAsync', interceptAsync)
|
||||
Cypress.Commands.add('interceptCompile', interceptCompile)
|
||||
Cypress.Commands.add('interceptEvents', interceptEvents)
|
||||
Cypress.Commands.add('interceptMetadata', interceptMetadata)
|
||||
Cypress.Commands.add('interceptSpelling', interceptSpelling)
|
||||
Cypress.Commands.add('waitForCompile', waitForCompile)
|
||||
Cypress.Commands.add('interceptDeferredCompile', interceptDeferredCompile)
|
||||
|
|
3
services/web/cypress/support/shared/commands/metadata.ts
Normal file
3
services/web/cypress/support/shared/commands/metadata.ts
Normal file
|
@ -0,0 +1,3 @@
|
|||
export const interceptMetadata = () => {
|
||||
cy.intercept('POST', '/project/*/doc/*/metadata', {})
|
||||
}
|
|
@ -1,61 +0,0 @@
|
|||
/* eslint-disable
|
||||
camelcase,
|
||||
max-len,
|
||||
no-useless-escape,
|
||||
*/
|
||||
// TODO: This file was created by bulk-decaffeinate.
|
||||
// Fix any style issues and re-enable lint.
|
||||
/*
|
||||
* decaffeinate suggestions:
|
||||
* DS101: Remove unnecessary use of Array.from
|
||||
* DS102: Remove unnecessary code created because of implicit returns
|
||||
* DS103: Rewrite code to no longer use __guard__
|
||||
* DS207: Consider shorter variations of null checks
|
||||
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
|
||||
*/
|
||||
|
||||
import './utils/webpack-public-path'
|
||||
import './libraries'
|
||||
import './infrastructure/error-reporter'
|
||||
import './modules/recursionHelper'
|
||||
import './modules/errorCatcher'
|
||||
import './modules/localStorage'
|
||||
import './modules/sessionStorage'
|
||||
import getMeta from './utils/meta'
|
||||
|
||||
const App = angular
|
||||
.module('OverleafApp', [
|
||||
'ui.bootstrap',
|
||||
'RecursionHelper',
|
||||
'ngSanitize',
|
||||
'ErrorCatcher',
|
||||
'localStorage',
|
||||
'sessionStorage',
|
||||
'ui.select',
|
||||
])
|
||||
.config([
|
||||
'$qProvider',
|
||||
'uiSelectConfig',
|
||||
function ($qProvider, uiSelectConfig) {
|
||||
$qProvider.errorOnUnhandledRejections(false)
|
||||
uiSelectConfig.spinnerClass = 'fa fa-refresh ui-select-spin'
|
||||
},
|
||||
])
|
||||
|
||||
App.run([
|
||||
'$rootScope',
|
||||
'$templateCache',
|
||||
function ($rootScope, $templateCache) {
|
||||
$rootScope.usersEmail = getMeta('ol-usersEmail')
|
||||
|
||||
// UI Select templates are hard-coded and use Glyphicon icons (which we don't import).
|
||||
// The line below simply overrides the hard-coded template with our own, which is
|
||||
// basically the same but using Font Awesome icons.
|
||||
$templateCache.put(
|
||||
'bootstrap/match.tpl.html',
|
||||
'<div class="ui-select-match" ng-hide="$select.open && $select.searchEnabled" ng-disabled="$select.disabled" ng-class="{\'btn-default-focus\':$select.focus}"><span tabindex="-1" class="btn btn-default form-control ui-select-toggle" aria-label="{{ $select.baseTitle }} activate" ng-disabled="$select.disabled" ng-click="$select.activate()" style="outline: 0;"><span ng-show="$select.isEmpty()" class="ui-select-placeholder text-muted">{{$select.placeholder}}</span> <span ng-hide="$select.isEmpty()" class="ui-select-match-text pull-left" ng-class="{\'ui-select-allow-clear\': $select.allowClear && !$select.isEmpty()}" ng-transclude=""></span> <i class="caret pull-right" ng-click="$select.toggle($event)"></i> <a ng-show="$select.allowClear && !$select.isEmpty() && ($select.disabled !== true)" aria-label="{{ $select.baseTitle }} clear" style="margin-right: 10px" ng-click="$select.clear($event)" class="btn btn-xs btn-link pull-right"><i class="fa fa-times" aria-hidden="true"></i></a></span></div>'
|
||||