This rev. introduces robust helpers to use in the JS tests suite to
interact with DOM and components, and starts using them (almost)
everywhere.
All the helpers are exposed though testUtils.js.
There are 2 kinds of helpers:
1. Assertions
-------------
* assert.containsNone, containsN, containsOnce check that the DOM
(or a specific part of the DOM) contains a `selector`. It
generates a correct error message automatically.
ex: assert.strictEqual(form.$('.o_form_editable'), 1, "msg");
-> assert.containsOnce(form, '.o_form_editable');
* assert.isVisible, isNotVisible check that the DOM has an element
visible or not. They also check that the element is actually in
the DOM (before most tests didn't verify this).
* assert.hasClass, doesNotHaveClass, hasAttrVAlue, check specific
properties of a DOM element, and also validate that it is
applied on a single existing DOM element (before most tests
didn't verify this).
ex: assert.notOk(form.$('button').hasClass('btn-primary'));
-> assert.doesNotHaveClass(form.$('button'), 'btn-primary');
2. Utilities
------------
The goal of the utilities is to centralize the definition of many
standard components and interactions, ensuring that when we
refactor the JS framework, we do not need to change all the tests.
Existing mock utilities (addMockEnvironment, intercept, path,
patchDate, unpatch and fieldsViewGet) are moved to
'testUtils.mock.*'.
Existing DOM utilities are moved to 'testUtils.dom.*'.
New dom utilities are created for opendDatePicker, click,
clickFirst and clickLast. Helper `click` verifies that there is
exactly 1 element visible in the DOM you click on, `clickFirst`
and `clickLast` verify that there are more than one element on the
DOM.
ex: form.$('button').click();
-> testUtils.dom.click(form.$('button'));
New Form utilities: (testUtils.form.*)
clickEdit, clickSave, clickCreate, clickDiscard, all clicks on
the control panel buttons of the form.
`reload` reloads the form data.
New modal, graph, kanban and pivot utils (testUtils.pivot.*,
testUtils.kanban.*, etc.).
New fields utils: (testUtils.fields.*)
* editInput, editSelect: allow to change the value of a field,
using a selector to identify it. They validate that the input
exists and trigger the change event automatically.
* editAndTrigger: allow to modify a field and trigger specific
events after the value change
* many2one (testUtils.fields.many2one.*)
clickOpenDropdown, clickHighlightedItem, clickItem,
searchAndClickItem: use a field name instead of a selector and
do all the complex mechanism to open, filter and highlight
many2one fields.
Joint work with aab, dam, ged, mge, svs and vsc.
810 lines
55 KiB
XML
810 lines
55 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<odoo>
|
|
<template id="_assets_utils">
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/lib/bootstrap/scss/_functions.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/lib/bootstrap/scss/_mixins.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/utils.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/bs_mixins_overrides.scss"/>
|
|
</template>
|
|
|
|
<template id="_assets_primary_variables">
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/primary_variables.scss"/>
|
|
</template>
|
|
|
|
<template id="_assets_secondary_variables">
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/secondary_variables.scss"/>
|
|
</template>
|
|
|
|
<template id="_assets_helpers">
|
|
<t t-call="web._assets_utils"/>
|
|
<t t-call="web._assets_primary_variables"/>
|
|
<t t-call="web._assets_secondary_variables"/>
|
|
|
|
<!-- Bootstrap variables should not be necessary, all pages come with bootstrap in at least one of their -->
|
|
<!-- bundle and, ideally, these should be available in all assets... with their odoo override. This system -->
|
|
<!-- however works for now as non-backend and non-frontend assets do not need overriden BS variables yet. -->
|
|
<link t-if="not no_bs_vars" rel="stylesheet" type="text/scss" href="/web/static/lib/bootstrap/scss/_variables.scss"/>
|
|
</template>
|
|
|
|
<template id="_assets_backend_helpers">
|
|
<t t-call="web._assets_helpers"><t t-set="no_bs_vars" t-value="True"/></t>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/bootstrap_overridden.scss"/>
|
|
</template>
|
|
|
|
<template id="_assets_frontend_helpers">
|
|
<t t-call="web._assets_helpers"><t t-set="no_bs_vars" t-value="True"/></t>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/bootstrap_overridden_frontend.scss"/>
|
|
</template>
|
|
|
|
<template id="_assets_bootstrap">
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/import_bootstrap_part1.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/bs_mixins_overrides.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/import_bootstrap_part2.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/bootstrap_review.scss"/>
|
|
</template>
|
|
|
|
<template id="assets_common" name="Common Assets (used in backend interface and website)">
|
|
<t t-call="web._assets_helpers"/>
|
|
|
|
<link rel="stylesheet" type="text/css" href="/web/static/lib/jquery.ui/jquery-ui.css"/>
|
|
<link rel="stylesheet" type="text/css" href="/web/static/lib/fontawesome/css/font-awesome.css"/>
|
|
<link rel="stylesheet" type="text/css" href="/web/static/lib/select2/select2.css"/>
|
|
<link rel="stylesheet" type="text/css" href="/web/static/lib/select2-bootstrap-css/select2-bootstrap.css"/>
|
|
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/fonts.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/ui.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/ui_extra.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/navbar.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/mimetypes.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/modal.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/animation.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/rainbow.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/datepicker.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/banner.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/colorpicker.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/keyboard.scss"/>
|
|
|
|
<t t-if="request and request.env['res.lang'].search([('code', '=', request.env.lang)]).direction == 'rtl'">
|
|
<link rel="stylesheet" type="text/less" href="/web/static/src/scss/fontawesome_overriden.scss"/>
|
|
</t>
|
|
|
|
<script type="text/javascript" src="/web/static/lib/underscore/underscore.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/underscore.string/lib/underscore.string.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/moment/moment.js"></script>
|
|
|
|
<script type="text/javascript" src="/web/static/lib/jquery/jquery.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/jquery.ui/jquery-ui.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/jquery/jquery.browser.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/jquery.blockUI/jquery.blockUI.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/jquery.hotkeys/jquery.hotkeys.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/jquery.placeholder/jquery.placeholder.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/jquery.form/jquery.form.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/jquery.ba-bbq/jquery.ba-bbq.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/jquery.mjs.nestedSortable/jquery.mjs.nestedSortable.js"></script>
|
|
|
|
<script type="text/javascript" src="/web/static/lib/popper/popper.js"></script>
|
|
|
|
<script type="text/javascript" src="/web/static/lib/bootstrap/js/index.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/bootstrap/js/util.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/bootstrap/js/alert.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/bootstrap/js/button.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/bootstrap/js/carousel.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/bootstrap/js/collapse.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/bootstrap/js/dropdown.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/bootstrap/js/modal.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/bootstrap/js/tooltip.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/bootstrap/js/popover.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/bootstrap/js/scrollspy.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/bootstrap/js/tab.js"></script>
|
|
|
|
<script type="text/javascript" src="/web/static/lib/tempusdominus/tempusdominus.js"/>
|
|
<script type="text/javascript" src="/web/static/lib/select2/select2.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/clipboard/clipboard.js"></script>
|
|
|
|
<script type="text/javascript" src="/web/static/lib/qweb/qweb2.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/boot.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/libs/autocomplete.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/libs/bootstrap.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/libs/jquery.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/libs/download.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/libs/content-disposition.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/libs/underscore.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/services/config.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/core/abstract_service.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/core/abstract_storage_service.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/core/class.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/core/collections.js"/>
|
|
<script type="text/javascript" src="/web/static/src/js/core/translation.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/core/ajax.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/services/ajax_service.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/core/time.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/core/mixins.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/core/service_mixins.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/core/rpc.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/core/widget.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/core/registry.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/core/session.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/core/dom.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/core/concurrency.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/core/utils.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/core/qweb.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/core/bus.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/services/core.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/core/dialog.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/core/local_storage.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/services/local_storage_service.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/core/session_storage.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/services/session_storage_service.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/core/ram_storage.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/widgets/rainbow_man.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/widgets/colorpicker.js"/>
|
|
</template>
|
|
|
|
<template id="assets_backend" name="Backend Assets (used in backend interface)">
|
|
<t t-call="web._assets_backend_helpers"/>
|
|
|
|
<t t-call="web._assets_bootstrap"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/lib/tempusdominus/tempusdominus.scss"/>
|
|
|
|
<link rel="stylesheet" type="text/css" href="/base/static/src/css/modules.css"/>
|
|
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/webclient_extra.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/webclient_layout.scss"/>
|
|
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/webclient.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/domain_selector.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/model_field_selector.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/progress_bar.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/dropdown.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/dropdown_extra.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/tooltip.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/debug_manager.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/control_panel.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/fields.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/fields_extra.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/views.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/pivot_view.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/graph_view.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/form_view.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/form_view_extra.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/list_view.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/list_view_extra.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/kanban_dashboard.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/kanban_examples_dialog.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/kanban_column_progressbar.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/kanban_view.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/kanban_view_mobile.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/web_calendar.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/search_view.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/search_view_mobile.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/dropdown_menu.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/search_view_extra.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/data_export.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/base/static/src/scss/onboarding.scss"/>
|
|
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/base_settings.scss"/>
|
|
<script type="text/javascript" src="/base/static/src/js/res_config_settings.js"></script>
|
|
|
|
<script type="text/javascript" src="/web/static/lib/jquery.scrollTo/jquery.scrollTo.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/backbone/backbone.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/fuzzy-master/fuzzy.js"></script>
|
|
|
|
<script type="text/javascript" charset="utf-8">
|
|
odoo._modules = <t t-raw="get_modules_order()"/>;
|
|
</script>
|
|
|
|
<script type="text/javascript" src="/web/static/lib/py.js/lib/py.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/py.js/lib/py_extras.js"></script>
|
|
<!-- Special case: core.js declares $.browser needed by ba-bbq -->
|
|
<script type="text/javascript" src="/web/static/lib/jquery.ba-bbq/jquery.ba-bbq.js"></script>
|
|
|
|
<script type="text/javascript" src="/web/static/src/js/core/domain.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/core/py_utils.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/chrome/abstract_action.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/chrome/action_manager.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/chrome/action_manager_act_window.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/chrome/action_manager_report.js"/>
|
|
<script type="text/javascript" src="/web/static/src/js/chrome/control_panel.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/core/browser_detection.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/chrome/keyboard_navigation_mixin.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/chrome/abstract_web_client.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/chrome/web_client.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/chrome/root_widget.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/_deprecated/data.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/core/context.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/core/data_comparison_utils.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/core/misc.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/services/crash_manager.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/services/data_manager.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/services/report_service.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/services/session.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/services/notification_service.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/widgets/auto_complete.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/widgets/change_password.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/tools/debug_manager.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/tools/test_menus_loader.js"/>
|
|
<script type="text/javascript" src="/web/static/src/js/widgets/data_export.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/widgets/date_picker.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/widgets/domain_selector_dialog.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/widgets/domain_selector.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/widgets/iframe_widget.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/chrome/loading.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/widgets/model_field_selector.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/widgets/notification.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/chrome/sidebar.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/chrome/pager.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/chrome/systray_menu.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/widgets/switch_company_menu.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/chrome/user_menu.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/chrome/menu.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/chrome/apps_menu.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/search/search_view.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/search/search_view_mobile.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/search/search_filters.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/search/search_inputs.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/search/favorites_menu.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/search/groupby_menu.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/search/time_range_menu.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/search/time_range_menu_options.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/search/groupby_menu_interface_mixin.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/widgets/dropdown_menu.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/widgets/pie_chart.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/search/filters_menu.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/apps.js"></script>
|
|
|
|
<script type="text/javascript" src="/web/static/src/js/fields/abstract_field.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/fields/basic_fields.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/fields/field_registry.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/basic/widget_registry.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/fields/field_utils.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/fields/relational_fields.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/fields/special_fields.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/fields/upgrade_fields.js"></script>
|
|
|
|
<script type="text/javascript" src="/web/static/src/js/views/abstract_view.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/abstract_renderer.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/abstract_model.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/abstract_controller.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/basic/basic_model.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/basic/basic_view.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/basic/basic_controller.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/basic/basic_renderer.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/field_manager_mixin.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/standalone_field_manager_mixin.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/view_registry.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/view_dialogs.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/view_utils.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/form/form_renderer.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/form/form_controller.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/form/form_view.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/graph/graph_model.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/graph/graph_controller.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/graph/graph_renderer.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/graph/graph_view.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/kanban/kanban_column.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/kanban/kanban_column_progressbar.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/kanban/kanban_column_quick_create.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/kanban/kanban_model.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/kanban/kanban_controller.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/kanban/kanban_examples_registry.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/kanban/kanban_record.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/kanban/kanban_record_quick_create.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/kanban/kanban_renderer.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/kanban/kanban_renderer_mobile.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/kanban/kanban_view.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/kanban/quick_create_form_view.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/list/list_editable_renderer.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/list/list_renderer.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/list/list_view.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/list/list_controller.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/pivot/pivot_model.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/pivot/pivot_controller.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/pivot/pivot_renderer.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/pivot/pivot_view.js"></script>
|
|
|
|
<script type="text/javascript" src="/web/static/src/js/views/calendar/calendar_controller.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/calendar/calendar_model.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/calendar/calendar_quick_create.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/calendar/calendar_renderer.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/views/calendar/calendar_view.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/widgets/attach_document.js"></script>
|
|
|
|
<script type="text/javascript" src="/web/static/src/js/report/utils.js"/>
|
|
<script type="text/javascript" src="/web/static/src/js/report/client_action.js"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/report_backend.scss"/>
|
|
</template>
|
|
|
|
<template id="web.assets_frontend" name="Website Assets">
|
|
<t t-call="web._assets_frontend_helpers"/>
|
|
|
|
<t t-call="web._assets_bootstrap"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/lib/tempusdominus/tempusdominus.scss"/>
|
|
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/navbar_mobile.scss"/>
|
|
|
|
<script type="text/javascript" src="/web/static/src/js/services/session.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/chrome/public_root_widget.js"></script>
|
|
</template>
|
|
|
|
<template id="web.layout" name="Web layout"><!DOCTYPE html>
|
|
<html t-att="html_data or {}">
|
|
<head>
|
|
<meta charset="utf-8"/>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"/>
|
|
|
|
<title t-esc="title or 'Odoo'"/>
|
|
<link type="image/x-icon" rel="shortcut icon" t-att-href="x_icon or '/web/static/src/img/favicon.ico'"/>
|
|
|
|
<script type="text/javascript">
|
|
var odoo = {
|
|
csrf_token: "<t t-esc="request.csrf_token(None)"/>",
|
|
};
|
|
</script>
|
|
|
|
<t t-raw="head or ''"/>
|
|
</head>
|
|
<body t-att-class="body_classname">
|
|
<t t-raw="0"/>
|
|
</body>
|
|
</html>
|
|
</template>
|
|
|
|
<template id="web.login_layout" name="Login Layout">
|
|
<t t-call="web.layout">
|
|
<t t-set="html_data" t-value="{'style': 'height: 100%;'}"/>
|
|
<t t-set="head">
|
|
<t t-call-assets="web.assets_common" t-js="false"/>
|
|
<t t-call-assets="web.assets_frontend" t-js="false"/>
|
|
<t t-call-assets="web.assets_common" t-css="false"/>
|
|
<t t-call-assets="web.assets_frontend" t-css="false"/>
|
|
</t>
|
|
<t t-set="body_classname" t-value="'bg-100'"/>
|
|
|
|
<div class="container mb-5 pb-5">
|
|
<div t-attf-class="card border-0 mx-auto mt-5 bg-100 {{login_card_classes}} o_database_list" style="max-width: 300px;">
|
|
<div class="card-body">
|
|
<div t-attf-class="text-center pb-3 border-bottom {{'mb-3' if form_small else 'mb-4'}}">
|
|
<img t-attf-src="/web/binary/company_logo{{ '?dbname='+db if db else '' }}" alt="Logo" style="max-height:120px; max-width: 100%; width:auto"/>
|
|
</div>
|
|
<t t-raw="0"/>
|
|
<div class="text-center small mt-4 pt-3 border-top" t-if="not disable_footer">
|
|
<t t-if="not disable_database_manager">
|
|
<a class="border-right pr-2 mr-1" href="/web/database/manager">Manage Databases</a>
|
|
</t>
|
|
<a href="https://www.odoo.com?utm_source=db&utm_medium=auth" target="_blank">Powered by <span>Odoo</span></a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</t>
|
|
</template>
|
|
|
|
<template id="web.login" name="Login">
|
|
<t t-call="web.login_layout">
|
|
<form class="oe_login_form" role="form" t-attf-action="/web/login{{ '?debug' if debug else '' }}" method="post" onsubmit="this.action = this.action + location.hash">
|
|
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
|
|
|
|
<div class="form-group field-db" t-if="databases and len(databases) > 1">
|
|
<label for="db" class="col-form-label">Database</label>
|
|
<div t-attf-class="input-group {{'input-group-sm' if form_small else ''}}">
|
|
<input type="text" name="db" t-att-value="request.db" id="db" t-attf-class="form-control #{'form-control-sm' if form_small else ''}" required="required" readonly="readonly"/>
|
|
<span class="input-group-append">
|
|
<a role="button" href="/web/database/selector" class="btn btn-secondary">Select <i class="fa fa-database" role="img" aria-label="Database" title="Database"></i></a>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group field-login">
|
|
<label for="login">Email</label>
|
|
<input type="text" placeholder="Email" name="login" t-att-value="login" id="login" t-attf-class="form-control #{'form-control-sm' if form_small else ''}" required="required" autofocus="autofocus" autocapitalize="off"/>
|
|
</div>
|
|
|
|
<div class="form-group field-password">
|
|
<label for="password">Password</label>
|
|
<input type="password" placeholder="Password" name="password" id="password" t-attf-class="form-control #{'form-control-sm' if form_small else ''}" required="required" autocomplete="current-password" t-att-autofocus="'autofocus' if login else None" maxlength="4096"/>
|
|
</div>
|
|
|
|
<p class="alert alert-danger" t-if="error" role="alert">
|
|
<t t-esc="error"/>
|
|
</p>
|
|
<p class="alert alert-success" t-if="message" role="status">
|
|
<t t-esc="message"/>
|
|
</p>
|
|
|
|
<div t-attf-class="clearfix oe_login_buttons text-center mb-1 {{'pt-2' if form_small else 'pt-3'}}">
|
|
<button type="submit" class="btn btn-primary btn-block">Log in</button>
|
|
<t t-if="debug">
|
|
<button type="submit" name="redirect" value="/web/become" class="btn btn-link btn-sm btn-block">Log in as superuser</button>
|
|
</t>
|
|
<div class="o_login_auth"/>
|
|
</div>
|
|
|
|
<input type="hidden" name="redirect" t-att-value="redirect"/>
|
|
</form>
|
|
</t>
|
|
</template>
|
|
|
|
<template id="web.js_tests_assets">
|
|
<link type="text/css" rel="stylesheet" href="/web/static/lib/qunit/qunit-2.3.0.css"/>
|
|
<script type="text/javascript" src="/web/static/lib/qunit/qunit-2.3.0.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/helpers/qunit_config.js"></script>
|
|
|
|
<t t-call-assets="web.assets_common" t-js="false"/>
|
|
<t t-call-assets="web.assets_backend" t-js="false"/>
|
|
<t t-call-assets="web.assets_common" t-css="false"/>
|
|
<t t-call-assets="web.assets_backend" t-css="false"/>
|
|
|
|
<script type="text/javascript" src="/web/static/tests/helpers/qunit_asserts.js"></script>
|
|
|
|
<!-- add lazy-loaded libs to make tests synchronous -->
|
|
<link rel="stylesheet" href="/web/static/lib/fullcalendar/css/fullcalendar.css"/>
|
|
<script type="text/javascript" src="/web/static/lib/fullcalendar/js/fullcalendar.js"></script>
|
|
<link rel="stylesheet" type="text/css" href="/web/static/lib/nvd3/nv.d3.css"/>
|
|
<script type="text/javascript" src="/web/static/lib/nvd3/d3.v3.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/nvd3/nv.d3.js"></script>
|
|
<script type="text/javascript" src="/web/static/src/js/libs/nvd3.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/ace/ace.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/ace/mode-python.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/ace/mode-xml.js"></script>
|
|
|
|
<script type="text/javascript">
|
|
odoo.define('web.WebClientWithoutServices', function (require) {
|
|
var ServiceProviderMixin = require('web.ServiceProviderMixin');
|
|
var WebClient = require('web.WebClient');
|
|
var WebClientWithoutServices = WebClient.extend({
|
|
/**
|
|
* Patch web client so that it is no longer a service provider.
|
|
*
|
|
* @override
|
|
*/
|
|
init: function () {
|
|
var originalServiceProviderMixinInit = ServiceProviderMixin.init;
|
|
ServiceProviderMixin.init = function () {};
|
|
this._super.apply(this, arguments);
|
|
ServiceProviderMixin.init = originalServiceProviderMixinInit;
|
|
},
|
|
});
|
|
return WebClientWithoutServices;
|
|
});
|
|
// define the 'web.web_client' module because some other modules require it
|
|
odoo.define('web.web_client', function (require) {
|
|
var WebClient = require('web.WebClientWithoutServices');
|
|
var web_client = new WebClient();
|
|
return web_client;
|
|
});
|
|
</script>
|
|
|
|
<style>
|
|
body {
|
|
position: relative; // bootstrap-datepicker needs this
|
|
}
|
|
body:not(.debug) .modal-backdrop, body:not(.debug) .modal, body:not(.debug) .ui-autocomplete {
|
|
opacity: 0 !important;
|
|
}
|
|
#qunit-testrunner-toolbar label {
|
|
font-weight: inherit;
|
|
margin-bottom: inherit;
|
|
}
|
|
#qunit-testrunner-toolbar input[type=text] {
|
|
width: inherit;
|
|
display: inherit;
|
|
}
|
|
</style>
|
|
|
|
<script type="text/javascript" src="/web/static/tests/helpers/test_utils_create.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/helpers/test_utils_dom.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/helpers/test_utils_fields.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/helpers/test_utils_form.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/helpers/test_utils_graph.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/helpers/test_utils_kanban.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/helpers/test_utils_mock.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/helpers/test_utils_modal.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/helpers/test_utils_pivot.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/helpers/test_utils.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/helpers/mock_server.js"></script>
|
|
|
|
<script type="text/javascript" src="/web/static/tests/boot_tests.js"></script>
|
|
</template>
|
|
|
|
<template id="web.qunit_suite">
|
|
<t t-call="web.layout">
|
|
<t t-set="html_data" t-value="{'style': 'height: 100%;'}"/>
|
|
<t t-set="title">Web Tests</t>
|
|
<t t-set="head">
|
|
<t t-call="web.js_tests_assets"/>
|
|
|
|
<script type="text/javascript" src="/base/static/tests/base_settings_tests.js"></script>
|
|
|
|
<script type="text/javascript" src="/web/static/tests/qweb_tests.js"></script>
|
|
|
|
<script type="text/javascript" src="/web/static/tests/services/notification_service_tests.js"></script>
|
|
|
|
<script type="text/javascript" src="/web/static/tests/fields/basic_fields_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/fields/field_utils_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/fields/relational_fields_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/fields/relational_fields/field_many2many_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/fields/relational_fields/field_many2one_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/fields/relational_fields/field_one2many_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/fields/special_fields.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/fields/upgrade_fields_tests.js"></script>
|
|
|
|
<script type="text/javascript" src="/web/static/tests/views/abstract_controller_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/views/abstract_view_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/views/form_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/views/graph_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/views/list_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/views/pivot_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/views/kanban_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/views/calendar_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/views/basic_model_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/views/abstract_view_banner_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/views/kanban_model_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/views/view_dialogs_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/views/search_filters_menu_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/views/search_groupby_menu_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/widgets/dropdown_menu_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/views/search_view_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/core/ajax_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/core/registry_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/core/py_utils_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/core/class_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/core/rpc_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/core/domain_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/core/mixins_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/core/time_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/core/concurrency_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/core/util_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/core/widget_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/core/dom_tests.js"></script>
|
|
|
|
<script type="text/javascript" src="/web/static/tests/chrome/action_manager_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/chrome/search_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/chrome/pager_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/chrome/keyboard_navigation_mixin_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/chrome/user_menu_tests.js"></script>
|
|
|
|
<script type="text/javascript" src="/web/static/tests/widgets/data_export_tests.js"/>
|
|
<script type="text/javascript" src="/web/static/tests/widgets/domain_selector_tests.js"/>
|
|
<script type="text/javascript" src="/web/static/tests/widgets/model_field_selector_tests.js"/>
|
|
<script type="text/javascript" src="/web/static/tests/widgets/rainbow_man_tests.js"/>
|
|
|
|
<script type="text/javascript" src="/web/static/tests/tools/debug_manager_tests.js"/>
|
|
</t>
|
|
|
|
<div id="qunit"/>
|
|
<div id="qunit-fixture"/>
|
|
</t>
|
|
</template>
|
|
|
|
<template id="web.qunit_mobile_suite">
|
|
<t t-call="web.layout">
|
|
<t t-set="html_data" t-value="{'style': 'height: 100%;'}"/>
|
|
<t t-set="title">Web Mobile Tests</t>
|
|
<t t-set="head">
|
|
<script>
|
|
// force the config.device.isMobile key to be true so that
|
|
// mobile specific files aren't rejected
|
|
window.odoo = {};
|
|
var odooDefine;
|
|
Object.defineProperty(window.odoo, 'define', {
|
|
get: function () {
|
|
return odooDefine;
|
|
},
|
|
set: function (define) {
|
|
odooDefine = function () {
|
|
define.apply(this, arguments);
|
|
if (arguments[0] === 'web.config') {
|
|
define.call(this, 'web.config.patch', function (require) {
|
|
var config = require('web.config');
|
|
config.device.isMobile = true;
|
|
config.device.size_class = config.device.SIZES.XS;
|
|
});
|
|
}
|
|
};
|
|
},
|
|
});
|
|
</script>
|
|
|
|
<t t-call="web.js_tests_assets"/>
|
|
<script type="text/javascript" src="/web/static/lib/jquery.touchSwipe/jquery.touchSwipe.js"></script>
|
|
|
|
<script type="text/javascript" src="/base/static/tests/base_settings_mobile_tests.js"></script>
|
|
|
|
<script type="text/javascript" src="/web/static/tests/chrome/action_manager_mobile_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/chrome/search_view_mobile_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/views/calendar_mobile_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/views/kanban_mobile_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/views/form_mobile_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/fields/basic_fields_mobile_tests.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/fields/relational_fields_mobile_tests.js"></script>
|
|
</t>
|
|
|
|
<div id="qunit"/>
|
|
<div id="qunit-fixture"/>
|
|
</t>
|
|
</template>
|
|
|
|
<template id="web.benchmark_suite">
|
|
<t t-call="web.layout">
|
|
<t t-set="html_data" t-value="{'style': 'height: 100%;'}"/>
|
|
<t t-set="title">Web Benchmarks</t>
|
|
<t t-set="head">
|
|
<link type="text/css" rel="stylesheet" href="/web/static/lib/qunit/qunit-2.3.0.css"/>
|
|
<script type="text/javascript" src="/web/static/lib/qunit/qunit-2.3.0.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/helpers/qunit_config.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/benchmarkjs/lodash.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/benchmarkjs/benchmark.js"></script>
|
|
|
|
<t t-call-assets="web.assets_common" t-js="false"/>
|
|
<t t-call-assets="web.assets_backend" t-js="false"/>
|
|
<t t-call-assets="web.assets_common" t-css="false"/>
|
|
<t t-call-assets="web.assets_backend" t-css="false"/>
|
|
|
|
<script type="text/javascript" src="/web/static/tests/helpers/qunit_asserts.js"></script>
|
|
|
|
<script type="text/javascript">
|
|
QUnit.config.hidepassed = false;
|
|
|
|
odoo.define('web.WebClientWithoutServices', function (require) {
|
|
var ServiceProviderMixin = require('web.ServiceProviderMixin');
|
|
var WebClient = require('web.WebClient');
|
|
var WebClientWithoutServices = WebClient.extend({
|
|
/**
|
|
* Patch web client so that it is no longer a service provider.
|
|
*
|
|
* @override
|
|
*/
|
|
init: function () {
|
|
var originalServiceProviderMixinInit = ServiceProviderMixin.init;
|
|
ServiceProviderMixin.init = function () {};
|
|
this._super.apply(this, arguments);
|
|
ServiceProviderMixin.init = originalServiceProviderMixinInit;
|
|
},
|
|
});
|
|
return WebClientWithoutServices;
|
|
});
|
|
// define the 'web.web_client' module because some other modules require it
|
|
odoo.define('web.web_client', function (require) {
|
|
var WebClient = require('web.WebClientWithoutServices');
|
|
var web_client = new WebClient();
|
|
return web_client;
|
|
});
|
|
</script>
|
|
|
|
<style>
|
|
body:not(.debug) .modal-backdrop, body:not(.debug) .modal, body:not(.debug) .ui-autocomplete {
|
|
opacity: 0 !important;
|
|
}
|
|
#qunit-testrunner-toolbar label {
|
|
font-weight: inherit;
|
|
margin-bottom: inherit;
|
|
}
|
|
#qunit-testrunner-toolbar input[type=text] {
|
|
width: inherit;
|
|
display: inherit;
|
|
}
|
|
</style>
|
|
<script type="text/javascript" src="/web/static/tests/helpers/test_utils.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/helpers/mock_server.js"></script>
|
|
|
|
<script type="text/javascript" src="/web/static/tests/views/list_benchmarks.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/views/kanban_benchmarks.js"></script>
|
|
<script type="text/javascript" src="/web/static/tests/views/form_benchmarks.js"></script>
|
|
</t>
|
|
|
|
<div id="qunit"/>
|
|
<div id="qunit-fixture"/>
|
|
</t>
|
|
</template>
|
|
|
|
<template id="web.webclient_bootstrap">
|
|
<t t-call="web.layout">
|
|
<t t-set="head_web">
|
|
<script type="text/javascript">
|
|
odoo.session_info = <t t-raw="session_info"/>;
|
|
</script>
|
|
|
|
<t t-call-assets="web.assets_common" t-js="false"/>
|
|
<t t-call-assets="web.assets_backend" t-js="false"/>
|
|
<t t-call-assets="web.assets_common" t-css="false"/>
|
|
<t t-call-assets="web.assets_backend" t-css="false"/>
|
|
|
|
<![CDATA[
|
|
<!--[if lt IE 10]>
|
|
<body class="ie9">
|
|
<![endif]-->
|
|
]]>
|
|
|
|
<script type="text/javascript">
|
|
odoo.define('web.web_client', function (require) {
|
|
var WebClient = require('web.WebClient');
|
|
var web_client = new WebClient();
|
|
$(function() {
|
|
web_client.setElement($(document.body));
|
|
web_client.start();
|
|
});
|
|
return web_client;
|
|
});
|
|
</script>
|
|
</t>
|
|
<t t-set="head" t-value="head_web + (head or '')"/>
|
|
<t t-set="body_classname" t-value="'o_web_client'"/>
|
|
<div class="o_main">
|
|
<main class="o_main_content"/>
|
|
</div>
|
|
</t>
|
|
</template>
|
|
|
|
<!--
|
|
Optional Bundle for PDFJS lib
|
|
Since PDFJS is quite huge (40000 lines), please only load it when it is necessary.
|
|
For now, it is only use to display the PDF slide Viewer during an embed.
|
|
Bundlized, the size is reduced to 3000 lines.
|
|
-->
|
|
<template id="pdf_js_lib" name="PDF JS Library">
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/shared/util.js"></script>
|
|
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/display/api.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/display/metadata.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/display/canvas.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/display/webgl.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/display/pattern_helper.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/display/font_loader.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/display/annotation_helper.js"></script>
|
|
<!-- files normally dynamically loaded in worker_loader.js -->
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/core/network.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/core/chunked_stream.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/core/pdf_manager.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/core/core.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/core/obj.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/core/charsets.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/core/annotation.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/core/function.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/core/colorspace.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/core/crypto.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/core/pattern.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/core/evaluator.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/core/cmap.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/core/fonts.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/core/font_renderer.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/core/glyphlist.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/core/image.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/core/metrics.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/core/parser.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/core/ps_parser.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/core/stream.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/core/worker.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/core/arithmetic_decoder.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/core/jpg.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/core/jpx.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/core/jbig2.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/core/bidi.js"></script>
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/core/murmurhash3.js"></script>
|
|
<!--
|
|
NOTE JEM : PDFJS not-minified load its assets dynamically. Not minify, this lib is huge (4000 lines).
|
|
To load PDFJS using odoo bundle, we create a custom worker_loader, to avoid reloading all the assets (core/*.js) dynamically.
|
|
Loading all this assets in a bundle can be problematic in debug mode, since we don't wait all assets to be loaded to start using PDFJS. That's why, in debug mode, we use the native loader, otherwise our custom loader is used.
|
|
-->
|
|
<t t-if="not debug">
|
|
<script>
|
|
// Use Odoo PDFJS Loader, to avoid dynamic assets loading
|
|
PDFJS.workerSrc = '/web/static/lib/pdfjs/worker_loader_by_odoo.js';
|
|
PDFJS.disableWorker = true;
|
|
</script>
|
|
</t>
|
|
<t t-if="debug">
|
|
<script>
|
|
// Specify the main script used to create a new PDF.JS web worker.
|
|
// In production, leave this undefined or change it to point to the
|
|
// combined `pdf.worker.js` file.
|
|
PDFJS.workerSrc = '/web/static/lib/pdfjs/src/worker_loader.js';
|
|
</script>
|
|
</t>
|
|
<!--
|
|
If no loader defined, this file will try to load pdf.worker.js (in build/).
|
|
It will crash since we don't use the minified version of PDFJS
|
|
-->
|
|
<script type="text/javascript" src="/web/static/lib/pdfjs/src/pdf.js"></script>
|
|
</template>
|
|
</odoo>
|