Improve renderer
[tine20] / tine20 / Addressbook / js / AddressRenderer.js
1 /*
2  * Tine 2.0
3  *
4  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
5  * @author      Michael Spahn <m.spahn@metaways.de>
6  * @copyright   Copyright (c) 2017 Metaways Infosystems GmbH (http://www.metaways.de)
7  */
8 Ext.ns('Tine.Addressbook');
9
10 /**
11  * Render given addresss
12  *
13  * You need to pass the record and a config to use this renderer.
14  * The config contains a mapping, which fields from the record should have which place in the template.
15  * Undefined fields won't be rendered, this keeps it well reusable for all address like purposes.
16  *
17  * @namespace   Tine.Addressbook
18  * @author      Michael Spahn <m.spahn@metaways.de>
19  * @singleton
20  */
21 Tine.Addressbook.addressRenderer = function (v, metadata, record, store, a, b, config) {
22     var template = new Ext.XTemplate(
23         '<tpl for="." class="address">' +
24         '<tpl if="street">{street} <br /></tpl>' +
25         '<tpl if="street2">{street2} <br /></tpl>' +
26         '<tpl if="postalcode">{postalcode}</tpl> <tpl if="locality">{locality}</tpl><br />' +
27         '<tpl if="region">{region} <br /></tpl>' +
28         '<tpl if="country">{country}</tpl>' +
29         '</tpl>');
30     template.compile();
31
32     var local = Object.assign({}, config);
33     var keys = Object.keys(local);
34
35     // According to config, resolve the given fields from record
36     keys.forEach(function (key) {
37         local[key] = Tine.Tinebase.EncodingHelper.encode(record.get(local[key]));
38
39         // Country code to country name
40         // @todo: Wouldn't it be cool, if this could be managed by the modelconfig as well?
41         if (key === 'country') {
42             var countryRenderer = Tine.widgets.grid.RendererManager.get("Addressbook", "Addressbook_Model_Contact", "country", "displayPanel");
43             local[key] = countryRenderer(local[key]);
44         }
45     });
46
47     return template.applyTemplate(local);
48 };
49
50 Tine.widgets.grid.RendererManager.register('Addressbook', 'Addressbook_Model_Contact', 'addressblock', Tine.Addressbook.addressRenderer, 'displayPanel');