lbry.tech/.vuepress/components/Step2.vue
2018-05-10 11:25:47 +03:00

197 lines
5.1 KiB
Vue

<template>
<div id="step2-page">
<div v-images-loaded="imagesLoaded">
<div class="xs12">
<h1>Publish your content on the blockchain</h1>
<p>Upload an image to the blockchain and you are able to view it on the <a href='http://explorer.lbry.io' target='_blank'>LBRY Blockchain Explorer</a>.</p>
</div>
<div class="xs12 sm8">
<img src="https://spee.ch/40ac6818bbac87a208722bf4467653341d460908/lbry-green.png" id="base-image">
<canvas id="meme-canvas" width="400" height="300">
Sorry, canvas not supported
</canvas>
<div class="xs12 sm6">
<div class="image-upload-container">
<p>Upload a background image</p>
<image-uploader
:quality="0.8"
:autoRotate=true
:maxWidth="400"
outputFormat="string"
:preview=false
@input="setImage"
@onComplete="imageUploaded"
></image-uploader>
</div>
</div>
</div>
<div class="xs12 sm4">
<div class="form-container">
<form>
<input type="text" v-model="topLine" placeholder="Top line" required />
<input type="text" v-model="bottomLine" placeholder="Bottom line" required />
<input type="text" v-model="title" placeholder="Title" required />
<input type="text" v-model="description" placeholder="Description" required />
<input type="text" v-model="author" placeholder="Author" required />
<input type="text" v-model="language" placeholder="Language" required />
<input type="text" v-model="license" placeholder="License" required />
<label><input type="checkbox" v-model="nsfw" name="nsfw" />NSFW</label>
<input type="submit" class="__button-black" v-on:click="submit" value="Submit" />
</form>
</div>
</div>
<div class="clear"></div>
<div class="xs12" v-if="isLoading">
<div class="loader"></div>
</div>
</div>
</div>
</template>
<script>
import imagesLoaded from 'vue-images-loaded'
import { ImageUploader } from 'vue-image-upload-resize'
import EventBus from '../event-bus';
export default {
directives: {
imagesLoaded
},
components: {
ImageUploader
},
data () {
return {
valid: false,
isLoading: false,
topLine: 'This is an example meme',
bottomLine: 'that I made',
title: '',
description: '',
author: '',
language: 'EN',
license: 'Public Domain',
nsfw: false,
backgroundImage: '',
textFieldRules: [
v => !!v || 'Field is required'
],
}
},
methods: {
updateCanvas () {
var canvasWidth = 400;
var canvasHeight = 300;
var canvas = document.getElementById('meme-canvas');
var ctx = canvas.getContext('2d');
var img = document.getElementById('base-image');
ctx.clearRect(0, 0, canvasWidth, canvasHeight);
ctx.drawImage(img, 0, 0, canvasWidth, canvasHeight, 0, 0, canvasWidth, canvasHeight);
ctx.lineWidth = 4;
ctx.font = 'bold 28px Coda';
ctx.strokeStyle = 'black';
ctx.fillStyle = 'white';
ctx.textAlign = 'center';
ctx.textBaseline = 'top';
ctx.strokeText(this.topLine.toUpperCase(), canvasWidth / 2, 20);
ctx.fillText(this.topLine.toUpperCase(), canvasWidth / 2, 20);
ctx.strokeText(this.bottomLine.toUpperCase(), canvasWidth / 2, (canvasHeight - 40));
ctx.fillText(this.bottomLine.toUpperCase(), canvasWidth / 2, (canvasHeight - 40));
},
submit () {
// TODO: Do the upload
EventBus.$emit('HookFileUploaded', 'txhashhere');
},
imagesLoaded (instance) {
var component = this;
// Make sure the font is loaded
document.fonts.load('bold 28px Coda').then(function() {
component.updateCanvas();
});
},
setImage (file) {
var component = this;
document.getElementById('base-image').src = file;
// allow one second to load the image
setTimeout(component.updateCanvas, 1000);
},
imageUploaded () {
}
},
created () {
},
watch: {
topLine () {
this.updateCanvas();
},
bottomLine () {
this.updateCanvas();
}
},
name: 'Step2'
};
</script>
<style lang="scss">
#step2-page {
.sm8 {
float: left;
width: 66%;
}
.sm4 {
float: right;
width: 30%;
}
#meme-canvas {
width: 400px;
height: 300px;
}
#base-image {
left: -10000px;
top: -10000px;
position: absolute;
}
.image-upload-container {
background: white;
width: 80%;
padding: 1rem;
margin: 1rem auto;
p {
color: black;
text-shadow: none;
}
}
.form-container {
input {
margin-bottom: 0.5rem;
display: block;
width: 80%;
&[type='checkbox'] {
margin: 0;
width: 1rem;
height: 1rem;
display: inline-block;
-moz-appearance: checkbox;
-webkit-appearance: checkbox;
}
}
label {
text-align: left;
display: block;
line-height: 2rem;
}
}
#fileInput {
width: 100%;
}
}
</style>