Merge pull request #1771 from FWYongxing/master
livereload uses host, port and HTTP(S) protocol of current page
This commit is contained in:
commit
566451e9a7
|
@ -62,11 +62,10 @@ pub fn execute(args: &ArgMatches) -> Result<()> {
|
||||||
|
|
||||||
let address = format!("{}:{}", hostname, port);
|
let address = format!("{}:{}", hostname, port);
|
||||||
|
|
||||||
let livereload_url = format!("ws://{}/{}", address, LIVE_RELOAD_ENDPOINT);
|
|
||||||
let update_config = |book: &mut MDBook| {
|
let update_config = |book: &mut MDBook| {
|
||||||
book.config
|
book.config
|
||||||
.set("output.html.livereload-url", &livereload_url)
|
.set("output.html.live-reload-endpoint", &LIVE_RELOAD_ENDPOINT)
|
||||||
.expect("livereload-url update failed");
|
.expect("live-reload-endpoint update failed");
|
||||||
if let Some(dest_dir) = args.value_of("dest-dir") {
|
if let Some(dest_dir) = args.value_of("dest-dir") {
|
||||||
book.config.build.build_dir = dest_dir.into();
|
book.config.build.build_dir = dest_dir.into();
|
||||||
}
|
}
|
||||||
|
|
|
@ -531,16 +531,16 @@ pub struct HtmlConfig {
|
||||||
pub cname: Option<String>,
|
pub cname: Option<String>,
|
||||||
/// Edit url template, when set shows a "Suggest an edit" button for
|
/// Edit url template, when set shows a "Suggest an edit" button for
|
||||||
/// directly jumping to editing the currently viewed page.
|
/// directly jumping to editing the currently viewed page.
|
||||||
/// Contains {path} that is replaced with chapter source file path
|
/// Contains {path} that is replaced with chapter source file path[[[[
|
||||||
pub edit_url_template: Option<String>,
|
pub edit_url_template: Option<String>,
|
||||||
/// This is used as a bit of a workaround for the `mdbook serve` command.
|
/// Endpoint of websocket, for livereload usage. Value loaded from .toml file
|
||||||
/// Basically, because you set the websocket port from the command line, the
|
/// is ignored, because our code overrides this field with the value [`LIVE_RELOAD_ENDPOINT`]
|
||||||
/// `mdbook serve` command needs a way to let the HTML renderer know where
|
///
|
||||||
/// to point livereloading at, if it has been enabled.
|
/// [`LIVE_RELOAD_ENDPOINT`]: cmd::serve::LIVE_RELOAD_ENDPOINT
|
||||||
///
|
///
|
||||||
/// This config item *should not be edited* by the end user.
|
/// This config item *should not be edited* by the end user.
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
pub livereload_url: Option<String>,
|
pub live_reload_endpoint: Option<String>,
|
||||||
/// The mapping from old pages to new pages/URLs to use when generating
|
/// The mapping from old pages to new pages/URLs to use when generating
|
||||||
/// redirects.
|
/// redirects.
|
||||||
pub redirect: HashMap<String, String>,
|
pub redirect: HashMap<String, String>,
|
||||||
|
@ -569,7 +569,7 @@ impl Default for HtmlConfig {
|
||||||
input_404: None,
|
input_404: None,
|
||||||
site_url: None,
|
site_url: None,
|
||||||
cname: None,
|
cname: None,
|
||||||
livereload_url: None,
|
live_reload_endpoint: None,
|
||||||
redirect: HashMap::new(),
|
redirect: HashMap::new(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -606,8 +606,11 @@ fn make_data(
|
||||||
if theme.favicon_svg.is_some() {
|
if theme.favicon_svg.is_some() {
|
||||||
data.insert("favicon_svg".to_owned(), json!("favicon.svg"));
|
data.insert("favicon_svg".to_owned(), json!("favicon.svg"));
|
||||||
}
|
}
|
||||||
if let Some(ref livereload) = html_config.livereload_url {
|
if let Some(ref live_reload_endpoint) = html_config.live_reload_endpoint {
|
||||||
data.insert("livereload".to_owned(), json!(livereload));
|
data.insert(
|
||||||
|
"live_reload_endpoint".to_owned(),
|
||||||
|
json!(live_reload_endpoint),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
let default_theme = match html_config.default_theme {
|
let default_theme = match html_config.default_theme {
|
||||||
|
|
|
@ -219,10 +219,12 @@
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{#if livereload}}
|
{{#if live_reload_endpoint}}
|
||||||
<!-- Livereload script (if served using the cli tool) -->
|
<!-- Livereload script (if served using the cli tool) -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var socket = new WebSocket("{{{livereload}}}");
|
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
|
||||||
|
const wsAddress = wsProtocol + "//" + location.host + "/" + "{{{live_reload_endpoint}}}";
|
||||||
|
const socket = new WebSocket(wsAddress);
|
||||||
socket.onmessage = function (event) {
|
socket.onmessage = function (event) {
|
||||||
if (event.data === "reload") {
|
if (event.data === "reload") {
|
||||||
socket.close();
|
socket.close();
|
||||||
|
|
Loading…
Reference in New Issue