Compare commits

...

20 Commits

Author SHA1 Message Date
Icedream 2a4a576fad
Merge branch 'master' into header/meta/overlay
gitea/icedream/rekt-theme/header%2Fmeta%2Foverlay This commit looks good Details
2018-07-23 01:53:08 +02:00
Icedream dea7abe861
Add missing !default flag for variable.
gitea/icedream/rekt-theme/master Something is wrong with the build of this commit Details
[ci skip]
2018-07-23 01:45:09 +02:00
Icedream 3025cbd72c
Fix typo.
[ci skip]
2018-07-23 01:44:41 +02:00
Icedream ce5deeb4a1
Upgrade cssnano to 4.0.3.
gitea/icedream/rekt-theme/master This commit looks good Details
2018-07-23 00:02:40 +02:00
Icedream fdc20e72a2
Use advanced preset for cssnano. 2018-07-23 00:02:24 +02:00
Icedream fb63356f10
Use relative paths.
gitea/icedream/rekt-theme/master This commit looks good Details
2018-07-22 23:39:45 +02:00
Icedream c8a9204103
Use image-webpack-loader for image optimization. 2018-07-22 23:39:39 +02:00
Icedream 493cad28d3
Replace whitefog.png with a smaller variant. 2018-07-22 23:37:47 +02:00
Icedream d365ede8c2
Adjust output file paths. 2018-07-22 23:26:43 +02:00
Icedream 816d77c44b
Fix typo. 2018-07-22 23:00:08 +02:00
Icedream 89738ad9b7
Fix subtle smoke opacity effect.
gitea/icedream/rekt-theme/master This commit looks good Details
2018-07-22 22:27:34 +02:00
Icedream de2dfb7506
Decrease animation time and use less extreme transform transition.
gitea/icedream/rekt-theme/master This commit looks good Details
2018-07-22 22:26:03 +02:00
Icedream 23a64947c2
Move hide/show animation of eq sliders to #eq container.
gitea/icedream/rekt-theme/master This commit looks good Details
2018-07-22 22:19:17 +02:00
Icedream d6eca0bde5
Use numeric values for scaling.
gitea/icedream/rekt-theme/master This commit looks good Details
2018-07-22 22:12:17 +02:00
Icedream ffb38aac23
Move hover effect from #eq to EQ page.
gitea/icedream/rekt-theme/master This commit looks good Details
2018-07-22 22:00:50 +02:00
Icedream 09909803c2
Update package-lock.json.
gitea/icedream/rekt-theme/master This commit looks good Details
2018-07-22 21:18:16 +02:00
Icedream 64bd52acdd
Add transparentized Icedream logo for background. 2018-07-22 21:18:08 +02:00
Icedream 69a6985c8d
Adjust EQ elements in page container. 2018-07-22 21:17:53 +02:00
Icedream 13d48d433d
Adjust opacity handling for fog. 2018-07-22 21:17:23 +02:00
Icedream 506865d839
Add code for saturation/colorization. 2018-07-22 21:16:25 +02:00
14 changed files with 1471 additions and 67 deletions

2
package-lock.json generated

File diff suppressed because one or more lines are too long

View File

@ -38,7 +38,7 @@
"case-sensitive-paths-webpack-plugin": "^2.1.2", "case-sensitive-paths-webpack-plugin": "^2.1.2",
"chalk": "^2.4.1", "chalk": "^2.4.1",
"css-loader": "^1.0.0", "css-loader": "^1.0.0",
"cssnano": "^4.0.1", "cssnano": "^4.0.3",
"debug": "^3.1.0", "debug": "^3.1.0",
"eslint": "4", "eslint": "4",
"eslint-config-airbnb-base": "^13.0.0", "eslint-config-airbnb-base": "^13.0.0",
@ -48,6 +48,7 @@
"execa": "^0.10.0", "execa": "^0.10.0",
"file-loader": "^1.1.11", "file-loader": "^1.1.11",
"html-webpack-plugin": "^3.2.0", "html-webpack-plugin": "^3.2.0",
"image-webpack-loader": "^4.3.1",
"jimp": "^0.2.28", "jimp": "^0.2.28",
"mini-css-extract-plugin": "^0.4.1", "mini-css-extract-plugin": "^0.4.1",
"node-sass": "^4.9.2", "node-sass": "^4.9.2",

