QR code generating, styling is left

This commit is contained in:
Abhishek Sinha 2018-08-01 14:34:29 +05:30
parent 6eacf4835a
commit 424e242669
16 changed files with 21178 additions and 282 deletions

680
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -14,6 +14,7 @@
"axios": "^0.18.0",
"bitcoin-core": "^2.0.0",
"body-parser": "^1.18.3",
"bootstrap": "^4.1.3",
"browserify": "^16.2.2",
"connect-flash": "^0.1.1",
"cookie-parser": "^1.4.3",
@ -23,12 +24,13 @@
"express-session": "^1.15.6",
"express-validator": "^5.3.0",
"helmet": "^3.13.0",
"html-pdf": "^2.2.0",
"html2canvas": "^1.0.0-alpha.12",
"jquery": "^3.3.1",
"jspdf": "^1.4.1",
"lodash": "^4.17.10",
"node-fetch": "^2.2.0",
"popper.js": "^1.14.3",
"qrcode": "^1.2.2",
"watchify": "^3.11.0"
}
}

92
public/css/carousel.css Normal file
View File

@ -0,0 +1,92 @@
/* GLOBAL STYLES
-------------------------------------------------- */
/* Padding below the footer and lighter body text */
body {
padding-top: 3rem;
padding-bottom: 3rem;
color: #5a5a5a;
}
/* CUSTOMIZE THE CAROUSEL
-------------------------------------------------- */
/* Carousel base class */
.carousel {
margin-bottom: 4rem;
}
/* Since positioning the image, we need to help out the caption */
.carousel-caption {
bottom: 3rem;
z-index: 10;
}
/* Declare heights because of positioning of img element */
.carousel-item {
height: 32rem;
background-color: #777;
}
.carousel-item > img {
position: absolute;
top: 0;
left: 0;
min-width: 100%;
height: 32rem;
}
/* MARKETING CONTENT
-------------------------------------------------- */
/* Center align the text within the three columns below the carousel */
.marketing .col-lg-4 {
margin-bottom: 1.5rem;
text-align: center;
}
.marketing h2 {
font-weight: 400;
}
.marketing .col-lg-4 p {
margin-right: .75rem;
margin-left: .75rem;
}
/* Featurettes
------------------------- */
.featurette-divider {
margin: 5rem 0; /* Space out the Bootstrap <hr> more */
}
/* Thin out the marketing headings */
.featurette-heading {
font-weight: 300;
line-height: 1;
letter-spacing: -.05rem;
}
/* RESPONSIVE CSS
-------------------------------------------------- */
@media (min-width: 40em) {
/* Bump up size of carousel content */
.carousel-caption p {
margin-bottom: 1.25rem;
font-size: 1.25rem;
line-height: 1.4;
}
.featurette-heading {
font-size: 50px;
}
}
@media (min-width: 62em) {
.featurette-heading {
margin-top: 7rem;
}
}

