{"version":3,"sources":["components/TwitterShare/TwitterShare.js","components/FacebookShare/FacebookShare.js","components/ClapButton/components/ClapWrap.js","components/ClapButton/components/ClapIcon.js","components/ClapButton/components/ClapButton.js","components/ClapButton/utils.js","components/ClapButton/components/ClapCount.js","components/ClapButton/components/ClapCountTotal.js","components/ClapButton/index.js","containers/GeneralPage/index.js","actions/pageMetaAction.js","styles/svg-components/Twitter.js"],"names":["TwitterShare","shareUrl","title","count","onClick","className","TwitterShareButton","url","Twitter","FacebookShare","FacebookShareButton","quote","FacebookIcon","size","round","FacebookShareCount","Wrap","styled","div","ClapWrapChildren","ClapWrap","state","displayClear","setState","mouseMove","mouseLeave","children","this","props","onMouseLeave","onMouseMove","React","Component","Icon","svg","isClicked","secondaryColor","theme","css","shockwave","keyframes","ClapButton","button","isHover","primaryColor","textStyles","ClapCount","span","ClapCountTotal","defaultTheme","Clap","unclicked","countTotal","maxCount","bind","onClickClear","tlDuration","triangleBurst","mojs","Burst","parent","radius","angle","shape","scale","stroke","strokeWidth","delay","speed","easing","bezier","duration","circleBurst","fill","countAnimation","Html","el","isShowStart","isShowEnd","y","opacity","then","scaleButton","out","document","getElementById","style","transform","animationTimeline","Timeline","add","nextProps","Object","assign","replay","ClapIcon","iconComponent","getTheme","id","onMouseEnter","Number","toLocaleString","defaultProps","xmlns","viewBox","d","WufooForm","require","GeneralPage","context","params","pageId","slug","slugNoQuery","split","isLoading","page","imageUrl","applauseCount","remainingClaps","twitterCount","enableShare","is404","setApplauseClick","setTwitterClick","checkPageContent","recordDrip","location","pathname","router","push","fetchGeneralPage","data","enable_share","page_title","page_sub_title","onLoadEditData","type","name","page_name","getApplauseCount","getTwitterCount","catch","err","onClearEditData","pageTitle","pageSubTitle","dripTitle","drip","undefined","use_page_hero_image","backgroundImage","page_hero_image","image_aws_url","color","_","isEmpty","page_content","setTwitter","prevState","event","target","tagName","preventDefault","href","getAttribute","replace","indexOf","slice","join","window","pageMeta","metaRobotsContent","pageMetaTitle","getGeneralPageTitle","meta_title_start","meta_title_middle","pageMetaDesc","getPageDesc","meta_description","subtitle","content","page_disallowed","page_no_follow","pageLink","canonicalPath","rel","getCanonicalUrl","meta","link","checkImage","checkHeaderColour","dangerouslySetInnerHTML","__html","navigate","external_form_code","userName","formHash","marginBottom","margin","background","mapStateToProps","createStructuredSelector","connect","dispatch","editData","loadEditData","clearEditData","getPageTitle","fallback","start","middle","desc","metaDesc","path","origin","clean","charAt","length","getTrackPageTitle","trackName","artistName","getTrackPageDesc","styles","getTags","moods","artist","track","includes","allTags","max","checkPrev","tags","newTag","tag","subtag","src"],"mappings":"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","file":"static/js/20.chunk.js?hash=fdd30d51","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport TwitterSVG from 'styles/svg-components/Twitter';\n\nimport {\n TwitterShareButton,\n } from 'react-share';\n\nconst TwitterShare = ({ shareUrl, title, count, onClick }) => (\n
\n \n \n
\n {count}\n
\n \n
\n);\n\nTwitterShare.propTypes = {\n shareUrl: PropTypes.string,\n title: PropTypes.string,\n onClick: PropTypes.func,\n count: PropTypes.number,\n};\n\nexport default TwitterShare;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n FacebookShareButton,\n FacebookIcon,\n FacebookShareCount,\n } from 'react-share';\n\nconst FacebookShare = ({ shareUrl, title }) => (\n
\n \n \n \n {(count) => count}\n \n \n
\n);\n\nFacebookShare.propTypes = {\n shareUrl: PropTypes.string,\n title: PropTypes.string,\n};\n\nexport default FacebookShare;\n","import React from 'react';\nimport styled from 'styled-components';\n\nconst Wrap = styled.div`\n display: inline-block;\n position: relative;\n z-index: 1;\n`;\n\nconst ClapWrapChildren = styled.div`\n position: relative;\n z-index: 2;\n`;\n\nexport default class ClapWrap extends React.Component {\n state = {\n displayClear: false,\n }\n\n onClick = () => {\n if (this.state.displayClear) {\n this.setState({ displayClear: false });\n }\n }\n\n mouseMove = () => {\n if (!this.state.displayClear) {\n this.setState({ displayClear: true });\n }\n }\n\n mouseLeave = () => {\n if (this.state.displayClear) {\n this.setState({ displayClear: false });\n }\n }\n\n render() {\n const { children } = this.props;\n return (\n \n \n {children}\n \n \n );\n }\n}\n","import React from 'react';\nimport styled, { css } from 'styled-components';\n\nconst Icon = styled.svg`\n width: 23px;\n ${({ isClicked, theme: { secondaryColor } }) => css`\n fill: ${!isClicked ? 'none' : secondaryColor};\n stroke: ${!isClicked ? secondaryColor : 'white'};\n stroke-width: ${!isClicked ? '2px' : '1px'};\n `};\n`;\n\nexport default (props) => (\n \n \n \n \n);\n","import styled, { css, keyframes } from 'styled-components';\n\nconst shockwave = ({ theme: { secondaryColor } }) => keyframes`\n0%{\n box-shadow:0 0\n }\n 70%{\n box-shadow:0 0 5px 10px rgba(255,255,255,0)\n }\n 100%{\n box-shadow:0 0 0 0 rgba(255,255,255,0)\n }\n`;\n\nconst ClapButton = styled.button`\n position: relative;\n outline: 1px solid transparent;\n border-radius: 50%;\n background: #fff;\n transition: border 0.1s ease-in;\n &::after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n display: block;\n border-radius: 50%;\n }\n &:hover {\n cursor: pointer;\n }\n ${(props) => props.isHover && css`\n &::after {\n animation: ${shockwave} 2s infinite;\n }\n `}\n ${({ theme: { primaryColor, secondaryColor } }) => css`\n width: 45px;\n height: 45px;\n border: 1px solid ${primaryColor};\n &::after {\n width: 44px;\n height: 44px;\n border-color: ${secondaryColor};\n color: ${secondaryColor};\n fill: ${secondaryColor};\n }\n &:hover, &:focus {\n border: 1px solid ${secondaryColor};\n }\n `}\n`;\n\nexport default ClapButton;\n","import { css } from 'styled-components';\n\nexport const textStyles = css`\n font-size: 0.8rem;\n user-select: none;\n pointer-events: none;\n position: absolute;\n`\n;\n","import styled, { css } from 'styled-components';\nimport { textStyles } from '../utils';\n\nconst ClapCount = styled.span`\n top: -${({ size }) => size / 1.6}px;\n left: ${({ size }) => size / 4}px;\n color: white;\n border-radius: 50%;\n backface-visibility: hidden;\n ${textStyles}\n ${({ theme: { secondaryColor, size } }) => css`\n height: 30px;\n width: 30px;\n line-height: 30px;\n top: -${size / 2}px;\n left: 8px;\n background: ${secondaryColor};\n `}\n`;\n\nexport default ClapCount;\n","import styled, { css } from 'styled-components';\nimport { textStyles } from '../utils';\n\nconst ClapCountTotal = styled.span`\n transform: scale(1);\n text-align: center;\n right: -10px;\n ${textStyles}\n ${({ theme: { primaryColor, size } }) => css`\n top: -18px;\n color: #6f6f6f;\n width: 30px;\n height: 30px;\n background: #f7f7f7;\n border-radius: 100%;\n vertical-align: middle;\n line-height: 30px;\n font-size: 13px;\n font-family: monospace;\n `}\n`;\n\nexport default ClapCountTotal\n;\n","import React from 'react';\nimport mojs from 'mo-js';\nimport { ThemeProvider } from 'styled-components';\n\nimport ClapWrap from './components/ClapWrap';\nimport ClapIcon from './components/ClapIcon';\nimport ClapButton from './components/ClapButton';\nimport ClapCount from './components/ClapCount';\nimport ClapCountTotal from './components/ClapCountTotal';\n\nconst defaultTheme = {\n primaryColor: 'rgb(189, 195, 199)',\n secondaryColor: 'rgb(39, 174, 96)',\n size: 70,\n};\n\nconst Clap = class extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n unclicked: true,\n count: this.props.count,\n countTotal: this.props.countTotal,\n isClicked: props.count > 0,\n isHover: false,\n maxCount: this.props.maxCount,\n };\n this.onClick = this.onClick.bind(this);\n this.onClickClear = this.onClickClear.bind(this);\n }\n\n componentDidMount() {\n const tlDuration = 300;\n const triangleBurst = new mojs.Burst({\n parent: '#clap',\n radius: { 50: 95 },\n count: 5,\n angle: 30,\n children: {\n shape: 'polygon',\n radius: { 6: 0 },\n scale: 1,\n stroke: 'rgba(211,84,0 ,0.5)',\n strokeWidth: 2,\n angle: 210,\n delay: 30,\n speed: 0.2,\n easing: mojs.easing.bezier(0.1, 1, 0.3, 1),\n duration: tlDuration,\n },\n });\n\n const circleBurst = new mojs.Burst({\n parent: '#clap',\n radius: { 50: 75 },\n angle: 25,\n duration: tlDuration,\n children: {\n shape: 'circle',\n fill: 'rgba(149,165,166 ,0.5)',\n delay: 30,\n speed: 0.2,\n radius: { 3: 0 },\n easing: mojs.easing.bezier(0.1, 1, 0.3, 1),\n },\n });\n\n const countAnimation = new mojs.Html({\n el: '#clap--count',\n isShowStart: false,\n isShowEnd: true,\n y: { 0: -30 },\n opacity: { 0: 1 },\n duration: tlDuration,\n }).then({\n opacity: { 1: 0 },\n y: -80,\n delay: tlDuration / 2,\n });\n\n // const opacityStart = this.props.countTotal > 0 && this.state.unclicked ? 1 : 0;\n\n // const countTotalAnimation = new mojs.Html({\n // el: '#clap--count-total',\n // isShowStart: false,\n // isShowEnd: true,\n // opacity: { [opacityStart]: 1 },\n // delay: 3 * tlDuration / 2,\n // duration: tlDuration,\n // y: { 0: -3 },\n // });\n\n const scaleButton = new mojs.Html({\n el: '#clap',\n duration: tlDuration,\n scale: { 1.3: 1 },\n easing: mojs.easing.out,\n });\n\n const clap = document.getElementById('clap');\n clap.style.transform = 'scale(1, 1)';\n this.animationTimeline = new mojs.Timeline();\n this.animationTimeline.add([\n countAnimation,\n // countTotalAnimation,\n scaleButton,\n circleBurst,\n triangleBurst,\n ]);\n }\n componentWillReceiveProps(nextProps) {\n if (this.state.countTotal === 0 && this.state.isClicked === nextProps.isClicked) {\n this.setState({\n countTotal: nextProps.countTotal,\n maxCount: nextProps.maxCount,\n });\n }\n }\n\n getTheme() {\n const { theme = {} } = this.props;\n return Object.assign({}, defaultTheme, theme);\n }\n\n onClick() {\n this.animationTimeline.replay();\n this.setState(({ count, countTotal, maxCount }) => {\n if (maxCount > 0) {\n this.props.onClick();\n return {\n unclicked: false,\n count: count + 1,\n countTotal: countTotal + 1,\n isClicked: true,\n maxCount: maxCount - 1,\n };\n }\n });\n }\n\n onClickClear() {\n this.setState(({ count, countTotal }) => ({\n isClicked: false,\n countTotal: countTotal - count,\n count: 0,\n }));\n }\n\n render() {\n const { count, countTotal, isClicked, isHover } = this.state;\n const { iconComponent: ClapIcon } = this.props;\n return (\n \n \n this.setState({ isHover: true })}\n onMouseLeave={() => this.setState({ isHover: false })}\n isHover={isHover && count === 0}\n >\n \n \n +{count}\n \n \n {Number(countTotal).toLocaleString()}\n \n \n \n \n );\n }\n};\n\nClap.defaultProps = {\n countTotal: 0,\n count: 0,\n maxCount: 50,\n isClicked: false,\n iconComponent: ClapIcon,\n};\n\nexport default Clap;\n","import _ from 'lodash';\nimport React from 'react';\nimport { connect } from 'react-redux';\nimport Helmet from 'react-helmet';\nimport { createStructuredSelector } from 'reselect';\nimport TwitterShare from '../../components/TwitterShare/TwitterShare';\nimport FacebookShare from '../../components/FacebookShare/FacebookShare';\nimport ClapButton from '../../components/ClapButton';\nimport { getGeneralPageTitle, getPageDesc, getCanonicalUrl } from 'actions/pageMetaAction';\nimport { fetchGeneralPage, getApplauseCount, setApplauseClick, setTwitter, getTwitterCount } from 'actions/generalAction';\nimport { loadEditData, clearEditData } from '../../actions/adminAction';\nimport { drip } from 'utils/drip';\nconst WufooForm = require('react-wufoo-embed');\n\nexport class GeneralPage extends React.Component {\n constructor(props, context) {\n super(props, context);\n this.state = {\n parent: this.props.params.parent,\n pageId: this.props.params.slug,\n slugNoQuery: this.props.params.slug.split('?')[0],\n isLoading: false,\n page: {},\n imageUrl: '',\n applauseCount: 0,\n remainingClaps: 0,\n twitterCount: 0,\n enableShare: false,\n };\n\n this.is404 = false;\n\n this.setApplauseClick = this.setApplauseClick.bind(this);\n this.setTwitterClick = this.setTwitterClick.bind(this);\n this.checkPageContent = this.checkPageContent.bind(this);\n this.recordDrip = this.recordDrip.bind(this);\n }\n componentWillMount() {\n if (this.props.location.pathname === '/artist') {\n this.props.router.push('/artists');\n } else if (this.state.slugNoQuery === '') {\n this.props.router.push('/');\n } else {\n this.setState({ slug: this.state.slugNoQuery, page: {}, isLoading: true });\n fetchGeneralPage(this.state.slugNoQuery).then((data) => {\n this.setState({ isLoading: false });\n if (data) {\n this.setState({ page: data, enableShare: data.enable_share });\n\n this.recordDrip(data.page_title, data.page_sub_title);\n\n this.props.onLoadEditData({\n type: 'page',\n id: data.id,\n name: data.page_name\n });\n\n if (data.enable_share) {\n getApplauseCount(slugNoQuery).then((data) => {\n this.setState({ applauseCount: data.applauseCount, remainingClaps: data.remainingClaps });\n });\n getTwitterCount(slugNoQuery).then((data) => {\n this.setState({ twitterCount: data.twitterCount });\n });\n }\n } else {\n this.setState({ page: {} });\n }\n }).catch((err) => err);\n }\n }\n\n componentDidUpdate() {\n if (this.props.params.slug !== this.state.slug) {\n this.setState({ slug: this.props.params.slug, page: {}, isLoading: true });\n fetchGeneralPage(this.props.params.slug).then((data) => {\n this.setState({ isLoading: false });\n if (data) {\n this.setState({ page: data, enableShare: data.enable_share });\n\n this.recordDrip(data.page_title, data.page_sub_title);\n\n if (data.enable_share) {\n getApplauseCount(this.props.params.slug).then((data) => {\n this.setState({ applauseCount: data.applauseCount, remainingClaps: data.remainingClaps });\n });\n getTwitterCount(this.props.params.slug).then((data) => {\n this.setState({ twitterCount: data.twitterCount });\n });\n }\n }\n }).catch((err) => err);\n }\n }\n\n componentWillUnmount() {\n this.props.onClearEditData();\n }\n\n recordDrip(pageTitle, pageSubTitle) {\n let dripTitle = pageTitle;\n\n if (pageSubTitle) {\n dripTitle += \" - \" + pageSubTitle;\n }\n\n drip(\"Visited Page\", dripTitle);\n }\n\n checkImage() {\n if (typeof this.state.page.use_page_hero_image !== undefined) {\n if (this.state.page.use_page_hero_image == 1) {\n return { backgroundImage: `url(${this.state.page.page_hero_image.image_aws_url})` };\n }\n }\n return { backgroundImage: 'none' };\n }\n checkHeaderColour() {\n if (typeof this.state.page.use_page_hero_image !== undefined) {\n if (this.state.page.use_page_hero_image == 1) {\n return null;\n }\n }\n return { color: '#000' };\n }\n checkPageContent() {\n if (this.state.isLoading) {\n return null;\n } else if (!_.isEmpty(this.state.page)) {\n this.is404 = false;\n return this.state.page.page_content;\n } else {\n this.is404 = true;\n return null;\n }\n\n }\n setApplauseClick() {\n setApplauseClick(this.props.params.slug).then((data) => {\n if (data) {\n this.setState({ remainingClaps: data.remainingClaps });\n }\n });\n }\n setTwitterClick() {\n setTwitter(this.props.params.slug).then(() => {\n this.setState((prevState) => ({\n ...prevState,\n twitterCount: prevState.twitterCount + 1,\n }));\n });\n }\n navigate(event) {\n if (event.target.tagName === 'A') {\n event.preventDefault();\n const href = event.target.getAttribute('href').replace(/\\/$/, '');\n if (href.indexOf('musicvine.com') > 0) {\n this.props.router.push(href.split('/').slice(3).join('/'));\n } else {\n window.location = href;\n }\n }\n }\n render() {\n const shareUrl = window.location.href;\n const title = this.state.page.page_title;\n\n // Check page content to see if page 404s\n // TODO: Make this not part of the function that gets page content\n this.checkPageContent();\n\n let pageMeta = [];\n let metaRobotsContent = '';\n\n // Helmet component params.\n const pageMetaTitle = getGeneralPageTitle(\n this.state.page.meta_title_start,\n this.state.page.meta_title_middle,\n this.state.page.page_title,\n this.is404\n );\n const pageMetaDesc = getPageDesc(\n this.state.page.meta_description,\n {\n name: this.state.page.page_title,\n subtitle: this.state.page.page_sub_title\n },\n 'general'\n );\n\n // Set up dynamic page meta\n\n pageMeta.push( { name: 'description', content: pageMetaDesc } );\n\n if (this.state.page.page_disallowed) {\n metaRobotsContent = 'noindex';\n } else {\n metaRobotsContent = 'index';\n }\n\n if (this.state.page.page_no_follow) {\n metaRobotsContent += ', nofollow';\n } else {\n metaRobotsContent += ', follow';\n }\n\n pageMeta.push( { name: 'robots', content: metaRobotsContent } );\n\n let pageLink = [];\n if (!this.is404 && !_.isEmpty(this.state.page)) {\n const canonicalPath = this.state.parent\n ? `/${this.state.parent}/${this.state.slugNoQuery}`\n : `/${this.state.slugNoQuery}`;\n pageLink.push({ rel: 'canonical', href: getCanonicalUrl(canonicalPath) });\n }\n\n return (\n
\n \n {(!_.isEmpty(this.state.page) || this.state.isLoading) &&\n
\n
\n

{this.state.page.page_title}

\n {this.state.page.page_sub_title !== '' &&\n

{this.state.page.page_sub_title}

\n }\n
\n
}\n {(!_.isEmpty(this.state.page) && !this.state.isLoading) && (\n
\n
\n
\n {this.state.enableShare &&
\n \n \n \n
}\n
this.navigate(event)} />\n {this.state.page.external_form_code && }\n
\n
\n
)}\n {(_.isEmpty(this.state.page) && !this.state.isLoading) && !this.is404 && (\n
\n
\n
\n )}\n { this.state.slugNoQuery === '' &&\n
\n
\n }\n { this.is404 && this.state.slugNoQuery !== '' &&\n
\n

Page not found

\n
\n }\n
\n );\n }\n}\n\n\n// Map redux dispatch to local props.\nconst mapDispatchToProps = (dispatch) => ({\n onLoadEditData: (editData) => {\n dispatch(loadEditData(editData));\n },\n onClearEditData: () => {\n dispatch(clearEditData());\n },\n});\n\nconst mapStateToProps = createStructuredSelector({ });\n// Wrap the component to inject dispatch and state into it\nexport default connect(mapStateToProps, mapDispatchToProps)(GeneralPage);\n","export function getPageTitle(title, fallback, type) {\n let separator = \"•\";\n let start = fallback;\n let middle = \"\";\n let end = \"Music Vine\";\n\n if (title && title !== \"\") {\n return title;\n }\n\n if (fallback === undefined || fallback === \"\") {\n return \"\";\n }\n\n switch (type) {\n case 'artist':\n middle = 'Production Music Licensing';\n break;\n case 'collection':\n middle = 'Music For Video';\n break;\n case 'style':\n case 'track':\n middle = 'Music Licensing';\n break;\n case 'general':\n middle = 'Music Licensing';\n break;\n default:\n middle = 'Music Licensing For Video And Film';\n }\n\n return `${start} ${separator} ${middle} ${separator} ${end}`;\n}\n\nexport function getPageDesc(desc, fallback, type) {\n let metaDesc = \"\";\n\n if (desc && desc !== \"\") {\n return desc;\n }\n\n if (fallback === undefined || fallback === \"\") {\n return \"\";\n }\n\n switch (type) {\n case 'collection':\n if (fallback && fallback.desc && fallback.name) {\n metaDesc = `${fallback.desc} Explore '${fallback.name}' on Music Vine.`;\n } else if (fallback && fallback.name) {\n metaDesc = `Browse and license tracks from the ${fallback.name} collection — production music for film, TV and video from Music Vine.`;\n }\n break;\n case 'style':\n if (fallback && fallback.name) {\n metaDesc = `Browse and license ${fallback.name} music for film, TV and video productions — production music from Music Vine's world-class catalog.`;\n }\n break;\n case 'artist':\n if (fallback && fallback.name) {\n metaDesc = `License music from ${fallback.name} on Music Vine — production music for film, TV and video from world-class artists and composers.`;\n }\n break;\n case 'track':\n if (fallback && fallback.name) {\n metaDesc = `License ${fallback.name} on Music Vine — production music for film, TV and video.`;\n }\n break;\n case 'general':\n if (fallback.subtitle) {\n metaDesc = `${fallback.name}. ${fallback.subtitle}`;\n } else {\n metaDesc = fallback.name;\n }\n break;\n default:\n metaDesc = '';\n }\n\n return metaDesc;\n}\n\n// Canonical URLs always point at the production origin (never staging/preview),\n// and drop any query string / hash so faceted variants fold to the base path.\nexport function getCanonicalUrl(path) {\n const origin = \"https://musicvine.com\";\n if (!path || path === \"\") {\n return `${origin}/`;\n }\n let clean = path.split(\"?\")[0].split(\"#\")[0];\n if (clean.charAt(0) !== \"/\") {\n clean = `/${clean}`;\n }\n if (clean.length > 1) {\n clean = clean.replace(/\\/+$/, \"\");\n }\n return `${origin}${clean}`;\n}\n\nexport function getTrackPageTitle(trackName, artistName) {\n let pageTitle = \"\";\n if (trackName && artistName) {\n pageTitle = `${trackName} by ${artistName} • Music Licensing • Music Vine`;\n }\n return pageTitle;\n}\n\nexport function getGeneralPageTitle(start, middle, fallback, is404) {\n let pageTitle = \"\";\n\n if (is404) {\n return \"Page not found • Music Vine\";\n }\n\n if (start) {\n pageTitle = start;\n }\n if (middle) {\n pageTitle += ` • ${middle}`\n }\n if (pageTitle === \"\") {\n if (fallback && fallback !== \"\") {\n pageTitle = `${fallback} • Music Licensing`;\n } else {\n return \"\";\n }\n }\n\n pageTitle += \" • Music Vine\";\n\n return pageTitle;\n}\n\nexport function getTrackPageDesc(data) {\n let metaDesc = \"\";\n\n let styles = getTags(data.styles, 2);\n let moods = getTags(data.moods, 2, styles);\n\n // Listen to this [Mood 1] and [Mood 2] track from [Artist] that's perfect for [Style 1] and [Style 2] productions. License [Track Name] now.\n \n metaDesc = `Listen to this ${moods[0]} and ${moods[1]} track from ${data.artist} that's perfect for ${styles[0]} and ${styles[1]} productions. License ${data.track} now.`;\n\n // If any tag/field came back undefined, fall back to a simpler description\n // rather than shipping an empty meta description.\n if (metaDesc.includes(\"undefined\")) {\n if (data.track && data.artist) {\n metaDesc = `License '${data.track}' by ${data.artist} on Music Vine — production music for film, TV and video.`;\n } else {\n metaDesc = \"\";\n }\n }\n\n return metaDesc;\n}\n\nfunction getTags(allTags, max, checkPrev){\n let tags = [];\n let newTag = false;\n\n for (var tag in allTags) {\n for (var subtag in allTags[tag]) {\n newTag = allTags[tag][subtag][0];\n\n if (checkPrev) {\n if (!checkPrev.includes(newTag)) {\n tags.push(newTag);\n }\n } else {\n tags.push(newTag);\n }\n\n if (tags.length >= max) {\n break;\n }\n }\n\n if (tags.length >= max) {\n break;\n }\n }\n\n return tags;\n}","import React from \"react\";\nimport InlineSVG from 'svg-inline-react';\n\nclass Twitter extends React.Component {\n render() {\n const assetTwitter = `\n \n `;\n\n return (\n \n );\n }\n}\n\nexport default Twitter;\n"],"sourceRoot":""}