3
0
Fork 0

[MIG] web_listview_range_select: Migration to 12.0

[FIX] Firefox shift click

[REM] Removed unnecessary configure section

[ADD] Roadmap with new features
12.0
tarteo 2018-10-01 15:34:15 +02:00
parent 086c2a8b8d
commit 6ec6e6aeba
7 changed files with 114 additions and 63 deletions

View File

@ -1,17 +1,36 @@
.. image:: https://img.shields.io/badge/license-AGPL--3-blue.png
:target: https://www.gnu.org/licenses/agpl
:alt: License: AGPL-3
==================== ====================
List Range Selection List Range Selection
==================== ====================
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github
:target: https://github.com/OCA/web/tree/12.0/web_listview_range_select
:alt: OCA/web
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/web-12-0/web-12-0-web_listview_range_select
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/162/12.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
Enables selecting a range of records using the shift key. Enables selecting a range of records using the shift key.
Configuration **Table of contents**
=============
No configuration is needed. .. contents::
:local:
Usage Usage
===== =====
@ -22,38 +41,50 @@ To use this module, you need to:
#. hold shift and click another record; #. hold shift and click another record;
#. you can repeat this operation as many times as you want. #. you can repeat this operation as many times as you want.
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas Known issues / Roadmap
:alt: Try me on Runbot ======================
:target: https://runbot.odoo-community.org/runbot/162/11.0
* Allow to click on the whole line (not just the checkbox) to select a row.
* Enable the same behaviour with Ctrl button.
* Shift and drag to select rows.
Bug Tracker Bug Tracker
=========== ===========
Bugs are tracked on `GitHub Issues Bugs are tracked on `GitHub Issues <https://github.com/OCA/web/issues>`_.
<https://github.com/OCA/162/issues>`_. In case of trouble, please In case of trouble, please check there if your issue has already been reported.
check there if your issue has already been reported. If you spotted it first, If you spotted it first, help us smashing it by providing a detailed and welcomed
help us smashing it by providing a detailed and welcomed feedback. `feedback <https://github.com/OCA/web/issues/new?body=module:%20web_listview_range_select%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits Credits
======= =======
Authors
~~~~~~~
* Onestein
Contributors Contributors
------------ ~~~~~~~~~~~~
* Dennis Sluijk <d.sluijk@onestein.nl> * Dennis Sluijk <d.sluijk@onestein.nl>
* Aldo Soares <soares_aldo@hotmail.com> * Aldo Soares <soares_aldo@hotmail.com>
Maintainer Maintainers
---------- ~~~~~~~~~~~
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png .. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association :alt: Odoo Community Association
:target: https://odoo-community.org :target: https://odoo-community.org
This module is maintained by the OCA.
OCA, or the Odoo Community Association, is a nonprofit organization whose OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and mission is to support the collaborative development of Odoo features and
promote its widespread use. promote its widespread use.
To contribute to this module, please visit https://odoo-community.org. This module is part of the `OCA/web <https://github.com/OCA/web/tree/12.0/web_listview_range_select>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

@ -6,7 +6,7 @@
'summary': """ 'summary': """
Enables selecting a range of records using the shift key Enables selecting a range of records using the shift key
""", """,
'version': '11.0.1.0.0', 'version': '12.0.1.0.0',
'category': 'Web', 'category': 'Web',
'author': 'Onestein,Odoo Community Association (OCA)', 'author': 'Onestein,Odoo Community Association (OCA)',
'website': 'https://github.com/oca/web', 'website': 'https://github.com/oca/web',

View File

@ -0,0 +1,2 @@
* Dennis Sluijk <d.sluijk@onestein.nl>
* Aldo Soares <soares_aldo@hotmail.com>

View File

@ -0,0 +1 @@
Enables selecting a range of records using the shift key.

View File

@ -0,0 +1,3 @@
* Allow to click on the whole line (not just the checkbox) to select a row.
* Enable the same behaviour with Ctrl button.
* Shift and drag to select rows.

View File

@ -0,0 +1,5 @@
To use this module, you need to:
#. click a record;
#. hold shift and click another record;
#. you can repeat this operation as many times as you want.

View File

