Просмотр исходного кода

Ticket #5579 - Accessibility: area-labels in form inputs.

AntonLV 2 месяцев назад
Родитель
Сommit
d6e01f0ff1

+ 1 - 0
install/sql/system.sql

@@ -3948,6 +3948,7 @@ CREATE TABLE IF NOT EXISTS `sys_form_inputs` (
   `caption` varchar(255) NOT NULL,
   `info` varchar(255) NOT NULL,
   `help` varchar(255) NOT NULL,
+  `area_label` varchar(255) NOT NULL DEFAULT '',
   `icon` text NOT NULL,
   `required` tinyint(4) NOT NULL DEFAULT '0',
   `unique` tinyint(4) NOT NULL DEFAULT '0',

+ 14 - 14
modules/boonex/english/data/langs/system/en.xml

@@ -787,16 +787,16 @@
 	<string name="_adm_form_btn_forms_cancel"><![CDATA[Cancel]]></string>
 	<string name="_adm_form_btn_forms_edit"><![CDATA[Edit form]]></string>
 	<string name="_adm_form_btn_forms_save"><![CDATA[Save]]></string>
-  <string name="_adm_form_btn_categories_cancel"><![CDATA[Cancel]]></string>
-  <string name="_adm_form_btn_categories_submit"><![CDATA[Submit]]></string>
+        <string name="_adm_form_btn_categories_cancel"><![CDATA[Cancel]]></string>
+        <string name="_adm_form_btn_categories_submit"><![CDATA[Submit]]></string>
         <string name="_adm_form_btn_labels_add"><![CDATA[Add]]></string>
         <string name="_adm_form_btn_labels_back"><![CDATA[Back]]></string>
         <string name="_adm_form_btn_labels_cancel"><![CDATA[Cancel]]></string>
         <string name="_adm_form_btn_labels_submit"><![CDATA[Submit]]></string>
-  <string name="_adm_form_btn_badges_add"><![CDATA[Add new badge]]></string>
-  <string name="_adm_form_btn_badges_delete"><![CDATA[Delete]]></string>
-  <string name="_adm_form_btn_categories_add"><![CDATA[Add]]></string>
-  <string name="_adm_form_btn_categories_delete"><![CDATA[Delete]]></string>
+        <string name="_adm_form_btn_badges_add"><![CDATA[Add new badge]]></string>
+        <string name="_adm_form_btn_badges_delete"><![CDATA[Delete]]></string>
+        <string name="_adm_form_btn_categories_add"><![CDATA[Add]]></string>
+        <string name="_adm_form_btn_categories_delete"><![CDATA[Delete]]></string>
 	<string name="_adm_form_btn_pre_lists_add"><![CDATA[Add]]></string>
 	<string name="_adm_form_btn_pre_lists_cancel"><![CDATA[Cancel]]></string>
 	<string name="_adm_form_btn_pre_lists_create"><![CDATA[Add New List]]></string>
@@ -809,13 +809,11 @@
 	<string name="_adm_form_btn_pre_values_create"><![CDATA[Add New Item]]></string>
 	<string name="_adm_form_btn_pre_values_delete_item"><![CDATA[Delete Item]]></string>
 	<string name="_adm_form_btn_pre_values_edit_item"><![CDATA[Edit Item]]></string>
-  
-  <string name="_adm_form_btn_reports_check_in"><![CDATA[Check in]]></string>
-  <string name="_adm_form_btn_reports_check_out"><![CDATA[Check out]]></string>
-  <string name="_adm_form_btn_reports_audit"><![CDATA[Audit]]></string>
-  <string name="_adm_form_btn_reports_hide"><![CDATA[Hide]]></string>
-  <string name="_adm_form_btn_reports_unhide"><![CDATA[Unhide]]></string>
-  
+    <string name="_adm_form_btn_reports_check_in"><![CDATA[Check in]]></string>
+    <string name="_adm_form_btn_reports_check_out"><![CDATA[Check out]]></string>
+    <string name="_adm_form_btn_reports_audit"><![CDATA[Audit]]></string>
+    <string name="_adm_form_btn_reports_hide"><![CDATA[Hide]]></string>
+    <string name="_adm_form_btn_reports_unhide"><![CDATA[Unhide]]></string>
     <string name="_adm_form_btn_search_forms_edit"><![CDATA[Edit search form]]></string>
     <string name="_adm_form_btn_search_forms_fields_edit"><![CDATA[Edit search field]]></string>
     <string name="_adm_form_btn_search_forms_fields_reset"><![CDATA[Reset]]></string>
@@ -823,6 +821,7 @@
     <string name="_adm_form_btn_search_forms_save"><![CDATA[Save]]></string>
     <string name="_adm_form_btn_search_forms_cancel"><![CDATA[Cancel]]></string>
     <string name="_adm_form_dsc_displays_title"><![CDATA[Name of the form display mode. Displayed in Studio only.]]></string>
+    <string name="_adm_form_dsc_field_area_label"><![CDATA[Accessible name for the field. It is useful when the visible text content of the field is not descriptive enough or absent.]]></string>
     <string name="_adm_form_dsc_field_attrs_max"><![CDATA[Enter numeric value]]></string>
     <string name="_adm_form_dsc_field_attrs_min"><![CDATA[Enter numeric value]]></string>
     <string name="_adm_form_dsc_field_attrs_src"><![CDATA[Enter correct image URL]]></string>
@@ -949,7 +948,8 @@
 	<string name="_adm_form_txt_displays_manage_fields"><![CDATA[Manage fields]]></string>
 	<string name="_adm_form_txt_displays_title"><![CDATA[System Name]]></string>
 	<string name="_adm_form_txt_field_add_popup"><![CDATA[Add New Field]]></string>
-	<string name="_adm_form_txt_field_attrs_max"><![CDATA[Max Value]]></string>
+	<string name="_adm_form_txt_field_area_label"><![CDATA[Text for 'area-label' attribute]]></string>
+        <string name="_adm_form_txt_field_attrs_max"><![CDATA[Max Value]]></string>
 	<string name="_adm_form_txt_field_attrs_min"><![CDATA[Min Value]]></string>
 	<string name="_adm_form_txt_field_attrs_src"><![CDATA[Image Source]]></string>
 	<string name="_adm_form_txt_field_attrs_step"><![CDATA[Step]]></string>

+ 8 - 8
modules/boonex/russian/data/langs/system/ru.xml

@@ -788,8 +788,8 @@
         <string name="_adm_form_btn_labels_back"><![CDATA[Назад]]></string>
         <string name="_adm_form_btn_labels_cancel"><![CDATA[Отменить]]></string>
         <string name="_adm_form_btn_labels_submit"><![CDATA[Отправить]]></string>
-  <string name="_adm_form_btn_badges_add"><![CDATA[Добавить бейдж]]></string>
-  <string name="_adm_form_btn_badges_delete"><![CDATA[Удалить]]></string>
+        <string name="_adm_form_btn_badges_add"><![CDATA[Добавить бейдж]]></string>
+        <string name="_adm_form_btn_badges_delete"><![CDATA[Удалить]]></string>
 	<string name="_adm_form_btn_pre_lists_add"><![CDATA[Добавить]]></string>
 	<string name="_adm_form_btn_pre_lists_cancel"><![CDATA[Отменить]]></string>
 	<string name="_adm_form_btn_pre_lists_create"><![CDATA[Добавить новый список]]></string>
@@ -802,12 +802,10 @@
 	<string name="_adm_form_btn_pre_values_create"><![CDATA[Добавить новый элемент]]></string>
 	<string name="_adm_form_btn_pre_values_delete_item"><![CDATA[Удалить элемент]]></string>
 	<string name="_adm_form_btn_pre_values_edit_item"><![CDATA[Редактировать элемент]]></string>
-
-  <string name="_adm_form_btn_reports_check_in"><![CDATA[Взять в работу]]></string>
-  <string name="_adm_form_btn_reports_check_out"><![CDATA[Закончить работу]]></string>
-  <string name="_adm_form_btn_reports_hide"><![CDATA[Скрыть]]></string>
-  <string name="_adm_form_btn_reports_unhide"><![CDATA[Открыть]]></string>
-  
+    <string name="_adm_form_btn_reports_check_in"><![CDATA[Взять в работу]]></string>
+    <string name="_adm_form_btn_reports_check_out"><![CDATA[Закончить работу]]></string>
+    <string name="_adm_form_btn_reports_hide"><![CDATA[Скрыть]]></string>
+    <string name="_adm_form_btn_reports_unhide"><![CDATA[Открыть]]></string>
     <string name="_adm_form_btn_search_forms_edit"><![CDATA[Редактировать форму поиска]]></string>
     <string name="_adm_form_btn_search_forms_fields_edit"><![CDATA[Редактировать поле формы поиска]]></string>
     <string name="_adm_form_btn_search_forms_fields_reset"><![CDATA[Сбросить]]></string>
@@ -815,6 +813,7 @@
     <string name="_adm_form_btn_search_forms_save"><![CDATA[Сохранить]]></string>
     <string name="_adm_form_btn_search_forms_cancel"><![CDATA[Отменить]]></string>
     <string name="_adm_form_dsc_displays_title"><![CDATA[Название режима отображения Формы. Видимо только в Студии.]]></string>
+    <string name="_adm_form_dsc_field_area_label"><![CDATA[Доступное имя для поля. Полезно, когда видимое текстовое содержимое поля недостаточно описательно или отсутствует.]]></string>
     <string name="_adm_form_dsc_field_attrs_max"><![CDATA[Введите числовое значение]]></string>
     <string name="_adm_form_dsc_field_attrs_min"><![CDATA[Введите числовое значение]]></string>
     <string name="_adm_form_dsc_field_attrs_src"><![CDATA[Введите правильный URL картинки]]></string>
@@ -940,6 +939,7 @@
 	<string name="_adm_form_txt_displays_manage_fields"><![CDATA[Управление полями]]></string>
 	<string name="_adm_form_txt_displays_title"><![CDATA[Системное имя]]></string>
 	<string name="_adm_form_txt_field_add_popup"><![CDATA[Добавить новое Поле]]></string>
+        <string name="_adm_form_txt_field_area_label"><![CDATA[Текст для атрибута 'area-label']]></string>
 	<string name="_adm_form_txt_field_attrs_max"><![CDATA[Макс. значение]]></string>
 	<string name="_adm_form_txt_field_attrs_min"><![CDATA[Мин. значение]]></string>
 	<string name="_adm_form_txt_field_attrs_src"><![CDATA[Адрес картинки]]></string>

+ 11 - 0
studio/template/scripts/BxBaseStudioFormsField.php

@@ -1286,6 +1286,17 @@ class BxBaseStudioFormsFieldText extends BxBaseStudioFormsFieldBlockHeader
                     'pass' => 'Xss',
                 )
             ),
