/** * Copyright 2020 Google LLC. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Extends an object's prototype by another's. * * @param type1 The Type to be extended. * @param type2 The Type to extend with. * @ignore */ // eslint-disable-next-line @typescript-eslint/no-explicit-any export function extend(type1: any, type2: any): void { // eslint-disable-next-line prefer-const for (let property in type2.prototype) { type1.prototype[property] = type2.prototype[property]; } } export function abortEvent(e: Event | null) { e = e || window.event; if (e.stopPropagation) { e.stopPropagation(); } else { e.cancelBubble = true; } if (e.preventDefault) { e.preventDefault(); } else { e.returnValue = false; } } export function stopPropagation(e: Event | null) { e = e || window.event; if (e.stopPropagation) { e.stopPropagation(); } else { e.cancelBubble = true; } } export function omit( o: { [key: string]: any }, keys: string[] ): { [key: string]: any } { const x = { ...o }; keys.forEach((k) => delete x[k]); return x; }