mirror of
https://github.com/facebook/docusaurus.git
synced 2025-05-17 19:16:58 +02:00
Add <doctype HTML> to HTML pages (#566)
* Add doctype to static rendering * Set content-type for CSS
This commit is contained in:
parent
0593ea0039
commit
946e2cef90
3 changed files with 43 additions and 23 deletions
|
@ -11,7 +11,6 @@ function execute() {
|
||||||
const CWD = process.cwd();
|
const CWD = process.cwd();
|
||||||
const fs = require('fs-extra');
|
const fs = require('fs-extra');
|
||||||
const readMetadata = require('./readMetadata.js');
|
const readMetadata = require('./readMetadata.js');
|
||||||
const renderToStaticMarkup = require('react-dom/server').renderToStaticMarkup;
|
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const color = require('color');
|
const color = require('color');
|
||||||
const toSlug = require('../core/toSlug.js');
|
const toSlug = require('../core/toSlug.js');
|
||||||
|
@ -28,6 +27,7 @@ function execute() {
|
||||||
const join = path.join;
|
const join = path.join;
|
||||||
const sep = path.sep;
|
const sep = path.sep;
|
||||||
const escapeStringRegexp = require('escape-string-regexp');
|
const escapeStringRegexp = require('escape-string-regexp');
|
||||||
|
const {renderToStaticMarkupWithDoctype} = require('./renderUtils');
|
||||||
|
|
||||||
// create the folder path for a file if it does not exist, then write the file
|
// create the folder path for a file if it does not exist, then write the file
|
||||||
function writeFileAndCreateFolder(file, content) {
|
function writeFileAndCreateFolder(file, content) {
|
||||||
|
@ -180,7 +180,7 @@ function execute() {
|
||||||
{rawContent}
|
{rawContent}
|
||||||
</DocsLayout>
|
</DocsLayout>
|
||||||
);
|
);
|
||||||
const str = renderToStaticMarkup(docComp);
|
const str = renderToStaticMarkupWithDoctype(docComp);
|
||||||
|
|
||||||
const targetFile = join(buildDir, metadata.permalink);
|
const targetFile = join(buildDir, metadata.permalink);
|
||||||
writeFileAndCreateFolder(targetFile, str);
|
writeFileAndCreateFolder(targetFile, str);
|
||||||
|
@ -198,7 +198,7 @@ function execute() {
|
||||||
redirect={siteConfig.baseUrl + metadata.permalink}
|
redirect={siteConfig.baseUrl + metadata.permalink}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
const redirectStr = renderToStaticMarkup(redirectComp);
|
const redirectStr = renderToStaticMarkupWithDoctype(redirectComp);
|
||||||
|
|
||||||
// create a redirects page for doc files
|
// create a redirects page for doc files
|
||||||
const redirectFile = join(
|
const redirectFile = join(
|
||||||
|
@ -264,7 +264,7 @@ function execute() {
|
||||||
{rawContent}
|
{rawContent}
|
||||||
</BlogPostLayout>
|
</BlogPostLayout>
|
||||||
);
|
);
|
||||||
const str = renderToStaticMarkup(blogPostComp);
|
const str = renderToStaticMarkupWithDoctype(blogPostComp);
|
||||||
|
|
||||||
let targetFile = join(buildDir, 'blog', filePath);
|
let targetFile = join(buildDir, 'blog', filePath);
|
||||||
writeFileAndCreateFolder(targetFile, str);
|
writeFileAndCreateFolder(targetFile, str);
|
||||||
|
@ -282,7 +282,7 @@ function execute() {
|
||||||
config={siteConfig}
|
config={siteConfig}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
const str = renderToStaticMarkup(blogPageComp);
|
const str = renderToStaticMarkupWithDoctype(blogPageComp);
|
||||||
|
|
||||||
let targetFile = join(
|
let targetFile = join(
|
||||||
buildDir,
|
buildDir,
|
||||||
|
@ -456,7 +456,7 @@ function execute() {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
translate.setLanguage(language);
|
translate.setLanguage(language);
|
||||||
const str = renderToStaticMarkup(
|
const str = renderToStaticMarkupWithDoctype(
|
||||||
<Site
|
<Site
|
||||||
language={language}
|
language={language}
|
||||||
config={siteConfig}
|
config={siteConfig}
|
||||||
|
@ -474,7 +474,7 @@ function execute() {
|
||||||
// write to base level
|
// write to base level
|
||||||
let language = env.translation.enabled ? 'en' : '';
|
let language = env.translation.enabled ? 'en' : '';
|
||||||
translate.setLanguage(language);
|
translate.setLanguage(language);
|
||||||
const str = renderToStaticMarkup(
|
const str = renderToStaticMarkupWithDoctype(
|
||||||
<Site language={language} config={siteConfig} metadata={{id: pageID}}>
|
<Site language={language} config={siteConfig} metadata={{id: pageID}}>
|
||||||
<ReactComp language={language} />
|
<ReactComp language={language} />
|
||||||
</Site>
|
</Site>
|
||||||
|
@ -487,7 +487,7 @@ function execute() {
|
||||||
// allow for rendering of other files not in pages/en folder
|
// allow for rendering of other files not in pages/en folder
|
||||||
let language = env.translation.enabled ? 'en' : '';
|
let language = env.translation.enabled ? 'en' : '';
|
||||||
translate.setLanguage(language);
|
translate.setLanguage(language);
|
||||||
const str = renderToStaticMarkup(
|
const str = renderToStaticMarkupWithDoctype(
|
||||||
<Site language={language} config={siteConfig} metadata={{id: pageID}}>
|
<Site language={language} config={siteConfig} metadata={{id: pageID}}>
|
||||||
<ReactComp language={language} />
|
<ReactComp language={language} />
|
||||||
</Site>
|
</Site>
|
||||||
|
@ -499,7 +499,7 @@ function execute() {
|
||||||
const pageID = path.basename(normalizedFile, '.html');
|
const pageID = path.basename(normalizedFile, '.html');
|
||||||
const parts = normalizedFile.split('pages');
|
const parts = normalizedFile.split('pages');
|
||||||
const targetFile = join(buildDir, parts[1]);
|
const targetFile = join(buildDir, parts[1]);
|
||||||
const str = renderToStaticMarkup(
|
const str = renderToStaticMarkupWithDoctype(
|
||||||
<Site language="en" config={siteConfig} metadata={{id: pageID}}>
|
<Site language="en" config={siteConfig} metadata={{id: pageID}}>
|
||||||
<div
|
<div
|
||||||
dangerouslySetInnerHTML={{
|
dangerouslySetInnerHTML={{
|
||||||
|
|
21
lib/server/renderUtils.js
Normal file
21
lib/server/renderUtils.js
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2017-present, Facebook, Inc.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const renderToStaticMarkup = require('react-dom/server').renderToStaticMarkup;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom function that wraps renderToStaticMarkup so that we can inject
|
||||||
|
* doctype before React renders the contents. All instance of full-page
|
||||||
|
* rendering within Docusaurus should use this function instead.
|
||||||
|
*/
|
||||||
|
function renderToStaticMarkupWithDoctype(...args) {
|
||||||
|
return '<!DOCTYPE html>' + renderToStaticMarkup(...args);
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
renderToStaticMarkupWithDoctype,
|
||||||
|
};
|
|
@ -1,5 +1,4 @@
|
||||||
/**
|
/**
|
||||||
|
|
||||||
* Copyright (c) 2017-present, Facebook, Inc.
|
* Copyright (c) 2017-present, Facebook, Inc.
|
||||||
*
|
*
|
||||||
* This source code is licensed under the MIT license found in the
|
* This source code is licensed under the MIT license found in the
|
||||||
|
@ -7,27 +6,26 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function execute(port) {
|
function execute(port) {
|
||||||
const extractTranslations = require('../write-translations.js');
|
const extractTranslations = require('../write-translations');
|
||||||
|
|
||||||
const env = require('./env.js');
|
const env = require('./env.js');
|
||||||
const translation = require('./translation.js');
|
const translation = require('./translation');
|
||||||
const express = require('express');
|
const express = require('express');
|
||||||
const React = require('react');
|
const React = require('react');
|
||||||
const request = require('request');
|
const request = require('request');
|
||||||
const renderToStaticMarkup = require('react-dom/server').renderToStaticMarkup;
|
|
||||||
const fs = require('fs-extra');
|
const fs = require('fs-extra');
|
||||||
const os = require('os');
|
const os = require('os');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const color = require('color');
|
const color = require('color');
|
||||||
const toSlug = require('../core/toSlug.js');
|
const toSlug = require('../core/toSlug');
|
||||||
const mkdirp = require('mkdirp');
|
const mkdirp = require('mkdirp');
|
||||||
const glob = require('glob');
|
const glob = require('glob');
|
||||||
const chalk = require('chalk');
|
const chalk = require('chalk');
|
||||||
const translate = require('./translate.js');
|
const translate = require('./translate');
|
||||||
|
const {renderToStaticMarkupWithDoctype} = require('./renderUtils');
|
||||||
|
|
||||||
const feed = require('./feed.js');
|
const feed = require('./feed');
|
||||||
const sitemap = require('./sitemap.js');
|
const sitemap = require('./sitemap');
|
||||||
// const sitemap = require("sitemap");
|
|
||||||
|
|
||||||
const CWD = process.cwd();
|
const CWD = process.cwd();
|
||||||
|
|
||||||
|
@ -250,7 +248,7 @@ function execute(port) {
|
||||||
</DocsLayout>
|
</DocsLayout>
|
||||||
);
|
);
|
||||||
|
|
||||||
res.send(renderToStaticMarkup(docComp));
|
res.send(renderToStaticMarkupWithDoctype(docComp));
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get('/sitemap.xml', function(req, res) {
|
app.get('/sitemap.xml', function(req, res) {
|
||||||
|
@ -293,7 +291,7 @@ function execute(port) {
|
||||||
config={siteConfig}
|
config={siteConfig}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
const str = renderToStaticMarkup(blogPageComp);
|
const str = renderToStaticMarkupWithDoctype(blogPageComp);
|
||||||
|
|
||||||
let path = (page > 0 ? 'page' + (page + 1) : '') + '/index.html';
|
let path = (page > 0 ? 'page' + (page + 1) : '') + '/index.html';
|
||||||
blogPages[path] = str;
|
blogPages[path] = str;
|
||||||
|
@ -344,7 +342,7 @@ function execute(port) {
|
||||||
{rawContent}
|
{rawContent}
|
||||||
</BlogPostLayout>
|
</BlogPostLayout>
|
||||||
);
|
);
|
||||||
res.send(renderToStaticMarkup(blogPostComp));
|
res.send(renderToStaticMarkupWithDoctype(blogPostComp));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -365,7 +363,7 @@ function execute(port) {
|
||||||
if (siteConfig.wrapPagesHTML) {
|
if (siteConfig.wrapPagesHTML) {
|
||||||
removeModuleAndChildrenFromCache(join('..', 'core', 'Site.js'));
|
removeModuleAndChildrenFromCache(join('..', 'core', 'Site.js'));
|
||||||
const Site = require(join('..', 'core', 'Site.js'));
|
const Site = require(join('..', 'core', 'Site.js'));
|
||||||
const str = renderToStaticMarkup(
|
const str = renderToStaticMarkupWithDoctype(
|
||||||
<Site
|
<Site
|
||||||
language="en"
|
language="en"
|
||||||
config={siteConfig}
|
config={siteConfig}
|
||||||
|
@ -436,7 +434,7 @@ function execute(port) {
|
||||||
removeModuleAndChildrenFromCache(join('..', 'core', 'Site.js'));
|
removeModuleAndChildrenFromCache(join('..', 'core', 'Site.js'));
|
||||||
const Site = require(join('..', 'core', 'Site.js'));
|
const Site = require(join('..', 'core', 'Site.js'));
|
||||||
translate.setLanguage(language);
|
translate.setLanguage(language);
|
||||||
const str = renderToStaticMarkup(
|
const str = renderToStaticMarkupWithDoctype(
|
||||||
<Site
|
<Site
|
||||||
language={language}
|
language={language}
|
||||||
config={siteConfig}
|
config={siteConfig}
|
||||||
|
@ -507,6 +505,7 @@ function execute(port) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
res.header('Content-Type', 'text/css');
|
||||||
res.send(cssContent);
|
res.send(cssContent);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue