copy to clipboard works
This commit is contained in:
parent
eda480b81a
commit
732c845854
11 changed files with 162 additions and 84 deletions
|
@ -15,14 +15,12 @@
|
||||||
.main {
|
.main {
|
||||||
float: left;
|
float: left;
|
||||||
width: 65%;
|
width: 65%;
|
||||||
margin-right: 1%;
|
|
||||||
padding-right: 1%;
|
|
||||||
border-right: 1px lightgrey solid;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar {
|
.sidebar {
|
||||||
float: right;
|
float: right;
|
||||||
width: 32%;
|
width: 33%;
|
||||||
}
|
}
|
||||||
|
|
||||||
footer {
|
footer {
|
||||||
|
@ -63,7 +61,8 @@ footer {
|
||||||
|
|
||||||
/* text */
|
/* text */
|
||||||
|
|
||||||
a {
|
a, a:visited {
|
||||||
|
color: blue;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
h1 {
|
h1 {
|
||||||
|
@ -78,6 +77,10 @@ h2 {
|
||||||
padding: 6px;
|
padding: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.subheader {
|
||||||
|
margin-top: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
h4 {
|
h4 {
|
||||||
padding: 3px;
|
padding: 3px;
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,9 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
/* show routes */
|
/* show routes */
|
||||||
|
.asset-name {
|
||||||
|
font-size: large;
|
||||||
|
}
|
||||||
|
|
||||||
.show-asset {
|
.show-asset {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
@ -24,10 +27,30 @@
|
||||||
margin: 0px;
|
margin: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.table-metadata {
|
.panel.links {
|
||||||
font-size: small;
|
font-size: small;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
input.link {
|
||||||
|
width: 80%;
|
||||||
|
}
|
||||||
|
|
||||||
|
button.copy-button {
|
||||||
|
padding: 4px;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.metadata-table {
|
||||||
|
font-size: small;
|
||||||
|
border-collapse: collapse;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.metadata-row {
|
||||||
|
border-bottom: 1px solid lightgrey;
|
||||||
|
margin: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
.left-column {
|
.left-column {
|
||||||
width: 30%;
|
width: 30%;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
@ -39,7 +62,7 @@
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-top: 2px;
|
margin-top: 2px;
|
||||||
padding-top: 2px;
|
padding-top: 2px;
|
||||||
border-top: 1px lightgrey solid;
|
border-top: 1px solid lightgrey;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* examples */
|
/* examples */
|
||||||
|
|
|
@ -92,16 +92,16 @@ socket.on('publish-status', function(msg){
|
||||||
updatePublishStatus(msg);
|
updatePublishStatus(msg);
|
||||||
});
|
});
|
||||||
socket.on('publish-failure', function(msg){
|
socket.on('publish-failure', function(msg){
|
||||||
document.getElementById('publish-active-area').innerHTML = '<p>' + JSON.stringify(msg) + '</p><p> --(✖╭╮✖)→ </p><strong>For help, post the above error text in the #speech channel on the <a href="https://lbry.slack.com/" target="_blank">lbry slack</a></strong>';
|
document.getElementById('publish-active-area').innerHTML = '<p> --(✖╭╮✖)→ </p><p>' + JSON.stringify(msg) + '</p><strong>For help, post the above error text in the #speech channel on the <a href="https://lbry.slack.com/" target="_blank">lbry slack</a></strong>';
|
||||||
});
|
});
|
||||||
|
|
||||||
socket.on('publish-complete', function(msg){
|
socket.on('publish-complete', function(msg){
|
||||||
var publishResults;
|
var publishResults;
|
||||||
var directUrl = '/' + msg.name + '/' + msg.result.claim_id;
|
var showUrl = '/s/' + msg.name + '/' + msg.result.claim_id;
|
||||||
// build new publish area
|
// build new publish area
|
||||||
publishResults = '<p>Your publish is complete! You are being redicted to it</p>';
|
publishResults = '<p>Your publish is complete! You are being redirected to it now.</p>';
|
||||||
publishResults += '<p><a target="_blank" href="' + directUrl + '">if you do not get redirected, click here</a></p>';
|
publishResults += '<p><a target="_blank" href="' + showUrl + '">If you do not get redirected, click here.</a></p>';
|
||||||
// update publish area
|
// update publish area
|
||||||
document.getElementById('publish-active-area').innerHTML = publishResults;
|
document.getElementById('publish-active-area').innerHTML = publishResults;
|
||||||
window.location.href = directUrl;
|
window.location.href = showUrl;
|
||||||
});
|
});
|
|
@ -67,7 +67,6 @@ module.exports = (app, siofu, hostedContentPath) => {
|
||||||
};
|
};
|
||||||
// set the data
|
// set the data
|
||||||
const fileExtension = filePath.substring(filePath.lastIndexOf('.'));
|
const fileExtension = filePath.substring(filePath.lastIndexOf('.'));
|
||||||
console.log(fileExtension);
|
|
||||||
let data = {
|
let data = {
|
||||||
type : null,
|
type : null,
|
||||||
buffer: assetBuffer.toString('base64'),
|
buffer: assetBuffer.toString('base64'),
|
||||||
|
|
22
server.js
22
server.js
|
@ -53,6 +53,28 @@ const hbs = expressHandlebars.create({
|
||||||
</script>`
|
</script>`
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
ifConditional (varOne, operator, varTwo, options) {
|
||||||
|
switch (operator) {
|
||||||
|
case '===':
|
||||||
|
return (varOne === varTwo) ? options.fn(this) : options.inverse(this);
|
||||||
|
case '!==':
|
||||||
|
return (varOne !== varTwo) ? options.fn(this) : options.inverse(this);
|
||||||
|
case '<':
|
||||||
|
return (varOne < varTwo) ? options.fn(this) : options.inverse(this);
|
||||||
|
case '<=':
|
||||||
|
return (varOne <= varTwo) ? options.fn(this) : options.inverse(this);
|
||||||
|
case '>':
|
||||||
|
return (varOne > varTwo) ? options.fn(this) : options.inverse(this);
|
||||||
|
case '>=':
|
||||||
|
return (varOne >= varTwo) ? options.fn(this) : options.inverse(this);
|
||||||
|
case '&&':
|
||||||
|
return (varOne && varTwo) ? options.fn(this) : options.inverse(this);
|
||||||
|
case '||':
|
||||||
|
return (varOne || varTwo) ? options.fn(this) : options.inverse(this);
|
||||||
|
default:
|
||||||
|
return options.inverse(this);
|
||||||
|
}
|
||||||
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
app.engine('handlebars', hbs.engine);
|
app.engine('handlebars', hbs.engine);
|
||||||
|
|
|
@ -2,4 +2,34 @@
|
||||||
<div id="asset-placeholder" data-filepath="{{{fileInfo.filePath}}}">
|
<div id="asset-placeholder" data-filepath="{{{fileInfo.filePath}}}">
|
||||||
<p> loading... </p>
|
<p> loading... </p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<script src="/socket.io/socket.io.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
var socket = io();
|
||||||
|
var filePath = document.getElementById('asset-placeholder').dataset.filepath;
|
||||||
|
if (filePath) {
|
||||||
|
// send request for the file
|
||||||
|
socket.emit('asset-request', filePath);
|
||||||
|
// update the html
|
||||||
|
document.getElementById('asset-placeholder').innerHTML = '<p>Loading...</p><div id="progress-bar"></div>';
|
||||||
|
// start a progress animation
|
||||||
|
createProgressBar(document.getElementById('progress-bar'), 12);
|
||||||
|
}
|
||||||
|
// wait for the file to be sent
|
||||||
|
socket.on('asset-transfer', function(data) {
|
||||||
|
switch (data.type) {
|
||||||
|
case 'image/jpeg':
|
||||||
|
case 'image/gif':
|
||||||
|
case 'image/png':
|
||||||
|
const base64Image = 'data:' + data.type + ';base64,' + data.buffer;
|
||||||
|
document.getElementById("asset-placeholder").innerHTML = '<img class="show-asset" src="' + base64Image + '"/>';
|
||||||
|
break;
|
||||||
|
case 'video/mp4':
|
||||||
|
const base64video = 'data:' + data.type + ';base64,' + data.buffer;
|
||||||
|
document.getElementById("asset-placeholder").innerHTML = '<video class="show-asset" controls> <source src="' + base64video + '"></video>';
|
||||||
|
break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
69
views/partials/assetInfo.handlebars
Normal file
69
views/partials/assetInfo.handlebars
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
<div class="panel">
|
||||||
|
<h2>Title</h2>
|
||||||
|
<p class="asset-name">{{fileInfo.name}}</>
|
||||||
|
</div>
|
||||||
|
<div class="panel links">
|
||||||
|
<h2 class="subheader">Links</h2>
|
||||||
|
<a href="/{{fileInfo.name}}/{{fileInfo.claimId}}">Direct Link</a>
|
||||||
|
</br>
|
||||||
|
<input type="text" id="direct-link" class="link" readonly="true" spellcheck="false" value="spee.ch/{{fileInfo.name}}/{{fileInfo.claimId}}"/>
|
||||||
|
<button class="copy-button" data-elementtocopy="direct-link" onclick="copyToClipboard(event)">copy</button>
|
||||||
|
</br>
|
||||||
|
<br/>
|
||||||
|
<a href="/s/{{fileInfo.name}}/{{fileInfo.claimId}}">Details Link</a>
|
||||||
|
</br>
|
||||||
|
<input type="text" id="show-link" class="link" readonly="true" spellcheck="false" value="spee.ch/s/{{fileInfo.name}}/{{fileInfo.claimId}}"/>
|
||||||
|
<button class="copy-button" data-elementtocopy="show-link" onclick="copyToClipboard(event)">copy</button>
|
||||||
|
</br>
|
||||||
|
<br/>
|
||||||
|
Embed HTML
|
||||||
|
</br>
|
||||||
|
{{#ifConditional fileInfo.fileType '===' 'video/mp4'}}
|
||||||
|
<input type="text" id="embed-text" class="link" readonly="true" spellcheck="false" value='<video controls><source src="https://spee.ch/{{fileInfo.name}}/{{fileInfo.claimId}}" /></video>'/>
|
||||||
|
{{else}}
|
||||||
|
<input type="text" id="embed-text" class="link" readonly="true" spellcheck="false" value='<img src="https://spee.ch/{{fileInfo.name}}/{{fileInfo.claimId}}" />'/>
|
||||||
|
{{/ifConditional}}
|
||||||
|
<button class="copy-button" data-elementtocopy="embed-text" onclick="copyToClipboard(event)">copy</button>
|
||||||
|
<br/>
|
||||||
|
<br/>
|
||||||
|
</div>
|
||||||
|
<div class="panel">
|
||||||
|
<h2 class="subheader">Metadata</h2>
|
||||||
|
<table class="metadata-table" style="table-layout: fixed">
|
||||||
|
<tr class="metadata-row">
|
||||||
|
<td class="left-column">Name</td>
|
||||||
|
<td>{{fileInfo.name}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="metadata-row">
|
||||||
|
<td class="left-column">Claim Id</td>
|
||||||
|
<td>{{fileInfo.claimId}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="metadata-row">
|
||||||
|
<td class="left-column">File Name</td>
|
||||||
|
<td>{{fileInfo.fileName}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="left-column">fileType</td>
|
||||||
|
<td>{{#if fileInfo.fileType}}
|
||||||
|
{{fileInfo.fileType}}
|
||||||
|
{{else}}
|
||||||
|
unknown
|
||||||
|
{{/if}}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type ="text/javascript">
|
||||||
|
// update the link holder
|
||||||
|
function copyToClipboard(event){
|
||||||
|
var elementToCopy = event.target.dataset.elementtocopy;
|
||||||
|
var element = document.getElementById(elementToCopy);
|
||||||
|
element.select();
|
||||||
|
try {
|
||||||
|
var successful = document.execCommand('copy');
|
||||||
|
} catch (err) {
|
||||||
|
alert('Oops, unable to copy');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
|
@ -1,13 +0,0 @@
|
||||||
<div class="panel">
|
|
||||||
<h2>links</h2>
|
|
||||||
<table class="table-metadata" style="table-layout: fixed">
|
|
||||||
<tr>
|
|
||||||
<td class="left-column">Direct Link:</td>
|
|
||||||
<td><a href="https://spee.ch/{{fileInfo.name}}/{{fileInfo.claimId}}">https://spee.ch/{{fileInfo.name}}/{{fileInfo.claimId}}</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td class="left-column">Embed:</td>
|
|
||||||
<td><code><img src="https://spee.ch/{{fileInfo.name}}/{{fileInfo.claimId}}" /></code></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
|
@ -1,21 +0,0 @@
|
||||||
<div class="panel">
|
|
||||||
<h2>metadata</h2>
|
|
||||||
<table class="table-metadata" style="table-layout: fixed">
|
|
||||||
<tr>
|
|
||||||
<td class="left-column">Name</td>
|
|
||||||
<td>{{fileInfo.name}}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td class="left-column">Claim Id</td>
|
|
||||||
<td>{{fileInfo.claimId}}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td class="left-column">File Name</td>
|
|
||||||
<td>{{fileInfo.fileName}}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td class="left-column">fileType</td>
|
|
||||||
<td>{{fileInfo.fileType}}</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
|
@ -4,40 +4,7 @@
|
||||||
{{> asset}}
|
{{> asset}}
|
||||||
</div>
|
</div>
|
||||||
<div class="sidebar">
|
<div class="sidebar">
|
||||||
<h1>{{fileInfo.name}}</h1>
|
{{> assetInfo}}
|
||||||
{{> assetLinks}}
|
|
||||||
{{> assetMetadata}}
|
|
||||||
</div>
|
</div>
|
||||||
{{> footer}}
|
{{> footer}}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/socket.io/socket.io.js"></script>
|
|
||||||
<script type="text/javascript">
|
|
||||||
var socket = io();
|
|
||||||
var filePath = document.getElementById('asset-placeholder').dataset.filepath;
|
|
||||||
console.log(filePath);
|
|
||||||
if (filePath) {
|
|
||||||
// send request for the file
|
|
||||||
socket.emit('asset-request', filePath);
|
|
||||||
// update the html
|
|
||||||
document.getElementById('asset-placeholder').innerHTML = '<p>Loading...</p><div id="progress-bar"></div>';
|
|
||||||
// start a progress animation
|
|
||||||
createProgressBar(document.getElementById('progress-bar'), 12);
|
|
||||||
}
|
|
||||||
// wait for the file to be sent
|
|
||||||
socket.on('asset-transfer', function(data) {
|
|
||||||
switch (data.type) {
|
|
||||||
case 'image/jpeg':
|
|
||||||
case 'image/gif':
|
|
||||||
case 'image/png':
|
|
||||||
const base64Image = 'data:' + data.type + ';base64,' + data.buffer;
|
|
||||||
document.getElementById("asset-placeholder").innerHTML = '<img class="show-asset" src="' + base64Image + '"/>';
|
|
||||||
break;
|
|
||||||
case 'video/mp4':
|
|
||||||
const base64video = 'data:' + data.type + ';base64,' + data.buffer;
|
|
||||||
document.getElementById("asset-placeholder").innerHTML = '<video class="show-asset" controls> <source src="' + base64video + '"></video>';
|
|
||||||
break;
|
|
||||||
default: break;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
|
@ -6,7 +6,6 @@
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var socket = io();
|
var socket = io();
|
||||||
var filePath = document.getElementById('asset-placeholder').dataset.filepath;
|
var filePath = document.getElementById('asset-placeholder').dataset.filepath;
|
||||||
console.log(filePath);
|
|
||||||
if (filePath) {
|
if (filePath) {
|
||||||
// send request for the file
|
// send request for the file
|
||||||
socket.emit('asset-request', filePath);
|
socket.emit('asset-request', filePath);
|
||||||
|
|
Loading…
Add table
Reference in a new issue