2017-01-26 3 views
0

私は、Twitterのブートストラップでポップオーバーとして使用されるボタンを持っています。スカートタグの属性にhtmlコードを挿入するには?

button(data.content := h1("an example of html").render, data.toggle="popover")("click here") 

私はポップオーバーの内容に一部のHTMLコードを持つようにしたいので、私はしかし、これが原因でXSSを防ぐscalatagsの、アウトプレーンHTMLコードを印刷し、data.toggle atributeにHTMLを渡す必要があります。どのように私はこれを防ぐことができます/どのように私はこの効果を得ることができますか?

+0

あなたはhttp://www.lihaoyi.com/scalatags/#Auto-escapingandunsanitizedInputを読んでいますか? – danielnixon

+0

@danielnixon私は、私の質問に述べられているように、それを属性内で使用する方法をまだ見つけていません。 – rusins

答えて

0

これはぎこちないですが、あなたがしたいことをします。より良い方法があるかどうかはわかりません。

import scalatags.Text.{Attr, TypedTag} 
import scalatags.Text.all._ 
import scalatags.text.Builder 

// Warning: this extends a "more-or-less internal trait" so may stop working after a ScalaTags update. 
final case class RawValueSource(v: String) extends Builder.ValueSource { 
    override def appendAttrValue(strb: StringBuilder): Unit = strb.append(v) 
} 

// We need an AttrValue for tags. This one just renders the tag *without* escaping the result. 
class TagAttrValue extends AttrValue[TypedTag[String]] { 
    override def apply(t: Builder, a: Attr, v: TypedTag[String]): Unit = { 
    t.setAttr(a.name, RawValueSource(v.render)) 
    } 
} 

// We need this implicit in scope so that we can use tags on the rhs of the := operator. 
implicit val tagAttr = new TagAttrValue() 

button(data.content := h1("an example of html"), data.toggle := "popover")("click here") 
関連する問題