Johani
(Joe)
1. Februar 2018 um 04:18
1
I have a working carousel which I would like to package as a theme:
I’ve been trying to figure out how to whitelist a class or attribute for the script to target that would work with under a theme.
I’ve read:
https://meta.discourse.org/t/whitelisting-some-html-tags/24280
and
Whitelist all the code inside of a div tag?
But these topics cover plugin structure and I could not get any of the methods to work in a theme.
I’ve used the [dir] attribute - white-listed by default - in another theme here
However, that won’t work for two reasons:
1- the Next and Previous buttons will be mixed up based on the text direction
2- The slides can contain text like so:
and I’d really rather not go down that rabbit hole where I override the text direction with CSS - that’s just too hacky even for me.
I’m pretty much stuck here
The current selector I’m using to initialize the script on the container is:
$('.cooked>div[dir*="rtl"]')
So my question is:
How can I while-list a class or attribute for a div in a theme?
sam
(Sam Saffron)
1. Februar 2018 um 04:33
2
Oh you can not do that yet, what I would like to do is just have .theme-[a-z]+ automatically whitelisted, but it requires fiddling with the whitelister a bit.
Assigning this to me, but may take a few weeks to get around to it.
If @angus or @david feel like giving it a shot, be my guest.
Johani
(Joe)
1. Februar 2018 um 04:54
4
No worries @sam
Thank you for taking this on - no rush at all I’m sure your plate is full
I have one last followup question.
Does defining new tags like:
[foo]
// slides
[/foo]
to be later converted into
<div class="foo">
// slides
</div>
in the cooked output also require a plugin for now?
sam
(Sam Saffron)
1. Februar 2018 um 04:59
5
Yeah if you are trying to amend the markdown pipeline I think you need a plugin. One thing that is good security wise with themes is that they are not allowed to run on the server, this would change it.
Johani
(Joe)
1. Februar 2018 um 08:07
6
I spent a bit more time trying out different things and here's what I found
1- <div dir="foo"></div> is not filtered out even if the value does not match rtl or ltr
2- <div dir></div> is also not filtered out
This line has can be selected with [dir="foo"]
This line can be selected with div[dir=""]
So I can technically make
<div dir="carousel">
// slides
</div>
work but I have a feeling that you might be interested in preventing this behavior. I will wait and see what you think.
tshenry
(Taylor)
14. Februar 2018 um 10:43
7
Wow, this looks fantastic. Really hoping this sees the light of day.
Falco
(Falco)
14. Februar 2018 um 20:03
8
sam
(Sam Saffron)
14. Februar 2018 um 20:15
9
In general we do blocks in bbcode, so it gets a bit confusing to add another pattern.
The issue here is the whitelister per:
https://github.com/discourse/discourse/blob/master/app/assets/javascripts/pretty-text/white-lister.js.es6#L114-L179
But our DSL is a bit too limited atm to add theme-* as a whitelisted class so we need to fix that.
Johani
(Joe)
15. Februar 2018 um 03:16
10
<aside data-carousel="true"></aside>
Would also work.
This line can be selected with [data-carousel="true"]
And unlike
<div dir="foo"></div>
or
<div dir></div>
<aside data-carousel="true"></aside> is valid html
Still feels a bit unorthodox though
sam
(Sam Saffron)
15. Februar 2018 um 04:55
11
Oh, I can add data-* to div quite easily, does that help?
Johani
(Joe)
15. Februar 2018 um 05:04
12
Yes!
I think that would work and pretty much cover everything.
attribute selectors work with jQuery and CSS just fine.
riking
(Kane York)
15. Februar 2018 um 06:19
13
Perhaps data-custom-* or data-c-* – you don’t want to get stuff confused with data-lazyYT
j.jaffeux
(Joffrey Jaffeux)
15. Februar 2018 um 07:34
14
yes and AFAIK it doesn’t have any noticeable performance hit
sam
(Sam Saffron)
15. Februar 2018 um 08:19
15
Sure then, can you do a PR to add data-theme-* on DIV, I think it makes good sense and will not clash.
Johani
(Joe)
15. Februar 2018 um 08:48
16
This is great news!
Well I tried anyway
https://github.com/discourse/discourse/pull/5598
PR submitted
Können wir data-theme-* für p-Tags verwenden?