BIN
public/images/rm.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 296 KiB

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,8 @@
window.$ = window.jQuery = require('jquery');
var bootstrap = require('bootstrap');
const html2canvas = require('html2canvas');
const QRCode = require('qrcode');
$(document).on('keyup', '.stick_text', function() {
var btn = this;
@ -17,6 +21,7 @@ $(document).on('keyup', '.stick_text', function() {
});
$(document).on('click', '#bc-btn', function() {
console.log("okok");
var text = $('#_bdata').val();
var _from = $('#_from').val();
var _to = $('#_to').val();
@ -27,14 +32,33 @@ $(document).on('click', '#bc-btn', function() {
data: {_bdata:text,_from:_from, _to:_to, _cardid:_cardid},
success: function(data) {
html2canvas(document.getElementById("pdfcontent"), { allowTaint: true }).then(function(canvas) {
var img = canvas.toDataURL("image/png");
var doc = new jsPDF('p', 'mm', 'a3');
doc.addImage(img, 'PNG', 10, 10);
doc.save("test.pdf");
doc.autoPrint();
});
var txnid = $.trim(data.txnid);
if(txnid.length < 1) {
console.log("No Tx found");
return false;
}
var urlstring = `https://testnet.florincoin.info/tx/${txnid}`;
var canvas = document.getElementById('canvas');
var opts = {
width: 200,
errorCorrectionLevel: 'H'
}
QRCode.toCanvas(canvas, urlstring, opts, function (error) {
if (error) console.error(error)
console.log('Qr generated! for : '.urlstring);
html2canvas(document.getElementById("pdfcontent"), { allowTaint: true }).then(function(canvas) {
let namepdf = "flo-greetings-"+new Date().getTime()+".pdf";
var img = canvas.toDataURL("image/png");
var doc = new jsPDF('p', 'mm', 'a3');
doc.addImage(img, 'PNG', 1, 2);
doc.save(namepdf);
doc.autoPrint();
});
})
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);

View File

@ -8,7 +8,6 @@ const client = require('./server.js');
var path = require('path')
var fs = require('fs');
var pdf = require('html-pdf');
router.get('/', (req, res)=>{
res.render('index.ejs', {
@ -39,7 +38,7 @@ router.post('/write', [
.trim(),
check('_bdata')
.isLength({min:1})
.isAlphanumeric()
//.isAlphanumeric()
.withMessage('Please write the message to be sent to receiver!')
.trim(),
check('_cardid')
@ -50,6 +49,8 @@ router.post('/write', [
],
(req,res)=>{
const errors = validationResult(req)
//console.log(errors.mapped());
if(!errors.isEmpty()) {
return res.render('write', {
data: req.body,
@ -81,7 +82,39 @@ router.post('/write', [
//res.json({"error":true, "txnid":null, "card_id":null, "user_msg":null})
}
)
}
)
router.get('/bithday-cards', (req, res)=>{
res.render('bithday-cards.ejs', {
data: {},
errors: {},
title: 'Welcome! Select a bithday card card of your choice.'
})
})
router.get('/christmas-cards', (req, res)=>{
res.render('christmas-cards.ejs', {
data: {},
errors: {},
title: 'Welcome! Select a Christmas card card of your choice.'
})
})
router.get('/diwali-cards', (req, res)=>{
res.render('diwali-cards.ejs', {
data: {},
errors: {},
title: 'Welcome! Select a Diwali card card of your choice.'
})
})
router.get('/new-year-cards', (req, res)=>{
res.render('new-year-cards.ejs', {
data: {},
errors: {},
title: 'Welcome! Select a New Year card card of your choice.'
})
})
module.exports = router

View File

@ -1,15 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Happy Diwali</title>
</head>
<body>
<h1>
Happy Diwali to me
</h1>
<img class="logo" src="{{image}}">
</body>
</html>

3
views/bithday-cards.ejs Normal file
View File

@ -0,0 +1,3 @@
<% include partials/header.ejs %>
<h1>BithDay Carfds</h1>
<% include partials/footer.ejs %>

View File

@ -0,0 +1,3 @@
<% include partials/header.ejs %>
<h1>XMAS Carfds</h1>
<% include partials/footer.ejs %>

3
views/diwali-cards.ejs Normal file
View File

@ -0,0 +1,3 @@
<% include partials/header.ejs %>
<h1>Diwali Carfds</h1>
<% include partials/footer.ejs %>

View File

@ -1,6 +1,8 @@
<% include partials/header.ejs %>
<div class="container">
<div class="container marketing">
<div class="form-header">
<% if (Object.keys(errors).length === 0) { %>
@ -15,23 +17,70 @@
<% } %>
</div>
<div class="card mb-3">
<a href="/write/Diwali2018"><img class="card-img-top" src="images/Diwali2018.jpg" alt="Card image cap"></a>
<div class="card-body">
<h5 class="card-title">Card title</h5>
<p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
<p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
</div>
</div>
<div class="card">
<a href="/write/hbd"><<img class="card-img-bottom" src="images/hbd.jpg" alt="Card image cap"></a>
<div class="card-body">
<h5 class="card-title">Card title</h5>
<p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
<p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
</div>
</div>
</div>
<!-- Three columns of text below the carousel -->
<div class="row">
<div class="col-lg-4">
<img class="rounded-circle" src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" alt="Generic placeholder image" width="140" height="140">
<h2>Heading</h2>
<p>Donec sed odio dui. Etiam porta sem malesuada magna mollis euismod. Nullam id dolor id nibh ultricies vehicula ut id elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Praesent commodo cursus magna.</p>
<p><a class="btn btn-secondary" href="#" role="button">View details &raquo;</a></p>
</div><!-- /.col-lg-4 -->
<div class="col-lg-4">
<img class="rounded-circle" src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" alt="Generic placeholder image" width="140" height="140">
<h2>Heading</h2>
<p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh.</p>
<p><a class="btn btn-secondary" href="#" role="button">View details &raquo;</a></p>
</div><!-- /.col-lg-4 -->
<div class="col-lg-4">
<img class="rounded-circle" src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" alt="Generic placeholder image" width="140" height="140">
<h2>Heading</h2>
<p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p>
<p><a class="btn btn-secondary" href="#" role="button">View details &raquo;</a></p>
</div><!-- /.col-lg-4 -->
</div><!-- /.row -->
<!-- START THE FEATURETTES -->
<hr class="featurette-divider">
<div class="row featurette">
<div class="col-md-7">
<h2 class="featurette-heading">First featurette heading. <span class="text-muted">It'll blow your mind.</span></h2>
<p class="lead">Donec ullamcorper nulla non metus auctor fringilla. Vestibulum id ligula porta felis euismod semper. Praesent commodo cursus magna, vel scelerisque nisl consectetur. Fusce dapibus, tellus ac cursus commodo.</p>
</div>
<div class="col-md-5">
<a href="/write/Diwali2018"><img class="featurette-image img-fluid mx-auto" src="images/Diwali2018.jpg" alt="Generic placeholder image"></a>
</div>
</div>
<hr class="featurette-divider">
<div class="row featurette">
<div class="col-md-7 order-md-2">
<h2 class="featurette-heading">Oh yeah, it's that good. <span class="text-muted">See for yourself.</span></h2>
<p class="lead">Donec ullamcorper nulla non metus auctor fringilla. Vestibulum id ligula porta felis euismod semper. Praesent commodo cursus magna, vel scelerisque nisl consectetur. Fusce dapibus, tellus ac cursus commodo.</p>
</div>
<div class="col-md-5 order-md-1">
<a href="/write/hbd"><img class="featurette-image img-fluid mx-auto" src="images/hbd.jpg" alt="Generic placeholder image"></a>
</div>
</div>
<hr class="featurette-divider">
<div class="row featurette">
<div class="col-md-7">
<h2 class="featurette-heading">And lastly, this one. <span class="text-muted">Checkmate.</span></h2>
<p class="lead">Donec ullamcorper nulla non metus auctor fringilla. Vestibulum id ligula porta felis euismod semper. Praesent commodo cursus magna, vel scelerisque nisl consectetur. Fusce dapibus, tellus ac cursus commodo.</p>
</div>
<div class="col-md-5">
<a href="/write/hbd2"><img class="featurette-image img-fluid mx-auto" src="images/hbd2.jpg" alt="Generic placeholder image"></a>
</div>
</div>
<hr class="featurette-divider">
<!-- /END THE FEATURETTES -->
</div><!-- /.container -->
<% include partials/footer.ejs %>

3
views/new-year-cards.ejs Normal file
View File

@ -0,0 +1,3 @@
<% include partials/header.ejs %>
<h1>Hapyy New Year Carfds</h1>
<% include partials/footer.ejs %>

View File

@ -1,5 +1,9 @@
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!-- FOOTER -->
<footer class="container">
<p class="float-right"><a href="#">Back to top</a></p>
<p>&copy; <a href="https://ranchimall.net" target="_blank">Ranchi Mall</a> 2018-2019 Company, Inc. &middot; <a href="https://ranchimall.net/privacypolicy.htm" target="_blank">Privacy</a> &middot; <a href="#">Terms</a></p>
</footer>
</main>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.5/jspdf.debug.js"></script>
<script src="/js/bundle.js"></script>
</body>

View File

@ -8,15 +8,102 @@
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="/css/carousel.css" rel="stylesheet">
<title><%=title%></title>
</head>
<body>
<nav class="navbar navbar-expand-sm bg-primary navbar-dark">
<a class="navbar-brand" href="#">Book of Records</a>
</nav>
<header>
<nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
<a class="navbar-brand" href="#">FLO Greetings App</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="/">Home <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="/bithday-cards">Birthday Cards</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/diwali-cards">Diwali Cards</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/christmas-cards">Christmas Cards</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/new-year-cards">New Year Cards</a>
</li>
</ul>
<!--<form class="form-inline mt-2 mt-md-0">
<input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>-->
</div>
</nav>
</header>
<ul>
<li><a href="/">Home</a></li>
<li><a href="/write">Write a remarks</a></li>
</ul>
<main role="main">
<div id="myCarousel" class="carousel slide" data-ride="carousel">
<ol class="carousel-indicators">
<li data-target="#myCarousel" data-slide-to="0" class="active"></li>
<li data-target="#myCarousel" data-slide-to="1"></li>
<li data-target="#myCarousel" data-slide-to="2"></li>
<li data-target="#myCarousel" data-slide-to="3"></li>
</ol>
<div class="carousel-inner">
<div class="carousel-item active">
<img class="first-slide" src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" alt="First slide">
<div class="container">
<div class="carousel-caption">
<h1>HAPPY BIRTHDAY WISHES.</h1>
<p>Gift FLOs to your loved ones on their birthday with our Birthday card generator app below. Select from hundreds of cards and make your gift the most unique. </p>
<p><a class="btn btn-lg btn-primary" href="/bithday-cards" role="button">See all the cards</a></p>
</div>
</div>
</div>
<div class="carousel-item">
<img class="second-slide" src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" alt="Second slide">
<div class="container">
<div class="carousel-caption">
<h1>HAPPY DIWALI.</h1>
<p>Wish your loved ones a very happy Diwali by gifting them Ranchi Mall FLO Diwali cards.</p>
<p><a class="btn btn-lg btn-primary" href="/diwali-cards" role="button">Show the Diwali cards</a></p>
</div>
</div>
</div>
<div class="carousel-item">
<img class="third-slide" src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" alt="Third slide">
<div class="container">
<div class="carousel-caption">
<h1>Merry Christmas</h1>
<p>Wish Merry Christmas to your friends, family and gift them Ranchi Mall FLO Merry Christmas Cards.</p>
<p><a class="btn btn-lg btn-primary" href="/christmas-cards" role="button">Browse gallery</a></p>
</div>
</div>
</div>
<div class="carousel-item">
<img class="third-slide" src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" alt="Fourth slide">
<div class="container">
<div class="carousel-caption">
<h1>Happy New Year</h1>
<p>Wish Happy New Year to your friends, family in a unique fashion this year and gift them Ranchi Mall FLO Happy New Year Cards.</p>
<p><a class="btn btn-lg btn-primary" href="/new-year-cards" role="button">Browse gallery</a></p>
</div>
</div>
</div>
</div>
<a class="carousel-control-prev" href="#myCarousel" role="button" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next" href="#myCarousel" role="button" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>

View File

@ -37,17 +37,22 @@
<div class="card mb-3 text-center">
<div class="card-body">
<h5 class="card-title">Dear <span id="span_from">Alice</span></h5>
<p class="card-text"><i>Happy birthday to you.</i></p>
<p class="card-text"><small class="text-muted">From <span id="span_to">Bob</span></small></p>
</div>
<div class="text-center">
<img src="/images/<%=data.card_id%>.jpg" alt="Card image cap">
</div>
<div class="card-body">
<p class="card-text"><span id="span_user_msg">Youre Beautiful Inside and Out! Hope your Birthday is a Spectacular One, You Deserve It! Happy Birthday!</span></p>
<p class="card-text"><span id="span_user_msg"><i>Your special message will appear here.</i></span></p>
<p class="card-text"><small class="text-muted">From <span id="span_to">Bob</span></small></p>
<p class="card-text">
<canvas id="canvas"></canvas>
</p>
<p class="card-text">
<img src="/images/rm.png" alt="Rabchi Mall logo" width="50" height="50">
<img src="/images/FLO_teal.png" alt="FLO logo" width="50" height="50">
<p><small class="text-muted">--- FLO Blockchian---</small></p>
<p><small class="text-muted">--- A Ranchi Mall FLO Blockchian Product ---</small></p>
</p>
</div>
</div>