+            'area_label' => array(
+                'type' => 'text_translatable',
+                'name' => 'area_label',
+                'caption' => _t('_adm_form_txt_field_area_label'),
+                'info' => _t('_adm_form_dsc_field_area_label'),
+                'value' => '_sys_form_txt_field',
+                'required' => '0',
+                'db' => array (
+                    'pass' => 'Xss',
+                ),
+            ),
             'required' => array(
                 'type' => 'switcher',
                 'name' => 'required',

+ 25 - 0
template/scripts/BxBaseFormView.php

@@ -1575,6 +1575,9 @@ BLAH;
         if (!isset($aAttrs['data-format-datetime']))
             $aAttrs['data-frmt-datetime'] = getParam('sys_format_datetime');
 
+        if(($sAreaLabel = $this->_genInputAreaLabel($aInput) ?: bx_html_attribute($this->_genInputCaption($aInput))))
+            $aAttrs['area-label'] = $sAreaLabel;
+
         // for inputs with labels generate id
         if (isset($aInput['label']))
             $aAttrs['id'] = $this->getInputId($aInput);
@@ -1655,6 +1658,9 @@ BLAH;
 
         if(isset($aInput['name'])) 
             $aAttrs['name'] = $aInput['name'];
+
+        if(($sAreaLabel = $this->_genInputAreaLabel($aInput) ?: bx_html_attribute($aInput['value'])))
+            $aAttrs['area-label'] = $sAreaLabel;
         
         return $aAttrs;
     }
