diff --git a/js/__mocks__/fileMock.js b/js/__mocks__/fileMock.js
new file mode 100644
index 00000000..e69de29b
diff --git a/js/actionCreators.js b/js/actionCreators.js
index fa94a67e..3c423825 100644
--- a/js/actionCreators.js
+++ b/js/actionCreators.js
@@ -1,4 +1,3 @@
-import { cdnUrl } from "../package.json";
import { parser, creator } from "winamp-eqf";
import MyFile from "./myFile";
import skinParser from "./skinParser";
@@ -157,11 +156,6 @@ export function setSkinFromUrl(url) {
return setSkinFromFile(skinFile);
}
-export function setSkinFromFilename(filename) {
- const url = `${cdnUrl}/skins/${filename}`;
- return setSkinFromUrl(url);
-}
-
export function openFileDialog(fileInput) {
fileInput.click();
// No reducers currently respond to this.
diff --git a/js/components/MainWindow/MainContextMenu.js b/js/components/MainWindow/MainContextMenu.js
index d47b6021..5bfe0e11 100644
--- a/js/components/MainWindow/MainContextMenu.js
+++ b/js/components/MainWindow/MainContextMenu.js
@@ -1,19 +1,21 @@
import React from "react";
import { connect } from "react-redux";
-import {
- close,
- setSkinFromFilename,
- openFileDialog
-} from "../../actionCreators";
+import { close, setSkinFromUrl, openFileDialog } from "../../actionCreators";
import { ContextMenu, Hr, Node, Parent, LinkNode } from "../ContextMenu";
+import base from "../../../skins/base-2.91.wsz";
+import osx from "../../../skins/MacOSXAqua1-5.wsz";
+import topaz from "../../../skins/TopazAmp1-2.wsz";
+import visor from "../../../skins/Vizor1-01.wsz";
+import xmms from "../../../skins/XMMS-Turquoise.wsz";
+import zaxon from "../../../skins/ZaxonRemake1-0.wsz";
const SKINS = [
- { file: "base-2.91.wsz", name: "" },
- { file: "MacOSXAqua1-5.wsz", name: "Mac OSX v1.5 (Aqua)" },
- { file: "TopazAmp1-2.wsz", name: "TopazAmp" },
- { file: "Vizor1-01.wsz", name: "Vizor" },
- { file: "XMMS-Turquoise.wsz", name: "XMMS Turquoise " },
- { file: "ZaxonRemake1-0.wsz", name: "Zaxon Remake" }
+ { url: base, name: "" },
+ { url: osx, name: "Mac OSX v1.5 (Aqua)" },
+ { url: topaz, name: "TopazAmp" },
+ { url: visor, name: "Vizor" },
+ { url: xmms, name: "XMMS Turquoise " },
+ { url: zaxon, name: "Zaxon Remake" }
];
const MainContextMenu = props => (
@@ -34,8 +36,8 @@ const MainContextMenu = props => (
{SKINS.map(skin => (
props.setSkin(skin.url)}
label={skin.name}
/>
))}
@@ -48,7 +50,7 @@ const MainContextMenu = props => (
const mapDispatchToProps = (dispatch, ownProps) => ({
close: () => dispatch(close()),
openFileDialog: () => dispatch(openFileDialog(ownProps.fileInput)),
- setSkin: filename => dispatch(setSkinFromFilename(filename))
+ setSkin: url => dispatch(setSkinFromUrl(url))
});
export default connect(null, mapDispatchToProps)(MainContextMenu);
diff --git a/js/config.js b/js/config.js
index 26a7a610..8fef1f46 100644
--- a/js/config.js
+++ b/js/config.js
@@ -1,4 +1,5 @@
-import { cdnUrl } from "../package.json";
+import skin from "../skins/base-2.91.wsz";
+import audio from "../mp3/llama-2.91.mp3";
const { hash } = window.location;
let config = {};
@@ -10,12 +11,9 @@ if (hash) {
}
}
-const or = (value, fallback) => (value === undefined ? fallback : value);
-
-const assetBase = process.env.NODE_ENV === "production" ? cdnUrl : "";
// Turn on the incomplete playlist window
-export const skinUrl = or(config.skinUrl, `${assetBase}skins/base-2.91.wsz`);
-export const audioUrl = or(config.audioUrl, `${assetBase}mp3/llama-2.91.mp3`);
+export const skinUrl = skin;
+export const audioUrl = audio;
export const playlistEnabled = config.playlist || false;
export const noMarquee = config.noMarquee || false;
export const hideAbout = config.hideAbout || false;
diff --git a/package.json b/package.json
index c14e4f42..7676d1ab 100644
--- a/package.json
+++ b/package.json
@@ -43,7 +43,7 @@
"eslint-config-prettier": "^2.3.0",
"eslint-plugin-prettier": "^2.2.0",
"eslint-plugin-react": "7.3.0",
- "file-loader": "^0.11.0",
+ "file-loader": "^1.1.5",
"gzip-size-cli": "^2.0.0",
"jest-cli": "^21.0.2",
"react-test-renderer": "16.0.0-rc.2",
@@ -78,7 +78,9 @@
"jest": {
"testRegex": "\\.test\\.js$",
"moduleNameMapper": {
- "\\.css$": "/js/__mocks__/styleMock.js"
+ "\\.css$": "/js/__mocks__/styleMock.js",
+ "\\.wsz$": "/js/__mocks__/fileMock.js",
+ "\\.mp3$": "/js/__mocks__/fileMock.js"
}
}
}
diff --git a/skins/Skinner_Atlas.wsz b/skins/Skinner_Atlas.wsz
new file mode 100644
index 00000000..fe7424cf
Binary files /dev/null and b/skins/Skinner_Atlas.wsz differ
diff --git a/webpack.config.js b/webpack.config.js
index 72c13c46..59bf2eaf 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -25,6 +25,18 @@ module.exports = {
use: {
loader: "babel-loader"
}
+ },
+ {
+ test: /\.(wsz|mp3)$/,
+ use: [
+ {
+ loader: "file-loader",
+ options: {
+ emitFile: true,
+ name: "[path][name]-[hash].[ext]"
+ }
+ }
+ ]
}
],
noParse: [/jszip\.js$/]
diff --git a/webpack.production.config.js b/webpack.production.config.js
index d02ec154..be5b12a5 100644
--- a/webpack.production.config.js
+++ b/webpack.production.config.js
@@ -1,3 +1,4 @@
+const { cdnUrl } = require("./package.json");
const config = require("./webpack.config");
const webpack = require("webpack");
@@ -12,6 +13,8 @@ config.plugins = (config.plugins || []).concat([
})
]);
+config.output.publicPath = `${cdnUrl}built/`;
+
config.entry.winamp.unshift("./js/googleAnalytics.min.js");
module.exports = config;
diff --git a/yarn.lock b/yarn.lock
index a5b60c7c..dca64bf0 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2324,11 +2324,12 @@ file-entry-cache@^2.0.0:
flat-cache "^1.2.1"
object-assign "^4.0.1"
-file-loader@^0.11.0:
- version "0.11.2"
- resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.11.2.tgz#4ff1df28af38719a6098093b88c82c71d1794a34"
+file-loader@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.5.tgz#91c25b6b6fbe56dae99f10a425fd64933b5c9daa"
dependencies:
loader-utils "^1.0.2"
+ schema-utils "^0.3.0"
filename-regex@^2.0.0:
version "2.0.0"