Merge pull request #1 from avishkarabhishek786/master

Updating to latest commit release
This commit is contained in:
Abhishek Sinha 2018-08-04 15:07:58 +05:30 committed by GitHub
commit e3edbf7680
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
31 changed files with 721 additions and 27518 deletions

View File

@ -1 +1,46 @@
#FLO Greeting Cards
<h2>FLO Greeting Cards</h2>
Flo greetings app is a greetings card (PDF or PNG) file generator. If you want to send or gift someone FLO on any special occasion like birthdays, new year or any festival Flo greetings app is the best way to gift someone FLOs in a uninue fashion.
<h4>Prerequisites</h4>
**FLO Wallet**
<p>You must have FLO wallet or FLOD daemon running. Flocore wallet exe can be downloaded from the following link: https://www.flo.cash//</p>
**NODE JS and NPM**
<p>You also need to have Node JS v8+ installed. Likewise NPM v6+ is also required.</p>
<h4>Installation</h4>
Now that you have FLO wallet, Node JS and NPM installed let's start the process:
<ul>
<li>Step 1: Open your terminal or command line window</li>
<li>Step 2: Clone flo-greeting-cards repository (git clone https://github.com/avishkarabhishek786/flo-greeting-cards.git)</li>
<li>Step 3: Move into the flo-greetings-card folder (cd flo-greetings-card/)</li>
<li>Step 4: Install the dependancies (npm install)</li>
<li>Step 5: Configure server.example.js file. Rename it to server.js (sudo mv server.example.js server.js). Then configure username, password, network, port etc as per your FLO wallet settings.
</li>
<li>Step 6: Run FLO wallet (/path/to/wallet ./flo-qt) or FLOD daemon (/path/to/wallet ./flod)</li>
<li>Step 7: Build the application (sudo npm start)</li>
<li>Step 8: Start the browser and visit localhost://3001</li>
</ul>
<h4>How to use the website?</h4>
<ul>
<li>Click on any menu icon (Birthday cards, New Year cards) on the top header section.</li>
<li>Click on any card image below.</li>
<li>Fill the form. <strong>(Leave Recipient Address and amount empty if you don't want to send FLO.)</strong></li>
<li>Press submit. PDF and/or Image file will be generated respectively.</li>
</ul>
<h4>Upcoming Feature</h4>
<ul>Facillity to
<li>Change Font Style</li>
<li>Upload user's selected image</li>
<li>Select background image</li>
<li>Ability to beutify the card appearance more</li>
</ul>
<h4>Author's Remarks:</h4>
Thank you so much for using the application. Please help improving the application. Pull requests or notify for any bugs to
abhishek@ranchimall.net

203
package-lock.json generated
View File

@ -1028,6 +1028,12 @@
"is-arrayish": "^0.2.1"
}
},
"es6-promise": {
"version": "4.2.4",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz",
"integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==",
"optional": true
},
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
@ -1296,6 +1302,29 @@
"is-extglob": "^1.0.0"
}
},
"extract-zip": {
"version": "1.6.7",
"resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz",
"integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=",
"optional": true,
"requires": {
"concat-stream": "1.6.2",
"debug": "2.6.9",
"mkdirp": "0.5.1",
"yauzl": "2.4.1"
},
"dependencies": {
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"optional": true,
"requires": {
"ms": "2.0.0"
}
}
}
},
"extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
@ -1316,6 +1345,15 @@
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
},
"fd-slicer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
"integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
"optional": true,
"requires": {
"pend": "~1.2.0"
}
},
"file-saver": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/file-saver/-/file-saver-1.3.8.tgz",
@ -1426,6 +1464,17 @@
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
},
"fs-extra": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz",
"integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=",
"optional": true,
"requires": {
"graceful-fs": "^4.1.2",
"jsonfile": "^2.1.0",
"klaw": "^1.0.0"
}
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@ -1996,6 +2045,16 @@
"minimalistic-assert": "^1.0.1"
}
},
"hasha": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz",
"integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=",
"optional": true,
"requires": {
"is-stream": "^1.0.1",
"pinkie-promise": "^2.0.0"
}
},
"helmet": {
"version": "3.13.0",
"resolved": "https://registry.npmjs.org/helmet/-/helmet-3.13.0.tgz",
@ -2357,6 +2416,15 @@
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
},
"jsonfile": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
"integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
"optional": true,
"requires": {
"graceful-fs": "^4.1.6"
}
},
"jsonify": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
@ -2390,6 +2458,12 @@
"verror": "1.10.0"
}
},
"kew": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz",
"integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=",
"optional": true
},
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
@ -2398,6 +2472,15 @@
"is-buffer": "^1.1.5"
}
},
"klaw": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
"integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
"optional": true,
"requires": {
"graceful-fs": "^4.1.9"
}
},
"labeled-stream-splicer": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz",
@ -2641,6 +2724,11 @@
"integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==",
"optional": true
},
"natives": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/natives/-/natives-1.1.4.tgz",
"integrity": "sha512-Q29yeg9aFKwhLVdkTAejM/HvYG0Y1Am1+HUkFQGn5k2j8GS+v60TVmZh6nujpEAj/qql+wGUrlryO8bF+b1jEg=="
},
"ncp": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
@ -2772,6 +2860,11 @@
"mem": "^1.1.0"
}
},
"os-tmpdir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
},
"outpipe": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/outpipe/-/outpipe-1.1.1.tgz",
@ -2915,16 +3008,54 @@
"sha.js": "^2.4.8"
}
},
"pend": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
"integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
"optional": true
},
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
"phantomjs-prebuilt": {
"version": "2.1.16",
"resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz",
"integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=",
"optional": true,
"requires": {
"es6-promise": "^4.0.3",
"extract-zip": "^1.6.5",
"fs-extra": "^1.0.0",
"hasha": "^2.2.0",
"kew": "^0.7.0",
"progress": "^1.1.8",
"request": "^2.81.0",
"request-progress": "^2.0.1",
"which": "^1.2.10"
}
},
"pify": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
},
"pinkie": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
"integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
"optional": true
},
"pinkie-promise": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
"integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
"optional": true,
"requires": {
"pinkie": "^2.0.0"
}
},
"platform": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/platform/-/platform-1.3.5.tgz",
@ -2960,6 +3091,12 @@
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
},
"progress": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
"integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=",
"optional": true
},
"proxy-addr": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz",
@ -3192,6 +3329,15 @@
"uuid": "^3.1.0"
}
},
"request-progress": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz",
"integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=",
"optional": true,
"requires": {
"throttleit": "^1.0.0"
}
},
"require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@ -3558,6 +3704,12 @@
"acorn-node": "^1.2.0"
}
},
"throttleit": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz",
"integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=",
"optional": true
},
"through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
@ -3580,6 +3732,14 @@
"process": "~0.11.0"
}
},
"tmp": {
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
"integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
"requires": {
"os-tmpdir": "~1.0.2"
}
},
"to-arraybuffer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
@ -3760,6 +3920,40 @@
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
"integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
},
"webshot": {
"version": "0.18.0",
"resolved": "https://registry.npmjs.org/webshot/-/webshot-0.18.0.tgz",
"integrity": "sha1-BX5pJbw5cK6X7tVvwjEYV4y8/cM=",
"requires": {
"cross-spawn": "^0.2.3",
"graceful-fs": "~3.0.4",
"phantomjs-prebuilt": "^2.1.3",
"tmp": "~0.0.25"
},
"dependencies": {
"cross-spawn": {
"version": "0.2.9",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-0.2.9.tgz",
"integrity": "sha1-vWf5bAfvtjA7f+lMHpefiEeOCjk=",
"requires": {
"lru-cache": "^2.5.0"
}
},
"graceful-fs": {
"version": "3.0.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz",
"integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=",
"requires": {
"natives": "^1.1.0"
}
},
"lru-cache": {
"version": "2.7.3",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
"integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI="
}
}
},
"whatwg-url": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-2.0.1.tgz",
@ -3875,6 +4069,15 @@
"requires": {
"camelcase": "^4.1.0"
}
},
"yauzl": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz",
"integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=",
"optional": true,
"requires": {
"fd-slicer": "~1.0.1"
}
}
}
}

