Class: Hatemile::Implementation::AccessibleFormImplementation
- Inherits:
-
AccessibleForm
- Object
- AccessibleForm
- Hatemile::Implementation::AccessibleFormImplementation
- Defined in:
- lib/hatemile/implementation/accessible_form_implementation.rb
Overview
The AccessibleFormImplementation class is official implementation of AccessibleForm interface.
Constant Summary collapse
- ID_SCRIPT_LIST_VALIDATION_FIELDS =
The ID of script element that contains the list of IDs of fields with validation.
'hatemile-scriptlist-validation-fields'.freeze
- ID_SCRIPT_EXECUTE_VALIDATION =
The ID of script element that execute validations on fields.
'hatemile-validation-script'.freeze
- REQUIRED_FIELDS_LIST =
The client-site required fields list.
'required_fields'.freeze
- PATTERN_FIELDS_LIST =
The client-site pattern fields list.
'pattern_fields'.freeze
- LIMITED_FIELDS_LIST =
The client-site fields with length list.
'fields_with_length'.freeze
- RANGE_FIELDS_LIST =
The client-site range fields list.
'range_fields'.freeze
- WEEK_FIELDS_LIST =
The client-site week fields list.
'week_fields'.freeze
- MONTH_FIELDS_LIST =
The client-site month fields list.
'month_fields'.freeze
- DATETIME_FIELDS_LIST =
The client-site datetime fields list.
'datetime_fields'.freeze
- TIME_FIELDS_LIST =
The client-site time fields list.
'time_fields'.freeze
- DATE_FIELDS_LIST =
The client-site date fields list.
'date_fields'.freeze
- EMAIL_FIELDS_LIST =
The client-site email fields list.
'email_fields'.freeze
- URL_FIELDS_LIST =
The client-site URL fields list.
'url_fields'.freeze
Instance Method Summary collapse
-
#initialize(parser) ⇒ AccessibleFormImplementation
constructor
Initializes a new object that manipulate the accessibility of the forms of parser.
- #mark_all_autocomplete_fields ⇒ Object
- #mark_all_invalid_fields ⇒ Object
- #mark_all_range_fields ⇒ Object
- #mark_all_required_fields ⇒ Object
- #mark_autocomplete_field(autocomplete_field) ⇒ Object
- #mark_invalid_field(field) ⇒ Object
- #mark_range_field(range_field) ⇒ Object
- #mark_required_field(required_field) ⇒ Object
Constructor Details
#initialize(parser) ⇒ AccessibleFormImplementation
Initializes a new object that manipulate the accessibility of the forms of parser.
239 240 241 242 243 244 245 246 247 248 249 250 |
# File 'lib/hatemile/implementation/accessible_form_implementation.rb', line 239 def initialize(parser) Hatemile::Helper.require_not_nil(parser) Hatemile::Helper.require_valid_type( parser, Hatemile::Util::Html::HTMLDOMParser ) @parser = parser @id_generator = Hatemile::Util::IDGenerator.new('form') @scripts_added = false @script_list_fields_with_validation = nil end |
Instance Method Details
#mark_all_autocomplete_fields ⇒ Object
312 313 314 315 316 317 318 319 320 321 322 |
# File 'lib/hatemile/implementation/accessible_form_implementation.rb', line 312 def mark_all_autocomplete_fields elements = @parser.find( 'input[autocomplete],textarea[autocomplete],form[autocomplete] ' \ 'input,form[autocomplete] textarea,[list],[form]' ).list_results elements.each do |element| if Hatemile::Util::CommonFunctions.is_valid_element?(element) mark_autocomplete_field(element) end end end |
#mark_all_invalid_fields ⇒ Object
368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 |
# File 'lib/hatemile/implementation/accessible_form_implementation.rb', line 368 def mark_all_invalid_fields fields = @parser.find( '[required],input[pattern],input[minlength],input[maxlength],' \ 'textarea[minlength],textarea[maxlength],input[type=week],' \ 'input[type=month],input[type=datetime-local],' \ 'input[type=datetime],input[type=time],input[type=date],' \ 'input[type=number],input[type=range],input[type=email],' \ 'input[type=url],[aria-required=true],input[aria-valuemin],' \ 'input[aria-valuemax]' ).list_results fields.each do |field| if Hatemile::Util::CommonFunctions.is_valid_element?(field) mark_invalid_field(field) end end end |
#mark_all_range_fields ⇒ Object
291 292 293 294 295 296 297 298 |
# File 'lib/hatemile/implementation/accessible_form_implementation.rb', line 291 def mark_all_range_fields range_fields = @parser.find('[min],[max]').list_results range_fields.each do |range_field| if Hatemile::Util::CommonFunctions.is_valid_element?(range_field) mark_range_field(range_field) end end end |
#mark_all_required_fields ⇒ Object
262 263 264 265 266 267 268 269 |
# File 'lib/hatemile/implementation/accessible_form_implementation.rb', line 262 def mark_all_required_fields required_fields = @parser.find('[required]').list_results required_fields.each do |required_field| if Hatemile::Util::CommonFunctions.is_valid_element?(required_field) mark_required_field(required_field) end end end |
#mark_autocomplete_field(autocomplete_field) ⇒ Object
302 303 304 305 306 307 308 |
# File 'lib/hatemile/implementation/accessible_form_implementation.rb', line 302 def mark_autocomplete_field(autocomplete_field) aria_autocomplete = get_aria_autocomplete(autocomplete_field) return if aria_autocomplete.nil? autocomplete_field.set_attribute('aria-autocomplete', aria_autocomplete) end |
#mark_invalid_field(field) ⇒ Object
326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 |
# File 'lib/hatemile/implementation/accessible_form_implementation.rb', line 326 def mark_invalid_field(field) if field.has_attribute?('required') || ( field.has_attribute?('aria-required') && field.get_attribute('aria-required').casecmp('true').zero? ) validate(field, REQUIRED_FIELDS_LIST) end validate(field, PATTERN_FIELDS_LIST) if field.has_attribute?('pattern') if field.has_attribute?('minlength') || field.has_attribute?('maxlength') validate(field, LIMITED_FIELDS_LIST) end if field.has_attribute?('aria-valuemin') || field.has_attribute?('aria-valuemax') validate(field, RANGE_FIELDS_LIST) end return unless field.has_attribute?('type') type_field = field.get_attribute('type').downcase if type_field == 'week' validate(field, WEEK_FIELDS_LIST) elsif type_field == 'month' validate(field, MONTH_FIELDS_LIST) elsif %w[datetime-local datetime].include?(type_field) validate(field, DATETIME_FIELDS_LIST) elsif type_field == 'time' validate(field, TIME_FIELDS_LIST) elsif type_field == 'date' validate(field, DATE_FIELDS_LIST) elsif %w[number range].include?(type_field) validate(field, RANGE_FIELDS_LIST) elsif type_field == 'email' validate(field, EMAIL_FIELDS_LIST) elsif type_field == 'url' validate(field, AccessibleFormImplementation.URL_FIELDS_LIST) end end |
#mark_range_field(range_field) ⇒ Object
273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 |
# File 'lib/hatemile/implementation/accessible_form_implementation.rb', line 273 def mark_range_field(range_field) if range_field.has_attribute?('min') range_field.set_attribute( 'aria-valuemin', range_field.get_attribute('min') ) end return unless range_field.has_attribute?('max') range_field.set_attribute( 'aria-valuemax', range_field.get_attribute('max') ) end |
#mark_required_field(required_field) ⇒ Object
254 255 256 257 258 |
# File 'lib/hatemile/implementation/accessible_form_implementation.rb', line 254 def mark_required_field(required_field) return unless required_field.has_attribute?('required') required_field.set_attribute('aria-required', 'true') end |