diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c1b5d99fd6..27430bbc0b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ - Fixed a bug where the time zones listed in Date fields weren’t labelled properly based on the selected date. ([#15805](https://github.com/craftcms/cms/issues/15805)) - Fixed an error that could occur if a native element property was attempted to be eager-loaded. ([#15822](https://github.com/craftcms/cms/issues/15822)) - Fixed errors that could occur if a custom source or field condition referenced a custom field whose type had changed. ([#15850](https://github.com/craftcms/cms/issues/15850)) +- Fixed a bug where disclosure menus weren’t sticking to their trigger element as it was scrolled, if it was within a slideout or other inline-scrollable container. ([#15852](https://github.com/craftcms/cms/issues/15852)) - Fixed a missing authorization vulnerability. ## 4.12.5 - 2024-09-27 diff --git a/src/web/assets/garnish/dist/garnish.js b/src/web/assets/garnish/dist/garnish.js index 4e45aa1ef7f..054a1703bad 100644 --- a/src/web/assets/garnish/dist/garnish.js +++ b/src/web/assets/garnish/dist/garnish.js @@ -1,3 +1,3 @@ /*! For license information please see garnish.js.LICENSE.txt */ -!function(){var t={55:function(t,e,i){var s=i(38),n=i(820),o=s.default;void 0===n.Garnish&&(n.Garnish=o),t.exports=s},820:function(t,e,i){"use strict";t.exports=function(){if("object"==typeof globalThis)return globalThis;var t;try{t=this||new Function("return this")()}catch(t){if("object"==typeof window)return window;if("object"==typeof self)return self;if(void 0!==i.g)return i.g}return t}()},38:function(t,e,i){"use strict";i.r(e),i.d(e,{default:function(){return R}});var s=jQuery,n=i.n(s);function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}var r=function(){};function h(t){return h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},h(t)}r.extend=function(t,e){var i=r.prototype.extend;r._prototyping=!0;var s=new this;i.call(s,t),s.base=function(){},delete r._prototyping;var n=s.constructor,o=s.constructor=function(){if(!r._prototyping)if(this._constructing||this.constructor==o)this._constructing=!0,n.apply(this,arguments),delete this._constructing;else if(null!=arguments[0])return(arguments[0].extend||i).call(arguments[0],s)};return o.ancestor=this,o.extend=this.extend,o.forEach=this.forEach,o.implement=this.implement,o.prototype=s,o.toString=this.toString,o.valueOf=function(t){return"object"==t?o:n.valueOf()},i.call(o,e),"function"==typeof o.init&&o.init(),o},r.prototype={extend:function(t,e){if(arguments.length>1){var i=this[t];if(i&&"function"==typeof e&&(!i.valueOf||i.valueOf()!=e.valueOf())&&/\bbase\b/.test(e)){var s=e.valueOf();e=function(){var t=this.base||r.prototype.base;this.base=i;var e=s.apply(this,arguments);return this.base=t,e},e.valueOf=function(t){return"object"==t?e:s},e.toString=r.toString}this[t]=e}else if(t){var n=r.prototype.extend;r._prototyping||"function"==typeof this||(n=this.extend||n);for(var h={toSource:null},a=["constructor","toString","valueOf"],l=r._prototyping?0:1;u=a[l++];)t[u]!=h[u]&&n.call(this,u,t[u]);for(var u in t)if(!h[u]){var c=Object.getOwnPropertyDescriptor(t,u);"undefined"!=o(c.value)?n.call(this,u,c.value):Object.defineProperty(this,u,c)}}return this}},r=r.extend({constructor:function(){this.extend(arguments[0])}},{ancestor:Object,version:"1.1",forEach:function(t,e,i){for(var s in t)void 0===this.prototype[s]&&e.call(i,t[s],s,t)},implement:function(){for(var t=0;t=0;n--){var o=this._eventHandlers[n];o.type!==s[0]||s[1]&&o.namespace!==s[1]||o.handler!==e||this._eventHandlers.splice(n,1)}},once:function(t,e,i){var s=this;"function"==typeof e&&(i=e,e={}),this.on(t,e,(function e(n){s.off(t,e),i(n)}))},trigger:function(t,e){var i=this,s={type:t,target:this};this._eventHandlers.filter((function(e){return e.type===t})).forEach((function(t){var i=n().extend({data:t.data},e,s);t.handler(i)})),X._eventHandlers.filter((function(e){return e&&e.target&&i instanceof e.target&&e.type===t})).forEach((function(t){var i=n().extend({data:t.data},e,s);t.handler(i)}))},_splitEvents:function(t){if("string"==typeof t){t=t.split(",");for(var e=0;et.length)&&(e=t.length);for(var i=0,s=new Array(e);ithis.drag._maxMouseScrollY&&(this.drag._scrollProperty="scrollTop",this.drag._scrollAxis="Y",this.drag._scrollDist=Math.round((this.mouseY-this.drag._maxMouseScrollY)/2)))),this.drag._scrollProperty||this.settings.axis===X.Y_AXIS||(this.drag._winScrollLeft=X.$win.scrollLeft(),this.drag._minMouseScrollX=this.drag._winScrollLeft+X.BaseDrag.windowScrollTargetSize,this.mouseXthis.drag._maxMouseScrollX&&(this.drag._scrollProperty="scrollLeft",this.drag._scrollAxis="X",this.drag._scrollDist=Math.round((this.mouseX-this.drag._maxMouseScrollX)/2)))),this.drag._scrollProperty?(this.scrollProperty||(this.scrollProxy||(this.scrollProxy=this._scrollWindow.bind(this)),this.scrollFrame&&(X.cancelAnimationFrame(this.scrollFrame),this.scrollFrame=null),this.scrollFrame=X.requestAnimationFrame(this.scrollProxy)),this.scrollProperty=this.drag._scrollProperty,this.scrollAxis=this.drag._scrollAxis,this.scrollDist=this.drag._scrollDist):this._cancelWindowScroll()),this.onDrag()},stopDragging:function(){this.dragging=!1,this.onDragStop(),this._cancelWindowScroll()},addItems:function(t){var e,i=this,s=function(t,e){var i="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!i){if(Array.isArray(t)||(i=function(t,e){if(t){if("string"==typeof t)return u(t,e);var i=Object.prototype.toString.call(t).slice(8,-1);return"Object"===i&&t.constructor&&(i=t.constructor.name),"Map"===i||"Set"===i?Array.from(t):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?u(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){i&&(t=i);var s=0,n=function(){};return{s:n,n:function(){return s>=t.length?{done:!0}:{done:!1,value:t[s++]}},e:function(t){throw t},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,r=!0,h=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return r=t.done,t},e:function(t){h=!0,o=t},f:function(){try{r||null==i.return||i.return()}finally{if(h)throw o}}}}(t=n().makeArray(t));try{var o=function(){var t=e.value;n().data(t,"drag")&&(console.warn("Element was added to more than one dragger"),n().data(t,"drag").removeItems(t)),n().data(t,"drag",i),i.addListener(i._getItemHandle(t),"mousedown",(function(e){i._handleMouseDown(e,t)}))};for(s.s();!(e=s.n()).done;)o()}catch(t){s.e(t)}finally{s.f()}this.$items=this.$items.add(t)},removeItems:function(t){t=n().makeArray(t);for(var e=0;e=(null!==(e=this.settings.minMouseDist)&&void 0!==e?e:X.BaseDrag.minMouseDist)&&this.startDragging()),this.dragging&&this.drag(!0)},_handleMouseUp:function(t){this.removeAllListeners(X.$doc),this.dragging&&this.stopDragging(),this.$targetItem=null},_scrollWindow:function(){this._.scrollPos=X.$scrollContainer[this.scrollProperty](),this._.scrollTargetPos=this._.scrollPos+this.scrollDist,this._.scrollTargetPos<0?this._.scrollTargetPos=0:(this._.$scrollContainer=X.$scrollContainer[0]===X.$win[0]?X.$bod:X.$scrollContainer,"Y"===this.scrollAxis?this._.scrollMax=this._.$scrollContainer[0].clientHeight-X.$scrollContainer.height():this._.scrollMax=this._.$scrollContainer[0].clientWidth-X.$scrollContainer.width(),this._.scrollTargetPos>this._.scrollMax&&(this._.scrollTargetPos=this._.scrollMax)),X.$scrollContainer[this.scrollProperty](this._.scrollTargetPos),this["mouse"+this.scrollAxis]-=this._.scrollPos-X.$scrollContainer[this.scrollProperty](),this["realMouse"+this.scrollAxis]=this["mouse"+this.scrollAxis],this.drag(),this.scrollFrame=X.requestAnimationFrame(this.scrollProxy)},_cancelWindowScroll:function(){this.scrollFrame&&(X.cancelAnimationFrame(this.scrollFrame),this.scrollFrame=null),this.scrollProperty=null,this.scrollAxis=null,this.scrollDist=null},_deinitItem:function(t){this.removeAllListeners(t),n().removeData(t,"drag")}},{minMouseDist:1,windowScrollTargetSize:25,defaults:{minMouseDist:null,handle:null,axis:null,ignoreHandleSelector:"input, textarea, button, select, .btn",onBeforeDragStart:n().noop,onDragStart:n().noop,onDrag:n().noop,onDragStop:n().noop}}),d=a.extend({$container:null,$all:null,$options:null,init:function(t){this.$container=n()(t),this.$container.data("checkboxSelect")&&(console.warn("Double-instantiating a checkbox select on an element"),this.$container.data("checkboxSelect").destroy()),this.$container.data("checkboxSelect",this);var e=this.$container.find("input");this.$all=e.filter(".all:first"),this.$options=e.not(this.$all),this.addListener(this.$all,"change","onAllChange")},onAllChange:function(){var t=this.$all.prop("checked");this.$options.prop({checked:t,disabled:t})},destroy:function(){this.$container.removeData("checkboxSelect"),this.base()}}),g=a.extend({$target:null,options:null,$menu:null,showingMenu:!1,init:function(t,e,i){this.$target=n()(t),this.$target.data("contextmenu")&&(console.warn("Double-instantiating a context menu on an element"),this.$target.data("contextmenu").destroy()),this.$target.data("contextmenu",this),this.options=e,this.setSettings(i,X.ContextMenu.defaults),X.ContextMenu.counter++,this.enable()},buildMenu:function(){this.$menu=n()('