Rails *修改* PermitScrubber 默认行为的自定义洗涤器
Rails Custom Scrubber which *modifies* PermitScrubber default behavior
如果使用 Rails::Html::PermitScrubber 并且未指定标签或属性的值,则默认使用 Loofah::HTML5::Scrub 中的合理默认值。但是,一旦您设置标签或属性,它就会选择一个完全不同的代码路径来忽略这些默认值。
我想从 Rails::Html::PermitScrubber 提供的默认功能开始(即未指定 tags/attributes 时),只需进行一些小的更改,但要查看 class 实现似乎我需要基本上复制并重新实现一半的 PermitScrubber 方法才能访问该默认功能。 Loofah::HTML5::Scrub 提供的默认值似乎不是任何现有 Loofah::Scrubber class.
的一部分
那么如何在不重新实现一半 class 的情况下对 Rails::Html::PermitScrubber 的默认操作进行 较小的 更改?这当然是一个非常常见的用例!
我猜你可以直接替换class Rails::Html::PermitScrubber
并覆盖 keep_node?
以获得所需的行为(如果存在标签则不更改代码路径)。
原来keep_node?
的代码是
def keep_node?(node)
if @tags
allowed_node?(node)
else
Loofah::HTML5::Scrub.allowed_element?(node.name)
end
end
可能,这就是您要更新的部分。
或者,如果 subclass 不适合您的情况,您可以 monkey-patch 现有的 class。
如果使用 Rails::Html::PermitScrubber 并且未指定标签或属性的值,则默认使用 Loofah::HTML5::Scrub 中的合理默认值。但是,一旦您设置标签或属性,它就会选择一个完全不同的代码路径来忽略这些默认值。
我想从 Rails::Html::PermitScrubber 提供的默认功能开始(即未指定 tags/attributes 时),只需进行一些小的更改,但要查看 class 实现似乎我需要基本上复制并重新实现一半的 PermitScrubber 方法才能访问该默认功能。 Loofah::HTML5::Scrub 提供的默认值似乎不是任何现有 Loofah::Scrubber class.
的一部分那么如何在不重新实现一半 class 的情况下对 Rails::Html::PermitScrubber 的默认操作进行 较小的 更改?这当然是一个非常常见的用例!
我猜你可以直接替换class Rails::Html::PermitScrubber
并覆盖 keep_node?
以获得所需的行为(如果存在标签则不更改代码路径)。
原来keep_node?
的代码是
def keep_node?(node)
if @tags
allowed_node?(node)
else
Loofah::HTML5::Scrub.allowed_element?(node.name)
end
end
可能,这就是您要更新的部分。
或者,如果 subclass 不适合您的情况,您可以 monkey-patch 现有的 class。