diff --git a/forwardport/data/views.xml b/forwardport/data/views.xml index 36d427f7..b098d7e5 100644 --- a/forwardport/data/views.xml +++ b/forwardport/data/views.xml @@ -15,7 +15,7 @@ ])"/>
diff --git a/runbot/__manifest__.py b/runbot/__manifest__.py index eab898c6..a445264a 100644 --- a/runbot/__manifest__.py +++ b/runbot/__manifest__.py @@ -36,6 +36,11 @@ 'templates/git.xml', 'templates/nginx.xml', 'templates/build_error.xml', + 'templates/new/page.xml', + 'templates/new/bundle.xml', + 'templates/new/batch.xml', + 'templates/new/build.xml', + 'templates/new/slot.xml', 'views/branch_views.xml', 'views/build_error_views.xml', @@ -65,6 +70,16 @@ 'runbot/static/src/libs/diff_match_patch/diff_match_patch.js', 'runbot/static/src/js/fields/*', ], + 'runbot.assets_frontend_new': [ + # TODO: compile bootstrap scss from /web without reviews and copy custom_utilities.scss + '/runbot/static/src/libs/bootstrap/css/bootstrap.css', + '/runbot/static/src/libs/fontawesome/css/font-awesome.css', + '/runbot/static/src/css/runbot.scss',# TODO: Check what is necessary from here + '/runbot/static/src/libs/jquery/jquery.js', + '/runbot/static/src/libs/popper/popper.js', + '/runbot/static/src/libs/bootstrap/js/bootstrap.bundle.js', + '/runbot/static/src/js/runbot.js', + ], 'runbot.assets_frontend': [ '/web/static/lib/bootstrap/dist/css/bootstrap.css', '/web/static/src/libs/fontawesome/css/font-awesome.css', diff --git a/runbot/controllers/frontend.py b/runbot/controllers/frontend.py index af0ae038..3047051b 100644 --- a/runbot/controllers/frontend.py +++ b/runbot/controllers/frontend.py @@ -3,6 +3,7 @@ import datetime import werkzeug import logging import functools +from typing import TypedDict, Optional, List, NamedTuple import werkzeug.utils import werkzeug.urls @@ -19,6 +20,32 @@ from odoo.osv import expression _logger = logging.getLogger(__name__) +class Breadcrumb(NamedTuple): + url: str + name: str + +Breadcrumbs = List[Breadcrumb] + +class ToolbarContext(TypedDict): + """ + Context used by 'runbot.layout_toolbar', should be provided through the 'toolbar' context key. + """ + sticky: Optional[bool] # Defines if the toolbar is sticky or not, defaults to true + + start_template: Optional[str] # Default to 'runbot.layout_toolbar_start_section' + # start_template default expected values + breadcrumbs: Optional[Breadcrumbs] + middle_template: Optional[str] # Defaults to 'runbot.layout_toolbar_middle_section' + # middle_template default expected values + message: Optional[str] + end_template: Optional[str] # Defaults to 'runbot.layout_toolbar_end_section' + # end_template expected values + pending_count: Optional[int] + pending_level: Optional[int] + pending_assigned_count: Optional[int] + # hosts_data: Optional[request.env['runbot.host']] + + def route(routes, **kw): def decorator(f): @o_route(routes, **kw) @@ -73,6 +100,22 @@ def route(routes, **kw): class Runbot(Controller): + def _get_default_toolbar(self, *, include_message=False): + pending_count, level, _, pending_assigned_count = self._pending() + + if include_message: + message = request.env['ir.config_parameter'].sudo().get_param('runbot.runbot_message') + else: + message = None + + return ToolbarContext( + pending_count=pending_count, + pending_level=level, + pending_assigned_count=pending_assigned_count, + hosts_data=request.env['runbot.host'].search([('assigned_only', '=', False)]), + message=message, + ) + def _pending(self): ICP = request.env['ir.config_parameter'].sudo().get_param warn = int(ICP('runbot.pending.warning', 5)) @@ -108,22 +151,17 @@ class Runbot(Controller): '/runbot', '/runbot/- | - | + | + | + |
+