Qweb: added trim support

bzr revid: fme@openerp.com-20110307135515-0vkl56xc7pxtlive
This commit is contained in:
Fabien Meghazi
2011-03-07 14:55:15 +01:00
parent c19798a74e
commit a8394573ca
3 changed files with 37 additions and 27 deletions
+5 -1
View File
@@ -105,8 +105,12 @@ body {
min-height: 40px;
min-width: 75px;
padding: 2px 4px;
margin: 0;
}
.openerp .filter_label_group button:first-child {
.openerp .filter_label_group {
padding-right: 0.4em;
}
.openerp .filter_label_group button:first-child {
border-left: 1px solid #666;
-webkit-border-top-left-radius: 7px;
-webkit-border-bottom-left-radius: 7px;
+1 -20
View File
@@ -118,29 +118,11 @@
<input type="button" value="Clear"/>
</div>
</t>
<t t-name="SearchView.node">
<t t-if="node.tag"> <!-- Should remove this condition once the xml2json removes whitespace -->
<!--
tag: <t t-esc="node.tag"/>
<t t-esc="node['@string']"/>
<t t-esc="node['@string']"/>
<br/>
<t t-esc="node['@name']"/>
-->
<t t-name="SearchView.node" t-trim="inner">
<t t-if="node.tag == 'filter'">
<t t-if="previous_node_type != 'filter'">
&lt;td nowrap="true" valign="bottom" class="filter_label_group"&gt;
</t>
<!-- TODO: buttons are inline elements. should not have whitespaces between them.
Either implement trim in qweb or use css3 white-space-collapsing (not stable now)
Yes implement t-trim it was noted in qweb.js as a TODO:
trim 'left' 'right' 'both' is it needed ? inner=render_trim(l_inner.join(), t_att)
Also add a TODO about t-code=""
-->
<button type="button" t-att-title="node.attrs.help" t-att-class="node.attrs.string ? 'filter_label' : 'filter_icon'">
<img t-if="node.attrs.icon" t-att-src="'/base/static/openerp/img/icons/' + node.attrs.icon + '.png'" width="16" height="16"/>
<br t-if="node.attrs.icon and node.attrs.string"/>
@@ -181,7 +163,6 @@
</t>
</t>
</t>
</t>
<t t-name="Action">
<!-- TODO prefix id with the element_id of the controller t-attf-id="#{prefix}_localid" -->
<div style="text-align:right;">
+31 -6
View File
@@ -81,16 +81,28 @@ var QWeb={
eval_bool:function(e,v){
return this.eval_object(e,v)?true:false;
},
trim : function(v, mode) {
if (!v || !mode) return v;
if (mode == 'both') {
return v.replace(/^\s*|\s*$/g, "");
} else if (mode == "left") {
return v.replace(/^\s*/, "");
} else if (mode == "right") {
return v.replace(/\s*$/, "");
} else {
return v;
}
},
escape_text:function(s){
return s.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")
},
escape_att:function(s){
return s.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")
},
render_node:function(e,v){
render_node : function(e, v, inner_trim) {
var r=""
if(e.nodeType==3) {
r=e.data;
r = inner_trim ? this.trim(e.data, inner_trim) : e.data;
} else if(e.nodeType==1) {
var g_att={};
var t_att={};
@@ -115,6 +127,9 @@ var QWeb={
g_att[an]=av
}
}
if (inner_trim && !t_att["trim"]) {
t_att["trim"] = "inner " + inner_trim;
}
if (t_render) {
r = this[t_render](e, t_att, g_att, v)
} else {
@@ -124,9 +139,20 @@ var QWeb={
return r;
},
render_element:function(e,t_att,g_att,v){
var inner="",ec=e.childNodes;
var inner = "", ec = e.childNodes, trim = t_att["trim"], inner_trim;
if (trim) {
if (trim.match(/(^|\W)(inner)($|\W)/)) {
inner_trim = true;
trim = "both";
}
var tm = trim.match(/(^|\W)(both|left|right)($|\W)/);
if (tm) trim = tm[2];
}
for (var i=0; i<ec.length; i++) {
inner+=this.render_node(ec[i],v)
inner += inner_trim ? this.trim(this.render_node(ec[i], v, inner_trim ? trim : null), trim) : this.render_node(ec[i], v, inner_trim ? trim : null);
}
if (trim && !inner_trim) {
inner = this.trim(inner, trim);
}
if(e.tagName==this.prefix) {
return inner;
@@ -136,8 +162,7 @@ var QWeb={
av=g_att[an]
att+=" "+an+'="'+this.escape_att(av)+'"'
}
r=inner.length ? "<"+e.tagName+att+">"+inner+"</"+e.tagName+">" : "<"+e.tagName+att+"/>"
return r
return inner.length ? "<" + e.tagName + att + ">" + inner + "</" + e.tagName + ">" : "<" + e.tagName + att + "/>";
}
},
render_att_att:function(e,t_att,g_att,v,ext,av){