From 9de1bc0eef6f5bfaa2a8d745431caa361ae91548 Mon Sep 17 00:00:00 2001 From: kujiu Date: Fri, 22 Jun 2018 21:22:21 +0200 Subject: [IMP] Improve compatibility with screen readers (accessibility) (#24574) Today, Odoo is really tricky to use without seeing the screen, it must be improved to be usable. This PR forbid to use labels without a "for" attribute, add some title, rule and aria attributes in HTML. With that, Odoo will be fully usable with a screen reader. * [IMP] Labels must have a for attribute. Improve accessibility. * [IMP] Better error message when trying to read a missing cached value * [FIX] Add some aria-label and title attributes for screen readers. * [FIX] Template name is not included in the error message in case of SyntaxError in QWeb * [FIX] Improve the Tour failed at step error message to be more explicit. * [IMP] Add aria-labels * [FIX] Add missing aria-label on failing test * [IMP] aria-hidden means hidden. Fix all bad aria-hidden and hide aria-hidden for all. * [IMP] Color names on kanban views and many2many tags * [IMP] Add some checks on views for accessibility. * [IMP] Add `alt` attribute on `img` tags. * [IMP] Add aria-label and title on non-described icons * [IMP] Add button role to widgets with btn class * [IMP] Translate aria and formatted attributes. * [IMP] Remove wrong aria-labelledby * [IMP] Add menu role on dropdowns * [IMP] Buttons must be focusable * [IMP] Add aria attributes on progress bars * [IMP] Improve accessibility of basic widgets * [IMP] Change main layout to more semantic tags * [IMP] Add menuitem role when missing * [IMP] Remove wrong role='presentation' * [IMP] Improve accessibility of tab panels * [IMP] Add aria-invalid on invalid fields * [IMP] Add aria-sort on ordered columns * [IMP] Add role on alerts * [IMP] Use dialog role, header, main and footer tags for modals * [IMP] Add labels on o_status * [IMP] Improve accessibility of kanban view with feeds and articles * [IMP] Add alerts in case of new messages * [IMP] Add widget, navigation or img role to aria-labelled items --- .../lib/fontawesome/css/font-awesome-suffix.css | 2145 ++++++++++++++++++++ addons/web/static/lib/pdfjs/web/ui_utils.js | 6 + .../web/static/lib/qweb/qweb-test-attributes.xml | 4 +- addons/web/static/lib/qweb/qweb2.js | 4 +- addons/web/static/src/js/core/dialog.js | 31 +- addons/web/static/src/js/fields/abstract_field.js | 2 + addons/web/static/src/js/fields/basic_fields.js | 22 +- .../web/static/src/js/fields/relational_fields.js | 2 +- .../static/src/js/views/basic/basic_renderer.js | 1 + .../js/views/kanban/kanban_column_progressbar.js | 3 + .../js/views/kanban/kanban_column_quick_create.js | 2 +- .../static/src/js/views/kanban/kanban_record.js | 31 +- .../js/views/kanban/kanban_record_quick_create.js | 2 +- .../src/js/views/list/list_editable_renderer.js | 6 +- .../web/static/src/js/views/list/list_renderer.js | 4 + .../static/src/js/views/pivot/pivot_renderer.js | 5 + .../web/static/src/js/widgets/change_password.js | 2 +- addons/web/static/src/js/widgets/debug_manager.js | 2 +- .../src/js/widgets/domain_selector_dialog.js | 2 +- addons/web/static/src/scss/ui.scss | 4 + addons/web/static/src/scss/utils.scss | 8 + addons/web/static/src/xml/base.xml | 414 ++-- addons/web/static/src/xml/dialog.xml | 12 +- addons/web/static/src/xml/kanban.xml | 43 +- addons/web/static/src/xml/web_calendar.xml | 18 +- .../static/tests/chrome/action_manager_tests.js | 18 +- .../web/static/tests/fields/basic_fields_tests.js | 10 +- .../static/tests/fields/relational_fields_tests.js | 508 ++--- .../static/tests/fields/upgrade_fields_tests.js | 2 +- .../tests/services/notification_service_tests.js | 6 +- addons/web/static/tests/views/calendar_tests.js | 104 +- addons/web/static/tests/views/form_tests.js | 184 +- addons/web/static/tests/views/kanban_tests.js | 62 +- addons/web/static/tests/views/list_tests.js | 16 +- .../web/static/tests/views/view_dialogs_tests.js | 14 +- .../web/static/tests/widgets/data_export_tests.js | 28 +- addons/web/views/database_manager.html | 1 + addons/web/views/report_templates.xml | 17 +- addons/web/views/webclient_templates.xml | 50 +- 39 files changed, 3029 insertions(+), 766 deletions(-) create mode 100644 addons/web/static/lib/fontawesome/css/font-awesome-suffix.css (limited to 'addons/web') diff --git a/addons/web/static/lib/fontawesome/css/font-awesome-suffix.css b/addons/web/static/lib/fontawesome/css/font-awesome-suffix.css new file mode 100644 index 00000000000..f5651cf8e02 --- /dev/null +++ b/addons/web/static/lib/fontawesome/css/font-awesome-suffix.css @@ -0,0 +1,2145 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * Suffix version by Odoo S.A. + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ +/* FONT PATH + * -------------------------- */ +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.fa-suffix-glass:after { + content: "\f000"; +} +.fa-suffix-music:after { + content: "\f001"; +} +.fa-suffix-search:after { + content: "\f002"; +} +.fa-suffix-envelope-o:after { + content: "\f003"; +} +.fa-suffix-heart:after { + content: "\f004"; +} +.fa-suffix-star:after { + content: "\f005"; +} +.fa-suffix-star-o:after { + content: "\f006"; +} +.fa-suffix-user:after { + content: "\f007"; +} +.fa-suffix-film:after { + content: "\f008"; +} +.fa-suffix-th-large:after { + content: "\f009"; +} +.fa-suffix-th:after { + content: "\f00a"; +} +.fa-suffix-th-list:after { + content: "\f00b"; +} +.fa-suffix-check:after { + content: "\f00c"; +} +.fa-suffix-remove:after, +.fa-suffix-close:after, +.fa-suffix-times:after { + content: "\f00d"; +} +.fa-suffix-search-plus:after { + content: "\f00e"; +} +.fa-suffix-search-minus:after { + content: "\f010"; +} +.fa-suffix-power-off:after { + content: "\f011"; +} +.fa-suffix-signal:after { + content: "\f012"; +} +.fa-suffix-gear:after, +.fa-suffix-cog:after { + content: "\f013"; +} +.fa-suffix-trash-o:after { + content: "\f014"; +} +.fa-suffix-home:after { + content: "\f015"; +} +.fa-suffix-file-o:after { + content: "\f016"; +} +.fa-suffix-clock-o:after { + content: "\f017"; +} +.fa-suffix-road:after { + content: "\f018"; +} +.fa-suffix-download:after { + content: "\f019"; +} +.fa-suffix-arrow-circle-o-down:after { + content: "\f01a"; +} +.fa-suffix-arrow-circle-o-up:after { + content: "\f01b"; +} +.fa-suffix-inbox:after { + content: "\f01c"; +} +.fa-suffix-play-circle-o:after { + content: "\f01d"; +} +.fa-suffix-rotate-right:after, +.fa-suffix-repeat:after { + content: "\f01e"; +} +.fa-suffix-refresh:after { + content: "\f021"; +} +.fa-suffix-list-alt:after { + content: "\f022"; +} +.fa-suffix-lock:after { + content: "\f023"; +} +.fa-suffix-flag:after { + content: "\f024"; +} +.fa-suffix-headphones:after { + content: "\f025"; +} +.fa-suffix-volume-off:after { + content: "\f026"; +} +.fa-suffix-volume-down:after { + content: "\f027"; +} +.fa-suffix-volume-up:after { + content: "\f028"; +} +.fa-suffix-qrcode:after { + content: "\f029"; +} +.fa-suffix-barcode:after { + content: "\f02a"; +} +.fa-suffix-tag:after { + content: "\f02b"; +} +.fa-suffix-tags:after { + content: "\f02c"; +} +.fa-suffix-book:after { + content: "\f02d"; +} +.fa-suffix-bookmark:after { + content: "\f02e"; +} +.fa-suffix-print:after { + content: "\f02f"; +} +.fa-suffix-camera:after { + content: "\f030"; +} +.fa-suffix-font:after { + content: "\f031"; +} +.fa-suffix-bold:after { + content: "\f032"; +} +.fa-suffix-italic:after { + content: "\f033"; +} +.fa-suffix-text-height:after { + content: "\f034"; +} +.fa-suffix-text-width:after { + content: "\f035"; +} +.fa-suffix-align-left:after { + content: "\f036"; +} +.fa-suffix-align-center:after { + content: "\f037"; +} +.fa-suffix-align-right:after { + content: "\f038"; +} +.fa-suffix-align-justify:after { + content: "\f039"; +} +.fa-suffix-list:after { + content: "\f03a"; +} +.fa-suffix-dedent:after, +.fa-suffix-outdent:after { + content: "\f03b"; +} +.fa-suffix-indent:after { + content: "\f03c"; +} +.fa-suffix-video-camera:after { + content: "\f03d"; +} +.fa-suffix-photo:after, +.fa-suffix-image:after, +.fa-suffix-picture-o:after { + content: "\f03e"; +} +.fa-suffix-pencil:after { + content: "\f040"; +} +.fa-suffix-map-marker:after { + content: "\f041"; +} +.fa-suffix-adjust:after { + content: "\f042"; +} +.fa-suffix-tint:after { + content: "\f043"; +} +.fa-suffix-edit:after, +.fa-suffix-pencil-square-o:after { + content: "\f044"; +} +.fa-suffix-share-square-o:after { + content: "\f045"; +} +.fa-suffix-check-square-o:after { + content: "\f046"; +} +.fa-suffix-arrows:after { + content: "\f047"; +} +.fa-suffix-step-backward:after { + content: "\f048"; +} +.fa-suffix-fast-backward:after { + content: "\f049"; +} +.fa-suffix-backward:after { + content: "\f04a"; +} +.fa-suffix-play:after { + content: "\f04b"; +} +.fa-suffix-pause:after { + content: "\f04c"; +} +.fa-suffix-stop:after { + content: "\f04d"; +} +.fa-suffix-forward:after { + content: "\f04e"; +} +.fa-suffix-fast-forward:after { + content: "\f050"; +} +.fa-suffix-step-forward:after { + content: "\f051"; +} +.fa-suffix-eject:after { + content: "\f052"; +} +.fa-suffix-chevron-left:after { + content: "\f053"; +} +.fa-suffix-chevron-right:after { + content: "\f054"; +} +.fa-suffix-plus-circle:after { + content: "\f055"; +} +.fa-suffix-minus-circle:after { + content: "\f056"; +} +.fa-suffix-times-circle:after { + content: "\f057"; +} +.fa-suffix-check-circle:after { + content: "\f058"; +} +.fa-suffix-question-circle:after { + content: "\f059"; +} +.fa-suffix-info-circle:after { + content: "\f05a"; +} +.fa-suffix-crosshairs:after { + content: "\f05b"; +} +.fa-suffix-times-circle-o:after { + content: "\f05c"; +} +.fa-suffix-check-circle-o:after { + content: "\f05d"; +} +.fa-suffix-ban:after { + content: "\f05e"; +} +.fa-suffix-arrow-left:after { + content: "\f060"; +} +.fa-suffix-arrow-right:after { + content: "\f061"; +} +.fa-suffix-arrow-up:after { + content: "\f062"; +} +.fa-suffix-arrow-down:after { + content: "\f063"; +} +.fa-suffix-mail-forward:after, +.fa-suffix-share:after { + content: "\f064"; +} +.fa-suffix-expand:after { + content: "\f065"; +} +.fa-suffix-compress:after { + content: "\f066"; +} +.fa-suffix-plus:after { + content: "\f067"; +} +.fa-suffix-minus:after { + content: "\f068"; +} +.fa-suffix-asterisk:after { + content: "\f069"; +} +.fa-suffix-exclamation-circle:after { + content: "\f06a"; +} +.fa-suffix-gift:after { + content: "\f06b"; +} +.fa-suffix-leaf:after { + content: "\f06c"; +} +.fa-suffix-fire:after { + content: "\f06d"; +} +.fa-suffix-eye:after { + content: "\f06e"; +} +.fa-suffix-eye-slash:after { + content: "\f070"; +} +.fa-suffix-warning:after, +.fa-suffix-exclamation-triangle:after { + content: "\f071"; +} +.fa-suffix-plane:after { + content: "\f072"; +} +.fa-suffix-calendar:after { + content: "\f073"; +} +.fa-suffix-random:after { + content: "\f074"; +} +.fa-suffix-comment:after { + content: "\f075"; +} +.fa-suffix-magnet:after { + content: "\f076"; +} +.fa-suffix-chevron-up:after { + content: "\f077"; +} +.fa-suffix-chevron-down:after { + content: "\f078"; +} +.fa-suffix-retweet:after { + content: "\f079"; +} +.fa-suffix-shopping-cart:after { + content: "\f07a"; +} +.fa-suffix-folder:after { + content: "\f07b"; +} +.fa-suffix-folder-open:after { + content: "\f07c"; +} +.fa-suffix-arrows-v:after { + content: "\f07d"; +} +.fa-suffix-arrows-h:after { + content: "\f07e"; +} +.fa-suffix-bar-chart-o:after, +.fa-suffix-bar-chart:after { + content: "\f080"; +} +.fa-suffix-twitter-square:after { + content: "\f081"; +} +.fa-suffix-facebook-square:after { + content: "\f082"; +} +.fa-suffix-camera-retro:after { + content: "\f083"; +} +.fa-suffix-key:after { + content: "\f084"; +} +.fa-suffix-gears:after, +.fa-suffix-cogs:after { + content: "\f085"; +} +.fa-suffix-comments:after { + content: "\f086"; +} +.fa-suffix-thumbs-o-up:after { + content: "\f087"; +} +.fa-suffix-thumbs-o-down:after { + content: "\f088"; +} +.fa-suffix-star-half:after { + content: "\f089"; +} +.fa-suffix-heart-o:after { + content: "\f08a"; +} +.fa-suffix-sign-out:after { + content: "\f08b"; +} +.fa-suffix-linkedin-square:after { + content: "\f08c"; +} +.fa-suffix-thumb-tack:after { + content: "\f08d"; +} +.fa-suffix-external-link:after { + content: "\f08e"; +} +.fa-suffix-sign-in:after { + content: "\f090"; +} +.fa-suffix-trophy:after { + content: "\f091"; +} +.fa-suffix-github-square:after { + content: "\f092"; +} +.fa-suffix-upload:after { + content: "\f093"; +} +.fa-suffix-lemon-o:after { + content: "\f094"; +} +.fa-suffix-phone:after { + content: "\f095"; +} +.fa-suffix-square-o:after { + content: "\f096"; +} +.fa-suffix-bookmark-o:after { + content: "\f097"; +} +.fa-suffix-phone-square:after { + content: "\f098"; +} +.fa-suffix-twitter:after { + content: "\f099"; +} +.fa-suffix-facebook-f:after, +.fa-suffix-facebook:after { + content: "\f09a"; +} +.fa-suffix-github:after { + content: "\f09b"; +} +.fa-suffix-unlock:after { + content: "\f09c"; +} +.fa-suffix-credit-card:after { + content: "\f09d"; +} +.fa-suffix-feed:after, +.fa-suffix-rss:after { + content: "\f09e"; +} +.fa-suffix-hdd-o:after { + content: "\f0a0"; +} +.fa-suffix-bullhorn:after { + content: "\f0a1"; +} +.fa-suffix-bell:after { + content: "\f0f3"; +} +.fa-suffix-certificate:after { + content: "\f0a3"; +} +.fa-suffix-hand-o-right:after { + content: "\f0a4"; +} +.fa-suffix-hand-o-left:after { + content: "\f0a5"; +} +.fa-suffix-hand-o-up:after { + content: "\f0a6"; +} +.fa-suffix-hand-o-down:after { + content: "\f0a7"; +} +.fa-suffix-arrow-circle-left:after { + content: "\f0a8"; +} +.fa-suffix-arrow-circle-right:after { + content: "\f0a9"; +} +.fa-suffix-arrow-circle-up:after { + content: "\f0aa"; +} +.fa-suffix-arrow-circle-down:after { + content: "\f0ab"; +} +.fa-suffix-globe:after { + content: "\f0ac"; +} +.fa-suffix-wrench:after { + content: "\f0ad"; +} +.fa-suffix-tasks:after { + content: "\f0ae"; +} +.fa-suffix-filter:after { + content: "\f0b0"; +} +.fa-suffix-briefcase:after { + content: "\f0b1"; +} +.fa-suffix-arrows-alt:after { + content: "\f0b2"; +} +.fa-suffix-group:after, +.fa-suffix-users:after { + content: "\f0c0"; +} +.fa-suffix-chain:after, +.fa-suffix-link:after { + content: "\f0c1"; +} +.fa-suffix-cloud:after { + content: "\f0c2"; +} +.fa-suffix-flask:after { + content: "\f0c3"; +} +.fa-suffix-cut:after, +.fa-suffix-scissors:after { + content: "\f0c4"; +} +.fa-suffix-copy:after, +.fa-suffix-files-o:after { + content: "\f0c5"; +} +.fa-suffix-paperclip:after { + content: "\f0c6"; +} +.fa-suffix-save:after, +.fa-suffix-floppy-o:after { + content: "\f0c7"; +} +.fa-suffix-square:after { + content: "\f0c8"; +} +.fa-suffix-navicon:after, +.fa-suffix-reorder:after, +.fa-suffix-bars:after { + content: "\f0c9"; +} +.fa-suffix-list-ul:after { + content: "\f0ca"; +} +.fa-suffix-list-ol:after { + content: "\f0cb"; +} +.fa-suffix-strikethrough:after { + content: "\f0cc"; +} +.fa-suffix-underline:after { + content: "\f0cd"; +} +.fa-suffix-table:after { + content: "\f0ce"; +} +.fa-suffix-magic:after { + content: "\f0d0"; +} +.fa-suffix-truck:after { + content: "\f0d1"; +} +.fa-suffix-pinterest:after { + content: "\f0d2"; +} +.fa-suffix-pinterest-square:after { + content: "\f0d3"; +} +.fa-suffix-google-plus-square:after { + content: "\f0d4"; +} +.fa-suffix-google-plus:after { + content: "\f0d5"; +} +.fa-suffix-money:after { + content: "\f0d6"; +} +.fa-suffix-caret-down:after { + content: "\f0d7"; +} +.fa-suffix-caret-up:after { + content: "\f0d8"; +} +.fa-suffix-caret-left:after { + content: "\f0d9"; +} +.fa-suffix-caret-right:after { + content: "\f0da"; +} +.fa-suffix-columns:after { + content: "\f0db"; +} +.fa-suffix-unsorted:after, +.fa-suffix-sort:after { + content: "\f0dc"; +} +.fa-suffix-sort-down:after, +.fa-suffix-sort-desc:after { + content: "\f0dd"; +} +.fa-suffix-sort-up:after, +.fa-suffix-sort-asc:after { + content: "\f0de"; +} +.fa-suffix-envelope:after { + content: "\f0e0"; +} +.fa-suffix-linkedin:after { + content: "\f0e1"; +} +.fa-suffix-rotate-left:after, +.fa-suffix-undo:after { + content: "\f0e2"; +} +.fa-suffix-legal:after, +.fa-suffix-gavel:after { + content: "\f0e3"; +} +.fa-suffix-dashboard:after, +.fa-suffix-tachometer:after { + content: "\f0e4"; +} +.fa-suffix-comment-o:after { + content: "\f0e5"; +} +.fa-suffix-comments-o:after { + content: "\f0e6"; +} +.fa-suffix-flash:after, +.fa-suffix-bolt:after { + content: "\f0e7"; +} +.fa-suffix-sitemap:after { + content: "\f0e8"; +} +.fa-suffix-umbrella:after { + content: "\f0e9"; +} +.fa-suffix-paste:after, +.fa-suffix-clipboard:after { + content: "\f0ea"; +} +.fa-suffix-lightbulb-o:after { + content: "\f0eb"; +} +.fa-suffix-exchange:after { + content: "\f0ec"; +} +.fa-suffix-cloud-download:after { + content: "\f0ed"; +} +.fa-suffix-cloud-upload:after { + content: "\f0ee"; +} +.fa-suffix-user-md:after { + content: "\f0f0"; +} +.fa-suffix-stethoscope:after { + content: "\f0f1"; +} +.fa-suffix-suitcase:after { + content: "\f0f2"; +} +.fa-suffix-bell-o:after { + content: "\f0a2"; +} +.fa-suffix-coffee:after { + content: "\f0f4"; +} +.fa-suffix-cutlery:after { + content: "\f0f5"; +} +.fa-suffix-file-text-o:after { + content: "\f0f6"; +} +.fa-suffix-building-o:after { + content: "\f0f7"; +} +.fa-suffix-hospital-o:after { + content: "\f0f8"; +} +.fa-suffix-ambulance:after { + content: "\f0f9"; +} +.fa-suffix-medkit:after { + content: "\f0fa"; +} +.fa-suffix-fighter-jet:after { + content: "\f0fb"; +} +.fa-suffix-beer:after { + content: "\f0fc"; +} +.fa-suffix-h-square:after { + content: "\f0fd"; +} +.fa-suffix-plus-square:after { + content: "\f0fe"; +} +.fa-suffix-angle-double-left:after { + content: "\f100"; +} +.fa-suffix-angle-double-right:after { + content: "\f101"; +} +.fa-suffix-angle-double-up:after { + content: "\f102"; +} +.fa-suffix-angle-double-down:after { + content: "\f103"; +} +.fa-suffix-angle-left:after { + content: "\f104"; +} +.fa-suffix-angle-right:after { + content: "\f105"; +} +.fa-suffix-angle-up:after { + content: "\f106"; +} +.fa-suffix-angle-down:after { + content: "\f107"; +} +.fa-suffix-desktop:after { + content: "\f108"; +} +.fa-suffix-laptop:after { + content: "\f109"; +} +.fa-suffix-tablet:after { + content: "\f10a"; +} +.fa-suffix-mobile-phone:after, +.fa-suffix-mobile:after { + content: "\f10b"; +} +.fa-suffix-circle-o:after { + content: "\f10c"; +} +.fa-suffix-quote-left:after { + content: "\f10d"; +} +.fa-suffix-quote-right:after { + content: "\f10e"; +} +.fa-suffix-spinner:after { + content: "\f110"; +} +.fa-suffix-circle:after { + content: "\f111"; +} +.fa-suffix-mail-reply:after, +.fa-suffix-reply:after { + content: "\f112"; +} +.fa-suffix-github-alt:after { + content: "\f113"; +} +.fa-suffix-folder-o:after { + content: "\f114"; +} +.fa-suffix-folder-open-o:after { + content: "\f115"; +} +.fa-suffix-smile-o:after { + content: "\f118"; +} +.fa-suffix-frown-o:after { + content: "\f119"; +} +.fa-suffix-meh-o:after { + content: "\f11a"; +} +.fa-suffix-gamepad:after { + content: "\f11b"; +} +.fa-suffix-keyboard-o:after { + content: "\f11c"; +} +.fa-suffix-flag-o:after { + content: "\f11d"; +} +.fa-suffix-flag-checkered:after { + content: "\f11e"; +} +.fa-suffix-terminal:after { + content: "\f120"; +} +.fa-suffix-code:after { + content: "\f121"; +} +.fa-suffix-mail-reply-all:after, +.fa-suffix-reply-all:after { + content: "\f122"; +} +.fa-suffix-star-half-empty:after, +.fa-suffix-star-half-full:after, +.fa-suffix-star-half-o:after { + content: "\f123"; +} +.fa-suffix-location-arrow:after { + content: "\f124"; +} +.fa-suffix-crop:after { + content: "\f125"; +} +.fa-suffix-code-fork:after { + content: "\f126"; +} +.fa-suffix-unlink:after, +.fa-suffix-chain-broken:after { + content: "\f127"; +} +.fa-suffix-question:after { + content: "\f128"; +} +.fa-suffix-info:after { + content: "\f129"; +} +.fa-suffix-exclamation:after { + content: "\f12a"; +} +.fa-suffix-superscript:after { + content: "\f12b"; +} +.fa-suffix-subscript:after { + content: "\f12c"; +} +.fa-suffix-eraser:after { + content: "\f12d"; +} +.fa-suffix-puzzle-piece:after { + content: "\f12e"; +} +.fa-suffix-microphone:after { + content: "\f130"; +} +.fa-suffix-microphone-slash:after { + content: "\f131"; +} +.fa-suffix-shield:after { + content: "\f132"; +} +.fa-suffix-calendar-o:after { + content: "\f133"; +} +.fa-suffix-fire-extinguisher:after { + content: "\f134"; +} +.fa-suffix-rocket:after { + content: "\f135"; +} +.fa-suffix-maxcdn:after { + content: "\f136"; +} +.fa-suffix-chevron-circle-left:after { + content: "\f137"; +} +.fa-suffix-chevron-circle-right:after { + content: "\f138"; +} +.fa-suffix-chevron-circle-up:after { + content: "\f139"; +} +.fa-suffix-chevron-circle-down:after { + content: "\f13a"; +} +.fa-suffix-html5:after { + content: "\f13b"; +} +.fa-suffix-css3:after { + content: "\f13c"; +} +.fa-suffix-anchor:after { + content: "\f13d"; +} +.fa-suffix-unlock-alt:after { + content: "\f13e"; +} +.fa-suffix-bullseye:after { + content: "\f140"; +} +.fa-suffix-ellipsis-h:after { + content: "\f141"; +} +.fa-suffix-ellipsis-v:after { + content: "\f142"; +} +.fa-suffix-rss-square:after { + content: "\f143"; +} +.fa-suffix-play-circle:after { + content: "\f144"; +} +.fa-suffix-ticket:after { + content: "\f145"; +} +.fa-suffix-minus-square:after { + content: "\f146"; +} +.fa-suffix-minus-square-o:after { + content: "\f147"; +} +.fa-suffix-level-up:after { + content: "\f148"; +} +.fa-suffix-level-down:after { + content: "\f149"; +} +.fa-suffix-check-square:after { + content: "\f14a"; +} +.fa-suffix-pencil-square:after { + content: "\f14b"; +} +.fa-suffix-external-link-square:after { + content: "\f14c"; +} +.fa-suffix-share-square:after { + content: "\f14d"; +} +.fa-suffix-compass:after { + content: "\f14e"; +} +.fa-suffix-toggle-down:after, +.fa-suffix-caret-square-o-down:after { + content: "\f150"; +} +.fa-suffix-toggle-up:after, +.fa-suffix-caret-square-o-up:after { + content: "\f151"; +} +.fa-suffix-toggle-right:after, +.fa-suffix-caret-square-o-right:after { + content: "\f152"; +} +.fa-suffix-euro:after, +.fa-suffix-eur:after { + content: "\f153"; +} +.fa-suffix-gbp:after { + content: "\f154"; +} +.fa-suffix-dollar:after, +.fa-suffix-usd:after { + content: "\f155"; +} +.fa-suffix-rupee:after, +.fa-suffix-inr:after { + content: "\f156"; +} +.fa-suffix-cny:after, +.fa-suffix-rmb:after, +.fa-suffix-yen:after, +.fa-suffix-jpy:after { + content: "\f157"; +} +.fa-suffix-ruble:after, +.fa-suffix-rouble:after, +.fa-suffix-rub:after { + content: "\f158"; +} +.fa-suffix-won:after, +.fa-suffix-krw:after { + content: "\f159"; +} +.fa-suffix-bitcoin:after, +.fa-suffix-btc:after { + content: "\f15a"; +} +.fa-suffix-file:after { + content: "\f15b"; +} +.fa-suffix-file-text:after { + content: "\f15c"; +} +.fa-suffix-sort-alpha-asc:after { + content: "\f15d"; +} +.fa-suffix-sort-alpha-desc:after { + content: "\f15e"; +} +.fa-suffix-sort-amount-asc:after { + content: "\f160"; +} +.fa-suffix-sort-amount-desc:after { + content: "\f161"; +} +.fa-suffix-sort-numeric-asc:after { + content: "\f162"; +} +.fa-suffix-sort-numeric-desc:after { + content: "\f163"; +} +.fa-suffix-thumbs-up:after { + content: "\f164"; +} +.fa-suffix-thumbs-down:after { + content: "\f165"; +} +.fa-suffix-youtube-square:after { + content: "\f166"; +} +.fa-suffix-youtube:after { + content: "\f167"; +} +.fa-suffix-xing:after { + content: "\f168"; +} +.fa-suffix-xing-square:after { + content: "\f169"; +} +.fa-suffix-youtube-play:after { + content: "\f16a"; +} +.fa-suffix-dropbox:after { + content: "\f16b"; +} +.fa-suffix-stack-overflow:after { + content: "\f16c"; +} +.fa-suffix-instagram:after { + content: "\f16d"; +} +.fa-suffix-flickr:after { + content: "\f16e"; +} +.fa-suffix-adn:after { + content: "\f170"; +} +.fa-suffix-bitbucket:after { + content: "\f171"; +} +.fa-suffix-bitbucket-square:after { + content: "\f172"; +} +.fa-suffix-tumblr:after { + content: "\f173"; +} +.fa-suffix-tumblr-square:after { + content: "\f174"; +} +.fa-suffix-long-arrow-down:after { + content: "\f175"; +} +.fa-suffix-long-arrow-up:after { + content: "\f176"; +} +.fa-suffix-long-arrow-left:after { + content: "\f177"; +} +.fa-suffix-long-arrow-right:after { + content: "\f178"; +} +.fa-suffix-apple:after { + content: "\f179"; +} +.fa-suffix-windows:after { + content: "\f17a"; +} +.fa-suffix-android:after { + content: "\f17b"; +} +.fa-suffix-linux:after { + content: "\f17c"; +} +.fa-suffix-dribbble:after { + content: "\f17d"; +} +.fa-suffix-skype:after { + content: "\f17e"; +} +.fa-suffix-foursquare:after { + content: "\f180"; +} +.fa-suffix-trello:after { + content: "\f181"; +} +.fa-suffix-female:after { + content: "\f182"; +} +.fa-suffix-male:after { + content: "\f183"; +} +.fa-suffix-gittip:after, +.fa-suffix-gratipay:after { + content: "\f184"; +} +.fa-suffix-sun-o:after { + content: "\f185"; +} +.fa-suffix-moon-o:after { + content: "\f186"; +} +.fa-suffix-archive:after { + content: "\f187"; +} +.fa-suffix-bug:after { + content: "\f188"; +} +.fa-suffix-vk:after { + content: "\f189"; +} +.fa-suffix-weibo:after { + content: "\f18a"; +} +.fa-suffix-renren:after { + content: "\f18b"; +} +.fa-suffix-pagelines:after { + content: "\f18c"; +} +.fa-suffix-stack-exchange:after { + content: "\f18d"; +} +.fa-suffix-arrow-circle-o-right:after { + content: "\f18e"; +} +.fa-suffix-arrow-circle-o-left:after { + content: "\f190"; +} +.fa-suffix-toggle-left:after, +.fa-suffix-caret-square-o-left:after { + content: "\f191"; +} +.fa-suffix-dot-circle-o:after { + content: "\f192"; +} +.fa-suffix-wheelchair:after { + content: "\f193"; +} +.fa-suffix-vimeo-square:after { + content: "\f194"; +} +.fa-suffix-turkish-lira:after, +.fa-suffix-try:after { + content: "\f195"; +} +.fa-suffix-plus-square-o:after { + content: "\f196"; +} +.fa-suffix-space-shuttle:after { + content: "\f197"; +} +.fa-suffix-slack:after { + content: "\f198"; +} +.fa-suffix-envelope-square:after { + content: "\f199"; +} +.fa-suffix-wordpress:after { + content: "\f19a"; +} +.fa-suffix-openid:after { + content: "\f19b"; +} +.fa-suffix-institution:after, +.fa-suffix-bank:after, +.fa-suffix-university:after { + content: "\f19c"; +} +.fa-suffix-mortar-board:after, +.fa-suffix-graduation-cap:after { + content: "\f19d"; +} +.fa-suffix-yahoo:after { + content: "\f19e"; +} +.fa-suffix-google:after { + content: "\f1a0"; +} +.fa-suffix-reddit:after { + content: "\f1a1"; +} +.fa-suffix-reddit-square:after { + content: "\f1a2"; +} +.fa-suffix-stumbleupon-circle:after { + content: "\f1a3"; +} +.fa-suffix-stumbleupon:after { + content: "\f1a4"; +} +.fa-suffix-delicious:after { + content: "\f1a5"; +} +.fa-suffix-digg:after { + content: "\f1a6"; +} +.fa-suffix-pied-piper-pp:after { + content: "\f1a7"; +} +.fa-suffix-pied-piper-alt:after { + content: "\f1a8"; +} +.fa-suffix-drupal:after { + content: "\f1a9"; +} +.fa-suffix-joomla:after { + content: "\f1aa"; +} +.fa-suffix-language:after { + content: "\f1ab"; +} +.fa-suffix-fax:after { + content: "\f1ac"; +} +.fa-suffix-building:after { + content: "\f1ad"; +} +.fa-suffix-child:after { + content: "\f1ae"; +} +.fa-suffix-paw:after { + content: "\f1b0"; +} +.fa-suffix-spoon:after { + content: "\f1b1"; +} +.fa-suffix-cube:after { + content: "\f1b2"; +} +.fa-suffix-cubes:after { + content: "\f1b3"; +} +.fa-suffix-behance:after { + content: "\f1b4"; +} +.fa-suffix-behance-square:after { + content: "\f1b5"; +} +.fa-suffix-steam:after { + content: "\f1b6"; +} +.fa-suffix-steam-square:after { + content: "\f1b7"; +} +.fa-suffix-recycle:after { + content: "\f1b8"; +} +.fa-suffix-automobile:after, +.fa-suffix-car:after { + content: "\f1b9"; +} +.fa-suffix-cab:after, +.fa-suffix-taxi:after { + content: "\f1ba"; +} +.fa-suffix-tree:after { + content: "\f1bb"; +} +.fa-suffix-spotify:after { + content: "\f1bc"; +} +.fa-suffix-deviantart:after { + content: "\f1bd"; +} +.fa-suffix-soundcloud:after { + content: "\f1be"; +} +.fa-suffix-database:after { + content: "\f1c0"; +} +.fa-suffix-file-pdf-o:after { + content: "\f1c1"; +} +.fa-suffix-file-word-o:after { + content: "\f1c2"; +} +.fa-suffix-file-excel-o:after { + content: "\f1c3"; +} +.fa-suffix-file-powerpoint-o:after { + content: "\f1c4"; +} +.fa-suffix-file-photo-o:after, +.fa-suffix-file-picture-o:after, +.fa-suffix-file-image-o:after { + content: "\f1c5"; +} +.fa-suffix-file-zip-o:after, +.fa-suffix-file-archive-o:after { + content: "\f1c6"; +} +.fa-suffix-file-sound-o:after, +.fa-suffix-file-audio-o:after { + content: "\f1c7"; +} +.fa-suffix-file-movie-o:after, +.fa-suffix-file-video-o:after { + content: "\f1c8"; +} +.fa-suffix-file-code-o:after { + content: "\f1c9"; +} +.fa-suffix-vine:after { + content: "\f1ca"; +} +.fa-suffix-codepen:after { + content: "\f1cb"; +} +.fa-suffix-jsfiddle:after { + content: "\f1cc"; +} +.fa-suffix-life-bouy:after, +.fa-suffix-life-buoy:after, +.fa-suffix-life-saver:after, +.fa-suffix-support:after, +.fa-suffix-life-ring:after { + content: "\f1cd"; +} +.fa-suffix-circle-o-notch:after { + content: "\f1ce"; +} +.fa-suffix-ra:after, +.fa-suffix-resistance:after, +.fa-suffix-rebel:after { + content: "\f1d0"; +} +.fa-suffix-ge:after, +.fa-suffix-empire:after { + content: "\f1d1"; +} +.fa-suffix-git-square:after { + content: "\f1d2"; +} +.fa-suffix-git:after { + content: "\f1d3"; +} +.fa-suffix-y-combinator-square:after, +.fa-suffix-yc-square:after, +.fa-suffix-hacker-news:after { + content: "\f1d4"; +} +.fa-suffix-tencent-weibo:after { + content: "\f1d5"; +} +.fa-suffix-qq:after { + content: "\f1d6"; +} +.fa-suffix-wechat:after, +.fa-suffix-weixin:after { + content: "\f1d7"; +} +.fa-suffix-send:after, +.fa-suffix-paper-plane:after { + content: "\f1d8"; +} +.fa-suffix-send-o:after, +.fa-suffix-paper-plane-o:after { + content: "\f1d9"; +} +.fa-suffix-history:after { + content: "\f1da"; +} +.fa-suffix-circle-thin:after { + content: "\f1db"; +} +.fa-suffix-header:after { + content: "\f1dc"; +} +.fa-suffix-paragraph:after { + content: "\f1dd"; +} +.fa-suffix-sliders:after { + content: "\f1de"; +} +.fa-suffix-share-alt:after { + content: "\f1e0"; +} +.fa-suffix-share-alt-square:after { + content: "\f1e1"; +} +.fa-suffix-bomb:after { + content: "\f1e2"; +} +.fa-suffix-soccer-ball-o:after, +.fa-suffix-futbol-o:after { + content: "\f1e3"; +} +.fa-suffix-tty:after { + content: "\f1e4"; +} +.fa-suffix-binoculars:after { + content: "\f1e5"; +} +.fa-suffix-plug:after { + content: "\f1e6"; +} +.fa-suffix-slideshare:after { + content: "\f1e7"; +} +.fa-suffix-twitch:after { + content: "\f1e8"; +} +.fa-suffix-yelp:after { + content: "\f1e9"; +} +.fa-suffix-newspaper-o:after { + content: "\f1ea"; +} +.fa-suffix-wifi:after { + content: "\f1eb"; +} +.fa-suffix-calculator:after { + content: "\f1ec"; +} +.fa-suffix-paypal:after { + content: "\f1ed"; +} +.fa-suffix-google-wallet:after { + content: "\f1ee"; +} +.fa-suffix-cc-visa:after { + content: "\f1f0"; +} +.fa-suffix-cc-mastercard:after { + content: "\f1f1"; +} +.fa-suffix-cc-discover:after { + content: "\f1f2"; +} +.fa-suffix-cc-amex:after { + content: "\f1f3"; +} +.fa-suffix-cc-paypal:after { + content: "\f1f4"; +} +.fa-suffix-cc-stripe:after { + content: "\f1f5"; +} +.fa-suffix-bell-slash:after { + content: "\f1f6"; +} +.fa-suffix-bell-slash-o:after { + content: "\f1f7"; +} +.fa-suffix-trash:after { + content: "\f1f8"; +} +.fa-suffix-copyright:after { + content: "\f1f9"; +} +.fa-suffix-at:after { + content: "\f1fa"; +} +.fa-suffix-eyedropper:after { + content: "\f1fb"; +} +.fa-suffix-paint-brush:after { + content: "\f1fc"; +} +.fa-suffix-birthday-cake:after { + content: "\f1fd"; +} +.fa-suffix-area-chart:after { + content: "\f1fe"; +} +.fa-suffix-pie-chart:after { + content: "\f200"; +} +.fa-suffix-line-chart:after { + content: "\f201"; +} +.fa-suffix-lastfm:after { + content: "\f202"; +} +.fa-suffix-lastfm-square:after { + content: "\f203"; +} +.fa-suffix-toggle-off:after { + content: "\f204"; +} +.fa-suffix-toggle-on:after { + content: "\f205"; +} +.fa-suffix-bicycle:after { + content: "\f206"; +} +.fa-suffix-bus:after { + content: "\f207"; +} +.fa-suffix-ioxhost:after { + content: "\f208"; +} +.fa-suffix-angellist:after { + content: "\f209"; +} +.fa-suffix-cc:after { + content: "\f20a"; +} +.fa-suffix-shekel:after, +.fa-suffix-sheqel:after, +.fa-suffix-ils:after { + content: "\f20b"; +} +.fa-suffix-meanpath:after { + content: "\f20c"; +} +.fa-suffix-buysellads:after { + content: "\f20d"; +} +.fa-suffix-connectdevelop:after { + content: "\f20e"; +} +.fa-suffix-dashcube:after { + content: "\f210"; +} +.fa-suffix-forumbee:after { + content: "\f211"; +} +.fa-suffix-leanpub:after { + content: "\f212"; +} +.fa-suffix-sellsy:after { + content: "\f213"; +} +.fa-suffix-shirtsinbulk:after { + content: "\f214"; +} +.fa-suffix-simplybuilt:after { + content: "\f215"; +} +.fa-suffix-skyatlas:after { + content: "\f216"; +} +.fa-suffix-cart-plus:after { + content: "\f217"; +} +.fa-suffix-cart-arrow-down:after { + content: "\f218"; +} +.fa-suffix-diamond:after { + content: "\f219"; +} +.fa-suffix-ship:after { + content: "\f21a"; +} +.fa-suffix-user-secret:after { + content: "\f21b"; +} +.fa-suffix-motorcycle:after { + content: "\f21c"; +} +.fa-suffix-street-view:after { + content: "\f21d"; +} +.fa-suffix-heartbeat:after { + content: "\f21e"; +} +.fa-suffix-venus:after { + content: "\f221"; +} +.fa-suffix-mars:after { + content: "\f222"; +} +.fa-suffix-mercury:after { + content: "\f223"; +} +.fa-suffix-intersex:after, +.fa-suffix-transgender:after { + content: "\f224"; +} +.fa-suffix-transgender-alt:after { + content: "\f225"; +} +.fa-suffix-venus-double:after { + content: "\f226"; +} +.fa-suffix-mars-double:after { + content: "\f227"; +} +.fa-suffix-venus-mars:after { + content: "\f228"; +} +.fa-suffix-mars-stroke:after { + content: "\f229"; +} +.fa-suffix-mars-stroke-v:after { + content: "\f22a"; +} +.fa-suffix-mars-stroke-h:after { + content: "\f22b"; +} +.fa-suffix-neuter:after { + content: "\f22c"; +} +.fa-suffix-genderless:after { + content: "\f22d"; +} +.fa-suffix-facebook-official:after { + content: "\f230"; +} +.fa-suffix-pinterest-p:after { + content: "\f231"; +} +.fa-suffix-whatsapp:after { + content: "\f232"; +} +.fa-suffix-server:after { + content: "\f233"; +} +.fa-suffix-user-plus:after { + content: "\f234"; +} +.fa-suffix-user-times:after { + content: "\f235"; +} +.fa-suffix-hotel:after, +.fa-suffix-bed:after { + content: "\f236"; +} +.fa-suffix-viacoin:after { + content: "\f237"; +} +.fa-suffix-train:after { + content: "\f238"; +} +.fa-suffix-subway:after { + content: "\f239"; +} +.fa-suffix-medium:after { + content: "\f23a"; +} +.fa-suffix-yc:after, +.fa-suffix-y-combinator:after { + content: "\f23b"; +} +.fa-suffix-optin-monster:after { + content: "\f23c"; +} +.fa-suffix-opencart:after { + content: "\f23d"; +} +.fa-suffix-expeditedssl:after { + content: "\f23e"; +} +.fa-suffix-battery-4:after, +.fa-suffix-battery:after, +.fa-suffix-battery-full:after { + content: "\f240"; +} +.fa-suffix-battery-3:after, +.fa-suffix-battery-three-quarters:after { + content: "\f241"; +} +.fa-suffix-battery-2:after, +.fa-suffix-battery-half:after { + content: "\f242"; +} +.fa-suffix-battery-1:after, +.fa-suffix-battery-quarter:after { + content: "\f243"; +} +.fa-suffix-battery-0:after, +.fa-suffix-battery-empty:after { + content: "\f244"; +} +.fa-suffix-mouse-pointer:after { + content: "\f245"; +} +.fa-suffix-i-cursor:after { + content: "\f246"; +} +.fa-suffix-object-group:after { + content: "\f247"; +} +.fa-suffix-object-ungroup:after { + content: "\f248"; +} +.fa-suffix-sticky-note:after { + content: "\f249"; +} +.fa-suffix-sticky-note-o:after { + content: "\f24a"; +} +.fa-suffix-cc-jcb:after { + content: "\f24b"; +} +.fa-suffix-cc-diners-club:after { + content: "\f24c"; +} +.fa-suffix-clone:after { + content: "\f24d"; +} +.fa-suffix-balance-scale:after { + content: "\f24e"; +} +.fa-suffix-hourglass-o:after { + content: "\f250"; +} +.fa-suffix-hourglass-1:after, +.fa-suffix-hourglass-start:after { + content: "\f251"; +} +.fa-suffix-hourglass-2:after, +.fa-suffix-hourglass-half:after { + content: "\f252"; +} +.fa-suffix-hourglass-3:after, +.fa-suffix-hourglass-end:after { + content: "\f253"; +} +.fa-suffix-hourglass:after { + content: "\f254"; +} +.fa-suffix-hand-grab-o:after, +.fa-suffix-hand-rock-o:after { + content: "\f255"; +} +.fa-suffix-hand-stop-o:after, +.fa-suffix-hand-paper-o:after { + content: "\f256"; +} +.fa-suffix-hand-scissors-o:after { + content: "\f257"; +} +.fa-suffix-hand-lizard-o:after { + content: "\f258"; +} +.fa-suffix-hand-spock-o:after { + content: "\f259"; +} +.fa-suffix-hand-pointer-o:after { + content: "\f25a"; +} +.fa-suffix-hand-peace-o:after { + content: "\f25b"; +} +.fa-suffix-trademark:after { + content: "\f25c"; +} +.fa-suffix-registered:after { + content: "\f25d"; +} +.fa-suffix-creative-commons:after { + content: "\f25e"; +} +.fa-suffix-gg:after { + content: "\f260"; +} +.fa-suffix-gg-circle:after { + content: "\f261"; +} +.fa-suffix-tripadvisor:after { + content: "\f262"; +} +.fa-suffix-odnoklassniki:after { + content: "\f263"; +} +.fa-suffix-odnoklassniki-square:after { + content: "\f264"; +} +.fa-suffix-get-pocket:after { + content: "\f265"; +} +.fa-suffix-wikipedia-w:after { + content: "\f266"; +} +.fa-suffix-safari:after { + content: "\f267"; +} +.fa-suffix-chrome:after { + content: "\f268"; +} +.fa-suffix-firefox:after { + content: "\f269"; +} +.fa-suffix-opera:after { + content: "\f26a"; +} +.fa-suffix-internet-explorer:after { + content: "\f26b"; +} +.fa-suffix-tv:after, +.fa-suffix-television:after { + content: "\f26c"; +} +.fa-suffix-contao:after { + content: "\f26d"; +} +.fa-suffix-500px:after { + content: "\f26e"; +} +.fa-suffix-amazon:after { + content: "\f270"; +} +.fa-suffix-calendar-plus-o:after { + content: "\f271"; +} +.fa-suffix-calendar-minus-o:after { + content: "\f272"; +} +.fa-suffix-calendar-times-o:after { + content: "\f273"; +} +.fa-suffix-calendar-check-o:after { + content: "\f274"; +} +.fa-suffix-industry:after { + content: "\f275"; +} +.fa-suffix-map-pin:after { + content: "\f276"; +} +.fa-suffix-map-signs:after { + content: "\f277"; +} +.fa-suffix-map-o:after { + content: "\f278"; +} +.fa-suffix-map:after { + content: "\f279"; +} +.fa-suffix-commenting:after { + content: "\f27a"; +} +.fa-suffix-commenting-o:after { + content: "\f27b"; +} +.fa-suffix-houzz:after { + content: "\f27c"; +} +.fa-suffix-vimeo:after { + content: "\f27d"; +} +.fa-suffix-black-tie:after { + content: "\f27e"; +} +.fa-suffix-fonticons:after { + content: "\f280"; +} +.fa-suffix-reddit-alien:after { + content: "\f281"; +} +.fa-suffix-edge:after { + content: "\f282"; +} +.fa-suffix-credit-card-alt:after { + content: "\f283"; +} +.fa-suffix-codiepie:after { + content: "\f284"; +} +.fa-suffix-modx:after { + content: "\f285"; +} +.fa-suffix-fort-awesome:after { + content: "\f286"; +} +.fa-suffix-usb:after { + content: "\f287"; +} +.fa-suffix-product-hunt:after { + content: "\f288"; +} +.fa-suffix-mixcloud:after { + content: "\f289"; +} +.fa-suffix-scribd:after { + content: "\f28a"; +} +.fa-suffix-pause-circle:after { + content: "\f28b"; +} +.fa-suffix-pause-circle-o:after { + content: "\f28c"; +} +.fa-suffix-stop-circle:after { + content: "\f28d"; +} +.fa-suffix-stop-circle-o:after { + content: "\f28e"; +} +.fa-suffix-shopping-bag:after { + content: "\f290"; +} +.fa-suffix-shopping-basket:after { + content: "\f291"; +} +.fa-suffix-hashtag:after { + content: "\f292"; +} +.fa-suffix-bluetooth:after { + content: "\f293"; +} +.fa-suffix-bluetooth-b:after { + content: "\f294"; +} +.fa-suffix-percent:after { + content: "\f295"; +} +.fa-suffix-gitlab:after { + content: "\f296"; +} +.fa-suffix-wpbeginner:after { + content: "\f297"; +} +.fa-suffix-wpforms:after { + content: "\f298"; +} +.fa-suffix-envira:after { + content: "\f299"; +} +.fa-suffix-universal-access:after { + content: "\f29a"; +} +.fa-suffix-wheelchair-alt:after { + content: "\f29b"; +} +.fa-suffix-question-circle-o:after { + content: "\f29c"; +} +.fa-suffix-blind:after { + content: "\f29d"; +} +.fa-suffix-audio-description:after { + content: "\f29e"; +} +.fa-suffix-volume-control-phone:after { + content: "\f2a0"; +} +.fa-suffix-braille:after { + content: "\f2a1"; +} +.fa-suffix-assistive-listening-systems:after { + content: "\f2a2"; +} +.fa-suffix-asl-interpreting:after, +.fa-suffix-american-sign-language-interpreting:after { + content: "\f2a3"; +} +.fa-suffix-deafness:after, +.fa-suffix-hard-of-hearing:after, +.fa-suffix-deaf:after { + content: "\f2a4"; +} +.fa-suffix-glide:after { + content: "\f2a5"; +} +.fa-suffix-glide-g:after { + content: "\f2a6"; +} +.fa-suffix-signing:after, +.fa-suffix-sign-language:after { + content: "\f2a7"; +} +.fa-suffix-low-vision:after { + content: "\f2a8"; +} +.fa-suffix-viadeo:after { + content: "\f2a9"; +} +.fa-suffix-viadeo-square:after { + content: "\f2aa"; +} +.fa-suffix-snapchat:after { + content: "\f2ab"; +} +.fa-suffix-snapchat-ghost:after { + content: "\f2ac"; +} +.fa-suffix-snapchat-square:after { + content: "\f2ad"; +} +.fa-suffix-pied-piper:after { + content: "\f2ae"; +} +.fa-suffix-first-order:after { + content: "\f2b0"; +} +.fa-suffix-yoast:after { + content: "\f2b1"; +} +.fa-suffix-themeisle:after { + content: "\f2b2"; +} +.fa-suffix-google-plus-circle:after, +.fa-suffix-google-plus-official:after { + content: "\f2b3"; +} +.fa-suffix-fa:after, +.fa-suffix-font-awesome:after { + content: "\f2b4"; +} +.fa-suffix-handshake-o:after { + content: "\f2b5"; +} +.fa-suffix-envelope-open:after { + content: "\f2b6"; +} +.fa-suffix-envelope-open-o:after { + content: "\f2b7"; +} +.fa-suffix-linode:after { + content: "\f2b8"; +} +.fa-suffix-address-book:after { + content: "\f2b9"; +} +.fa-suffix-address-book-o:after { + content: "\f2ba"; +} +.fa-suffix-vcard:after, +.fa-suffix-address-card:after { + content: "\f2bb"; +} +.fa-suffix-vcard-o:after, +.fa-suffix-address-card-o:after { + content: "\f2bc"; +} +.fa-suffix-user-circle:after { + content: "\f2bd"; +} +.fa-suffix-user-circle-o:after { + content: "\f2be"; +} +.fa-suffix-user-o:after { + content: "\f2c0"; +} +.fa-suffix-id-badge:after { + content: "\f2c1"; +} +.fa-suffix-drivers-license:after, +.fa-suffix-id-card:after { + content: "\f2c2"; +} +.fa-suffix-drivers-license-o:after, +.fa-suffix-id-card-o:after { + content: "\f2c3"; +} +.fa-suffix-quora:after { + content: "\f2c4"; +} +.fa-suffix-free-code-camp:after { + content: "\f2c5"; +} +.fa-suffix-telegram:after { + content: "\f2c6"; +} +.fa-suffix-thermometer-4:after, +.fa-suffix-thermometer:after, +.fa-suffix-thermometer-full:after { + content: "\f2c7"; +} +.fa-suffix-thermometer-3:after, +.fa-suffix-thermometer-three-quarters:after { + content: "\f2c8"; +} +.fa-suffix-thermometer-2:after, +.fa-suffix-thermometer-half:after { + content: "\f2c9"; +} +.fa-suffix-thermometer-1:after, +.fa-suffix-thermometer-quarter:after { + content: "\f2ca"; +} +.fa-suffix-thermometer-0:after, +.fa-suffix-thermometer-empty:after { + content: "\f2cb"; +} +.fa-suffix-shower:after { + content: "\f2cc"; +} +.fa-suffix-bathtub:after, +.fa-suffix-s15:after, +.fa-suffix-bath:after { + content: "\f2cd"; +} +.fa-suffix-podcast:after { + content: "\f2ce"; +} +.fa-suffix-window-maximize:after { + content: "\f2d0"; +} +.fa-suffix-window-minimize:after { + content: "\f2d1"; +} +.fa-suffix-window-restore:after { + content: "\f2d2"; +} +.fa-suffix-times-rectangle:after, +.fa-suffix-window-close:after { + content: "\f2d3"; +} +.fa-suffix-times-rectangle-o:after, +.fa-suffix-window-close-o:after { + content: "\f2d4"; +} +.fa-suffix-bandcamp:after { + content: "\f2d5"; +} +.fa-suffix-grav:after { + content: "\f2d6"; +} +.fa-suffix-etsy:after { + content: "\f2d7"; +} +.fa-suffix-imdb:after { + content: "\f2d8"; +} +.fa-suffix-ravelry:after { + content: "\f2d9"; +} +.fa-suffix-eercast:after { + content: "\f2da"; +} +.fa-suffix-microchip:after { + content: "\f2db"; +} +.fa-suffix-snowflake-o:after { + content: "\f2dc"; +} +.fa-suffix-superpowers:after { + content: "\f2dd"; +} +.fa-suffix-wpexplorer:after { + content: "\f2de"; +} +.fa-suffix-meetup:after { + content: "\f2e0"; +} diff --git a/addons/web/static/lib/pdfjs/web/ui_utils.js b/addons/web/static/lib/pdfjs/web/ui_utils.js index 7e798e34270..5480224846b 100644 --- a/addons/web/static/lib/pdfjs/web/ui_utils.js +++ b/addons/web/static/lib/pdfjs/web/ui_utils.js @@ -348,6 +348,10 @@ var ProgressBar = (function ProgressBarClosure() { this.div.classList.remove('indeterminate'); var progressSize = this.width * this._percent / 100; this.div.style.width = progressSize + this.units; + // Add attributes for screen readers and analysis tools + this.bar.setAttribute('aria-valuemin', 0); + this.bar.setAttribute('aria-valuemax', 100); + this.bar.setAttribute('aria-valuenow', this._percent); }, get percent() { @@ -377,6 +381,7 @@ var ProgressBar = (function ProgressBarClosure() { } this.visible = false; this.bar.classList.add('hidden'); + this.bar.setAttribute('aria-hidden', "true") document.body.classList.remove('loadingInProgress'); }, @@ -387,6 +392,7 @@ var ProgressBar = (function ProgressBarClosure() { this.visible = true; document.body.classList.add('loadingInProgress'); this.bar.classList.remove('hidden'); + this.bar.setAttribute('aria-hidden', "false") } }; diff --git a/addons/web/static/lib/qweb/qweb-test-attributes.xml b/addons/web/static/lib/qweb/qweb-test-attributes.xml index e16ef8a3f0e..b599b76b629 100644 --- a/addons/web/static/lib/qweb/qweb-test-attributes.xml +++ b/addons/web/static/lib/qweb/qweb-test-attributes.xml @@ -5,9 +5,9 @@ ]]> - + Test - ]]> + ]]>
diff --git a/addons/web/static/lib/qweb/qweb2.js b/addons/web/static/lib/qweb/qweb2.js index 94a0afaa32a..6ce74539926 100644 --- a/addons/web/static/lib/qweb/qweb2.js +++ b/addons/web/static/lib/qweb/qweb2.js @@ -471,10 +471,10 @@ QWeb2.Engine = (function() { if (this.debug && window.console) { console.log(code); } - this.tools.exception("Error evaluating template: " + error, { template: name }); + this.tools.exception("Error evaluating template: " + error, { template: template }); } if (!tcompiled) { - this.tools.exception("Error evaluating template: (IE?)" + error, { template: name }); + this.tools.exception("Error evaluating template: (IE?)" + error, { template: template }); } this.compiled_templates[template] = tcompiled; return this.render(template, dict); diff --git a/addons/web/static/src/js/core/dialog.js b/addons/web/static/src/js/core/dialog.js index 7d4796886b7..6ebd94ef13e 100644 --- a/addons/web/static/src/js/core/dialog.js +++ b/addons/web/static/src/js/core/dialog.js @@ -17,12 +17,13 @@ var _t = core._t; * always exists during the lifecycle of the dialog. **/ var Dialog = Widget.extend({ + tagName: 'main', xmlDependencies: ['/web/static/src/xml/dialog.xml'], custom_events: _.extend({}, Widget.prototype.custom_events, { focus_control_button: '_onFocusControlButton', }), events: _.extend({} , Widget.prototype.events, { - 'keydown .modal-footer button':'_onFooterButtonKeyDown', + 'keydown footer.modal-footer button':'_onFooterButtonKeyDown', }), /** * @param {Widget} parent @@ -92,7 +93,7 @@ var Dialog = Widget.extend({ self.$modal.find('.modal-dialog').addClass('modal-sm'); break; } - self.$footer = self.$modal.find(".modal-footer"); + self.$footer = self.$modal.find("footer"); self.set_buttons(self.buttons); self.$modal.on('hidden.bs.modal', _.bind(self.destroy, self)); }); @@ -168,7 +169,17 @@ var Dialog = Widget.extend({ var self = this; this.appendTo($('
')).then(function () { - self.$modal.find(".modal-body").replaceWith(self.$el); + var $main = self.$modal.find("main:first"); + if ($main.length === 0) { + $main = self.$modal.find(".modal-body:first"); + } + if (self.$el.tagName !== 'MAIN') { + self.$el.removeClass(".modal-body"); + self.$el = $('
').append(self.$el); + } + $main.replaceWith(self.$el); + self.$modal.attr('open', true); + self.$modal.removeAttr("aria-hidden"); self.$modal.modal('show'); self._opened.resolve(); }); @@ -201,11 +212,13 @@ var Dialog = Widget.extend({ $('.tooltip').remove(); //remove open tooltip if any to prevent them staying when modal has disappeared if (this.$modal) { this.$modal.modal('hide'); + this.$modal.removeAttr('open'); + this.$modal.attr('aria-hidden', true); this.$modal.remove(); } if (!isFocusSet) { - var modals = $('body > .modal').filter(':visible'); + var modals = $('body > [role="dialog"]').filter(':visible'); if (modals.length) { modals.last().focus(); // Keep class modal-open (deleted by bootstrap hide fnct) on body to allow scrolling inside the modal @@ -287,9 +300,9 @@ Dialog.alert = function (owner, message, options) { return new Dialog(owner, _.extend({ size: 'medium', buttons: buttons, - $content: $('
', { + $content: $('
').append($('

', { text: message, - }), + })), title: _t("Alert"), }, options)).open({shouldFocusButtons:true}); }; @@ -312,9 +325,9 @@ Dialog.confirm = function (owner, message, options) { return new Dialog(owner, _.extend({ size: 'medium', buttons: buttons, - $content: $('

', { + $content: $('
').append($('

', { text: message, - }), + })), title: _t("Confirmation"), }, options)).open({shouldFocusButtons:true}); }; @@ -345,7 +358,7 @@ Dialog.safeConfirm = function (owner, message, options) { text: message, }); } - $content = $('

').append($content, $securityCheck); + $content = $('
').append($content, $securityCheck); var buttons = [ { diff --git a/addons/web/static/src/js/fields/abstract_field.js b/addons/web/static/src/js/fields/abstract_field.js index 9bb61475b83..eab0093ed50 100644 --- a/addons/web/static/src/js/fields/abstract_field.js +++ b/addons/web/static/src/js/fields/abstract_field.js @@ -310,6 +310,7 @@ var AbstractField = Widget.extend({ */ removeInvalidClass: function () { this.$el.removeClass('o_field_invalid'); + this.$el.removeAttr('aria-invalid'); }, /** @@ -317,6 +318,7 @@ var AbstractField = Widget.extend({ */ setInvalidClass: function () { this.$el.addClass('o_field_invalid'); + this.$el.attr('aria-invalid', 'true'); }, /** diff --git a/addons/web/static/src/js/fields/basic_fields.js b/addons/web/static/src/js/fields/basic_fields.js index 43b4e349a66..0cf9271de9d 100644 --- a/addons/web/static/src/js/fields/basic_fields.js +++ b/addons/web/static/src/js/fields/basic_fields.js @@ -397,9 +397,10 @@ var LinkButton = AbstractField.extend({ if (this.value) { var className = this.attrs.icon || 'fa-globe'; - this.$el.html(""); + this.$el.html(""); this.$el.addClass("fa "+ className); this.$el.attr('title', this.value); + this.$el.attr('aria-label', this.value); } }, @@ -1460,6 +1461,7 @@ var PriorityWidget = AbstractField.extend({ _renderStar: function (tag, isFull, index, tip) { return $(tag) .attr('title', tip) + .attr('aria-label', tip) .attr('data-index', index) .addClass('o_priority_star fa') .toggleClass('fa-star', isFull) @@ -1529,7 +1531,8 @@ var AttachmentImage = AbstractField.extend({ if (this.value) { this.$el.empty().append($('/', { src: "/web/image/" + this.value.data.id + "?unique=1", - title: this.value.data.display_name + title: this.value.data.display_name, + alt: _("Image") })); } } @@ -1598,7 +1601,9 @@ var StateSelectionWidget = AbstractField.extend({ this.$('.o_status') .removeClass('o_status_red o_status_green') .addClass(currentState.state_class) - .prop('special_click', true); + .prop('special_click', true) + .parent().attr('title', currentState.state_name) + .attr('aria-label', currentState.state_name); // Render "FormSelection.Items" and move it into "FormSelection" var $items = $(qweb.render('FormSelection.items', { @@ -1662,8 +1667,9 @@ var FavoriteWidget = AbstractField.extend({ * @private */ _render: function () { - var template = this.attrs.nolabel ? '' : ' %s'; - this.$el.empty().append(_.str.sprintf(template, this.value ? 'fa-star' : 'fa-star-o', this.value ? _t('Remove from Favorites') : _t('Add to Favorites'))); + var tip = this.value ? _t('Remove from Favorites') : _t('Add to Favorites'); + var template = this.attrs.nolabel ? '' : ' %s'; + this.$el.empty().append(_.str.sprintf(template, this.value ? 'fa-star' : 'fa-star-o', tip, tip)); }, //-------------------------------------------------------------------------- @@ -2043,7 +2049,10 @@ var FieldProgressBar = AbstractField.extend({ widthComplete = 100; } - this.$('.o_progress').toggleClass('o_progress_overflow', value > max_value); + this.$('.o_progress').toggleClass('o_progress_overflow', value > max_value) + .attr('aria-valuemin', '0') + .attr('aria-valuemax', max_value) + .attr('aria-valuenow', value); this.$('.o_progressbar_complete').css('width', widthComplete + '%'); if (!this.write_mode) { @@ -2100,6 +2109,7 @@ var FieldToggleBoolean = AbstractField.extend({ .toggleClass('text-muted', !this.value); var title = this.value ? this.attrs.options.active : this.attrs.options.inactive; this.$el.attr('title', title); + this.$el.attr('aria-pressed', this.value); }, //-------------------------------------------------------------------------- diff --git a/addons/web/static/src/js/fields/relational_fields.js b/addons/web/static/src/js/fields/relational_fields.js index c86411b6cd9..83ce59f1eb6 100644 --- a/addons/web/static/src/js/fields/relational_fields.js +++ b/addons/web/static/src/js/fields/relational_fields.js @@ -1867,7 +1867,7 @@ var FormFieldMany2ManyTags = FieldMany2ManyTags.extend({ var $target = $(ev.currentTarget); var color = $target.data('color'); var id = $target.data('id'); - var tag = this.$("span.badge[data-id='" + id + "']"); + var tag = this.$("button.badge[data-id='" + id + "']"); var currentColor = tag.data('color'); var changes = {}; diff --git a/addons/web/static/src/js/views/basic/basic_renderer.js b/addons/web/static/src/js/views/basic/basic_renderer.js index 9834c9c18de..13a00dda046 100644 --- a/addons/web/static/src/js/views/basic/basic_renderer.js +++ b/addons/web/static/src/js/views/basic/basic_renderer.js @@ -50,6 +50,7 @@ var BasicRenderer = AbstractRenderer.extend({ invalidFields.push(widget.name); } widget.$el.toggleClass('o_field_invalid', !canBeSaved); + widget.$el.attr('aria-invalid', !canBeSaved); }); return invalidFields; }, diff --git a/addons/web/static/src/js/views/kanban/kanban_column_progressbar.js b/addons/web/static/src/js/views/kanban/kanban_column_progressbar.js index fad822efdb9..7af6b677dcf 100644 --- a/addons/web/static/src/js/views/kanban/kanban_column_progressbar.js +++ b/addons/web/static/src/js/views/kanban/kanban_column_progressbar.js @@ -166,6 +166,9 @@ var KanbanColumnProgressBar = Widget.extend({ if (count > 0) { $bar.addClass('o_bar_has_records'); $bar.css('width', (count * 100 / self.groupCount) + '%'); + $bar.attr('aria-valuemin', 0); + $bar.attr('aria-valuemax', self.groupCount); + $bar.attr('aria-valuenow', count); } else { $bar.css('width', ''); } diff --git a/addons/web/static/src/js/views/kanban/kanban_column_quick_create.js b/addons/web/static/src/js/views/kanban/kanban_column_quick_create.js index 170b950a49d..f554d333bc9 100644 --- a/addons/web/static/src/js/views/kanban/kanban_column_quick_create.js +++ b/addons/web/static/src/js/views/kanban/kanban_column_quick_create.js @@ -216,7 +216,7 @@ var ColumnQuickCreate = Widget.extend({ } // ignore clicks in modals - if ($(event.target).closest('.modal').length) { + if ($(event.target).closest('[role="dialog"]').length) { return; } diff --git a/addons/web/static/src/js/views/kanban/kanban_record.js b/addons/web/static/src/js/views/kanban/kanban_record.js index 30bafaab117..66171d2693c 100644 --- a/addons/web/static/src/js/views/kanban/kanban_record.js +++ b/addons/web/static/src/js/views/kanban/kanban_record.js @@ -17,7 +17,21 @@ var widgetRegistry = require('web.widget_registry'); var _t = core._t; var QWeb = core.qweb; -var NB_KANBAN_RECORD_COLORS = 12; +var KANBAN_RECORD_COLORS = [ + _t('No color'), + _t('Red'), + _t('Orange'), + _t('Yellow'), + _t('Light blue'), + _t('Dark purple'), + _t('Salmon pink'), + _t('Medium blue'), + _t('Dark blue'), + _t('Fushia'), + _t('Green'), + _t('Purple'), +]; +var NB_KANBAN_RECORD_COLORS = KANBAN_RECORD_COLORS.length; var KanbanRecord = Widget.extend({ events: { @@ -126,6 +140,17 @@ var KanbanRecord = Widget.extend({ } return 0; }, + /** + * Computes a color name from value + * + * @private + * @param {number | string} variable + * @returns {integer} the color name + */ + _getColorname: function (variable) { + var colorID = this._getColorID(variable); + return KANBAN_RECORD_COLORS[colorID]; + }, /** * @private * @param {string} model the name of the model @@ -284,6 +309,7 @@ var KanbanRecord = Widget.extend({ _render: function () { this._replaceElement(this.qweb.render('kanban-box', this.qweb_context)); this.$el.addClass('o_kanban_record').attr("tabindex",0); + this.$el.attr('role', 'article'); this.$el.data('record', this); if (this.$el.hasClass('oe_kanban_global_click') || this.$el.hasClass('oe_kanban_global_click_edit')) { @@ -338,6 +364,7 @@ var KanbanRecord = Widget.extend({ kanban_image: this._getImageURL.bind(this), kanban_color: this._getColorClassname.bind(this), kanban_getcolor: this._getColorID.bind(this), + kanban_getcolorname: this._getColorname.bind(this), kanban_compute_domain: this._computeDomain.bind(this), read_only_mode: this.read_only_mode, record: this.record, @@ -354,8 +381,10 @@ var KanbanRecord = Widget.extend({ _setupColor: function () { var color_field = this.$el.attr('color'); if (color_field && color_field in this.fields) { + var colorHelp = _.str.sprintf(_t("Card color: %s"), this._getColorname(this.recordData[color_field])); var colorClass = this._getColorClassname(this.recordData[color_field]); this.$el.addClass(colorClass); + this.$el.prepend(''); } }, /** diff --git a/addons/web/static/src/js/views/kanban/kanban_record_quick_create.js b/addons/web/static/src/js/views/kanban/kanban_record_quick_create.js index bf7e60b68c3..749938e8b9e 100644 --- a/addons/web/static/src/js/views/kanban/kanban_record_quick_create.js +++ b/addons/web/static/src/js/views/kanban/kanban_record_quick_create.js @@ -232,7 +232,7 @@ var RecordQuickCreate = Widget.extend({ } // ignore clicks in modals - if ($(ev.target).closest('.modal').length) { + if ($(ev.target).closest('[role="dialog"]').length) { return; } diff --git a/addons/web/static/src/js/views/list/list_editable_renderer.js b/addons/web/static/src/js/views/list/list_editable_renderer.js index 07aa8eacb4e..9ec82878e70 100644 --- a/addons/web/static/src/js/views/list/list_editable_renderer.js +++ b/addons/web/static/src/js/views/list/list_editable_renderer.js @@ -527,7 +527,7 @@ ListRenderer.include({ _renderRows: function () { var $rows = this._super(); if (this.addCreateLine) { - var $a = $('').text(_t("Add a line")); + var $a = $('').text(_t("Add a line")); var $td = $('') .attr('colspan', this._getNumberOfCols()) .addClass('o_field_x2many_list_row_add') @@ -923,9 +923,9 @@ ListRenderer.include({ // ignore clicks in modals, except if the list is in a modal, and the // click is performed in that modal - var $clickModal = $(event.target).closest('.modal'); + var $clickModal = $(event.target).closest('[role="dialog"]'); if ($clickModal.length) { - var $listModal = this.$el.closest('.modal'); + var $listModal = this.$el.closest('[role="dialog"]'); if ($clickModal.prop('id') !== $listModal.prop('id')) { return; } diff --git a/addons/web/static/src/js/views/list/list_renderer.js b/addons/web/static/src/js/views/list/list_renderer.js index bf206eae32c..e84d6687cc9 100644 --- a/addons/web/static/src/js/views/list/list_renderer.js +++ b/addons/web/static/src/js/views/list/list_renderer.js @@ -549,6 +549,10 @@ var ListRenderer = BasicRenderer.extend({ .toggleClass('o-sort-up', isNodeSorted ? order[0].asc : false) .addClass(field.sortable && 'o_column_sortable'); + if (isNodeSorted) { + $th.attr('aria-sort', order[0].asc ? 'ascending': 'descending'); + } + if (field.type === 'float' || field.type === 'integer' || field.type === 'monetary') { $th.css({textAlign: 'right'}); } diff --git a/addons/web/static/src/js/views/pivot/pivot_renderer.js b/addons/web/static/src/js/views/pivot/pivot_renderer.js index b5648d358a9..b3953076161 100644 --- a/addons/web/static/src/js/views/pivot/pivot_renderer.js +++ b/addons/web/static/src/js/views/pivot/pivot_renderer.js @@ -96,6 +96,11 @@ var PivotRenderer = AbstractRenderer.extend({ $cell.data('id', cell.id).data('measure', cell.measure); if (cell.id === this.state.sortedColumn.id && cell.measure === this.state.sortedColumn.measure) { $cell.addClass('o_pivot_measure_row_sorted_' + this.state.sortedColumn.order); + if (this.state.sortedColumn.order == 'asc') { + $cell.attr('aria-sorted', 'ascending'); + } else { + $cell.attr('aria-sorted', 'descending'); + } } } $row.append($cell); diff --git a/addons/web/static/src/js/widgets/change_password.js b/addons/web/static/src/js/widgets/change_password.js index c05fa30408b..b2e4e013335 100644 --- a/addons/web/static/src/js/widgets/change_password.js +++ b/addons/web/static/src/js/widgets/change_password.js @@ -28,7 +28,7 @@ var ChangePassword = AbstractAction.extend({ var $button = self.$('.oe_form_button'); $button.appendTo(this.getParent().$footer); $button.eq(1).click(function () { - self.$el.parents('.modal').modal('hide'); + self.$el.parents('[role="dialog"]').modal('hide'); }); $button.eq(0).click(function () { self._rpc({ diff --git a/addons/web/static/src/js/widgets/debug_manager.js b/addons/web/static/src/js/widgets/debug_manager.js index 4b86b76c36d..4bdc27448a0 100644 --- a/addons/web/static/src/js/widgets/debug_manager.js +++ b/addons/web/static/src/js/widgets/debug_manager.js @@ -848,7 +848,7 @@ if (config.debug) { if (action) { var controller = parent.getCurrentControllerInDialog(); self.debugManager = new DebugManager(self); - var $header = self.$modal.find('.modal-header:first'); + var $header = self.$modal.find('header.modal-header:first'); return self.debugManager.prependTo($header).then(function () { self.debugManager.update('action', action, controller.widget); }); diff --git a/addons/web/static/src/js/widgets/domain_selector_dialog.js b/addons/web/static/src/js/widgets/domain_selector_dialog.js index 46b54089c5f..d0c0030b100 100644 --- a/addons/web/static/src/js/widgets/domain_selector_dialog.js +++ b/addons/web/static/src/js/widgets/domain_selector_dialog.js @@ -43,7 +43,7 @@ return Dialog.extend({ var self = this; this.opened().then(function () { // this restores default modal height (bootstrap) and allows field selector to overflow - self.$el.css('overflow', 'visible').closest('.modal-dialog').css('height', 'auto'); + self.$el.css('overflow', 'visible').closest('[role="dialog"]').css('height', 'auto'); }); return $.when( this._super.apply(this, arguments), diff --git a/addons/web/static/src/scss/ui.scss b/addons/web/static/src/scss/ui.scss index 8911b4f10ab..d88f21f83a1 100644 --- a/addons/web/static/src/scss/ui.scss +++ b/addons/web/static/src/scss/ui.scss @@ -9,3 +9,7 @@ .ui-autocomplete { z-index: $zindex-modal + 1; } + +[aria-hidden="true"], [aria-hidden="1"] { + display: none!important; +} diff --git a/addons/web/static/src/scss/utils.scss b/addons/web/static/src/scss/utils.scss index efb8dce7598..cf04a8d32f8 100644 --- a/addons/web/static/src/scss/utils.scss +++ b/addons/web/static/src/scss/utils.scss @@ -337,6 +337,14 @@ } } } +.oe_kanban_color_help { + bottom: 0px; + left: -1px; + top: 0px; + width: 6px; + position: absolute; + right: auto; +} @mixin o-kanban-slim-col { position: relative; @include o-flex(0, 0, auto); diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 328f1ab93b5..45bd3555d69 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -6,13 +6,13 @@
-
+ -

+

-