@@ -1742,6 +1748,9 @@ BLAH;
 
         $aAttrs['name'] = $aInput['name'];
 
+        if(($sAreaLabel = $this->_genInputAreaLabel($aInput) ?: bx_html_attribute($this->_genInputCaption($aInput))))
+            $aAttrs['area-label'] = $sAreaLabel;
+
         // for inputs with labels generate id
         if (isset($aInput['label']))
             $aAttrs['id'] = $this->getInputId($aInput);
@@ -2319,6 +2328,9 @@ BLAH;
             $aAttrs['multiple'] = 'multiple';
         }
 
+        if(($sAreaLabel = $this->_genInputAreaLabel($aInput) ?: bx_html_attribute($this->_genInputCaption($aInput))))
+            $aAttrs['area-label'] = $sAreaLabel;
+
         // for inputs with labels generate id
         if (isset($aInput['label']))
             $aAttrs['id'] = $this->getInputId($aInput);
@@ -2352,6 +2364,9 @@ BLAH;
 
         $aAttrs['name']  = $aInput['name'];
 
+        if(($sAreaLabel = $this->_genInputAreaLabel($aInput) ?: bx_html_attribute($this->_genInputCaption($aInput))))
+            $aAttrs['area-label'] = $sAreaLabel;
+
         // for inputs with labels generate id
         if (isset($aInput['label']))
             $aAttrs['id'] = $this->getInputId($aInput);
