Browse Source

[MIG] web_listview_range_select: Migration to 12.0

[FIX] Firefox shift click

[REM] Removed unnecessary configure section

[ADD] Roadmap with new features
pull/1054/head
tarteo 6 years ago
parent
commit
6ec6e6aeba
  1. 71
      web_listview_range_select/README.rst
  2. 2
      web_listview_range_select/__manifest__.py
  3. 2
      web_listview_range_select/readme/CONTRIBUTORS.rst
  4. 1
      web_listview_range_select/readme/DESCRIPTION.rst
  5. 3
      web_listview_range_select/readme/ROADMAP.rst
  6. 5
      web_listview_range_select/readme/USAGE.rst
  7. 91
      web_listview_range_select/static/src/js/web_listview_range_select.js

71
web_listview_range_select/README.rst

@ -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
:alt: Try me on Runbot
:target: https://runbot.odoo-community.org/runbot/162/11.0
Known issues / Roadmap
======================
* 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
<https://github.com/OCA/162/issues>`_. In case of trouble, please
check there if your issue has already been reported. If you spotted it first,
help us smashing it by providing a detailed and welcomed feedback.
Bugs are tracked on `GitHub Issues <https://github.com/OCA/web/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
`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.

2
web_listview_range_select/__manifest__.py

@ -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',

2
web_listview_range_select/readme/CONTRIBUTORS.rst

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

1
web_listview_range_select/readme/DESCRIPTION.rst

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

3
web_listview_range_select/readme/ROADMAP.rst

@ -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.

5
web_listview_range_select/readme/USAGE.rst

@ -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.

91
web_listview_range_select/static/src/js/web_listview_range_select.js

@ -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 res = this._super.apply(this, arguments);
this.$table = this.$el.find('.o_list_view');
return res;
},
_getRangeSelection: function() {
var self = this; var self = this;
var result = {ids: [], records: []};
//Get start and end
// 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;
if (checked && $(el).prop('checked')) {
if (start == null)
var checked = self._range_history.indexOf(id) !== -1;
if (checked && $(el).is(':checked')) {
if (start == null) {
start = i; start = i;
else
} else {
end = i; end = i;
} }
}
}); });
var new_range = this._getSelectionByRange(start, end);
//Preserve already checked
this.$el.find('td.o_list_record_selector input:checked').closest('tr').each(function (i, el) {
if (i == start || i == end) return;
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;
var current_selection = this.selection;
current_selection = _.uniq(current_selection.concat(new_range));
return current_selection;
}, },
get_range_selection: function(start, end) {
var result = {ids: [], records: []};
_getSelectionByRange: function(start, end) {
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.records.push(el.attributes);
result.push(record_id);
} else if(start != null && end == null && start == i) { } else if(start != null && end == null && start == i) {
result.ids.push(record_id);
result.records.push(el.attributes);
result.push(record_id);
} }
}); });
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'))
self.push_range_history(el.closest('tr').data('id'));
var res = this._super(event);
// 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
var selection = self._get_range_selection();
this.$el.find('td.o_list_record_selector input').closest('tr').each(function () {
//Check input visual
// Get selection
var selection = this._getRangeSelection();
var $rows = this.$el.find('td.o_list_record_selector input').closest('tr');
$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
$(self).trigger(
'selected', [selection.ids, selection.records, true]);
// Update selection internally
this._updateSelection();
this._deselectTable();
} }
return res; return res;
} }

Loading…
Cancel
Save