summaryrefslogtreecommitdiff
path: root/addons/base_dashboard/static/src
diff options
context:
space:
mode:
authorXavier Morel <xmo@openerp.com>2011-07-07 12:53:23 +0200
committerXavier Morel <xmo@openerp.com>2011-07-07 12:53:23 +0200
commit02b5d5b5bce2450be14f2d5ca3efe62b284c0407 (patch)
treece63781f84a74a0000569e2fc8f55d96b48783d6 /addons/base_dashboard/static/src
parent0d3aa4cada845fc25f0bd69cb0e3dd5379e7a4e5 (diff)
[ADD] get a bunch of widgets to display (though not quite correctly... todo: fix that)
bzr revid: xmo@openerp.com-20110707105323-ztjvlccxfpmgdxoj
Diffstat (limited to 'addons/base_dashboard/static/src')
-rw-r--r--addons/base_dashboard/static/src/js/dashboard.js67
-rw-r--r--addons/base_dashboard/static/src/xml/base_dashboard.xml9
2 files changed, 75 insertions, 1 deletions
diff --git a/addons/base_dashboard/static/src/js/dashboard.js b/addons/base_dashboard/static/src/js/dashboard.js
index b1e925c7b0a..3cdcbb3b218 100644
--- a/addons/base_dashboard/static/src/js/dashboard.js
+++ b/addons/base_dashboard/static/src/js/dashboard.js
@@ -355,5 +355,70 @@ openerp.base_dashboard.ApplicationTiles = openerp.base.View.extend({
.click();});
});
}
-})
+});
+openerp.base.client_actions.add(
+ 'board.home.widgets', 'openerp.base_dashboard.Widgets');
+openerp.base_dashboard.Widgets = openerp.base.View.extend({
+ init: function (parent_or_session, element_id) {
+ this._super(parent_or_session, element_id);
+ this.user_widgets = new openerp.base.DataSetSearch(
+ this.session, 'res.widget.user', null,
+ ['|', ['user_id', '=', false],
+ ['user_id', '=', this.session.uid]]);
+ this.widgets = new openerp.base.DataSetSearch(this.session, 'res.widget');
+ },
+ start: function () {
+ this.user_widgets.read_slice(['widget_id', 'user_id'], null, null,
+ this.on_widgets_list_loaded);
+ },
+ on_widgets_list_loaded: function (user_widgets) {
+ var self = this;
+ var widget_user = {};
+ _(user_widgets).each(function (widget) {
+ widget['widget_id'] = widget['widget_id'][0];
+ widget_user[widget['widget_id']] = {
+ removable: widget['user_id'] !== false,
+ user_widget_id: widget['id']
+ };
+ });
+ this.widgets.read_ids(_(user_widgets).pluck('widget_id'), [], function (widgets) {
+ _(widgets).each(function (widget) {
+ _.extend(widget, widget_user[widget['id']]);
+ });
+ var root = self.$element[0];
+ root.innerHTML = QWeb.render('HomeWidgets', {
+ widgets: widgets
+ });
+
+ self.process_widgets_scripts(0, root.getElementsByTagName('script'));
+ })
+ },
+ process_widgets_scripts: function (index, nodes) {
+ if (nodes.length <= index) {
+ return;
+ }
+ var old_write = window.document.write,
+ self = this,
+ script = nodes[index],
+ deferred = $.Deferred().then(function () {
+ window.document.write = old_write; }),
+ continuation = function () {
+ $.when(self.process_widgets_scripts(index+1, nodes)).then(
+ deferred.resolve());
+ };
+ window.document.write = function (s) {
+ $(script).closest('.oe-dashboard-home-widgets-widget')
+ .children('div')
+ .append(s);
+ };
+
+ if (!script.src) {
+ new Function(script.firstChild.nodeValue)();
+ setTimeout(continuation);
+ } else {
+ $LAB.script(script.src).wait(continuation);
+ }
+ return deferred;
+ }
+});
};
diff --git a/addons/base_dashboard/static/src/xml/base_dashboard.xml b/addons/base_dashboard/static/src/xml/base_dashboard.xml
index 91fa13d763a..bb81aea45bd 100644
--- a/addons/base_dashboard/static/src/xml/base_dashboard.xml
+++ b/addons/base_dashboard/static/src/xml/base_dashboard.xml
@@ -98,4 +98,13 @@
</tr>
</table>
</div>
+<div t-name="HomeWidgets" class="oe-dashboard-home-widgets">
+ <div class="oe-dashboard-home-widgets-widget"
+ t-foreach="widgets" t-as="widget">
+ <h3><t t-esc="widget.title"/></h3>
+ <div>
+ </div>
+ <t t-raw="widget.content"/>
+ </div>
+</div>
</template>