/********************************************************************************
 * Copyright (C) 2021 Ericsson and others.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * This Source Code may also be made available under the following Secondary
 * Licenses when the conditions for such availability set forth in the Eclipse
 * Public License v. 2.0 are satisfied: GNU General Public License, version 2
 * with the GNU Classpath Exception which is available at
 * https://www.gnu.org/software/classpath/license.html.
 *
 * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 ********************************************************************************/ export namespace DecorationStyle { export function createStyleSheet ( styleId , container = document . getElementsByTagName ( 'head' ) [ 0 ] ) { const style = document . createElement ( 'style' ) ; style . id = styleId ; style . type = 'text/css' ; style . media = 'screen' ; style . appendChild ( document . createTextNode ( '' ) ) ; container . appendChild ( style ) ; return < CSSStyleSheet > style . sheet ; } function getRuleIndex ( selector , styleSheet ) { return Array . from ( styleSheet . cssRules || styleSheet . rules ) . findIndex ( rule => rule . type === CSSRule . STYLE_RULE && ( < CSSStyleRule > rule ) . selectorText === selector ) ; } export function getOrCreateStyleRule ( selector , styleSheet ) { let index = getRuleIndex ( selector , styleSheet ) ; if ( index === - 1 ) { index = styleSheet . insertRule ( selector + '{}' , 0 ) ; } const rules = styleSheet . cssRules || styleSheet . rules ; const rule = rules [ index ] ; if ( rule && rule . type === CSSRule . STYLE_RULE ) { return rule as CSSStyleRule ; } styleSheet . deleteRule ( index ) ; throw new Error ( 'This function is only for CSS style rules. Other types of CSS rules are not allowed.' ) ; } export function deleteStyleRule ( selector , styleSheet ) { if ( ! styleSheet ) { return ; } const index = getRuleIndex ( selector , styleSheet ) ; if ( index !== - 1 ) { styleSheet . deleteRule ( index ) ; } } }