Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Force JS execution after page/DOM fully loads #4189

Merged
merged 2 commits into from
Apr 20, 2016
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
172 changes: 87 additions & 85 deletions bokeh/core/_templates/autoload_js.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,94 +25,96 @@ calls it with the rendered model.


#}
(function(global) {
function now() {
return new Date();
}

if (typeof (window._bokeh_onload_callbacks) === "undefined") {
window._bokeh_onload_callbacks = [];
}

function run_callbacks() {
window._bokeh_onload_callbacks.forEach(function(callback) { callback() });
delete window._bokeh_onload_callbacks
console.info("Bokeh: all callbacks have finished");
}

function load_libs(js_urls, callback) {
window._bokeh_onload_callbacks.push(callback);
if (window._bokeh_is_loading > 0) {
console.log("Bokeh: BokehJS is being loaded, scheduling callback at", now());
return null;
document.addEventListener("DOMContentLoaded", function(event) {
(function(global) {
function now() {
return new Date();
}
if (js_urls == null || js_urls.length === 0) {
run_callbacks();
return null;
}
console.log("Bokeh: BokehJS not loaded, scheduling load and callback at", now());
window._bokeh_is_loading = js_urls.length;
for (var i = 0; i < js_urls.length; i++) {
var url = js_urls[i];
var s = document.createElement('script');
s.src = url;
s.async = false;
s.onreadystatechange = s.onload = function() {
window._bokeh_is_loading--;
if (window._bokeh_is_loading === 0) {
console.log("Bokeh: all BokehJS libraries loaded");
run_callbacks()
}
};
s.onerror = function() {
console.warn("failed to load library " + url);
};
console.log("Bokeh: injecting script tag for BokehJS library: ", url);
document.getElementsByTagName("head")[0].appendChild(s);

if (typeof (window._bokeh_onload_callbacks) === "undefined") {
window._bokeh_onload_callbacks = [];
}
};

{%- if elementid -%}
var element = document.getElementById("{{ elementid }}");
if (element == null) {
console.log("Bokeh: ERROR: autoload.js configured with elementid '{{ elementid }}' but no matching script tag was found. ")
return false;
}
{%- endif %}

var js_urls = {{ js_urls }};

var inline_js = [
{%- for js in js_raw %}
function(Bokeh) {
{{ js|indent(6) }}
},
{% endfor -%}
function(Bokeh) {
{%- for url in css_urls %}
console.log("Bokeh: injecting CSS: {{ url }}");
Bokeh.embed.inject_css("{{ url }}");
{%- endfor %}
{%- for css in css_raw %}
console.log("Bokeh: injecting raw CSS");
Bokeh.embed.inject_raw_css({{ css }});
{%- endfor %}

function run_callbacks() {
window._bokeh_onload_callbacks.forEach(function(callback) { callback() });
delete window._bokeh_onload_callbacks
console.info("Bokeh: all callbacks have finished");
}
];

function run_inline_js() {
for (var i = 0; i < inline_js.length; i++) {
inline_js[i](window.Bokeh);
function load_libs(js_urls, callback) {
window._bokeh_onload_callbacks.push(callback);
if (window._bokeh_is_loading > 0) {
console.log("Bokeh: BokehJS is being loaded, scheduling callback at", now());
return null;
}
if (js_urls == null || js_urls.length === 0) {
run_callbacks();
return null;
}
console.log("Bokeh: BokehJS not loaded, scheduling load and callback at", now());
window._bokeh_is_loading = js_urls.length;
for (var i = 0; i < js_urls.length; i++) {
var url = js_urls[i];
var s = document.createElement('script');
s.src = url;
s.async = false;
s.onreadystatechange = s.onload = function() {
window._bokeh_is_loading--;
if (window._bokeh_is_loading === 0) {
console.log("Bokeh: all BokehJS libraries loaded");
run_callbacks()
}
};
s.onerror = function() {
console.warn("failed to load library " + url);
};
console.log("Bokeh: injecting script tag for BokehJS library: ", url);
document.getElementsByTagName("head")[0].appendChild(s);
}
};

{%- if elementid -%}
var element = document.getElementById("{{ elementid }}");
if (element == null) {
console.log("Bokeh: ERROR: autoload.js configured with elementid '{{ elementid }}' but no matching script tag was found. ")
return false;
}
}

if (window._bokeh_is_loading === 0) {
console.log("Bokeh: BokehJS loaded, going straight to plotting");
run_inline_js();
} else {
load_libs(js_urls, function() {
console.log("Bokeh: BokehJS plotting callback run at", now());
{%- endif %}

var js_urls = {{ js_urls }};

var inline_js = [
{%- for js in js_raw %}
function(Bokeh) {
{{ js|indent(6) }}
},
{% endfor -%}
function(Bokeh) {
{%- for url in css_urls %}
console.log("Bokeh: injecting CSS: {{ url }}");
Bokeh.embed.inject_css("{{ url }}");
{%- endfor %}
{%- for css in css_raw %}
console.log("Bokeh: injecting raw CSS");
Bokeh.embed.inject_raw_css({{ css }});
{%- endfor %}
}
];

function run_inline_js() {
for (var i = 0; i < inline_js.length; i++) {
inline_js[i](window.Bokeh);
}
}

if (window._bokeh_is_loading === 0) {
console.log("Bokeh: BokehJS loaded, going straight to plotting");
run_inline_js();
});
}
}(this));
} else {
load_libs(js_urls, function() {
console.log("Bokeh: BokehJS plotting callback run at", now());
run_inline_js();
});
}
}(this));
});