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

Add "hook feature" to inject Javascript snippets etc. #1510

Closed
bep opened this issue Oct 20, 2015 · 7 comments
Closed

Add "hook feature" to inject Javascript snippets etc. #1510

bep opened this issue Oct 20, 2015 · 7 comments

Comments

@bep
Copy link
Member

bep commented Oct 20, 2015

See

http://stackoverflow.com/questions/33163202/how-to-include-simple-javascript-within-hugo/33186584?noredirect=1#comment54212668_33186584

@siennathesane
Copy link

@bep is there a plan to add this functionality into hugo? It would be really nice to be able to be able to put small scripts into a page to load things like charts, plots, boxes, anything client-side rendered.

@KevinGimbel
Copy link
Contributor

@mxplusb A workaround could be to have the scripts in your front matter and render them if needed inside your post / page template.

Front matter:

---
title: "My blog post with charts"
scripts: 
  - "/js/libs/chart.min.js"
---

Template:

{{ range .Page.Params.scripts }}
  <script async src="{{ . }}" type="text/javascript"></script>
{{ end }}

While this is not as powerful as hooks can be it might serve a similar purpose for scripts - and it's certainly better than loading all scripts on all pages if they are not needed.


Otherwise, I would love to see hooks! It's a great functionality in systems like WordPress.

@siennathesane
Copy link

siennathesane commented Jan 30, 2017

@KevinGimbel huh, that could be useful!

I tried to load the a script from this metadata:

+++
date = "2017-01-29T22:33:03-08:00"
title = "test 1"
scripts: 
  - "static/sigma.min.js"
+++

But got build errors:

hugo.exe server --buildDrafts
Started building sites ...
Error: Error building site: Errors reading pages: Error:(4, 1): unexpected token for test-1.md
ERROR 2017/01/30 00:09:03 Error parsing page meta data for blog\test-1.md
ERROR 2017/01/30 00:09:03 (4, 1): unexpected token
ERROR 2017/01/30 00:09:03 (4, 1): unexpected token

When I build it with this markdown (including a script):

+++
date = "2017-01-29T22:33:03-08:00"
title = "test 1"
+++

test html:
  <script type="text/javascript">
  document.write("some text here.")
  </script>

It doesn't output some text here. Specifically, I'm not sure why, as blackfriday doesn't actually remove any HTML tags (to my knowledge). However, I was looking at helpers.StripHTML(), and it looks like all HTML tags are stripped. I'm not sure if the tags are stripped before or after blackfriday is parsing them.

I'm brand new to the hugo code base, but I did some research into what it uses for parsing (blackfriday) and how blackfriday works.

I'm wondering if adding a custom bluemonday policy to the blackfriday parsing might be helpful, and then removing the helpers.StripHTML() functionality would be a step in the right direction. Then you could have a parameter list in your config.toml that could customise a bluemonday policy to allow certain tags.

What are your thoughts?

@KevinGimbel
Copy link
Contributor

@mxplusb you are mixing YAML and TOML in your metadata which is not supported. To declare an array in TOML use the following code:

+++
title = "my title"
scripts = [ "/path/to/script.js", "/path/to/script2.js" ]
+++

If you know you will always use one extra script you could also define it as a "standard" parameter instead of an array.

+++
title = "my title"
script = "/path/to/script.js"

and read it like this

{{ if isset .Params "script" }}
<script src="{{ .Params.script }}" type="text/javascript"></script>
{{ end }}

As for the bluemonday policies I cannot say much. The decision of adding it, or when to add it, is up to the Maintainers (@bep, @spf13 , @digitalcraftsman, et al).

@siennathesane
Copy link

Ah, gotcha, I didn't know it was TOML, thanks! That fixed the build errors, at least. Still not having a lot of luck with the inline script, but maybe one of the maintainers can comment on that.

@stale
Copy link

stale bot commented Dec 6, 2017

This issue has been automatically marked as stale because it has not had recent activity. The resources of the Hugo team are limited, and so we are asking for your help.
If this is a bug and you can still reproduce this error on the master branch, please reply with all of the information you have about it in order to keep the issue open.
If this is a feature request, and you feel that it is still relevant and valuable, please tell us why.
This issue will automatically be closed in the near future if no further activity occurs. Thank you for all your contributions.

@stale stale bot added the Stale label Dec 6, 2017
@stale stale bot closed this as completed Dec 27, 2017
bep added a commit that referenced this issue Oct 31, 2021
39a7fac34 Add .hugo_build.lock to .gitignore
920c716a4 fix a typo: to -> two (#1545)
6f0ba9593 Remove godocref from front matter (#1543)
8ec3d5948 remove link to wercker (#1544)
b56008719 Delete deployment-with-wercker.md (#1542)
e33d29b02 Fix broken links (#1538)
29e9d4c21 Sort commenting systems (#1541)
0b7ea60a7 Delete the news page "HTTP/2 Server Push in Hugo"
6e1515857 Fix quick-start.md (#1525)
62168ab35 Update comments.md (#1535)
d92191512 Small typo (#1539)
129c8834a Correct the PostCSS noMap default value (#1534)
6a5b29fcc Add example to index function (#1536)
e3dd8c507 Update output-formats.md
0c9321ca0 Remove reference to using LiveReload in production environment
4072d6776 Mod testing
09fabf7d6 Fix typo (#1524)
2fce813c8 Fix grammatical error in quick-start.md (#1523)
45230ab4a Hugo Mod testing
2dd4cd9e7 Update index.md
2c3ed62fd netlify: Bump to 0.88.1
648e2a007 Merge branch 'tempv0.88.1'
f216eade1 releaser: Add release notes to /docs for release of 0.88.1
8a7b64d4b Fix typographical errors in 0.88.0 release notes
a4bf86300 Release 0.88
738bb8f38 releaser: Add release notes to /docs for release of 0.88.0
8fcf2c55d highlight: Remove some pygments references
f2b173de2 HTTPS link
c88881c8e Adding link to nginx documentation
6b0a74fe0 Fix typos in docs (#1516)
498b8f0f1 Fix typos in time.Format (#1515)
28723fad6 Fix taxonomy and term examples (#1514)
3ffd00e12 Update front-matter.md
7cc1da82e Fix grammar in 0.86.1 release notes (#1510)
0009c51c3 Update docs helper
7e2f430f4 Update index.md
7857eae7e releaser: Add release notes to /docs for release of 0.87.0
1f08b684b releaser: Add release notes to /docs for release of 0.87.0
36a9e701c docs: Adjust config docs
0f588438e docs: Regen CLI docs
1b4682cd8 docs: Regen docs helper
bc8bbaae9 Merge commit 'bd77f6e1c99e04a476f0b1bb4e44569134e02399' into release-0.87.0
6f2480643 docs: Adjust time zone docs

git-subtree-dir: docs
git-subtree-split: 39a7fac343c289906db644c96079fdcc0298582f
@github-actions
Copy link

This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Mar 10, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

3 participants