myzuck.js
Version:
A javascript library that lets you add stories EVERYWHERE.
215 lines (190 loc) • 9.3 kB
HTML
<html>
<head>
<title>zuck.js</title>
<link rel="icon" href="ICON.png">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0" />
<!-- demo styles -->
<link rel="stylesheet" href="demo/style.css">
<!-- lib styles -->
<link rel="stylesheet" href="dist/zuck.min.css">
<!-- lib skins -->
<link rel="stylesheet" href="dist/skins/snapgram.css">
<link rel="stylesheet" href="dist/skins/vemdezap.css">
<link rel="stylesheet" href="dist/skins/facesnap.css">
<link rel="stylesheet" href="dist/skins/snapssenger.css">
</head>
<body>
<div id="root"></div>
<!-- Too much time needed to setup webpack and blablabla -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.2/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.2/react-dom.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.21.1/babel.min.js"></script>
<script src="dist/zuck.min.js"></script>
<script src="demo/script.js"></script>
<script type="text/babel">
class Demo extends React.Component {
render() {
return (
<div>
<h1 id="header"> </h1>
<a href="https://ramon.codes/projects/zuck.js" target="_blank" className="disclaimer">
<img src="ICON.png" alt="zuck.js logo" />
<p>This a demonstration of <strong>zuck.js</strong> javascript library.</p>
<p>Not associated with Facebook, Instagram, WhatsApp or Snapchat.</p>
</a>
<Stories />
<div className="skin">
Choose your theme: <select id="skin" onChange={(event) => changeSkin(event.target.value)}>
<option value="Snapgram">Snapgram (without fullscreen)</option>
<option value="FaceSnap">FaceSnap (with fullscreen)</option>
<option value="VemDeZAP">VemDeZAP (timeline + arrows)</option>
<option value="Snapssenger">Snapssenger (with previews)</option>
</select>
</div>
</div>
);
}
}
</script>
<script type="text/babel">
class Stories extends React.Component {
constructor(props){
super(props);
// React ^16.3
// this.storiesElement = React.createRef();
this.storiesElement = null;
this.storiesApi = null;
this.state = {
stories: [
Zuck.buildTimelineItem(
"ramon",
"https://raw.githubusercontent.com/ramon82/assets/master/zuck.js/users/1.jpg",
"Ramon",
"https://ramon.codes",
timestamp(),
[
["ramon-1", "photo", 3, "https://raw.githubusercontent.com/ramon82/assets/master/zuck.js/stories/1.jpg", "https://raw.githubusercontent.com/ramon82/assets/master/zuck.js/stories/1.jpg", '', false, false, timestamp()],
["ramon-2", "video", 0, "https://raw.githubusercontent.com/ramon82/assets/master/zuck.js/stories/2.mp4", "https://raw.githubusercontent.com/ramon82/assets/master/zuck.js/stories/2.jpg", '', false, false, timestamp()],
["ramon-3", "photo", 3, "https://raw.githubusercontent.com/ramon82/assets/master/zuck.js/stories/3.png", "https://raw.githubusercontent.com/ramon82/assets/master/zuck.js/stories/3.png", 'https://ramon.codes', 'Visit my Portfolio', false, timestamp()]
]
),
Zuck.buildTimelineItem(
"gorillaz",
"https://raw.githubusercontent.com/ramon82/assets/master/zuck.js/users/2.jpg",
"Gorillaz",
"",
timestamp(),
[
["gorillaz-1", "video", 0, "https://raw.githubusercontent.com/ramon82/assets/master/zuck.js/stories/4.mp4", "https://raw.githubusercontent.com/ramon82/assets/master/zuck.js/stories/4.jpg", '', false, false, timestamp()],
["gorillaz-2", "photo", 3, "https://raw.githubusercontent.com/ramon82/assets/master/zuck.js/stories/5.jpg", "https://raw.githubusercontent.com/ramon82/assets/master/zuck.js/stories/5.jpg", '', false, false, timestamp()],
]
),
Zuck.buildTimelineItem(
"ladygaga",
"https://raw.githubusercontent.com/ramon82/assets/master/zuck.js/users/3.jpg",
"Lady Gaga",
"",
timestamp(),
[
["ladygaga-1", "photo", 5, "https://raw.githubusercontent.com/ramon82/assets/master/zuck.js/stories/6.jpg", "https://raw.githubusercontent.com/ramon82/assets/master/zuck.js/stories/6.jpg", '', false, false, timestamp()],
["ladygaga-2", "photo", 3, "https://raw.githubusercontent.com/ramon82/assets/master/zuck.js/stories/7.jpg", "https://raw.githubusercontent.com/ramon82/assets/master/zuck.js/stories/7.jpg", 'http://ladygaga.com', false, false, timestamp()],
]
),
Zuck.buildTimelineItem(
"starboy",
"https://raw.githubusercontent.com/ramon82/assets/master/zuck.js/users/4.jpg",
"The Weeknd",
"",
timestamp(),
[
["starboy-1", "photo", 5, "https://raw.githubusercontent.com/ramon82/assets/master/zuck.js/stories/8.jpg", "https://raw.githubusercontent.com/ramon82/assets/master/zuck.js/stories/8.jpg", '', false, false, timestamp()]
]
),
Zuck.buildTimelineItem(
"riversquomo",
"https://raw.githubusercontent.com/ramon82/assets/master/zuck.js/users/5.jpg",
"Rivers Cuomo",
"",
timestamp(),
[
["riverscuomo", "photo", 10, "https://raw.githubusercontent.com/ramon82/assets/master/zuck.js/stories/9.jpg", "https://raw.githubusercontent.com/ramon82/assets/master/zuck.js/stories/9.jpg", '', false, false, timestamp()]
]
)
]
}
}
componentDidMount() {
let currentSkin = getCurrentSkin(); // from demo
this.storiesApi = new Zuck(this.storiesElement, {
backNative: true,
previousTap: true,
skin: currentSkin['name'],
autoFullScreen: currentSkin['params']['autoFullScreen'],
avatars: currentSkin['params']['avatars'],
paginationArrows: currentSkin['params']['paginationArrows'],
list: currentSkin['params']['list'],
cubeEffect: currentSkin['params']['cubeEffect'],
localStorage: true,
stories: this.state.stories,
reactive: true,
callbacks: {
onDataUpdate: function (currentState, callback) {
this.setState(state => {
state.stories = currentState;
return state;
}, () => {
callback();
});
}.bind(this)
}
});
}
render() {
const timelineItems = []
this.state.stories.forEach((story, storyId) => {
const storyItems = [];
story.items.forEach((storyItem) => {
storyItems.push(
<li key={storyItem.id} data-id={storyItem.id} data-time={storyItem.time} className={(storyItem.seen ? 'seen' : '')}>
<a href={storyItem.src} data-type={storyItem.type} data-length={storyItem.length} data-link={storyItem.link} data-linkText={storyItem.linkText}>
<img src={storyItem.preview} />
</a>
</li>
);
});
let arrayFunc = story.seen ? 'push' : 'unshift';
timelineItems[arrayFunc](
<div className={(story.seen ? 'story seen' : 'story')} key={storyId} data-id={storyId} data-last-updated={story.lastUpdated} data-photo={story.photo}>
<a className="item-link" href={story.link}>
<span className="item-preview">
<img src={story.photo} />
</span>
<span className="info" itemProp="author" itemScope="" itemType="http://schema.org/Person">
<strong className="name" itemProp="name">{story.name}</strong>
<span className="time">{story.lastUpdated}</span>
</span>
</a>
<ul className="items">
{storyItems}
</ul>
</div>
);
});
return (
<div>
<div ref={node => this.storiesElement = node} id="stories-react" className="storiesWrapper">
{timelineItems}
</div>
</div>
);
}
}
</script>
<script type="text/babel">
ReactDOM.render(
<Demo />,
document.getElementById('root')
);
</script>
</body>
</html>