azure-devops-ui
Version:
React components for building web UI in Azure DevOps
1 lines • 1.88 kB
JavaScript
class EventGroup{constructor(e){this.id=EventGroup.uniqueId++,this.isDisposed=!1,this.parent=e,this.eventRecords=[]}static raise(e,t,n,s){let i;if(EventGroup.isElement(e)){var a=document.createEvent("HTMLEvents");a.initEvent(t,s||!1,!0),Object.assign(a,n)}else for(;e&&!1!==i;){var r=e.__events__,l=r?r[t]:null;if(l)for(var o in l)if(l.hasOwnProperty(o)){var v=l[o];for(let e=0;!1!==i&&e<v.length;e++){var p=v[e];p.objectCallback&&(i=p.objectCallback.call(p.parent,n))}}e=s?e.parent:null}return i}static isElement(e){return!!e&&(!!e.addEventListener||"undefined"!=typeof HTMLElement&&e instanceof HTMLElement)}dispose(){this.isDisposed||(this.isDisposed=!0,this.off(),this.parent=null)}on(e,t,s){if(-1<t.indexOf(","))for(var n in t.split(/[,]+/))this.on(e,n,s);else{let n=this.parent;var i={target:e,eventName:t,parent:n,callback:s},a=(e.__events__||(e.__events__={}),e.__events__);a[t]||(a[t]={}),a[t][this.id]||(a[t][this.id]=[]),a[t][this.id].push(i),EventGroup.isElement(e)?(i.elementCallback=a=(...e)=>{var t;if(!this.isDisposed)return!1===(t=s.apply(n,e))&&e[0]&&((e=e[0]).preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0),t},e.addEventListener&&e.addEventListener(t,a)):i.objectCallback=(...e)=>{if(!this.isDisposed)return s.apply(n,e)},this.eventRecords.push(i)}}off(t,n,s){for(let e=0;e<this.eventRecords.length;e++){var i,a,r=this.eventRecords[e];t&&t!==r.target||n&&n!==r.eventName||s&&s!==r.callback||((a=(a=(i=r.target.__events__)[r.eventName])?a[this.id]:null)&&(1!==a.length&&s?a.splice(a.indexOf(r),1):delete i[r.eventName][this.id],0===Object.keys(i[r.eventName]).length)&&delete i[r.eventName],r.elementCallback&&r.target.removeEventListener(r.eventName,r.elementCallback,r.options),this.eventRecords.splice(e--,1))}}raise(e,t,n){return EventGroup.raise(this.parent,e,t,n)}}EventGroup.uniqueId=0;export{EventGroup};