aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbobzel <zzzman@gmail.com>2022-05-13 15:48:54 -0400
committerbobzel <zzzman@gmail.com>2022-05-13 15:48:54 -0400
commit5b419a93e8d4a4c3eb3a6b354026e8e67a2753b7 (patch)
tree953d4a6056596a4a20049697f8a90144e2d06576
parente40a1e248da90af698d5ff64bd5d63d11211e6dc (diff)
simplified how web pages are served and I think fixed some bugs with pages that didn't always render
-rw-r--r--src/client/views/nodes/WebBox.tsx9
-rw-r--r--src/server/ApiManagers/UploadManager.ts4
-rw-r--r--src/server/server_Initialization.ts101
3 files changed, 54 insertions, 60 deletions
diff --git a/src/client/views/nodes/WebBox.tsx b/src/client/views/nodes/WebBox.tsx
index af7a2b941..20e01be05 100644
--- a/src/client/views/nodes/WebBox.tsx
+++ b/src/client/views/nodes/WebBox.tsx
@@ -381,12 +381,13 @@ export class WebBox extends ViewBoxAnnotatableComponent<ViewBoxAnnotatableProps
this._scrollTimer && clearTimeout(this._scrollTimer);
this._scrollTimer = setTimeout(action(() => {
this._scrollTimer = undefined;
- if (!LinkDocPreview.LinkInfo && this._outerRef.current &&
+ const newScrollTop = scrollTop > iframeHeight ? iframeHeight : scrollTop;
+ if (!LinkDocPreview.LinkInfo && this._outerRef.current && newScrollTop !== this.layoutDoc.thumbScrollTop &&
(!LightboxView.LightboxDoc || LightboxView.IsLightboxDocView(this.props.docViewPath()))) {
this.layoutDoc.thumb = undefined;
this.layoutDoc.thumbScrollTop = undefined;
- this.layoutDoc.scrollTop = this._outerRef.current.scrollTop = scrollTop > iframeHeight ? iframeHeight : scrollTop;
- }
+ this.layoutDoc.scrollTop = this._outerRef.current.scrollTop = newScrollTop;
+ } else if (this._outerRef.current) this._outerRef.current.scrollTop = newScrollTop;
}), timeout);
}
@@ -761,7 +762,7 @@ export class WebBox extends ViewBoxAnnotatableComponent<ViewBoxAnnotatableProps
onScroll={e => this.setDashScrollTop(this._outerRef.current?.scrollTop || 0)}
onPointerDown={this.onMarqueeDown}
>
- <div className={"webBox-innerContent"} style={{ height: NumCast(this.scrollHeight, 50), pointerEvents }}>
+ <div className={"webBox-innerContent"} style={{ height: this._webPageHasBeenRendered ? NumCast(this.scrollHeight, 50) : "100%", pointerEvents }}>
{this.content}
<div style={{ mixBlendMode: "multiply" }}>
{renderAnnotations(this.transparentFilter)}
diff --git a/src/server/ApiManagers/UploadManager.ts b/src/server/ApiManagers/UploadManager.ts
index cd85a7a65..2c667ba3e 100644
--- a/src/server/ApiManagers/UploadManager.ts
+++ b/src/server/ApiManagers/UploadManager.ts
@@ -291,9 +291,9 @@ export default class UploadManager extends ApiManager {
if (isImage) {
resizers.forEach(resizer => {
const path = serverPathToFile(Directory.images, InjectSize(filename, resizer.suffix) + ext);
- createReadStream(savedName).on("error", e => console.log("Resizing Read error:" + e))
+ createReadStream(savedName).on("error", e => console.log("Resizing read:" + e))
.pipe(resizer.resizer)
- .pipe(createWriteStream(path).on("error", e => console.log("Resizing write error: " + e)));
+ .pipe(createWriteStream(path).on("error", e => console.log("Resizing write: " + e)));
});
}
diff --git a/src/server/server_Initialization.ts b/src/server/server_Initialization.ts
index 5bfd0213c..8bf84622d 100644
--- a/src/server/server_Initialization.ts
+++ b/src/server/server_Initialization.ts
@@ -171,60 +171,53 @@ function registerCorsProxy(server: express.Express) {
function proxyServe(req: any, requrl: string, response: any) {
const htmlBodyMemoryStream = new (require('memorystream'))();
- req.headers.cookie = "";
- req.pipe(request(requrl))
- .on("error", (e: any) => console.log(`Malformed CORS url: ${requrl}`, e))
- .on("end", () => {
- var rewrittenHtmlBody: any = undefined;
- req.pipe(request(requrl))
- .on("response", (res: any) => {
- const headers = Object.keys(res.headers);
- const headerCharRegex = /[^\t\x20-\x7e\x80-\xff]/;
- headers.forEach(headerName => {
- const header = res.headers[headerName];
- if (Array.isArray(header)) {
- res.headers[headerName] = header.filter(h => !headerCharRegex.test(h));
- } else if (headerCharRegex.test(header || "")) {
- delete res.headers[headerName];
- }
- if (headerName === "content-encoding" && header.includes("gzip")) {
- try {
- const replacer = (match: any, href: string, offset: any, string: any) => {
- return `href="${resolvedServerUrl + "/corsProxy/http" + href}"`;
- };
- const zipToStringDecoder = new (require('string_decoder').StringDecoder)('utf8');
- const bodyStream = htmlBodyMemoryStream.read();
- if (bodyStream) {
- const htmlText = zipToStringDecoder.write(zlib.gunzipSync(bodyStream).toString('utf8')
- .replace('<head>', '<head> <style>[id ^= "google"] { display: none; } </style>')
- .replace(/href="https?([^"]*)"/g, replacer)
- .replace(/target="_blank"/g, ""));
- rewrittenHtmlBody = zlib.gzipSync(htmlText);
- } else {
- console.log("EMPTY body: href");
- }
- } catch (e) {
- console.log("EROR?: ", e);
- }
- }
- });
- })
- .on('data', (e: any) => {
- try {
- if (response.connection?.writable) {
- rewrittenHtmlBody && response.send(rewrittenHtmlBody);
- }
- } catch (e) {
- console.log("ERROR data : ", e);
- }
- rewrittenHtmlBody = undefined;
- })
- .on('error', (e: any) => {
- console.log("ERROR ON SERVER: ", e);
- })
- .pipe(response);
- })
- .pipe(htmlBodyMemoryStream);
+ var retrieveHTTPBody: any;
+ const sendModifiedBody = () => {
+ const header = response.headers["content-encoding"];
+ if (header && header.includes("gzip")) {
+ try {
+ const replacer = (match: any, href: string, offset: any, string: any) => {
+ return `href="${resolvedServerUrl + "/corsProxy/http" + href}"`;
+ };
+ const zipToStringDecoder = new (require('string_decoder').StringDecoder)('utf8');
+ const bodyStream = htmlBodyMemoryStream.read();
+ if (bodyStream) {
+ const htmlText = zipToStringDecoder.write(zlib.gunzipSync(bodyStream).toString('utf8')
+ .replace('<head>', '<head> <style>[id ^= "google"] { display: none; } </style>')
+ .replace(/href="https?([^"]*)"/g, replacer)
+ .replace(/target="_blank"/g, ""));
+ response.send(zlib.gzipSync(htmlText));
+ } else {
+ req.pipe(request(requrl)).pipe(response);
+ console.log("EMPTY body:" + req.url);
+ }
+ } catch (e) {
+ console.log("EROR?: ", e);
+ }
+ } else req.pipe(request(requrl)).pipe(response);
+ }
+ retrieveHTTPBody = () => {
+ req.headers.cookie = "";
+ req.pipe(request(requrl))
+ .on("error", (e: any) => console.log(`Malformed CORS url: ${requrl}`, e))
+ .on("response", (res: any) => {
+ res.headers;
+ const headers = Object.keys(res.headers);
+ const headerCharRegex = /[^\t\x20-\x7e\x80-\xff]/;
+ headers.forEach(headerName => {
+ const header = res.headers[headerName];
+ if (Array.isArray(header)) {
+ res.headers[headerName] = header.filter(h => !headerCharRegex.test(h));
+ } else if (headerCharRegex.test(header || "")) {
+ delete res.headers[headerName];
+ } else res.headers[headerName] = header;
+ });
+ response.headers = response._headers = res.headers;
+ })
+ .on("end", sendModifiedBody)
+ .pipe(htmlBodyMemoryStream);
+ };
+ retrieveHTTPBody();
}
function registerEmbeddedBrowseRelativePathHandler(server: express.Express) {