summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/control_panel.js
AgeCommit message (Collapse)Author
2017-04-11[REF] web, *: redesign all JS viewsGéry Debongnie
This commit introduce a full redesign of all JS views. We started basically from scratch. The goal was to unify all the various views under a common framework, to make them testable, to make then usable in different conditions (in studio, or in the frontend), and to make our lives easier. Some important points are: - we introduced new coding guidelines (camelCase, 80 chars width, ...) - we have a brand new testing framework (still QUnit based) - kanban view moved to the web addon - calendar view (formerly web_calender) moved to web as well - the tree view was removed - all new code should be documented We hope that this code is the start of a new era for the Odoo web client, we want to have a high quality codebase, well documented, well tested, well designed. Work done by the framework team: mostly aab, ged, chm, dmo, qsm
2016-11-08[MERGE] forward port branch saas-11 up to c19f546Christophe Simonis
2016-11-08[MERGE] forward port branch 9.0 up to b795755Christophe Simonis
2016-11-04[FIX] bus,im_odoo_support, web*: fix various memory leaksChristophe Matthieu
* Tip are never destroyed when change view mode * unbind methods * mail: memory leak with unbind methods * web: memory leak because 'ui-autocomplete' is never destroyed * web_editor: memory leak for wrong unbind on destroy * web: memory leak: must remove fileupload handler * bus: memory leak: correctly debind handlers on window in bus.Bus * remove handlers on switch buttons and views $buttons * remove handlers on breadcrumbs * web: memory leak: correctly debind handlers * im_odoo_support: memory leak: remove fileupload handler odoo_support Note: part of this commit was actually authored by aab
2016-09-29[FIX] web: prevent a crash when clicking on 'more' button (#13630)Laurent Smet
A traceback is generated when a user clicks on 'more' button in settings to see the pending invitations. That was caused by a missing check condition. backport of saas-13 commit 2fdf631 opw-689597
2016-09-14[MERGE] forward port branch saas-11 up to 19b4f5eChristophe Simonis
2016-09-13[FIX] web: prevent search dropdowns to close on click insideDenis Ledoux
The class `oe-search-options` has been renamed to `o_search_options` at the revision 977db823c7c84e9edc7c8cf8384eb9cf47275b3a See the full explanation of the bug fix here: 4601b044a6e4dbf162cfca9bf0be5ff2a21dd4f5q
2016-07-05[FIX] web: control_panel: do not trim breadcrumb's title if undefinedSimon Lejeune
2016-06-17[REF] web: refactor and simplify web.coreGéry Debongnie
2016-06-08[MERGE] forward port of branch saas-10 up to 2f948c7Christophe Simonis
2016-06-07[FIX] web: prevent search dropdowns to close on click insideDenis Ledoux
In the Filters, Group By and Favorites dropdowns, when clicking outside the `li` elements but still inside the dropdown menu itself (like on the dividers, or next to the advanced search `Apply` button), the dropdowns was closed. This behavior was annoying when doing an advanced search with a field using the datetime picker, as, to close the datetime picker, you have to click outside it, and when you did, it closed automatically the filter dropdown... So you had to open it again to finally apply the filter. opw-674310
2016-05-23[FIX] web,base: m2o empty name resultsqsm-odoo
M2O use the autocomplete lib to display its content. The problem is that if a result is empty (or only composed of whitespaces), a divider is displayed in the dropdown. Commit 1d9f7d279a74aaf6aaf25f91e2313b23b4122827 was fixing this by only displaying non-empty name results... but it did not work as many models implement the name_search method the wrong way. The new solution is to add a default display for record values which are empty strings, at the right places in the webclient components.
2016-04-21[REF] web: stop duplicating webAaron Bohy
Avoid duplicating web addon in enterprise by extracting a common basis. Enterprise features stay in enterprise, but use that common basis. Mainly: - JS refactoring and linting - Conversion of .sass into .less split into multiple files - Templates cleaning and DOM simplification - Re-generation of web.pot, and update of .po files
2015-08-15[MERGE] forward port of branch saas-6 up to 8d95f6dChristophe Simonis
2015-07-29[FIX] web,mail: widgets: replace $el.toggle() by do_toggle()Aaron Bohy
Since rev. 16eb36ff, do_show() and do_hide() on widgets toggle the classname o_hidden on which the rule 'display: none' is defined, instead of calling jQuery's show() and hide(). The method do_toggle(), sharing the same logic, has been introduced in rev. 74c5f772. From now on, every widgets should call do_toggle() instead of $el.toggle() as it will have undesiderable effects (they should call do_show() and do_hide() instead of $el.show() and $el.hide() as well, this as been done in 16eb36ff). This rev. replaces all calls to $el.toggle() by do_toggle(). It also adds an optional argument to do_toggle() to force hidding or showing the widget.
2015-07-07[REF] web: ControlPanelAaron Bohy
Adds the option clear so that, if set to false, only some elements of the control panel can be updated while keeping the other ones unchanged. The breadcrumbs can then be updated by simply calling update_control_panel(), instead of triggering a specific event to do it. A bit of documentation and refactoring as well, mainly for the breadcrumbs to be handled as other control panel's elements.
2015-06-17[IMP] web, web_calendar: New calendarqsm-odoo
2015-05-04[FIX] ControlPanel: search options visibleAaron Bohy
Show the searchview buttons area if there is no searchview displayed in the ControlPanel, since client actions may insert elements into it.
2015-04-10[IMP] Web: ControlPanel: properly and securely expose nodesetsAaron Bohy
2015-03-20[ADD] Web: ControlPanelMixinAaron Bohy
Creation of the ControlPanelMixin that should be used by widgets needing a ControlPanel. It facilitates the way those widgets communicate with the ControlPanel to update it according to their status. From now on, client action widgets can easily use the main ControlPanel.
2015-03-20[REF] Web: Actions, ActionManager, ViewManager, Controlpanel refactoringAaron Bohy
Big refactoring of Action, WidgetAction and ViewManagerAction to clean their API. Mainly, renamming from State to Action and removal of unused functions (or functions that are only used by the DebugManager, for which we tolerate introspection). Some logic has also been moved from the ActionManager to the Actions themselves. The specific behavior of each type of Action is now handled in the implementation of those Actions. In ActionManager, this.states is renammed to this.action_stack to be consistent with view_stack in ViewManager. The setup_search_view() and render_switch_buttons() functions have been moved from ControlPanel to ViewManager as it was before, since actual design allows it and it makes more sense. The ControlPanel API has also been simplified as some functions were not used anymore. The ControlPanel is now updated directly by the widgets using it, bypassing the ActionManager. The control panel elements are stored by the widgets themselves to allow restoring them later.
2015-03-20[IMP] Web and all views: ControlPanel atomic updateAaron Bohy
Change the logic of rendering and displaying/hidding the control elements (buttons, sidebar and pager) of all views. The views do no more render automatically their elements as this is rather done through the render_[element] function called by the ViewManager. This function only appends the element to the $node given as argument. If no argument is given, then it may appends it to the DOM directly, within the adequate div of its template. This allows the ViewManager to attach/detach all elements of the ControlPanel in an atomic may, to prevent the ControlPanel from flickering. Also detach the contents of the ControlPanel in headless mode. Headless means that the ControlPanel exists, but is hidden. Detaching its contents permits to have a cleaner DOM. Also remove the oe_form_dirty class on the buttons in the FormView, as this class is only used on the view itself. Side changes: * base_import: import.js: Extend render_buttons function to be compliant with the new buttons rendering logic * board: dashboard.js: Set flag search_view to True as the searchview is needed for the Views displayed in the Dashboard to retrieve the records to display. Necessary since we do no more construct the searchview when this is set to false * google_drive: drive.js, share: share.js: Module extending the Sidebar widget often add their own buttons by extending the start(), which is called each time the Widget is appended to the DOM. With our new design, this could be done in start() anymore as it should be done only one. It is now done in init() instead.
2015-03-20[IMP] Web: views.js, view_editor.js: DebugManagerAaron Bohy
Creation of a widget for the DebugManager and move it from the ControlPanel to the Systray. Refactoring of the widget to improve/facilitate the way of adding options in the DebugManager as the view_editor does. Add a do_action() function in the WebClient that forwards the action to the main ActionManager so that widget that are not in the scope of the ActionManager (e.g. Menu) can performed actions as well. Note: The DebugManager is currently in the Systray but it will finally be moved to a dedicated spot above the ControlPanel.
2015-03-20[IMP] Web et al.: unique main ControlPanelAaron Bohy
A unique main ControlPanel is instantiated by the ActionManager and it is updated each time the state changes (i.e. when an action is performed on the ActionManager or when switch_mode() is called on the ViewManager). Introduction of State classes to facilitate the way of restoring previously rendered states in ControlPanel. The notion of widgets previously used in the ActionManager is now encapsulated in the notion of states. The search() function has been moved from ControlPanel to ViewManager as it makes more sense like this. The ViewManager doesn't have the reference to the ControlPanel but rather communicate with it through a dedicated bus. Some refactoring has been done on the ControlPanel as well so that it doesn't need to know the ActionManager and the current Action anymore (it communicates with the AM with events, and it updates itself using information passed in arguments). Improves the way the ViewManager requests the ControlPanel to instantiate a SearchView, and how it waits for this SearchView to be corretly loaded. Move back the views logic to the ViewManager which directly asks the ControlPanel to render the buttons and switch-buttons areas with the views passed in arguments. Removes option replace_breadcrumb in push_state() of ActionManager as it is not used. Side changes: * Account: account_widget.js: Adapt code to retrieve the current state of the ActionManager. Required due to the introduction of State classes that encapsulate the notions of widgets and inner_widget in the ActionManager. * Board: dashboard.js: Some refactoring to adapt the code according to the new Widgets structure. Several dependencies (e.g. searchview, action) were unnecessary. Do not append the "add to dashboard" option to the Favorite menu if there is no ViewManager available (e.g. in Messaging) instead of hidding it with a CSS rule, as a ViewManager required to retrieve the active_view. * Google_spreadsheet: search.js: Change the way to retrieve the list_view_id s.t. it does not rely on parent of the SearchView anymore. * Web: search.js: Change the way to retrieve the title in search.js for Favorites s.t. it does not rely on the parent of the SearchView anymore. Doing so, the ControlPanel does not need the title attribute anymore.
2015-03-20[IMP] Web et al.: ControlPanel extracted from ViewManagerAaron Bohy
The ControlPanel is still instantiated by the ViewManager. Changes details: * web: views.js: Code related to views header is extracted from the ViewManager to a new Widget named ControlPanel. Also uses the headless flag to tell the inner view not to put its buttons (use case: kanban) or pager (use case: list) in the header as it is hidden. * web: view_form.js, base.xml: Uses the headless flag at initialization of the One2ManyViewManager widget instead of extending the ViewManager template (which doesn't handle the header anymore). * web: view_list.js: Test on this.options.$pager instead of this.options.$buttons when dealing with pager. Note: the behavior for list view is unchanged and has a bug. If there are more then 80 records to display, only the 80th first are display, and as there is no pager, there is no way to see the remaining ones. A fix for this would be to use a light ControlPanel in One2Many views as well. With this, there won't be duplicated .oe-'view'-buttons/sidebar/pager anymore. * web: view_graph.js, view_pivot.js: Only render buttons in non-headless mode * web_dashboard: dashboard.js: Fix some references that were broken with ControlPanel extraction * web_view_editor: web_view_editor.js: Extend ControlPanel instead of ViewManager * Changes in selector of ControlPanel elements in several addons: * base_import * mail * web