openvibers/openvibe.exchange Commits
Search: the default engines follow the chosen kind (#215)
Changes
@@@ -62,7 +62,9 @@ function searchPage({ engines = [], found = [], query = {} } = {}) {}).join('');const kind = KINDS.some(([k]) => k === query.kind) ? query.kind : 'web';// The engines in each list grouped by what they find; the first two that work are picked unless the search named some.-- const ready = engines.filter((e) => e.available !== false);++ // The first two that work for the chosen kind (Web picked two picture engines when those came first in AI's list).++ const forKind = (e) => !Array.isArray(e.kinds) || e.kinds.includes(kind);++ const ready = [...engines.filter((e) => e.available !== false && forKind(e)), ...engines.filter((e) => e.available !== false && !forKind(e))];const defaults = [query.first || (ready[0] || engines[0] || {}).id, query.second || (ready[1] || engines[1] || {}).id];const pick = (field, label, chosen) => `<label class="xs-field"><span>${label}</span><select name="${field}">${KINDS.map(([k, l]) => {const rows = engines.filter((e) => (Array.isArray(e.kinds) ? e.kinds[0] === k : k === 'web'));@@@ -10,4 +10,9 @@ assert.ok(html.includes('Source and usage'));assert.ok(html.includes('Reuse rights unknown') === false);assert.ok(html.includes('2400 × 1600 px'));assert.ok(html.includes('name="color"') && html.includes('name="after"'));++// The default engines follow the kind: Web picks the first two working web engines even when picture engines come first.++const E = (id, kinds, available = true) => ({ id, kinds, available, price_per_1000: 0 });++const web = searchPage({ engines: [E('searxng', ['web'], false), E('openverse', ['images']), E('commons', ['images']), E('openvibe', ['web']), E('deepseek', ['web'])] });++assert.match(web, /name="first">[\s\S]*?value="openvibe" selected/);++assert.match(web, /name="second">[\s\S]*?value="deepseek" selected/);process.stdout.write('image search view passed\n');
@@ -62,7 +62,9 @@ function searchPage({ engines = [], found = [], query = {} } = {}) {
@@ -62,7 +62,9 @@ function searchPage({ engines = [], found = [], query = {} } = {}) {
}).join('');
}).join('');
const kind = KINDS.some(([k]) => k === query.kind) ? query.kind : 'web';
const kind = KINDS.some(([k]) => k === query.kind) ? query.kind : 'web';
// The engines in each list grouped by what they find; the first two that work are picked unless the search named some.
// The engines in each list grouped by what they find; the first two that work are picked unless the search named some.
- const ready = engines.filter((e) => e.available !== false);
+ // The first two that work for the chosen kind (Web picked two picture engines when those came first in AI's list).
+ const forKind = (e) => !Array.isArray(e.kinds) || e.kinds.includes(kind);
+ const ready = [...engines.filter((e) => e.available !== false && forKind(e)), ...engines.filter((e) => e.available !== false && !forKind(e))];
const defaults = [query.first || (ready[0] || engines[0] || {}).id, query.second || (ready[1] || engines[1] || {}).id];
const defaults = [query.first || (ready[0] || engines[0] || {}).id, query.second || (ready[1] || engines[1] || {}).id];
const pick = (field, label, chosen) => `<label class="xs-field"><span>${label}</span><select name="${field}">${KINDS.map(([k, l]) => {
const pick = (field, label, chosen) => `<label class="xs-field"><span>${label}</span><select name="${field}">${KINDS.map(([k, l]) => {
const rows = engines.filter((e) => (Array.isArray(e.kinds) ? e.kinds[0] === k : k === 'web'));
const rows = engines.filter((e) => (Array.isArray(e.kinds) ? e.kinds[0] === k : k === 'web'));
@@ -10,4 +10,9 @@ assert.ok(html.includes('Source and usage'));
@@ -10,4 +10,9 @@ assert.ok(html.includes('Source and usage'));
assert.ok(html.includes('Reuse rights unknown') === false);
assert.ok(html.includes('Reuse rights unknown') === false);
assert.ok(html.includes('2400 × 1600 px'));
assert.ok(html.includes('2400 × 1600 px'));
assert.ok(html.includes('name="color"') && html.includes('name="after"'));
assert.ok(html.includes('name="color"') && html.includes('name="after"'));
+// The default engines follow the kind: Web picks the first two working web engines even when picture engines come first.
+const E = (id, kinds, available = true) => ({ id, kinds, available, price_per_1000: 0 });
+const web = searchPage({ engines: [E('searxng', ['web'], false), E('openverse', ['images']), E('commons', ['images']), E('openvibe', ['web']), E('deepseek', ['web'])] });
+assert.match(web, /name="first">[\s\S]*?value="openvibe" selected/);
+assert.match(web, /name="second">[\s\S]*?value="deepseek" selected/);
process.stdout.write('image search view passed\n');
process.stdout.write('image search view passed\n');