changeset 87fa740648e9 in sao:6.0
details: https://hg.tryton.org/sao?cmd=changeset&node=87fa740648e9
description:
        Create toolbar synchronously

        The record_message function needs that all the buttons are created when 
it is
        triggered. So we can not delay the creation with an asynchronous call.

        issue10783
        review360151002
        (grafted from a6315854511588fef77cc83c5e37d13b31c55727)
diffstat:

 src/tab.js |  200 ++++++++++++++++++++++++++++++------------------------------
 1 files changed, 99 insertions(+), 101 deletions(-)

diffs (255 lines):

diff -r f5737e258468 -r 87fa740648e9 src/tab.js
--- a/src/tab.js        Sun Oct 03 00:21:06 2021 +0200
+++ b/src/tab.js        Sun Oct 03 00:40:18 2021 +0200
@@ -513,21 +513,20 @@
         create_toolbar: function() {
             var toolbar = Sao.Tab.Form._super.create_toolbar.call(this);
             var screen = this.screen;
-            var prm = screen.model.execute('view_toolbar_get', [],
-                screen.context);
-            prm.done(function(toolbars) {
-                [
+            var toolbars = screen.model.execute(
+                'view_toolbar_get', [], screen.context, false);
+            [
                 ['action', 'tryton-launch',
                     Sao.i18n.gettext('Launch action')],
                 ['relate', 'tryton-link',
-                     Sao.i18n.gettext('Open related records')],
+                    Sao.i18n.gettext('Open related records')],
                 ['print', 'tryton-print',
-                     Sao.i18n.gettext('Print report')]
-                ].forEach(function(menu_action) {
-                    var dropdown = jQuery('<div/>', {
-                        'class': 'btn-group dropdown',
-                        'role': 'group'
-                    })
+                    Sao.i18n.gettext('Print report')]
+            ].forEach(function(menu_action) {
+                var dropdown = jQuery('<div/>', {
+                    'class': 'btn-group dropdown',
+                    'role': 'group'
+                })
                     .append(jQuery('<button/>', {
                         'type': 'button',
                         'class': 'btn btn-default navbar-btn dropdown-toggle',
@@ -550,39 +549,39 @@
                         'aria-labelledby': menu_action[0]
                     }))
                     .insertBefore(toolbar.find('button#email'));
-                    var button = dropdown.find('button');
-                    this.buttons[menu_action[0]] = button;
-                    dropdown
-                        .on('show.bs.dropdown', function() {
-                            jQuery(this).parents('.btn-group').removeClass(
-                                    'hidden-xs');
-                        }).on('hide.bs.dropdown', function() {
-                            jQuery(this).parents('.btn-group').addClass(
-                                    'hidden-xs');
+                var button = dropdown.find('button');
+                this.buttons[menu_action[0]] = button;
+                dropdown
+                    .on('show.bs.dropdown', function() {
+                        jQuery(this).parents('.btn-group').removeClass(
+                            'hidden-xs');
+                    }).on('hide.bs.dropdown', function() {
+                        jQuery(this).parents('.btn-group').addClass(
+                            'hidden-xs');
+                    });
+                var menu = dropdown.find('.dropdown-menu');
+                button.click(function() {
+                    menu.find([
+                        '.' + menu_action[0] + '_button',
+                        '.divider-button',
+                        '.' + menu_action[0] + '_plugin',
+                        '.divider-plugin'].join(',')).remove();
+                    var buttons = screen.get_buttons().filter(
+                        function(button) {
+                            return menu_action[0] == (
+                                button.attributes.keyword || 'action');
                         });
-                    var menu = dropdown.find('.dropdown-menu');
-                    button.click(function() {
-                        menu.find([
-                            '.' + menu_action[0] + '_button',
-                            '.divider-button',
-                            '.' + menu_action[0] + '_plugin',
-                            '.divider-plugin'].join(',')).remove();
-                        var buttons = screen.get_buttons().filter(
-                            function(button) {
-                                return menu_action[0] == (
-                                    button.attributes.keyword || 'action');
-                            });
-                        if (buttons.length) {
-                            menu.append(jQuery('<li/>', {
-                                'role': 'separator',
-                                'class': 'divider divider-button',
-                            }));
-                        }
-                        buttons.forEach(function(button) {
-                            var item = jQuery('<li/>', {
-                                'role': 'presentation',
-                                'class': menu_action[0] + '_button'
-                            })
+                    if (buttons.length) {
+                        menu.append(jQuery('<li/>', {
+                            'role': 'separator',
+                            'class': 'divider divider-button',
+                        }));
+                    }
+                    buttons.forEach(function(button) {
+                        var item = jQuery('<li/>', {
+                            'role': 'presentation',
+                            'class': menu_action[0] + '_button'
+                        })
                             .append(
                                 jQuery('<a/>', {
                                     'role': 'menuitem',
@@ -594,40 +593,40 @@
                                 evt.preventDefault();
                                 screen.button(button.attributes);
                             })
-                        .appendTo(menu);
-                        });
+                            .appendTo(menu);
+                    });
 
-                        var kw_plugins = [];
-                        Sao.Plugins.forEach(function(plugin) {
-                            plugin.get_plugins(screen.model.name).forEach(
-                                function(spec) {
-                                    var name = spec[0],
-                                        func = spec[1],
-                                        keyword = spec[2] || 'action';
-                                    if (keyword != menu_action[0]) {
-                                        return;
-                                    }
-                                    kw_plugins.push([name, func]);
-                                });
-                        });
-                        if (kw_plugins.length) {
-                            menu.append(jQuery('<li/>', {
-                                'role': 'separator',
-                                'class': 'divider divider-plugin',
-                            }));
-                        }
-                        kw_plugins.forEach(function(plugin) {
-                            var name = plugin[0],
-                                func = plugin[1];
-                            jQuery('<li/>', {
-                                'role': 'presentation',
-                                'class': menu_action[0] + '_plugin',
-                            }).append(
-                                jQuery('<a/>', {
-                                    'role': 'menuitem',
-                                    'href': '#',
-                                    'tabindex': -1,
-                                }).text(name))
+                    var kw_plugins = [];
+                    Sao.Plugins.forEach(function(plugin) {
+                        plugin.get_plugins(screen.model.name).forEach(
+                            function(spec) {
+                                var name = spec[0],
+                                    func = spec[1],
+                                    keyword = spec[2] || 'action';
+                                if (keyword != menu_action[0]) {
+                                    return;
+                                }
+                                kw_plugins.push([name, func]);
+                            });
+                    });
+                    if (kw_plugins.length) {
+                        menu.append(jQuery('<li/>', {
+                            'role': 'separator',
+                            'class': 'divider divider-plugin',
+                        }));
+                    }
+                    kw_plugins.forEach(function(plugin) {
+                        var name = plugin[0],
+                            func = plugin[1];
+                        jQuery('<li/>', {
+                            'role': 'presentation',
+                            'class': menu_action[0] + '_plugin',
+                        }).append(
+                            jQuery('<a/>', {
+                                'role': 'menuitem',
+                                'href': '#',
+                                'tabindex': -1,
+                            }).text(name))
                             .click(function(evt) {
                                 evt.preventDefault();
                                 var ids = screen.current_view.selected_records
@@ -647,13 +646,13 @@
                                 });
                             })
                             .appendTo(menu);
-                        });
                     });
+                });
 
-                    toolbars[menu_action[0]].forEach(function(action) {
-                        var item = jQuery('<li/>', {
-                            'role': 'presentation'
-                        })
+                toolbars[menu_action[0]].forEach(function(action) {
+                    var item = jQuery('<li/>', {
+                        'role': 'presentation'
+                    })
                         .append(jQuery('<a/>', {
                             'role': 'menuitem',
                             'href': '#',
@@ -692,25 +691,25 @@
                             });
                         }.bind(this))
                         .appendTo(menu);
-                    }.bind(this));
+                }.bind(this));
 
-                    if (menu_action[0] != 'action') {
-                        button._can_be_sensitive = Boolean(
-                            menu.children().length);
-                    }
+                if (menu_action[0] != 'action') {
+                    button._can_be_sensitive = Boolean(
+                        menu.children().length);
+                }
 
-                    if (menu_action[0] == 'print') {
-                        if (toolbars.exports.length && toolbars.print.length) {
-                            menu.append(jQuery('<li/>', {
-                                'role': 'separator',
-                                'class': 'divider',
-                            }));
-                            button._can_be_sensitive = true;
-                        }
-                        toolbars.exports.forEach(function(export_) {
-                            var item = jQuery('<li/>', {
-                                'role': 'presentation',
-                            })
+                if (menu_action[0] == 'print') {
+                    if (toolbars.exports.length && toolbars.print.length) {
+                        menu.append(jQuery('<li/>', {
+                            'role': 'separator',
+                            'class': 'divider',
+                        }));
+                        button._can_be_sensitive = true;
+                    }
+                    toolbars.exports.forEach(function(export_) {
+                        var item = jQuery('<li/>', {
+                            'role': 'presentation',
+                        })
                             .append(jQuery('<a/>', {
                                 'role': 'menuitem',
                                 'href': '#',
@@ -721,9 +720,8 @@
                                 this.do_export(export_);
                             }.bind(this))
                             .appendTo(menu);
-                        }.bind(this));
-                    }
-                }.bind(this));
+                    }.bind(this));
+                }
             }.bind(this));
             this.buttons.attach
                 .on('dragover', false)

Reply via email to