View File

@ -1,2 +1,3 @@
@import 'header/nav'; @import 'header/nav';
@import 'header/meta'; @import 'header/meta';
@import 'header/player';

View File

@ -1,2 +1,10 @@
@import 'main/page'; @import 'main/page';
@import 'main/smoke'; @import 'main/smoke';
#main {
background-image: url(./images/decay.png);
background-repeat: no-repeat;
background-position: center center;
background-size: 50%;
background-color: #000;
}

3
src/_mixins.scss Normal file
View File

@ -0,0 +1,3 @@
@mixin saturate-from-red($brightness: 250%, $saturate: 45%) {
filter: hue-rotate(220deg) brightness($brightness) saturate($saturate);
}

View File

@ -11,18 +11,20 @@ $icedream-text-color: #EEE !default;
$icedream-extended-line-height: 5vmin !default; $icedream-extended-line-height: 5vmin !default;
// extra features // extra features
$icedream-saturation: true !default;
$icedream-metadata-overlay: true !default; $icedream-metadata-overlay: true !default;
$icedream-metadata-overlay-background-gradient-from: rgba(0, 0, 0, .75) !default; $icedream-metadata-overlay-background-gradient-from: #000 !default;
$icedream-metadata-overlay-background-gradient-to: transparent !default; $icedream-metadata-overlay-background-gradient-to: transparent !default;
$icedream-metadata-prefix: '🎶 Now playing: ' !default; $icedream-metadata-prefix: '🎶 Now playing: ' !default;
$icedream-nav-tab-fix: false !default; $icedream-nav-tab-fix: false !default;
$icedream-nav-bg-fade: true !default; $icedream-nav-bg-fade: true !default;
$icedream-fog-base-opacity: 0.05 !default;
$icedream-fog-bg: true !default; $icedream-fog-bg: true !default;
$icedream-fog-bg-blur: false !default; $icedream-fog-bg-blur: false !default;
$icedream-fog-bg-animated: true !default; $icedream-fog-bg-animated: true !default;
$icedream-fog-bg-pulse-animation-length: 68s !default; $icedream-fog-bg-pulse-animation-length: 68s !default;
$icedream-fog-bg-slide-animation-length: 25s !default; $icedream-fog-bg-slide-animation-length: 25s !default;
$icedream-station-fill-background-color: rgba(255, 255, 255, .1); $icedream-station-fill-background-color: rgba(255, 255, 255, .1) !default;
$rekt-tab-count: 4 !default; $rekt-tab-count: 4 !default;
$rekt-border-color: #AAA !default; $rekt-border-color: #AAA !default;

15
src/header/_player.scss Normal file
View File

@ -0,0 +1,15 @@
// player
#player {
.player_button {
@if $icedream-saturation {
@include saturate-from-red();
}
}
.slider {
.active {
@if $icedream-saturation {
@include saturate-from-red();
}
}
}
}

View File

@ -1,5 +1,7 @@
@charset 'UTF-8'; @charset 'UTF-8';
@import 'mixins';
@import 'variables'; @import 'variables';
@import 'font'; @import 'font';

BIN
src/images/decay.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 328 KiB

After

Width:  |  Height:  |  Size: 59 KiB

View File

@ -17,4 +17,44 @@
&:not(#page_Chat) { &:not(#page_Chat) {
@include icedream-font; @include icedream-font;
} }
&#page_EQ {
#wave {
position: absolute;
left: 0;
right: 0;
top: 25%;
bottom: 25%;
}
#eq {
margin: 20vh;
transition: opacity ease-out .33s, transform ease-out .33s;
opacity: 0;
transform: scale(0.75);
.slider {
background-color: rgba(0, 0, 0, .75);
}
}
#bars {
display: none;
}
&:hover {
#eq {
opacity: 1;
transform: scale(1);
}
}
}
.eq {
@if $icedream-saturation {
@include saturate-from-red();
}
}
#wave {
@if $icedream-saturation {
@include saturate-from-red(300%, 5%);
}
}
} }

View File

