From 8b370abf021d4ed8fd9bb28f71cc3e636be579f7 Mon Sep 17 00:00:00 2001 From: Rohan Kumar Date: Sun, 12 Nov 2023 13:48:39 -0700 Subject: [PATCH] New post: spoiler element --- assets/p/spoiler-fedi.avif | Bin 0 -> 6013 bytes assets/p/spoiler-fedi.jpg | Bin 0 -> 11663 bytes assets/p/spoiler-fedi.jxl | Bin 0 -> 8363 bytes assets/p/spoiler-fedi.webp | Bin 0 -> 8156 bytes assets/p/spoiler.png | Bin 0 -> 3768 bytes assets/p/spoiler.webp | Bin 0 -> 2882 bytes assets/p/spoiler_dark.jxl | Bin 0 -> 3138 bytes assets/p/spoiler_dark.png | Bin 0 -> 5029 bytes assets/p/spoiler_dark.webp | Bin 0 -> 3924 bytes content/posts/spoiler-element.gmi | 138 +++++++++++++++++++ content/posts/spoiler-element.md | 216 ++++++++++++++++++++++++++++++ 11 files changed, 354 insertions(+) create mode 100644 assets/p/spoiler-fedi.avif create mode 100644 assets/p/spoiler-fedi.jpg create mode 100644 assets/p/spoiler-fedi.jxl create mode 100644 assets/p/spoiler-fedi.webp create mode 100644 assets/p/spoiler.png create mode 100644 assets/p/spoiler.webp create mode 100644 assets/p/spoiler_dark.jxl create mode 100644 assets/p/spoiler_dark.png create mode 100644 assets/p/spoiler_dark.webp create mode 100644 content/posts/spoiler-element.gmi create mode 100644 content/posts/spoiler-element.md diff --git a/assets/p/spoiler-fedi.avif b/assets/p/spoiler-fedi.avif new file mode 100644 index 0000000000000000000000000000000000000000..751c628f2d3674daa4957691199c291fef8757c9 GIT binary patch literal 6013 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 literal 0 HcmV?d00001 diff --git a/assets/p/spoiler-fedi.jpg b/assets/p/spoiler-fedi.jpg new file mode 100644 index 0000000000000000000000000000000000000000..efb3812d09684c3db96afc090b7d12ffb73cc29f GIT binary patch literal 11663 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 D4aQg7 literal 0 HcmV?d00001 diff --git a/assets/p/spoiler-fedi.jxl b/assets/p/spoiler-fedi.jxl new file mode 100644 index 0000000000000000000000000000000000000000..1607e197b735fa21b6abe69ed09aadb49391d5f6 GIT binary patch literal 8363 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 Bjn)7F literal 0 HcmV?d00001 diff --git a/assets/p/spoiler-fedi.webp b/assets/p/spoiler-fedi.webp new file mode 100644 index 0000000000000000000000000000000000000000..f3238c42d1a54d37acd9d77927c772d2bc656a18 GIT binary patch literal 8156 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 Ch3E(X literal 0 HcmV?d00001 diff --git a/assets/p/spoiler.png b/assets/p/spoiler.png new file mode 100644 index 0000000000000000000000000000000000000000..303a585023b094ae64b02ec3572af752a7c9bc49 GIT binary patch literal 3768 zcmV;p4oC5cP)`1ttr^z{Dz z{=B@r;^N}e)YSa^{NCQ)!NI|{wzll-?7O?W=H}-0_4WPz{pjfEzP`S&u(06Z;N#=t z$jHdDva;pn<*lu)(9qDhxVXc^!}0O)x3{;~*Vp;^`O3=5w6wIx$H)5m`ozS<+S=N= zxw-D{?!Ujk^78WO>FKq#wXUwNgwvn#l_Xt)!f|N@9*!-%*@!> z*xlXT*4EbH;o-~6%j@gw&CSip$;rC9y4l&;&(F`&($d1h!r$ND(b3Vbudeg*^78TV z@$m5Q@9*#K?(XgF?d+9?4>gws~>FDU`>FDU_=jZ3<=H}(-=jZ3<=H}()<>ch$ z<>ch#Y+}+&U+}qmQ+S%IK*xK6I-`?Ha+}qpR z+S=OL+1c3H*w@(C*4Nh6*45P2)zj6~)AaN6+1c0F*w)wA)z;S3)YH<_($Uh<(9zJ( z)YQ_`)6vq>(9qA$&(6)x&CJcr%h=f0&dtls%*xEm$;-;f#>U0b(a_P*&d|@z%gV{h z$;ipb$H>RV&(6%!(a)=^tGKwg%*)Ek$;ZdW#qaO#si~>P#l)wlr^(31?(XfjwYAXC z&*S3a>gwqi`oS*%01RMBL_t(|+U%8uma94#M!$Qfo)REXcXxNQ zPk!602)_B|o%0_)GymhWvt_a3T5NU)Zp7)rMTi?WAyDy#1&PXdQJA7$H;@Q8Jl+p) z=kwzl0zq&-x?L!YtBB-t*hNSbKrEh6k^o35oe8PPQc81t26IPU?*svFzCem4-Ok9+ z?P5hzt^lak>ZH*G-0Ng@BNOzK))s(vhxl!}UAMRXPGutsM6G4|cviBTDF-BJ%?^D4 zX{kbcG>A$xEb$r6?Tm$5-HY}_=%$CJou0w%MAujzPkn$g>jsN6#4;&II5UPo^Yfsx z0Dg1^{h!kkuPi0%(ScqYKqU@=Nj&Z=Y9QuLClbjVRvYnfW;bkjMfkQAr!| zZ`rWBw3CP-^83J^p|WYGXYemc%g{cp;ZOl5u{b(9Dkk&;kw&|;x#`&93;TQed8bG5 z3eU~Bcg4o1JY$XpJo>(^C%|g?EbkoTyNLV?To0Gui|&!9GOQZ z-(lN!#u8!1*wpQ%bACLrw!%1x?e*KF$ODco0BSYu$YcU~hX5j?VJD8x9hsguKgMMv z>Lu(@m;(c%%3*%(I7#(?js`%^UF9>x65G~n{jXuihKv5-Xk=r~14*; z7Vt2Hf_#IWDd*KN9L%NZcttwd?4}JwQFwt|u|YrNNGBs5_#+yoB8g!Giva@pNE{k9%irQMAuOBBSxQvf*$#`<&p${F-a6YAOk?SAf~1&{*zJP zk$`u~s5JEa?I_0|rGces)OB49A)P_T1pUb}nR`i<1iTMllp2pkQc6hsYrQIyI8SW{83f;^6t zYrDLSpLE-3WAJm{dRC5ZonesPOeT}*bOLTHay!lQd`9MEmgiWKrZz>Od$P1#v;!K| z(+cXG!p=bF_r3La=$u^Io90$QOme`RqAL|@eFqb=1tKLv$K&Y;PCp!{)A4ZFV@)MRusOB_S7Z71$e`iN~8#@RC={U03;Ft?o9#E0@9i629{(hCEk??e_ zBDEr{D@BCcVKW<>>p!S{cslgd??U&{7bkReA2-zg*Pu6AoE~3D)nFD;6<`?50vD+I z1_lNP2Zx4+hDk$%g9E+Y`FyrmETlo$*};6+H585xpt-#O>%dC!Qo;YKqND;8y;(Ar zN+ne#=<_%oW|O|*zuG;oz4efEx+8a?d+RdjbR(m+|6$wNoZdD?OGRU)Fob1e<2}6q zW2%YC$*HNSX?#si4i60t%#4rCB1Q|*bSe>Q^Lac-7IMaVz!p@LL^8=?4P~IJvJk@i zW@R9}FOp7az;in-CPU+Y`>^pIj*ffkm1g(bFM;j-Pd}N1bh;nsZ=y>_GNldH-7`Kj zFt9*ui;Ih3n}(K_mhgRQ5e9;f4FsObc<%Bs>uV1w8qm_wf~*r%#mPZ=RyQdR$tVaT z>987tc~;QX?K}Ulblg*~G`njKeE-xBXLTnI&V6!Tr(0erM`npm*m`DW1`v+o8pLR; ztE&Vkcmq9{T(%GeUC>9t$yt%%)G*M9O-LA_Ea8%^Jl@m8gaU}uDy%&Q9d|CP&F-U@ zpFQ$2_T3ys=E1dPoGM1M!|e^KTAB}%9PoN!9dEX(cS|IAw=U+<@gj8XL1gMrlM0gG@ln&S?MvT7qOu2tRRZa#$7%h$RI{!HY!9xtsP~5O~QH z^8u!dw^a3%Ea2%ydcCqAi$xlw^H=R?hjq3a#%4Y_)f!%;hhL?q}4QwoO!G z2+ga&bGHUUEr~=aiOV9-jzQz&<1-ME;`{hGVv>EsA%{)pAv6b-Q^e;*?M7!Nr2?*S zBAgeJq7=Q1$43h>Rs?TJ)2NgONauEB^QQXvqhxdR)GICV+9Mx6_0C7HJ^l3Ya|chH z_-Tu(=tjNKY~@hFg;Zn@d)WCtMy8u0qZa4ST%PsK>hySFE@GJfycl?zT=RbR|hVHJw zyJ4|zJ6#Nj>7m3d*A`F&ij_oOU`|x0_+&!1>vV16TE)h-3Rhq#R7IFKsZ^J>l}0*P z7$r&7>UL5cW^8V}sZ@C&-LCuGUcdd8Z?7*OYiu@f{cET2lCvGPpRBh?5s3`}0&{Z} z&DR7LD(I_tf?NgxDRPtKawt_bKBcA>B>c^Te66}_)C2BiSohkK+<=7c`}b?!lFNBr zLzA8^us6&WOi&nk7A!Bx$CBzE6QYakbqgwIZby*t01%d+07#NtZ76c(GK?V^yLl92 zW()i`8F2rpdzmjlCr&&eoitY7qK;U+4viH|5HsAt^^7iOJQIl~L+pO02Z;D=D^J>f4%%!K3*)@qkoFX^>I^U7V+) zqDi9w5viewfROZ8xNW74_8Dt57Mkfr5F;EicrhQ^5YB@>iDoFyq~@&3+fqV`ac0A z$#ERn+G$NvO*sKo00I4=3S5f`tETjmG{@01Q5^q!GZm1rZkloP&smD$*DL5I+RK!42^^LqXd% zQp_Lr{f8hTCLn!pKB#Qb(s@{PHcmWgFBE!D?be7;5m}K{x%?Cn5F|-%+bl9bvIbGcm0v(tl4RAkQ@x&;TxOf)vB|6-Rp<+t z$z?{D;nC`dvwLRk$DRUV+P0Bl|6e>B0YQ=fqlE(jK%$0$HwFk;djiG(ozCBd4a|iN z#sdKV@;ZMZs=X429?jJGRMCbG$v+ig5a-V$qgTGe9bARbI4D3=p6Bns@;ff(Wqa#K<334rOUqNY7g`wc}+O#4PXOILJl zW8-P8v2+j<1Z;KYzc@EK4`4CPOuF06?2)Df6+^;lZ5u?xWBaP4LBgg^N8~ z>^d9GdvR%E9%xqXKTvwG*?lc>zvp@euyXE!qaPTXzxphr$;N)I$^5u*9yq15aCCE5 z&l&A>aYO(Zx8%g6UmOFFn=U^=5oXS{$2rvM7k$Jv2LA72ZTt`DAn`!Pq8$83fU=hdQ1HSQyEb_z%~0CGe) z;8p=*d9g(FAUuq6&ad- z#gckrch(MP?23{S-6QXH4dPtq)kJylY%Z@5YybAq+|pSPxM;pSWZRrlyEd_ON_Qp~ zl!`CcJj64CQ+s!TjWK()B?my>+GfPfWFWsS`VH_rM`$D}x}6IAc{gQmz;3#>IP=NT z;`qwwcHZX;ZsBYeFfx7KI=ozs?n$u+d)NxBh+^>Mo?I}ftP&`d8lq)YLj&D+o7 zcZckzi}i1#89FO7@~PrJ=ERu*Pu0yNKx0yGgK<{@NI%T!c&QghxSwm8=shS1egH6k zhweH54E-(;ugV<{qjlX?`YEFSB0~gwO$>JNA;!6enFSE&7J;^i5ifcKfPq3m!grqt zjE8LXGEw4Rfd(w40n%roU=AdbP)^V2C`aj+@t)|YpgKsHH+9TjqYp7kmX8eexgIIB z_efh25W=wtJW92_SVu&j6$?(&nVkmsuE;<9)!^dgnJZ}-S$2t7^ohBHn0+& z7~&xVM%1p@p`}^c!o-S1vGi*rip)DqXyB9puz=LcoE=?L`d|c*bj}VrGza@_0-3{#;BxI0Wh2vgKE#G9rvDIVy~y=gUIpapS2VMczPq~!#e17P;00#Vs34|M<`x@R!Z40fRf21w&Oy{RkjF1FO76hau_1!D?1o???e z@dR}~RbW7wK@LPI91RR6%e*g)A>Fd&xY!TrjGci46nghglQ|w?1Uo&uHI4x=B{)p4 z>jndtDA7T{41fvWBQ=6dZ%0vT%?3``&1sN|)(Ap~0jc&4T(UGAVL)4)q#N#z-jGro z4FI?R#P-t&5yK(HK^TBcgM!I(V!AxhcbegK0j8dpPzfNUbO<4VuIqZj)J_xQW}{*l z1~wEO76S`_o=0rdFEEQWnbh}qLxsUWWg3l0psT;*6E?#UW6Wd%V2A;+O^I+2vmq5l zwNL7+Az}bR2v(SfEsOxF_`Sv$VT=F~LPJ-P#(Ua129yd65LW1{@tkC`8KR^i|J<|` zA^pY);5Lr&82}~>FoAv72`HtinX!fSGEv87fzSe&fH8*bULk0(7l*lGuJaEYz(A%R&`hOUhep^~216Do z*(0vyjZFxFz>EvP2p1FEnwTFLm1Zq%>z8mqi28QB<^2m@xLCT<0QkZY1L3KMS$8Z(##3IhTR zIe4B0V2opy!QC^Mel37FD9tpVBd3$V80=L``kV6utFU%C(iaC5fvG>OX3kvMyI6RcpUa~eT&$x5O86m5fms{#1dJ1d0E-=43!$ws z&=BEHG{Z#xU8Z zpoR9Efh~k1211M#kA*f3f);=FcABnMJ(yWz0ANl$!!Mcn0o=hm zyb5skc5g$H`k|=X;tt;7HQ*>eaqAof05pmbFiSujv@wdw%hB|=hG{6qHMzMM7!csf z&;d=|5?G>$-NdaZyaF&`R1@nQ2An3Nu2YW&HY(}brAcE6M^hv-qTdBTbO53U0U(S30j2HIYy`p>_$Pp# zQ+i?llRE(+jHqeDmFH%_RPJ`J_3pwv5Y9lHM1ZF53{Hf{n3DZgeFwm3sz9dSHJ&sn zA8TTpH2?v>i-5R|N4bbxD*!~@NJPCGL~98lh!AFA0ATU41xA$U?=jOd)2EI`VW&^x z9s%vbK)x!fTjAKa}73kQ!T2*!Y^ymUUmF`_+$=I}+gVr}uVwE?E+FcCbE zacth5qZA&~;Et964dlN7jpO>bz7PWqXnO4k1;Bi(h$IACjV zTbfn7xidv60RT2v?M50w8Gr=>l*eL1b^`@E6^!(Mgw4m|%3sYsA;ls{q3Hp9*ff@B zuoj;RP}L(66!3CKiebtE#KM>cP90WrjT8GKUYJZ9hze4L_wj%B!7xEYX&~1D>|VXY g5DANz;-L4?5(KE)w_-4X7$J!K4F&`FpQ#@J0P9{Er~m)} literal 0 HcmV?d00001 diff --git a/assets/p/spoiler_dark.jxl b/assets/p/spoiler_dark.jxl new file mode 100644 index 0000000000000000000000000000000000000000..1f5867c8c4e00d3478ca75eafbfc23fb48abd9d3 GIT binary patch literal 3138 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 literal 0 HcmV?d00001 diff --git a/assets/p/spoiler_dark.webp b/assets/p/spoiler_dark.webp new file mode 100644 index 0000000000000000000000000000000000000000..b541b7123858f7822126b8f22b72c0a8ebb61ee4 GIT binary patch literal 3924 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 I wish it were possible to look up any medical issue without being exposed to the most graphic photographs ever taken by man or beast. +=> https://akko.wtf/objects/8fd2f79b-9529-441d-8b6f-079ac4a8f599 — Velveteen, Post on akko.wtf + +While browsing the WICG discussion forms, I stumbled upon a proposal for a standardized element in HTML5: +=> https://discourse.wicg.io/t/standardized-spoiler-tag/5814 Standardized spoiler tag + +I made two comments, and stopped myself before writing a third; this called for a blog post. I think HTML should have a spoiler element. + +## Prior art + +Spoilers are already implemented in several places around the Web, but without a standard set of semantics. + +A useful reference is the markup used in the Matrix protocol. Matrix messages may include a standardized subset of HTML, with some additional features provided by HTML attributes. + +The following syntax creates a spoiler in Matrix: + +``` +hidden content +``` + +Here's a screenshot of what a spoiler element looks like in Element, a Matrix client: +=> gemini://seirdy.one/misc/spoiler.png Screenshot of small faded text reading “optional placeholder text” followed by blurred regular text + +Note: this format is called "org.matrix.custom.html". The Matrix Specification Client-Server API, section 11.2.2.6: "Spoiler messages" specifies the spoiler syntax, semantics, and recommended client behavior. +=> https://spec.matrix.org/v1.8/client-server-api/#spoiler-messages Matrix Client-Server API + +The visual result is typically the placeholder text followed by blurred or blacked-out hidden contents, revealed upon user interaction. Children aren't limited to text; this is a common approach to hiding images. + +Here's an image marked sensitive on Firefish (a Fediverse server) shows a blurred placeholder. +=> gemini://seirdy.one/misc/spoiler-fedi.png screenshot: a post by @freeplay@kitsunes.club shows a blurred image under placeholder text reading "NSFW: Click to show". +=> https://pleroma.envs.net/notice/AZNKmYaNv9UOa9e3wO Original thread + +Some clients support Markdown flavors with the following syntax: + +``` +||optional placeholder text|Fluffychat and Discord hide this.|| +>!Reddit hides this.< +``` + +## Comparison with "details" + +On the WICG forum, one user asked about the differences between "spoiler" and "details". The two elements have very much in common; I'd even go so far as to say that "spoiler" elements could also make use of "summary" children for placeholder text. That being said, the semantics and behavior have important differences. + +Note: "summary" was originally specified as a block-level button, not an inline element. This may require changes to the definition of "summary". I don’t believe that the changes should significantly impact conformant pages, but non-conforming pages that incorrectly use "summary" elements without the required "details" parent may be impacted. Perhaps we really do need a new element for spoiler summaries. + +### Semantics + +While a disclosure widget exists to allow toggling information, a spoiler exists to make information inaccessible without consent: invisible, inaudible, unreadable. A disclosure widget helps divert user’s attention away from hidden text; a spoiler protects users from hidden text. + +Following the examples in the “Prior Art” section, "summary" can be an optional first-child of a "spoiler" while remaining a mandatory first-child of "details". + +### Behavior + +Semantic differences should impact how activation works. Spoiler text should not be revealed until the placeholder text has been read. Unread spoiler text may include off-screen placeholders, placeholders that a screen/braille-reader hasn’t reached yet, and perhaps even spoiler text whose placeholders haven’t reached a magnifier’s viewport. Spoilers shouldn’t be revealed by accident. + +For visual users, placeholder text should be in the viewport for a minimum duration. A user-agent should expose a setting to increase this duration. Ideally, it could allow users to supply keywords for sensitive or non-sensitive topics for auto-hiding or auto-revealing spoilers. Spoiler text matching sensitive topics should require some form of additional confirmation. + +Functionality such as find-in-page may indicate a match obscured by a "spoiler", but shouldn’t activate the "spoiler". It may expand a disclosure widget. + +### Presentation + +"details" is a block element; "spoiler" can be either an inline or block element. A few words within a paragraph can be hidden behind a "spoiler". "details" tends to work more effectively on larger sections of content. A "summary" should obscure content, but not the size of said content; it obscures content without removing it. + +For printouts, behavior should mirror "details". Print hidden if it's hidden in the browser, and print revealed if it's been revealed in the browser. + +## Use-cases + +Several overlapping use-cases exist: + +* “Spoilers” for plot-twists. These are common on wikis such as TV Tropes. +* A warning for imagery that may be inappropriate in a public setting (you might want to hide erotic or gory content when you’re on the train). +* Content-warnings for potentially triggering topics. +* Hiding a joke’s punchline, or the answer to a riddle. +* Hiding user-generated content that’s been flagged by other users, awaiting moderation + +I could go on. This is an immensely useful feature that HTML just doesn't address right now. + +## Potential attributes + +Some semantic configurability should be possible with HTML attributes: + + +* "preview": A boolean attribute for "spoiler". Hidden content could have a preview available or have no preview at all. A "true" value could show a partial preview of a sensitive image (e.g. a version with a reduced resolution and saturation, passed through a heavy blur filter); a "false" value could simply hide the content behind censor bars or filler content. +* "preview-alt": An attribute for any element that supports the "alt" attribute. This can supply alt-text for hidden versions of media without overly descriptive language, analogous to blurred or pixelated previews. "Black-and-white photo of a large wound" could be an image's "preview-alt" text, while the actual alt text could describe the image more...vividly.[note 1] +* "loading": "img", "iframe", and other elements already support "loading="lazy"" to enable native lazy loading. A thread on the WICG forums proposes allowing the attribute on container elements to apply to their children, singling out "details" in particular. As "spoiler" hides content, hidden children may have loading deferred until their parent "spoiler" element activates. +=> https://discourse.wicg.io/t/add-loading-lazy-attribute-to-details-element/6060 The referenced WICG thread about lazy loading + +## Considerations + +### Considerations for user-agents + +* Many browser developer tools allow viewing a page's media; for example, the Network Inspector allows rendering the body of an individual request. A request for an image inside a "spoiler" should not unnecessarily bypass this. Browsers with such features shouldn't ship "spoiler" support until a developer-tools toggle for "show spoiler contents" is ready. Should this also apply to spoiler text? +* Users who frequently visit a website may wish for a site-specific setting to auto-show sensitive media. This is a common setting on social media sites. +* A simple click-to-toggle would interfere with selection, as repeated clicking is a common way to select text. We should come up with an alternative. + +### Considerations for authors + +* In some situations, could alt-text be more sensitive than visual media? If so, perhaps "preview-alt" could apply even without a parent "spoiler" element. +* Good preview-alt-text is descriptive enough to inform the decision to toggle media, but not so descriptive that it needs a spoiler of its own. Reaching that balance is extremely difficult. +* This might be a situation in which SEO-style keyword-stuffing might actually have real merit, to accurately trigger users' own keyword filters. +* Authors may wish to provide a JavaScript polyfill for clients that lack support, and perhaps preface their content or links with a "noscript" warning for clients lacking support for both "spoiler" and scripting. +* How should authors describe severity levels? An image containing blood could depict a minor scrape or severe medical gore. We'll need guidelines on how to do this, just as we have guidelines on alt-text. + +### Privacy considerations + +* User keyword filters may present a fingerprinting vector. Anonymity-focused browsers like the Tor Browser probably shouldn't expose this functionality. Perhaps spoilers combined with lazy-loading should be disqualified from auto-revealing. +* A user who consistently declines to reveal spoilers with certain placeholder text may be fingerprinted accordingly. The Tor Browser's "safest" mode disables lazy loading and JavaScript, which should close this fingerprinting vector. + +## Further work + +We may need to create additional corresponding ARIA roles for spoilers. I can't really on an ideal one. + +We may also need to define a vocabulary for well-known spoilers, and encourage authors to use that vocabulary when relevant. This could improve how well auto-revealing spoilers works. Of course, I'm not proposing that any content matching that vocabulary should receive a spoiler; I'm only proposing to choose that vocabulary when writing spoiler-text, if it's relevant. I don't think we should be prescriptive about what to use spoilers on across the entire Web. + +There should be a way to spoiler a whole page, or a whole website, if the primary focus of the page/website is a sensitive topic. This is common on sites devoted to erotic or age-gated content. + +Other areas may benefit from standardized spoiler-like semantics. Someday, chapter indicators in media containers could come with Sponsorblock-inspired vocabulary; some chapters could be marked "sensitive" and auto-pause while displaying a reason. If other spoiler-like semantics exist, we should create mappings between proposed HTML semantics and existing semantics. Perhaps such an exercise would change how we develop HTML semantics for spoilers. + +## Snarky thoughts: conflicts of interests + +Ad companies probably won’t want to hide ads containing sexual/erotic, anxiety-inducing, or shock content behind spoilers; they profit FROM what spoilers protect against. Sites with such ads probably won’t benefit from hiding such content behind spoilers if ads are exempt. + +A good solution would be for ads to identify themselves as such along with the psychological weaknesses they prey on (porn addictions, anxiety, eating disorders, gambling addictions, etc.) so that user-agents could selectively or globally block them. For some reason, I don’t think adtech companies would like this very much. More research is required to find a form of basic compassion that allows dominant advertising business models to exist. + +##acknowledgements + +Thanks to Athena Martin for providing feedback on an initial draft. She raised concerns about user-agents without support, the possibility of specifying machine-readable severity levels, and printouts. + +Thanks to ~keith for bringing up good points concerning prescriptivity of spoiler norms. + +--- + + +[note 1]: I came up with the idea of this attribute when I was browsing some Wikipedia articles on medical topics and ended up on the article for "maggot therapy". I had uBlock Origin configured to make large media click-to-load, and the figure captions told me which ones would be safe to load when others were in the room. However, figure captions aren't a replacement for alt-text: +=> gemini://seirdy.one/posts/2020/11/23/website-best-practices/ See the "putting images in context" section of this post + diff --git a/content/posts/spoiler-element.md b/content/posts/spoiler-element.md new file mode 100644 index 0000000..407709e --- /dev/null +++ b/content/posts/spoiler-element.md @@ -0,0 +1,216 @@ +--- +title: "Proposal: an HTML element for spoilers" +description: "The case for including dedicated elements for spoiler tags in HTML. An informal proposal describing use-cases, syntax, semantics, and recommended user-agent behavior." +date: 2023-11-12T13:48:00-08:00 +outputs: + - html + - gemtext +--- +

+ +## Introduction + +{{}} + +
+ +I wish it were possible to look up any medical issue without being exposed to the most graphic photographs ever taken by man or beast. + +
+{{< quotecaption partOfType="SocialMediaPosting">}} +{{
}} + +While browsing the WICG discussion forms, I stumbled upon [a proposal for a standardized `` element in HTML5](https://discourse.wicg.io/t/standardized-spoiler-tag/5814). I made two comments, and stopped myself before writing a third; this called for a blog post. _I think HTML should have a spoiler element._ + +
+ +{{}} + +
+ +## Prior art {#prior-art} + +Spoilers are already implemented in several places around the Web, but without a standard set of semantics. + +A useful reference is the markup used in the Matrix protocol. Matrix messages may include a standardized subset of HTML, with some additional features provided by HTML attributes.[^1] + +{{}}{{}} + +The following syntax creates a spoiler in Matrix: + +{{}} + +```figure +hidden content +``` + +{{}} + +{{}} + +
+ +A screenshot of how Element, a Matrix client, renders a spoiler element: + +
+{{}} + +{{
}} + +The visual result is typically the placeholder text followed by blurred or blacked-out hidden contents, revealed upon user interaction. Children aren't limited to text; this is a common approach to hiding images. + +{{}} + +
+ +An image marked sensitive on Firefish (a Fediverse server) shows a blurred placeholder. [Original thread](https://pleroma.envs.net/notice/AZNKmYaNv9UOa9e3wO). + +
+{{}} + +{{
}} + +{{}}{{}} + +Some clients support Markdown flavors with special syntax for spoilers: + +{{}} + +```figure +||optional placeholder text|Fluffychat and Discord hide this.|| +>!Reddit hides this.< +``` + +{{}} + +
+
+ +## Comparison with `details` + +On the WICG forum, one user asked about the differences between `spoiler` and `details`. The two elements have very much in common; I'd even go so far as to say that `spoiler` elements could also make use of `summary` children for placeholder text.[^2] That being said, the semantics and behavior have important differences. + +### Semantics + +While a disclosure widget exists to allow toggling information, a spoiler exists to make information _inaccessible without consent:_ invisible, inaudible, unreadable. A disclosure widget helps divert user's attention away from hidden text; a spoiler protects users from hidden text. + +Following the examples in [the "Prior Art" section](#prior-art), `summary` can be an _optional_ first-child of a `spoiler` while remaining a mandatory first-child of `details`. + +### Behavior + +Semantic differences should impact how activation works. Spoiler text should not be revealed until the placeholder text has been read. Unread spoiler text may include off-screen placeholders, placeholders that a screen/braille-reader hasn't reached yet, and perhaps even spoiler text whose placeholders haven't reached a magnifier's viewport. Spoilers shouldn't be revealed by accident. + +For visual users, placeholder text should be in the viewport for a minimum duration. A user-agent should expose a setting to increase this duration. Ideally, it could allow users to supply keywords for sensitive or non-sensitive topics for auto-hiding or auto-revealing spoilers. Spoiler text matching sensitive topics should require some form of additional confirmation. + +Functionality such as find-in-page may indicate a match obscured by a spoiler, but shouldn't activate the spoiler. It may expand a disclosure widget. + +### Presentation + +`details` is a block element; `spoiler` can be either an inline or block element. A few words within a paragraph can be hidden behind a spoiler. `details` tends to work more effectively on larger sections of content. A `summary` should obscure content, but not the size of said content; it _obscures_ content without _removing_ it. + +For printouts, behavior should mirror `details`. Print hidden if it's hidden in the browser, and print revealed if it's been revealed in the browser. + +
+
+ +## Use-cases + +Several overlapping use-cases exist: + +- "Spoilers" for plot-twists. These are common on wikis such as TV Tropes. +- A warning for imagery that may be inappropriate in a public setting (you might want to hide erotic or gory content when you're on the train). +- Content-warnings for potentially triggering topics. +- Hiding a joke's punchline, or the answer to a riddle. +- Hiding user-generated content that's been flagged by other users, awaiting moderation. + +I could go on. This is an immensely useful feature that HTML doesn't adequately address right now. + +
+
+ +## Potential attributes + +Some semantic configurability should be possible with HTML attributes: + + +`preview` +: A boolean attribute for `spoiler`. Hidden content could have a preview available or have no preview at all. A "true" value could show a partial preview of a sensitive image (e.g. a version with a reduced resolution and saturation, passed through a heavy blur filter); a "false" value could simply hide the content behind censor bars or filler content. + +`preview-alt` +: An attribute for any element that supports the `alt` attribute. This can supply alt-text for hidden versions of media without overly descriptive language, analogous to blurred or pixelated previews. "Black-and-white photo of a large wound" could be an image's "preview-alt" text, while the actual alt text could describe the image more..._vividly_.[^3] + +`loading` +: `img`, `iframe`, and other elements already support `loading="lazy"` to enable native lazy loading. [A thread on the WICG forums](https://discourse.wicg.io/t/add-loading-lazy-attribute-to-details-element/6060) proposes allowing the attribute on container elements to apply to their children, singling out `details` in particular. As `spoiler` hides content, hidden children may have loading deferred until their parent `spoiler` element activates. + +
+
+ +## Considerations + +### Considerations for user-agents + +- Many browser developer tools allow viewing a page's media; for example, the Network Inspector allows rendering the body of an individual request. A request for an image inside a `spoiler` should not unnecessarily bypass this. Browsers with such features shouldn't ship `spoiler` support until a developer-tools toggle for "show spoiler contents" is ready. Should this also apply to spoiler text? + +- Users who frequently visit a website may wish for a site-specific setting to auto-show sensitive media. This is a common setting on social media sites. + +- A simple click-to-toggle would interfere with selection, as repeated clicking is a common way to select text. We should come up with an alternative. + +### Considerations for authors + +- In some situations, could alt-text be _more_ sensitive than visual media? If so, perhaps `preview-alt` could apply even without a parent `spoiler` element. + +- Good preview-alt-text is descriptive enough to inform the decision to toggle media, but not so descriptive that it needs a spoiler of its own. Reaching that balance is extremely difficult. + +- This might be a situation in which SEO-style keyword-stuffing might actually have real merit, to accurately trigger users' own keyword filters. + +- Authors may wish to provide a JavaScript polyfill for clients that lack support, and perhaps preface their content or links with a `noscript` warning for clients lacking support for both `spoiler` and scripting. + +- How should authors describe severity levels? An image containing blood could depict a minor scrape or severe medical gore. We'll need guidelines on how to do this, just as we have guidelines on alt-text. + +### Privacy considerations + +- User keyword filters may present a fingerprinting vector. Anonymity-focused browsers like the Tor Browser probably shouldn't expose this functionality. Perhaps spoilers combined with lazy-loading should be disqualified from auto-revealing. + +- A user who consistently declines to reveal spoilers with certain keywords in the placeholder text may be fingerprinted accordingly. The Tor Browser's "safest" mode disables lazy loading and JavaScript, which should close this fingerprinting vector. + +### Further work + +We may need to create additional corresponding ARIA roles for spoilers. I can't really on an ideal one. + +We may also need to define a vocabulary for well-known spoilers, and encourage authors to use that vocabulary when relevant. This could improve how well auto-revealing spoilers works. Of course, I'm not proposing that any content matching that vocabulary should receive a spoiler; I'm only proposing to choose that vocabulary when writing spoiler-text, if it's relevant. I don't think we should be prescriptive about what to use spoilers on across the entire Web. + +There should be a way to spoiler a whole page, or a whole website, if the primary focus of the page/website is a sensitive topic. This is common on sites devoted to erotic or age-gated content. + +Other areas may benefit from standardized spoiler-like semantics. Someday, chapter indicators in media containers could come with Sponsorblock-inspired vocabulary; some chapters could be marked "sensitive" and auto-pause while displaying a reason. If other spoiler-like semantics exist, we should create mappings between proposed HTML semantics and existing semantics. Perhaps such an exercise would change how we develop HTML semantics for spoilers. + +
+
+ +## Snarky thoughts: conflicts of interests + +Ad companies probably won't want to hide ads containing sexual/erotic, anxiety-inducing, or shock content behind spoilers; they profit _from_ what spoilers protect against. Sites with such ads probably won't benefit from hiding such content behind spoilers if ads are exempt. + +A good solution would be for ads to identify themselves as such along with the psychological weaknesses they prey on (porn addictions, anxiety, eating disorders, gambling addictions, etc.) so that user-agents could selectively or globally block them. For some reason, I don't think adtech companies would like this very much. More research is required to find a form of basic compassion that allows dominant advertising business models to exist. + +
+ +
+ +## Ack­nowledge­ments {#acknowledgements} + +Thanks to {{}} for providing feedback on an initial draft. She raised concerns about user-agents without support, the possibility of specifying machine-readable severity levels, and printouts. + +Thanks to {{}} for bringing up good points concerning prescriptivity of spoiler norms. + +
+ + +[^1]: This format is called `org.matrix.custom.html`. The {{}}Matrix Specification Client-Server API, section 11.2.2.6:
{{}} specifies the spoiler syntax, semantics, and recommended client behavior. + +[^2]: Note that `summary` was originally specified as a block-level button, not an inline element. This may require changes to the definition of `summary`. I don't believe that the changes should significantly impact conformant pages, but non-conforming pages that incorrectly use `summary` elements without the required `details` parent may be impacted. Perhaps we really do need a new element for spoiler summaries. + +[^3]: I came up with the idea of this attribute when I was browsing some Wikipedia articles on medical topics and ended up on the article for "maggot therapy". I had uBlock Origin configured to make large media click-to-load, and the figure captions told me which ones would be safe to load when others were in the room. However, [figure captions aren't a replacement for alt-text]({{}}). + +