From d93fb10f882d8630b8f7e99e307e6124868c3cd0 Mon Sep 17 00:00:00 2001 From: Shamim Rezaie Date: Mon, 28 Jun 2021 02:29:59 +1000 Subject: [PATCH] MDL-71603 editor_atto: set aria-pressed when a button status is changed --- .../moodle-atto_collapse-button-debug.js | 2 ++ .../moodle-atto_collapse-button-min.js | 2 +- .../moodle-atto_collapse-button/moodle-atto_collapse-button.js | 2 ++ lib/editor/atto/plugins/collapse/yui/src/button/js/button.js | 2 ++ .../moodle-editor_atto-plugin-debug.js | 2 ++ .../moodle-editor_atto-plugin/moodle-editor_atto-plugin-min.js | 2 +- .../moodle-editor_atto-plugin/moodle-editor_atto-plugin.js | 2 ++ lib/editor/atto/yui/src/editor/js/editor-plugin-buttons.js | 2 ++ 8 files changed, 14 insertions(+), 2 deletions(-) diff --git a/lib/editor/atto/plugins/collapse/yui/build/moodle-atto_collapse-button/moodle-atto_collapse-button-debug.js b/lib/editor/atto/plugins/collapse/yui/build/moodle-atto_collapse-button/moodle-atto_collapse-button-debug.js index 9670e659d1a..9a13089aca9 100644 --- a/lib/editor/atto/plugins/collapse/yui/build/moodle-atto_collapse-button/moodle-atto_collapse-button-debug.js +++ b/lib/editor/atto/plugins/collapse/yui/build/moodle-atto_collapse-button/moodle-atto_collapse-button-debug.js @@ -129,6 +129,8 @@ Y.namespace('M.atto_collapse').Button = Y.Base.create('button', Y.M.editor_atto. button.setAttribute('aria-expanded', 'false'); } + // We don't want to have both aria-pressed and aria-expanded set. So we remove aria-pressed here. + button.removeAttribute('aria-pressed'); } }, { ATTRS: { diff --git a/lib/editor/atto/plugins/collapse/yui/build/moodle-atto_collapse-button/moodle-atto_collapse-button-min.js b/lib/editor/atto/plugins/collapse/yui/build/moodle-atto_collapse-button/moodle-atto_collapse-button-min.js index 4bf01ef0d35..76eb86e187c 100644 --- a/lib/editor/atto/plugins/collapse/yui/build/moodle-atto_collapse-button/moodle-atto_collapse-button-min.js +++ b/lib/editor/atto/plugins/collapse/yui/build/moodle-atto_collapse-button/moodle-atto_collapse-button-min.js @@ -1 +1 @@ -YUI.add("moodle-atto_collapse-button",function(s,t){var o="atto_collapse",a="showgroups",e="collapse",l="collapsed",n=".atto_group",r=".atto_toolbar_row";s.namespace("M.atto_collapse").Button=s.Base.create("button",s.M.editor_atto.EditorPlugin,[],{initializer:function(){var t,i=s.Object.size(this.get("host").get("plugins"));i<=1+parseInt(this.get(a),10)||this.toolbar.all(n).size()>this.get(a)||(t=this.addButton({icon:"icon",iconComponent:o,callback:this._toggle}),this.get("host").on("pluginsloaded",function(t,i){var e,o=[s.Node.create('
'),s.Node.create('
')];this.toolbar.appendChild(o[0]).insert(o[1],"after"),(e=this.toolbar.all(n)).slice(0,this.get(a)).each(function(t){o[0].appendChild(t)}),e.slice(this.get(a)).each(function(t){o[1].appendChild(t)}),this._setVisibility(i),i.setAttribute("aria-expanded","false")},this,t))},_toggle:function(t){t.preventDefault();var i=this.buttons[e];i.getData(l)?(this.highlightButtons(e),this._setVisibility(i,!0),this.toolbar.all(r).item(1).focus()):(this.unHighlightButtons(e),this._setVisibility(i),this.buttons[this.name].focus())},_setVisibility:function(t,i){var e=this.toolbar.all(r).item(1);i?(t.set("title",M.util.get_string("showfewer",o)),e.show(),t.setData(l,!1),t.setAttribute("aria-expanded","true")):(t.set("title",M.util.get_string("showmore",o)),e.hide(),t.setData(l,!0),t.setAttribute("aria-expanded","false"))}},{ATTRS:{showgroups:{value:3}}})},"@VERSION@",{requires:["moodle-editor_atto-plugin"]}); \ No newline at end of file +YUI.add("moodle-atto_collapse-button",function(s,t){var o="atto_collapse",a="showgroups",e="collapse",l="collapsed",n=".atto_group",r=".atto_toolbar_row";s.namespace("M.atto_collapse").Button=s.Base.create("button",s.M.editor_atto.EditorPlugin,[],{initializer:function(){var t,i=s.Object.size(this.get("host").get("plugins"));i<=1+parseInt(this.get(a),10)||this.toolbar.all(n).size()>this.get(a)||(t=this.addButton({icon:"icon",iconComponent:o,callback:this._toggle}),this.get("host").on("pluginsloaded",function(t,i){var e,o=[s.Node.create('
'),s.Node.create('
')];this.toolbar.appendChild(o[0]).insert(o[1],"after"),(e=this.toolbar.all(n)).slice(0,this.get(a)).each(function(t){o[0].appendChild(t)}),e.slice(this.get(a)).each(function(t){o[1].appendChild(t)}),this._setVisibility(i),i.setAttribute("aria-expanded","false")},this,t))},_toggle:function(t){t.preventDefault();var i=this.buttons[e];i.getData(l)?(this.highlightButtons(e),this._setVisibility(i,!0),this.toolbar.all(r).item(1).focus()):(this.unHighlightButtons(e),this._setVisibility(i),this.buttons[this.name].focus())},_setVisibility:function(t,i){var e=this.toolbar.all(r).item(1);i?(t.set("title",M.util.get_string("showfewer",o)),e.show(),t.setData(l,!1),t.setAttribute("aria-expanded","true")):(t.set("title",M.util.get_string("showmore",o)),e.hide(),t.setData(l,!0),t.setAttribute("aria-expanded","false")),t.removeAttribute("aria-pressed")}},{ATTRS:{showgroups:{value:3}}})},"@VERSION@",{requires:["moodle-editor_atto-plugin"]}); \ No newline at end of file diff --git a/lib/editor/atto/plugins/collapse/yui/build/moodle-atto_collapse-button/moodle-atto_collapse-button.js b/lib/editor/atto/plugins/collapse/yui/build/moodle-atto_collapse-button/moodle-atto_collapse-button.js index 649b4fd3401..fb3768eeffa 100644 --- a/lib/editor/atto/plugins/collapse/yui/build/moodle-atto_collapse-button/moodle-atto_collapse-button.js +++ b/lib/editor/atto/plugins/collapse/yui/build/moodle-atto_collapse-button/moodle-atto_collapse-button.js @@ -125,6 +125,8 @@ Y.namespace('M.atto_collapse').Button = Y.Base.create('button', Y.M.editor_atto. button.setAttribute('aria-expanded', 'false'); } + // We don't want to have both aria-pressed and aria-expanded set. So we remove aria-pressed here. + button.removeAttribute('aria-pressed'); } }, { ATTRS: { diff --git a/lib/editor/atto/plugins/collapse/yui/src/button/js/button.js b/lib/editor/atto/plugins/collapse/yui/src/button/js/button.js index f0aae34403d..661ca2c4e1a 100644 --- a/lib/editor/atto/plugins/collapse/yui/src/button/js/button.js +++ b/lib/editor/atto/plugins/collapse/yui/src/button/js/button.js @@ -127,6 +127,8 @@ Y.namespace('M.atto_collapse').Button = Y.Base.create('button', Y.M.editor_atto. button.setAttribute('aria-expanded', 'false'); } + // We don't want to have both aria-pressed and aria-expanded set. So we remove aria-pressed here. + button.removeAttribute('aria-pressed'); } }, { ATTRS: { diff --git a/lib/editor/atto/yui/build/moodle-editor_atto-plugin/moodle-editor_atto-plugin-debug.js b/lib/editor/atto/yui/build/moodle-editor_atto-plugin/moodle-editor_atto-plugin-debug.js index 3ab44aa0dca..ea4b1ae4b6d 100644 --- a/lib/editor/atto/yui/build/moodle-editor_atto-plugin/moodle-editor_atto-plugin-debug.js +++ b/lib/editor/atto/yui/build/moodle-editor_atto-plugin/moodle-editor_atto-plugin-debug.js @@ -1041,11 +1041,13 @@ EditorPluginButtons.prototype = { if (button) { if (this.buttons[button]) { this.buttons[button][method](HIGHLIGHT); + this.buttons[button].setAttribute('aria-pressed', highlight ? 'true' : 'false'); this._buttonHighlightToggled(button, highlight); } } else { Y.Object.each(this.buttons, function(button) { button[method](HIGHLIGHT); + button.setAttribute('aria-pressed', highlight ? 'true' : 'false'); this._buttonHighlightToggled(button, highlight); }, this); } diff --git a/lib/editor/atto/yui/build/moodle-editor_atto-plugin/moodle-editor_atto-plugin-min.js b/lib/editor/atto/yui/build/moodle-editor_atto-plugin/moodle-editor_atto-plugin-min.js index b2160fd1b1e..8de8406f348 100644 --- a/lib/editor/atto/yui/build/moodle-editor_atto-plugin/moodle-editor_atto-plugin-min.js +++ b/lib/editor/atto/yui/build/moodle-editor_atto-plugin/moodle-editor_atto-plugin-min.js @@ -1,2 +1,2 @@ YUI.add("moodle-editor_atto-plugin",function(u,t){var i,n,l,a,o,h,c,d;function e(){e.superclass.constructor.apply(this,arguments)}function s(){}function r(){}i=".atto_group.",n="_group",u.extend(e,u.Base,{name:null,editor:null,toolbar:null,initializer:function(t){this.name=t.name,this.toolbar=t.toolbar,this.editor=t.editor,this.buttons={},this.buttonNames=[],this.buttonStates={},this.menus={},this._primaryKeyboardShortcut=[],this._buttonHandlers=[],this._menuHideHandlers=[],this._highlightQueue={}},markUpdated:function(){return this.get("host").saveSelection(),this.get("host").updateOriginal()}},{NAME:"editorPlugin",ATTRS:{host:{writeOnce:!0},group:{writeOnce:!0,getter:function(t){var e=this.toolbar.one(i+t+n);return e||(e=u.Node.create('
'),this.toolbar.append(e)),e}}}}),u.namespace("M.editor_atto").EditorPlugin=e,l='',a="disabled",o="highlight",h=".editor_atto_content",c=".editor_atto_menu_icon",d=".editor_atto_menu_expand",s.ATTRS={},s.prototype={buttons:null,buttonNames:null,buttonStates:null,menus:null,DISABLED:0,ENABLED:1,_buttonHandlers:null,_menuHideHandlers:null,_primaryKeyboardShortcut:null,_highlightQueue:null,addButton:function(e){var i,t,n,o=this.get("group"),a=this.name,s="atto_"+a+"_button",r=this.get("host");return e.exec&&(s=s+"_"+e.exec),e.buttonName?s=s+"_"+e.buttonName:e.buttonName=e.exec||a,e.buttonClass=s,(e=this._normalizeIcon(e)).title||(e.title="pluginname"),t=M.util.get_string(e.title,"atto_"+a),(i=u.Node.create('')).setAttribute("title",t),i.setAttribute("aria-label",t),window.require(["core/templates"],function(t){t.renderPix(e.icon,e.iconComponent,"").then(function(t){i.append(t)})}),o.append(i),this.toolbar.getAttribute("aria-activedescendant")||(i.setAttribute("tabindex","0"),this.toolbar.setAttribute("aria-activedescendant",i.generateID()),this.get("host")._tabFocus=i),e=this._normalizeCallback(e),this._buttonHandlers.push(this.toolbar.delegate("click",e.callback,"."+s,this)),e.keys&&("undefined"!=typeof e.keyDescription&&(this._primaryKeyboardShortcut[s]=e.keyDescription),this._addKeyboardListener(e.callback,e.keys,s),this._primaryKeyboardShortcut[s]&&(t=M.util.get_string("plugin_title_shortcut","editor_atto",{title:t,shortcut:this._primaryKeyboardShortcut[s]}),i.setAttribute("title",t),i.setAttribute("aria-label",t))),e.tags&&(n=!0,"boolean"==typeof e.tagMatchRequiresAll&&(n=e.tagMatchRequiresAll),this._buttonHandlers.push(r.on(["atto:selectionchanged","change"],function(t){"undefined"!=typeof this._highlightQueue[e.buttonName]&&this._highlightQueue[e.buttonName].cancel(),this._highlightQueue[e.buttonName]=u.soon(u.bind(function(t){r.selectionFilterMatches(e.tags,t.selectedNodes,n)?this.highlightButtons(e.buttonName):this.unHighlightButtons(e.buttonName)},this,t))},this))),this.buttonNames.push(e.buttonName),this.buttons[e.buttonName]=i,this.buttonStates[e.buttonName]=this.ENABLED,i},addBasicButton:function(t){return t.exec?(t.icon||(t.icon="e/"+t.exec),t.callback=function(){document.execCommand(t.exec,!1,null),this.markUpdated()},this.addButton(t)):null},addToolbarMenu:function(e){var i,t,n,o,a=this.get("group"),s=this.name,r="atto_"+s+"_button";return e.buttonName?r=r+"_"+e.buttonName:e.buttonName=s,e.buttonClass=r,(e=this._normalizeIcon(e)).title||(e.title="pluginname"),t=M.util.get_string(e.title,"atto_"+s),e.menuColor||(e.menuColor="transparent"),n="atto_"+s+"_menubutton_"+u.stamp(this),o=u.Handlebars.compile(l),i=u.Node.create(o({buttonClass:r,config:e,title:t,id:n})),e.buttonId=n,window.require(["core/templates"],function(t){t.renderPix(e.icon,e.iconComponent,"").then(function(t){i.one(c).append(t)}),t.renderPix("t/expanded","core","").then(function(t){i.one(d).append(t)})}),a.append(i),this.toolbar.getAttribute("aria-activedescendant")||(i.setAttribute("tabindex","0"),this.toolbar.setAttribute("aria-activedescendant",i.generateID())),this._buttonHandlers.push(this.toolbar.delegate("click",this._showToolbarMenu,"."+r,this,e),this.toolbar.delegate("key",this._showToolbarMenuAndFocus,"40, 32, enter","."+r,this,e)),this.buttonNames.push(e.buttonName),this.buttons[e.buttonName]=i,this.buttonStates[e.buttonName]=this.ENABLED,i},_showToolbarMenu:function(t,e){var i,n,o;t.preventDefault(),this.isEnabled()&&((i=t.currentTarget.ancestor("button",!0)).hasAttribute(a)||(this.menus[e.buttonClass]||(e.overlayWidth||(e.overlayWidth="14"),e.innerOverlayWidth||(e.innerOverlayWidth=parseInt(e.overlayWidth,10)-2+"em"),e.overlayWidth=parseInt(e.overlayWidth,10)+"em",this.menus[e.buttonClass]=new u.M.editor_atto.Menu(e),this.menus[e.buttonClass].get("contentBox").delegate("click",this._chooseMenuItem,".atto_menuentry a",this,e)),u.Array.each(this.get("host").openMenus,function(t){t.set("focusAfterHide",null)}),(o=this.buttons[e.buttonName]).focus(),this.get("host")._setTabFocus(o),(n=this.menus[e.buttonClass]).set("focusAfterHide",o),n.show(),i.setAttribute("aria-expanded",!0),n.align(this.buttons[e.buttonName],[u.WidgetPositionAlign.TL,u.WidgetPositionAlign.BL]),this.get("host").openMenus=[n]))},_showToolbarMenuAndFocus:function(t,e){this._showToolbarMenu(t,e),this.menus[e.buttonClass].get("boundingBox").one("a").focus()},_chooseMenuItem:function(t,e,i){var n=t.target.ancestor("a",!0).getData("index"),o=this._normalizeCallback(e.items[n],e.globalItemConfig);(i=this.menus[e.buttonClass]).set("preventHideMenu",!0),o.callback(t,o._callback,o.callbackArgs),i.set("preventHideMenu",!1),i.set("focusAfterHide",this.get("host").editor),i.hide(t)},_normalizeCallback:function(i,t){return i._callbackNormalized||(t=t||{},i.inlineFormat=i.inlineFormat||t.inlineFormat,i._inlineCallback=i.callback||t.callback, -i._callback=i.callback||t.callback,i.inlineFormat&&"function"==typeof i._inlineCallback&&(i._callback=function(t,e){this.get("host").applyFormat(t,i._inlineCallback,this,e)}),i.callback=u.rbind(this._callbackWrapper,this,i._callback,i.callbackArgs),i._callbackNormalized=!0),i},_normalizeIcon:function(t){return t.iconurl||(t.iconComponent&&"moodle"!=t.iconComponent||(t.iconComponent="core"),t.iconurl=M.util.image_url(t.icon,t.iconComponent)),t},_callbackWrapper:function(t,e,i){var n,o;if(t.preventDefault(),this.isEnabled()&&(!(n=t.currentTarget.ancestor("button",!0))||!n.hasAttribute(a)))return YUI.Env.UA.android||this.get("host").isActive()||this.get("host").focus(),this.get("host").saveSelection(),n&&this.get("host")._setTabFocus(n),o=[t,i],this.get("host").restoreSelection(),e.apply(this,o)},_addKeyboardListener:function(i,t,e){var n,o,a,s="key",r=h;if(u.Lang.isArray(t))return u.Array.each(t,function(t){this._addKeyboardListener(i,t)},this),this;o="object"==typeof t?(t.eventtype&&(s=t.eventtype),t.container&&(r=t.container),n=t.keyCodes,i):(a=this._getDefaultMetaKey(),n=this._getKeyEvent()+t+"+"+a,"undefined"==typeof this._primaryKeyboardShortcut[e]&&(this._primaryKeyboardShortcut[e]=this._getDefaultMetaKeyDescription(t)),u.bind(function(t,e){this._eventUsesExactKeyModifiers(t,e)&&i.apply(this,[e])},this,[a])),this._buttonHandlers.push(this.editor.delegate(s,o,n,r,this))},_eventUsesExactKeyModifiers:function(t,e){var i,n=!0;return"key"===e.type&&(i=-1