uikit 3.11.2-dev.f2970ffaa → 3.11.2-dev.f3ade19c4
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.json +4 -49
- package/.prettierignore +14 -0
- package/.prettierrc.json +13 -0
- package/.webstorm.js +3 -3
- package/CHANGELOG.md +54 -18
- package/build/.eslintrc.json +1 -3
- package/build/build.js +26 -28
- package/build/icons.js +7 -11
- package/build/less.js +48 -36
- package/build/package.json +2 -2
- package/build/prefix.js +21 -18
- package/build/publishDev.js +6 -8
- package/build/release.js +20 -17
- package/build/scope.js +21 -11
- package/build/scss.js +72 -39
- package/build/util.js +71 -62
- package/build/wrapper/icons.js +0 -2
- package/dist/css/uikit-core-rtl.css +133 -201
- package/dist/css/uikit-core-rtl.min.css +1 -1
- package/dist/css/uikit-core.css +133 -201
- package/dist/css/uikit-core.min.css +1 -1
- package/dist/css/uikit-rtl.css +135 -207
- package/dist/css/uikit-rtl.min.css +1 -1
- package/dist/css/uikit.css +135 -207
- package/dist/css/uikit.min.css +1 -1
- package/dist/js/components/countdown.js +88 -133
- package/dist/js/components/countdown.min.js +1 -1
- package/dist/js/components/filter.js +408 -439
- package/dist/js/components/filter.min.js +1 -1
- package/dist/js/components/lightbox-panel.js +1091 -1319
- package/dist/js/components/lightbox-panel.min.js +1 -1
- package/dist/js/components/lightbox.js +1137 -1396
- package/dist/js/components/lightbox.min.js +1 -1
- package/dist/js/components/notification.js +94 -114
- package/dist/js/components/notification.min.js +1 -1
- package/dist/js/components/parallax.js +347 -372
- package/dist/js/components/parallax.min.js +1 -1
- package/dist/js/components/slider-parallax.js +345 -360
- package/dist/js/components/slider-parallax.min.js +1 -1
- package/dist/js/components/slider.js +749 -843
- package/dist/js/components/slider.min.js +1 -1
- package/dist/js/components/slideshow-parallax.js +345 -360
- package/dist/js/components/slideshow-parallax.min.js +1 -1
- package/dist/js/components/slideshow.js +628 -798
- package/dist/js/components/slideshow.min.js +1 -1
- package/dist/js/components/sortable.js +587 -620
- package/dist/js/components/sortable.min.js +1 -1
- package/dist/js/components/tooltip.js +324 -356
- package/dist/js/components/tooltip.min.js +1 -1
- package/dist/js/components/upload.js +155 -167
- package/dist/js/components/upload.min.js +1 -1
- package/dist/js/uikit-core.js +5326 -6526
- package/dist/js/uikit-core.min.js +1 -1
- package/dist/js/uikit-icons.js +7 -9
- package/dist/js/uikit-icons.min.js +1 -1
- package/dist/js/uikit.js +8031 -9659
- package/dist/js/uikit.min.js +1 -1
- package/jsconfig.json +1 -1
- package/package.json +64 -60
- package/src/js/api/boot.js +25 -32
- package/src/js/api/component.js +15 -28
- package/src/js/api/global.js +6 -12
- package/src/js/api/hooks.js +14 -33
- package/src/js/api/instance.js +7 -15
- package/src/js/api/state.js +199 -187
- package/src/js/components/countdown.js +26 -52
- package/src/js/components/filter.js +70 -66
- package/src/js/components/index.js +13 -13
- package/src/js/components/internal/lightbox-animations.js +14 -25
- package/src/js/components/internal/slider-preload.js +9 -0
- package/src/js/components/internal/slider-transitioner.js +66 -45
- package/src/js/components/internal/slideshow-animations.js +46 -64
- package/src/js/components/lightbox-panel.js +107 -105
- package/src/js/components/lightbox.js +17 -39
- package/src/js/components/notification.js +49 -43
- package/src/js/components/parallax.js +21 -46
- package/src/js/components/slider-parallax.js +13 -23
- package/src/js/components/slider.js +117 -89
- package/src/js/components/slideshow-parallax.js +1 -1
- package/src/js/components/slideshow.js +15 -13
- package/src/js/components/sortable.js +125 -106
- package/src/js/components/tooltip.js +41 -31
- package/src/js/components/upload.js +52 -63
- package/src/js/core/accordion.js +58 -48
- package/src/js/core/alert.js +9 -17
- package/src/js/core/core.js +17 -69
- package/src/js/core/cover.js +15 -15
- package/src/js/core/drop.js +110 -94
- package/src/js/core/form-custom.js +22 -27
- package/src/js/core/gif.js +3 -7
- package/src/js/core/grid.js +57 -58
- package/src/js/core/height-match.js +16 -29
- package/src/js/core/height-viewport.js +30 -34
- package/src/js/core/icon.js +47 -52
- package/src/js/core/img.js +153 -143
- package/src/js/core/index.js +39 -39
- package/src/js/core/leader.js +9 -18
- package/src/js/core/margin.js +21 -37
- package/src/js/core/modal.js +49 -36
- package/src/js/core/nav.js +2 -4
- package/src/js/core/navbar.js +113 -85
- package/src/js/core/offcanvas.js +51 -54
- package/src/js/core/overflow-auto.js +13 -17
- package/src/js/core/responsive.js +14 -12
- package/src/js/core/scroll.js +10 -20
- package/src/js/core/scrollspy-nav.js +34 -31
- package/src/js/core/scrollspy.js +37 -54
- package/src/js/core/sticky.js +175 -123
- package/src/js/core/svg.js +68 -83
- package/src/js/core/switcher.js +56 -47
- package/src/js/core/tab.js +7 -10
- package/src/js/core/toggle.js +69 -68
- package/src/js/core/video.js +22 -21
- package/src/js/mixin/animate.js +19 -20
- package/src/js/mixin/class.js +2 -4
- package/src/js/mixin/container.js +7 -11
- package/src/js/mixin/internal/animate-fade.js +73 -30
- package/src/js/mixin/internal/animate-slide.js +58 -41
- package/src/js/mixin/internal/slideshow-animations.js +7 -14
- package/src/js/mixin/internal/slideshow-transitioner.js +10 -17
- package/src/js/mixin/lazyload.js +20 -0
- package/src/js/mixin/media.js +5 -10
- package/src/js/mixin/modal.js +89 -66
- package/src/js/mixin/parallax.js +149 -107
- package/src/js/mixin/position.js +26 -20
- package/src/js/mixin/slider-autoplay.js +12 -21
- package/src/js/mixin/slider-drag.js +64 -65
- package/src/js/mixin/slider-nav.js +26 -35
- package/src/js/mixin/slider-reactive.js +2 -8
- package/src/js/mixin/slider.js +47 -60
- package/src/js/mixin/slideshow.js +12 -22
- package/src/js/mixin/swipe.js +72 -0
- package/src/js/mixin/togglable.js +89 -63
- package/src/js/uikit-core.js +2 -4
- package/src/js/uikit.js +2 -4
- package/src/js/util/ajax.js +25 -40
- package/src/js/util/animation.js +77 -75
- package/src/js/util/attr.js +17 -21
- package/src/js/util/class.js +14 -52
- package/src/js/util/dimensions.js +78 -49
- package/src/js/util/dom.js +39 -66
- package/src/js/util/env.js +7 -12
- package/src/js/util/event.js +60 -59
- package/src/js/util/fastdom.js +1 -6
- package/src/js/util/filter.js +17 -34
- package/src/js/util/index.js +1 -1
- package/src/js/util/lang.js +82 -121
- package/src/js/util/mouse.js +19 -17
- package/src/js/util/observer.js +36 -0
- package/src/js/util/options.js +35 -49
- package/src/js/util/player.js +41 -36
- package/src/js/util/position.js +54 -46
- package/src/js/util/selector.js +43 -58
- package/src/js/util/style.js +39 -49
- package/src/js/util/viewport.js +75 -64
- package/src/less/components/base.less +10 -33
- package/src/less/components/flex.less +0 -9
- package/src/less/components/form-range.less +48 -95
- package/src/less/components/form.less +0 -1
- package/src/less/components/height.less +3 -0
- package/src/less/components/leader.less +0 -1
- package/src/less/components/lightbox.less +0 -1
- package/src/less/components/modal.less +3 -7
- package/src/less/components/navbar.less +0 -7
- package/src/less/components/progress.less +14 -36
- package/src/less/components/slider.less +0 -3
- package/src/less/components/slideshow.less +0 -3
- package/src/less/components/text.less +16 -32
- package/src/less/components/utility.less +25 -0
- package/src/scss/components/base.scss +10 -33
- package/src/scss/components/flex.scss +0 -9
- package/src/scss/components/form-range.scss +48 -95
- package/src/scss/components/form.scss +3 -4
- package/src/scss/components/height.scss +3 -0
- package/src/scss/components/icon.scss +2 -2
- package/src/scss/components/leader.scss +0 -1
- package/src/scss/components/lightbox.scss +0 -1
- package/src/scss/components/modal.scss +3 -7
- package/src/scss/components/navbar.scss +0 -7
- package/src/scss/components/progress.scss +14 -36
- package/src/scss/components/search.scss +1 -1
- package/src/scss/components/slider.scss +0 -3
- package/src/scss/components/slideshow.scss +0 -3
- package/src/scss/components/text.scss +16 -32
- package/src/scss/components/utility.scss +25 -0
- package/src/scss/mixins-theme.scss +1 -1
- package/src/scss/mixins.scss +1 -1
- package/src/scss/variables-theme.scss +9 -9
- package/src/scss/variables.scss +9 -9
- package/tests/align.html +10 -10
- package/tests/animation.html +2 -2
- package/tests/article.html +2 -2
- package/tests/base.html +3 -3
- package/tests/card.html +10 -10
- package/tests/column.html +3 -3
- package/tests/comment.html +9 -9
- package/tests/dotnav.html +3 -3
- package/tests/image.html +296 -64
- package/tests/images/image-type.avif +0 -0
- package/tests/images/image-type.jpeg +0 -0
- package/tests/images/image-type.webp +0 -0
- package/tests/index.html +8 -8
- package/tests/js/index.js +114 -85
- package/tests/lightbox.html +10 -10
- package/tests/marker.html +2 -2
- package/tests/modal.html +8 -9
- package/tests/navbar.html +2 -2
- package/tests/overlay.html +7 -7
- package/tests/parallax.html +16 -7
- package/tests/position.html +12 -12
- package/tests/slidenav.html +12 -12
- package/tests/slider.html +20 -20
- package/tests/sortable.html +1 -1
- package/tests/sticky-parallax.html +87 -99
- package/tests/sticky.html +56 -24
- package/tests/svg.html +6 -6
- package/tests/table.html +11 -11
- package/tests/thumbnav.html +12 -12
- package/tests/transition.html +30 -30
- package/tests/utility.html +50 -33
- package/tests/video.html +1 -1
- package/tests/width.html +1 -1
- package/src/js/mixin/flex-bug.js +0 -56
- package/src/js/util/promise.js +0 -191
- package/tests/images/animated.gif +0 -0
package/build/publishDev.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import semver from 'semver';
|
|
2
|
-
import {args, getVersion, run} from './util.js';
|
|
2
|
+
import { args, getVersion, run } from './util.js';
|
|
3
3
|
|
|
4
|
-
const {inc} = semver;
|
|
4
|
+
const { inc } = semver;
|
|
5
5
|
|
|
6
6
|
// default exec options
|
|
7
|
-
if (args.f || args.force || await isDevCommit()) {
|
|
8
|
-
|
|
7
|
+
if (args.f || args.force || (await isDevCommit())) {
|
|
9
8
|
// increase version patch number
|
|
10
9
|
const version = inc(await getVersion(), 'patch');
|
|
11
10
|
|
|
@@ -20,17 +19,16 @@ if (args.f || args.force || await isDevCommit()) {
|
|
|
20
19
|
|
|
21
20
|
// publish to dev tag
|
|
22
21
|
await run('npm publish --tag dev');
|
|
23
|
-
|
|
24
22
|
}
|
|
25
23
|
|
|
26
24
|
async function isDevCommit() {
|
|
27
|
-
|
|
28
25
|
// check for changes to publish (%B: raw body (unwrapped subject and body)
|
|
29
26
|
const message = await run('git log -1 --pretty=%B');
|
|
30
27
|
|
|
31
28
|
// https://www.conventionalcommits.org/en/v1.0.0/
|
|
32
|
-
const type = message.match(
|
|
29
|
+
const type = message.match(
|
|
30
|
+
/^(revert: )?(feat|fix|polish|docs|style|refactor|perf|test|workflow|ci|chore|types|build)(\(.+\))?: .{1,50}/
|
|
31
|
+
);
|
|
33
32
|
|
|
34
33
|
return type && ['feat', 'fix', 'refactor', 'perf'].includes(type[2]);
|
|
35
|
-
|
|
36
34
|
}
|
package/build/release.js
CHANGED
|
@@ -1,23 +1,26 @@
|
|
|
1
1
|
import archiver from 'archiver';
|
|
2
2
|
import inquirer from 'inquirer';
|
|
3
3
|
import dateFormat from 'dateformat/lib/dateformat.js';
|
|
4
|
-
import {createWriteStream} from 'fs';
|
|
4
|
+
import { createWriteStream } from 'fs';
|
|
5
5
|
import semver from 'semver';
|
|
6
|
-
import {args, getVersion, glob, logFile, replaceInFile, run} from './util.js';
|
|
6
|
+
import { args, getVersion, glob, logFile, replaceInFile, run } from './util.js';
|
|
7
7
|
|
|
8
|
-
const {coerce, inc, prerelease, valid} = semver;
|
|
8
|
+
const { coerce, inc, prerelease, valid } = semver;
|
|
9
9
|
|
|
10
10
|
const prevVersion = await getVersion();
|
|
11
11
|
const version = await inquireVersion(args.v || args.version);
|
|
12
12
|
|
|
13
13
|
await Promise.all([
|
|
14
14
|
run(`npm version ${version} --git-tag-version false`),
|
|
15
|
-
replaceInFile('CHANGELOG.md', data =>
|
|
16
|
-
data.replace(
|
|
15
|
+
replaceInFile('CHANGELOG.md', (data) =>
|
|
16
|
+
data.replace(
|
|
17
|
+
/^##\s*WIP/m,
|
|
18
|
+
`## ${versionFormat(version)} (${dateFormat(Date.now(), 'mmmm d, yyyy')})`
|
|
19
|
+
)
|
|
17
20
|
),
|
|
18
|
-
replaceInFile('.github/ISSUE_TEMPLATE/bug-report.md', data =>
|
|
21
|
+
replaceInFile('.github/ISSUE_TEMPLATE/bug-report.md', (data) =>
|
|
19
22
|
data.replace(prevVersion, version)
|
|
20
|
-
)
|
|
23
|
+
),
|
|
21
24
|
]);
|
|
22
25
|
|
|
23
26
|
await run('yarn compile');
|
|
@@ -27,20 +30,20 @@ await run('yarn build-scss');
|
|
|
27
30
|
await createPackage(version);
|
|
28
31
|
|
|
29
32
|
async function inquireVersion(v) {
|
|
30
|
-
|
|
31
33
|
if (valid(v)) {
|
|
32
34
|
return v;
|
|
33
35
|
}
|
|
34
36
|
|
|
35
37
|
const prompt = inquirer.createPromptModule();
|
|
36
38
|
|
|
37
|
-
return (
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
39
|
+
return (
|
|
40
|
+
await prompt({
|
|
41
|
+
name: 'version',
|
|
42
|
+
message: 'Enter a version',
|
|
43
|
+
default: () => inc(prevVersion, prerelease(prevVersion) ? 'prerelease' : 'patch'),
|
|
44
|
+
validate: (val) => !!val.length || 'Invalid version',
|
|
45
|
+
})
|
|
46
|
+
).version;
|
|
44
47
|
}
|
|
45
48
|
|
|
46
49
|
async function createPackage(version) {
|
|
@@ -49,8 +52,8 @@ async function createPackage(version) {
|
|
|
49
52
|
|
|
50
53
|
archive.pipe(createWriteStream(file));
|
|
51
54
|
|
|
52
|
-
(await glob('dist/{js,css}/uikit?(-icons|-rtl)?(.min).{js,css}')).forEach(file =>
|
|
53
|
-
archive.file(file, {name: file.substring(5)})
|
|
55
|
+
(await glob('dist/{js,css}/uikit?(-icons|-rtl)?(.min).{js,css}')).forEach((file) =>
|
|
56
|
+
archive.file(file, { name: file.substring(5) })
|
|
54
57
|
);
|
|
55
58
|
|
|
56
59
|
await archive.finalize();
|
package/build/scope.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {args, glob, minify, read, renderLess, replaceInFile, validClassName} from './util.js';
|
|
1
|
+
import { args, glob, minify, read, renderLess, replaceInFile, validClassName } from './util.js';
|
|
2
2
|
|
|
3
3
|
if (args.h || args.help) {
|
|
4
4
|
console.log(`
|
|
@@ -33,7 +33,6 @@ if (args.cleanup && prevScope) {
|
|
|
33
33
|
|
|
34
34
|
await cleanup(files, prevScope);
|
|
35
35
|
await scope(files, newScope);
|
|
36
|
-
|
|
37
36
|
} else {
|
|
38
37
|
await scope(files, getNewScope());
|
|
39
38
|
}
|
|
@@ -41,7 +40,7 @@ if (args.cleanup && prevScope) {
|
|
|
41
40
|
async function getScope(files) {
|
|
42
41
|
for (const file of files) {
|
|
43
42
|
const data = await read(file);
|
|
44
|
-
const [, scope] =
|
|
43
|
+
const [, scope] = data.match(currentScopeRe) || data.match(currentScopeLegacyRe) || [];
|
|
45
44
|
if (scope) {
|
|
46
45
|
return scope;
|
|
47
46
|
}
|
|
@@ -50,7 +49,6 @@ async function getScope(files) {
|
|
|
50
49
|
}
|
|
51
50
|
|
|
52
51
|
function getNewScope() {
|
|
53
|
-
|
|
54
52
|
const scopeFromInput = args.scope || args.s || 'uk-scope';
|
|
55
53
|
|
|
56
54
|
if (validClassName.test(scopeFromInput)) {
|
|
@@ -62,10 +60,16 @@ function getNewScope() {
|
|
|
62
60
|
|
|
63
61
|
async function scope(files, scope) {
|
|
64
62
|
for (const file of files) {
|
|
65
|
-
await replaceInFile(file, async data => {
|
|
63
|
+
await replaceInFile(file, async (data) => {
|
|
66
64
|
const output = await renderLess(`.${scope} {\n${stripComments(data)}\n}`);
|
|
67
65
|
return `/* scoped: ${scope} */\n${
|
|
68
|
-
output.replace(
|
|
66
|
+
output.replace(
|
|
67
|
+
new RegExp(
|
|
68
|
+
`.${scope}\\s((\\.(uk-(drag|modal-page|offcanvas-page|offcanvas-flip)))|html|:root)`,
|
|
69
|
+
'g'
|
|
70
|
+
),
|
|
71
|
+
'$1'
|
|
72
|
+
) // unescape
|
|
69
73
|
}`;
|
|
70
74
|
});
|
|
71
75
|
await minify(file);
|
|
@@ -73,11 +77,17 @@ async function scope(files, scope) {
|
|
|
73
77
|
}
|
|
74
78
|
|
|
75
79
|
async function cleanup(files, scope) {
|
|
76
|
-
const string = scope
|
|
80
|
+
const string = scope
|
|
81
|
+
.split(' ')
|
|
82
|
+
.map((scope) => `.${scope}`)
|
|
83
|
+
.join(' ');
|
|
77
84
|
for (const file of files) {
|
|
78
|
-
await replaceInFile(
|
|
79
|
-
|
|
80
|
-
|
|
85
|
+
await replaceInFile(
|
|
86
|
+
file,
|
|
87
|
+
(data) =>
|
|
88
|
+
data
|
|
89
|
+
.replace(currentScopeRe, '') // remove scope comment
|
|
90
|
+
.replace(new RegExp(` *${string} ({[\\s\\S]*?})?`, 'g'), '') // replace classes
|
|
81
91
|
);
|
|
82
92
|
}
|
|
83
93
|
}
|
|
@@ -86,6 +96,6 @@ function stripComments(input) {
|
|
|
86
96
|
return input
|
|
87
97
|
.replace(/\/\*(.|\n)*?\*\//gm, '')
|
|
88
98
|
.split('\n')
|
|
89
|
-
.filter(line => line.trim().substr(0, 2) !== '//')
|
|
99
|
+
.filter((line) => line.trim().substr(0, 2) !== '//')
|
|
90
100
|
.join('\n');
|
|
91
101
|
}
|
package/build/scss.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import NP from 'number-precision';
|
|
2
|
-
import {glob, read, write} from './util.js';
|
|
2
|
+
import { glob, read, write } from './util.js';
|
|
3
3
|
|
|
4
4
|
NP.enableBoundaryChecking(false);
|
|
5
5
|
|
|
@@ -74,14 +74,17 @@ const inverseTemplate = ` @include hook-inverse-component-base();
|
|
|
74
74
|
|
|
75
75
|
/* First Step: Go through all files */
|
|
76
76
|
for (const file of await glob('src/less/**/*.less')) {
|
|
77
|
-
|
|
78
77
|
const data = await read(file);
|
|
79
78
|
|
|
80
79
|
/* replace all Less stuff with SCSS */
|
|
81
|
-
let scssData = data
|
|
80
|
+
let scssData = data
|
|
81
|
+
.replace(/\/less\//g, '/scss/') // change less/ dir to scss/ on imports
|
|
82
82
|
.replace(/\.less/g, '.scss') // change .less extensions to .scss on imports
|
|
83
83
|
.replace(/@/g, '$') // convert variables
|
|
84
|
-
.replace(
|
|
84
|
+
.replace(
|
|
85
|
+
/(:[^'"]*?\([^'"]+?)\s*\/\s*([0-9.-]+)\)/g,
|
|
86
|
+
(exp, m1, m2) => `${m1} * ${NP.round(1 / parseFloat(m2), 5)})`
|
|
87
|
+
)
|
|
85
88
|
.replace(/--uk-[^\s]+: (\$[^\s]+);/g, (exp, name) => exp.replace(name, `#{${name}}`))
|
|
86
89
|
.replace(/\\\$/g, '\\@') // revert classes using the @ symbol
|
|
87
90
|
.replace(/ e\(/g, ' unquote(') // convert escape function
|
|
@@ -89,14 +92,30 @@ for (const file of await glob('src/less/**/*.less')) {
|
|
|
89
92
|
.replace(/(\$[\w-]*)\s*:(.*);/g, '$1: $2 !default;') // make variables optional
|
|
90
93
|
.replace(/@mixin ([\w-]*)\s*\((.*)\)\s*{\s*}/g, '// @mixin $1($2){}') // comment empty mixins
|
|
91
94
|
.replace(/\.(hook[a-zA-Z\-\d]+)(\(\))?;/g, '@if(mixin-exists($1)) {@include $1();}') // hook calls surrounded by a mixin-exists
|
|
92
|
-
.replace(
|
|
95
|
+
.replace(
|
|
96
|
+
/\$(import|supports|media|font-face|page|-ms-viewport|keyframes|-webkit-keyframes|-moz-document)/g,
|
|
97
|
+
'@$1'
|
|
98
|
+
) // replace valid '@' statements
|
|
93
99
|
.replace(/tint\((\$[\w-]+),\s([^)]*)\)/g, 'mix(white, $1, $2)') // replace Less function tint with mix
|
|
94
|
-
.replace(/fade\((\$[\w-]*), ([0-9]+)%\)/g, (match, p1, p2) => {
|
|
95
|
-
|
|
100
|
+
.replace(/fade\((\$[\w-]*), ([0-9]+)%\)/g, (match, p1, p2) => {
|
|
101
|
+
return `rgba(${p1}, ${p2 / 100})`;
|
|
102
|
+
}) // replace Less function fade with rgba
|
|
103
|
+
.replace(/fade(in|out)\((\$[\w-]*), ([0-9]+)%\)/g, (match, p1, p2, p3) => {
|
|
104
|
+
return `fade-${p1}(${p2}, ${p3 / 100})`;
|
|
105
|
+
}) // replace Less function fadeout with fade-out
|
|
96
106
|
.replace(/\.svg-fill/g, '@include svg-fill') // include svg-fill mixin
|
|
97
|
-
.replace(
|
|
98
|
-
|
|
99
|
-
|
|
107
|
+
.replace(
|
|
108
|
+
/(.*):extend\((\.[\w-\\@]*) all\) when \((\$[\w-]*) = ([\w]+)\) {}/g,
|
|
109
|
+
'@if ( $3 == $4 ) { $1 { @extend $2 !optional;} }'
|
|
110
|
+
) // update conditional extend and add !optional to ignore warnings
|
|
111
|
+
.replace(
|
|
112
|
+
/(\.[\w-\\@]+)\s*when\s*\((\$[\w-]*)\s*=\s*(\w+)\)\s*{\s*@if\(mixin-exists\(([\w-]*)\)\) {@include\s([\w-]*)\(\);\s*}\s*}/g,
|
|
113
|
+
'@if ($2 == $3) { $1 { @if (mixin-exists($4)) {@include $4();}}}'
|
|
114
|
+
) // update conditional hook
|
|
115
|
+
.replace(
|
|
116
|
+
/(\.[\w-\\@]+)\s*when\s*\((\$[\w-]*)\s*=\s*(\w+)\)\s*({\s*.*?\s*})/gs,
|
|
117
|
+
'@if ($2 == $3) {\n$1 $4\n}'
|
|
118
|
+
) // replace conditionals
|
|
100
119
|
.replace(/\${/g, '#{$') // string literals: from: /~"(.*)"/g, to: '#{"$1"}'
|
|
101
120
|
.replace(/[^(](-\$[\w-]*)/g, ' ($1)') // surround negative variables with brackets
|
|
102
121
|
.replace(/(--[\w-]+:\s*)~'([^']+)'/g, '$1$2') // string literals in custom properties
|
|
@@ -124,7 +143,10 @@ for (const file of await glob('src/less/**/*.less')) {
|
|
|
124
143
|
/* remove the theme import first place */
|
|
125
144
|
scssData = scssData.replace(/\/\/\n\/\/ Theme\n\/\/\n\n@import "theme\/_import.scss";/, '');
|
|
126
145
|
/* add uikit-mixins and uikit-variables include to the uikit.scss file and change order, to load theme files first */
|
|
127
|
-
scssData = scssData.replace(
|
|
146
|
+
scssData = scssData.replace(
|
|
147
|
+
/\/\/ Core\n\/\//g,
|
|
148
|
+
'// Theme\n//\n\n@import "theme/_import.scss";'
|
|
149
|
+
);
|
|
128
150
|
}
|
|
129
151
|
|
|
130
152
|
/* mixin.less needs to be fully replaced by the new mixin file*/
|
|
@@ -133,27 +155,34 @@ for (const file of await glob('src/less/**/*.less')) {
|
|
|
133
155
|
}
|
|
134
156
|
|
|
135
157
|
await write(file.replace(/less/g, 'scss').replace('.theme.', '-theme.'), scssData);
|
|
136
|
-
|
|
137
158
|
}
|
|
138
159
|
|
|
139
160
|
/* Second Step write all new needed files for SASS */
|
|
140
161
|
|
|
141
162
|
/* write mixins into new file */
|
|
142
|
-
const mixins_theme = Object.keys(themeMixins).map(function (key) {
|
|
163
|
+
const mixins_theme = Object.keys(themeMixins).map(function (key) {
|
|
164
|
+
return themeMixins[key];
|
|
165
|
+
});
|
|
143
166
|
await write('src/scss/mixins-theme.scss', mixins_theme.join('\n'));
|
|
144
167
|
|
|
145
|
-
const mixins_core = Object.keys(coreMixins).map(function (key) {
|
|
168
|
+
const mixins_core = Object.keys(coreMixins).map(function (key) {
|
|
169
|
+
return coreMixins[key];
|
|
170
|
+
});
|
|
146
171
|
await write('src/scss/mixins.scss', mixins_core.join('\n'));
|
|
147
172
|
|
|
148
173
|
/* write core variables */
|
|
149
174
|
const compactCoreVar = new Set();
|
|
150
|
-
Object.keys(coreVar).map(
|
|
175
|
+
Object.keys(coreVar).map((key) =>
|
|
176
|
+
getAllDependencies(coreVar, key).forEach((dependency) => compactCoreVar.add(dependency))
|
|
177
|
+
);
|
|
151
178
|
|
|
152
179
|
await write('src/scss/variables.scss', Array.from(compactCoreVar).join('\n'));
|
|
153
180
|
|
|
154
181
|
/* write theme variables */
|
|
155
182
|
const compactThemeVar = new Set();
|
|
156
|
-
Object.keys(themeVar).map(
|
|
183
|
+
Object.keys(themeVar).map((key) =>
|
|
184
|
+
getAllDependencies(themeVar, key).forEach((dependency) => compactThemeVar.add(dependency))
|
|
185
|
+
);
|
|
157
186
|
|
|
158
187
|
await write('src/scss/variables-theme.scss', Array.from(compactThemeVar).join('\n'));
|
|
159
188
|
|
|
@@ -162,15 +191,14 @@ await write('src/scss/variables-theme.scss', Array.from(compactThemeVar).join('\
|
|
|
162
191
|
* @return Set with all the dependencies.
|
|
163
192
|
*/
|
|
164
193
|
function getAllDependencies(allVariables, currentKey, dependencies = new Set()) {
|
|
165
|
-
|
|
166
194
|
if (!allVariables[currentKey].dependencies.length) {
|
|
167
|
-
|
|
168
195
|
dependencies.add(`${currentKey}: ${allVariables[currentKey].value}`);
|
|
169
196
|
return Array.from(dependencies);
|
|
170
197
|
} else {
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
198
|
+
allVariables[currentKey].dependencies.forEach((dependecy) => {
|
|
199
|
+
getAllDependencies(allVariables, dependecy, dependencies).forEach((newDependency) =>
|
|
200
|
+
dependencies.add(newDependency)
|
|
201
|
+
);
|
|
174
202
|
});
|
|
175
203
|
|
|
176
204
|
dependencies.add(`${currentKey}: ${allVariables[currentKey].value}`);
|
|
@@ -183,14 +211,17 @@ function getAllDependencies(allVariables, currentKey, dependencies = new Set())
|
|
|
183
211
|
* @return an updated data where the mixins have been removed.
|
|
184
212
|
*/
|
|
185
213
|
function getMixinsFromFile(file, data) {
|
|
186
|
-
|
|
187
214
|
/* Step 1: get all includes and insert them, so that at least empty mixins exist. */
|
|
188
215
|
let regex = /@include ([a-z0-9-]+)/g;
|
|
189
216
|
let match = regex.exec(data);
|
|
190
217
|
|
|
191
218
|
while (match) {
|
|
192
|
-
if (!(match[1] in themeMixins)) {
|
|
193
|
-
|
|
219
|
+
if (!(match[1] in themeMixins)) {
|
|
220
|
+
themeMixins[match[1]] = `@mixin ${match[1]}(){}`;
|
|
221
|
+
}
|
|
222
|
+
if (!(match[1] in coreMixins)) {
|
|
223
|
+
coreMixins[match[1]] = `@mixin ${match[1]}(){}`;
|
|
224
|
+
}
|
|
194
225
|
|
|
195
226
|
match = regex.exec(data);
|
|
196
227
|
}
|
|
@@ -201,7 +232,7 @@ function getMixinsFromFile(file, data) {
|
|
|
201
232
|
|
|
202
233
|
while (match) {
|
|
203
234
|
[themeMixins[match[1]]] = match;
|
|
204
|
-
if (file.
|
|
235
|
+
if (!file.includes('theme/')) {
|
|
205
236
|
[coreMixins[match[1]]] = match;
|
|
206
237
|
}
|
|
207
238
|
match = regex.exec(data);
|
|
@@ -213,7 +244,7 @@ function getMixinsFromFile(file, data) {
|
|
|
213
244
|
|
|
214
245
|
while (match) {
|
|
215
246
|
[themeMixins[match[1]]] = match;
|
|
216
|
-
if (file.
|
|
247
|
+
if (!file.includes('theme/')) {
|
|
217
248
|
[coreMixins[match[1]]] = match;
|
|
218
249
|
}
|
|
219
250
|
|
|
@@ -235,15 +266,15 @@ async function getVariablesFromFile(file, data) {
|
|
|
235
266
|
let match = regex.exec(data);
|
|
236
267
|
|
|
237
268
|
while (match) {
|
|
238
|
-
|
|
239
269
|
/* check if variable is a background icon, if so replace it directly by the SVG */
|
|
240
|
-
if (match[0].
|
|
241
|
-
|
|
242
|
-
|
|
270
|
+
if (match[0].includes('../../images/backgrounds')) {
|
|
271
|
+
const iconregex =
|
|
272
|
+
/(\$[\w-]+)\s*:\s*"\.\.\/\.\.\/images\/backgrounds\/([\w./-]+)" !default;/g;
|
|
243
273
|
const iconmatch = iconregex.exec(match[0]);
|
|
244
274
|
let svg = (await read(`src/images/backgrounds/${iconmatch[2]}`)).toString();
|
|
245
|
-
svg = `"${svg
|
|
246
|
-
.replace(/
|
|
275
|
+
svg = `"${svg
|
|
276
|
+
.replace(/\r?\n|\r/g, '%0A')
|
|
277
|
+
.replace(/"/g, "'")
|
|
247
278
|
.replace(/\s/g, '%20')
|
|
248
279
|
.replace(/</g, '%3C')
|
|
249
280
|
.replace(/=/g, '%3D')
|
|
@@ -254,11 +285,11 @@ async function getVariablesFromFile(file, data) {
|
|
|
254
285
|
.replace(/%3Csvg/, 'data:image/svg+xml;charset=UTF-8,%3Csvg')}"`;
|
|
255
286
|
|
|
256
287
|
/* add SVG to the coreVar and themeVar only if it is a theme file and make it optional */
|
|
257
|
-
if (file.
|
|
258
|
-
coreVar[iconmatch[1]] = {value: `${svg} !default;`, dependencies: []};
|
|
288
|
+
if (!file.includes('theme/')) {
|
|
289
|
+
coreVar[iconmatch[1]] = { value: `${svg} !default;`, dependencies: [] };
|
|
259
290
|
}
|
|
260
291
|
|
|
261
|
-
themeVar[iconmatch[1]] = {value: `${svg} !default;`, dependencies: []};
|
|
292
|
+
themeVar[iconmatch[1]] = { value: `${svg} !default;`, dependencies: [] };
|
|
262
293
|
|
|
263
294
|
/* add SVG to the variable within the file itself as well */
|
|
264
295
|
const inlineSVG = `${iconmatch[1]}: ${svg} !default;`;
|
|
@@ -266,7 +297,6 @@ async function getVariablesFromFile(file, data) {
|
|
|
266
297
|
|
|
267
298
|
/* when it is not an SVG add the variable and search for its dependencies */
|
|
268
299
|
} else {
|
|
269
|
-
|
|
270
300
|
const variablesRegex = /(\$[\w-]+)/g;
|
|
271
301
|
let variablesMatch = variablesRegex.exec(match[2]);
|
|
272
302
|
const dependencies = [];
|
|
@@ -277,11 +307,14 @@ async function getVariablesFromFile(file, data) {
|
|
|
277
307
|
}
|
|
278
308
|
|
|
279
309
|
/* add variables only to the core Variables if it is not a theme file */
|
|
280
|
-
if (file.
|
|
281
|
-
coreVar[match[1]] = {
|
|
310
|
+
if (!file.includes('theme/')) {
|
|
311
|
+
coreVar[match[1]] = {
|
|
312
|
+
value: `${match[2]};`,
|
|
313
|
+
dependencies: Array.from(dependencies),
|
|
314
|
+
};
|
|
282
315
|
}
|
|
283
316
|
|
|
284
|
-
themeVar[match[1]] = {value: `${match[2]};`, dependencies: Array.from(dependencies)};
|
|
317
|
+
themeVar[match[1]] = { value: `${match[2]};`, dependencies: Array.from(dependencies) };
|
|
285
318
|
}
|
|
286
319
|
|
|
287
320
|
match = regex.exec(data);
|