From c3c510db68302318fc4f56fb492912bdfcb1c5b2 Mon Sep 17 00:00:00 2001 From: Jesse Renee Beach Date: Tue, 26 Nov 2019 11:53:20 -0800 Subject: [PATCH] Fix mapping for the HTML select element --- flow/aria.js | 5 +- scripts/breakUpAriaJSON.js | 3 + scripts/roles.json | 54 +++++++++++++++++- src/etc/roles/abstract/selectRole.js | 83 +++++++++++++++++++++++++++- 4 files changed, 142 insertions(+), 3 deletions(-) diff --git a/flow/aria.js b/flow/aria.js index ef4b831b..54d33a67 100644 --- a/flow/aria.js +++ b/flow/aria.js @@ -312,5 +312,8 @@ type ARIARoleRelationConcept = { type ARIARoleRelationConceptAttribute = { name: string, - value?: string, + value?: string | number, + // Make these explicit. These values represent quirks of the mapping betweent + // ARIA and other semantic ontological systems. + constraints?: Array<'unset' | '>1'>, }; diff --git a/scripts/breakUpAriaJSON.js b/scripts/breakUpAriaJSON.js index 4c9c83ca..f346f8bc 100755 --- a/scripts/breakUpAriaJSON.js +++ b/scripts/breakUpAriaJSON.js @@ -94,6 +94,9 @@ function triageValue(value, depth = 0) { case 'string': output = output.concat(`\'${value}\'`); break; + case 'number': + output = output.concat(`${value}`); + break; default: output.push('null'); } diff --git a/scripts/roles.json b/scripts/roles.json index caf038a2..9e0ce6e9 100644 --- a/scripts/roles.json +++ b/scripts/roles.json @@ -4038,7 +4038,59 @@ "abstract": true, "childrenPresentational": false, "baseConcepts": [], - "relatedConcepts": [] + "relatedConcepts": [{ + "module": "ARIA", + "concept": { + "name": "combobox", + "attributes": [{ + "name": "multiple", + "constraints": ["unset"] + }, { + "name": "size", + "constraints": ["unset"] + }] + } + }, { + "module": "ARIA", + "concept": { + "name": "combobox", + "attributes": [{ + "name": "multiple", + "constraints": ["unset"] + }, { + "name": "size", + "value": 1 + }] + } + }, { + "module": "ARIA", + "concept": { + "name": "listbox", + "attributes": [{ + "name": "multiple" + }] + } + }, { + "module": "ARIA", + "concept": { + "name": "listbox", + "attributes": [{ + "name": "multiple" + }, { + "name": "size", + "constraints": [">1"] + }] + } + }, { + "module": "ARIA", + "concept": { + "name": "listbox", + "attributes": [{ + "name": "size", + "constraints": [">1"] + }] + } + }] }, "separator": { "superClass": ["structure"], diff --git a/src/etc/roles/abstract/selectRole.js b/src/etc/roles/abstract/selectRole.js index 4e21f1ab..9df46c9e 100644 --- a/src/etc/roles/abstract/selectRole.js +++ b/src/etc/roles/abstract/selectRole.js @@ -12,7 +12,88 @@ const selectRole: ARIARoleDefinition = { props: { 'aria-orientation': null, }, - relatedConcepts: [], + relatedConcepts: [ + { + module: 'ARIA', + concept: { + name: 'combobox', + attributes: [ + { + name: 'multiple', + constraints: [ + 'unset', + ], + }, + { + name: 'size', + constraints: [ + 'unset', + ], + }, + ], + }, + }, + { + module: 'ARIA', + concept: { + name: 'combobox', + attributes: [ + { + name: 'multiple', + constraints: [ + 'unset', + ], + }, + { + name: 'size', + value: 1, + }, + ], + }, + }, + { + module: 'ARIA', + concept: { + name: 'listbox', + attributes: [ + { + name: 'multiple', + }, + ], + }, + }, + { + module: 'ARIA', + concept: { + name: 'listbox', + attributes: [ + { + name: 'multiple', + }, + { + name: 'size', + constraints: [ + '>1', + ], + }, + ], + }, + }, + { + module: 'ARIA', + concept: { + name: 'listbox', + attributes: [ + { + name: 'size', + constraints: [ + '>1', + ], + }, + ], + }, + }, + ], requireContextRole: [], requiredContextRole: [], requiredOwnedElements: [],