vivliostyle / vfm

⬇️ Open and extendable Markdown syntax and toolchain.
https://vivliostyle.github.io/vfm/#/vfm
Other
69 stars 12 forks source link

spec: Frontmatter's class property targets body as well as html #119

Closed akabekobeko closed 2 years ago

akabekobeko commented 2 years ago

Goals

---
class: "mypage"
---

to

<html class="mypage">
  <body class="mypage">
  </body>
</html>

Prior Art

None

Discussion

Vivliostyle Slack's #vfm channel.

akabekobeko commented 2 years ago

Frontmatter 刷新 #76 の際にルートへ定義する class<html> のみを対象とし、<body>body 内の class とすることになった。破壊的な変更であるがアルファ版のバージョン間なのでよしとした。

しかし Slack にて互換を維持したいという要望があり、対応もさほど難しくないので改めて body 側へも反映するように検討する。反映のルールについては classhtml の関係を踏襲して以下のようにする予定。

つまりはルートを最優先とする。

MurakamiShinyu commented 2 years ago

HTMLのclass属性はスペースで区切って複数のクラス名を指定できるものなので、yamlのルート、html、bodyにそれぞれclassの指定があるとき次のようにHTMLに反映されることを期待します:

---
class: "mypage"
html:
  class: "myroot"
body:
  class: "mybody"
---

to

<html class="mypage myroot">
  <body class="mypage mybody">
  </body>
</html>
akabekobeko commented 2 years ago

@MurakamiShinyu

既に実装済みの html もそのようになっていません。よって新機能ですね。この案へ対応する場合、ルートの classhtmlbody のものが同内容だった場合は

---
class: "mypage"
html:
  class: "mypage"
body:
  class: "mypage"
---

重複を判定しますか?

<html class="mypage">
  <body class="mypage">
  </body>
</html>

それともユーザーの自己責任ということで許容しますか?

<html class="mypage mypage">
  <body class="mypage mypage">
  </body>
</html>
MurakamiShinyu commented 2 years ago

HTMLで class="mypage mypage" のようなclass属性の指定があっても class="mypage" と指定されているのと同じく、CSSのセレクタ .mypage で選択されるので、特に問題は起きません。 HTMLのvalidator https://validator.w3.org/class="mypage mypage" のあるHTMLをチェックしても、特に警告も出ません。 重複除去の処理をしてもしなくてもどちらでもよいと思います。

akabekobeko commented 2 years ago

私としては

ことから判定はせず単純に結合でよいと考えています。なお判定するとしてもスペース区切りで split して配列化してから重複除去するだけですので対応は容易です。

akabekobeko commented 2 years ago

@MurakamiShinyu 重複しても問題ないとのことですので、単純なスペース区切りの結合にします。

akabekobeko commented 2 years ago

本件は #120 により対応されたので close する。v1.0.0 に反映予定。