@ -9,80 +9,89 @@ odoo.define('web_listview_range_select', function (require) {
ListRenderer.include({ ListRenderer.include({
_range_history: [], _range_history: [],
_get_range_selection: function() { _render: function() {
var self = this; var res = this._super.apply(this, arguments);
var result = {ids: [], records: []}; this.$table = this.$el.find('.o_list_view');
return res;
},
//Get start and end _getRangeSelection: function() {
var self = this;
// Get start and end
var start = null, var start = null,
end = null; end = null;
this.$el.find('td.o_list_record_selector input').each(function (i, el) { this.$el.find('td.o_list_record_selector input').each(function (i, el) {
var id = $(el).closest('tr').data('id'); var id = $(el).closest('tr').data('id');
var checked = self._range_history.indexOf(id) != -1; var checked = self._range_history.indexOf(id) !== -1;
if (checked && $(el).prop('checked')) { if (checked && $(el).is(':checked')) {
if (start == null) if (start == null) {
start = i; start = i;
else } else {
end = i; end = i;
} }
}
}); });
var new_range = this._getSelectionByRange(start, end);
//Preserve already checked var current_selection = this.selection;
this.$el.find('td.o_list_record_selector input:checked').closest('tr').each(function (i, el) { current_selection = _.uniq(current_selection.concat(new_range));
if (i == start || i == end) return; return current_selection;
var record_id = $(el).data('id')
result.ids.push(record_id);
result.records.push(el.attributes);
});
var new_range = this.get_range_selection(start, end);
result.records = result.records.concat(new_range.records);
result.ids = result.ids.concat(new_range.ids);
return result;
}, },
get_range_selection: function(start, end) { _getSelectionByRange: function(start, end) {
var result = {ids: [], records: []}; var result = [];
this.$el.find('td.o_list_record_selector input').closest('tr').each(function (i, el) { this.$el.find('td.o_list_record_selector input').closest('tr').each(function (i, el) {
var record_id = $(el).data('id'); var record_id = $(el).data('id');
if (start != null && end != null && i >= start && i <= end) { if (start != null && end != null && i >= start && i <= end) {
result.ids.push(record_id); result.push(record_id);
result.records.push(el.attributes);
} else if(start != null && end == null && start == i) { } else if(start != null && end == null && start == i) {
result.ids.push(record_id); result.push(record_id);
result.records.push(el.attributes);
} }
}); });
return result; return result;
}, },
push_range_history: function(id) { _pushRangeHistory: function(id) {
if (this._range_history.length === 2) {
this._range_history = [];
}
this._range_history.push(id); this._range_history.push(id);
if (this._range_history.length == 3) },
this._range_history.shift();
_deselectTable: function() {
// This is needed because the checkboxes are not real checkboxes.
window.getSelection().removeAllRanges();
}, },
_onSelectRecord: function(event) { _onSelectRecord: function(event) {
var res = this._super(event);
var self = this;
var el = $(event.currentTarget); var el = $(event.currentTarget);
if (el.find('input').prop('checked')) var res = this._super(event);
self.push_range_history(el.closest('tr').data('id'));
// Firefox shift click fix
if (/firefox/i.test(navigator.userAgent) && event.shiftKey) {
el.find('input').prop('checked', !el.find('input').prop('checked'));
}
if (el.find('input').prop('checked')) {
this._pushRangeHistory(el.closest('tr').data('id'));
}
if (event.shiftKey) { if (event.shiftKey) {
//Get selection // Get selection
var selection = self._get_range_selection(); var selection = this._getRangeSelection();
this.$el.find('td.o_list_record_selector input').closest('tr').each(function () { var $rows = this.$el.find('td.o_list_record_selector input').closest('tr');
//Check input visual $rows.each(function () {
// Check input visual
var record_id = $(this).data('id'); var record_id = $(this).data('id');
if (selection.ids.indexOf(record_id) != -1) if (selection.indexOf(record_id) !== -1) {
$(this).find('td.o_list_record_selector input').prop('checked', true); $(this).find('td.o_list_record_selector input').prop('checked', true);
}
}); });
//Check input internal // Update selection internally
$(self).trigger( this._updateSelection();
'selected', [selection.ids, selection.records, true]); this._deselectTable();
} }
return res; return res;
} }