summaryrefslogtreecommitdiff
path: root/packages/integrations/markdoc/src/html/css/style-to-object.ts
blob: 084c93c93d3cdcd9d61a377717f5bf773b931d29 (plain) (blame)
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// @ts-nocheck
// https://github.com/remarkablemark/style-to-object

/**
 * @license MIT
 *
 * The MIT License (MIT)
 *
 * Copyright (c) 2017 Menglin "Mark" Xu <mark@remarkablemark.org>
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

import { parseInlineStyles } from './parse-inline-styles.js';

/**
 * Parses inline style to object.
 *
 * @example
 * // returns { 'line-height': '42' }
 * styleToObject('line-height: 42;');
 *
 * @param  {String}      style      - The inline style.
 * @param  {Function}    [iterator] - The iterator function.
 * @return {null|Object}
 */
export function styleToObject(style, iterator) {
	let output = null;
	if (!style || typeof style !== 'string') {
		return output;
	}

	let declaration;
	let declarations = parseInlineStyles(style);
	let hasIterator = typeof iterator === 'function';
	let property;
	let value;

	for (let i = 0, len = declarations.length; i < len; i++) {
		declaration = declarations[i];
		property = declaration.property;
		value = declaration.value;

		if (hasIterator) {
			iterator(property, value, declaration);
		} else if (value) {
			output || (output = {});
			output[property] = value;
		}
	}

	return output;
}
d>3-1/+14 2023-09-20Treat `undefined` value as empty in expect.toThrow (#5788)Gravatar LongYinan 1-3/+3 2023-09-20Fix various bugs in vscode extension (#5772)Gravatar JeremyFunk 3-9/+85 2023-09-20add `emitDecoratorMetadata` (#5777)Gravatar Dylan Conway 19-110/+1884 2023-09-20fix(doc): correct `server.reload` (#5799)Gravatar Ai Hoshino 1-1/+1 2023-09-20Call `Error.prepareStackTrace` on `new Error().stack` (#5802)Gravatar Jarred Sumner 6-155/+277 2023-09-20Fixes #5800Gravatar Jarred Sumner 1-1/+1 2023-09-20Fix path used in bunx (#5785)Gravatar Jarred Sumner 2-26/+51 2023-09-20Fix RedirectURLTooLong errors (#5786)Gravatar ggobbe 1-1/+1 2023-09-19Show when a newer version is available in the install screen (#5780)Gravatar Jarred Sumner 3-14/+95 2023-09-19Fix broken linksGravatar Colin McDonnell 4-4/+4