类似于deliverance的实现,仅适用于html输出(没有主题文件)
项目描述
简介
Bumblebee是一个类似于deliverance的html转换框架实现,仅适用于html文档输出。
它不使用xslt,所以不如Diazo快;然而,它实现了在html输出上移动元素这一非常简单的用例。
为什么
因为我几乎不需要完整的deliverance方法来完成我想做的事情。事实上,如果我只是想在一个页面上移动一个元素,通常是一件麻烦事。
如何使用
使用非常xml语法配置您的转换。
示例
HTML
<html>
<head></head>
<body>
<div id="#header"></div>
<div id="content"></div>
<div id="footer"></div>
</body>
</html>
规则XML
<xml>
<block if-content="#content">
<after src="#header" dst="#footer" />
</block>
</xml>
运行它通过
from bumblebee import transform from repoze.xmliter.utils import getHTMLSerializer from bumblebee.xml import convertRules html = getHTMLSerializer(output) rules = convertRules(rules_xml) result = transform(html, rules)
选择器
对于选择元素的xml配置,您可以使用CSS选择器(默认)或XPath。
要使用XPath,只需在节点名后附加‘-path’
<after src-xpath="/html/body/div[0]" src-xpath="/html/body/div[2]" />
任意HTML
使用此方法将HTML注入到页面中
<after src-html="" dst="#foo">
<div id="foobar">
<h1>hello, world</h1>
</div>
</after>
规则
之前
将一个元素移动到另一个元素之前
<before src="#foo" dst="#bar" />
将“#foo”移动到“#bar”之前
之后
将一个元素移动到另一个元素之后
<after src="#foo" "#bar" />
将“#foo”移动到“#bar”之后
删除
从DOM中删除一个元素
<drop src="#foo" />
替换
用另一个元素替换一个元素
<replace src="#foo" dst="#bar" />
用“#src”替换“#dst”
类
为元素添加或删除类
<class src="#foo" add="three four" remove="one two" />
从“#foo”中删除类“one”和“two”,并添加类“three”和“four”。
标签
更改标签
<tag src="#foo" tag="p" />
分组
用条件将规则分组在一起
<group if-content="#foo">
<drop src="#bar" />
</group>
如果“#foo”在文档中,则执行一些规则。
条件
if-content
如果选择器在文档中找到,则执行操作
<after src="#foo" dst="#bar" if-content="#foo" />
非条件
任何条件都可以被否定以产生相反的效果
<drop src="#foo" if-not-content="#bar" />
扩展
创建规则
from bumblebee.rules import BaseDouble
class Append(BaseDouble):
def __call__(self, root):
src, dst, skip = self.process_nodes(root)
if skip:
return None
dst = dst[0]
for el in dst:
dst.append(el)
return src
from bumblebee.xml import addTag
addTag('append', Append)
要使用此规则,您会
<append src="#foo" dst="#bar" />
创建条件
from bumblebee.conditions import BaseIf
class IfPath(BaseIf):
def __init__(self, path, extras={}):
super(IfPath, self).__init__(extras)
self.path = path
def __call__(self, root):
req = self.extras['request']
path = req['PATH_INFO']
if self.path.startswith('/'):
return path.startswith(self.path)
else:
return self.path in path
from bumblebee.xml import addCondition
addCondition('path', IfPath)
要使用此条件,您会
<drop src="#foo" if-path="/foo/bar" />
或
<drop src="#foo" if-not-path="/foo/bar" />
变更日志
1.0a2 ~ (2011-09-22)
添加对任意HTML的支持
更好地支持添加新的选择器、条件、规则
更好的解析
更好地处理额外的参数,以便规则可以更容易地缓存
项目详情
关闭
Bumblebee-1.0a2.zip 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 34efd460ceee668e629e958cffe82610a81c14fe919a2d6533ad9dc4e60278a4 |
|
| MD5 | a3d7de6d1e29f2d18d6bd5d43e3d48fa |
|
| BLAKE2b-256 | def732f866780a9b41683d90f427b27dba97aeb9ba04c3ff3d0e93cc26653ded |