View File

@ -6,10 +6,17 @@
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "browserify public/js/main.js -o public/js/bundle.js",
"watch": "watchify public/js/main.js -o public/js/bundle.js"
"watch": "watchify public/js/main.js -o public/js/bundle.js",
"prestart": "npm run build",
"start": "nodemon --ignore public/js/bundle.js index.js",
"poststart":"npm run watch"
},
"author": "Abhishek Sinha",
"license": "ISC",
"repository" :
{ "type" : "git",
"url" : "https://github.com/avishkarabhishek786/flo-greeting-cards.git"
},
"dependencies": {
"axios": "^0.18.0",
"bitcoin-core": "^2.0.0",
@ -32,5 +39,8 @@
"popper.js": "^1.14.3",
"qrcode": "^1.2.2",
"watchify": "^3.11.0"
},
"devDependencies": {
"nodemon": "^1.18.3"
}
}

View File

@ -24,7 +24,7 @@ body {
/* Declare heights because of positioning of img element */
.carousel-item {
height: 32rem;
height: 38rem;
background-color: #777;
}
.carousel-item > img {
@ -32,7 +32,7 @@ body {
top: 0;
left: 0;
min-width: 100%;
height: 32rem;
height: 38rem;
}

View File

@ -0,0 +1,66 @@
img {
max-height: 1000px;
max-width: 800px;
}
.mt-5 {
margin-top: 5rem;
}
/*
font-family: 'Lobster', cursive;
font-family: 'Dancing Script', cursive;
font-family: 'Amatic SC', cursive;
font-family: 'Ranga', cursive;
font-family: 'Great Vibes', cursive;
font-family: 'Caveat', cursive;
font-family: 'Arapey', serif;
*/
img {
max-height: 1000px;
max-width: 800px;
}
.mt-5 {
margin-top: 5rem;
}
.pt-10 {
padding: 10px 10px;
}
.span_user_msg {
font-size: 18px;
font-family: 'Ranga', cursive;
color: black;
padding: 15px 10px;
margin: 20px 10px;
}
.pdfcontent, .pdfcontent > div {
text-align:center;
width: 1124px;
height: 1590px;
border: none;
background-color: #ffffff;
/*background: lightblue url("/images/bg.jpg") no-repeat fixed center;*/
}
.pdfcontent > * {
padding: 10px 5px;
margin: auto;
}
.border_stashed {
border-style: dotted;
}

BIN
public/images/diwali3.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB

BIN
public/images/hbd10.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 680 KiB

BIN
public/images/hbd11.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 KiB

BIN
public/images/hbd12.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

BIN
public/images/hbd13.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 357 KiB

BIN
public/images/hbd14.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 339 KiB

BIN
public/images/hbd15.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 315 KiB

BIN
public/images/hbd3.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 390 KiB

BIN
public/images/hbd4.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 KiB

BIN
public/images/hbd5.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 270 KiB

BIN
public/images/hbd6.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 274 KiB

BIN
public/images/hbd7.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 KiB

BIN
public/images/hbd8.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 KiB

BIN
public/images/hbd9.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 439 KiB

BIN
public/images/hny1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 KiB

BIN
public/images/xmas.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 KiB

File diff suppressed because one or more lines are too long

View File

@ -20,17 +20,50 @@ $(document).on('keyup', '.stick_text', function() {
}
});
function saveAs(uri, filename) {
var link = document.createElement('a');
if (typeof link.download === 'string') {
link.href = uri;
link.download = filename;
//Firefox requires the link to be in the body
document.body.appendChild(link);
//simulate click
link.click();
//remove the link when done
document.body.removeChild(link);
} else {
window.open(uri);
}
}
$(document).on('click', '#bc-btn', function() {
var text = $('#_bdata').val();
var _from = $('#_from').val();
var _to = $('#_to').val();
var _cardid = $('#_cardid').val();
var _recp_addr = $('#_recp_addr').val();
var _floamount = $('#_floamount').val();
var atLeastOneIsChecked = $('input[name="chk"]').is(":checked");
if (!atLeastOneIsChecked) {
alert('Please specify download option: Image and/or PDF');
return false;
}
$.ajax({
type: 'post',
url: '/write',
data: {_bdata:text,_from:_from, _to:_to, _cardid:_cardid},
data: {_bdata:text,_from:_from, _to:_to, _cardid:_cardid, _recp_addr:_recp_addr, _floamount:_floamount},
success: function(data) {
console.log(data);
if ( data.error==true && data.msg.length>0) {
alert(data.msg);
return;
}
var txnid = $.trim(data.txnid);
if(txnid.length < 1) {
@ -38,6 +71,10 @@ $(document).on('click', '#bc-btn', function() {
return false;
}
if (parseFloat(_floamount)>0) {
$('#gift_flo_msg').html(`<strong> ${data._from} sent you ${data._floamount} FLOs. </strong>`);
}
var urlstring = `https://testnet.florincoin.info/tx/${txnid}`;
var canvas = document.getElementById('canvas');
@ -45,20 +82,31 @@ $(document).on('click', '#bc-btn', function() {
var opts = {
width: 200,
errorCorrectionLevel: 'H'
}
}
var download_pdf = $('#Checkpdf').is(":checked");
var download_image = $('#Checkimg').is(":checked");
QRCode.toCanvas(canvas, urlstring, opts, function (error) {
if (error) console.error(error)
console.log('Qr generated! for : '.urlstring);
// canvas in QRCode.toCanvas()is different to canvas below
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();
if (download_pdf==true) {
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', 0, 0);
doc.save(namepdf);
doc.autoPrint();
}
if (download_image==true) {
saveAs(canvas.toDataURL(), 'file-name.png');
}
});
})
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);

View File

@ -45,6 +45,10 @@ router.post('/write', [
.isLength({min:1})
.isAlphanumeric()
.withMessage('Could not find the card id! Please select the card again.')
.trim(),
check('_recp_addr')
.trim(),
check('_floamount')
.trim()
],
(req,res)=>{
@ -65,24 +69,67 @@ router.post('/write', [
let _from = data._from;
let _to = data._to;
let card_id = data._cardid;
let txComment = `${_from} #flogreets to ${_to}: ${user_msg}`;
var toaddress = "oXCsMUyX3mLJEdnn8SXoH6gyPW9Jd6kjYu";
var amount = 1;
let _recp_addr = data._recp_addr;
let _floamount = isNaN(data._floamount) ? 0 : parseFloat(data._floamount);
try {
client.sendToAddress(toaddress, amount, "Greetings App", "REBC Greetigs App", false, false, 1, 'UNSET', txComment)
.then((txnid) => {
console.log(txnid)
res.json({"error":false, "txnid":txnid, "_from":_from, "_to":_to, "card_id":card_id, "user_msg":user_msg})
});
//res.json({"error":false, "txnid":"TXIDKJKLGJLKSJLKGJSKJGK", "_from":_from, "_to":_to, "card_id":card_id, "user_msg":user_msg})
}catch(err){
console.log("Unable to send FLO." + err.message);
client.getBalance().then(balance=>{
let low_bal = `You have insufficeint balance of ${balance}. This transaction will be discarded.`;
if(balance < 1) {
res.json({"error":true, "txnid":"NOTXIDKJKLGJLKSJLKGJSKJGK", "_from":null, "_to":null, "card_id":null, "user_msg":null, "_floamount":null, msg:low_bal})
}
if(_floamount !== "" && _floamount > 1 && balance <= _floamount) {
low_bal += ` Reduce some amount (0.001 FLO appx) for miner's fee.`;
res.json({"error":true, "txnid":"NOTXIDKJKLGJLKSJLKGJSKJGK", "_from":null, "_to":null, "card_id":null, "user_msg":null, "_floamount":null, msg:low_bal})
}
})
} catch (error) {
console.log("Unable to send FLO." + err.message);
res.json({"error":true, "txnid":"NOTXIDKJKLGJLKSJLKGJSKJGK", "_from":null, "_to":null, "card_id":null, "user_msg":null, "_floamount":null, msg:err.message})
}
var amount = 1;
console.log(_recp_addr.length);
if(_floamount !== "" && !isNaN(_floamount) && _floamount > 1) {
amount = _floamount;
if (_recp_addr.length <= 0) {
let no_user_adr = `Please specify recipient's address`;
res.json({"error":true, "txnid":"NOTXIDKJKLGJLKSJLKGJSKJGK", "_from":null, "_to":null, "card_id":null, "user_msg":null, "_floamount":null, msg:no_user_adr})
}
}
//res.json({"error":true, "txnid":null, "card_id":null, "user_msg":null})
if(_recp_addr.length > 0 && (_floamount == "" || isNaN(_floamount))) {
let no_user_adr = `Please specify both recipient's address and amount of FLOs to be sent.`;
res.json({"error":true, "txnid":"NOTXIDKJKLGJLKSJLKGJSKJGK", "_from":null, "_to":null, "card_id":null, "user_msg":null, "_floamount":null, msg:no_user_adr})
}
if (_.trim(_recp_addr)=="") {
_recp_addr = "";
}
var toaddress = _recp_addr.length > 0 ? _recp_addr : "oXCsMUyX3mLJEdnn8SXoH6gyPW9Jd6kjYu";
let txComment = `${_from} #flogreets to ${_to}: ${user_msg}`;
if (txComment.length> 500) {
let too_big = `Message exceeding maximum limit. Please shorten your message.`;
res.json({"error":true, "txnid":"NOTXIDKJKLGJLKSJLKGJSKJGK", "_from":null, "_to":null, "card_id":null, "user_msg":null, "_floamount":null, msg:too_big})
}
try {
client.sendToAddress(toaddress, amount, "Greetings App", "REBC Greetigs App", false, false, 1, 'UNSET', txComment)
.then((txnid) => {
console.log(txnid)
res.json({"error":false, "txnid":txnid, "_from":_from, "_to":_to, "card_id":card_id, "user_msg":user_msg, "_floamount":amount, msg:null})
});
//res.json({"error":false, "txnid":"TXIDKJKLGJLKSJLKGJSKJGK", "_from":_from, "_to":_to, "card_id":card_id, "user_msg":user_msg, "_floamount":amount, msg:null})
}catch(err){
console.log("Unable to send FLO." + err.message);
res.json({"error":true, "txnid":"NOTXIDKJKLGJLKSJLKGJSKJGK", "_from":null, "_to":null, "card_id":null, "user_msg":null, "_floamount":null, msg:err.message})
}
}
)

View File

@ -1,3 +1,56 @@
<% include partials/header.ejs %>
<h1>BithDay Carfds</h1>
<div class="container mt-5">
<div class="card-columns">
<div class="card">
<a href="/write/hbd"><img class="card-img" src="/images/hbd.jpg" alt="Card image"></a>
</div>
<div class="card">
<a href="/write/hbd2"><img class="card-img" src="/images/hbd2.jpg" alt="Card image"></a>
</div>
<div class="card">
<a href="/write/hbd3"><img class="card-img" src="/images/hbd3.jpg" alt="Card image"></a>
</div>
<div class="card">
<a href="/write/hbd4"><img class="card-img" src="/images/hbd4.jpg" alt="Card image"></a>
</div>
<div class="card">
<a href="/write/hbd5"><img class="card-img" src="/images/hbd5.jpg" alt="Card image"></a>
</div>
<div class="card">
<a href="/write/hbd6"><img class="card-img" src="/images/hbd6.jpg" alt="Card image"></a>
</div>
<div class="card">
<a href="/write/hbd7"><img class="card-img" src="/images/hbd7.jpg" alt="Card image"></a>
</div>
<div class="card">
<a href="/write/hbd8"><img class="card-img" src="/images/hbd8.jpg" alt="Card image"></a>
</div>
<div class="card">
<a href="/write/hbd9"><img class="card-img" src="/images/hbd9.jpg" alt="Card image"></a>
</div>
<div class="card">
<a href="/write/hbd10"><img class="card-img" src="/images/hbd10.jpg" alt="Card image"></a>
</div>
<div class="card">
<a href="/write/hbd11"><img class="card-img" src="/images/hbd11.jpg" alt="Card image"></a>
</div>
<div class="card">
<a href="/write/hbd12"><img class="card-img" src="/images/hbd12.jpg" alt="Card image"></a>
</div>
<div class="card">
<a href="/write/hbd13"><img class="card-img" src="/images/hbd13.jpg" alt="Card image"></a>
</div>
<div class="card">
<a href="/write/hbd14"><img class="card-img" src="/images/hbd14.jpg" alt="Card image"></a>
</div>
<div class="card">
<a href="/write/hbd15"><img class="card-img" src="/images/hbd15.jpg" alt="Card image"></a>
</div>
</div>
</div>
<% include partials/footer.ejs %>

View File

@ -1,3 +1,41 @@
<% include partials/header.ejs %>
<h1>XMAS Carfds</h1>
<div class="container mt-5">
<div class="card-columns">
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
</div>
</div>
<% include partials/footer.ejs %>

View File

@ -1,3 +1,41 @@
<% include partials/header.ejs %>
<h1>Diwali Carfds</h1>
<div class="container mt-5">
<div class="card-columns">
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
</div>
</div>
<% include partials/footer.ejs %>

View File

@ -1,6 +1,64 @@
<% include partials/header.ejs %>
<!--Carousel starts-->
<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="/images/hbd3.jpg" 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="/images/diwali3.jpg" 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="/images/xmas.jpg" 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="/images/hny1.jpg" 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>
<!--Carousel ends-->
<div class="container marketing">

View File

@ -1,3 +1,41 @@
<% include partials/header.ejs %>
<h1>Hapyy New Year Carfds</h1>
<div class="container mt-5">
<div class="card-columns">
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
<div class="card">
<img class="card-img" src="" alt="Card image">
</div>
</div>
</div>
<% include partials/footer.ejs %>

View File

@ -10,6 +10,8 @@
<!-- Custom styles for this template -->
<link href="/css/carousel.css" rel="stylesheet">
<link href="/css/main.css" rel="stylesheet">
<!--<link href="https://fonts.googleapis.com/css?family=Amatic+SC|Arapey:400,400i|Caveat|Dancing+Script|Great+Vibes|Lobster|Ranga" rel="stylesheet"> -->
<title><%=title%></title>
</head>
@ -48,62 +50,3 @@
</header>
<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

@ -1,6 +1,6 @@
<% include partials/header.ejs %>
<div class="container">
<div class="container mt-5">
<div class="form-header">
<% if (Object.keys(errors).length === 0) { %>
<h2>Please write a review about your experience here:</h2>
@ -28,32 +28,52 @@
<textarea id="_bdata" class="form-control stick_text" placeholder="Your message here"name="_bdata"></textarea>
<input type="hidden" id="_cardid" name="_cardid" value="<%=data.card_id%>" >
<label for="_recp_addr">(Optional) Receipient's Address: (Leave blank if you are not sending FLOs)</label>
<input type="text" class="form-control stick_text" name="_recp_addr" id="_recp_addr">
<label for="_floamount">(Optional) Amount of FLO to send in FLO unit: (Leave blank if you don't want to send FLO. Minimum 1 FLO, if sending) </label>
<input type="text" class="form-control stick_text" name="_floamount" id="_floamount">
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" name="chk" id="Checkpdf">
<label class="custom-control-label" for="Checkpdf">Download PDF</label>
</div>
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" name="chk" id="Checkimg">
<label class="custom-control-label" for="Checkimg">Download Image</label>
</div>
<br>
<button type="submit" class="btn btn-primary" id="bc-btn">Submit</button>
</div>
<div id="pdfcontent">
<div class="border_stashed">
<div class="card mb-3 text-center">
<div class="card-body">
<h5 class="card-title">Dear <span id="span_to">Alice</span></h5>
</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"><i>Your special message will appear here.</i></span></p>
<p class="card-text"><small class="text-muted">From <span id="span_from">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">--- A Ranchi Mall FLO Blockchian Product ---</small></p>
</p>
<div id="pdfcontent" height="1000" width="1000" class="pdfcontent">
<div class="card mb-3 text-center">
<div class="card-body">
<h5 class="card-title"><span id="span_to">Alice</span></h5>
<div class="text-center">
<img src="/images/<%=data.card_id%>.jpg" alt="Card image cap" id="pdf-img">
</div>
<p class="card-text span_user_msg" id="span_user_msg"><i>Your special message will appear here.</i></p>
<p class="card-text text-muted">From <span id="span_from">Bob</span></p>
<p class="card-text">
<canvas id="canvas"></canvas>
</p>
<p class="card-text" id="gift_flo_msg"></p>
<p class="card-text">
<img src="/images/rm.png" alt="Ranchi Mall logo" width="50" height="50">
<img src="/images/FLO_teal.png" alt="FLO logo" width="50" height="50">
<p><small class="text-muted">--- A Ranchi Mall FLO Blockchian Product ---</small></p>
</p>
</div>
</div>
</div>