|
@ -102,17 +102,9 @@ install:
|
||||||
- sudo -H pip install -r requirements.txt
|
- sudo -H pip install -r requirements.txt
|
||||||
- npm --production=false install
|
- npm --production=false install
|
||||||
- npm --production=false update
|
- npm --production=false update
|
||||||
- cd node_modules/scratch-gui
|
|
||||||
- npm --production=false install
|
|
||||||
- cd node_modules/scratch-blocks
|
|
||||||
- npm --production=false install
|
|
||||||
- cd ../..
|
|
||||||
- npm run build
|
|
||||||
- cd ../..
|
|
||||||
jobs:
|
jobs:
|
||||||
include:
|
include:
|
||||||
- stage: test
|
- stage: test
|
||||||
script: env make build
|
|
||||||
deploy:
|
deploy:
|
||||||
- provider: script
|
- provider: script
|
||||||
skip_cleanup: $SKIP_CLEANUP
|
skip_cleanup: $SKIP_CLEANUP
|
||||||
|
@ -121,7 +113,6 @@ jobs:
|
||||||
repo: LLK/scratch-www
|
repo: LLK/scratch-www
|
||||||
branch:
|
branch:
|
||||||
- develop
|
- develop
|
||||||
- totally-normal
|
|
||||||
- hotfix/*
|
- hotfix/*
|
||||||
- release/*
|
- release/*
|
||||||
- provider: script
|
- provider: script
|
||||||
|
|
|
@ -35,8 +35,7 @@
|
||||||
"react-helmet": "5.2.0",
|
"react-helmet": "5.2.0",
|
||||||
"scratch-docker": "^1.0.2",
|
"scratch-docker": "^1.0.2",
|
||||||
"scratch-parser": "^5.0.0",
|
"scratch-parser": "^5.0.0",
|
||||||
"scratch-storage": "^0.5.1",
|
"scratch-storage": "^0.5.1"
|
||||||
"tone": "^13.4.9"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"ajv": "6.4.0",
|
"ajv": "6.4.0",
|
||||||
|
@ -99,7 +98,7 @@
|
||||||
"react-responsive": "3.0.0",
|
"react-responsive": "3.0.0",
|
||||||
"react-slick": "0.16.0",
|
"react-slick": "0.16.0",
|
||||||
"react-string-replace": "0.4.1",
|
"react-string-replace": "0.4.1",
|
||||||
"scratch-gui": "github:LLK/scratch-gui#totally-normal",
|
"scratch-gui": "0.1.0-prerelease.20190321152316",
|
||||||
"react-telephone-input": "4.3.4",
|
"react-telephone-input": "4.3.4",
|
||||||
"redux": "3.5.2",
|
"redux": "3.5.2",
|
||||||
"redux-thunk": "2.0.1",
|
"redux-thunk": "2.0.1",
|
||||||
|
|
|
@ -1,209 +0,0 @@
|
||||||
const React = require('react');
|
|
||||||
const bindAll = require('lodash.bindall');
|
|
||||||
|
|
||||||
const Modal = require('../modal/base/modal.jsx');
|
|
||||||
|
|
||||||
require('./cats.scss');
|
|
||||||
|
|
||||||
const catImages = [
|
|
||||||
'/images/cats/IMG_9775.jpg',
|
|
||||||
'/images/cats/IMG_9766.jpg',
|
|
||||||
'/images/cats/IMG_9587.jpg',
|
|
||||||
'/images/cats/IMG_6558.jpg',
|
|
||||||
'/images/cats/IMG_6521.jpg',
|
|
||||||
'/images/cats/IMG_6020.jpg',
|
|
||||||
'/images/cats/IMG_5880.jpg',
|
|
||||||
'/images/cats/IMG_3218.jpg',
|
|
||||||
'/images/cats/IMG_2776.jpg',
|
|
||||||
'/images/cats/IMG_2775.jpg',
|
|
||||||
'/images/cats/IMG_2681.jpg',
|
|
||||||
'/images/cats/IMG_1092.jpg',
|
|
||||||
'/images/cats/IMG_0684.jpg',
|
|
||||||
'/images/cats/IMG_0698.jpg',
|
|
||||||
'/images/cats/IMG_0504.jpg',
|
|
||||||
'/images/cats/IMG_0288.jpg',
|
|
||||||
'/images/cats/IMG_0122.jpg',
|
|
||||||
'/images/cats/IMG_2507.jpg',
|
|
||||||
'/images/cats/IMG_1977.jpg',
|
|
||||||
'/images/cats/IMG_1696.jpg',
|
|
||||||
'/images/cats/IMG_1463.jpg',
|
|
||||||
'/images/cats/IMG_1157.jpg',
|
|
||||||
'/images/cats/IMG_0681.jpg',
|
|
||||||
'/images/cats/IMG_0135.jpg',
|
|
||||||
'/images/cats/IMG_0071.jpg',
|
|
||||||
'/images/cats/1.jpg',
|
|
||||||
'/images/cats/2.jpg',
|
|
||||||
'/images/cats/3.jpg',
|
|
||||||
'/images/cats/4.jpg',
|
|
||||||
'/images/cats/Cat1.jpg',
|
|
||||||
'/images/cats/Cat2.jpg',
|
|
||||||
'/images/cats/Cat3.jpg',
|
|
||||||
'/images/cats/Cat4.jpg'
|
|
||||||
];
|
|
||||||
|
|
||||||
/* eslint-disable max-len */
|
|
||||||
const catFacts = [
|
|
||||||
'Cats don\'t have 9 lives, but they DO have 9 toes.',
|
|
||||||
'All cats are turquoise for a few minutes after they\'re born.',
|
|
||||||
'Cats born in the UK prefer tea over water.',
|
|
||||||
'The following fact about cats is not fact.',
|
|
||||||
'This sentence about cats is false.',
|
|
||||||
'Cats aren\'t actually turquoise when they\'re born.',
|
|
||||||
'More cats have been to the moon than I have. ',
|
|
||||||
'Cats are descended from an ancient alien race from the vicinity of Betelgeuse.',
|
|
||||||
'Cats are not not dogs.',
|
|
||||||
'The cat Tom, from Tom and Jerry is actually my alter-ego.',
|
|
||||||
'If a cat winks twice in a row it means they like to wink.',
|
|
||||||
'Cats enjoy playing fetch even more than dogs.',
|
|
||||||
'The internet was created as a way to better share images of cats with loved ones.',
|
|
||||||
'Cats developed tails as a way to get out of doing homework.',
|
|
||||||
'Cats train for marathons by sprinting through your house at very early hours of the morning. ',
|
|
||||||
'Cats read newspapers when no one is looking and they can tell if a camera is on in the room.',
|
|
||||||
'The word "cat" means "sneezing while cold" in 17 languages. ',
|
|
||||||
'Cats are not not adorable.',
|
|
||||||
'Cat is the longest word you can type on the keyboard with only one hand.',
|
|
||||||
'Meow meow mrow. Meow!',
|
|
||||||
'What even is a cat?',
|
|
||||||
'The song "Row, Row, Row your boat" is about the authors pet cat.',
|
|
||||||
'Cat\'s really like listening to music, but only if it is meowsic.',
|
|
||||||
'The first cat was born in 1993.',
|
|
||||||
'The Great Catsby is often considered a favorite among cats.',
|
|
||||||
'When you\'re not home cats will often try on your shoes.',
|
|
||||||
'Cats are actually born in kangaroo pouches.',
|
|
||||||
'My friends cat has so many toes.',
|
|
||||||
'The greatest writer of all time is a cat known as William Shakespurrrr.',
|
|
||||||
'When a cat looks in a mirror it sees purrrrfection.',
|
|
||||||
'What\'s a cats favorite movie? Pitch Purrrrfect.',
|
|
||||||
'It\'s common knowledge that J.K. Meowling is the real author of the Hairy Potter series.',
|
|
||||||
'If my cat went to Hogwarts it would be in Ravenpaw.',
|
|
||||||
'Kitty McPurrs-a-lot would make an excellent name for a cat.',
|
|
||||||
'Cats blame mice for everything.',
|
|
||||||
'Boots & cats & boots & cats & boots & cats & boots & cats.',
|
|
||||||
'When a cat is happy sometimes you can hear the soft whirr of its storage system recording the experience for an upcoming show & tell presentation.',
|
|
||||||
'Some people think cats are aloof but actually they just really respect your independence.',
|
|
||||||
'Modern cats evolved from a creature that looked exactly like Scratch Cat, but more orange.',
|
|
||||||
'The reason there are so many cats on the Internet is that all the servers run on hamster wheels.',
|
|
||||||
'The word "cat" spelled backwards is taco. Wait, no... burrito? Something like that.',
|
|
||||||
'Cats like to attack twist ties, bottle caps, and other reminders of their lack of thumbs.',
|
|
||||||
'Kittens were invented by scientists developing a standard measuring system for "cute."',
|
|
||||||
'Due to the difference between metric units and other systems, 1 "mew" is about 1.6 "mrow" units.',
|
|
||||||
'Cats sometimes knock things off shelves and tables in order to make those items safe from falling.',
|
|
||||||
'A cat\'s tail is usually its second- or third-best friend.',
|
|
||||||
'Catalogs were originally invented to keep logs of cats.',
|
|
||||||
'Catering is food services for cats.',
|
|
||||||
'Meow is slang for miauw.',
|
|
||||||
'A cat is the only physical entity whose weight equals both 1 kilogram and 1 pound.',
|
|
||||||
'Balls of yarn are created by watching videos of cats playing with them in reverse.',
|
|
||||||
'Every time you sneeze a tiny kitten is born.',
|
|
||||||
'In ancient Greece, cats kept humans as pets.',
|
|
||||||
'Bongo cat is the great grandchild of nyancat.',
|
|
||||||
'What\'s a cat\'s best friend? Its purrrrse.',
|
|
||||||
'Sharing video online was created by cats to get the attention they feel they deserve.',
|
|
||||||
'A "catseye" view is a point of view where everything is scratchable.',
|
|
||||||
'Cat videos is the first step in their quest for world domination.',
|
|
||||||
'The cat\'s meow is the cat\'s meow is the cat\'s meow is the cat\'s meow....',
|
|
||||||
'A cat\'s intelligence is distributed throughout its body. Fully half of its brain matter is in its tail.',
|
|
||||||
'Cats evolved chromatophores millions of years before octopuses.',
|
|
||||||
'Cats are able to read minds through their whiskers.',
|
|
||||||
'Soon after birth, cats extend their tails into a breeze and can sail hundreds of feet in the air for miles to find new territory.',
|
|
||||||
'Cats\' memory is encoded in their DNA, which explains the knowing looks on their faces.',
|
|
||||||
'Charles Francis Richter originally created his scale to measure the integrated power of cat purrs.',
|
|
||||||
'Cat hair is being studied for use in building space elevators. Ironically, the first use of space elevators will be as scratching posts.',
|
|
||||||
'When you are not looking, cats stare at a point exactly one foot behind your head.',
|
|
||||||
'The infamous Weddell Sea cats glide from tree to tree in the forests of Dronning Maud.',
|
|
||||||
'Once the antarctic ice melts, archologists believe the origins of cat civilization will be revealed.',
|
|
||||||
'Cats rest on their backs because it helps them to absorb cuteness through their bellies.',
|
|
||||||
'The 21cm hydrogen line was originally named after a 21cm long cat.',
|
|
||||||
'Redshift would be a good name for a cat that does not like you and runs away.',
|
|
||||||
'The MIT mascot is actually a cat that enjoys wood working.',
|
|
||||||
'The cat packing conjecture is a widely accepted mathematical argument that proves an infinite number of cats is a good thing.',
|
|
||||||
'Meor\'s Law states that the number of cats double every 18-24 months.',
|
|
||||||
'A group of cats is called a hairball.',
|
|
||||||
'There are more hairs on the head of a cat than there are scales on the head of a mouse.',
|
|
||||||
'April 32nd is International Pet a Cat Day.',
|
|
||||||
'The Scratch Cat is the only cat on the Internet.',
|
|
||||||
'This sentence about cats is true.',
|
|
||||||
'Cat bites are more common on days that end in y.',
|
|
||||||
'Cats have a minimum of two ears.',
|
|
||||||
'Cattails were developed in a lab as a way to reconstruct cats using plants. It didn’t work.',
|
|
||||||
'Cats developed certain fur patterns to blend in with couch upholstery.',
|
|
||||||
'Cats have thumbs, they’re just really really hard to see.',
|
|
||||||
'Cats are the first most popular pet in the US, after dogs.',
|
|
||||||
'If you rick roll a cat, it will never forgive you.',
|
|
||||||
'Cats persuaded humans to create the internet.',
|
|
||||||
'If you walk under a rainbow and then pet a black cat, it will actually bring you good luck.',
|
|
||||||
'Cats can contain entire universes!',
|
|
||||||
'Every time a hat block gets triggered, a cat starts purring.',
|
|
||||||
'The Jungle Book is a true story based on a cat named Meowgli.',
|
|
||||||
'Camera is a common misspelling of Catmera, a device invented specifically to record cats.',
|
|
||||||
'Cats don\'t steal your breath because it doesn\'t smell like catfood.',
|
|
||||||
'Cats hang out on keyboards in an attempt to send messages to other internet cats.',
|
|
||||||
'Cat is an abbreviation for category.',
|
|
||||||
'Cat is an acronym which stands for Cats Are Terrific.',
|
|
||||||
'When cats are fully enclosed in boxes, they can teleport to alternative universes.',
|
|
||||||
'If you put buttered toast butter-side up, on your cat, then your cat will be able to fly.'
|
|
||||||
];
|
|
||||||
|
|
||||||
/* eslint-enable max-len */
|
|
||||||
|
|
||||||
class Cats extends React.Component {
|
|
||||||
constructor (props) {
|
|
||||||
super(props);
|
|
||||||
bindAll(this, [
|
|
||||||
'handleCatsClick',
|
|
||||||
'handleClose',
|
|
||||||
'pickRandomFact'
|
|
||||||
]);
|
|
||||||
this.state = {
|
|
||||||
open: false
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
handleCatsClick () {
|
|
||||||
this.setState({open: true});
|
|
||||||
}
|
|
||||||
|
|
||||||
handleClose () {
|
|
||||||
this.setState({open: false});
|
|
||||||
}
|
|
||||||
|
|
||||||
pickRandomFact () {
|
|
||||||
const randomNumber = Math.floor(Math.random() * (catFacts.length - 1));
|
|
||||||
const catFact = catFacts[randomNumber];
|
|
||||||
return catFact;
|
|
||||||
}
|
|
||||||
|
|
||||||
pickRandomCatImage () {
|
|
||||||
const randomNumber = Math.floor(Math.random() * (catImages.length - 1));
|
|
||||||
const catImage = catImages[randomNumber];
|
|
||||||
return catImage;
|
|
||||||
}
|
|
||||||
|
|
||||||
render () {
|
|
||||||
return (<React.Fragment>
|
|
||||||
<div onClick={this.handleCatsClick}>
|
|
||||||
<a> {'Cats...?'} </a>
|
|
||||||
</div>
|
|
||||||
<Modal
|
|
||||||
useStandardSizes
|
|
||||||
className="mod-cats"
|
|
||||||
isOpen={this.state.open}
|
|
||||||
onRequestClose={this.handleClose}
|
|
||||||
>
|
|
||||||
<div className="cats-modal-header modal-header">
|
|
||||||
<div className="cats-content-label content-label">
|
|
||||||
{'Did you know...?'}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div className="cats-modal-content modal-content">
|
|
||||||
<p> {this.pickRandomFact()} </p>
|
|
||||||
<img src={this.pickRandomCatImage()} />
|
|
||||||
</div>
|
|
||||||
</Modal>
|
|
||||||
</React.Fragment>
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = Cats;
|
|
|
@ -1,30 +0,0 @@
|
||||||
@import "../../colors";
|
|
||||||
@import "../../frameless";
|
|
||||||
|
|
||||||
.mod-cats {
|
|
||||||
min-height: 15rem;
|
|
||||||
max-height: calc(100% - 8rem);
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cats-modal-header {
|
|
||||||
box-shadow: inset 0 -1px 0 0 $ui-blue-dark;
|
|
||||||
background-color: $ui-blue;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cats-modal-content {
|
|
||||||
margin: 0px auto;
|
|
||||||
box-shadow: none;
|
|
||||||
width: 100%;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
padding: 20px 50px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cats-modal-content img {
|
|
||||||
width: 400px;
|
|
||||||
|
|
||||||
@media #{$small}, #{$small-height} {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -6,7 +6,6 @@ const React = require('react');
|
||||||
|
|
||||||
const FooterBox = require('../container/footer.jsx');
|
const FooterBox = require('../container/footer.jsx');
|
||||||
const LanguageChooser = require('../../languagechooser/languagechooser.jsx');
|
const LanguageChooser = require('../../languagechooser/languagechooser.jsx');
|
||||||
const Cats = require('../../cats/cats.jsx');
|
|
||||||
|
|
||||||
const frameless = require('../../../lib/frameless');
|
const frameless = require('../../../lib/frameless');
|
||||||
|
|
||||||
|
@ -32,9 +31,6 @@ const Footer = props => (
|
||||||
<FormattedMessage id="general.contactUs" />
|
<FormattedMessage id="general.contactUs" />
|
||||||
</a>
|
</a>
|
||||||
</dd>
|
</dd>
|
||||||
<dd>
|
|
||||||
<Cats />
|
|
||||||
</dd>
|
|
||||||
</dl>
|
</dl>
|
||||||
<dl>
|
<dl>
|
||||||
<dd>
|
<dd>
|
||||||
|
@ -96,9 +92,6 @@ const Footer = props => (
|
||||||
<FormattedMessage id="general.press" />
|
<FormattedMessage id="general.press" />
|
||||||
</a>
|
</a>
|
||||||
</dd>
|
</dd>
|
||||||
<dd>
|
|
||||||
<Cats />
|
|
||||||
</dd>
|
|
||||||
</dl>
|
</dl>
|
||||||
<dl>
|
<dl>
|
||||||
<dt>
|
<dt>
|
||||||
|
|
|
@ -8,68 +8,52 @@ const thumbnailUrl = require('../../lib/user-thumbnail');
|
||||||
|
|
||||||
require('./grid.scss');
|
require('./grid.scss');
|
||||||
|
|
||||||
const Grid = props => {
|
const Grid = props => (
|
||||||
|
<div className={classNames('grid', props.className)}>
|
||||||
const surpriseClass = props.isEggShaped ? 'egg' : '';
|
<FlexRow>
|
||||||
|
{props.items.map((item, key) => {
|
||||||
return (
|
const href = `/${props.itemType}/${item.id}/`;
|
||||||
<div
|
if (props.itemType === 'projects') {
|
||||||
className={classNames(
|
|
||||||
'grid',
|
|
||||||
props.className,
|
|
||||||
surpriseClass
|
|
||||||
)}
|
|
||||||
>
|
|
||||||
<FlexRow>
|
|
||||||
{props.items.map((item, key) => {
|
|
||||||
const href = `/${props.itemType}/${item.id}/`;
|
|
||||||
const pianoFunc = props.onPianoEnter ? () => props.onPianoEnter(key) : null;
|
|
||||||
if (props.itemType === 'projects') {
|
|
||||||
return (
|
|
||||||
<Thumbnail
|
|
||||||
avatar={thumbnailUrl(item.author.id)}
|
|
||||||
creator={item.author.username}
|
|
||||||
favorites={item.stats.favorites}
|
|
||||||
href={href}
|
|
||||||
key={key}
|
|
||||||
loves={item.stats.loves}
|
|
||||||
remixes={item.stats.remixes}
|
|
||||||
showAvatar={props.showAvatar}
|
|
||||||
showFavorites={props.showFavorites}
|
|
||||||
showLoves={props.showLoves}
|
|
||||||
showRemixes={props.showRemixes}
|
|
||||||
showViews={props.showViews}
|
|
||||||
src={item.image}
|
|
||||||
title={item.title}
|
|
||||||
type={'project'}
|
|
||||||
views={item.stats.views}
|
|
||||||
onPianoEnter={pianoFunc}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return (
|
return (
|
||||||
<Thumbnail
|
<Thumbnail
|
||||||
|
avatar={thumbnailUrl(item.author.id)}
|
||||||
|
creator={item.author.username}
|
||||||
|
favorites={item.stats.favorites}
|
||||||
href={href}
|
href={href}
|
||||||
key={key}
|
key={key}
|
||||||
owner={item.owner}
|
loves={item.stats.loves}
|
||||||
|
remixes={item.stats.remixes}
|
||||||
|
showAvatar={props.showAvatar}
|
||||||
|
showFavorites={props.showFavorites}
|
||||||
|
showLoves={props.showLoves}
|
||||||
|
showRemixes={props.showRemixes}
|
||||||
|
showViews={props.showViews}
|
||||||
src={item.image}
|
src={item.image}
|
||||||
title={item.title}
|
title={item.title}
|
||||||
type={'gallery'}
|
type={'project'}
|
||||||
onPianoEnter={pianoFunc}
|
views={item.stats.views}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
})}
|
}
|
||||||
</FlexRow>
|
return (
|
||||||
</div>
|
<Thumbnail
|
||||||
);
|
href={href}
|
||||||
};
|
key={key}
|
||||||
|
owner={item.owner}
|
||||||
|
src={item.image}
|
||||||
|
title={item.title}
|
||||||
|
type={'gallery'}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</FlexRow>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
|
||||||
Grid.propTypes = {
|
Grid.propTypes = {
|
||||||
className: PropTypes.string,
|
className: PropTypes.string,
|
||||||
isEggShaped: PropTypes.bool,
|
|
||||||
itemType: PropTypes.string,
|
itemType: PropTypes.string,
|
||||||
items: PropTypes.arrayOf(PropTypes.object),
|
items: PropTypes.arrayOf(PropTypes.object)
|
||||||
onPianoEnter: PropTypes.func,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Grid.defaultProps = {
|
Grid.defaultProps = {
|
||||||
|
|
|
@ -88,15 +88,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.egg {
|
|
||||||
.thumbnail {
|
|
||||||
margin: 7px 27px !important;
|
|
||||||
width: 180px !important;
|
|
||||||
border-radius: 50% 50% 50% 50% / 60% 60% 40% 40% !important;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&.column {
|
&.column {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
|
|
@ -8,8 +8,6 @@ const Thumbnail = props => {
|
||||||
const extra = [];
|
const extra = [];
|
||||||
const info = [];
|
const info = [];
|
||||||
|
|
||||||
const surpriseClass = props.onPianoEnter ? 'pianoKey' : '';
|
|
||||||
|
|
||||||
if (props.loves && props.showLoves) {
|
if (props.loves && props.showLoves) {
|
||||||
extra.push(
|
extra.push(
|
||||||
<div
|
<div
|
||||||
|
@ -112,16 +110,13 @@ const Thumbnail = props => {
|
||||||
</a>
|
</a>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className={classNames(
|
className={classNames(
|
||||||
'thumbnail',
|
'thumbnail',
|
||||||
props.type,
|
props.type,
|
||||||
props.className,
|
props.className
|
||||||
surpriseClass
|
|
||||||
)}
|
)}
|
||||||
onMouseEnter={props.onPianoEnter}
|
|
||||||
>
|
>
|
||||||
{imgElement}
|
{imgElement}
|
||||||
<div className="thumbnail-info">
|
<div className="thumbnail-info">
|
||||||
|
@ -144,7 +139,6 @@ Thumbnail.propTypes = {
|
||||||
href: PropTypes.string,
|
href: PropTypes.string,
|
||||||
linkTitle: PropTypes.bool,
|
linkTitle: PropTypes.bool,
|
||||||
loves: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
loves: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
||||||
onPianoEnter: PropTypes.func,
|
|
||||||
remixes: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
remixes: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
||||||
showAvatar: PropTypes.bool,
|
showAvatar: PropTypes.bool,
|
||||||
showFavorites: PropTypes.bool,
|
showFavorites: PropTypes.bool,
|
||||||
|
|
|
@ -108,10 +108,4 @@
|
||||||
height: $gallery-height;
|
height: $gallery-height;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.pianoKey {
|
|
||||||
&:hover {
|
|
||||||
box-shadow: 0 0 0 3px #4d97ff;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,83 +0,0 @@
|
||||||
const tone = require('tone');
|
|
||||||
|
|
||||||
tone.Master.volume.value = -25;
|
|
||||||
|
|
||||||
const synthPiano = new tone.MonoSynth({
|
|
||||||
oscillator: {
|
|
||||||
type: 'square'
|
|
||||||
},
|
|
||||||
filter: {
|
|
||||||
Q: 2,
|
|
||||||
type: 'lowpass',
|
|
||||||
rolloff: -12
|
|
||||||
},
|
|
||||||
envelope: {
|
|
||||||
attack: 0.005,
|
|
||||||
decay: 3,
|
|
||||||
sustain: 0,
|
|
||||||
release: 0.45
|
|
||||||
},
|
|
||||||
filterEnvelope: {
|
|
||||||
attack: 0.5,
|
|
||||||
decay: 0.32,
|
|
||||||
sustain: 0.9,
|
|
||||||
release: 3,
|
|
||||||
baseFrequency: 700,
|
|
||||||
octaves: 2.3
|
|
||||||
}
|
|
||||||
}).toMaster();
|
|
||||||
|
|
||||||
const synthSaw = new tone.Synth({
|
|
||||||
oscillator: {
|
|
||||||
type: 'fatsawtooth',
|
|
||||||
count: 3,
|
|
||||||
spread: 30
|
|
||||||
},
|
|
||||||
envelope: {
|
|
||||||
attack: 0.01,
|
|
||||||
decay: 0.1,
|
|
||||||
sustain: 0.5,
|
|
||||||
release: 0.4,
|
|
||||||
attackCurve: 'exponential'
|
|
||||||
}
|
|
||||||
}).toMaster();
|
|
||||||
|
|
||||||
const synthWah = new tone.MonoSynth({
|
|
||||||
oscillator: {
|
|
||||||
type: 'pwm',
|
|
||||||
modulationFrequency: 1
|
|
||||||
},
|
|
||||||
filter: {
|
|
||||||
Q: 6,
|
|
||||||
rolloff: -24
|
|
||||||
},
|
|
||||||
envelope: {
|
|
||||||
attack: 0.025,
|
|
||||||
decay: 0.3,
|
|
||||||
sustain: 0.9,
|
|
||||||
release: 2
|
|
||||||
},
|
|
||||||
filterEnvelope: {
|
|
||||||
attack: 0.245,
|
|
||||||
decay: 0.131,
|
|
||||||
sustain: 0.5,
|
|
||||||
release: 2,
|
|
||||||
baseFrequency: 20,
|
|
||||||
octaves: 7.2,
|
|
||||||
exponent: 2
|
|
||||||
}
|
|
||||||
}).toMaster();
|
|
||||||
|
|
||||||
const piano = (noteNumber, instrument) => {
|
|
||||||
const notes = ['C4', 'D4', 'E4', 'F4', 'G4', 'A4', 'B4', 'C5'];
|
|
||||||
|
|
||||||
if (instrument === 0) {
|
|
||||||
synthPiano.triggerAttackRelease(notes[noteNumber % 8], '16n');
|
|
||||||
} else if (instrument === 1) {
|
|
||||||
synthSaw.triggerAttackRelease(notes[noteNumber % 8], '8n');
|
|
||||||
} else if (instrument === 2) {
|
|
||||||
synthWah.triggerAttackRelease(notes[noteNumber % 8], '4n');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports = piano;
|
|
|
@ -19,8 +19,6 @@ const Grid = require('../../components/grid/grid.jsx');
|
||||||
|
|
||||||
require('./explore.scss');
|
require('./explore.scss');
|
||||||
|
|
||||||
const piano = require('../../lib/piano');
|
|
||||||
|
|
||||||
class Explore extends React.Component {
|
class Explore extends React.Component {
|
||||||
constructor (props) {
|
constructor (props) {
|
||||||
super(props);
|
super(props);
|
||||||
|
@ -29,7 +27,6 @@ class Explore extends React.Component {
|
||||||
'handleGetExploreMore',
|
'handleGetExploreMore',
|
||||||
'changeItemType',
|
'changeItemType',
|
||||||
'handleChangeSortMode',
|
'handleChangeSortMode',
|
||||||
'handlePianoHover',
|
|
||||||
'getBubble',
|
'getBubble',
|
||||||
'getTab'
|
'getTab'
|
||||||
]);
|
]);
|
||||||
|
@ -41,10 +38,6 @@ class Explore extends React.Component {
|
||||||
componentDidMount () {
|
componentDidMount () {
|
||||||
this.handleGetExploreMore();
|
this.handleGetExploreMore();
|
||||||
}
|
}
|
||||||
handlePianoHover (noteNumber) {
|
|
||||||
const instumentNumber = this.state.acceptableModes.indexOf(this.state.mode) % 3;
|
|
||||||
piano(noteNumber, instumentNumber);
|
|
||||||
}
|
|
||||||
getExploreState () {
|
getExploreState () {
|
||||||
const categoryOptions = {
|
const categoryOptions = {
|
||||||
all: '*',
|
all: '*',
|
||||||
|
@ -214,7 +207,6 @@ class Explore extends React.Component {
|
||||||
showFavorites={false}
|
showFavorites={false}
|
||||||
showLoves={false}
|
showLoves={false}
|
||||||
showViews={false}
|
showViews={false}
|
||||||
onPianoEnter={this.state.category === 'music' ? this.handlePianoHover : null}
|
|
||||||
/>
|
/>
|
||||||
<Button
|
<Button
|
||||||
onClick={this.handleGetExploreMore}
|
onClick={this.handleGetExploreMore}
|
||||||
|
|
Before Width: | Height: | Size: 1.1 MiB |
|
@ -1,52 +0,0 @@
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="113.01338958740234" height="65.30858612060547" viewBox="5.551851272583008 12.819059371948242 113.01338958740234 65.30858612060547" version="1.1" xml:space="preserve">
|
|
||||||
<defs/>
|
|
||||||
<g>
|
|
||||||
<title>fish-a</title>
|
|
||||||
<desc>Created with Sketch.</desc>
|
|
||||||
<g id="ocean" stroke="none" fill-rule="evenodd">
|
|
||||||
<g id="fish-a">
|
|
||||||
<g id="Clownfish">
|
|
||||||
<g id="flipper1" fill-rule="nonzero">
|
|
||||||
<path d="M 38 36.9 C 36.5 36.6 37.1 36.7 36.8 35.4 C 36.5 33.7 35 32.4 34.6 30.6 C 34.3 29.1 34.5 26.4 35.3 25.1 C 36.6 22.9 37.7 21.2 40.2 20.2 C 42.1 19.5 43.9 19.7 45.8 19.4 C 48.1 19.1 49.9 20.4 52 21.1 C 54.5 21.9 57.3 22.9 59.9 23 C 60.6 23 61.5 23 62.2 22.7 C 62.8 22.4 63.2 21.8 63.8 21.6 C 65.7 21 68.2 22 69.9 20.5 C 71.6 19 70.7 16.4 72.9 15.4 C 73.7 15.1 74.4 15 75.1 14.5 C 76 13.9 76.7 14.1 77.8 13.7 C 80.4 12.8 81.9 13.6 84 15 C 84.6 15.4 85.2 16 85.8 16.2 C 86.2 16.4 86.7 16.4 87 16.5 C 88.3 17.1 88.3 17.1 89.1 20.2 C 89.6 22.2 89 28.2 89 28.2 L 38 36.9 Z " id="Shape" fill="#120201" stroke-width="1"/>
|
|
||||||
<path d="M 40.3 38.8 C 38.8 38.5 39.4 38.6 39.1 37.3 C 38.8 35.6 37.6 35.7 37.3 33.9 C 37 32.4 35.6 29.9 36.4 28.5 C 37.7 26.3 38.4 23.2 41 22.2 C 42.9 21.5 44.7 21.7 46.6 21.4 C 48.9 21.1 50.7 22.4 52.8 23.1 C 55.3 23.9 58.1 24.9 60.7 25 C 61.4 25 62.3 25 63 24.7 C 63.6 24.4 64 23.8 64.6 23.6 C 66.5 23 69 24 70.7 22.5 C 72.4 21 71.5 18.4 73.7 17.4 C 74.5 17.1 75.2 17 75.9 16.5 C 76.8 15.9 77.5 16.1 78.6 15.7 C 81.2 14.8 82.7 15.6 84.8 17 C 85.4 17.4 86 18 86.6 18.2 C 87 18.4 87.5 18.4 87.8 18.5 C 89.1 19.1 89.1 19.1 89.9 22.2 C 90.4 24.2 89.8 30.2 89.8 30.2 L 40.3 38.8 Z " id="Shape" fill="#E85F1A" stroke-width="1"/>
|
|
||||||
<path d="M 70 20.7 C 68.4 22.2 65.9 21.2 63.9 21.8 C 63.3 22 62.9 22.6 62.3 22.9 C 61.6 23.2 60.7 23.2 60 23.2 C 57.9 23.1 55.7 22.4 53.6 21.8 C 54.6 23.7 55.4 25.9 56.1 27.5 C 56.2 27.8 56.4 28.1 56.5 28.4 C 56.5 28.4 56.5 28.4 56.5 28.4 C 56.5 28.4 56.5 28.5 56.5 28.5 C 56.5 28.6 56.6 28.6 56.6 28.7 C 56.9 29.4 57.1 30 57.3 30.7 C 57.6 31.7 57.9 32.7 58.2 33.7 L 75.4 30.8 C 74.9 29.4 74.4 28.2 73.9 27 C 73.8 26.7 73.1 25.1 72.9 24.8 C 72 22.9 70 20.6 70 20.7 C 70 20.6 70 20.6 70 20.7 Z " id="Shape" fill="#FCC3AC" stroke-width="1"/>
|
|
||||||
<path d="M 52.5 27.8 C 51.7 25 50.6 22.4 49.1 19.9 C 48.6 19.7 48.1 19.6 47.6 19.5 C 49.4 22.2 50.7 25.1 51.5 28.2 C 50.1 28.7 48.8 29.3 47.4 29.9 C 46.4 26.3 45.3 22.8 43.4 19.6 C 43 19.6 42.7 19.6 42.3 19.7 C 44.3 22.9 45.5 26.6 46.5 30.3 C 45.9 30.6 45.2 30.9 44.6 31.3 C 44.4 31.4 44.2 31.5 44 31.6 C 42.5 27.9 40.6 24.5 38.2 21.3 C 37.9 21.5 37.7 21.7 37.5 22 C 39.8 25.1 41.7 28.5 43.1 32.1 C 42.5 32.4 41.9 32.8 41.3 33.2 C 40.4 31.6 39.2 30.2 37.9 29 C 36.9 28.1 36 27 34.9 26.1 C 34.8 26.4 34.7 26.8 34.6 27.2 C 35.5 28 36.3 29 37.1 29.8 C 38.4 31 39.5 32.3 40.4 33.8 C 39.2 34.6 38 35.3 36.8 36.2 C 36.8 36.2 36.8 36.2 36.8 36.2 C 36.8 36.3 36.8 36.3 36.8 36.4 C 36.8 36.4 36.8 36.5 36.8 36.5 C 36.8 36.5 36.8 36.5 36.8 36.5 C 36.8 36.5 36.8 36.6 36.8 36.6 C 36.8 36.6 36.8 36.6 36.8 36.6 C 36.8 36.6 36.8 36.7 36.9 36.7 C 36.9 36.7 36.9 36.7 36.9 36.7 C 36.9 36.7 37 36.7 37 36.8 C 37 36.8 37 36.8 37 36.8 C 37.1 36.8 37.2 36.9 37.4 36.9 C 37.4 36.9 37.4 36.9 37.5 36.9 C 37.6 36.9 37.7 36.9 37.8 37 L 59.9 33.3 L 58.2 26.3 C 58.1 26.3 52.8 27.7 52.5 27.8 Z " id="Shape" fill="#F47621" stroke-width="1"/>
|
|
||||||
<path d="M 68.9 24.8 C 68.6 23.7 68.2 22.6 67.8 21.5 C 67.5 21.5 67.2 21.5 67 21.5 C 67.4 22.6 67.8 23.7 68.1 24.8 C 66.8 24.9 65.5 25 64.1 25.2 C 64 25.2 64 25.2 63.9 25.2 C 63.6 24.2 63.2 23.3 62.9 22.3 C 62.7 22.5 62.5 22.6 62.3 22.7 C 62.3 22.7 62.3 22.7 62.3 22.7 C 62.6 23.5 62.9 24.4 63.2 25.2 C 61.9 25.4 60.6 25.6 59.3 25.9 C 58.9 24.8 58.5 23.8 58 22.7 C 57.7 22.6 57.4 22.6 57 22.5 C 57.5 23.7 58.4 26.1 58.4 26.1 L 60.1 33.1 L 61.4 32.9 L 65.1 32.3 L 67.3 31.9 L 70.7 31.5 L 68.9 24.8 Z " id="Shape" fill="#FFFFFF" stroke-width="1"/>
|
|
||||||
<path d="M 86.6 26.9 C 86.8 23.3 86.7 19.7 85.9 16.3 C 85.5 16.1 85.1 15.8 84.7 15.5 C 85.6 19.1 85.8 22.9 85.6 26.6 C 84.7 26.3 83.8 26.1 82.9 25.9 C 83 21.7 82.7 17.6 81.4 13.6 C 81 13.5 80.7 13.4 80.3 13.4 C 81.7 17.3 82.1 21.5 81.9 25.6 C 81 25.4 80 25.2 79.1 25.1 C 79 21.3 78.4 17.5 77 14 C 76.7 14.1 76.3 14.1 76 14.2 C 77.4 17.6 78 21.2 78.1 24.9 C 77.3 24.8 76.5 24.7 75.7 24.7 C 74.9 21.7 73.8 18.8 72.3 16 C 72 16.3 71.8 16.6 71.6 17 C 72.8 19.5 73.9 22 74.6 24.7 C 74.3 24.7 69.3 24.7 69 24.7 L 70.8 31.5 C 70.8 31.5 89.3 28.2 89.3 28.1 C 89.3 28.1 89.3 28.1 89.3 28.1 C 89.3 28 89.3 27.9 89.3 27.8 C 89.3 27.8 89.3 27.8 89.3 27.8 C 88.4 27.5 87.5 27.2 86.6 26.9 Z " id="Shape" fill="#F47621" stroke-width="1"/>
|
|
||||||
</g>
|
|
||||||
<g id="flipper2" fill-rule="nonzero">
|
|
||||||
<path d="M 46.8 51.4 C 45.2 52.1 43.3 52.4 41.7 53.1 C 40.9 53.4 39.4 53.9 38.5 54.7 C 38 54.8 37.5 55 37.1 55.2 C 36 55.6 34.2 56.2 33.7 57.5 C 33.2 58.7 33.9 59.6 34 60.7 C 34 61.5 34.1 62 34.3 63 C 34.5 63.6 35 64.3 35.6 64.5 C 36.3 64.8 36.7 64.2 37.3 64.7 C 37.5 64.9 37.7 65.6 37.9 65.9 C 38.3 66.6 39.1 66.8 39.8 67 C 41.8 67.4 43.3 66.1 45.2 66.7 C 47.1 67.3 47.6 68.2 49.1 67.8 C 51.4 67.2 53.9 66.4 56 65.4 C 56.4 65.2 56.9 64.9 57.6 64.6 C 58.7 64.2 59.7 63.8 60.7 63.4 C 62.6 62.5 68.5 59.2 69.1 58.2 L 46.8 51.4 Z " id="Shape" fill="#000600" stroke-width="1"/>
|
|
||||||
<path d="M 46.8 51.4 C 45.2 52.1 43.3 52.4 41.7 53.1 C 40.6 53.5 38.4 54.2 37.9 55.4 C 37.4 56.6 38.5 57.4 38.6 58.5 C 38.6 59.3 37.9 59.9 38.1 60.8 C 38.3 61.4 38.8 62.1 39.4 62.3 C 40.1 62.6 41.4 61.9 41.9 62.5 C 42.1 62.7 41.9 63.4 42.1 63.7 C 42.5 64.4 43.3 64.6 44 64.8 C 46 65.2 47.9 64.4 49.8 64.5 C 50.4 66.3 52.2 66 53.7 65.6 C 56 65 58.5 64.2 60.6 63.2 C 62.5 62.3 68.4 59 69 58 L 46.8 51.4 Z " id="Shape" fill="#E85F1A" stroke-width="1"/>
|
|
||||||
<path d="M 41.6 53.1 C 41.6 53.1 39.3 53.9 38.4 54.7 C 38.3 54.7 38.2 54.8 38.1 54.8 C 39.2 55.2 40.4 55.5 41.5 55.8 C 39 56.5 36.4 56.9 33.8 57.3 C 33.8 57.4 33.7 57.4 33.7 57.5 C 33.6 57.8 33.5 58.1 33.5 58.4 C 36.8 58 40.2 57.5 43.3 56.4 C 44.5 56.8 45.8 57.1 47 57.5 C 43 59.8 38.7 61.6 34.2 62.9 C 34.2 62.9 34.2 62.9 34.2 63 C 34.3 63.3 34.4 63.6 34.6 63.8 C 39.4 62.4 44 60.4 48.3 57.8 C 49.2 58 50.1 58.3 50.9 58.5 C 49.3 59.9 47.6 61.3 45.8 62.6 C 43.8 64 41.6 65.6 39.3 66.9 C 39.4 66.9 39.5 66.9 39.6 67 C 40.2 67.1 40.7 67.1 41.3 67 C 43.1 65.9 44.8 64.7 46.4 63.5 C 48.4 62.1 50.3 60.5 52.2 58.9 C 53.4 59.2 54.6 59.5 55.8 59.8 C 53 62.7 50 65.3 46.6 67.4 C 47 67.6 47.4 67.8 47.7 67.9 C 51.1 65.7 54.2 63.1 56.9 60.1 C 56.9 60.1 61.2 61.5 63.3 62 C 65.5 60.7 68.5 58.9 68.8 58.3 L 46.7 51.7 C 45.2 52 41.6 53.1 41.6 53.1 Z " id="Shape" fill="#F47621" stroke-width="1"/>
|
|
||||||
</g>
|
|
||||||
<g id="fin2">
|
|
||||||
<path d="M 86.1 57.7 C 85 58 83.7 58.1 82.6 58.5 C 82.4 58.6 82.2 58.7 81.9 58.9 C 81 59.6 81 60.6 80.5 61.6 C 80.3 61.7 80 61.7 79.8 61.8 C 77.9 62.5 79.1 63.4 77.9 64.7 C 77.1 65.5 76.3 66.6 76.6 67.7 C 76.7 68 76.6 69.1 76.3 69.6 C 75.7 70.6 76.1 70.7 76.3 71.6 C 76.5 72.3 76.2 72.6 76.2 73.5 C 76.2 74.4 76.5 75.3 77.3 75.8 C 78.6 76.7 79.1 75.7 80.2 75.3 C 80.6 76.2 79.2 78.8 81.7 77 C 84.1 75.3 86 72.9 87.8 70.7 C 89 69.4 90.1 68.1 91.2 66.8 C 92.5 65.3 93.8 63.7 95 62.1 C 95.7 61.1 96.2 60 96.9 59.1 L 86.1 57.7 Z " id="Shape" fill="#000600" fill-rule="nonzero" stroke-width="1"/>
|
|
||||||
<path d="M 86.6 57.7 C 85.5 58 84.2 58.1 83.1 58.5 C 81.2 59.2 81.6 61 80.4 62.3 C 79.6 63.1 79.6 63.3 79.9 64.4 C 80 64.7 80.2 65 80.1 65.4 C 80 66 79.8 65.8 79.6 66.3 C 79 67.3 79.4 67.4 79.6 68.3 C 79.8 69 79.5 69.3 79.5 70.2 C 79.5 71.1 79.8 72 80.6 72.5 C 81.9 73.4 82.5 75.5 85 73.7 C 87.6 71.9 89.6 69.2 91.7 66.8 C 93 65.3 94.3 63.7 95.5 62.1 C 96.2 61.1 96.7 60 97.4 59.1 L 86.6 57.7 Z " id="Shape" fill="#E85F1A" fill-rule="nonzero" stroke-width="1"/>
|
|
||||||
<path d="M 91.1 58.3 L 90 58.2 C 90 58.3 90 58.4 89.9 58.5 C 89.6 59 89.4 59.5 89.1 60.1 C 87.4 61.8 85.5 63.4 83.6 64.9 C 81.4 66.6 78.8 68.8 76 69.9 C 75.8 70.4 75.9 70.6 76 71 C 78.6 70.1 80.9 68.2 83 66.7 C 84.4 65.6 85.8 64.5 87.1 63.4 C 84.2 67.8 80.6 71.8 76.5 75 C 76.7 75.3 76.9 75.6 77.2 75.8 C 81.8 72.2 85.9 67.5 89 62.5 C 87.2 67.9 84.1 72.9 80.2 77.1 C 80.2 77.7 80.4 77.9 81.6 77.1 C 86 72.2 89.3 66.3 90.8 60 C 90.8 60 90.8 60 90.8 60 C 91 59.8 91 59.6 90.9 59.5 C 90.9 59.3 91 59.1 91 58.9 C 90.9 58.7 91 58.5 91.1 58.3 Z " id="Shape" fill="#F47621" fill-rule="nonzero" stroke-width="1"/>
|
|
||||||
<path d="M 83.1 61 C 82 61.3 80.7 61.4 79.6 61.8 C 77.7 62.5 78.9 63.4 77.7 64.7 C 76.9 65.5 76.1 66.6 76.4 67.7 C 76.5 68 76.4 69.1 76.1 69.6 C 75.5 70.6 75.9 70.7 76.1 71.6 C 76.3 72.3 76 72.6 76 73.5 C 76 74.4 76.3 75.3 77.1 75.8 C 78.4 76.7 78.9 75.7 80 75.3 C 80.4 76.2 79 78.8 81.5 77 C 84.1 75.2 86.1 72.5 88.2 70.1 C 89.5 68.6 90.8 67 92 65.4 C 92.7 64.4 93.2 63.3 93.9 62.4 L 83.1 61 Z " id="Shape" stroke-width="1" fill="none"/>
|
|
||||||
</g>
|
|
||||||
<g id="body" fill-rule="nonzero">
|
|
||||||
<path d="M 32.6 40.1 C 36.1 36.8 41 33.7 45.3 31.3 C 51.7 27.7 57.6 26.1 64.8 25.2 C 78.7 23.4 91.2 26.5 102.8 34.6 C 108.6 38.6 114.9 41.7 117.9 48.2 C 118.9 49.4 113.8 51.7 110.7 51.9 C 113.6 54.8 118.7 50.7 118 52 C 117 54.2 113.7 56.9 112.7 57.4 C 104 62.2 92.2 66.9 82.2 65.3 C 68.5 63.1 54.5 60.1 41.1 56.2 C 39.2 55.7 34.7 54.3 34.7 54.3 C 32.3 53 33.1 51.5 31.4 49.7 L 32.6 40.1 Z " id="Shape" fill="#F47621" stroke-width="1"/>
|
|
||||||
<path d="M 100 60.3 C 97.2 57.6 94.2 54.5 93.1 50.6 C 91.3 44.1 94.8 37.3 98.9 32.1 C 96 30.4 93 28.9 90 27.8 C 89.9 27.9 89.8 28 89.7 28.1 C 87.2 31.4 84.9 34.9 84.7 39.1 C 84.2 47.7 90 60 98.1 63.7 C 99.6 63.2 101.1 62.7 102.6 62.1 C 101.8 61.6 100.7 60.9 100 60.3 Z " id="Shape" fill="#FFFFFF" stroke-width="1"/>
|
|
||||||
<path d="M 64.1 25.2 C 59.1 25.8 55.9 26.9 55.9 26.9 C 58.5 32.9 60.3 39.4 60.9 45.9 C 61.3 49.9 62.4 56.2 61.9 61.6 C 65.5 62.4 69.1 63.1 72.7 63.8 C 73.2 63.5 73.8 63.1 74.3 62.6 C 84.5 51.7 73 25.1 72.8 24.8 C 70 24.6 67.1 24.8 64.1 25.2 Z " id="Shape" fill="#FFFFFF" stroke-width="1"/>
|
|
||||||
<g id="eye">
|
|
||||||
<path d="M 104 49.2 C 106.5 49 108.6 46.7 108.4 44.8 C 108.3 43.3 106.9 42 104.4 41.7 C 100.5 41.2 98.9 43.6 99 45.8 C 99 47.4 101.4 49.4 104 49.2 Z " id="Shape" fill="#FFFFFF" stroke-width="1"/>
|
|
||||||
<path d="M 102.5 45.9 C 103.2 45.5 103 44.1 102 43.7 C 102.2 43.5 102.5 43.5 102.8 43.4 C 105.8 42.6 106.7 45.7 104.8 47 C 103.4 47.9 101.9 47.1 101.8 46.2 C 102 46.2 102.3 46.1 102.5 45.9 Z " id="Shape" fill="#000600" stroke-width="1"/>
|
|
||||||
<path d="M 98.2 40.8 C 100 38.8 102.9 38.6 105.3 39.3 C 106.2 39.5 106.5 38.2 105.7 38 C 102.8 37.2 99.3 37.5 97.2 39.8 C 96.7 40.5 97.7 41.5 98.2 40.8 Z " id="Shape" fill="#E85F1A" stroke-width="1"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
<g id="fin" fill-rule="nonzero">
|
|
||||||
<path d="M 86.3 56.9 C 86.3 57 79.1 60.1 77.4 60.2 C 74.2 60.4 72.4 59.4 70.4 57.2 C 70 56.8 69.2 56.6 68.8 56.1 C 68.3 55.4 67.8 54.7 67.7 53.9 C 67.6 52.6 67.2 51.6 66.6 50.5 C 65.9 49.2 65.9 47.7 65.8 46.2 C 65.7 44.7 66.6 44 67.5 42.8 C 68.1 42.1 68.7 41 69.6 40.7 C 70.1 40.5 70.8 40.7 71.4 40.6 C 72 40.5 72.5 40 73.2 40.1 C 74.3 40.3 75.3 41.9 76 42.6 C 77.6 44.2 79.2 45.8 80.7 47.4 C 82.2 49 84.3 50.7 86.3 51.5 L 86.3 56.9 Z " id="Shape" fill="#F47621" stroke-width="1"/>
|
|
||||||
<path d="M 87 56.8 C 87 55.1 87 53.4 87 51.7 C 87 51.5 86.9 51.2 86.7 51.1 C 82.9 49.3 80.2 46 77.3 43.1 C 75.6 41.3 74.7 39.5 72.1 39.7 C 69.2 40 67.9 40.9 66.2 43.3 C 64.3 46 65.3 48.7 66.4 51.6 C 67.5 54.6 67.6 56 70.1 57.9 C 72.3 59.6 74 61 77 60.9 C 79 60.8 80.9 59.9 82.8 59.2 C 84.1 58.7 85.8 58.2 86.9 57.4 C 86.9 57.4 86.9 57.4 86.9 57.4 C 86.9 57.4 86.9 57.4 86.9 57.4 C 87.1 57.2 87.1 57 87 56.8 Z M 66.8 47.8 C 66.7 46.8 66.7 45.7 67.2 44.7 C 71.9 49.8 78.6 53.6 85.5 55.2 C 85.3 55.3 85.2 55.3 85 55.4 C 81.8 55.1 78.7 54.4 75.8 53.3 C 72.9 52.1 69.4 50.3 66.8 47.8 Z M 75.1 42.6 C 77.1 44.9 79.4 47.3 81.7 49.3 C 81.7 49.3 81.7 49.3 81.7 49.3 C 80 48.6 78.4 47.6 76.9 46.2 C 75.4 44.8 73.8 43 72.5 41.1 C 73.4 41.3 74.3 41.8 75.1 42.6 Z M 70.9 41.3 C 72.5 43.6 74.5 45.9 76.3 47.6 C 79 50.1 82.3 51.8 85.7 52.8 C 85.8 53.1 85.8 53.5 85.8 53.9 C 79 52.4 72.5 48.5 67.9 43.5 C 67.9 43.4 68 43.4 68 43.3 C 68.8 42.2 69.8 41.6 70.9 41.3 Z M 68.3 52.9 C 68 51.9 67.6 50.9 67.3 50 C 69.3 51.6 71.6 52.9 73.7 53.8 C 76.2 55 79 55.8 81.8 56.3 C 80.7 56.6 79.7 56.9 78.6 57 C 76.4 57.3 74 57.4 71.5 57.3 C 71.3 57.1 71.1 56.9 70.8 56.7 C 70.6 56.5 70.3 56.4 70.1 56.2 C 68.8 55 68.9 54.7 68.3 52.9 Z M 81.4 58.3 C 79.5 59 77.7 59.8 75.7 59.5 C 74.7 59.4 73.9 59 73.2 58.6 C 75.3 58.7 77.4 58.7 79.4 58.4 C 81.3 58.1 83.3 57.5 85.2 56.8 C 85.2 56.8 85.3 56.8 85.3 56.8 C 84.1 57.5 82.5 57.9 81.4 58.3 Z " id="Shape" fill="#E85F1A" stroke-width="1"/>
|
|
||||||
</g>
|
|
||||||
<g id="tail" fill-rule="nonzero">
|
|
||||||
<path d="M 38.5 35.5 C 37.1 36.6 34.4 35.7 34.4 35.7 C 33.1 35.9 25.4 31.9 21.5 31.9 C 21.3 31.7 21 31.6 20.7 31.4 C 19.8 30.8 19 30.5 18 30.9 C 17.2 31.2 16 31.2 15.1 31 C 12.9 30.4 11.5 30.9 10.4 33 C 9.8 34.2 8.2 34.6 7.5 35.6 C 7 36.4 7 37.8 7 39.1 C 7 40.4 5.8 41.6 6.1 42.6 C 6.4 43.6 6 44.1 6.5 44.9 C 7.4 46.4 7.5 46.3 7.3 47.8 C 7.2 48.2 7.9 50.7 8.7 51.8 C 10 53.6 9.8 52.8 10.9 54.2 C 11.7 55.3 13.6 55 14.7 55.5 C 15.7 55.9 16.1 56.1 17.2 55.9 C 17.4 55.9 17.6 55.8 17.7 55.8 C 18.7 56.3 19.4 55.8 20.8 55.8 C 23.9 55.9 27.3 55.4 30.7 54 L 30.7 53.9 L 34.8 54.3 C 34.8 54.4 41.2 52.2 38.5 35.5 Z " id="Shape" fill="#E85F1A" stroke-width="1"/>
|
|
||||||
<path d="M 38 35.4 C 37.9 35.4 37.2 36 37.2 36 C 36.4 36.3 34.4 35.7 34.4 35.7 C 33.5 35.9 29.5 34.1 25.7 32.8 C 32.9 41 31 49.2 25.3 55.6 C 27.1 55.3 28.9 54.9 30.7 54.1 L 30.7 54 L 34.8 54.4 C 34.8 54.4 34.9 54.4 35 54.3 C 35 54.3 39.8 52.9 39.8 45.2 C 39.8 37.5 38 35.4 38 35.4 Z " id="Shape" fill="#120201" stroke-width="1"/>
|
|
||||||
<path d="M 37.2 50.9 C 39.1 47.1 38.5 41.1 36.9 36 C 35.7 36 34.4 35.6 34.4 35.6 C 34.4 35.6 29.4 33.8 25.7 32.7 C 26.6 34.4 27.3 36 27.9 37.6 C 25.3 36.8 22.8 35.8 20.3 34.7 C 18 33.6 14.9 32.5 12.5 30.8 C 12.2 30.9 11.9 31.1 11.6 31.4 C 14 33.3 17.2 34.4 19.8 35.6 C 22.6 36.9 25.4 38 28.3 38.8 C 28.4 39 28.4 39.2 28.5 39.5 C 25.2 39.5 21.9 39.2 18.6 38.7 C 15.9 38.3 13.2 37.7 10.7 36.9 C 9.7 36.6 8.6 36.3 7.5 36 C 7.4 36.3 7.3 36.6 7.3 36.9 C 7.5 36.9 7.6 37 7.8 37 C 10.9 38 14 39 17.3 39.5 C 21.1 40.2 25 40.5 28.8 40.5 C 28.9 40.9 28.9 41.2 29 41.6 C 21.6 42.3 14.1 41.9 6.6 41.2 C 6.5 41.5 6.3 41.9 6.3 42.2 C 13.9 42.9 21.5 43.4 29.1 42.7 C 29.1 43.2 29.2 43.7 29.2 44.2 C 22 45.3 14.6 46 7.3 46 C 7.5 46.4 7.6 46.6 7.6 47 C 14.8 47 22.1 46.3 29.2 45.2 C 29.2 45.9 29.1 46.6 29 47.3 C 26.2 47.9 23.4 48.4 20.6 48.8 C 16.5 49.4 12.2 49.9 8 49.9 C 8.1 50.2 8.3 50.6 8.4 50.9 C 12.3 50.9 16.1 50.4 19.9 49.9 C 22.9 49.5 25.8 49 28.8 48.3 C 28.6 49.2 28.3 50 28 50.8 C 25.4 51.7 22.7 52.5 20 53.2 C 17.6 53.8 15.1 54.5 12.6 55 C 13.4 55.2 14.3 55.2 14.9 55.4 C 15.1 55.5 15.2 55.5 15.3 55.6 C 19.3 54.8 23.4 53.7 27.3 52.3 C 26.7 53.4 26.1 54.4 25.3 55.4 C 27.1 55.1 29 54.7 30.9 53.9 L 30.9 53.8 L 33.4 54.1 C 34.9 53.6 36.3 52.6 37.2 50.9 Z " id="Shape" fill="#FFFFFF" stroke-width="1"/>
|
|
||||||
<path d="M 17 55.2 C 16.3 54.6 15.7 54.4 15.3 53.6 C 15 53 15.4 52.3 14.7 51.8 C 14.1 51.3 13.6 51.2 13 50.9 C 11.2 49.9 11.6 48.4 10.7 46.8 C 9.8 45.3 8.9 45.7 9.9 43.2 C 10.3 42.3 9.7 39.6 10.1 39 C 10.6 38.2 11 37.3 11.5 36.6 C 12 36 12.6 35.8 13.3 35.3 C 13.7 35 14.6 34.7 14.6 34.7 C 14.9 34.5 14.5 33.9 14.9 33.6 C 16 32.8 20.1 34 19.8 32.4 C 20.2 32 20.8 31.9 21.6 31.9 C 21.6 31.9 21.6 31.9 21.6 31.9 C 21.4 31.7 21.1 31.6 20.8 31.4 C 19.9 30.8 19.1 30.5 18.1 30.9 C 17.3 31.2 16.1 31.2 15.2 31 C 13 30.4 11.6 30.9 10.5 33 C 9.9 34.2 8.3 34.6 7.6 35.6 C 7 36.4 7 37.8 7 39.1 C 7 40.4 5.8 41.6 6.1 42.6 C 6.4 43.6 6 44.1 6.5 44.9 C 7.4 46.4 7.5 46.3 7.3 47.8 C 7.2 48.2 7.9 50.7 8.7 51.8 C 10 53.6 9.8 52.8 10.9 54.2 C 11.7 55.3 13.6 55 14.7 55.5 C 15.7 55.9 16.1 56.1 17.2 55.9 C 17.4 55.9 17.6 55.8 17.7 55.8 C 17.5 55.6 17.3 55.4 17 55.2 Z " id="Shape" fill="#120201" stroke-width="1"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 16 KiB |
|
@ -20,8 +20,6 @@ const render = require('../../lib/render.jsx');
|
||||||
|
|
||||||
const ACCEPTABLE_MODES = ['trending', 'popular'];
|
const ACCEPTABLE_MODES = ['trending', 'popular'];
|
||||||
|
|
||||||
const piano = require('../../lib/piano');
|
|
||||||
|
|
||||||
require('./search.scss');
|
require('./search.scss');
|
||||||
|
|
||||||
class Search extends React.Component {
|
class Search extends React.Component {
|
||||||
|
@ -31,9 +29,7 @@ class Search extends React.Component {
|
||||||
'getSearchState',
|
'getSearchState',
|
||||||
'handleChangeSortMode',
|
'handleChangeSortMode',
|
||||||
'handleGetSearchMore',
|
'handleGetSearchMore',
|
||||||
'handlePianoHover',
|
'getTab'
|
||||||
'getTab',
|
|
||||||
'tick'
|
|
||||||
]);
|
]);
|
||||||
this.state = this.getSearchState();
|
this.state = this.getSearchState();
|
||||||
this.state.loaded = [];
|
this.state.loaded = [];
|
||||||
|
@ -42,17 +38,6 @@ class Search extends React.Component {
|
||||||
this.state.offset = 0;
|
this.state.offset = 0;
|
||||||
this.state.loadMore = false;
|
this.state.loadMore = false;
|
||||||
|
|
||||||
this.state.isEgg = false;
|
|
||||||
this.state.isPiano = false;
|
|
||||||
this.state.isTutorial = false;
|
|
||||||
this.state.isSpin = false;
|
|
||||||
this.state.isColor = false;
|
|
||||||
this.state.isGhost = false;
|
|
||||||
this.state.isBrightness = false;
|
|
||||||
this.state.isPixelate = false;
|
|
||||||
this.state.isFisheye = false;
|
|
||||||
this.state.elapsed = 0;
|
|
||||||
|
|
||||||
let mode = '';
|
let mode = '';
|
||||||
const query = window.location.search;
|
const query = window.location.search;
|
||||||
const m = query.lastIndexOf('mode=');
|
const m = query.lastIndexOf('mode=');
|
||||||
|
@ -99,40 +84,6 @@ class Search extends React.Component {
|
||||||
// Error means that term was not URI encoded and decoding failed.
|
// Error means that term was not URI encoded and decoding failed.
|
||||||
// We can silence this error because not all query strings are intended to be decoded.
|
// We can silence this error because not all query strings are intended to be decoded.
|
||||||
}
|
}
|
||||||
|
|
||||||
if (term.includes('egg')) {
|
|
||||||
this.makeSurprise('isEgg');
|
|
||||||
}
|
|
||||||
if (term.includes('piano') || term === 'music') {
|
|
||||||
this.makeSurprise('isPiano');
|
|
||||||
}
|
|
||||||
if (term.includes('cat fact') || term.includes('tutorial')) {
|
|
||||||
this.makeSurprise('isTutorial');
|
|
||||||
}
|
|
||||||
if (term.includes('spin') || term.includes('rotate') || term.includes('whirl')) {
|
|
||||||
this.makeSurprise('isSpin');
|
|
||||||
setInterval(this.tick, 5);
|
|
||||||
}
|
|
||||||
if (term.includes('color') || term.includes('rainbow') || term.includes('colour')) {
|
|
||||||
this.makeSurprise('isColor');
|
|
||||||
setInterval(this.tick, 50);
|
|
||||||
}
|
|
||||||
if (term.includes('ghost')) {
|
|
||||||
this.makeSurprise('isGhost');
|
|
||||||
setInterval(this.tick, 20);
|
|
||||||
}
|
|
||||||
if (term.includes('brightness')) {
|
|
||||||
this.makeSurprise('isBrightness');
|
|
||||||
setInterval(this.tick, 20);
|
|
||||||
}
|
|
||||||
if (term.includes('pixelate')) {
|
|
||||||
this.makeSurprise('isPixelate');
|
|
||||||
setInterval(this.tick, 20);
|
|
||||||
}
|
|
||||||
if (term.includes('fisheye') || term.includes('fish eye')) {
|
|
||||||
this.makeSurprise('isFisheye');
|
|
||||||
}
|
|
||||||
|
|
||||||
this.props.dispatch(navigationActions.setSearchTerm(term));
|
this.props.dispatch(navigationActions.setSearchTerm(term));
|
||||||
}
|
}
|
||||||
componentDidUpdate (prevProps) {
|
componentDidUpdate (prevProps) {
|
||||||
|
@ -140,13 +91,6 @@ class Search extends React.Component {
|
||||||
this.handleGetSearchMore();
|
this.handleGetSearchMore();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
makeSurprise (surprise) {
|
|
||||||
this.setState({[surprise]: true});
|
|
||||||
}
|
|
||||||
|
|
||||||
handlePianoHover (noteNumber) {
|
|
||||||
piano(noteNumber, ACCEPTABLE_MODES.indexOf(this.state.mode));
|
|
||||||
}
|
|
||||||
getSearchState () {
|
getSearchState () {
|
||||||
let pathname = window.location.pathname.toLowerCase();
|
let pathname = window.location.pathname.toLowerCase();
|
||||||
if (pathname[pathname.length - 1] === '/') {
|
if (pathname[pathname.length - 1] === '/') {
|
||||||
|
@ -192,11 +136,6 @@ class Search extends React.Component {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
tick () {
|
|
||||||
this.setState(prevState => (
|
|
||||||
{elapsed: (prevState.elapsed + 1)}
|
|
||||||
));
|
|
||||||
}
|
|
||||||
getTab (type) {
|
getTab (type) {
|
||||||
const term = this.props.searchTerm.split(' ').join('+');
|
const term = this.props.searchTerm.split(' ').join('+');
|
||||||
let allTab = (
|
let allTab = (
|
||||||
|
@ -230,13 +169,11 @@ class Search extends React.Component {
|
||||||
<Grid
|
<Grid
|
||||||
cards
|
cards
|
||||||
showAvatar
|
showAvatar
|
||||||
isEggShaped={this.state.isEgg}
|
|
||||||
itemType={this.state.tab}
|
itemType={this.state.tab}
|
||||||
items={this.state.loaded}
|
items={this.state.loaded}
|
||||||
showFavorites={false}
|
showFavorites={false}
|
||||||
showLoves={false}
|
showLoves={false}
|
||||||
showViews={false}
|
showViews={false}
|
||||||
onPianoEnter={this.state.isPiano ? this.handlePianoHover : null}
|
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
let searchAction = null;
|
let searchAction = null;
|
||||||
|
@ -253,7 +190,6 @@ class Search extends React.Component {
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className={this.state.isTutorial ? 'sillyTutorial' : this.state.isFisheye ? 'fisheye' : ''}
|
|
||||||
id="projectBox"
|
id="projectBox"
|
||||||
key="projectBox"
|
key="projectBox"
|
||||||
>
|
>
|
||||||
|
@ -262,27 +198,9 @@ class Search extends React.Component {
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
fancyStyle () {
|
|
||||||
const style = {};
|
|
||||||
if (this.state.isSpin) {
|
|
||||||
style.transform = `rotate(${Math.min(this.state.elapsed, 360)}deg)`;
|
|
||||||
}
|
|
||||||
if (this.state.isColor) {
|
|
||||||
style.filter = `hue-rotate(${this.state.elapsed}deg) saturate(400%)`;
|
|
||||||
}
|
|
||||||
if (this.state.isGhost) {
|
|
||||||
style.opacity = `${Math.min(1, this.state.elapsed / 100)}`;
|
|
||||||
}
|
|
||||||
if (this.state.isBrightness) {
|
|
||||||
style.filter = `brightness(${Math.max(1, 2 - (this.state.elapsed / 100))})`;
|
|
||||||
}
|
|
||||||
|
|
||||||
return style;
|
|
||||||
}
|
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
return (
|
return (
|
||||||
<div style={this.fancyStyle()} >
|
<div>
|
||||||
<div className="outer">
|
<div className="outer">
|
||||||
<TitleBanner className="masthead">
|
<TitleBanner className="masthead">
|
||||||
<div className="inner">
|
<div className="inner">
|
||||||
|
|
|
@ -165,21 +165,6 @@ $base-bg: $ui-white;
|
||||||
max-width: 500px;
|
max-width: 500px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.sillyTutorial {
|
|
||||||
background-image: url('computer-cat.jpg');
|
|
||||||
background-size: 50%;
|
|
||||||
.thumbnail {
|
|
||||||
opacity: .8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.fisheye {
|
|
||||||
background-image: url('fish.svg');
|
|
||||||
background-size: 100%;
|
|
||||||
.thumbnail {
|
|
||||||
opacity: .8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Before Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 52 KiB |
Before Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 45 KiB |
Before Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 45 KiB |
Before Width: | Height: | Size: 48 KiB |
Before Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 36 KiB |