uikit 3.8.1 → 3.9.2-dev.836238c9b
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{.eslintrc.js → .eslintrc.json} +5 -5
- package/CHANGELOG.md +13 -1
- package/build/.eslintrc.json +15 -0
- package/build/build.js +55 -82
- package/build/icons.js +12 -13
- package/build/less.js +23 -38
- package/build/package.json +4 -0
- package/build/prefix.js +38 -94
- package/build/publishDev.js +12 -17
- package/build/release.js +31 -60
- package/build/scope.js +49 -84
- package/build/scss.js +19 -21
- package/build/util.js +166 -95
- package/dist/css/uikit-core-rtl.css +7 -7
- package/dist/css/uikit-core-rtl.min.css +1 -1
- package/dist/css/uikit-core.css +7 -7
- package/dist/css/uikit-core.min.css +1 -1
- package/dist/css/uikit-rtl.css +7 -7
- package/dist/css/uikit-rtl.min.css +1 -1
- package/dist/css/uikit.css +7 -7
- package/dist/css/uikit.min.css +1 -1
- package/dist/js/components/countdown.js +1 -1
- package/dist/js/components/countdown.min.js +2 -2
- package/dist/js/components/filter.js +1 -1
- package/dist/js/components/filter.min.js +2 -2
- package/dist/js/components/lightbox-panel.js +1 -1
- package/dist/js/components/lightbox-panel.min.js +2 -2
- package/dist/js/components/lightbox.js +1 -1
- package/dist/js/components/lightbox.min.js +2 -2
- package/dist/js/components/notification.js +1 -1
- package/dist/js/components/notification.min.js +2 -2
- package/dist/js/components/parallax.js +1 -1
- package/dist/js/components/parallax.min.js +2 -2
- package/dist/js/components/slider-parallax.js +1 -1
- package/dist/js/components/slider-parallax.min.js +2 -2
- package/dist/js/components/slider.js +1 -1
- package/dist/js/components/slider.min.js +2 -2
- package/dist/js/components/slideshow-parallax.js +1 -1
- package/dist/js/components/slideshow-parallax.min.js +2 -2
- package/dist/js/components/slideshow.js +1 -1
- package/dist/js/components/slideshow.min.js +2 -2
- package/dist/js/components/sortable.js +1 -1
- package/dist/js/components/sortable.min.js +2 -2
- package/dist/js/components/tooltip.js +1 -1
- package/dist/js/components/tooltip.min.js +2 -2
- package/dist/js/components/upload.js +1 -1
- package/dist/js/components/upload.min.js +2 -2
- package/dist/js/uikit-core.js +8 -8
- package/dist/js/uikit-core.min.js +2 -2
- package/dist/js/uikit-icons.js +1 -1
- package/dist/js/uikit-icons.min.js +2 -2
- package/dist/js/uikit.js +8 -8
- package/dist/js/uikit.min.js +2 -2
- package/package.json +17 -19
- package/src/js/uikit-core.js +1 -1
- package/src/js/uikit.js +1 -1
- package/src/js/util/event.js +7 -7
- package/src/less/components/accordion.less +10 -10
- package/src/less/components/alert.less +9 -9
- package/src/less/components/align.less +2 -2
- package/src/less/components/animation.less +2 -2
- package/src/less/components/article.less +8 -8
- package/src/less/components/background.less +1 -1
- package/src/less/components/badge.less +6 -6
- package/src/less/components/base.less +30 -30
- package/src/less/components/breadcrumb.less +12 -12
- package/src/less/components/button.less +36 -36
- package/src/less/components/card.less +32 -32
- package/src/less/components/close.less +5 -5
- package/src/less/components/column.less +2 -2
- package/src/less/components/comment.less +12 -12
- package/src/less/components/container.less +2 -2
- package/src/less/components/countdown.less +10 -10
- package/src/less/components/cover.less +2 -2
- package/src/less/components/description-list.less +5 -5
- package/src/less/components/divider.less +11 -11
- package/src/less/components/dotnav.less +11 -11
- package/src/less/components/drop.less +1 -1
- package/src/less/components/dropdown.less +7 -7
- package/src/less/components/flex.less +2 -2
- package/src/less/components/form-range.less +12 -12
- package/src/less/components/form.less +27 -27
- package/src/less/components/grid.less +6 -6
- package/src/less/components/heading.less +21 -21
- package/src/less/components/height.less +1 -1
- package/src/less/components/icon.less +13 -13
- package/src/less/components/iconnav.less +9 -9
- package/src/less/components/inverse.less +3 -3
- package/src/less/components/label.less +7 -7
- package/src/less/components/leader.less +3 -3
- package/src/less/components/lightbox.less +9 -9
- package/src/less/components/link.less +12 -12
- package/src/less/components/list.less +5 -5
- package/src/less/components/margin.less +3 -3
- package/src/less/components/marker.less +5 -5
- package/src/less/components/modal.less +16 -16
- package/src/less/components/nav.less +31 -31
- package/src/less/components/navbar.less +33 -33
- package/src/less/components/notification.less +8 -8
- package/src/less/components/offcanvas.less +4 -4
- package/src/less/components/overlay.less +5 -5
- package/src/less/components/padding.less +1 -1
- package/src/less/components/pagination.less +10 -10
- package/src/less/components/placeholder.less +3 -3
- package/src/less/components/position.less +1 -1
- package/src/less/components/print.less +1 -1
- package/src/less/components/progress.less +6 -6
- package/src/less/components/search.less +15 -15
- package/src/less/components/section.less +8 -8
- package/src/less/components/slidenav.less +11 -11
- package/src/less/components/slider.less +2 -2
- package/src/less/components/slideshow.less +2 -2
- package/src/less/components/sortable.less +5 -5
- package/src/less/components/spinner.less +4 -4
- package/src/less/components/sticky.less +1 -1
- package/src/less/components/subnav.less +21 -21
- package/src/less/components/svg.less +1 -1
- package/src/less/components/switcher.less +2 -2
- package/src/less/components/tab.less +18 -18
- package/src/less/components/table.less +21 -21
- package/src/less/components/text.less +11 -11
- package/src/less/components/thumbnav.less +9 -9
- package/src/less/components/tile.less +10 -10
- package/src/less/components/tooltip.less +2 -2
- package/src/less/components/totop.less +7 -7
- package/src/less/components/transition.less +5 -5
- package/src/less/components/utility.less +10 -10
- package/src/less/components/visibility.less +1 -1
- package/src/less/components/width.less +1 -1
- package/src/scss/components/accordion.scss +1 -1
- package/src/scss/components/alert.scss +1 -1
- package/src/scss/components/align.scss +1 -1
- package/src/scss/components/animation.scss +1 -1
- package/src/scss/components/article.scss +1 -1
- package/src/scss/components/badge.scss +1 -1
- package/src/scss/components/base.scss +1 -1
- package/src/scss/components/card.scss +7 -7
- package/src/scss/components/column.scss +1 -0
- package/src/scss/components/comment.scss +1 -1
- package/src/scss/components/container.scss +1 -1
- package/src/scss/components/cover.scss +1 -1
- package/src/scss/components/description-list.scss +1 -1
- package/src/scss/components/dotnav.scss +1 -1
- package/src/scss/components/flex.scss +1 -1
- package/src/scss/components/form-range.scss +1 -1
- package/src/scss/components/grid.scss +1 -1
- package/src/scss/components/iconnav.scss +1 -1
- package/src/scss/components/inverse.scss +1 -1
- package/src/scss/components/label.scss +1 -1
- package/src/scss/components/margin.scss +2 -2
- package/src/scss/components/nav.scss +1 -1
- package/src/scss/components/placeholder.scss +1 -1
- package/src/scss/components/section.scss +1 -1
- package/src/scss/components/spinner.scss +2 -2
- package/src/scss/components/subnav.scss +1 -1
- package/src/scss/components/switcher.scss +1 -1
- package/src/scss/components/tab.scss +1 -1
- package/src/scss/components/table.scss +3 -3
- package/src/scss/components/text.scss +3 -3
- package/src/scss/components/thumbnav.scss +1 -1
- package/src/scss/components/transition.scss +4 -4
- package/src/scss/components/utility.scss +1 -1
- package/src/scss/mixins-theme.scss +1 -1
- package/src/scss/mixins.scss +1 -1
- package/src/scss/variables-theme.scss +8 -8
- package/src/scss/variables.scss +8 -8
- package/build/.eslintrc.js +0 -13
package/build/release.js
CHANGED
|
@@ -1,22 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const {
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
1
|
+
import archiver from 'archiver';
|
|
2
|
+
import inquirer from 'inquirer';
|
|
3
|
+
import dateFormat from 'dateformat/lib/dateformat.js';
|
|
4
|
+
import {createWriteStream} from 'fs';
|
|
5
|
+
import semver from 'semver';
|
|
6
|
+
import {args, getVersion, glob, logFile, replaceInFile, run} from './util.js';
|
|
7
|
+
|
|
8
|
+
const {coerce, inc, prerelease, valid} = semver;
|
|
9
|
+
|
|
10
|
+
const prevVersion = await getVersion();
|
|
11
|
+
const version = await inquireVersion(args.v || args.version);
|
|
12
|
+
|
|
13
|
+
await Promise.all([
|
|
14
|
+
run(`npm version ${version} --git-tag-version false`),
|
|
15
|
+
replaceInFile('CHANGELOG.md', data =>
|
|
16
|
+
data.replace(/^##\s*WIP/m, `## ${versionFormat(version)} (${dateFormat(Date.now(), 'mmmm d, yyyy')})`)
|
|
17
|
+
),
|
|
18
|
+
replaceInFile('.github/ISSUE_TEMPLATE/bug-report.md', data =>
|
|
19
|
+
data.replace(prevVersion, version)
|
|
20
|
+
)
|
|
21
|
+
]);
|
|
22
|
+
|
|
23
|
+
await run('yarn compile');
|
|
24
|
+
await run('yarn compile-rtl');
|
|
25
|
+
await run('yarn build-scss');
|
|
26
|
+
|
|
27
|
+
await createPackage(version);
|
|
20
28
|
|
|
21
29
|
async function inquireVersion(v) {
|
|
22
30
|
|
|
@@ -26,42 +34,20 @@ async function inquireVersion(v) {
|
|
|
26
34
|
|
|
27
35
|
const prompt = inquirer.createPromptModule();
|
|
28
36
|
|
|
29
|
-
|
|
37
|
+
return (await prompt({
|
|
30
38
|
name: 'version',
|
|
31
39
|
message: 'Enter a version',
|
|
32
|
-
default: () => inc(
|
|
40
|
+
default: () => inc(prevVersion, prerelease(prevVersion) ? 'prerelease' : 'patch'),
|
|
33
41
|
validate: val => !!val.length || 'Invalid version'
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
return version;
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
async function updateVersion(version) {
|
|
41
|
-
await Promise.all([
|
|
42
|
-
run(`npm version ${version} --git-tag-version false`),
|
|
43
|
-
replaceInFile('CHANGELOG.md', data => data.replace(/^##\s*WIP/m, `## ${versionFormat(version)} (${dateFormat(Date.now(), 'mmmm d, yyyy')})`)),
|
|
44
|
-
replaceInFile('.github/ISSUE_TEMPLATE/bug-report.md', data => data.replace(pkg.version, version))
|
|
45
|
-
]);
|
|
46
|
-
|
|
47
|
-
return version;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
async function compile(version) {
|
|
51
|
-
await sequential([
|
|
52
|
-
() => run('yarn compile'),
|
|
53
|
-
() => run('yarn compile-rtl'),
|
|
54
|
-
() => run('yarn build-scss')
|
|
55
|
-
]);
|
|
42
|
+
})).version;
|
|
56
43
|
|
|
57
|
-
return version;
|
|
58
44
|
}
|
|
59
45
|
|
|
60
46
|
async function createPackage(version) {
|
|
61
47
|
const file = `dist/uikit-${version}.zip`;
|
|
62
48
|
const archive = archiver('zip');
|
|
63
49
|
|
|
64
|
-
archive.pipe(
|
|
50
|
+
archive.pipe(createWriteStream(file));
|
|
65
51
|
|
|
66
52
|
(await glob('dist/{js,css}/uikit?(-icons|-rtl)?(.min).{js,css}')).forEach(file =>
|
|
67
53
|
archive.file(file, {name: file.substring(5)})
|
|
@@ -74,18 +60,3 @@ async function createPackage(version) {
|
|
|
74
60
|
function versionFormat(version) {
|
|
75
61
|
return [coerce(version).version].concat(prerelease(version) || []).join(' ');
|
|
76
62
|
}
|
|
77
|
-
|
|
78
|
-
async function replaceInFile(file, fn) {
|
|
79
|
-
await write(file, fn(await read(file)));
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
async function sequential(tasks) {
|
|
83
|
-
await tasks.reduce((promise, task) => promise.then(task), Promise.resolve());
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
async function run(cmd) {
|
|
87
|
-
const {stdout, stderr} = await exec(cmd);
|
|
88
|
-
|
|
89
|
-
stdout && console.log(stdout.trim());
|
|
90
|
-
stderr && console.log(stderr.trim());
|
|
91
|
-
}
|
package/build/scope.js
CHANGED
|
@@ -1,12 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
const argv = require('minimist')(process.argv.slice(2));
|
|
1
|
+
import {args, glob, minify, read, renderLess, replaceInFile, validClassName} from './util.js';
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
const tokens = arg.split('=');
|
|
6
|
-
argv[tokens[0]] = tokens[1] || true;
|
|
7
|
-
});
|
|
8
|
-
|
|
9
|
-
if (argv.h || argv.help) {
|
|
3
|
+
if (args.h || args.help) {
|
|
10
4
|
console.log(`
|
|
11
5
|
usage:
|
|
12
6
|
|
|
@@ -19,58 +13,45 @@ if (argv.h || argv.help) {
|
|
|
19
13
|
scope.js cleanup // will remove current scope
|
|
20
14
|
|
|
21
15
|
`);
|
|
22
|
-
|
|
23
|
-
run().catch(({message}) => {
|
|
24
|
-
console.error(message);
|
|
25
|
-
process.exitCode = 1;
|
|
26
|
-
});
|
|
16
|
+
process.exit(0);
|
|
27
17
|
}
|
|
18
|
+
const currentScopeRe = /\/\* scoped: ([^*]*) \*\//;
|
|
19
|
+
const currentScopeLegacyRe = /\.(uk-scope)/;
|
|
28
20
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
const files = await readFiles();
|
|
32
|
-
const oldScope = getScope(files);
|
|
33
|
-
|
|
34
|
-
if (argv.cleanup && oldScope) {
|
|
35
|
-
cleanup(files, oldScope);
|
|
36
|
-
} else if (oldScope) {
|
|
37
|
-
const newScope = getNewScope();
|
|
38
|
-
|
|
39
|
-
if (oldScope === newScope) {
|
|
40
|
-
console.warn(`Already scoped with: ${oldScope}`);
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
21
|
+
const files = await glob('dist/**/!(*.min).css');
|
|
22
|
+
const prevScope = await getScope(files);
|
|
43
23
|
|
|
44
|
-
|
|
45
|
-
|
|
24
|
+
if (args.cleanup && prevScope) {
|
|
25
|
+
await cleanup(files, prevScope);
|
|
26
|
+
} else if (prevScope) {
|
|
27
|
+
const newScope = getNewScope();
|
|
46
28
|
|
|
47
|
-
|
|
48
|
-
|
|
29
|
+
if (prevScope === newScope) {
|
|
30
|
+
console.warn(`Already scoped with: ${prevScope}`);
|
|
31
|
+
process.exit(0);
|
|
49
32
|
}
|
|
50
33
|
|
|
51
|
-
await
|
|
34
|
+
await cleanup(files, prevScope);
|
|
35
|
+
await scope(files, newScope);
|
|
52
36
|
|
|
37
|
+
} else {
|
|
38
|
+
await scope(files, getNewScope());
|
|
53
39
|
}
|
|
54
40
|
|
|
55
|
-
async function
|
|
56
|
-
|
|
57
|
-
const files = await glob('dist/**/!(*.min).css');
|
|
58
|
-
return Promise.all(files.map(async file => {
|
|
59
|
-
|
|
41
|
+
async function getScope(files) {
|
|
42
|
+
for (const file of files) {
|
|
60
43
|
const data = await read(file);
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
function getScope(files) {
|
|
68
|
-
return files.reduce((scope, {data}) => scope || isScoped(data), '');
|
|
44
|
+
const [, scope] = (data.match(currentScopeRe) || data.match(currentScopeLegacyRe) || []);
|
|
45
|
+
if (scope) {
|
|
46
|
+
return scope;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return '';
|
|
69
50
|
}
|
|
70
51
|
|
|
71
52
|
function getNewScope() {
|
|
72
53
|
|
|
73
|
-
const scopeFromInput =
|
|
54
|
+
const scopeFromInput = args.scope || args.s || 'uk-scope';
|
|
74
55
|
|
|
75
56
|
if (validClassName.test(scopeFromInput)) {
|
|
76
57
|
return scopeFromInput;
|
|
@@ -80,49 +61,33 @@ function getNewScope() {
|
|
|
80
61
|
}
|
|
81
62
|
|
|
82
63
|
async function scope(files, scope) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
} catch (e) {
|
|
95
|
-
console.error(store.file, e);
|
|
96
|
-
}
|
|
97
|
-
})
|
|
98
|
-
);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
async function store(files) {
|
|
102
|
-
return Promise.all(
|
|
103
|
-
files.map(async ({file, data}) => {
|
|
104
|
-
await write(file, data);
|
|
105
|
-
await minify(file);
|
|
106
|
-
})
|
|
107
|
-
);
|
|
64
|
+
for (const file of files) {
|
|
65
|
+
await replaceInFile(file, async data => {
|
|
66
|
+
const output = await renderLess(`.${scope} {\n${stripComments(data)}\n}`);
|
|
67
|
+
return `/* scoped: ${scope} */\n${
|
|
68
|
+
output
|
|
69
|
+
.replace(new RegExp(`.${scope} ${/{(.|[\r\n])*?}/.source}`), '')
|
|
70
|
+
.replace(new RegExp(`.${scope}${/\s((\.(uk-(drag|modal-page|offcanvas-page|offcanvas-flip)))|html)/.source}`, 'g'), '$1')
|
|
71
|
+
}`;
|
|
72
|
+
});
|
|
73
|
+
await minify(file);
|
|
74
|
+
}
|
|
108
75
|
}
|
|
109
76
|
|
|
110
|
-
|
|
111
|
-
const currentScopeLegacyRe = /\.(uk-scope)/;
|
|
112
|
-
|
|
113
|
-
function cleanup(files, scope) {
|
|
77
|
+
async function cleanup(files, scope) {
|
|
114
78
|
const string = scope.split(' ').map(scope => `.${scope}`).join(' ');
|
|
115
|
-
|
|
116
|
-
|
|
79
|
+
for (const file of files) {
|
|
80
|
+
await replaceInFile(file, data => data
|
|
117
81
|
.replace(new RegExp(/ */.source + string + / ({[\s\S]*?})?/.source, 'g'), '') // replace classes
|
|
118
|
-
.replace(new RegExp(currentScopeRe.source, 'g'), '')
|
|
119
|
-
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
function isScoped(data) {
|
|
123
|
-
return (data.match(currentScopeRe) || data.match(currentScopeLegacyRe) || [])[1];
|
|
82
|
+
.replace(new RegExp(currentScopeRe.source, 'g'), '') // remove scope comment
|
|
83
|
+
);
|
|
84
|
+
}
|
|
124
85
|
}
|
|
125
86
|
|
|
126
87
|
function stripComments(input) {
|
|
127
|
-
return input
|
|
88
|
+
return input
|
|
89
|
+
.replace(/\/\*(.|\n)*?\*\//gm, '')
|
|
90
|
+
.split('\n')
|
|
91
|
+
.filter(line => line.trim().substr(0, 2) !== '//')
|
|
92
|
+
.join('\n');
|
|
128
93
|
}
|
package/build/scss.js
CHANGED
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
const util = require('./util');
|
|
3
|
-
const glob = require('glob');
|
|
4
|
-
|
|
5
|
-
const {write} = util;
|
|
1
|
+
import {glob, read, write} from './util.js';
|
|
6
2
|
|
|
7
3
|
const themeMixins = {};
|
|
8
4
|
const coreMixins = {};
|
|
@@ -74,9 +70,10 @@ const inverseTemplate = ` @include hook-inverse-component-base();
|
|
|
74
70
|
@include hook-inverse-component-utility();`;
|
|
75
71
|
|
|
76
72
|
/* First Step: Go through all files */
|
|
77
|
-
glob
|
|
73
|
+
for (const file of await glob('src/less/**/*.less')) {
|
|
74
|
+
|
|
75
|
+
const data = await read(file);
|
|
78
76
|
|
|
79
|
-
const data = fs.readFileSync(file, 'utf8');
|
|
80
77
|
/* replace all LESS stuff with SCSS */
|
|
81
78
|
let scssData = data.replace(/\/less\//g, '/scss/') // change less/ dir to scss/ on imports
|
|
82
79
|
.replace(/\.less/g, '.scss') // change .less extensions to .scss on imports
|
|
@@ -87,7 +84,7 @@ glob.sync('src/less/**/*.less').forEach(file => {
|
|
|
87
84
|
.replace(/\.([\w-]*)\s*\((.*)\)\s*{/g, '@mixin $1($2){') // hook -> mixins
|
|
88
85
|
.replace(/(\$[\w-]*)\s*:(.*);/g, '$1: $2 !default;') // make variables optional
|
|
89
86
|
.replace(/@mixin ([\w-]*)\s*\((.*)\)\s*{\s*}/g, '// @mixin $1($2){}') // comment empty mixins
|
|
90
|
-
.replace(/\.(hook[a-zA-Z\-\d]+)
|
|
87
|
+
.replace(/\.(hook[a-zA-Z\-\d]+)(\(\))?;/g, '@if(mixin-exists($1)) {@include $1();}') // hook calls surrounded by a mixin-exists
|
|
91
88
|
.replace(/\$(import|supports|media|font-face|page|-ms-viewport|keyframes|-webkit-keyframes|-moz-document)/g, '@$1') // replace valid '@' statements
|
|
92
89
|
.replace(/tint\((\$[\w-]+),\s([^)]*)\)/g, 'mix(white, $1, $2)') // replace LESS function tint with mix
|
|
93
90
|
.replace(/fade\((\$[\w-]*), ([0-9]+)%\)/g, (match, p1, p2) => { return `rgba(${p1}, ${p2 / 100})`;}) // replace LESS function fade with rgba
|
|
@@ -98,6 +95,7 @@ glob.sync('src/less/**/*.less').forEach(file => {
|
|
|
98
95
|
.replace(/(\.[\w-\\@]+)\s*when\s*\((\$[\w-]*)\s*=\s*(\w+)\)\s*({\s*.*?\s*})/gs, '@if ($2 == $3) {\n$1 $4\n}') // replace conditionals
|
|
99
96
|
.replace(/\${/g, '#{$') // string literals: from: /~"(.*)"/g, to: '#{"$1"}'
|
|
100
97
|
.replace(/[^(](-\$[\w-]*)/g, ' ($1)') // surround negative variables with brackets
|
|
98
|
+
.replace(/(--[\w-]+:\s*)~'([^']+)'/g, '$1$2') // string literals in custom properties
|
|
101
99
|
.replace(/~('[^']+')/g, 'unquote($1)'); // string literals: for real
|
|
102
100
|
|
|
103
101
|
/* File name of the current file */
|
|
@@ -115,7 +113,7 @@ glob.sync('src/less/**/*.less').forEach(file => {
|
|
|
115
113
|
|
|
116
114
|
/* get all Variables but not from the mixin.less file */
|
|
117
115
|
if (filename !== 'mixin') {
|
|
118
|
-
scssData = getVariablesFromFile(file, scssData);
|
|
116
|
+
scssData = await getVariablesFromFile(file, scssData);
|
|
119
117
|
}
|
|
120
118
|
|
|
121
119
|
if (filename === 'uikit.theme') {
|
|
@@ -130,30 +128,30 @@ glob.sync('src/less/**/*.less').forEach(file => {
|
|
|
130
128
|
scssData = mixinTemplate;
|
|
131
129
|
}
|
|
132
130
|
|
|
133
|
-
|
|
131
|
+
await write(file.replace(/less/g, 'scss').replace('.theme.', '-theme.'), scssData);
|
|
134
132
|
|
|
135
|
-
}
|
|
133
|
+
}
|
|
136
134
|
|
|
137
135
|
/* Second Step write all new needed files for SASS */
|
|
138
136
|
|
|
139
137
|
/* write mixins into new file */
|
|
140
138
|
const mixins_theme = Object.keys(themeMixins).map(function (key) { return themeMixins[key]; });
|
|
141
|
-
write('src/scss/mixins-theme.scss', mixins_theme.join('\n'));
|
|
139
|
+
await write('src/scss/mixins-theme.scss', mixins_theme.join('\n'));
|
|
142
140
|
|
|
143
141
|
const mixins_core = Object.keys(coreMixins).map(function (key) { return coreMixins[key]; });
|
|
144
|
-
write('src/scss/mixins.scss', mixins_core.join('\n'));
|
|
142
|
+
await write('src/scss/mixins.scss', mixins_core.join('\n'));
|
|
145
143
|
|
|
146
144
|
/* write core variables */
|
|
147
145
|
const compactCoreVar = new Set();
|
|
148
146
|
Object.keys(coreVar).map(key => getAllDependencies(coreVar, key).forEach(dependency => compactCoreVar.add(dependency)));
|
|
149
147
|
|
|
150
|
-
write('src/scss/variables.scss', Array.from(compactCoreVar).join('\n'));
|
|
148
|
+
await write('src/scss/variables.scss', Array.from(compactCoreVar).join('\n'));
|
|
151
149
|
|
|
152
150
|
/* write theme variables */
|
|
153
151
|
const compactThemeVar = new Set();
|
|
154
152
|
Object.keys(themeVar).map(key => getAllDependencies(themeVar, key).forEach(dependency => compactThemeVar.add(dependency)));
|
|
155
153
|
|
|
156
|
-
write('src/scss/variables-theme.scss', Array.from(compactThemeVar).join('\n'));
|
|
154
|
+
await write('src/scss/variables-theme.scss', Array.from(compactThemeVar).join('\n'));
|
|
157
155
|
|
|
158
156
|
/*
|
|
159
157
|
* recursive function to get a dependencie Set which is ordered so that no depencies exist to a later on entry
|
|
@@ -198,9 +196,9 @@ function getMixinsFromFile(file, data) {
|
|
|
198
196
|
match = regex.exec(data);
|
|
199
197
|
|
|
200
198
|
while (match) {
|
|
201
|
-
themeMixins[match[1]] = match
|
|
199
|
+
[themeMixins[match[1]]] = match;
|
|
202
200
|
if (file.indexOf('theme/') < 0) {
|
|
203
|
-
coreMixins[match[1]] = match
|
|
201
|
+
[coreMixins[match[1]]] = match;
|
|
204
202
|
}
|
|
205
203
|
match = regex.exec(data);
|
|
206
204
|
}
|
|
@@ -210,9 +208,9 @@ function getMixinsFromFile(file, data) {
|
|
|
210
208
|
match = regex.exec(data);
|
|
211
209
|
|
|
212
210
|
while (match) {
|
|
213
|
-
themeMixins[match[1]] = match
|
|
211
|
+
[themeMixins[match[1]]] = match;
|
|
214
212
|
if (file.indexOf('theme/') < 0) {
|
|
215
|
-
coreMixins[match[1]] = match
|
|
213
|
+
[coreMixins[match[1]]] = match;
|
|
216
214
|
}
|
|
217
215
|
|
|
218
216
|
match = regex.exec(data);
|
|
@@ -228,7 +226,7 @@ function getMixinsFromFile(file, data) {
|
|
|
228
226
|
* function to extract all the variables from a given file with its data.
|
|
229
227
|
* @return an updated data where the icons have been replaced by the actual SVG data.
|
|
230
228
|
*/
|
|
231
|
-
function getVariablesFromFile(file, data) {
|
|
229
|
+
async function getVariablesFromFile(file, data) {
|
|
232
230
|
const regex = /(\$[\w-]*)\s*:\s*(.*);/g;
|
|
233
231
|
let match = regex.exec(data);
|
|
234
232
|
|
|
@@ -239,7 +237,7 @@ function getVariablesFromFile(file, data) {
|
|
|
239
237
|
|
|
240
238
|
const iconregex = /(\$[\w-]+)\s*:\s*"\.\.\/\.\.\/images\/backgrounds\/([\w./-]+)" !default;/g;
|
|
241
239
|
const iconmatch = iconregex.exec(match[0]);
|
|
242
|
-
let svg =
|
|
240
|
+
let svg = (await read(`src/images/backgrounds/${iconmatch[2]}`)).toString();
|
|
243
241
|
svg = `"${svg.replace(/\r?\n|\r/g, '%0A')
|
|
244
242
|
.replace(/"/g, '\'')
|
|
245
243
|
.replace(/\s/g, '%20')
|