/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 1);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports) {
var g;
// This works in non-strict mode
g = (function() {
return this;
})();
try {
// This works if eval is allowed (see CSP)
g = g || Function("return this")() || (1,eval)("this");
} catch(e) {
// This works if the window reference is available
if(typeof window === "object")
g = window;
}
// g can still be undefined, but nothing to do about it...
// We return undefined, instead of nothing here, so it's
// easier to handle this case. if(!global) { ...}
module.exports = g;
/***/ }),
/* 1 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_winamp2_js__ = __webpack_require__(2);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_winamp2_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_winamp2_js__);
new __WEBPACK_IMPORTED_MODULE_0_winamp2_js___default.a({
initialTracks: [
{
metaData: {
artist: "DJ Mike Llama",
title: "Llama Whippin' Intro"
},
url:
"https://cdn.rawgit.com/captbaritone/winamp2-js/43434d82/mp3/llama-2.91.mp3"
}
],
initialSkin: {
url:
"https://cdn.rawgit.com/captbaritone/winamp2-js/43434d82/skins/base-2.91.wsz"
}
}).renderWhenReady(document.getElementById("app"));
/***/ }),
/* 2 */
/***/ (function(module, exports, __webpack_require__) {
/* WEBPACK VAR INJECTION */(function(Buffer, global) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var require;var require;(function webpackUniversalModuleDefinition(root, factory) {
if(true)
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else if(typeof exports === 'object')
exports["winamp2js"] = factory();
else
root["winamp2js"] = factory();
})(typeof self !== 'undefined' ? self : this, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 135);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
if (true) {
module.exports = __webpack_require__(153);
} else {
module.exports = require('./cjs/react.development.js');
}
/***/ }),
/* 1 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__components_Provider__ = __webpack_require__(163);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__components_connectAdvanced__ = __webpack_require__(106);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__connect_connect__ = __webpack_require__(170);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Provider", function() { return __WEBPACK_IMPORTED_MODULE_0__components_Provider__["b"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "createProvider", function() { return __WEBPACK_IMPORTED_MODULE_0__components_Provider__["a"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "connectAdvanced", function() { return __WEBPACK_IMPORTED_MODULE_1__components_connectAdvanced__["a"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "connect", function() { return __WEBPACK_IMPORTED_MODULE_2__connect_connect__["a"]; });
/***/ }),
/* 2 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _getIterator2 = __webpack_require__(31);
var _getIterator3 = _interopRequireDefault(_getIterator2);
var _keys = __webpack_require__(24);
var _keys2 = _interopRequireDefault(_keys);
var _from = __webpack_require__(60);
var _from2 = _interopRequireDefault(_from);
var _regenerator = __webpack_require__(25);
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = __webpack_require__(26);
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
exports.play = play;
exports.pause = pause;
exports.stop = stop;
exports.nextN = nextN;
exports.next = next;
exports.previous = previous;
exports.seekForward = seekForward;
exports.seekBackward = seekBackward;
exports.close = close;
exports.setVolume = setVolume;
exports.adjustVolume = adjustVolume;
exports.scrollVolume = scrollVolume;
exports.setBalance = setBalance;
exports.toggleRepeat = toggleRepeat;
exports.toggleShuffle = toggleShuffle;
exports.addTracksFromReferences = addTracksFromReferences;
exports.loadFilesFromReferences = loadFilesFromReferences;
exports.fetchMediaDuration = fetchMediaDuration;
exports.loadMediaFiles = loadMediaFiles;
exports.loadMediaFile = loadMediaFile;
exports.fetchMediaTags = fetchMediaTags;
exports.setSkinFromArrayBuffer = setSkinFromArrayBuffer;
exports.setSkinFromFileReference = setSkinFromFileReference;
exports.setSkinFromUrl = setSkinFromUrl;
exports.openEqfFileDialog = openEqfFileDialog;
exports.openMediaFileDialog = openMediaFileDialog;
exports.openSkinFileDialog = openSkinFileDialog;
exports.setEqBand = setEqBand;
exports.setEqToMax = setEqToMax;
exports.setEqToMid = setEqToMid;
exports.setEqToMin = setEqToMin;
exports.setPreamp = setPreamp;
exports.toggleEq = toggleEq;
exports.downloadPreset = downloadPreset;
exports.toggleDoubleSizeMode = toggleDoubleSizeMode;
exports.toggleEqualizerShadeMode = toggleEqualizerShadeMode;
exports.toggleMainWindowShadeMode = toggleMainWindowShadeMode;
exports.togglePlaylistShadeMode = togglePlaylistShadeMode;
exports.closeEqualizerWindow = closeEqualizerWindow;
exports.cropPlaylist = cropPlaylist;
exports.removeSelectedTracks = removeSelectedTracks;
exports.removeAllTracks = removeAllTracks;
exports.reverseList = reverseList;
exports.randomizeList = randomizeList;
exports.sortListByTitle = sortListByTitle;
exports.toggleVisualizerStyle = toggleVisualizerStyle;
exports.setPlaylistScrollPosition = setPlaylistScrollPosition;
exports.setPlaylistSize = setPlaylistSize;
exports.scrollNTracks = scrollNTracks;
exports.scrollPlaylistByDelta = scrollPlaylistByDelta;
exports.scrollUpFourTracks = scrollUpFourTracks;
exports.scrollDownFourTracks = scrollDownFourTracks;
exports.dragSelected = dragSelected;
exports.downloadHtmlPlaylist = downloadHtmlPlaylist;
exports.updateWindowPositions = updateWindowPositions;
var _winampEqf = __webpack_require__(227);
var _fileUtils = __webpack_require__(84);
var _skinParser = __webpack_require__(230);
var _skinParser2 = _interopRequireDefault(_skinParser);
var _constants = __webpack_require__(8);
var _selectors = __webpack_require__(18);
var _utils = __webpack_require__(13);
var _actionTypes = __webpack_require__(3);
var _loadQueue = __webpack_require__(243);
var _loadQueue2 = _interopRequireDefault(_loadQueue);
var _resizeUtils = __webpack_require__(121);
var _snapUtils = __webpack_require__(123);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// Lower is better
var DURATION_VISIBLE_PRIORITY = 5;
var META_DATA_VISIBLE_PRIORITY = 10;
var DURATION_PRIORITY = 15;
var META_DATA_PRIORITY = 20;
var loadQueue = new _loadQueue2.default({ threads: 4 });
function playRandomTrack() {
return function (dispatch, getState) {
var _getState = getState(),
_getState$playlist = _getState.playlist,
trackOrder = _getState$playlist.trackOrder,
currentTrack = _getState$playlist.currentTrack;
var nextId = void 0;
do {
nextId = trackOrder[Math.floor(trackOrder.length * Math.random())];
} while (nextId === currentTrack && trackOrder.length > 1);
// TODO: Sigh... Technically, we should detect if we are looping only repeat if we are.
// I think this would require pre-computing the "random" order of a playlist.
dispatch({ type: _actionTypes.PLAY_TRACK, id: nextId });
};
}
function play() {
return function (dispatch, getState) {
var state = getState();
if (state.media.status === "STOPPED" && state.playlist.curentTrack == null && state.playlist.trackOrder.length === 0) {
dispatch(openMediaFileDialog());
} else {
dispatch({ type: _actionTypes.PLAY });
}
};
}
function pause() {
return function (dispatch, getState) {
var status = getState().media.status;
dispatch({ type: status === "PLAYING" ? _actionTypes.PAUSE : _actionTypes.PLAY });
};
}
function stop() {
return { type: _actionTypes.STOP };
}
function nextN(n) {
return function (dispatch, getState) {
var state = getState();
if (state.media.shuffle) {
dispatch(playRandomTrack());
return;
}
var nextTrackId = (0, _selectors.nextTrack)(state, n);
if (nextTrackId == null) {
return;
}
dispatch({ type: _actionTypes.PLAY_TRACK, id: nextTrackId });
};
}
function next() {
return nextN(1);
}
function previous() {
return nextN(-1);
}
function seekForward(seconds) {
return function (dispatch, getState) {
var _getState2 = getState(),
media = _getState2.media;
var timeElapsed = media.timeElapsed,
length = media.length;
var newTimeElapsed = timeElapsed + seconds;
var newPercentComplete = newTimeElapsed / length;
dispatch({ type: _actionTypes.SEEK_TO_PERCENT_COMPLETE, percent: newPercentComplete });
};
}
function seekBackward(seconds) {
return seekForward(-seconds);
}
function close() {
return function (dispatch) {
dispatch({ type: _actionTypes.STOP });
dispatch({ type: _actionTypes.CLOSE_WINAMP });
};
}
function setVolume(volume) {
return {
type: _actionTypes.SET_VOLUME,
volume: (0, _utils.clamp)(volume, 0, 100)
};
}
function adjustVolume(volumeDiff) {
return function (dispatch, getState) {
var currentVolume = getState().media.volume;
return dispatch(setVolume(currentVolume + volumeDiff));
};
}
function scrollVolume(e) {
e.preventDefault();
return function (dispatch, getState) {
var currentVolume = getState().media.volume;
// Using pixels as percentage difference here is a bit arbirary, but... oh well.
return dispatch(setVolume(currentVolume + e.deltaY));
};
}
function setBalance(balance) {
balance = (0, _utils.clamp)(balance, -100, 100);
// The balance clips to the center
if (Math.abs(balance) < 25) {
balance = 0;
}
return {
type: _actionTypes.SET_BALANCE,
balance: balance
};
}
function toggleRepeat() {
return { type: _actionTypes.TOGGLE_REPEAT };
}
function toggleShuffle() {
return { type: _actionTypes.TOGGLE_SHUFFLE };
}
function setEqFromFileReference(fileReference) {
var _this = this;
return function () {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(dispatch) {
var arrayBuffer, eqf, preset;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return (0, _fileUtils.genArrayBufferFromFileReference)(fileReference);
case 2:
arrayBuffer = _context.sent;
eqf = (0, _winampEqf.parser)(arrayBuffer);
preset = eqf.presets[0];
dispatch(setPreamp((0, _utils.normalize)(preset.preamp)));
_constants.BANDS.forEach(function (band) {
dispatch(setEqBand(band, (0, _utils.normalize)(preset["hz" + band])));
});
case 7:
case "end":
return _context.stop();
}
}
}, _callee, _this);
}));
return function (_x) {
return _ref.apply(this, arguments);
};
}();
}
function addTracksFromReferences(fileReferences, loadStyle, atIndex) {
var tracks = (0, _from2.default)(fileReferences).map(function (file) {
return {
blob: file,
defaultName: file.name
};
});
return loadMediaFiles(tracks, loadStyle, atIndex);
}
var SKIN_FILENAME_MATCHER = new RegExp("(wsz|zip)$", "i");
var EQF_FILENAME_MATCHER = new RegExp("eqf$", "i");
function loadFilesFromReferences(fileReferences) {
var loadStyle = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _constants.LOAD_STYLE.PLAY;
var atIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
return function (dispatch) {
if (fileReferences.length < 1) {
return;
} else if (fileReferences.length === 1) {
var fileReference = fileReferences[0];
if (SKIN_FILENAME_MATCHER.test(fileReference.name)) {
dispatch(setSkinFromFileReference(fileReference));
return;
} else if (EQF_FILENAME_MATCHER.test(fileReference.name)) {
dispatch(setEqFromFileReference(fileReference));
return;
}
}
dispatch(addTracksFromReferences(fileReferences, loadStyle, atIndex));
};
}
function fetchMediaDuration(url, id) {
return function (dispatch, getState) {
loadQueue.push(function () {
return (0, _fileUtils.genMediaDuration)(url).then(function (duration) {
return dispatch({ type: _actionTypes.SET_MEDIA_DURATION, duration: duration, id: id });
}).catch(function () {
// TODO: Should we update the state to indicate that we don't know the length?
});
}, function () {
var trackIsVisible = (0, _selectors.getTrackIsVisibleFunction)(getState());
return trackIsVisible(id) ? DURATION_VISIBLE_PRIORITY : DURATION_PRIORITY;
});
};
}
var counter = 0;
function uniqueId() {
return counter++;
}
function loadMediaFiles(tracks) {
var loadStyle = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
var atIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
return function (dispatch) {
if (loadStyle === _constants.LOAD_STYLE.PLAY) {
// I'm the worst. It just so happens that in every case that we autoPlay,
// we should also clear all tracks.
dispatch(removeAllTracks());
}
tracks.forEach(function (track, i) {
var priority = i === 0 && loadStyle != null ? loadStyle : null;
dispatch(loadMediaFile(track, priority, atIndex + i));
});
};
}
function loadMediaFile(track) {
var priority = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
var atIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
return function (dispatch) {
var id = uniqueId();
var url = track.url,
blob = track.blob,
defaultName = track.defaultName,
metaData = track.metaData,
duration = track.duration;
var canonicalUrl = url;
if (canonicalUrl == null) {
if (blob == null) {
throw new Error("Expected track to have either a blob or a url");
}
canonicalUrl = URL.createObjectURL(track.blob);
}
dispatch({
type: _actionTypes.ADD_TRACK_FROM_URL,
url: canonicalUrl,
defaultName: defaultName,
id: id,
atIndex: atIndex
});
switch (priority) {
case _constants.LOAD_STYLE.BUFFER:
dispatch({ type: _actionTypes.BUFFER_TRACK, id: id });
break;
case _constants.LOAD_STYLE.PLAY:
dispatch({ type: _actionTypes.PLAY_TRACK, id: id });
break;
default:
// If we're not going to load this right away,
// we should set duration on our own
if (duration != null) {
dispatch({ type: _actionTypes.SET_MEDIA_DURATION, duration: duration, id: id });
} else {
dispatch(fetchMediaDuration(canonicalUrl, id));
}
}
if (metaData != null) {
var artist = metaData.artist,
title = metaData.title;
dispatch({ type: _actionTypes.SET_MEDIA_TAGS, artist: artist, title: title, id: id });
} else if (blob != null) {
// Blobs can be loaded quickly
dispatch(fetchMediaTags(blob, id));
} else {
dispatch(queueFetchingMediaTags(id));
}
};
}
function queueFetchingMediaTags(id) {
return function (dispatch, getState) {
var track = (0, _selectors.getTracks)(getState())[id];
return loadQueue.push(function () {
return dispatch(fetchMediaTags(track.url, id));
}, function () {
var trackIsVisible = (0, _selectors.getTrackIsVisibleFunction)(getState());
return trackIsVisible(track.id) ? META_DATA_VISIBLE_PRIORITY : META_DATA_PRIORITY;
});
};
}
function fetchMediaTags(file, id) {
return function (dispatch) {
dispatch({ type: _actionTypes.MEDIA_TAG_REQUEST_INITIALIZED, id: id });
return (0, _fileUtils.genMediaTags)(file).then(function (data) {
var _data$tags = data.tags,
artist = _data$tags.artist,
title = _data$tags.title;
// There's more data here, but we don't have a use for it yet:
// https://github.com/aadsm/jsmediatags#shortcuts
dispatch({ type: _actionTypes.SET_MEDIA_TAGS, artist: artist, title: title, id: id });
}).catch(function () {
dispatch({ type: _actionTypes.MEDIA_TAG_REQUEST_FAILED, id: id });
});
};
}
function setSkinFromArrayBuffer(arrayBuffer) {
var _this2 = this;
return function () {
var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(dispatch) {
var skinData;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_context2.next = 2;
return (0, _skinParser2.default)(arrayBuffer);
case 2:
skinData = _context2.sent;
dispatch({
type: _actionTypes.SET_SKIN_DATA,
skinImages: skinData.images,
skinColors: skinData.colors,
skinPlaylistStyle: skinData.playlistStyle,
skinCursors: skinData.cursors,
skinRegion: skinData.region,
skinGenLetterWidths: skinData.genLetterWidths
});
case 4:
case "end":
return _context2.stop();
}
}
}, _callee2, _this2);
}));
return function (_x8) {
return _ref2.apply(this, arguments);
};
}();
}
function setSkinFromFileReference(skinFileReference) {
var _this3 = this;
return function () {
var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(dispatch) {
var arrayBuffer;
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_context3.next = 2;
return (0, _fileUtils.genArrayBufferFromFileReference)(skinFileReference);
case 2:
arrayBuffer = _context3.sent;
dispatch(setSkinFromArrayBuffer(arrayBuffer));
case 4:
case "end":
return _context3.stop();
}
}
}, _callee3, _this3);
}));
return function (_x9) {
return _ref3.apply(this, arguments);
};
}();
}
function setSkinFromUrl(url) {
var _this4 = this;
return function () {
var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(dispatch) {
var arrayBuffer;
return _regenerator2.default.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
_context4.next = 2;
return (0, _fileUtils.genArrayBufferFromUrl)(url);
case 2:
arrayBuffer = _context4.sent;
dispatch(setSkinFromArrayBuffer(arrayBuffer));
case 4:
case "end":
return _context4.stop();
}
}
}, _callee4, _this4);
}));
return function (_x10) {
return _ref4.apply(this, arguments);
};
}();
}
// This function is private, since Winamp consumers can provide means for
// opening files via other methods. Only use the file type specific
// versions below, since they can defer to the user-defined behavior.
function _openFileDialog(accept) {
var _this5 = this;
return function () {
var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(dispatch) {
var fileReferences;
return _regenerator2.default.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
_context5.next = 2;
return (0, _fileUtils.promptForFileReferences)({ accept: accept });
case 2:
fileReferences = _context5.sent;
dispatch(loadFilesFromReferences(fileReferences));
case 4:
case "end":
return _context5.stop();
}
}
}, _callee5, _this5);
}));
return function (_x11) {
return _ref5.apply(this, arguments);
};
}();
}
function openEqfFileDialog() {
return _openFileDialog(".eqf");
}
function openMediaFileDialog() {
return _openFileDialog();
}
function openSkinFileDialog() {
return _openFileDialog(".zip, .wsz");
}
function setEqBand(band, value) {
return { type: _actionTypes.SET_BAND_VALUE, band: band, value: value };
}
function _setEqTo(value) {
return function (dispatch) {
(0, _keys2.default)(_constants.BANDS).forEach(function (key) {
var band = _constants.BANDS[key];
dispatch({
type: _actionTypes.SET_BAND_VALUE,
value: value,
band: band
});
});
};
}
function setEqToMax() {
return _setEqTo(100);
}
function setEqToMid() {
return _setEqTo(50);
}
function setEqToMin() {
return _setEqTo(0);
}
function setPreamp(value) {
return {
type: _actionTypes.SET_BAND_VALUE,
band: "preamp",
value: value
};
}
function toggleEq() {
return function (dispatch, getState) {
var type = getState().equalizer.on ? _actionTypes.SET_EQ_OFF : _actionTypes.SET_EQ_ON;
dispatch({ type: type });
};
}
function downloadPreset() {
return function (dispatch, getState) {
var state = getState();
var data = (0, _selectors.getEqfData)(state);
var arrayBuffer = (0, _winampEqf.creator)(data);
var base64 = (0, _utils.base64FromArrayBuffer)(arrayBuffer);
var dataURI = "data:application/zip;base64," + base64;
(0, _utils.downloadURI)(dataURI, "entry.eqf");
};
}
// Dispatch an action and, if needed rearrange the windows to preserve
// the existing edge relationship.
//
// Works by checking the edges before the action is dispatched. Then,
// after disatching, calculating what position change would be required
// to restore those relationships.
function withWindowGraphIntegrity(action) {
return function (dispatch, getState) {
var state = getState();
var graph = (0, _selectors.getWindowGraph)(state);
var originalSizes = (0, _selectors.getWindowSizes)(state);
dispatch(action);
var newSizes = (0, _selectors.getWindowSizes)(getState());
var sizeDiff = {};
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = (0, _getIterator3.default)((0, _keys2.default)(newSizes)), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var window = _step.value;
var original = originalSizes[window];
var current = newSizes[window];
sizeDiff[window] = {
height: current.height - original.height,
width: current.width - original.width
};
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
var positionDiff = (0, _resizeUtils.getPositionDiff)(graph, sizeDiff);
var windowPositions = (0, _selectors.getWindowPositions)(state);
var newPositions = {};
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = (0, _getIterator3.default)((0, _keys2.default)(windowPositions)), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var key = _step2.value;
newPositions[key] = (0, _snapUtils.applyDiff)(windowPositions[key], positionDiff[key]);
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
dispatch(updateWindowPositions(newPositions));
};
}
function toggleDoubleSizeMode() {
return withWindowGraphIntegrity({ type: _actionTypes.TOGGLE_DOUBLESIZE_MODE });
}
function toggleEqualizerShadeMode() {
return withWindowGraphIntegrity({ type: _actionTypes.TOGGLE_EQUALIZER_SHADE_MODE });
}
function toggleMainWindowShadeMode() {
return withWindowGraphIntegrity({ type: _actionTypes.TOGGLE_MAIN_SHADE_MODE });
}
function togglePlaylistShadeMode() {
return withWindowGraphIntegrity({ type: _actionTypes.TOGGLE_PLAYLIST_SHADE_MODE });
}
function closeEqualizerWindow() {
return { type: _actionTypes.CLOSE_EQUALIZER_WINDOW };
}
function cropPlaylist() {
return function (dispatch, getState) {
var state = getState();
if ((0, _selectors.getSelectedTrackObjects)(state).length === 0) {
return;
}
var _getState3 = getState(),
tracks = _getState3.playlist.tracks;
dispatch({
type: _actionTypes.REMOVE_TRACKS,
ids: (0, _keys2.default)(tracks).filter(function (id) {
return !tracks[id].selected;
})
});
};
}
function removeSelectedTracks() {
return function (dispatch, getState) {
var _getState4 = getState(),
tracks = _getState4.playlist.tracks;
dispatch({
type: _actionTypes.REMOVE_TRACKS,
ids: (0, _keys2.default)(tracks).filter(function (id) {
return tracks[id].selected;
})
});
};
}
function removeAllTracks() {
return { type: _actionTypes.REMOVE_ALL_TRACKS };
}
function reverseList() {
return { type: _actionTypes.REVERSE_LIST };
}
function randomizeList() {
return { type: _actionTypes.RANDOMIZE_LIST };
}
function sortListByTitle() {
return function (dispatch, getState) {
var state = getState();
var trackOrder = (0, _utils.sort)(state.playlist.trackOrder, function (i) {
return ("" + state.playlist.tracks[i].title).toLowerCase();
});
return dispatch({ type: _actionTypes.SET_TRACK_ORDER, trackOrder: trackOrder });
};
}
function toggleVisualizerStyle() {
return { type: _actionTypes.TOGGLE_VISUALIZER_STYLE };
}
function setPlaylistScrollPosition(position) {
return { type: _actionTypes.SET_PLAYLIST_SCROLL_POSITION, position: position };
}
function setPlaylistSize(size) {
return { type: _actionTypes.PLAYLIST_SIZE_CHANGED, size: size };
}
function scrollNTracks(n) {
return function (dispatch, getState) {
var state = getState();
var overflow = (0, _selectors.getOverflowTrackCount)(state);
var currentOffset = (0, _selectors.getScrollOffset)(state);
var position = overflow ? (0, _utils.clamp)((currentOffset + n) / overflow, 0, 1) : 0;
return dispatch({
type: _actionTypes.SET_PLAYLIST_SCROLL_POSITION,
position: position * 100
});
};
}
function scrollPlaylistByDelta(e) {
e.preventDefault();
return function (dispatch, getState) {
var state = getState();
if ((0, _selectors.getOverflowTrackCount)(state)) {
e.stopPropagation();
}
var totalPixelHeight = state.playlist.trackOrder.length * _constants.TRACK_HEIGHT;
var percentDelta = e.deltaY / totalPixelHeight * 100;
dispatch({
type: _actionTypes.SET_PLAYLIST_SCROLL_POSITION,
position: (0, _utils.clamp)(state.display.playlistScrollPosition + percentDelta, 0, 100)
});
};
}
function scrollUpFourTracks() {
return scrollNTracks(-4);
}
function scrollDownFourTracks() {
return scrollNTracks(4);
}
function findLastIndex(arr, cb) {
for (var i = arr.length - 1; i >= 0; i--) {
if (cb(arr[i])) {
return i;
}
}
return -1;
}
function dragSelected(offset) {
return function (dispatch, getState) {
var _getState5 = getState(),
_getState5$playlist = _getState5.playlist,
trackOrder = _getState5$playlist.trackOrder,
tracks = _getState5$playlist.tracks;
var firstSelected = trackOrder.findIndex(function (trackId) {
return tracks[trackId] && tracks[trackId].selected;
});
if (firstSelected === -1) {
return;
}
var lastSelected = findLastIndex(trackOrder, function (trackId) {
return tracks[trackId] && tracks[trackId].selected;
});
if (lastSelected === -1) {
throw new Error("We found a first selected, but not a last selected.");
}
// Ensure we don't try to drag off either end.
var min = -firstSelected;
var max = trackOrder.length - 1 - lastSelected;
var normalizedOffset = (0, _utils.clamp)(offset, min, max);
if (normalizedOffset !== 0) {
dispatch({ type: _actionTypes.DRAG_SELECTED, offset: normalizedOffset });
}
};
}
function downloadHtmlPlaylist() {
return function (dispatch, getState) {
var uri = (0, _selectors.getPlaylistURL)(getState());
(0, _utils.downloadURI)(uri, "Winamp Playlist.html");
};
}
function updateWindowPositions(positions) {
return { type: _actionTypes.UPDATE_WINDOW_POSITIONS, positions: positions };
}
/***/ }),
/* 3 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var ADD_TRACK_FROM_URL = exports.ADD_TRACK_FROM_URL = "ADD_TRACK_FROM_URL";
var CLOSE_WINAMP = exports.CLOSE_WINAMP = "CLOSE_WINAMP";
var CLOSE_EQUALIZER_WINDOW = exports.CLOSE_EQUALIZER_WINDOW = "CLOSE_EQUALIZER_WINDOW";
var IS_PLAYING = exports.IS_PLAYING = "IS_PLAYING";
var IS_STOPPED = exports.IS_STOPPED = "IS_STOPPED";
var PAUSE = exports.PAUSE = "PAUSE";
var PLAY = exports.PLAY = "PLAY";
var SEEK_TO_PERCENT_COMPLETE = exports.SEEK_TO_PERCENT_COMPLETE = "SEEK_TO_PERCENT_COMPLETE";
var SET_BALANCE = exports.SET_BALANCE = "SET_BALANCE";
var SET_BAND_VALUE = exports.SET_BAND_VALUE = "SET_BAND_VALUE";
var SET_FOCUS = exports.SET_FOCUS = "SET_FOCUS";
var SET_BAND_FOCUS = exports.SET_BAND_FOCUS = "SET_BAND_FOCUS";
var SET_FOCUSED_WINDOW = exports.SET_FOCUSED_WINDOW = "SET_FOCUSED_WINDOW";
var SET_MEDIA = exports.SET_MEDIA = "SET_MEDIA";
var SET_SCRUB_POSITION = exports.SET_SCRUB_POSITION = "SET_SCRUB_POSITION";
var SET_SKIN_DATA = exports.SET_SKIN_DATA = "SET_SKIN_DATA";
var SET_VOLUME = exports.SET_VOLUME = "SET_VOLUME";
var START_WORKING = exports.START_WORKING = "START_WORKING";
var STEP_MARQUEE = exports.STEP_MARQUEE = "STEP_MARQUEE";
var STOP = exports.STOP = "STOP";
var STOP_WORKING = exports.STOP_WORKING = "STOP_WORKING";
var TOGGLE_DOUBLESIZE_MODE = exports.TOGGLE_DOUBLESIZE_MODE = "TOGGLE_DOUBLESIZE_MODE";
var TOGGLE_EQUALIZER_WINDOW = exports.TOGGLE_EQUALIZER_WINDOW = "TOGGLE_EQUALIZER_WINDOW";
var TOGGLE_PLAYLIST_WINDOW = exports.TOGGLE_PLAYLIST_WINDOW = "TOGGLE_PLAYLIST_WINDOW";
var SET_EQ_AUTO = exports.SET_EQ_AUTO = "SET_EQ_AUTO";
var SET_EQ_ON = exports.SET_EQ_ON = "SET_EQ_ON";
var SET_EQ_OFF = exports.SET_EQ_OFF = "SET_EQ_OFF";
var TOGGLE_LLAMA_MODE = exports.TOGGLE_LLAMA_MODE = "TOGGLE_LLAMA_MODE";
var TOGGLE_REPEAT = exports.TOGGLE_REPEAT = "TOGGLE_REPEAT";
var TOGGLE_MAIN_SHADE_MODE = exports.TOGGLE_MAIN_SHADE_MODE = "TOGGLE_MAIN_SHADE_MODE";
var TOGGLE_EQUALIZER_SHADE_MODE = exports.TOGGLE_EQUALIZER_SHADE_MODE = "TOGGLE_EQUALIZER_SHADE_MODE";
var TOGGLE_PLAYLIST_SHADE_MODE = exports.TOGGLE_PLAYLIST_SHADE_MODE = "TOGGLE_PLAYLIST_SHADE_MODE";
var TOGGLE_SHUFFLE = exports.TOGGLE_SHUFFLE = "TOGGLE_SHUFFLE";
var TOGGLE_TIME_MODE = exports.TOGGLE_TIME_MODE = "TOGGLE_TIME_MODE";
var TOGGLE_VISUALIZER_STYLE = exports.TOGGLE_VISUALIZER_STYLE = "TOGGLE_VISUALIZER_STYLE";
var UNSET_FOCUS = exports.UNSET_FOCUS = "UNSET_FOCUS";
var UPDATE_TIME_ELAPSED = exports.UPDATE_TIME_ELAPSED = "UPDATE_TIME_ELAPSED";
var SET_USER_MESSAGE = exports.SET_USER_MESSAGE = "SET_USER_MESSAGE";
var UNSET_USER_MESSAGE = exports.UNSET_USER_MESSAGE = "UNSET_USER_MESSAGE";
var SET_PLAYLIST_SCROLL_POSITION = exports.SET_PLAYLIST_SCROLL_POSITION = "SET_PLAYLIST_SCROLL_POSITION";
var CLICKED_TRACK = exports.CLICKED_TRACK = "CLICKED_TRACK";
var CTRL_CLICKED_TRACK = exports.CTRL_CLICKED_TRACK = "CTRL_CLICKED_TRACK";
var SHIFT_CLICKED_TRACK = exports.SHIFT_CLICKED_TRACK = "SHIFT_CLICKED_TRACK";
var SELECT_ALL = exports.SELECT_ALL = "SELECT_ALL";
var SELECT_ZERO = exports.SELECT_ZERO = "SELECT_ZERO";
var INVERT_SELECTION = exports.INVERT_SELECTION = "INVERT_SELECTION";
var PLAYLIST_SIZE_CHANGED = exports.PLAYLIST_SIZE_CHANGED = "PLAYLIST_SIZE_CHANGED";
var REMOVE_ALL_TRACKS = exports.REMOVE_ALL_TRACKS = "REMOVE_ALL_TRACKS";
var CROP_TRACKS = exports.CROP_TRACKS = "CROP_TRACKS";
var FILE_INFO = exports.FILE_INFO = "FILE_INFO";
var REMOVE_TRACKS = exports.REMOVE_TRACKS = "REMOVE_TRACKS";
var SET_AVALIABLE_SKINS = exports.SET_AVALIABLE_SKINS = "SET_AVALIABLE_SKINS";
var REVERSE_LIST = exports.REVERSE_LIST = "REVERSE_LIST";
var RANDOMIZE_LIST = exports.RANDOMIZE_LIST = "RANDOMIZE_LIST";
var SET_TRACK_ORDER = exports.SET_TRACK_ORDER = "SET_TRACK_ORDER";
var PLAY_TRACK = exports.PLAY_TRACK = "PLAY_TRACK";
var BUFFER_TRACK = exports.BUFFER_TRACK = "BUFFER_TRACK";
var DRAG_SELECTED = exports.DRAG_SELECTED = "DRAG_SELECTED";
var SET_MEDIA_TAGS = exports.SET_MEDIA_TAGS = "SET_MEDIA_TAGS";
var SET_MEDIA_DURATION = exports.SET_MEDIA_DURATION = "SET_MEDIA_DURATION";
var OPEN_GEN_WINDOW = exports.OPEN_GEN_WINDOW = "OPEN_GEN_WINDOW";
var CLOSE_GEN_WINDOW = exports.CLOSE_GEN_WINDOW = "CLOSE_GEN_WINDOW";
var MEDIA_TAG_REQUEST_INITIALIZED = exports.MEDIA_TAG_REQUEST_INITIALIZED = "MEDIA_TAG_REQUEST_INITIALIZED";
var MEDIA_TAG_REQUEST_FAILED = exports.MEDIA_TAG_REQUEST_FAILED = "MEDIA_TAG_REQUEST_FAILED";
var NETWORK_CONNECTED = exports.NETWORK_CONNECTED = "NETWORK_CONNECTED";
var NETWORK_DISCONNECTED = exports.NETWORK_DISCONNECTED = "NETWORK_DISCONNECTED";
var UPDATE_WINDOW_POSITIONS = exports.UPDATE_WINDOW_POSITIONS = "UPDATE_WINDOW_POSITIONS";
/***/ }),
/* 4 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
exports.default = function (instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
};
/***/ }),
/* 5 */
/***/ (function(module, exports) {
var core = module.exports = { version: '2.5.3' };
if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef
/***/ }),
/* 6 */
/***/ (function(module, exports, __webpack_require__) {
var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
Copyright (c) 2016 Jed Watson.
Licensed under the MIT License (MIT), see
http://jedwatson.github.io/classnames
*/
/* global define */
(function () {
'use strict';
var hasOwn = {}.hasOwnProperty;
function classNames () {
var classes = [];
for (var i = 0; i < arguments.length; i++) {
var arg = arguments[i];
if (!arg) continue;
var argType = typeof arg;
if (argType === 'string' || argType === 'number') {
classes.push(arg);
} else if (Array.isArray(arg)) {
classes.push(classNames.apply(null, arg));
} else if (argType === 'object') {
for (var key in arg) {
if (hasOwn.call(arg, key) && arg[key]) {
classes.push(key);
}
}
}
}
return classes.join(' ');
}
if (typeof module !== 'undefined' && module.exports) {
module.exports = classNames;
} else if (true) {
// register as 'classnames', consistent with npm package name
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {
return classNames;
}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
} else {
window.classNames = classNames;
}
}());
/***/ }),
/* 7 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
var _defineProperty = __webpack_require__(103);
var _defineProperty2 = _interopRequireDefault(_defineProperty);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = function () {
function defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
(0, _defineProperty2.default)(target, descriptor.key, descriptor);
}
}
return function (Constructor, protoProps, staticProps) {
if (protoProps) defineProperties(Constructor.prototype, protoProps);
if (staticProps) defineProperties(Constructor, staticProps);
return Constructor;
};
}();
/***/ }),
/* 8 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var BANDS = exports.BANDS = [60, 170, 310, 600, 1000, 3000, 6000, 12000, 14000, 16000];
var WINDOWS = exports.WINDOWS = {
MAIN: "MAIN",
PLAYLIST: "PLAYLIST",
EQUALIZER: "EQUALIZER"
};
var LOAD_STYLE = exports.LOAD_STYLE = {
BUFFER: "BUFFER",
PLAY: "PLAY"
};
var MEDIA_TAG_REQUEST_STATUS = exports.MEDIA_TAG_REQUEST_STATUS = {
INITIALIZED: "INITIALIZED",
FAILED: "FAILED",
COMPLETE: "COMPLETE",
NOT_REQUESTED: "NOT_REQUESTED"
};
var UTF8_ELLIPSIS = exports.UTF8_ELLIPSIS = "\u2026";
var CHARACTER_WIDTH = exports.CHARACTER_WIDTH = 5;
var PLAYLIST_RESIZE_SEGMENT_WIDTH = exports.PLAYLIST_RESIZE_SEGMENT_WIDTH = 25;
var PLAYLIST_RESIZE_SEGMENT_HEIGHT = exports.PLAYLIST_RESIZE_SEGMENT_HEIGHT = 29;
var MIN_PLAYLIST_WINDOW_WIDTH = exports.MIN_PLAYLIST_WINDOW_WIDTH = 275;
var TRACK_HEIGHT = exports.TRACK_HEIGHT = 13;
var LETTERS = exports.LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
/***/ }),
/* 9 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
var _typeof2 = __webpack_require__(124);
var _typeof3 = _interopRequireDefault(_typeof2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = function (self, call) {
if (!self) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return call && ((typeof call === "undefined" ? "undefined" : (0, _typeof3.default)(call)) === "object" || typeof call === "function") ? call : self;
};
/***/ }),
/* 10 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
var _setPrototypeOf = __webpack_require__(259);
var _setPrototypeOf2 = _interopRequireDefault(_setPrototypeOf);
var _create = __webpack_require__(263);
var _create2 = _interopRequireDefault(_create);
var _typeof2 = __webpack_require__(124);
var _typeof3 = _interopRequireDefault(_typeof2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = function (subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function, not " + (typeof superClass === "undefined" ? "undefined" : (0, _typeof3.default)(superClass)));
}
subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, {
constructor: {
value: subClass,
enumerable: false,
writable: true,
configurable: true
}
});
if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass;
};
/***/ }),
/* 11 */
/***/ (function(module, exports, __webpack_require__) {
var global = __webpack_require__(16);
var core = __webpack_require__(5);
var ctx = __webpack_require__(23);
var hide = __webpack_require__(27);
var PROTOTYPE = 'prototype';
var $export = function (type, name, source) {
var IS_FORCED = type & $export.F;
var IS_GLOBAL = type & $export.G;
var IS_STATIC = type & $export.S;
var IS_PROTO = type & $export.P;
var IS_BIND = type & $export.B;
var IS_WRAP = type & $export.W;
var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});
var expProto = exports[PROTOTYPE];
var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];
var key, own, out;
if (IS_GLOBAL) source = name;
for (key in source) {
// contains in native
own = !IS_FORCED && target && target[key] !== undefined;
if (own && key in exports) continue;
// export native or passed
out = own ? target[key] : source[key];
// prevent global pollution for namespaces
exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
// bind timers to global for call from export context
: IS_BIND && own ? ctx(out, global)
// wrap global constructors for prevent change them in library
: IS_WRAP && target[key] == out ? (function (C) {
var F = function (a, b, c) {
if (this instanceof C) {
switch (arguments.length) {
case 0: return new C();
case 1: return new C(a);
case 2: return new C(a, b);
} return new C(a, b, c);
} return C.apply(this, arguments);
};
F[PROTOTYPE] = C[PROTOTYPE];
return F;
// make static versions for prototype methods
})(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
// export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
if (IS_PROTO) {
(exports.virtual || (exports.virtual = {}))[key] = out;
// export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);
}
}
};
// type bitmap
$export.F = 1; // forced
$export.G = 2; // global
$export.S = 4; // static
$export.P = 8; // proto
$export.B = 16; // bind
$export.W = 32; // wrap
$export.U = 64; // safe
$export.R = 128; // real proto method for `library`
module.exports = $export;
/***/ }),
/* 12 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
var _assign = __webpack_require__(80);
var _assign2 = _interopRequireDefault(_assign);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = _assign2.default || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
/***/ }),
/* 13 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.arrayWithout = exports.arrayWith = exports.spliceIn = exports.filterObject = exports.mapObject = exports.moveSelected = exports.sort = exports.shuffle = exports.arraysAreEqual = exports.segment = exports.merge = exports.denormalize = exports.normalize = exports.percentToIndex = exports.percentToRange = exports.toPercent = exports.base64FromArrayBuffer = exports.clamp = exports.parseIni = exports.parseViscolors = exports.getTimeStr = exports.getTimeObj = undefined;
var _from = __webpack_require__(60);
var _from2 = _interopRequireDefault(_from);
var _set = __webpack_require__(39);
var _set2 = _interopRequireDefault(_set);
var _keys = __webpack_require__(24);
var _keys2 = _interopRequireDefault(_keys);
var _getIterator2 = __webpack_require__(31);
var _getIterator3 = _interopRequireDefault(_getIterator2);
var _assign = __webpack_require__(80);
var _assign2 = _interopRequireDefault(_assign);
var _toConsumableArray2 = __webpack_require__(82);
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
exports.downloadURI = downloadURI;
exports.debounce = debounce;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var getTimeObj = exports.getTimeObj = function getTimeObj(time) {
if (time == null) {
// If we clean up `` we don't need to do this any more.
return {
minutesFirstDigit: " ",
minutesSecondDigit: " ",
secondsFirstDigit: " ",
secondsSecondDigit: " "
};
}
var minutes = Math.floor(time / 60);
var seconds = time % 60;
var digits = time == null ? [" ", " ", " ", " "] : [Math.floor(minutes / 10), Math.floor(minutes % 10), Math.floor(seconds / 10), Math.floor(seconds % 10)];
var minutesFirstDigit = digits[0],
minutesSecondDigit = digits[1],
secondsFirstDigit = digits[2],
secondsSecondDigit = digits[3];
return {
minutesFirstDigit: minutesFirstDigit,
minutesSecondDigit: minutesSecondDigit,
secondsFirstDigit: secondsFirstDigit,
secondsSecondDigit: secondsSecondDigit
};
};
var getTimeStr = exports.getTimeStr = function getTimeStr(time) {
var truncate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
if (time == null) {
return "";
}
var _getTimeObj = getTimeObj(time),
minutesFirstDigit = _getTimeObj.minutesFirstDigit,
minutesSecondDigit = _getTimeObj.minutesSecondDigit,
secondsFirstDigit = _getTimeObj.secondsFirstDigit,
secondsSecondDigit = _getTimeObj.secondsSecondDigit;
return [truncate ? minutesFirstDigit || "" : minutesFirstDigit, minutesSecondDigit, ":", secondsFirstDigit, secondsSecondDigit].join("");
};
var parseViscolors = exports.parseViscolors = function parseViscolors(text) {
var entries = text.split("\n");
var regex = /^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)/;
var colors = [];
// changed to a hard number to deal with empty lines at the end...
// plus it's only meant to be an exact quantity of numbers anyway.
// - @PAEz
for (var i = 0; i < 24; i++) {
var matches = regex.exec(entries[i]);
if (matches) {
colors[i] = "rgb(" + matches.slice(1, 4).join(",") + ")";
} else {
console.error("Error in VISCOLOR.TXT on line " + i);
}
}
return colors;
};
var SECTION_REGEX = /^\s*\[(.+?)\]\s*$/;
var PROPERTY_REGEX = /^\s*([^;].*)\s*=\s*(.*)\s*$/;
var parseIni = exports.parseIni = function parseIni(text) {
var section = void 0,
match = void 0;
return text.split(/[\r\n]+/g).reduce(function (data, line) {
if ((match = line.match(PROPERTY_REGEX)) && section != null) {
var value = match[2].replace(/(^")|("$)|(^')|('$)/gi, "");
data[section][match[1].trim().toLowerCase()] = value;
} else if (match = line.match(SECTION_REGEX)) {
section = match[1].trim().toLowerCase();
data[section] = {};
}
return data;
}, {});
};
var clamp = exports.clamp = function clamp(value, min, max) {
return Math.min(Math.max(value, min), max);
};
var base64FromArrayBuffer = exports.base64FromArrayBuffer = function base64FromArrayBuffer(arrayBuffer) {
var dataView = new Uint8Array(arrayBuffer);
return window.btoa(String.fromCharCode.apply(String, (0, _toConsumableArray3.default)(dataView)));
};
// https://stackoverflow.com/a/15832662/1263117
function downloadURI(uri, name) {
var link = document.createElement("a");
link.download = name;
link.href = uri;
window.document.body.appendChild(link);
link.click();
window.document.body.removeChild(link);
}
var toPercent = exports.toPercent = function toPercent(min, max, value) {
return (value - min) / (max - min);
};
var percentToRange = exports.percentToRange = function percentToRange(percent, min, max) {
return min + Math.round(percent * (max - min));
};
var percentToIndex = exports.percentToIndex = function percentToIndex(percent, length) {
return percentToRange(percent, 0, length - 1);
};
var rebound = function rebound(oldMin, oldMax, newMin, newMax) {
return function (oldValue) {
return percentToRange(toPercent(oldMin, oldMax, oldValue), newMin, newMax);
};
};
// Convert a .eqf value to a 1-100
var normalize = exports.normalize = rebound(1, 64, 1, 100);
// Convert a 0-100 to an .eqf value
var denormalize = exports.denormalize = rebound(1, 100, 1, 64);
// Merge a `source` object to a `target` recursively
var merge = exports.merge = function merge(target, source) {
// Iterate through `source` properties and if an `Object` set property to merge of `target` and `source` properties
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = (0, _getIterator3.default)((0, _keys2.default)(source)), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var key = _step.value;
if (source[key] instanceof Object) (0, _assign2.default)(source[key], merge(target[key], source[key]));
}
// Join `target` and modified `source`
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
(0, _assign2.default)(target || {}, source);
return target;
};
// Maps a value in a range (defined my min/max) to a value in an array (options).
var segment = exports.segment = function segment(min, max, value, newValues) {
var ratio = toPercent(min, max, value);
/*
| 0 | 1 | 2 |
0 1 2 3
*/
return newValues[percentToIndex(ratio, newValues.length)];
};
var arraysAreEqual = exports.arraysAreEqual = function arraysAreEqual(a, b) {
return a.length === b.length && a.every(function (value, i) {
return value === b[i];
});
};
// https://bost.ocks.org/mike/shuffle/
// Shuffle an array in O(n)
var shuffle = exports.shuffle = function shuffle(array) {
var sorted = [].concat((0, _toConsumableArray3.default)(array));
var m = sorted.length;
// While there remain elements to shuffle…
while (m) {
// Pick a remaining element…
var i = Math.floor(Math.random() * m--);
// And swap it with the current element.
var val = sorted[m];
sorted[m] = sorted[i];
sorted[i] = val;
}
return sorted;
};
var sort = exports.sort = function sort(array, iteratee) {
return [].concat((0, _toConsumableArray3.default)(array)).sort(function (a, b) {
var aKey = iteratee(a);
var bKey = iteratee(b);
if (aKey < bKey) {
return -1;
} else if (aKey > bKey) {
return 1;
}
return 0;
});
};
var moveSelected = exports.moveSelected = function moveSelected(arr, isSelected, offset) {
var newArr = new Array(arr.length);
var next = 0;
for (var i = 0; i < newArr.length; i++) {
var from = i - offset;
// Is a value supposed to move here?
if (from >= 0 && from < arr.length && isSelected(from)) {
newArr[i] = arr[from];
} else {
while (next < arr.length && isSelected(next)) {
next++;
}
newArr[i] = arr[next];
next++;
}
}
return newArr;
};
var mapObject = exports.mapObject = function mapObject(obj, iteratee) {
return (
// TODO: Could return the original reference if no values change
(0, _keys2.default)(obj).reduce(function (newObj, key) {
newObj[key] = iteratee(obj[key], key);
return newObj;
}, {})
);
};
var filterObject = exports.filterObject = function filterObject(obj, predicate) {
return (
// TODO: Could return the original reference if no values change
(0, _keys2.default)(obj).reduce(function (newObj, key) {
if (predicate(obj[key], key)) {
newObj[key] = obj[key];
}
return newObj;
}, {})
);
};
var spliceIn = exports.spliceIn = function spliceIn(original, start, newValues) {
var newArr = [].concat((0, _toConsumableArray3.default)(original));
newArr.splice.apply(newArr, [start, 0].concat((0, _toConsumableArray3.default)(newValues)));
return newArr;
};
var arrayWith = exports.arrayWith = function arrayWith(arr, value) {
var s = new _set2.default(arr);
s.add(value);
return (0, _from2.default)(s);
};
var arrayWithout = exports.arrayWithout = function arrayWithout(arr, value) {
var s = new _set2.default(arr);
s.delete(value);
return (0, _from2.default)(s);
};
function debounce(func, delay) {
var token = void 0;
return function () {
var _this = this;
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
if (token != null) {
clearTimeout(token);
}
token = setTimeout(function () {
func.apply(_this, args);
}, delay);
};
}
/***/ }),
/* 14 */
/***/ (function(module, exports, __webpack_require__) {
var store = __webpack_require__(70)('wks');
var uid = __webpack_require__(55);
var Symbol = __webpack_require__(16).Symbol;
var USE_SYMBOL = typeof Symbol == 'function';
var $exports = module.exports = function (name) {
return store[name] || (store[name] =
USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
};
$exports.store = store;
/***/ }),
/* 15 */
/***/ (function(module, exports, __webpack_require__) {
module.exports = { "default": __webpack_require__(248), __esModule: true };
/***/ }),
/* 16 */
/***/ (function(module, exports) {
// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
var global = module.exports = typeof window != 'undefined' && window.Math == Math
? window : typeof self != 'undefined' && self.Math == Math ? self
// eslint-disable-next-line no-new-func
: Function('return this')();
if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef
/***/ }),
/* 17 */
/***/ (function(module, exports, __webpack_require__) {
/**
* Copyright (c) 2013-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
if (false) {
var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&
Symbol.for &&
Symbol.for('react.element')) ||
0xeac7;
var isValidElement = function(object) {
return typeof object === 'object' &&
object !== null &&
object.$$typeof === REACT_ELEMENT_TYPE;
};
// By explicitly using `prop-types` you are opting into new development behavior.
// http://fb.me/prop-types-in-prod
var throwOnDirectAccess = true;
module.exports = require('./factoryWithTypeCheckers')(isValidElement, throwOnDirectAccess);
} else {
// By explicitly using `prop-types` you are opting into new production behavior.
// http://fb.me/prop-types-in-prod
module.exports = __webpack_require__(164)();
}
/***/ }),
/* 18 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getWindowGraph = exports.getPlaylistURL = exports.getMediaText = exports.getMinimalMediaText = exports.getCurrentTrackDisplayName = exports.getTrackDisplayName = exports.getDuration = exports.getPlaylist = exports.getVisibleTracks = exports.getTrackIsVisibleFunction = exports.getVisibleTrackIds = exports.getScrollOffset = exports.getPlaylistScrollPosition = exports.getOverflowTrackCount = exports.getNumberOfVisibleTracks = exports.nextTrack = exports.getCurrentTrackId = exports.getCurrentTrackNumber = exports.getCurrentTrackIndex = exports.getRunningTimeMessage = exports.getSelectedTrackObjects = exports.getOrderedTracks = exports.getTrackCount = exports.getTracks = exports.getEqfData = undefined;
var _extends2 = __webpack_require__(12);
var _extends3 = _interopRequireDefault(_extends2);
var _keys = __webpack_require__(24);
var _keys2 = _interopRequireDefault(_keys);
var _getIterator2 = __webpack_require__(31);
var _getIterator3 = _interopRequireDefault(_getIterator2);
var _values = __webpack_require__(236);
var _values2 = _interopRequireDefault(_values);
exports.getWindowPositions = getWindowPositions;
exports.getPlaylistWindowPixelSize = getPlaylistWindowPixelSize;
exports.getWindowSizes = getWindowSizes;
var _reselect = __webpack_require__(239);
var _utils = __webpack_require__(13);
var _constants = __webpack_require__(8);
var _playlistHtml = __webpack_require__(240);
var _playlist = __webpack_require__(113);
var fromPlaylist = _interopRequireWildcard(_playlist);
var _resizeUtils = __webpack_require__(121);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var getEqfData = exports.getEqfData = function getEqfData(state) {
var sliders = state.equalizer.sliders;
var preset = {
name: "Entry1",
preamp: (0, _utils.denormalize)(sliders.preamp)
};
_constants.BANDS.forEach(function (band) {
preset["hz" + band] = (0, _utils.denormalize)(sliders[band]);
});
var eqfData = {
presets: [preset],
type: "Winamp EQ library file v1.1"
};
return eqfData;
};
var getTracks = exports.getTracks = function getTracks(state) {
return state.playlist.tracks;
};
var getTrackOrder = function getTrackOrder(state) {
return state.playlist.trackOrder;
};
var getTrackCount = exports.getTrackCount = (0, _reselect.createSelector)(getTrackOrder, function (trackOrder) {
return trackOrder.length;
});
var getOrderedTracks = exports.getOrderedTracks = (0, _reselect.createSelector)(getTracks, getTrackOrder, function (tracks, trackOrder) {
return trackOrder.filter(function (id) {
return tracks[id];
});
});
var getOrderedTrackObjects = (0, _reselect.createSelector)(getTracks, getOrderedTracks, function (tracks, trackOrder) {
return trackOrder.map(function (id) {
return tracks[id];
});
});
var getSelectedTrackObjects = exports.getSelectedTrackObjects = (0, _reselect.createSelector)(getOrderedTrackObjects, function (tracks) {
return tracks.filter(function (track) {
return track.selected;
});
});
// If a duration is `null`, it counts as zero, which seems fine enough.
var runningTimeFromTracks = function runningTimeFromTracks(tracks) {
return tracks.reduce(function (time, track) {
return time + Number(track.duration);
}, 0);
};
var getTotalRunningTime = (0, _reselect.createSelector)(getOrderedTrackObjects, runningTimeFromTracks);
var getSelectedRunningTime = (0, _reselect.createSelector)(getSelectedTrackObjects, runningTimeFromTracks);
// Note: We should append "+" to these values if some of the tracks are of unknown time.
var getRunningTimeMessage = exports.getRunningTimeMessage = (0, _reselect.createSelector)(getTotalRunningTime, getSelectedRunningTime, function (totalRunningTime, selectedRunningTime) {
return (0, _utils.getTimeStr)(selectedRunningTime) + "/" + (0, _utils.getTimeStr)(totalRunningTime);
});
// TODO: use slectors to get memoization
var getCurrentTrackIndex = exports.getCurrentTrackIndex = function getCurrentTrackIndex(state) {
return state.playlist.trackOrder.indexOf(state.playlist.currentTrack);
};
var getCurrentTrackNumber = exports.getCurrentTrackNumber = (0, _reselect.createSelector)(getCurrentTrackIndex, function (currentTrackIndex) {
return currentTrackIndex + 1;
});
var getCurrentTrackId = exports.getCurrentTrackId = function getCurrentTrackId(state) {
return state.playlist.currentTrack;
};
var nextTrack = exports.nextTrack = function nextTrack(state) {
var n = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
var trackOrder = state.playlist.trackOrder,
repeat = state.media.repeat;
var trackCount = getTrackCount(state);
if (trackCount === 0) {
return null;
}
var currentIndex = getCurrentTrackIndex(state);
var nextIndex = currentIndex + n;
if (repeat) {
nextIndex = nextIndex % trackCount;
if (nextIndex < 0) {
// Handle wrapping around backwards
nextIndex += trackCount;
}
return trackOrder[nextIndex];
}
if (currentIndex === trackCount - 1 && n > 0) {
return null;
} else if (currentIndex === 0 && n < 0) {
return null;
}
nextIndex = (0, _utils.clamp)(nextIndex, 0, trackCount - 1);
return trackOrder[nextIndex];
};
var BASE_WINDOW_HEIGHT = 58;
var getNumberOfVisibleTracks = exports.getNumberOfVisibleTracks = function getNumberOfVisibleTracks(state) {
var playlistSize = state.display.playlistSize;
return Math.floor((BASE_WINDOW_HEIGHT + _constants.PLAYLIST_RESIZE_SEGMENT_HEIGHT * playlistSize[1]) / _constants.TRACK_HEIGHT);
};
var getOverflowTrackCount = exports.getOverflowTrackCount = (0, _reselect.createSelector)(getTrackCount, getNumberOfVisibleTracks, function (trackCount, numberOfVisibleTracks) {
return Math.max(0, trackCount - numberOfVisibleTracks);
});
var _getPlaylistScrollPosition = function _getPlaylistScrollPosition(state) {
return state.display.playlistScrollPosition;
};
var getPlaylistScrollPosition = exports.getPlaylistScrollPosition = (0, _reselect.createSelector)(getOverflowTrackCount, _getPlaylistScrollPosition, function (overflowTrackCount, playlistScrollPosition) {
if (overflowTrackCount === 0) {
return 0;
}
return Math.round(Math.round(overflowTrackCount * playlistScrollPosition / 100) / overflowTrackCount * 100);
});
var getScrollOffset = exports.getScrollOffset = (0, _reselect.createSelector)(_getPlaylistScrollPosition, getTrackCount, getNumberOfVisibleTracks, function (playlistScrollPosition, trackCount, numberOfVisibleTracks) {
var overflow = Math.max(0, trackCount - numberOfVisibleTracks);
return (0, _utils.percentToIndex)(playlistScrollPosition / 100, overflow + 1);
});
var getVisibleTrackIds = exports.getVisibleTrackIds = (0, _reselect.createSelector)(getScrollOffset, getTrackOrder, getNumberOfVisibleTracks, function (offset, trackOrder, numberOfVisibleTracks) {
return trackOrder.slice(offset, offset + numberOfVisibleTracks);
});
var getTrackIsVisibleFunction = exports.getTrackIsVisibleFunction = (0, _reselect.createSelector)(getVisibleTrackIds, function (visibleTrackIds) {
return function (id) {
return visibleTrackIds.includes(id);
};
});
var getVisibleTracks = exports.getVisibleTracks = (0, _reselect.createSelector)(getVisibleTrackIds, getTracks, function (visibleTrackIds, tracks) {
return visibleTrackIds.map(function (id) {
return tracks[id];
});
});
var getPlaylist = exports.getPlaylist = function getPlaylist(state) {
return state.playlist;
};
var getDuration = exports.getDuration = function getDuration(state) {
var currentTrack = state.playlist.tracks[state.playlist.currentTrack];
return currentTrack && currentTrack.duration;
};
var getTrackDisplayName = exports.getTrackDisplayName = function getTrackDisplayName(state, trackId) {
return fromPlaylist.getTrackDisplayName(getPlaylist(state), trackId);
};
var getCurrentTrackDisplayName = exports.getCurrentTrackDisplayName = function getCurrentTrackDisplayName(state) {
var id = getCurrentTrackId(state);
return getTrackDisplayName(state, id);
};
var getMinimalMediaText = exports.getMinimalMediaText = (0, _reselect.createSelector)(getCurrentTrackNumber, getCurrentTrackDisplayName, function (trackNumber, name) {
return name == null ? null : trackNumber + ". " + name;
});
var getMediaText = exports.getMediaText = (0, _reselect.createSelector)(getMinimalMediaText, getDuration, function (minimalMediaText, duration) {
return minimalMediaText == null ? null : // TODO: Maybe the ` *** ` should actually be added by the marquee
minimalMediaText + " (" + (0, _utils.getTimeStr)(duration) + ") *** ";
});
var getNumberOfTracks = function getNumberOfTracks(state) {
return getTrackOrder(state).length;
};
var getPlaylistDuration = (0, _reselect.createSelector)(getTracks, function (tracks) {
return (0, _values2.default)(tracks).reduce(function (total, track) {
return total + track.duration;
}, 0);
});
// TODO: Move to action creator
var getPlaylistURL = exports.getPlaylistURL = (0, _reselect.createSelector)(function (state) {
return state;
}, getNumberOfTracks, getPlaylistDuration, getTrackOrder, getTracks, function (state, numberOfTracks, playlistDuration, trackOrder, tracks) {
return (0, _playlistHtml.createPlaylistURL)({
numberOfTracks: numberOfTracks,
averageTrackLength: (0, _utils.getTimeStr)(playlistDuration / numberOfTracks),
// TODO: Handle hours
playlistLengthMinutes: Math.floor(playlistDuration / 60),
playlistLengthSeconds: Math.floor(playlistDuration % 60),
tracks: trackOrder.map(function (id, i) {
return i + 1 + ". " + getTrackDisplayName(state, id) + " (" + (0, _utils.getTimeStr)(tracks[id].duration) + ")";
})
});
});
function getWindowPositions(state) {
return state.windows.positions;
}
var WINDOW_WIDTH = 275;
var WINDOW_HEIGHT = 116;
var DEFAUT_WINDOW_SIZE = {
height: WINDOW_HEIGHT,
width: WINDOW_WIDTH
};
var SHADE_WINDOW_HEIGHT = 14;
function getPlaylistWindowPixelSize(state) {
var playlistSize = state.display.playlistSize;
return {
height: WINDOW_HEIGHT + playlistSize[1] * _constants.PLAYLIST_RESIZE_SEGMENT_HEIGHT,
width: _constants.MIN_PLAYLIST_WINDOW_WIDTH + playlistSize[0] * _constants.PLAYLIST_RESIZE_SEGMENT_WIDTH
};
}
function getGenericWindowSize(size, shade, doubled) {
var doubledMultiplier = doubled ? 2 : 1;
return {
height: (shade ? SHADE_WINDOW_HEIGHT : size.height) * doubledMultiplier,
width: size.width * doubledMultiplier
};
}
function getWindowSizes(state) {
var _state$display = state.display,
doubled = _state$display.doubled,
mainShade = _state$display.mainShade,
equalizerShade = _state$display.equalizerShade,
playlistShade = _state$display.playlistShade;
var main = getGenericWindowSize(DEFAUT_WINDOW_SIZE, mainShade, doubled);
var equalizer = getGenericWindowSize(DEFAUT_WINDOW_SIZE, equalizerShade, doubled);
var playlist = getGenericWindowSize(getPlaylistWindowPixelSize(state), playlistShade, false // The playlist cannot be doubled
);
return { main: main, equalizer: equalizer, playlist: playlist };
}
var getWindowGraph = exports.getWindowGraph = (0, _reselect.createSelector)(getWindowPositions, getWindowSizes, function (windowPositions, windowSizes) {
var windowData = [];
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = (0, _getIterator3.default)((0, _keys2.default)(windowPositions)), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var key = _step.value;
windowData.push((0, _extends3.default)({ key: key }, windowPositions[key], windowSizes[key]));
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return (0, _resizeUtils.generateGraph)(windowData);
});
/***/ }),
/* 19 */
/***/ (function(module, exports, __webpack_require__) {
var anObject = __webpack_require__(21);
var IE8_DOM_DEFINE = __webpack_require__(89);
var toPrimitive = __webpack_require__(67);
var dP = Object.defineProperty;
exports.f = __webpack_require__(22) ? Object.defineProperty : function defineProperty(O, P, Attributes) {
anObject(O);
P = toPrimitive(P, true);
anObject(Attributes);
if (IE8_DOM_DEFINE) try {
return dP(O, P, Attributes);
} catch (e) { /* empty */ }
if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
if ('value' in Attributes) O[P] = Attributes.value;
return O;
};
/***/ }),
/* 20 */
/***/ (function(module, exports) {
module.exports = function (it) {
return typeof it === 'object' ? it !== null : typeof it === 'function';
};
/***/ }),
/* 21 */
/***/ (function(module, exports, __webpack_require__) {
var isObject = __webpack_require__(20);
module.exports = function (it) {
if (!isObject(it)) throw TypeError(it + ' is not an object!');
return it;
};
/***/ }),
/* 22 */
/***/ (function(module, exports, __webpack_require__) {
// Thank's IE8 for his funny defineProperty
module.exports = !__webpack_require__(28)(function () {
return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
});
/***/ }),
/* 23 */
/***/ (function(module, exports, __webpack_require__) {
// optional / simple context binding
var aFunction = __webpack_require__(40);
module.exports = function (fn, that, length) {
aFunction(fn);
if (that === undefined) return fn;
switch (length) {
case 1: return function (a) {
return fn.call(that, a);
};
case 2: return function (a, b) {
return fn.call(that, a, b);
};
case 3: return function (a, b, c) {
return fn.call(that, a, b, c);
};
}
return function (/* ...args */) {
return fn.apply(that, arguments);
};
};
/***/ }),
/* 24 */
/***/ (function(module, exports, __webpack_require__) {
module.exports = { "default": __webpack_require__(221), __esModule: true };
/***/ }),
/* 25 */
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__(136);
/***/ }),
/* 26 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
var _promise = __webpack_require__(51);
var _promise2 = _interopRequireDefault(_promise);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = function (fn) {
return function () {
var gen = fn.apply(this, arguments);
return new _promise2.default(function (resolve, reject) {
function step(key, arg) {
try {
var info = gen[key](arg);
var value = info.value;
} catch (error) {
reject(error);
return;
}
if (info.done) {
resolve(value);
} else {
return _promise2.default.resolve(value).then(function (value) {
step("next", value);
}, function (err) {
step("throw", err);
});
}
}
return step("next");
});
};
};
/***/ }),
/* 27 */
/***/ (function(module, exports, __webpack_require__) {
var dP = __webpack_require__(19);
var createDesc = __webpack_require__(41);
module.exports = __webpack_require__(22) ? function (object, key, value) {
return dP.f(object, key, createDesc(1, value));
} : function (object, key, value) {
object[key] = value;
return object;
};
/***/ }),
/* 28 */
/***/ (function(module, exports) {
module.exports = function (exec) {
try {
return !!exec();
} catch (e) {
return true;
}
};
/***/ }),
/* 29 */
/***/ (function(module, exports) {
var hasOwnProperty = {}.hasOwnProperty;
module.exports = function (it, key) {
return hasOwnProperty.call(it, key);
};
/***/ }),
/* 30 */
/***/ (function(module, exports, __webpack_require__) {
// to indexed object, toObject with fallback for non-array-like ES3 strings
var IObject = __webpack_require__(68);
var defined = __webpack_require__(64);
module.exports = function (it) {
return IObject(defined(it));
};
/***/ }),
/* 31 */
/***/ (function(module, exports, __webpack_require__) {
module.exports = { "default": __webpack_require__(223), __esModule: true };
/***/ }),
/* 32 */
/***/ (function(module, exports) {
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
// css base code, injected by the css-loader
module.exports = function(useSourceMap) {
var list = [];
// return the list of modules as css string
list.toString = function toString() {
return this.map(function (item) {
var content = cssWithMappingToString(item, useSourceMap);
if(item[2]) {
return "@media " + item[2] + "{" + content + "}";
} else {
return content;
}
}).join("");
};
// import a list of modules into the list
list.i = function(modules, mediaQuery) {
if(typeof modules === "string")
modules = [[null, modules, ""]];
var alreadyImportedModules = {};
for(var i = 0; i < this.length; i++) {
var id = this[i][0];
if(typeof id === "number")
alreadyImportedModules[id] = true;
}
for(i = 0; i < modules.length; i++) {
var item = modules[i];
// skip already imported module
// this implementation is not 100% perfect for weird media query combinations
// when a module is imported multiple times with different media queries.
// I hope this will never occur (Hey this way we have smaller bundles)
if(typeof item[0] !== "number" || !alreadyImportedModules[item[0]]) {
if(mediaQuery && !item[2]) {
item[2] = mediaQuery;
} else if(mediaQuery) {
item[2] = "(" + item[2] + ") and (" + mediaQuery + ")";
}
list.push(item);
}
}
};
return list;
};
function cssWithMappingToString(item, useSourceMap) {
var content = item[1] || '';
var cssMapping = item[3];
if (!cssMapping) {
return content;
}
if (useSourceMap && typeof btoa === 'function') {
var sourceMapping = toComment(cssMapping);
var sourceURLs = cssMapping.sources.map(function (source) {
return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'
});
return [content].concat(sourceURLs).concat([sourceMapping]).join('\n');
}
return [content].join('\n');
}
// Adapted from convert-source-map (MIT)
function toComment(sourceMap) {
// eslint-disable-next-line no-undef
var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));
var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;
return '/*# ' + data + ' */';
}
/***/ }),
/* 33 */
/***/ (function(module, exports, __webpack_require__) {
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
var stylesInDom = {};
var memoize = function (fn) {
var memo;
return function () {
if (typeof memo === "undefined") memo = fn.apply(this, arguments);
return memo;
};
};
var isOldIE = memoize(function () {
// Test for IE <= 9 as proposed by Browserhacks
// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805
// Tests for existence of standard globals is to allow style-loader
// to operate correctly into non-standard environments
// @see https://github.com/webpack-contrib/style-loader/issues/177
return window && document && document.all && !window.atob;
});
var getElement = (function (fn) {
var memo = {};
return function(selector) {
if (typeof memo[selector] === "undefined") {
var styleTarget = fn.call(this, selector);
// Special case to return head of iframe instead of iframe itself
if (styleTarget instanceof window.HTMLIFrameElement) {
try {
// This will throw an exception if access to iframe is blocked
// due to cross-origin restrictions
styleTarget = styleTarget.contentDocument.head;
} catch(e) {
styleTarget = null;
}
}
memo[selector] = styleTarget;
}
return memo[selector]
};
})(function (target) {
return document.querySelector(target)
});
var singleton = null;
var singletonCounter = 0;
var stylesInsertedAtTop = [];
var fixUrls = __webpack_require__(269);
module.exports = function(list, options) {
if (typeof DEBUG !== "undefined" && DEBUG) {
if (typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment");
}
options = options || {};
options.attrs = typeof options.attrs === "object" ? options.attrs : {};
// Force single-tag solution on IE6-9, which has a hard limit on the # of