Import wwwroot
338
web/www/css/site.css
Normal file
@@ -0,0 +1,338 @@
|
|||||||
|
@import url('https://fonts.googleapis.com/css?family=Ubuntu');
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
font-family: 'Ubuntu', sans-serif;
|
||||||
|
background-color: #f4eddb;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #EB8C11;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.background-image {
|
||||||
|
background-image: url('/img/pc_bg.png');
|
||||||
|
-ms-background-repeat: repeat-x;
|
||||||
|
background-repeat: repeat-x;
|
||||||
|
-ms-background-position: center bottom;
|
||||||
|
background-position: center bottom;
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
bottom: 0;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
-webkit-user-select: text;
|
||||||
|
z-index: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Footer */
|
||||||
|
|
||||||
|
.footer {
|
||||||
|
background-image: url('/img/pc_footer.png');
|
||||||
|
-ms-background-repeat: space;
|
||||||
|
background-repeat: space;
|
||||||
|
-ms-background-position: center bottom;
|
||||||
|
background-position: center bottom;
|
||||||
|
background-color: #aca496;
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 69px;
|
||||||
|
left: 0;
|
||||||
|
bottom: 0;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
-webkit-user-select: text;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.twitter-link {
|
||||||
|
position: absolute;
|
||||||
|
right: 2em;
|
||||||
|
bottom: 0;
|
||||||
|
font-size: 3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.twitter-link a {
|
||||||
|
color: rgb(62, 62, 41);
|
||||||
|
}
|
||||||
|
|
||||||
|
.twitter-link a:hover {
|
||||||
|
color: rgb(33, 33, 26);
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Header */
|
||||||
|
|
||||||
|
.title {
|
||||||
|
padding: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title h1 {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title h2 {
|
||||||
|
max-width: 500px;
|
||||||
|
font-weight: normal;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-block {
|
||||||
|
color: #e18712;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-block a {
|
||||||
|
font-size: 1.2em;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Main block + input */
|
||||||
|
|
||||||
|
.shadow {
|
||||||
|
box-shadow: 0 12px 8px -6px #a79d87;
|
||||||
|
box-shadow: 0 12px 8px -6px rgba(167, 157, 135, 0.4);
|
||||||
|
}
|
||||||
|
|
||||||
|
.main {
|
||||||
|
text-align: center;
|
||||||
|
padding: 5em 2em 10em;
|
||||||
|
max-width: 860px;
|
||||||
|
width: 90%;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 3em 0;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-border {
|
||||||
|
border: thin solid #a39c8e;
|
||||||
|
background: #f4ecda;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-border {
|
||||||
|
background-color: #e4dac8;
|
||||||
|
border: none;
|
||||||
|
border-bottom: 1px solid #a39c8e;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-border input {
|
||||||
|
border: none;
|
||||||
|
padding: 0.5em 0 0.5em 0.5em;
|
||||||
|
width: calc(100% - 2em);
|
||||||
|
font-size: 2em;
|
||||||
|
line-height: 1;
|
||||||
|
color: #616161;
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
*:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Input button (arrow) */
|
||||||
|
|
||||||
|
.arrow-button {
|
||||||
|
float: right;
|
||||||
|
font-size: 2em;
|
||||||
|
padding-top: 0.5em;
|
||||||
|
padding-right: 0.3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.arrow-button a {
|
||||||
|
color: rgb(142, 134, 119);
|
||||||
|
}
|
||||||
|
|
||||||
|
.arrow-button a:hover {
|
||||||
|
background: none;
|
||||||
|
color: rgb(105, 98, 86);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Controls under input */
|
||||||
|
|
||||||
|
.controls {
|
||||||
|
padding-left: 1em;
|
||||||
|
word-spacing: 0.15em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.controls a:hover {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Options */
|
||||||
|
.selected-option, a:hover {
|
||||||
|
background: orange;
|
||||||
|
color: whitesmoke;
|
||||||
|
border: 1px orange;
|
||||||
|
-ms-border-radius: 3px;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.locked {
|
||||||
|
-ms-opacity: 0.3;
|
||||||
|
opacity: 0.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Man image */
|
||||||
|
.man {
|
||||||
|
width: 210px;
|
||||||
|
height: 333px;
|
||||||
|
background-image: url('/img/man.png');
|
||||||
|
-ms-background-repeat: no-repeat;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
-ms-background-position: center bottom;
|
||||||
|
background-position: center bottom;
|
||||||
|
background-color: transparent;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 100px;
|
||||||
|
left: 30%;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Patreon block */
|
||||||
|
|
||||||
|
.patreon {
|
||||||
|
background: rgb(171, 163, 149);
|
||||||
|
border: 1px rgb(240, 232, 214) solid;
|
||||||
|
bottom: 6em;
|
||||||
|
float: right;
|
||||||
|
position: absolute;
|
||||||
|
right: 2em;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Placeholder */
|
||||||
|
::-webkit-input-placeholder { color: rgb(171, 163, 149); } /* Chrome/Opera/Safari */
|
||||||
|
::-moz-placeholder { color: rgb(171, 163, 149); } /* Firefox 19+ */
|
||||||
|
:-ms-input-placeholder { color: rgb(171, 163, 149); } /* IE 10+ */
|
||||||
|
:-moz-placeholder { color: rgb(171, 163, 149); } /* Firefox 18- */
|
||||||
|
|
||||||
|
/* Tooltips */
|
||||||
|
|
||||||
|
.tooltip {
|
||||||
|
display: none;
|
||||||
|
position: absolute;
|
||||||
|
background: rgb(171, 163, 149);
|
||||||
|
border: 1px rgb(244, 236, 218) solid;
|
||||||
|
padding: 10px;
|
||||||
|
color: #4a4030;
|
||||||
|
max-width: 350px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Modal popup */
|
||||||
|
|
||||||
|
.modal {
|
||||||
|
position: fixed;
|
||||||
|
top: 20%;
|
||||||
|
left: 50%;
|
||||||
|
width: 50%;
|
||||||
|
max-width: 700px;
|
||||||
|
-ms-transform: translate3d(-50%,-50%, 0);
|
||||||
|
-webkit-transform: translate3d(-50%,-50%, 0);
|
||||||
|
transform: translate3d(-50%,-50%, 0);
|
||||||
|
height: 80px;
|
||||||
|
background: #56524b;
|
||||||
|
text-align: center;
|
||||||
|
z-index: 10;
|
||||||
|
outline: 9999px solid rgba(0,0,0,0.8);
|
||||||
|
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal > input {
|
||||||
|
width: 100%;
|
||||||
|
font-size: 3em;
|
||||||
|
border: none;
|
||||||
|
background: none;
|
||||||
|
border-bottom: 1px dotted black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-links {
|
||||||
|
padding-top: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-links span {
|
||||||
|
padding-right: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-links a:hover {
|
||||||
|
color: #EB8C11;
|
||||||
|
background: rgb(68, 65, 60);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 640px) {
|
||||||
|
.background-image {
|
||||||
|
background-image: url('/img/mobile_bg.png')
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer {
|
||||||
|
background-image: url('/img/mobile_footer.png');
|
||||||
|
height: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.controls {
|
||||||
|
word-spacing: 0;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.patreon {
|
||||||
|
right: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.man {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 1024px) {
|
||||||
|
.modal {
|
||||||
|
width: 90%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-device-width: 1024px) {
|
||||||
|
.modal > input {
|
||||||
|
font-size: 1.9em;
|
||||||
|
padding: 0;
|
||||||
|
padding-bottom: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-links span {
|
||||||
|
padding-right: 30px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-height: 640px) {
|
||||||
|
.patreon {
|
||||||
|
width: 300px;
|
||||||
|
bottom: 4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.man {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-height: 840px) {
|
||||||
|
.title {
|
||||||
|
padding-top: 1em;
|
||||||
|
padding-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main {
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
}
|
BIN
web/www/favicon.ico
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
web/www/img/become_patreon.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
web/www/img/man.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
web/www/img/mobile_bg.png
Normal file
After Width: | Height: | Size: 54 KiB |
BIN
web/www/img/mobile_footer.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
web/www/img/og_image.png
Normal file
After Width: | Height: | Size: 89 KiB |
BIN
web/www/img/patreon_logo.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
web/www/img/pc_bg.png
Normal file
After Width: | Height: | Size: 97 KiB |
BIN
web/www/img/pc_footer.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
218
web/www/js/site.js
Normal file
@@ -0,0 +1,218 @@
|
|||||||
|
// Write your Javascript code.
|
||||||
|
|
||||||
|
$(function () {
|
||||||
|
function err(msg) {
|
||||||
|
alert(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
function createFeed(data, done) {
|
||||||
|
if (!data.url) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
dataType: 'text',
|
||||||
|
url: '/feed/create',
|
||||||
|
method: 'POST',
|
||||||
|
data: JSON.stringify(data),
|
||||||
|
contentType: 'application/json; charset=utf-8',
|
||||||
|
success: function (feedLink) {
|
||||||
|
// HACK: remove quotes
|
||||||
|
feedLink = JSON.parse(feedLink);
|
||||||
|
done(feedLink);
|
||||||
|
},
|
||||||
|
error: function (xhr, status, error) {
|
||||||
|
if (xhr.status === 400) {
|
||||||
|
// Bad request
|
||||||
|
var text = '';
|
||||||
|
|
||||||
|
try {
|
||||||
|
var json = JSON.parse(xhr.responseText);
|
||||||
|
$.each(json, function (key, value) {
|
||||||
|
text += value + '\r\n';
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
text = xhr.responseText;
|
||||||
|
}
|
||||||
|
|
||||||
|
err(text);
|
||||||
|
} else {
|
||||||
|
// Generic error
|
||||||
|
err('Server sad \'' + error + '\': ' + xhr.responseText);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function displayLink(link) {
|
||||||
|
showModal(link);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Tooltips
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!isMobile()) {
|
||||||
|
$(document).on('mouseenter', 'i', function () {
|
||||||
|
var title = $(this).attr('title');
|
||||||
|
if (!title) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$(this).data('tipText', title).removeAttr('title');
|
||||||
|
$('<p class="tooltip"></p>').text(title).appendTo('body').fadeIn('fast');
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on('mouseleave', 'i', function () {
|
||||||
|
var text = $(this).data('tipText');
|
||||||
|
$(this).attr('title', text);
|
||||||
|
$('.tooltip').remove();
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on('mousemove', 'i', function (e) {
|
||||||
|
var x = e.pageX + 10;
|
||||||
|
var y = e.pageY + 5;
|
||||||
|
$('.tooltip').css({ top: y, left: x });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Control panel
|
||||||
|
*/
|
||||||
|
|
||||||
|
function isLocked() {
|
||||||
|
return $('#control-panel').hasClass('locked');
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Handlers
|
||||||
|
*/
|
||||||
|
|
||||||
|
function formatSwith() {
|
||||||
|
if (isLocked()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#video-format, #audio-format').toggleClass('selected-option');
|
||||||
|
}
|
||||||
|
|
||||||
|
function qualitySwitch() {
|
||||||
|
if (isLocked()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#best-quality, #worst-quality').toggleClass('selected-option');
|
||||||
|
}
|
||||||
|
|
||||||
|
function getQuality() {
|
||||||
|
var isAudio = $('#audio-format').hasClass('selected-option');
|
||||||
|
var isWorst = $('#worst-quality').hasClass('selected-option');
|
||||||
|
|
||||||
|
if (isAudio) {
|
||||||
|
return isWorst ? 'AudioLow' : 'AudioHigh';
|
||||||
|
} else {
|
||||||
|
return isWorst ? 'VideoLow' : 'VideoHigh';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function pageSwitch(evt) {
|
||||||
|
if (isLocked()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#page-controls > a').removeClass('selected-option');
|
||||||
|
$(evt.target).addClass('selected-option');
|
||||||
|
|
||||||
|
getPageCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
function getPageCount() {
|
||||||
|
try {
|
||||||
|
var text = $('#page-controls > a.selected-option').text();
|
||||||
|
return parseInt(text);
|
||||||
|
} catch (e) {
|
||||||
|
return 50;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#page-controls > a').click(pageSwitch);
|
||||||
|
|
||||||
|
/* Modal */
|
||||||
|
|
||||||
|
function closeModal() {
|
||||||
|
$('#modal').hide();
|
||||||
|
$('#url-input').val('');
|
||||||
|
$('.main').show();
|
||||||
|
}
|
||||||
|
|
||||||
|
function showModal(url) {
|
||||||
|
// Hide main block on screen
|
||||||
|
$('.main').hide();
|
||||||
|
|
||||||
|
// Set input URL
|
||||||
|
$('#output-input').val(url);
|
||||||
|
|
||||||
|
// Update 'Open' button link
|
||||||
|
$('#modal-open').attr('href', url);
|
||||||
|
|
||||||
|
// Show dialog itself
|
||||||
|
$('#modal').show();
|
||||||
|
|
||||||
|
// Select modal output text
|
||||||
|
$('#output-input').select();
|
||||||
|
}
|
||||||
|
|
||||||
|
function copyLink() {
|
||||||
|
$('#output-input').select();
|
||||||
|
if (!document.execCommand('copy')) {
|
||||||
|
err('Can\'t copy... Something went wrong...');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function isMobile() {
|
||||||
|
return /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
|
||||||
|
}
|
||||||
|
|
||||||
|
function canCopy() {
|
||||||
|
try {
|
||||||
|
return document.queryCommandSupported('copy') && !isMobile();
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$('body').on('keydown', function (e) {
|
||||||
|
// ESC
|
||||||
|
if ($('#modal').is(':visible') && e.keyCode === 27) {
|
||||||
|
$('#close-modal').click();
|
||||||
|
}
|
||||||
|
e.stopPropagation();
|
||||||
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
Attach handlers
|
||||||
|
*/
|
||||||
|
|
||||||
|
$('#get-link').click(function(e) {
|
||||||
|
var url = $('#url-input').val();
|
||||||
|
createFeed({ url: url, quality: getQuality(), pageSize: getPageCount() }, displayLink);
|
||||||
|
e.preventDefault();
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#url-input').keyup(function (e) {
|
||||||
|
// 'Enter' click
|
||||||
|
if (e.keyCode === 13) {
|
||||||
|
$('#get-link').click();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#video-format, #audio-format').click(formatSwith);
|
||||||
|
$('#best-quality, #worst-quality').click(qualitySwitch);
|
||||||
|
|
||||||
|
$('#close-modal').click(closeModal);
|
||||||
|
$('#modal-copy').click(copyLink);
|
||||||
|
|
||||||
|
if (!canCopy()) {
|
||||||
|
$('#modal-copy').hide();
|
||||||
|
}
|
||||||
|
});
|
4
web/www/robots.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
User-agent: *
|
||||||
|
Allow: /$
|
||||||
|
Disallow: /
|
||||||
|
Host: www.podsync.net
|