Skip to content

Commit e97e823

Browse files
authored
Allow delayed loading of three.js (theme-next#935)
1 parent 679d7a0 commit e97e823

File tree

4 files changed

+66
-19
lines changed

4 files changed

+66
-19
lines changed

_config.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -983,12 +983,12 @@ canvas_nest:
983983

984984
# JavaScript 3D library.
985985
# Dependencies: https://github.com/theme-next/theme-next-three
986-
# three_waves
987-
three_waves: false
988-
# canvas_lines
989-
canvas_lines: false
990-
# canvas_sphere
991-
canvas_sphere: false
986+
three:
987+
enable: false
988+
delay: false # Set true to further delay loading
989+
three_waves: false
990+
canvas_lines: false
991+
canvas_sphere: false
992992

993993
# Canvas-ribbon
994994
# Dependencies: https://github.com/theme-next/theme-next-canvas-ribbon

layout/_layout.swig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@
105105
{% include '_scripts/next-boot.swig' %}
106106
{% include '_scripts/scroll-cookie.swig' %}
107107
{% include '_scripts/exturl.swig' %}
108+
{% include '_scripts/three.swig' %}
108109
{% include '_third-party/quicklink.swig' %}
109110
{% include '_third-party/comments/index.swig' %}
110111
{% include '_third-party/search/index.swig' %}

layout/_scripts/three.swig

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
{% if theme.three.enable and theme.three.delay %}
2+
{% set three_url = url_for(theme.vendors._internal + '/three/three.min.js') %}
3+
{% if theme.vendors.three %}
4+
{% set three_url = theme.vendors.three %}
5+
{% endif %}
6+
7+
{% if theme.three.three_waves %}
8+
{% set waves = theme.vendors.three_waves | default(url_for(theme.vendors._internal + '/three/three-waves.min.js')) %}
9+
{% endif %}
10+
11+
{% if theme.three.canvas_lines %}
12+
{% set lines = theme.vendors.canvas_lines | default(url_for(theme.vendors._internal + '/three/canvas_lines.min.js')) %}
13+
{% endif %}
14+
15+
{% if theme.three.canvas_sphere %}
16+
{% set sphere = theme.vendors.canvas_sphere | default(url_for(theme.vendors._internal + '/three/canvas_sphere.min.js')) %}
17+
{% endif %}
18+
19+
<script>
20+
;((d, w) => {
21+
loadThree = () => {
22+
let s = d.createElement('script');
23+
s.src = '{{ three_url }}';
24+
d.body.appendChild(s);
25+
}
26+
let styles = ['{{ waves }}', '{{ lines }}', '{{ sphere }}'];
27+
loadStyle = () => {
28+
styles.forEach(x => {
29+
if (x !== '') {
30+
let s = d.createElement('script');
31+
s.src = x;
32+
d.body.appendChild(s);
33+
}
34+
})
35+
}
36+
w.addEventListener('DOMContentLoaded', loadThree);
37+
w.addEventListener('load', loadStyle);
38+
})(document, window);
39+
</script>
40+
{% endif %}

layout/_scripts/vendors.swig

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
</script>
88

99
{% set js_vendors = {} %}
10+
{% set js_defer_vendors = {} %}
1011
{% set js_vendors.jquery = 'jquery/index.js?v=3.4.1' %}
1112

1213
{% if theme.fastclick %}
@@ -39,19 +40,19 @@
3940
<script color='{{ theme.canvas_nest.color }}' opacity='{{ theme.canvas_nest.opacity }}' zIndex='{{ theme.canvas_nest.zIndex }}' count='{{ theme.canvas_nest.count }}' src="{{ canvas_nest_uri }}"></script>
4041
{% endif %}
4142

42-
{% if theme.three_waves %}
43-
{% set js_vendors.three = 'three/three.min.js' %}
44-
{% set js_vendors.three_waves = 'three/three-waves.min.js' %}
45-
{% endif %}
46-
47-
{% if theme.canvas_lines %}
48-
{% set js_vendors.three = 'three/three.min.js' %}
49-
{% set js_vendors.canvas_lines = 'three/canvas_lines.min.js' %}
50-
{% endif %}
51-
52-
{% if theme.canvas_sphere %}
53-
{% set js_vendors.three = 'three/three.min.js' %}
54-
{% set js_vendors.canvas_sphere = 'three/canvas_sphere.min.js' %}
43+
{% if theme.three.enable and not theme.three.delay %}
44+
{% if theme.three.three_waves %}
45+
{% set js_defer_vendors.three = 'three/three.min.js' %}
46+
{% set js_defer_vendors.three_waves = 'three/three-waves.min.js' %}
47+
{% endif %}
48+
{% if theme.three.canvas_lines %}
49+
{% set js_defer_vendors.three = 'three/three.min.js' %}
50+
{% set js_defer_vendors.canvas_lines = 'three/canvas_lines.min.js' %}
51+
{% endif %}
52+
{% if theme.three.canvas_sphere %}
53+
{% set js_defer_vendors.three = 'three/three.min.js' %}
54+
{% set js_defer_vendors.canvas_sphere = 'three/canvas_sphere.min.js' %}
55+
{% endif %}
5556
{% endif %}
5657

5758
{% if theme.canvas_ribbon.enable %}
@@ -70,3 +71,8 @@
7071
{% set internal_script = url_for(theme.vendors._internal + '/' + internal) %}
7172
<script src="{{ theme.vendors[name] | default(internal_script) }}"></script>
7273
{% endfor %}
74+
75+
{% for name, internal in js_defer_vendors %}
76+
{% set internal_script = url_for(theme.vendors._internal + '/' + internal) %}
77+
<script defer src="{{ theme.vendors[name] | default(internal_script) }}"></script>
78+
{% endfor %}

0 commit comments

Comments
 (0)