diff --git a/src/sao.less b/src/sao.less
index 721afd6675..322eb24718 100644
--- a/src/sao.less
+++ b/src/sao.less
@@ -34,6 +34,10 @@
width: 2em;
height: 2em;
}
+ & a.column-affix > img {
+ width: 1em;
+ height: 1em;
+ }
}
& .editabletree-char, .editabletree-date, .editabletree-datetime,
.editabletree-integer, .editabletree-float, .editabletree-selection,
diff --git a/src/view.js b/src/view.js
index 3d2745647a..81ac4e9dad 100644
--- a/src/view.js
+++ b/src/view.js
@@ -206,6 +206,11 @@
var prefixes = [], suffixes = [];
// TODO support for url/email/callto/sip
+ if (~['url', 'email', 'callto', 'sip'
+ ].indexOf(attributes.widget)) {
+ column.prefixes.push(new Sao.View.Tree.Affix(
+ attributes, attributes.widget));
+ }
if ('icon' in attributes) {
column.prefixes.push(new Sao.View.Tree.Affix(
attributes));
@@ -895,8 +900,11 @@
get_cell: function() {
var cell;
if (this.protocol) {
- cell = jQuery('');
+ cell = jQuery('', {
+ 'target': '_new'
+ });
cell.append(jQuery('
'));
+ cell.click({'cell': cell}, this.clicked.bind(this));
} else if (this.icon) {
cell = jQuery('
');
} else {
@@ -910,7 +918,29 @@
record.load(this.attributes.name).done(function() {
var value, icon_prm;
var field = record.model.fields[this.attributes.name];
- //TODO set_state
+ var invisible = field.get_state_attrs(record).invisible;
+ if (invisible) {
+ cell.hide();
+ } else {
+ cell.show();
+ }
+ if (this.protocol) {
+ value = field.get(record);
+ if (!jQuery.isEmptyObject(value)) {
+ switch (this.protocol) {
+ case 'email':
+ value = 'mailto:' + value;
+ break;
+ case 'callto':
+ value = 'callto:' + value;
+ break;
+ case 'sip':
+ value = 'sip:' + value;
+ break;
+ }
+ }
+ cell.attr('src', value);
+ }
if (this.icon) {
if (this.icon in record.model.fields) {
var icon_field = record.model.fields[this.icon];
@@ -938,6 +968,10 @@
}
}.bind(this));
return cell;
+ },
+ clicked: function(event) {
+ event.preventDefault(); // prevent edition
+ window.open(event.data.cell.attr('src'), '_blank');
}
});