equal
deleted
inserted
replaced
9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS |
9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS |
10 # FOR A PARTICULAR PURPOSE. |
10 # FOR A PARTICULAR PURPOSE. |
11 # |
11 # |
12 |
12 |
13 __docformat__ = 'restructuredtext' |
13 __docformat__ = 'restructuredtext' |
|
14 |
|
15 from html import escape |
14 |
16 |
15 from pyramid.interfaces import IRequest |
17 from pyramid.interfaces import IRequest |
16 from zope.interface import Interface, implementer |
18 from zope.interface import Interface, implementer |
17 |
19 |
18 from pyams_i18n.interfaces import II18n |
20 from pyams_i18n.interfaces import II18n |
45 |
47 |
46 # |
48 # |
47 # Custom metas headers |
49 # Custom metas headers |
48 # |
50 # |
49 |
51 |
|
52 def escape_value(value): |
|
53 return escape(value) if isinstance(value, str) else value |
|
54 |
|
55 |
50 @implementer(IMetaHeader) |
56 @implementer(IMetaHeader) |
51 class HTMLTagMeta(object): |
57 class HTMLTagMeta(object): |
52 """HTML tag meta header""" |
58 """HTML tag meta header""" |
53 |
59 |
54 def __init__(self, tag, content, **attrs): |
60 def __init__(self, tag, content, **attrs): |
55 self.tag = tag |
61 self.tag = tag |
56 self.content = content |
62 self.content = escape_value(content) |
57 self.attrs = attrs |
63 self.attrs = attrs |
58 |
64 |
59 def render(self): |
65 def render(self): |
60 return '''<{tag} {attrs}>{content}</{tag}>'''.format(tag=self.tag, |
66 return '''<{tag} {attrs}>{content}</{tag}>'''.format(tag=self.tag, |
61 attrs=' '.join(('{0}="{1}"'.format(*value) for value in |
67 attrs=' '.join(('{0}="{1}"'.format(*value) for value in |
67 class HTTPEquivMeta(object): |
73 class HTTPEquivMeta(object): |
68 """HTTP-Equiv meta header""" |
74 """HTTP-Equiv meta header""" |
69 |
75 |
70 def __init__(self, http_equiv, value): |
76 def __init__(self, http_equiv, value): |
71 self.http_equiv = http_equiv |
77 self.http_equiv = http_equiv |
72 self.value = value |
78 self.value = escape_value(value) |
73 |
79 |
74 def render(self): |
80 def render(self): |
75 return '''<meta http-equiv="{http_equiv}" content="{value}" />'''.format(http_equiv=self.http_equiv, |
81 return '''<meta http-equiv="{http_equiv}" content="{value}" />'''.format(http_equiv=self.http_equiv, |
76 value=self.value) |
82 value=self.value) |
77 |
83 |
80 class ValueMeta(object): |
86 class ValueMeta(object): |
81 """Basic value meta header""" |
87 """Basic value meta header""" |
82 |
88 |
83 def __init__(self, name, value): |
89 def __init__(self, name, value): |
84 self.name = name |
90 self.name = name |
85 self.value = value |
91 self.value = escape_value(value) |
86 |
92 |
87 def render(self): |
93 def render(self): |
88 return '''<meta {name}="{value}" />'''.format(name=self.name, |
94 return '''<meta {name}="{value}" />'''.format(name=self.name, |
89 value=self.value) |
95 value=self.value) |
90 |
96 |
93 class ContentMeta(object): |
99 class ContentMeta(object): |
94 """Content meta header""" |
100 """Content meta header""" |
95 |
101 |
96 def __init__(self, name, value): |
102 def __init__(self, name, value): |
97 self.name = name |
103 self.name = name |
98 self.value = value |
104 self.value = escape_value(value) |
99 |
105 |
100 def render(self): |
106 def render(self): |
101 return '''<meta name="{name}" content="{value}" />'''.format(name=self.name, |
107 return '''<meta name="{name}" content="{value}" />'''.format(name=self.name, |
102 value=self.value) |
108 value=self.value) |
103 |
109 |
106 class PropertyMeta(object): |
112 class PropertyMeta(object): |
107 """Property meta header""" |
113 """Property meta header""" |
108 |
114 |
109 def __init__(self, property, value): |
115 def __init__(self, property, value): |
110 self.property = property |
116 self.property = property |
111 self.value = value |
117 self.value = escape_value(value) |
112 |
118 |
113 def render(self): |
119 def render(self): |
114 return '''<meta property="{property}" content="{value}" />'''.format(property=self.property, |
120 return '''<meta property="{property}" content="{value}" />'''.format(property=self.property, |
115 value=self.value) |
121 value=self.value) |
116 |
122 |
119 class SchemaMeta(object): |
125 class SchemaMeta(object): |
120 """Schema.org property meta header""" |
126 """Schema.org property meta header""" |
121 |
127 |
122 def __init__(self, name, value): |
128 def __init__(self, name, value): |
123 self.name = name |
129 self.name = name |
124 self.value = value |
130 self.value = escape_value(value) |
125 |
131 |
126 def render(self): |
132 def render(self): |
127 return '''<meta itemprop="{name}" content="{value}" />'''.format(name=self.name, |
133 return '''<meta itemprop="{name}" content="{value}" />'''.format(name=self.name, |
128 value=self.value) |
134 value=self.value) |
129 |
135 |
133 """Link meta header""" |
139 """Link meta header""" |
134 |
140 |
135 def __init__(self, rel, type, href): |
141 def __init__(self, rel, type, href): |
136 self.rel = rel |
142 self.rel = rel |
137 self.type = type |
143 self.type = type |
138 self.href = href |
144 self.href = escape_value(href) |
139 |
145 |
140 def render(self): |
146 def render(self): |
141 return '''<link rel="{rel}" type="{type}" href="{href}" />'''.format(rel=self.rel, |
147 return '''<link rel="{rel}" type="{type}" href="{href}" />'''.format(rel=self.rel, |
142 type=self.type, |
148 type=self.type, |
143 href=self.href) |
149 href=self.href) |