Qweb: added trim support
bzr revid: fme@openerp.com-20110307135515-0vkl56xc7pxtlive
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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'">
|
||||
<td nowrap="true" valign="bottom" class="filter_label_group">
|
||||
</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;">
|
||||
|
||||
@@ -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,"&").replace(/</g,"<").replace(/>/g,">")
|
||||
},
|
||||
escape_att:function(s){
|
||||
return s.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")
|
||||
},
|
||||
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){
|
||||
|
||||
Reference in New Issue
Block a user