Skip to content
This repository was archived by the owner on Jul 29, 2022. It is now read-only.

Commit 1b633eb

Browse files
michal-juranyiNicolasCARPi
authored andcommitted
Accept list of tuples as items of select (#209)
* Accept list of tuples as items of select * Add tests for various formats of input data Signed-off-by: Michal Juranyi <michal.juranyi@vnet.eu>
1 parent 8accf58 commit 1b633eb

2 files changed

Lines changed: 75 additions & 2 deletions

File tree

src/jquery.jeditable.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -683,9 +683,21 @@ var _supportInType = function (type) {
683683
// Create tuples for sorting
684684
var tuples = [];
685685
var key;
686-
for (key in json) {
687-
tuples.push([key, json[key]]); // Store: [key, value]
686+
687+
if (Array.isArray(json) && json.every(Array.isArray)) {
688+
// Process list of tuples
689+
tuples = json // JSON already contains list of [key, value]
690+
json = {};
691+
tuples.forEach(function(e) {
692+
json[e[0]] = e[1]; // Recreate json object to comply with following code
693+
});
694+
} else {
695+
// Process object
696+
for (key in json) {
697+
tuples.push([key, json[key]]); // Store: [key, value]
698+
}
688699
}
700+
689701
if (settings.sortselectoptions) {
690702
// sort it
691703
tuples.sort(function (a, b) {

tests/tests.js

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,67 @@ QUnit.test('Default: Sorting select options', function(assert) {
6565

6666
assert.deepEqual(optionsList, ['Letter Disk', 'Letter E', 'Letter F'], 'It does sort the given options list');
6767
});
68+
QUnit.module('select-boxes input data');
69+
QUnit.test('List of tuples', function(assert) {
70+
elem.append('<span id="select-tester"></span>');
71+
var e = $('#select-tester', elem);
72+
73+
var test_data = [['E', 'Letter E'], ['F', 'Letter F'], ['D', 'Letter Disk']];
74+
e.editable('http://bla', {
75+
type: 'select',
76+
data: test_data
77+
});
78+
79+
e.click();
80+
81+
var optionsList = [];
82+
e.find('option').each(function(name, val) { optionsList.push([val.value, val.text]); });
83+
assert.deepEqual(optionsList, test_data, 'Options keep sorted as defined in input');
84+
});
85+
QUnit.test('List of strings', function(assert) {
86+
elem.append('<span id="select-tester"></span>');
87+
var e = $('#select-tester', elem);
88+
89+
var test_data = ['E', 'F', 'D'];
90+
var sort = Math.random() > 0.5;
91+
e.editable('http://bla', {
92+
type: 'select',
93+
data: test_data,
94+
sortselectoptions: sort
95+
});
96+
97+
e.click();
98+
99+
var optionsList = [];
100+
var expected_result = [['0', 'E'],['1', 'F'], ['2', 'D']];
101+
if (sort) {
102+
expected_result.sort(function(a, b) {return a[1] > b[1];});
103+
}
104+
e.find('option').each(function(name, val) { optionsList.push([val.value, val.text]); });
105+
assert.deepEqual(optionsList, expected_result, 'Options get auto assigned integer values in order of input and options are sorted by label based on sortselectoptions option');
106+
});
107+
QUnit.test('Object', function(assert) {
108+
elem.append('<span id="select-tester"></span>');
109+
var e = $('#select-tester', elem);
110+
111+
var test_data = {'E': 'Letter E', 'F': 'Letter F', 'D': 'Letter Disk'};
112+
var sort = Math.random() > 0.5;
113+
e.editable('http://bla', {
114+
type: 'select',
115+
data: test_data,
116+
sortselectoptions: sort
117+
});
118+
119+
e.click();
120+
121+
var optionsList = [];
122+
var expected_result = [['E', 'Letter E'], ['F', 'Letter F'], ['D', 'Letter Disk']];
123+
if (sort) {
124+
expected_result.sort(function(a, b) {return a[1] > b[1];});
125+
}
126+
e.find('option').each(function(name, val) { optionsList.push([val.value, val.text]); });
127+
assert.deepEqual(optionsList, expected_result, 'Options are sorted either in order of object definition or by label depending on sortselectoptions option');
128+
});
68129
QUnit.module('select-boxes setting selected');
69130
QUnit.test('Explicitly setting a selected option', function(assert) {
70131
elem.append( '<span id="selected-tester">Letter F</span>' );

0 commit comments

Comments
 (0)