all files / src/extractor/ rgb-percent-alpha-extractor.js

100% Statements 64/64
100% Branches 28/28
100% Functions 11/11
100% Lines 14/14
22 statements, 1 function, 17 branches Ignored     
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30                     106266× 106266×   136× 136× 136×   136× 408× 136×   136×        
import { Color } from "../color";
import { RgbPercentAlphaDetector } from "../detector/rgb-percent-alpha-detector";
 
/**
 * アルファ値を含む%指定RGB表現の抽出処理を提供します。
 */
class RgbPercentAlphaExtractor {
    /**
     * 色情報を抽出します。
     * @param {String} expression WEBカラーの色表現。
     * @return {Color} 抽出結果を返します。
     */
    extract(expression) {
        const detector = new RgbPercentAlphaDetector();
        if (!detector.match(expression)) return null;
 
        const head = expression.indexOf("(");
        const tail = expression.indexOf(")");
        const body = expression.slice(head + 1, tail);
 
        const values = body.split(",");
        const [ red, green, blue ] = values.slice(0, 3).map(x => Math.round(Number(x.replace(/[^0-9.]/g, "") / 100 * 255)));
        const alpha = Number(values[3].replace(/[^0-9.]/g, "")) * (values[3].indexOf("%") > -1 ? 1 : 100);
 
        return new Color(red, green, blue, alpha);
    }
}
 
export { RgbPercentAlphaExtractor }