diff --git a/layout/_scripts/index.njk b/layout/_scripts/index.njk
index c41ce1b..70e6e44 100644
--- a/layout/_scripts/index.njk
+++ b/layout/_scripts/index.njk
@@ -15,4 +15,3 @@
{%- if theme.pjax %}
{% include 'pjax.njk' %}
{%- endif %}
-{% include 'three.njk' %}
diff --git a/layout/_scripts/three.njk b/layout/_scripts/three.njk
deleted file mode 100644
index fa1c7c3..0000000
--- a/layout/_scripts/three.njk
+++ /dev/null
@@ -1,16 +0,0 @@
-{%- if theme.three.enable %}
- {%- set three_uri = theme.vendors.three or next_vendors('three/three.min.js') %}
-
- {%- if theme.three.three_waves %}
- {%- set waves_uri = theme.vendors.three_waves or next_vendors('three/three-waves.min.js') %}
-
- {%- endif %}
- {%- if theme.three.canvas_lines %}
- {%- set lines_uri = theme.vendors.canvas_lines or next_vendors('three/canvas_lines.min.js') %}
-
- {%- endif %}
- {%- if theme.three.canvas_sphere %}
- {%- set sphere_uri = theme.vendors.canvas_sphere or next_vendors('three/canvas_sphere.min.js') %}
-
- {%- endif %}
-{%- endif %}
diff --git a/layout/_scripts/vendors.njk b/layout/_scripts/vendors.njk
index 5465785..6f316ea 100644
--- a/layout/_scripts/vendors.njk
+++ b/layout/_scripts/vendors.njk
@@ -1,30 +1,18 @@
-{%- set js_vendors = {} %}
-{%- set js_vendors = js_vendors | attr('anime', 'anime.min.js') %}
-
-{%- if theme.pjax %}
- {%- set js_vendors = js_vendors | attr('pjax', 'pjax/pjax.min.js') %}
-{%- endif %}
-
-{%- if theme.fancybox %}
- {%- set js_vendors = js_vendors | attr('jquery', '//cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js') %}
- {%- set js_vendors = js_vendors | attr('fancybox', '//cdn.jsdelivr.net/gh/fancyapps/fancybox@3/dist/jquery.fancybox.min.js') %}
-{%- endif %}
-
-{%- if theme.mediumzoom %}
- {%- set js_vendors = js_vendors | attr('mediumzoom', '//cdn.jsdelivr.net/npm/medium-zoom@1/dist/medium-zoom.min.js') %}
-{%- endif %}
-
-{%- if theme.lazyload %}
- {%- set js_vendors = js_vendors | attr('lazyload', '//cdn.jsdelivr.net/npm/lozad@1/dist/lozad.min.js') %}
-{%- endif %}
-
-{%- if theme.pangu %}
- {%- set js_vendors = js_vendors | attr('pangu', '//cdn.jsdelivr.net/npm/pangu@4/dist/browser/pangu.min.js') %}
-{%- endif %}
-
-{%- if theme.motion.enable %}
- {%- set js_vendors = js_vendors | attr('velocity', 'velocity/velocity.min.js') %}
- {%- set js_vendors = js_vendors | attr('velocity_ui', 'velocity/velocity.ui.min.js') %}
+{%- if theme.three.enable %}
+ {%- set three_uri = theme.vendors.three or next_vendors('three/three.min.js') %}
+
+ {%- if theme.three.three_waves %}
+ {%- set waves_uri = theme.vendors.three_waves or next_vendors('three/three-waves.min.js') %}
+
+ {%- endif %}
+ {%- if theme.three.canvas_lines %}
+ {%- set lines_uri = theme.vendors.canvas_lines or next_vendors('three/canvas_lines.min.js') %}
+
+ {%- endif %}
+ {%- if theme.three.canvas_sphere %}
+ {%- set sphere_uri = theme.vendors.canvas_sphere or next_vendors('three/canvas_sphere.min.js') %}
+
+ {%- endif %}
{%- endif %}
{%- if theme.canvas_ribbon.enable %}
@@ -32,7 +20,7 @@
{%- endif %}
-{%- for name, internal in js_vendors %}
+{%- for name, internal in js_vendors() %}
{%- set internal_script = next_vendors(internal) %}
{%- endfor %}
diff --git a/scripts/helpers/next-vendors.js b/scripts/helpers/next-vendors.js
new file mode 100644
index 0000000..9355a3f
--- /dev/null
+++ b/scripts/helpers/next-vendors.js
@@ -0,0 +1,31 @@
+/* global hexo */
+
+'use strict';
+
+hexo.extend.helper.register('js_vendors', function() {
+ let { theme } = this;
+ let vendors = {
+ anime: 'anime.min.js'
+ };
+ if (theme.pjax) {
+ vendors.pjax = 'pjax/pjax.min.js';
+ }
+ if (theme.fancybox) {
+ vendors.jquery = '//cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js';
+ vendors.fancybox = '//cdn.jsdelivr.net/gh/fancyapps/fancybox@3/dist/jquery.fancybox.min.js';
+ }
+ if (theme.mediumzoom) {
+ vendors.mediumzoom = '//cdn.jsdelivr.net/npm/medium-zoom@1/dist/medium-zoom.min.js';
+ }
+ if (theme.lazyload) {
+ vendors.lazyload = '//cdn.jsdelivr.net/npm/lozad@1/dist/lozad.min.js';
+ }
+ if (theme.pangu) {
+ vendors.pangu = '//cdn.jsdelivr.net/npm/pangu@4/dist/browser/pangu.min.js';
+ }
+ if (theme.motion.enable) {
+ vendors.velocity = 'velocity/velocity.min.js';
+ vendors.velocity_ui = 'velocity/velocity.ui.min.js';
+ }
+ return vendors;
+});
diff --git a/scripts/renderer.js b/scripts/renderer.js
index 9dbef15..3c74894 100644
--- a/scripts/renderer.js
+++ b/scripts/renderer.js
@@ -10,10 +10,6 @@ function njkCompile(data) {
const env = nunjucks.configure(templateDir, {
autoescape: false
});
- env.addFilter('attr', (dictionary, key, value) => {
- dictionary[key] = value;
- return dictionary;
- });
env.addFilter('json', dictionary => {
if (typeof dictionary !== 'undefined' && dictionary !== null) {
return JSON.stringify(dictionary);