// NPM imports import React, { Component, PropTypes } from "react"; import CSSModules from "react-css-modules"; import { defineMessages, injectIntl, intlShape, FormattedMessage } from "react-intl"; import { Link } from "react-router"; import Immutable from "immutable"; import FontAwesome from "react-fontawesome"; // Local imports import { formatLength, messagesMap } from "../../utils"; // Styles import css from "../../styles/elements/WebPlayer.scss"; // Translations import commonMessages from "../../locales/messagesDescriptors/common"; import messages from "../../locales/messagesDescriptors/elements/WebPlayer"; // Define translations const webplayerMessages = defineMessages(messagesMap(Array.concat([], commonMessages, messages))); /** * Webplayer component. */ class WebPlayerCSSIntl extends Component { constructor(props) { super(props); // Bind this this.artOpacityHandler = this.artOpacityHandler.bind(this); } /** * Handle opacity on album art. * * Set opacity on mouseover / mouseout. * * @param ev A JS event. */ artOpacityHandler(ev) { if (ev.type == "mouseover") { // On mouse over, reduce opacity this.refs.art.style.opacity = "1"; this.refs.artText.style.display = "none"; this.refs.artDuration.style.display = "none"; } else { // On mouse out, set opacity back this.refs.art.style.opacity = "0.75"; this.refs.artText.style.display = "block"; this.refs.artDuration.style.display = "block"; } } render() { const { formatMessage } = this.props.intl; // Get current song (eventually undefined) const song = this.props.currentSong; // Current status (play or pause) for localization const playPause = this.props.isPlaying ? "pause" : "play"; // Volume fontawesome icon const volumeIcon = this.props.isMute ? "volume-off" : "volume-up"; // Get classes for random and repeat buttons const randomBtnStyles = ["randomBtn"]; const repeatBtnStyles = ["repeatBtn"]; const playlistBtnStyles = ["playlistBtn"]; if (this.props.isRandom) { randomBtnStyles.push("active"); } if (this.props.isRepeat) { repeatBtnStyles.push("active"); } if (this.props.isPlaylistViewActive) { playlistBtnStyles.push("active"); } // Check if a song is currently playing let art = null; let songTitle = null; let artistName = null; let length = null; if (song) { art = song.get("art"); songTitle = song.get("title"); if (this.props.currentArtist) { artistName = this.props.currentArtist.get("name"); } length = formatLength(song.get("time")); } // Click handlers const onPrev = (function () { $(this.refs.prevBtn).blur(); this.props.onPrev(); }).bind(this); const onPlayPause = (function () { $(this.refs.playPauseBtn).blur(); this.props.onPlayPause(); }).bind(this); const onSkip = (function () { $(this.refs.nextBtn).blur(); this.props.onSkip(); }).bind(this); const onMute = (function () { $(this.refs.volumeBtn).blur(); this.props.onMute(); }).bind(this); const onRepeat = (function () { $(this.refs.repeatBtn).blur(); this.props.onRepeat(); }).bind(this); const onRandom = (function () { $(this.refs.randomBtn).blur(); this.props.onRandom(); }).bind(this); return (
{ length }
{this.props.error}