@ -8,7 +8,7 @@
overflow-x: hidden; overflow-x: hidden;
&::before { &::before {
opacity: .2; opacity: $icedream-fog-base-opacity;
background-image: url('../images/whitefog.png'); background-image: url('../images/whitefog.png');
background-attachment: fixed; background-attachment: fixed;
content: ' '; // sass-lint:disable-line variable-for-property content: ' '; // sass-lint:disable-line variable-for-property
@ -36,19 +36,19 @@
transform-origin: left; transform-origin: left;
@keyframes icedream-bg-pulse { @keyframes icedream-bg-pulse {
0% { 0% {
opacity: .3; opacity: $icedream-fog-base-opacity - ($icedream-fog-base-opacity * .05);
} }
22% { 22% {
opacity: .2; opacity: $icedream-fog-base-opacity - ($icedream-fog-base-opacity * .12);
} }
54% { 54% {
opacity: .35; opacity: $icedream-fog-base-opacity + ($icedream-fog-base-opacity * .15);
} }
77% { 77% {
opacity: .16; opacity: $icedream-fog-base-opacity + ($icedream-fog-base-opacity * .5);
} }
100% { 100% {
opacity: .3; opacity: $icedream-fog-base-opacity - ($icedream-fog-base-opacity * .05);
} }
} }
@keyframes icedream-bg-slide { @keyframes icedream-bg-slide {

View File

@ -40,6 +40,8 @@ const {
ModuleConcatenationPlugin, ModuleConcatenationPlugin,
} = optimize; } = optimize;
const dj = 'icedream';
export default (options, { mode }) => { export default (options, { mode }) => {
const environment = new Environment({ const environment = new Environment({
// @HACK // @HACK
@ -59,39 +61,62 @@ export default (options, { mode }) => {
docker, docker,
} = environment; } = environment;
const baseOutputFilename = development const baseOutputFilepath = 'static/theme/[type]/[filename]';
? 'assets/dev/[name].dev.[ext]' const filenames = {
// Always use a hash (in production) to prevent files with the same name causing issues css: '[name].[ext]',
: 'assets/prod/[chunkhash:2]/[name].[chunkhash:8].[ext]'; default: development
? '[name].dev.[ext]'
// Always use a hash (in production) to prevent files with the same name causing issues
: '[name].[chunkhash:8].[ext]',
};
const webpackChunkFilename = baseOutputFilename function replaceField(string, name, value) {
.replace(/\[ext(.*?)\]/g, 'js'); const retval = string.replace(new RegExp(`\\[${name}(.*?)\\]`), value);
const webpackOutputFilename = webpackChunkFilename; debug('replaceField:', { args: { string, name, value } }, string, '=>', retval);
return retval;
}
const assetOutputFilename = baseOutputFilename function getOutputFilename(type) {
.replace(/\[chunkhash(.*?)\]/g, '[hash$1]'); let filename = baseOutputFilepath;
switch (type) {
case 'css':
filename = replaceField(filename, 'type', type);
break;
default:
filename = replaceField(filename, 'type', `${type}/${dj}`);
break;
}
filename = replaceField(filename, 'filename', filenames[type] || filenames.default);
return filename;
}
const cssOutputFileName = baseOutputFilename function getAssetOutputFilename(type) {
let filename = getOutputFilename(type);
filename = replaceField(filename, 'chunkhash', '[hash$1]');
return filename;
}
const cssOutputFileName = getOutputFilename('css')
.replace(/\[ext(.*?)\]/g, 'css'); .replace(/\[ext(.*?)\]/g, 'css');
// .replace(/\[chunkhash(.*?)\]/g, '[contenthash$1]'); // .replace(/\[chunkhash(.*?)\]/g, '[contenthash$1]');
const cssChunkOutputFileName = baseOutputFilename const cssChunkOutputFileName = getOutputFilename('css')
.replace(/\[chunkhash(.*?)\]/g, '[id$1]') .replace(/\[chunkhash(.*?)\]/g, '[id$1]')
.replace(/\[ext(.*?)\]/g, 'css'); .replace(/\[ext(.*?)\]/g, 'css');
// const cssOutputRebasePath = `${slash(path.relative(path.dirname(cssOutputFileName), ''))}/`; // const cssOutputRebasePath = `${slash(path.relative(path.dirname(cssOutputFileName), ''))}/`;
const cssOutputRebasePath = '/'; const cssOutputRebasePath = '../../../';
// Default options for file-loader // Default options for file-loader
const fileLoaderOptions = { const getFileLoaderOptions = type => ({
name: assetOutputFilename, name: getAssetOutputFilename(type),
publicPath: cssOutputRebasePath, publicPath: cssOutputRebasePath,
}; });
// Default options for url-loader // Default options for url-loader
const urlLoaderOptions = { const getUrlLoaderOptions = type => ({
...fileLoaderOptions, ...getFileLoaderOptions(type),
// limit: 1, // Don't inline anything (but empty files) by default // limit: 1, // Don't inline anything (but empty files) by default
limit: 4 * 1024, limit: 4 * 1024,
}; });
const config = { const config = {
name: 'frontend', name: 'frontend',
@ -168,22 +193,57 @@ export default (options, { mode }) => {
/\.jpe?g$/i, // jpeg /\.jpe?g$/i, // jpeg
].map(test => ({ ].map(test => ({
test, test,
loader: 'url-loader', use: [
options: { {
...urlLoaderOptions, loader: 'url-loader',
// fallback: 'responsive-loader', options: {
}, ...getUrlLoaderOptions('img'),
// fallback: 'responsive-loader',
},
},
{
loader: 'image-webpack-loader',
options: {
mozjpeg: {
progressive: true,
quality: 80,
},
optipng: {
enabled: true,
optimizationLevel: 7,
},
pngquant: {
enabled: false,
quality: '65-85',
speed: 2,
strip: true,
},
gifsicle: {
interlaced: false,
},
disable: development,
},
},
],
})), })),
...[ ...[
/\.(mp4|ogg|webm)$/i, // video /\.(mp4|ogg|webm)$/i, // video
/\.(eot|otf|ttf|woff|woff2)$/i, // fonts
/\.(wav|mp3|m4a|aac|oga)$/i, // audio /\.(wav|mp3|m4a|aac|oga)$/i, // audio
].map(test => ({ ].map(test => ({
test, test,
loader: 'url-loader', loader: 'url-loader',
options: urlLoaderOptions, options: getUrlLoaderOptions('media'),
})), })),
...[
/\.(eot|otf|ttf|woff|woff2)$/i, // fonts
].map(test => ({
test,
loader: 'url-loader',
options: getUrlLoaderOptions('font'),
})),
{ {
test: /\.css$/, test: /\.css$/,
use: environment.styleLoaders(), use: environment.styleLoaders(),
@ -205,8 +265,8 @@ export default (options, { mode }) => {
}, },
output: { output: {
filename: webpackOutputFilename, filename: replaceField(getOutputFilename('js'), 'ext', 'js'),
chunkFilename: webpackChunkFilename, chunkFilename: replaceField(getOutputFilename('js'), 'ext', 'js'),
path: path.join(__dirname, 'dist'), path: path.join(__dirname, 'dist'),
publicPath: '', publicPath: '',
globalObject: 'this', // https://github.com/webpack-contrib/worker-loader/issues/142#issuecomment-385764803 globalObject: 'this', // https://github.com/webpack-contrib/worker-loader/issues/142#issuecomment-385764803
@ -325,9 +385,9 @@ export default (options, { mode }) => {
sourceMap: true, sourceMap: true,
}), }),
new OptimizeCssAssetsPlugin({ new OptimizeCssAssetsPlugin({
assetNameRegExp: /\.css$/gi,
cssProcessor: cssnano, cssProcessor: cssnano,
cssProcessorOptions: { cssProcessorOptions: {
preset: 'advanced',
parser: postcssSafeParser, parser: postcssSafeParser,
discardComments: { removeAll: true }, discardComments: { removeAll: true },
}, },
@ -337,7 +397,7 @@ export default (options, { mode }) => {
}, },
devtool: server ? 'cheap-module-source-map' : 'source-map', devtool: server ? 'cheap-module-source-map' : 'source-map',
entry: { entry: {
app: [ [dj]: [
path.join(__dirname, 'src'), path.join(__dirname, 'src'),
], ],
}, },

1328
yarn.lock

File diff suppressed because it is too large Load Diff