@@ -2663,6 +2678,16 @@ BLAH;
         }
     }
 
+    protected function _genInputCaption($aInput)
+    {
+        return ($sCaption = $aInput['caption'] ?? '') ? bx_process_output($sCaption, BX_DATA_HTML) : '';
+    }
+
+    protected function _genInputAreaLabel($aInput)
+    {
+        return ($sAreaLabel = $aInput['area_label'] ?? '') && ($sAreaLabel = strip_tags(_t($sAreaLabel))) ? bx_html_attribute($sAreaLabel) : '';
+    }
+
     public static function getJsCalendarLangs ()
     {
         return array ('ar-dz' => 1, 'ar' => 1, 'at' => 1, 'az' => 1, 'be' => 1, 'bg' => 1, 'bn' => 1, 'bs' => 1, 'cat' => 1, 'ckb' => 1, 'cs' => 1, 'cy' => 1, 'da' => 1, 'de' => 1, 'default' => 1, 'eo' => 1, 'es' => 1, 'et' => 1, 'fa' => 1, 'fi' => 1, 'fo' => 1, 'fr' => 1, 'ga' => 1, 'gr' => 1, 'he' => 1, 'hi' => 1, 'hr' => 1, 'hu' => 1, 'hy' => 1, 'id' => 1, 'index' => 1, 'is' => 1, 'it' => 1, 'ja' => 1, 'ka' => 1, 'km' => 1, 'ko' => 1, 'kz' => 1, 'lt' => 1, 'lv' => 1, 'mk' => 1, 'mn' => 1, 'ms' => 1, 'my' => 1, 'nl' => 1, 'nn' => 1, 'no' => 1, 'pa' => 1, 'pl' => 1, 'pt' => 1, 'ro' => 1, 'ru' => 1, 'si' => 1, 'sk' => 1, 'sl' => 1, 'sq' => 1, 'sr-cyr' => 1, 'sr' => 1, 'sv' => 1, 'th' => 1, 'tr' => 1, 'uk' => 1, 'uz' => 1, 'uz_latn' => 1, 'vn' => 1, 'zh-tw' => 1, 'zh' => 1);