REACT 0.0.1

This commit is contained in:
Theenoro 2018-03-22 16:32:26 +01:00
parent 7f6f74f50b
commit 35a4566107
90 changed files with 30123 additions and 50586 deletions

25811
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -13,60 +13,35 @@
"keywords": [],
"author": "theen",
"license": "GPL",
"config": {
"forge": {
"make_targets": {
"win32": [
"squirrel"
],
"darwin": [
"zip"
],
"linux": [
"deb",
"rpm"
]
},
"electronPackagerConfig": {
"packageManager": "npm",
"win32metadata": {
"ProductName": "Cyb3r_Downloader",
"CompanyName": "Thee.moe"
},
"version-string": {
"ProductName": "Cyb3r_Downloader",
"CompanyName": "Thee.moe"
}
},
"electronWinstallerConfig": {
"name": "Cyb3r_Downloader",
"packageName": "Cyb3r_Downloader",
"icon": "app.ico"
},
"electronInstallerDebian": {},
"electronInstallerRedhat": {},
"github_repository": {
"owner": "Theenoro",
"name": "https://git.tooru.thee.moe/theenoro/electron-simple-youtube-downloader"
},
"windowsStoreConfig": {
"packageName": "Cyb3r_Downloader",
"name": "Cyb3r_Downloader"
}
}
},
"dependencies": {
"body-parser": "^1.17.2",
"cors": "^2.8.4",
"electron": "^1.7.6",
"electron-config": "^1.0.0",
"express": "^4.15.4",
"fs": "0.0.1-security",
"mkdirp": "^0.5.1",
"node-id3": "0.0.10",
"path": "^0.12.7",
"request": "^2.81.0",
"unzip": "^0.1.11",
"watchr": "^3.0.1"
}
"body-parser": "^1.18.2",
"cors": "^2.8.4",
"electron": "^1.7.6",
"electron-config": "^1.0.0",
"express": "^4.16.2",
"express-session": "^1.15.6",
"fs": "0.0.1-security",
"http": "^0.0.0",
"mkdirp": "^0.5.1",
"node-id3": "0.0.10",
"path": "^0.12.7",
"react": "^16.2.0",
"react-dom": "^16.2.0",
"react-router-dom": "^4.2.2",
"request": "^2.81.0",
"unzip": "^0.1.11",
"watchr": "^3.0.1"
},
"devDependencies": {
"babel-cli": "^6.26.0",
"babel-core": "^6.26.0",
"babel-loader": "^7.1.2",
"babel-preset-es2015": "^6.24.1",
"babel-preset-react": "^6.24.1",
"electron-prebuilt-compile": "1.8.4",
"react-hot-loader": "^3.1.3",
"webpack": "^3.10.0",
"webpack-dev-middleware": "^1.12.2",
"webpack-hot-middleware": "^2.21.0"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

22
src/app.js Normal file
View File

@ -0,0 +1,22 @@
const Server = require('./index.js')
const port = (process.env.PORT || 8080)
const app = Server;
console.dir(Server)
if (process.env.NODE_ENV !== 'production') {
const webpack = require('webpack')
const webpackDevMiddleware = require('webpack-dev-middleware')
const webpackHotMiddleware = require('webpack-hot-middleware')
const config = require('./webpack.config.js')
const compiler = webpack(config)
app.use(webpackHotMiddleware(compiler))
app.use(webpackDevMiddleware(compiler, {
noInfo: true,
publicPath: config.output.publicPathdist
}))
}
app.listen(port)
console.log(`Listening at http://localhost:${port}`)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -1,239 +0,0 @@
const shared = require(global.__dirname + '/../js/shared');
$(function() {
const Config = require('electron-config');
const config = new Config();
const sys = require('sys');
const exec = require('child_process').exec;
var download_progress = $('#download-progress');
var format = "mp3";
if (typeof config.get('format') !== 'undefined') {
format = config.get('format');
}
var path = "";
if (typeof config.get('path') !== 'undefined') {
path = config.get('path');
}
var out = $('#output');
var video = document.getElementById('video');
const ipcRenderer = require('electron').ipcRenderer;
const request = require('request');
const helper = require('./../../helper/string');
const helperx = require('./../../controller/webLoader/router');
var shell = require('electron').shell;
//open links externally by default
$(document).on('click', 'a[href^="http"]', function(event) {
event.preventDefault();
shell.openExternal(this.href);
});
const {
dialog
} = require('electron').remote;
var cache = {};
var pot = false;
ipcRenderer.send('watchr_event', {});
ipcRenderer.on('play-in-Window', function(event, arg) {
pot = arg.do;
})
ipcRenderer.on('watchr_file', function(event, arg) {
arg.file = encodeURI(arg.file)
if (arg.type === "add") {
$('#watchr_files').append('<div class="row-flex file" data-file="' + arg.file + '"><div class="flex-btn"><button class="play-file btn btn-success" data-file="' + 'file://' + arg.file + '"><i class="fa fa-play-circle-o" aria-hidden="true"></i></button></div><div class="cont">' + decodeURI(arg.file) + '</div></tr>')
} else if (arg.type === "remove") {
$('.file[data-file="' + arg.file + '"]').remove();
}
$('#download-progress-' + arg.id).html(arg.percent);
})
ipcRenderer.on('download-progress', function(event, arg) {
console.log(arg); // prints "pong"
$('#download-progress-' + arg.id).css("width", arg.percent);
$('#download-progress-' + arg.id).html(arg.percent);
});
ipcRenderer.on('process-fin', function(event, arg) {
console.log(arg); // prints "pong"
$('#download-progress-' + arg.id).css("width", arg.percent);
$('#download-progress-' + arg.id).html("CONVERTED");
});
ipcRenderer.on('file', function(event, arg) {
console.log('DOWNLOADED')
console.log(arg); // prints "pong"
$('.media-out-' + arg.id).html('<button style="color: #FFF !important;text-shadow: #000000 0px 0px 9px;cursor: pointer;" class="btn btn-link play-file" data-file="' + 'file://' + path + '/' + encodeURI(helper.replace(cache[arg.id])) + '.' + format + '"><i class="fa fa-2x fa-play-circle-o" aria-hidden="true"></i></button>');
//var video = document.getElementById('video');
//$('#body-' + arg.id).append('<audio src="file://' + path + '/' + cache[arg.id] + '.'+format+'" controls="true"/>');
});
document.getElementById('party').addEventListener('click', _ => {
path = dialog.showOpenDialog({
properties: ['openDirectory']
})[0];
config.set('path', path);
console.log(path)
ipcRenderer.send('setPath', {
path: path
});
})
$('#pot').click(function() {
ipcRenderer.send('open-pot', {});
});
$('body').delegate('.play-file', 'click', function(e) {
//exec(getCommandLine() + ' "' + decodeURI(e.currentTarget.dataset.file.split('file://')[1])+'"');
if (pot === false) {
video.setAttribute("src", e.currentTarget.dataset.file);
video.play();
} else {
ipcRenderer.send('pot_run', {
file: e.currentTarget.dataset.file
});
}
})
$('body').delegate('#navigota li', 'click', function() {
console.log('TEST')
$('#togmenu').click();
})
$('body').delegate('.format', 'click', function(e) {
format = e.currentTarget.dataset.format;
config.set('format', format);
ipcRenderer.send('set-format', {
format: e.currentTarget.dataset.format
});
console.log(e.currentTarget.dataset.format);
})
$('#start-download').click(function() {
var url = $('#url').val();
if (url.match('crunchyroll')) {
var video_id = Math.floor(Date.now() / 1000);
$(`
<div class="media">
<img id="img-` + video_id + `" class="d-flex align-self-start mr-3" src="..." alt="Generic placeholder image">
<div class="media-body" id="body-` + video_id + `">
<h5 class="mt-0">` + url + `</h5>
Author: ` + `
<div class="progress">
<div class="progress-bar"id="download-progress-` + video_id + `" role="progressbar" style="width: 0%; height: 20px;" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100"></div>
</div>
<div class="media-out-` + video_id + `" style=" color: #FFF !important;
text-shadow: #454545 1px 1px 1px;
margin: auto;"></div>
</div>
</div>`).prependTo('#output');
ipcRenderer.send('start-download', {
url: $('#url').val(),
id: video_id
});
} else {
var video_id = $('#url').val().split('v=')[1];
var ampersandPosition = video_id.indexOf('&');
if (ampersandPosition != -1) {
video_id = video_id.substring(0, ampersandPosition);
}
var playlist_id = $('#url').val().split('list=')[1];
if (typeof playlist_id !== 'undefined') {
var playlist_idPOS = playlist_id.indexOf('&');
if (playlist_idPOS != -1) {
playlist_id = playlist_id.substring(0, playlist_idPOS);
}
request
.get('https://www.youtube.com/oembed?url=https://www.youtube.com/playlist?list=' + playlist_id + '&format=json', function(err, httpResponse, body) {
var YT = JSON.parse(body);
$(
`<div class="media">
<div class="d-flex alogn-self-start mr-3" style="
background:url(` + YT.thumbnail_url + `);
width: 189px;
height: 104px;
background-size: 189px;
background-position: 0px -18px;
">
<div class="media-out-` + video_id + `" style=" color: #FFF !important;
text-shadow: #454545 1px 1px 1px;
margin: auto;"></div>
</div>
<div class="media-body" id="body-` + video_id + `">
<h5 class="mt-0">` + YT.title + `</h5>
Author: ` + YT.author_name + `
<div class="progress">
<div class="progress-bar"id="download-progress-` + video_id + `" role="progressbar" style="width: 0%; height: 20px;" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100"></div>
</div>
<div class="media-out-` + video_id + `"></div>
</div>
</div>`).prependTo('#output');
cache[video_id] = YT.title;
ipcRenderer.send('start-download-pl', {
url: $('#url').val(),
id: video_id,
folder: YT.author_name + '-' + YT.title.replace(/\|/g, "_")
});
})
} else {
request
.get('https://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=' + video_id + '&format=json', function(err, httpResponse, body) {
var YT = JSON.parse(body);
$(
`<div class="media">
<div class="d-flex alogn-self-start mr-3" style="
background:url(` + YT.thumbnail_url + `);
width: 189px;
height: 104px;
background-size: 189px;
background-position: 0px -18px;
">
<div class="media-out-` + video_id + `" style=" color: #FFF !important;
text-shadow: #454545 1px 1px 1px;
margin: auto;"></div>
</div>
<div class="media-body" id="body-` + video_id + `">
<h5 class="mt-0">` + YT.title + `</h5>
Author: ` + YT.author_name + `
<div class="progress">
<div class="progress-bar"id="download-progress-` + video_id + `" role="progressbar" style="width: 0%; height: 20px;" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100"></div>
</div>
</div>
</div>`
).prependTo('#output');
cache[video_id] = YT.title;
ipcRenderer.send('start-download', {
url: $('#url').val(),
id: video_id,
title: helper.replace(YT.title)
});
})
}
console.log(playlist_id + ' id:' + video_id)
}
})
$('#close').click(function() {
console.log('TEST')
ipcRenderer.send('winHide', {
});
})
function getCommandLine() {
switch (process.platform) {
case 'darwin':
return 'open';
case 'win32':
return 'start';
case 'win64':
return 'start';
default:
return 'xdg-open';
}
}
})

View File

@ -1,46 +0,0 @@
var video;
$(function(){
video = document.getElementById('video');
// btn
var st_play = '<i class="fa fa-play-circle-o" aria-hidden="true"></i>';
var st_pause = '<i class="fa fa-pause-circle-o" aria-hidden="true"></i>';
video.ontimeupdate = function(){
var percentage = ( video.currentTime / video.duration ) * 100;
$("#time span").css("width", percentage+"%");
};
$("#time").on("click", function(e){
var offset = $(this).offset();
var left = (e.pageX - offset.left);
var totalWidth = $("#time").width();
var percentage = ( left / totalWidth );
var vidTime = video.duration * percentage;
video.currentTime = vidTime;
})
$("#volume span").css('width',(100*video.volume)+'%')
$("#volume").on("click", function(e){
var offset = $(this).offset();
var left = (e.pageX - offset.left);
var totalWidth = $("#volume").width();
var percentage = ( left / totalWidth );
var volume = 1 * percentage;
video.volume = volume;
$("#volume span").css('width',(100*percentage)+'%')
console.log(volume)
})
$('#play').click(function(){
if(video.paused){
video.play();
$('#play').html(st_pause)
}else{
video.pause();
$('#play').html(st_play)
}
})
})

View File

@ -1,24 +0,0 @@
const shared = require(global.__dirname+'/../js/shared');
$(function() {
const ipcRenderer = require('electron').ipcRenderer;
ipcRenderer.send('pot_real_open', {x:"xx"});
$('#close').click(function () {
ipcRenderer.send('close_pot',{});
});
ipcRenderer.on('pot_play',function(event,arg){
var file = arg.file;
video.setAttribute("src", file);
video.play();
})
$('.navbar').on( "mouseleave",function () {
$('.navbar').css('opacity',"0")
});
$('.navbar').on( "mouseenter",function () {
$('.navbar').css('opacity',"1")
});
$('body').on( "mouseenter",function () {
$('.navbar').css('opacity',"1")
});
})

View File

@ -1,13 +0,0 @@
var shared = {};
var test = "";
shared.setLog = (text)=>{
test = text;
}
shared.log = ()=>{
console.log(test);
}
module.exports = shared;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,587 +0,0 @@
/*!
* Bootstrap v3.3.7 (http://getbootstrap.com)
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
.btn-default,
.btn-primary,
.btn-success,
.btn-info,
.btn-warning,
.btn-danger {
text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
}
.btn-default:active,
.btn-primary:active,
.btn-success:active,
.btn-info:active,
.btn-warning:active,
.btn-danger:active,
.btn-default.active,
.btn-primary.active,
.btn-success.active,
.btn-info.active,
.btn-warning.active,
.btn-danger.active {
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
}
.btn-default.disabled,
.btn-primary.disabled,
.btn-success.disabled,
.btn-info.disabled,
.btn-warning.disabled,
.btn-danger.disabled,
.btn-default[disabled],
.btn-primary[disabled],
.btn-success[disabled],
.btn-info[disabled],
.btn-warning[disabled],
.btn-danger[disabled],
fieldset[disabled] .btn-default,
fieldset[disabled] .btn-primary,
fieldset[disabled] .btn-success,
fieldset[disabled] .btn-info,
fieldset[disabled] .btn-warning,
fieldset[disabled] .btn-danger {
-webkit-box-shadow: none;
box-shadow: none;
}
.btn-default .badge,
.btn-primary .badge,
.btn-success .badge,
.btn-info .badge,
.btn-warning .badge,
.btn-danger .badge {
text-shadow: none;
}
.btn:active,
.btn.active {
background-image: none;
}
.btn-default {
text-shadow: 0 1px 0 #fff;
background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #dbdbdb;
border-color: #ccc;
}
.btn-default:hover,
.btn-default:focus {
background-color: #e0e0e0;
background-position: 0 -15px;
}
.btn-default:active,
.btn-default.active {
background-color: #e0e0e0;
border-color: #dbdbdb;
}
.btn-default.disabled,
.btn-default[disabled],
fieldset[disabled] .btn-default,
.btn-default.disabled:hover,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
.btn-default.disabled.focus,
.btn-default[disabled].focus,
fieldset[disabled] .btn-default.focus,
.btn-default.disabled:active,
.btn-default[disabled]:active,
fieldset[disabled] .btn-default:active,
.btn-default.disabled.active,
.btn-default[disabled].active,
fieldset[disabled] .btn-default.active {
background-color: #e0e0e0;
background-image: none;
}
.btn-primary {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #245580;
}
.btn-primary:hover,
.btn-primary:focus {
background-color: #265a88;
background-position: 0 -15px;
}
.btn-primary:active,
.btn-primary.active {
background-color: #265a88;
border-color: #245580;
}
.btn-primary.disabled,
.btn-primary[disabled],
fieldset[disabled] .btn-primary,
.btn-primary.disabled:hover,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
.btn-primary.disabled.focus,
.btn-primary[disabled].focus,
fieldset[disabled] .btn-primary.focus,
.btn-primary.disabled:active,
.btn-primary[disabled]:active,
fieldset[disabled] .btn-primary:active,
.btn-primary.disabled.active,
.btn-primary[disabled].active,
fieldset[disabled] .btn-primary.active {
background-color: #265a88;
background-image: none;
}
.btn-success {
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #3e8f3e;
}
.btn-success:hover,
.btn-success:focus {
background-color: #419641;
background-position: 0 -15px;
}
.btn-success:active,
.btn-success.active {
background-color: #419641;
border-color: #3e8f3e;
}
.btn-success.disabled,
.btn-success[disabled],
fieldset[disabled] .btn-success,
.btn-success.disabled:hover,
.btn-success[disabled]:hover,
fieldset[disabled] .btn-success:hover,
.btn-success.disabled:focus,
.btn-success[disabled]:focus,
fieldset[disabled] .btn-success:focus,
.btn-success.disabled.focus,
.btn-success[disabled].focus,
fieldset[disabled] .btn-success.focus,
.btn-success.disabled:active,
.btn-success[disabled]:active,
fieldset[disabled] .btn-success:active,
.btn-success.disabled.active,
.btn-success[disabled].active,
fieldset[disabled] .btn-success.active {
background-color: #419641;
background-image: none;
}
.btn-info {
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #28a4c9;
}
.btn-info:hover,
.btn-info:focus {
background-color: #2aabd2;
background-position: 0 -15px;
}
.btn-info:active,
.btn-info.active {
background-color: #2aabd2;
border-color: #28a4c9;
}
.btn-info.disabled,
.btn-info[disabled],
fieldset[disabled] .btn-info,
.btn-info.disabled:hover,
.btn-info[disabled]:hover,
fieldset[disabled] .btn-info:hover,
.btn-info.disabled:focus,
.btn-info[disabled]:focus,
fieldset[disabled] .btn-info:focus,
.btn-info.disabled.focus,
.btn-info[disabled].focus,
fieldset[disabled] .btn-info.focus,
.btn-info.disabled:active,
.btn-info[disabled]:active,
fieldset[disabled] .btn-info:active,
.btn-info.disabled.active,
.btn-info[disabled].active,
fieldset[disabled] .btn-info.active {
background-color: #2aabd2;
background-image: none;
}
.btn-warning {
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #e38d13;
}
.btn-warning:hover,
.btn-warning:focus {
background-color: #eb9316;
background-position: 0 -15px;
}
.btn-warning:active,
.btn-warning.active {
background-color: #eb9316;
border-color: #e38d13;
}
.btn-warning.disabled,
.btn-warning[disabled],
fieldset[disabled] .btn-warning,
.btn-warning.disabled:hover,
.btn-warning[disabled]:hover,
fieldset[disabled] .btn-warning:hover,
.btn-warning.disabled:focus,
.btn-warning[disabled]:focus,
fieldset[disabled] .btn-warning:focus,
.btn-warning.disabled.focus,
.btn-warning[disabled].focus,
fieldset[disabled] .btn-warning.focus,
.btn-warning.disabled:active,
.btn-warning[disabled]:active,
fieldset[disabled] .btn-warning:active,
.btn-warning.disabled.active,
.btn-warning[disabled].active,
fieldset[disabled] .btn-warning.active {
background-color: #eb9316;
background-image: none;
}
.btn-danger {
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #b92c28;
}
.btn-danger:hover,
.btn-danger:focus {
background-color: #c12e2a;
background-position: 0 -15px;
}
.btn-danger:active,
.btn-danger.active {
background-color: #c12e2a;
border-color: #b92c28;
}
.btn-danger.disabled,
.btn-danger[disabled],
fieldset[disabled] .btn-danger,
.btn-danger.disabled:hover,
.btn-danger[disabled]:hover,
fieldset[disabled] .btn-danger:hover,
.btn-danger.disabled:focus,
.btn-danger[disabled]:focus,
fieldset[disabled] .btn-danger:focus,
.btn-danger.disabled.focus,
.btn-danger[disabled].focus,
fieldset[disabled] .btn-danger.focus,
.btn-danger.disabled:active,
.btn-danger[disabled]:active,
fieldset[disabled] .btn-danger:active,
.btn-danger.disabled.active,
.btn-danger[disabled].active,
fieldset[disabled] .btn-danger.active {
background-color: #c12e2a;
background-image: none;
}
.thumbnail,
.img-thumbnail {
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
background-color: #e8e8e8;
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
background-repeat: repeat-x;
}
.dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
background-color: #2e6da4;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
.navbar-default {
background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
}
.navbar-default .navbar-nav > .open > a,
.navbar-default .navbar-nav > .active > a {
background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
background-repeat: repeat-x;
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
}
.navbar-brand,
.navbar-nav > li > a {
text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
}
.navbar-inverse {
background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-radius: 4px;
}
.navbar-inverse .navbar-nav > .open > a,
.navbar-inverse .navbar-nav > .active > a {
background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
background-repeat: repeat-x;
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
}
.navbar-inverse .navbar-brand,
.navbar-inverse .navbar-nav > li > a {
text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
}
.navbar-static-top,
.navbar-fixed-top,
.navbar-fixed-bottom {
border-radius: 0;
}
@media (max-width: 767px) {
.navbar .navbar-nav .open .dropdown-menu > .active > a,
.navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
.navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
color: #fff;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
}
.alert {
text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
}
.alert-success {
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
background-repeat: repeat-x;
border-color: #b2dba1;
}
.alert-info {
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
background-repeat: repeat-x;
border-color: #9acfea;
}
.alert-warning {
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
background-repeat: repeat-x;
border-color: #f5e79e;
}
.alert-danger {
background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
background-repeat: repeat-x;
border-color: #dca7a7;
}
.progress {
background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-success {
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-info {
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-warning {
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-danger {
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-striped {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
}
.list-group {
border-radius: 4px;
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
}
.list-group-item.active,
.list-group-item.active:hover,
.list-group-item.active:focus {
text-shadow: 0 -1px 0 #286090;
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
background-repeat: repeat-x;
border-color: #2b669a;
}
.list-group-item.active .badge,
.list-group-item.active:hover .badge,
.list-group-item.active:focus .badge {
text-shadow: none;
}
.panel {
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
}
.panel-default > .panel-heading {
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
background-repeat: repeat-x;
}
.panel-primary > .panel-heading {
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
background-repeat: repeat-x;
}
.panel-success > .panel-heading {
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
background-repeat: repeat-x;
}
.panel-info > .panel-heading {
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
background-repeat: repeat-x;
}
.panel-warning > .panel-heading {
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
background-repeat: repeat-x;
}
.panel-danger > .panel-heading {
background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
background-repeat: repeat-x;
}
.well {
background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
background-repeat: repeat-x;
border-color: #dcdcdc;
-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
}
/*# sourceMappingURL=bootstrap-theme.css.map */

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -1,13 +0,0 @@
// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
require('../../js/transition.js')
require('../../js/alert.js')
require('../../js/button.js')
require('../../js/carousel.js')
require('../../js/collapse.js')
require('../../js/dropdown.js')
require('../../js/modal.js')
require('../../js/tooltip.js')
require('../../js/popover.js')
require('../../js/scrollspy.js')
require('../../js/tab.js')
require('../../js/affix.js')

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 434 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -1,42 +0,0 @@
#time span, #volume span {
background-color: #ffffff;
position: absolute;
top: 0;
left: 0;
height: 10px;
width: 0px;
}
#time {
cursor: pointer;
height: 10px;
margin-bottom: 10px;
outline: thin solid #ffffff;
overflow: hidden;
position: relative;
width: 100%;
vertical-align: -webkit-baseline-middle;
line-height: 1.42857143;
height: 9px;
display: inline-block;
top: 13px;
}
#volume {
cursor: pointer;
height: 10px;
margin-bottom: 10px;
outline: thin solid #ffffff;
overflow: hidden;
position: relative;
width: 200px;
vertical-align: -webkit-baseline-middle;
line-height: 1.42857143;
height: 9px;
display: inline-block;
top: 13px;
}
.btn-success {
color: #fff;
background-color: #f8f8f8;
border-color: #111;
transition: all .3s;
}

View File

@ -1,38 +0,0 @@
#time {
cursor: pointer;
height: 10px;
margin-bottom: 10px;
outline: thin solid #1D1D1D;
overflow: hidden;
position: relative;
width: 100%;
vertical-align: -webkit-baseline-middle;
line-height: 1.42857143;
height: 9px;
display: inline-block;
top: 13px;
}
#volume {
cursor: pointer;
height: 10px;
margin-bottom: 10px;
outline: thin solid #1D1D1D;
overflow: hidden;
position: relative;
width: 200px;
vertical-align: -webkit-baseline-middle;
line-height: 1.42857143;
height: 9px;
display: inline-block;
top: 13px;
}
#time span, #volume span {
background-color: #1D1D1D;
position: absolute;
top: 0;
left: 0;
height: 10px;
width: 0px;
}

File diff suppressed because it is too large Load Diff

View File

@ -1 +0,0 @@
body{margin:0;margin-top:46px}.navbar{background:#111!important;color:#f8f8f8}.btn-success{color:#111;background-color:#f8f8f8;border-color:#111;transition:all .3s}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.dropdown-toggle:active,.dropdown-toggle:focus,.open>.dropdown-toggle.btn-success{color:#f8f8f8!important;background-color:#111!important;border-color:#111!important;transition:all .3s}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#111;background-color:#f8f8f8}.dropdown-menu{background-color:#f8f8f8}span.input-group-btn.open>ul>li>a{background-image:none}.media:first-child{margin-top:15px}.media{box-shadow:0 0 12px 1px rgba(105,105,105,.28);margin-top:14px}.sidebar-nav{padding:10px}.nav.nav-list a{padding:5px 10px}.nav-header{font-weight:700}.scroll{overflow-y:scroll;height:calc(100vh - 160px);margin-top:15px;box-shadow:inset 0 0 3px 2px rgba(69,69,69,.3)}.left-playlist{box-shadow:0 0 6px 1px #111;height:calc(100vh - 20vw - 30px)}.row-flex{word-break:break-all;width:100%;display:flex}.row-flex .flex-btn{width:50px}.row-flex .cont{width:100%}*{border-radius:0!important}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);background-color:#f5f5f5}::-webkit-scrollbar{width:6px;background-color:#f5f5f5}::-webkit-scrollbar-thumb{background-color:#000}

View File

@ -1,113 +0,0 @@
/*
*/
@main-front-color : #111111;
@background-color : #F8F8F8;
@background-2ndcolor: #F8F8F8;
body {
margin: 0;
margin-top: 46px;
/*background: @background-color;
color:@main-front-color;*/
}
.navbar{
background: @main-front-color !important;
color:@background-color;
}
.btn-success {
color: @main-front-color;
background-color: @background-color;
border-color: @main-front-color;
transition: all .3s;
}
.btn-success:hover ,.btn-success:active,.btn-success:focus,.dropdown-toggle:focus,.dropdown-toggle:active,.btn-success:active, .btn-success.active, .open > .dropdown-toggle.btn-success {
color: @background-color !important;
background-color: @main-front-color !important;
border-color: @main-front-color !important;
transition: all .3s;
}
.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {
text-decoration: none;
color: @main-front-color;
background-color: @background-color;
}
.dropdown-menu{
background-color: @background-color;
}
span.input-group-btn.open > ul > li> a{
background-image:none;
}
/*
.progress{
background-image:none;
background-color: @background-color;
box-shadow: inset 0px 0px 3px 0px @main-front-color;
}
.progress-bar{
background-image:none;
background-color: @background-color;
box-shadow: inset 0px 0px 12px 0px @main-front-color;
transition: .3s all;
}*/
.media:first-child {
margin-top: 15px;
}
.media {
box-shadow: 0 0 12px 1px rgba(105, 105, 105, 0.28);
margin-top: 14px;
}
.sidebar-nav {
padding: 10px;
}
.nav.nav-list a {
padding: 5px 10px;
}
.nav-header {
font-weight: bold;
}
.scroll {
overflow-y: scroll;
height: ~"calc(100vh - 160px)";
margin-top: 15px;
box-shadow: inset 0px 0px 3px 2px rgba(69, 69, 69, 0.3);
}
.left-playlist{
box-shadow: 0px 0px 6px 1px @main-front-color;
height: ~"calc(100vh - 20vw - 30px )";
}
.row-flex{
word-break: break-all;
width:100%;
display: flex;
.flex-btn{
width: 50px;
}
.cont{
width:100%;
}
}
*{
border-radius: 0px !important;
}
*::-webkit-scrollbar-track
{
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
background-color: #F5F5F5;
}
*::-webkit-scrollbar
{
width: 6px;
background-color: #F5F5F5;
}
*::-webkit-scrollbar-thumb
{
background-color: #000000;
}

View File

@ -1,207 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<script>
if (typeof module === 'object') {
window.module = module;
module = undefined;
}
</script>
<script src="./../libs/jquery/jquery-3.2.1.min.js"></script>
<script src="./../libs/bootstrap/js/bootstrap.js"></script>
<meta charset="utf-8">
<title></title>
<style>
body {
margin: 0;
background: #333;
}
@keyframes arrow-spin {
100% {
transform: rotate(179deg);
}
}
@-webkit-keyframes arrow-spin {
100% {
-webkit-transform: rotate(179deg);
}
}
.psoload,
.psoload *,
.psoload *:before,
.psoload *:after {
box-sizing: border-box;
transition: all 0.3s;
-webkit-transition: all 0.3s;
}
.psoload {
position: relative;
margin: 30px auto;
height: 150px;
width: 150px;
}
.psoload .straight,
.psoload .curve {
position: absolute;
top: 17.5%;
left: 17.5%;
width: 65%;
height: 65%;
border-radius: 100%;
animation: arrow-spin 0.85s cubic-bezier(0.2, 0.8, 0.9, 0.1) infinite;
-webkit-animation: arrow-spin 0.85s cubic-bezier(0.2, 0.8, 0.9, 0.1) infinite;
}
.psoload .straight:before,
.psoload .straight:after {
content: '';
position: absolute;
width: 15%;
border-bottom: 3px solid #eee;
transform: rotate(45deg);
-webkit-transform: rotate(45deg);
}
.psoload .straight:before {
top: 5px;
left: 5px;
}
.psoload .straight:after {
bottom: 5px;
right: 5px;
}
.psoload .curve:before,
.psoload .curve:after {
content: '';
position: absolute;
width: 45px;
height: 10px;
border: solid 3px transparent;
border-top-color: #eee;
border-radius: 50%/10px 10px 0 0;
z-index: 90001;
}
.psoload .curve:before {
transform: rotate(-63deg) translateX(-27px) translateY(-4px);
-webkit-transform: rotate(-63deg) translateX(-27px) translateY(-4px);
}
.psoload .curve:after {
bottom: 5px;
right: 5px;
transform: rotate(115deg) translateX(-26px) translateY(-12px);
-webkit-transform: rotate(115deg) translateX(-26px) translateY(-12px);
}
.psoload .center {
position: absolute;
top: 20%;
left: 20%;
width: 60%;
height: 60%;
border-radius: 100%;
border: 3px solid #eee;
}
.psoload .inner {
position: absolute;
top: 25%;
left: 25%;
width: 50%;
height: 50%;
border-radius: 100%;
animation: arrow-spin 0.85s cubic-bezier(0.2, 0.8, 0.9, 0.1) infinite reverse;
-webkit-animation: arrow-spin 0.85s cubic-bezier(0.2, 0.8, 0.9, 0.1) infinite reverse;
}
.psoload .inner:before,
.psoload .inner:after {
content: '';
position: absolute;
width: 0;
height: 0;
border: 6px solid transparent;
border-bottom-width: 11px;
border-bottom-color: #eee;
}
.psoload .inner:before {
top: 12px;
left: 12px;
transform: rotate(128deg);
-webkit-transform: rotate(128deg);
}
.psoload .inner:after {
bottom: 12px;
right: 12px;
transform: rotate(-48deg);
-webkit-transform: rotate(-48deg);
}
.progress {
height: 10px;
}
.progress .progress-bar {
height: 5px;
width: 30px;
background-color: #FFF;
content: "";
}
</style>
</head>
<body>
<div class="psoload">
<div class="straight"></div>
<div class="curve"></div>
<div class="center"></div>
<div class="inner"></div>
</div>
<iframe id="coub" src="https://coub.com/embed/ulak9?muted=false&autostart=true&originalSize=false&startWithHD=false" allowfullscreen="true" frameborder="0" width="320" height="180"></iframe>
<script async src="https://c-cdn.coub.com/embed-runner.js"></script>
<hr/>
<div class="progress">
<div class="progress-bar" id="main"></div>
<div class="progress-bar" id="single"></div>
</div>
<script>
$(function() {
var start = [
"whbex",
"wf0jb",
"ulak9",
"wc5e2",
"xza2z"
];
var x = Math.floor(Math.random() * start.length)
$('#coub').attr('src', 'https://coub.com/embed/' + start[x] + '?muted=false&autostart=true&originalSize=false&startWithHD=false')
const ipcRenderer = require('electron').ipcRenderer;
ipcRenderer.send('download-lib', {});
ipcRenderer.on('progress', function(event, arg) {
console.log(arg); // prints "pong"
$('#single').css("width", arg.percent + "%");
}).on('fin-loading', function(event, arg) {
$('#main').css("width", "100%");
setTimeout(function() {
ipcRenderer.send('start-full', {});
}, 1000)
})
})
</script>
</body>
</html>

View File

@ -1,220 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<script>
if (typeof module === 'object') {
window.module = module;
module = undefined;
}
</script>
<script src="./../libs/jquery/jquery-3.2.1.min.js"></script>
<script src="./../libs/popper.min.js"></script>
<script src="./../libs/bootstrap/bootstrap.min.js"></script>
<script src="./../js/player.js"></script>
<meta charset="utf-8">
<title>Cyb3r Downloader</title>
<link rel="stylesheet" href="./../libs/bootstrap/bootstrap.min.css">
<link rel="stylesheet" href="./../libs/font-awesome/css/font-awesome.min.css" />
<link rel="stylesheet" href="./../style/bootstrap.min.css" />
<link rel="stylesheet" href="./../style/style.css" />
<link rel="stylesheet" href="./../style/player.css" />
</head>
<body>
<div class="container-fluid">
<div class="collapse" id="navigota" style=" position: fixed; top: 56px; left: 0px;z-index: 999999;">
<div class="bg-dark p-4">
<div class="list-group" role="tablist" id="">
<li role="presentation" class="list-group-item list-group-item-action"><a href="#download" aria-controls="download" role="tab" data-toggle="tab">Download</a></li>
<li role="presentation" class="list-group-item list-group-item-action"><a href="#player" aria-controls="player" role="tab" data-toggle="tab">Player</a></li>
<li role="presentation" class="list-group-item list-group-item-action"><a href="#wt" aria-controls="wt" role="tab" data-toggle="tab">Watch Together</a></li>
<li role="presentation" class="list-group-item list-group-item-action"><a href="#info" aria-controls="info" role="tab" data-toggle="tab">Info</a></li>
</div>
</div>
</div>
<nav class="navbar fixed-top navbar-dark bg-dark justify-content-between" style="-webkit-app-region: drag">
<button id="togmenu" style="-webkit-app-region: no-drag;" class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navigota" aria-controls="navbarToggleExternalContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<a class="navbar-brand">Cyb3r Downloader</a>
<form class="form-inline">
<button class="btn btn-outline-success my-2 my-sm-0" id="close" style="-webkit-app-region: no-drag;">X</button>
</form>
</nav>
<div class="row">
<div class="col-md-2" style="display:none">
<div class="list-group" role="tablist">
<li role="presentation" class="list-group-item list-group-item-action"><a href="#download" aria-controls="download" role="tab" data-toggle="tab">Download</a></li>
<li role="presentation" class="list-group-item list-group-item-action"><a href="#player" aria-controls="player" role="tab" data-toggle="tab">Player</a></li>
<li role="presentation" class="list-group-item list-group-item-action"><a href="#wt" aria-controls="wt" role="tab" data-toggle="tab">Watch Together</a></li>
<li role="presentation" class="list-group-item list-group-item-action"><a href="#info" aria-controls="info" role="tab" data-toggle="tab">Info</a></li>
</div>
</div>
<div class="col-md-12">
<div style="max-width:380px;margin:auto;margin-bottom:25px;">
<div style=" margin: 0;
padding: 0;
height: 35px;
display: flex;
position: fixed;
bottom: 0;
width: 100%;
left: 0;
background-color: #f1f1f1;
box-shadow: 0px -1px 8px 4px rgba(69, 69, 69, 0.18);
z-index:99999999;
">
<button class="btn nabbar-btn btn-link" style="margin:0;" id="play"><i class="fa fa-pause-circle-o" aria-hidden="true"></i></button>
<div id="time">
<span></span>
</div>
<button class="btn nabbar-btn btn-link" style="margin:0;"><i class="fa fa-volume-up" aria-hidden="true"></i></button>
<div id="volume">
<span></span>
</div>
<button class="btn nabbar-btn btn-link" id="pot" style="margin:0;"><i class="fa fa-window-restore" aria-hidden="true"></i></button>
</div>
</div>
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="download">
<input id="business" type="file" style="display: none" />
<div class="row">
<div class="col-md-12">
<div class="input-group">
<span class="input-group-btn">
<button id="party" class="btn btn-secondary" type="button">Select Folder</button>
</span>
<input type="text" class="form-control" id="url" placeholder="YT-Url" aria-label="Product name">
<span class="input-group-btn">
<div class="dropdown show">
<a class="btn btn-secondary dropdown-toggle" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Format
</a>
<div class="dropdown-menu" aria-labelledby="dropdownMenuLink">
<a class="dropdown-item format" href="#" data-format="mp3">MP3</a>
<a class="dropdown-item format" href="#" data-format="vorbis">OGG</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item format" href="#" data-format="mp4">MP4</a>
</div>
</div>
</span>
<span class="input-group-btn">
<button class="btn btn-secondary" type="button" id="start-download">Download</button>
</span>
</div>
</div>
</div>
<div class="row scroll">
<div class="col-md-12" id="output">
</div>
</div>
</div>
<div role="tabpanel" class="tab-pane fade" id="player">
<div class="row">
<div class="col-md-12">
<div class="embed-responsive embed-responsive-16by9">
<video id="video"></video>
</div>
<div id="watchr_files">
</div>
</div>
</div>
</div>
<div role="tabpanel" class="tab-pane fade" id="wt">
<div class="row">
<div class="col-md-12">
<div class="input-group">
<input type="text" class="form-control" id="webview-url" placeholder="www..." aria-label="Product name">
<span class="input-group-btn">
<button class="btn btn-secondary" type="button" id="webviewload">-></button>
<button class="btn btn-secondary" type="button" id="webviewdownload">Cyb3r Download</button>
</span>
</div>
<webview id="foo" src="https://youtube.com/" style="display:inline-flex; width:100%; height:calc(100vh - 144px)"></webview>
</div>
<script>
$(function(){
require('remote').getCurrentWindow().toggleDevTools();
const webview = document.querySelector('webview')
const indicator = document.querySelector('.indicator')
const loadstart = () => {
}
const loadstop = () => {
$('#webview-url').val(webview.getURL());
}
$('#webviewload').click(()=>{
var url = $('#webview-url').val();
webview.loadURL(url)
})
$('#webviewdownload').click(()=>{
var url = $('#webview-url').val();
$.post( "http://127.0.0.1:54167/download?url="+encodeURI(url),function() {
});
})
webview.addEventListener('did-start-loading', loadstart)
webview.addEventListener('did-stop-loading', loadstop)
});
</script>
</div>
</div>
<div role="tabpanel" class="tab-pane fade" id="info">
<div class="row">
<div class="col-md-12">
<h1>Info</h1>
<a href="https://git.tooru.thee.moe/theenoro/electron-simple-youtube-downloader" target="_blank">Git</a>
<div id="rss">
</div>
<script>
/*
$(()=>{
$.get( "https://git.tooru.thee.moe/theenoro/electron-simple-youtube-downloader/commits/master?format=atom", function( data ) {
$xml = $( data ),
$title = $xml.find( "title" );
console.log($xml)
$('#rss').html(data.toString());
alert( "Load was performed." );
});
})
*/
</script>
</div>
</div>
</div>
</div>
</div>
<!--<div class="col-md-4">
<div class="left-playlist">
</div>
</div>-->
</div>
</div>
<script src="./../js/app.js"></script>
<script>
document.addEventListener("keydown", function(e) {
if (e.which === 123) {
} else if (e.which === 116) {
location.reload();
}
});
</script>
</body>
</html>

View File

@ -1,78 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<script>
if (typeof module === 'object') {
window.module = module;
module = undefined;
}
</script>
<script src="./../libs/jquery/jquery-3.2.1.min.js"></script>
<script src="./../libs/bootstrap/js/bootstrap.js"></script>
<script src="./../js/player.js"></script>
<meta charset="utf-8">
<title>Cyb3r Downloader - Player on Top</title>
<link rel="stylesheet" href="./../libs/bootstrap/css/bootstrap.css" />
<link rel="stylesheet" href="./../libs/bootstrap/css/bootstrap-theme.css" />
<link rel="stylesheet" href="./../libs/font-awesome/css/font-awesome.min.css" />
<link rel="stylesheet" href="./../style/progress.css" />
<link rel="stylesheet" href="./../style/style.css" />
<link rel="stylesheet" href="./../style/player.css" />
<link rel="stylesheet" href="./../style/player-controls.css" />
<style>
video {
max-width: 100%;
width:100%;
max-height: 100%;
}
body{
overflow:hidden;
}
body > nav > div > button {
margin: 0;
background-color: transparent !important;
}
.navbar{
padding: 0;
margin: 0;
height: 35px;
min-height: 35px;
width:100%;
}
body .navbar{
opacity: 0;
transition: .3s all;
position: fixed;
}
body:hover .navbar{
opacity: 1;
transition: .3s all;
background-color: rgba(51, 51, 51, 0.64);
box-shadow: 5px 0px 6px 6px rgba(51, 51, 51, 0.64);
}
</style>
</head>
<body style="margin:0">
<nav class="navbar navbar-static-top">
<div style=" margin: 0; padding: 0; height: 35px; display:flex;">
<button class="btn nabbar-btn btn-success" style="margin:0;" id="play"><i class="fa fa-pause-circle-o" aria-hidden="true"></i></button>
<div id="time">
<span></span>
</div>
<button class="btn nabbar-btn btn-success" style="margin:0;" ><i class="fa fa-volume-up" aria-hidden="true"></i></button>
<div id="volume">
<span></span>
</div>
<button class="btn navbar-btn btn-success" style="-webkit-app-region: drag;margin: 0;"><i class="fa fa-arrows" aria-hidden="true"></i></button>
<button class="btn navbar-btn btn-success" id="close" style="margin:0;"><i class="fa fa-window-close-o" aria-hidden="true"></i></button>
</div>
</nav>
<video id="video"></video>
<script src="./../js/pot_main.js"></script>
</body>
</html>

View File

@ -1,109 +0,0 @@
const request = require('request');
// https://vivo.sx/46b5f0d914
var vivo = (url,cb)=>{
request('https://vivo.sx/76aa530aac', function(error, response, body) {
console.log('error:', error); // Print the error if one occurred
console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
//console.log('body:', body); // Print the HTML for the Google homepage.
var html = body;
var bse64 = html.split('Core.InitializeStream (\'')[1].split('\');')[0];
console.log(bse64)
var arr = eval(Base64.decode(bse64));
console.log(arr[0])
cb(arr[0]);
});
}
module.exports = vivo;
var Base64 = {
_keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
encode: function(e) {
var t = "";
var n, r, i, s, o, u, a;
var f = 0;
e = Base64._utf8_encode(e);
while (f < e.length) {
n = e.charCodeAt(f++);
r = e.charCodeAt(f++);
i = e.charCodeAt(f++);
s = n >> 2;
o = (n & 3) << 4 | r >> 4;
u = (r & 15) << 2 | i >> 6;
a = i & 63;
if (isNaN(r)) {
u = a = 64
} else if (isNaN(i)) {
a = 64
}
t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a)
}
return t
},
decode: function(e) {
var t = "";
var n, r, i;
var s, o, u, a;
var f = 0;
e = e.replace(/[^A-Za-z0-9+/=]/g, "");
while (f < e.length) {
s = this._keyStr.indexOf(e.charAt(f++));
o = this._keyStr.indexOf(e.charAt(f++));
u = this._keyStr.indexOf(e.charAt(f++));
a = this._keyStr.indexOf(e.charAt(f++));
n = s << 2 | o >> 4;
r = (o & 15) << 4 | u >> 2;
i = (u & 3) << 6 | a;
t = t + String.fromCharCode(n);
if (u != 64) {
t = t + String.fromCharCode(r)
}
if (a != 64) {
t = t + String.fromCharCode(i)
}
}
t = Base64._utf8_decode(t);
return t
},
_utf8_encode: function(e) {
e = e.replace(/rn/g, "n");
var t = "";
for (var n = 0; n < e.length; n++) {
var r = e.charCodeAt(n);
if (r < 128) {
t += String.fromCharCode(r)
} else if (r > 127 && r < 2048) {
t += String.fromCharCode(r >> 6 | 192);
t += String.fromCharCode(r & 63 | 128)
} else {
t += String.fromCharCode(r >> 12 | 224);
t += String.fromCharCode(r >> 6 & 63 | 128);
t += String.fromCharCode(r & 63 | 128)
}
}
return t
},
_utf8_decode: function(e) {
var t = "";
var n = 0;
var r = c1 = c2 = 0;
while (n < e.length) {
r = e.charCodeAt(n);
if (r < 128) {
t += String.fromCharCode(r);
n++
} else if (r > 191 && r < 224) {
c2 = e.charCodeAt(n + 1);
t += String.fromCharCode((r & 31) << 6 | c2 & 63);
n += 2
} else {
c2 = e.charCodeAt(n + 1);
c3 = e.charCodeAt(n + 2);
t += String.fromCharCode((r & 15) << 12 | (c2 & 63) << 6 | c3 & 63);
n += 3
}
}
return t
}
}

View File

@ -1,34 +0,0 @@
/*
JUST TO WATCH OFFLINE
*/
const fs = require('fs');
var crunch = {};
crunch.session_save = (session) => {
var net = `# Netscape HTTP Cookie File\n
# http://curl.haxx.se/rfc/cookie_spec.html\n
# This is a generated file! Do not edit.\n\n`;
var old_exp = 0;
for (var i = 0; i < session.length; i++) {
if (typeof session[i].expirationDate == 'undefined') {
session[i].expirationDate = old_exp;
}
if (session[i].expirationDate > old_exp) {
old_exp = session[i].expirationDate;
}
net += session[i].domain + ' ' + session[i].httpOnly.toString().toUpperCase() + ' ' + session[i].path + ' ' + session[i].secure.toString().toUpperCase() + ' ' + Math.ceil(session[i].expirationDate) + ' ' + session[i].name + ' ' + session[i].value + '\n';
}
//console.log(net);
/*fs.writeFile(global.dir+"/tmp/c", net, function(err) {
if(err) {
return console.log(err);
}
//console.log("T!");
});*/
}
module.exports = crunch;

View File

@ -1,188 +0,0 @@
const request = require('request');
const fs = require('fs')
const ipcMain = require('electron').ipcMain;
const unzip = require('unzip');
const {
spawn
} = require('child_process');
var libsx = {
"ffmpeg": "ffmpeg",
"ffplay": "ffplay",
"ffprobe": "ffprobe",
"youtube-dl": "youtube-dl"
}
var libs = {};
libs.listen = null;
libs.libs = null;
ipcMain
.on('download-lib', (event, arg) => {
console.log('TEST')
libs.listen = event;
console.log(`This platform is ${process.platform}`);
switch (process.platform) {
case "win32":
for (var lib in libsx) {
libsx[lib] = libsx[lib] + '.exe';
}
break;
default:
}
for (var lib in libsx) {
if (fs.existsSync(global.dir + "/lib/" + libsx[lib])) {
} else {
libsx[lib] = null;
}
}
libs.libs = libsx;
if (libsx['ffmpeg'] === null || libsx['ffplay'] === null || libsx['ffprobe'] === null) {
var z = 0;
var url = libs.ff(process.platform);
if (url === '') {
libs.checkNext('youtube-dl');
} else {
switch (process.platform) {
case "win32":
libs.download(url, "ffmpeg", function(data, file) {
fs.createReadStream(file)
.pipe(unzip.Parse())
.on('entry', function(entry) {
var fileName = entry.path;
var type = entry.type; // 'Directory' or 'File'
var size = entry.size;
console.log(fileName)
if (fileName === "ffmpeg-latest-win32-static/bin/ffmpeg.exe" || fileName === "ffmpeg-latest-win32-static/bin/ffprobe.exe" || fileName === "ffmpeg-latest-win32-static/bin/ffplay.exe") {
entry.pipe(fs.createWriteStream(global.dir + '/lib/' + fileName.split('/')[2]));
console.log('TEST')
z++;
if (z == 3) {
libs.checkNext('youtube-dl');
}
} else {
entry.autodrain();
}
});
});
break;
case "linux":
libs.download(url, "ffmpeg", function(data, file) {
const ls = spawn('tar', ['xvf', './src/tmp/ffmpeg.x-xz', '-C', './src/tmp']);
ls.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
ls.stderr.on('data', (data) => {
console.log(`stderr: ${data}`);
});
ls.on('close', (code) => {
var folder = "";
console.log(`child process exited with code ${code}`);
const ls = spawn('rm', ['./src/tmp/ffmpeg.x-xz']).on('close', () => {
const ls = spawn('ls', ['./src/tmp/']).stdout.on(data, (data) => {
console.log(data)
if (data.match('ffmpeg-') && data.match('-static')) {
folder = data;
}
}).on('close', () => {
const ls = spawn('cp', ['./src/tmp/' + folder + '/ffmpeg', './src/lib/ffmpeg']).on('close', () => {
const ls = spawn('cp', ['./src/tmp/' + folder + '/ffprobe', './src/lib/ffprobe']).on('close', () => {
libs.checkNext('youtube-dl');
});
});
});
});
});
})
break;
default:
}
}
} else {
libs.checkNext('youtube-dl');
}
console.dir(libsx);
})
libs.checkNext = (nxt) => {
if (libs.libs['youtube-dl'] === null) {
libs.yt_dl(process.platform, function() {
libs.startFull();
});
} else {
libs.startFull();
}
}
libs.startFull = () => {
libs.listen.sender.send('fin-loading', {});
}
libs.ff = (os) => {
var url = "";
switch (os) {
case "win32":
url = 'http://ffmpeg.zeranoe.com/builds/win32/static/ffmpeg-latest-win32-static.zip';
break;
case "linux":
url = 'https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-64bit-static.tar.xz'
default:
}
return url;
}
libs.yt_dl = (os, cb) => {
var url = "";
switch (os) {
case "win32":
url = 'https://yt-dl.org/downloads/2017.08.13/youtube-dl.exe';
libs.download(url, "youtube-dl", function(data, file) {
fs.renameSync(file, global.dir + '/lib/youtube-dl.exe');
cb();
})
break;
case "linux":
url = 'https://yt-dl.org/downloads/latest/youtube-dl'
libs.download(url, "youtube-dl", function(data, file) {
fs.renameSync(file, global.dir + '/lib/youtube-dl');
cb();
})
default:
}
}
libs.download = (url, data, cb) => {
var r = request(url);
var actual = 1;
var full = 100;
var perc = 0;
r.on('data', function(chunk) {
actual += chunk.length;
perc = actual / full * 100;
console.log(perc);
libs.listen.sender.send('progress', {
percent: Math.floor(perc)
});
});
r.on('response', function(res) {
res.pipe(fs.createWriteStream(global.dir + '/tmp/' + data + '.' + res.headers['content-type'].split('/')[1]));
full = res.headers['content-length'];
res.on('end', function() {
cb(data, global.dir + '/tmp/' + data + '.' + res.headers['content-type'].split('/')[1]);
})
});
}
function win_ffmpeg() {
}
module.exports = libs;

View File

@ -1,57 +0,0 @@
const {
exec
} = require('child_process');
var install = {};
install.init = (cb) => {
var url = [
['ffmpeg', 'https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-64bit-static.tar.xz'],
['youtube-dl', 'https://yt-dl.org/downloads/latest/youtube-dl']
]
var download = (i) => {
install.download(url[i], function(path) {
switch (i) {
case 0:
shell.
break;
default:
}
if (i < url.length - 1) {
download(i++);
} else {
cb();
}
})
};
download(0)
}
install.download = (url, cb) => {
var r = request(url);
var actual = 1;
var full = 100;
var perc = 0;
r.on('data', function(chunk) {
actual += chunk.length;
perc = actual / full * 100;
console.log(perc);
libs.listen.sender.send('progress', {
percent: Math.floor(perc)
});
});
r.on('response', function(res) {
var path = global.dir + '/tmp/' + url.split('/')[url.split('/').length - 1];
res.pipe(fs.createWriteStream(path));
full = res.headers['content-length'];
res.on('end', function() {
cb(path);
})
});
}

View File

@ -1,91 +0,0 @@
const {
app,
BrowserWindow,
Menu,
dialog,
ipcMain
} = require('electron');
//alwaysOnTop
var win = null;
var pot = {};
var s = null;
var pot_open_ev = null;
ipcMain
.on('close_pot', (event, arg) => {
console.log('CLOSE')
pot.close(event);
})
.on('pot_run', (event, arg) => {
pot_open_ev.sender.send('pot_play', arg);
})
.on('pot_real_open', (event, arg) => {
console.log('POT EVENT SET')
pot_open_ev = event;
})
.on('open-pot', (event, arg) => {
pot.open(event);
})
pot.isOpen = false;
pot.open = (e) => {
s = e;
if (win !== null) {
e.sender.send('play-in-Window', {
do: false
});
win.close();
}
var x = new playerOnTop(e);
}
pot.close = () => {
console.log('CLOSE')
s.sender.send('play-in-Window', {
do: false
});
win.close();
}
class playerOnTop {
constructor(e) {
pot.isOpen = true;
this.win = new BrowserWindow({
width: 320,
height: 180,
show: false,
frame: false,
alwaysOnTop: true,
icon: global.dir + '/app.ico'
})
e.sender.send('play-in-Window', {
do: true
});
win = this.win;
win.loadURL(`file://${global.dir}/app/view/pot.html`)
win.once('ready-to-show', () => {
win.show();
})
win.on('resize', function() {
setTimeout(function() {
var size = win.getSize();
win.setSize(size[0], parseInt(size[0] * 9 / 16));
}, 0);
});
win.on('closed', () => {
pot.isOpen = false;
e.sender.send('play-in-Window', {
do: false
});
win = null;
});
}
}
module.exports = pot;

View File

View File

@ -1,47 +0,0 @@
const {
app,
Menu,
Tray
} = require('electron')
const main_window = require('./windows.js/main.js')
const path = require('path')
module.exports = () => {
switch (process.platform) {
case 'win32':
break;
case 'linux':
break;
}
let tray = new Tray(path.join(global.dir + '/app.png'))
const contextMenu = Menu.buildFromTemplate([{
label: 'Open',
click() {
main_window.open()
}
},
/*{label: 'About',click() { console.log('item 1 clicked') }},
{label: 'Item1', type: 'radio'},
{type: 'separator'},
{label: 'Item2', type: 'radio'},
{label: 'Item3', type: 'radio', checked: true},*/
{
label: 'Beenden',
click() {
main_window.close();
}
},
])
tray.setToolTip('Cyb3r Downloader.')
tray.setContextMenu(contextMenu)
main_window.createWindow();
main_window.open();
return tray;
}

View File

@ -1,70 +0,0 @@
const watchr = require('watchr');
const fs = require('fs')
const path = require('path')
const ipcMain = require('electron').ipcMain;
var watch_event = null;
ipcMain
.on('watchr_event', (event, arg) => {
watch_event = event
})
class folderWatchr {
constructor(folder) {
this.folder = folder;
this.files = [];
var files = this.files;
fs.readdirSync(this.folder).forEach(file => {
files.push(folder + '/' + file);
});
for (var i = 0; i < files.length; i++) {
files[i] = files[i].replace(/\\/g, "/");
watch_event.sender.send('watchr_file', {
type: "add",
file: files[i]
});
}
function listener(changeType, fullPath, currentStat, previousStat) {
console.log(changeType);
fullPath = fullPath.replace(/\\/g, "/");
switch (changeType) {
case 'update':
break;
case 'create':
console.log('the file', fullPath, 'was created', currentStat)
files.push(fullPath);
watch_event.sender.send('watchr_file', {
type: "add",
file: fullPath
});
break;
case 'delete':
watch_event.sender.send('watchr_file', {
type: "remove",
file: fullPath
});
files.splice(files.indexOf(fullPath), 1);
break;
}
}
function next(err) {
if (err) return console.log('watch failed on', path, 'with error', err);
console.log('watch successful on', path);
}
// Watch the path with the change listener and completion callback
this.stalker = watchr.open(this.folder, listener, next);
}
destroy() {
this.stalker.close()
}
}
module.exports = folderWatchr;

View File

@ -1,25 +0,0 @@
const app = require('express')();
var cors = require('cors')
app.use(cors())
const bodyParser = require('body-parser');
app.use(bodyParser.json()); // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({ // to support URL-encoded bodies
extended: true
}));
app.post('/download', function(req, res) {
var log = req.query.url;
console.log(log)
// ...
$('#url').val(log);
$('#start-download').click();
res.send();
});
app.listen(54167, "127.0.0.1");
module.exports = app;

View File

@ -0,0 +1,33 @@
const r = require;
const express = r('express');
const app = express();
const server = r('http').Server(app);
const bodyParser = r('body-parser');
const session = r('express-session')
app.set('trust proxy', 1) // trust first proxy
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
}))
app.use(bodyParser.json({ type: 'application/*+json' }))
app.use(bodyParser.urlencoded({ extended: false }));
//server.listen(7080);
<<<<<<< HEAD
app.all('/',(req,res)=>{
res.redirect('/app/');
});
app.get('/app/*',(req,res)=>{
res.sendfile(global.dir+'/web/index.html');
});
app.use(express.static(global.dir+'/web'));
=======
app.use(express.static(global.dir+'/web'))
>>>>>>> 465a390f1d2c5c83134c07a568c95b454dfd19d8
module.exports = app;

View File

@ -1,38 +0,0 @@
const {
BrowserWindow,
session
} = require('electron');
const crunch = require('./../crunchyroll')
class browser {
constructor(url) {
console.log("TEST")
this.window = new BrowserWindow({
width: 500,
height: 500,
show: true,
frame: true,
icon: global.dir + '/app.ico'
})
setInterval(function() {
session.defaultSession.cookies.get({
url: 'http://crunchyroll.com'
}, (error, cookies) => {
//console.log(error, cookies)
crunch.session_save(cookies);
})
}, 3000)
var window = this.window
window.loadURL(url)
window.once('ready-to-show', () => {
})
this.window.on('closed', () => {
window = null;
});
}
}
module.exports = browser;

View File

@ -1,47 +0,0 @@
const {
app,
BrowserWindow,
Menu,
dialog,
ipcMain
} = require('electron');
var win = {};
win.win = null;
ipcMain
.on('winHide', (event, arg) => {
console.log('minimize')
win.win.minimize()
//win.win.hide()
})
win.createWindow = () => {
win.win = new BrowserWindow({
width: 1010,
height: 800,
minWidth: 1010,
minHeight: 565,
show: true,
frame: false,
icon: global.dir + '/app.ico'
})
win.win.loadURL(`file://${global.dir}/app/view/layout.html`);
win.win.show();
win.win.on('closed', () => {
//win.win = null;
});
win.win.on('close', function(event) {
});
}
win.open = () => {
win.win.restore();
}
win.close = () => {
win.win.close();
}
module.exports = win;

View File

@ -1,208 +0,0 @@
const {
spawn
} = require('child_process');
const {
Notification,
ipcMain
} = require('electron');
const dl_routine = require('./youtube-dl.routine')
const nodeID3 = require('node-id3');
//const web = require('./webLoader/router');
const pot = require('./player_onTop');
const folderWatchr = require('./watchr')
console.log(global.dir);
var orig_path = "";
var path = "";
var format = "mp3";
var fol = null;
var pot_open_ev = null;
var request = require('request').defaults({
encoding: null
});
var list = [];
ipcMain
.on('start-download', (event, arg) => {
path = orig_path;
if(list.length != 0){
list.push([arg,event]);
}else{
list.push([arg,event]);
var download = new yt_dl(arg.url, arg.id, arg.title);
download.addListen(event)
download.download();
}
})
.on('set-format', (event, arg) => {
format = arg.format;
})
.on('start-download-pl', (event, arg) => {
var mkdirp = require('mkdirp');
if (orig_path === "") {
path = '.'
} else {
path = orig_path
}
mkdirp(path + '/' + arg.folder, function(err) {
path = path + '/' + arg.folder;
// path exists unless there was an error
var download = new yt_dl(arg.url, arg.id);
download.addListen(event)
download.download();
});
})
.on('setPath', function(event, arg) {
path = arg.path;
orig_path = arg.path;
if (fol !== null) {
fol.destroy()
}
fol = new folderWatchr(path);
console.log('SET Path: ' + path)
});
var yt_dl = class {
constructor(url, id, title) {
this.url = url;
this.percent = 0;
this.lwrite = null;
this.id = id;
this.title = title
}
addListen(e) {
this.lwrite = e
}
status(stat) {
this.lwrite('download-progress', stat);
}
download() {
var log = [];
var me = this;
var ls;
var m = dl_routine(path, this.url, format, this.title);
console.log('CMD: '+m[0]+' '+ m[1]);
ls = spawn(m[0], m[1]);
if (path == '') {
//ls = spawn(global.dir+'/lib/youtube-dl', ['-x','--audio-format','mp3','-i',this.url]);
} else {
//ls = spawn(global.dir+'/lib/youtube-dl', ['-x','--audio-format','mp3','-i',this.url,'-o',path+'/%(title)s.%(ext)s']);
}
ls.stdout.on('data', (data) => {
data = data.toString('utf8');
log.push(data);
//console.log(data);
try {
var z = data.replace(/(\r\n|\n|\r)/gm, "").split(' ');
console.log(z)
switch (z[0]) {
case '[download]':
var percent = data.split(']')[1].split('of')[0];
//console.log(z)
me.percent = percent.trim();
me.lwrite.sender.send('download-progress', {
percent: me.percent,
id: me.id
});
break;
default:
}
var m = z.length;
for (var i = 0; i < m; i++) {
if (z[i] === '[ffmpeg]') {
if (z[i + 1] === 'Merging') {
var file = "";
for (var x = i + 4; x < m; x++) {
console.log(z[x])
if (z[x] === 'has' && z[x + 1] === "already" && z[x + 2] === "been" && z[x + 3] === 'downloaded') {
break;
}
file = z[x];
}
me.lwrite.sender.send('file', {
id: me.id,
file: file
});
break;
}
}
}
} catch (e) {
console.log(e);
} finally {
}
});
ls.stderr.on('data', (data) => {
console.log(`stderr: ${data}`);
});
ls.on('close', (code) => {
console.log(`child process exited with code ${code}`);
me.lwrite.sender.send('file', {
id: me.id,
file: log[log.length - 2].split('[ffmpeg] Destination: ')[1]
});
me.lwrite.sender.send('process-fin', {
percent: me.percent,
id: me.id
});
list.splice(0,1);
if(list.length>0){
dl(list[0][0],list[0][1]);
}
var title = this.title;
if (this.url.match('youtube') && format === 'mp3') {
var url = this.url;
var video_id = this.url.split('v=')[1];
var ampersandPosition = video_id.indexOf('&');
if (ampersandPosition != -1) {
video_id = video_id.substring(0, ampersandPosition);
}
var fornoti = title;
if (title === "") {
fornoti = url;
}
var x = new Notification({
title: "Cyb3r Downloader",
body: "finished download for " + title,
//icon : body
})
x.show()
request.get('https://i.ytimg.com/vi/' + video_id + '/hqdefault.jpg', function(err, res, body) {
//log[log.length-2].split('[ffmpeg] Destination: ')[1]
var tags = {
image: body
}
var success = nodeID3.write(tags, path + '/' + title + '.' + format);
console.log(success);
});
}
});
}
}
function dl(arg,event){
var download = new yt_dl(arg.url, arg.id, arg.title);
download.addListen(event)
download.download();
}
module.exports = yt_dl;

View File

@ -1,30 +0,0 @@
module.exports = (path, url, format, title = "%(title)s") => {
var command = global.dir + '/lib/youtube-dl';
var param = [];
console.log(url);
if (url.match('youtube')) {
console.log('youtube')
switch (format) {
case "vorbis":
param = ['-x', '-f', 'bestaudio[acodec^=opus]', '--audio-format', 'vorbis', '-i', url, '-o', path + '/'+title+'.%(ext)s'];
break;
case "mp3":
param = ['--audio-quality', '0','-f','bestaudio[ext=m4a]','--audio-format','mp3', url, '-o', path + '/'+title+'.%(ext)s'];
break;
case "mp4":
param = ['-w', '-f', 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/mp4', url, '-o', path + '/'+title+'.%(ext)s'];
break;
default:
}
} else if (url.match('crunchyroll')) {
console.log('crunchyroll')
param = ['--cookie', global.dir + '/tmp/c', '--all-subs', '--sub-format', 'srt', '--write-sub', '--embed-subs', url, '-o', path + '/%(title)s.%(ext)s'];
}
return [command, param];
}

View File

@ -1,17 +0,0 @@
var st = {};
st.replace = (str)=>{
return str
.replace(/\|/g, "_")
.replace(/__/g, "_");
;
}
module.exports = st;

View File

@ -1,63 +1,2 @@
const path = require('path');
global.dir = path.join(__dirname);
const {
app,
BrowserWindow,
Menu,
dialog,
ipcMain
} = require('electron');
const fs = require('fs');
const yt_dl = require('./controller/youtube-dl')
const dl = require('./controller/download');
const browser = require('./controller/windows.js/browser');
const tray = require('./controller/tray')
//const main_window = require('./controller/windows.js/main.js')
let tray_win = null;
if (!fs.existsSync(global.dir+'/tmp/inst')) {
fs.writeFileSync(global.dir+'/tmp/inst',"out");
app.quit();
}else{
var win ;
app.getPath('documents')
const createWindow = () =>{
win = new BrowserWindow({
width: 320,
height: 500,
show: false,
frame: false,
icon: __dirname + '/app.ico'
})
ipcMain
.on('start-full', (event, arg)=>{
//main_window.createWindow();
//main_window.open();
tray_win = tray();
win.close();
});
win.loadURL(`file://${__dirname}/app/view/init.html`)
win.once('ready-to-show', () => {
win.show()
})
win.on('closed', () => {
win = null;
});
}
app.on('ready', createWindow);
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
app.on('activate', () => {
if (mainWindow === null) {
createWindow();
}
});
}
module.exports = app;
global.dir = __dirname;
module.exports = require('./controller/webserver/router.js');

View File

@ -1 +0,0 @@
./youtube-dl.exe http://www.crunchyroll.com/a-centaurs-life/episode-1-when-all-is-said-and-done-everyone-loves-kisses-did-you-know-that-a-marathon-is-a-microcosm-of-life-742023 --sub-lang deDE --sub-format srt --write-sub --embed-subs

View File

@ -1,59 +0,0 @@
var app = require('./index');
var handleStartupEvent = function() {
console.log(process.platform);
switch (process.platform) {
case 'win32':
break;
case 'linux':
break;
default:
}
if (process.platform !== 'win32') {
return false;
}
const exeName = path.basename(process.execPath);
var squirrelCommand = process.argv[1];
console.log(squirrelCommand);
switch (squirrelCommand) {
case '--squirrel-updated':
case '--squirrel-install':
target = path.basename(process.execPath);
updateDotExe = path.resolve(path.dirname(process.execPath), '..', 'update.exe');
var createShortcut = updateDotExe + ' --createShortcut=' + target + ' --shortcut-locations=Desktop,StartMenu' ;
console.log (createShortcut);
exec(createShortcut);
spawnUpdate(['--createShortcut', exeName]);
app.quit();
return true;
case '--squirrel-uninstall':
// Undo anything you did in the --squirrel-install and
// --squirrel-updated handlers
target = path.basename(process.execPath);
updateDotExe = path.resolve(path.dirname(process.execPath), '..', 'update.exe');
var createShortcut = updateDotExe + ' --removeShortcut=' + target ;
console.log (createShortcut);
exec(createShortcut);
spawnUpdate(['--removeShortcut', exeName]);
// Always quit when done
app.quit();
return true;
case '--squirrel-obsolete':
// This is called on the outgoing version of your app before
// we update to the new version - it's the opposite of
// --squirrel-updated
app.quit();
return true;
}
};
(function(){
if (handleStartupEvent()) {
return;
}
})

36
src/src/jsx/form.jsx Normal file
View File

@ -0,0 +1,36 @@
import React from 'react';
import ReactDOM from 'react-dom';
export class Form extends React.Component {
constructor(props) {
super(props);
this.state = {
value: 'Please write an essay about your favorite DOM element.'
};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(event) {
this.setState({value: event.target.value});
}
handleSubmit(event) {
alert('An essay was submitted: ' + this.state.value);
event.preventDefault();
}
render() {
return (<div>
<form onSubmit={this.handleSubmit}>
<label>
Name:
<input type="text" value={this.state.value} onChange={this.handleChange}/>
</label>
<input type="submit" value="Submit"/>
<br/>
</form>
</div>);
}
}

20
src/src/jsx/main.jsx Normal file
View File

@ -0,0 +1,20 @@
import React from 'react';
import ReactDOM from 'react-dom';
import {Form} from './form.jsx';
class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}
const element = (
<div>
<Welcome name="Test"/>
<Form />
</div>
);
ReactDOM.render(
element,
document.getElementById('root')
);

0
src/src/jsx/main/nav.jsx Normal file
View File

View File

@ -1,113 +0,0 @@
/*
*/
@main-front-color : #111111;
@background-color : #F8F8F8;
@background-2ndcolor: #F8F8F8;
body {
margin: 0;
margin-top: 46px;
/*background: @background-color;
color:@main-front-color;*/
}
.navbar{
background: @main-front-color !important;
color:@background-color;
}
.btn-success {
color: @main-front-color;
background-color: @background-color;
border-color: @main-front-color;
transition: all .3s;
}
.btn-success:hover ,.btn-success:active,.btn-success:focus,.dropdown-toggle:focus,.dropdown-toggle:active,.btn-success:active, .btn-success.active, .open > .dropdown-toggle.btn-success {
color: @background-color !important;
background-color: @main-front-color !important;
border-color: @main-front-color !important;
transition: all .3s;
}
.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {
text-decoration: none;
color: @main-front-color;
background-color: @background-color;
}
.dropdown-menu{
background-color: @background-color;
}
span.input-group-btn.open > ul > li> a{
background-image:none;
}
/*
.progress{
background-image:none;
background-color: @background-color;
box-shadow: inset 0px 0px 3px 0px @main-front-color;
}
.progress-bar{
background-image:none;
background-color: @background-color;
box-shadow: inset 0px 0px 12px 0px @main-front-color;
transition: .3s all;
}*/
.media:first-child {
margin-top: 15px;
}
.media {
box-shadow: 0 0 12px 1px rgba(105, 105, 105, 0.28);
margin-top: 14px;
}
.sidebar-nav {
padding: 10px;
}
.nav.nav-list a {
padding: 5px 10px;
}
.nav-header {
font-weight: bold;
}
.scroll {
overflow-y: scroll;
height: ~"calc(100vh - 160px)";
margin-top: 15px;
box-shadow: inset 0px 0px 3px 2px rgba(69, 69, 69, 0.3);
}
.left-playlist{
box-shadow: 0px 0px 6px 1px @main-front-color;
height: ~"calc(100vh - 20vw - 30px )";
}
.row-flex{
word-break: break-all;
width:100%;
display: flex;
.flex-btn{
width: 50px;
}
.cont{
width:100%;
}
}
*{
border-radius: 0px !important;
}
*::-webkit-scrollbar-track
{
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
background-color: #F5F5F5;
}
*::-webkit-scrollbar
{
width: 6px;
background-color: #F5F5F5;
}
*::-webkit-scrollbar-thumb
{
background-color: #000000;
}

View File

@ -1 +0,0 @@
out

2050
src/web/css/bootstrap-grid.css vendored Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

7
src/web/css/bootstrap-grid.min.css vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

330
src/web/css/bootstrap-reboot.css vendored Normal file
View File

@ -0,0 +1,330 @@
/*!
* Bootstrap Reboot v4.0.0 (https://getbootstrap.com)
* Copyright 2011-2018 The Bootstrap Authors
* Copyright 2011-2018 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/
*,
*::before,
*::after {
box-sizing: border-box;
}
html {
font-family: sans-serif;
line-height: 1.15;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
-ms-overflow-style: scrollbar;
-webkit-tap-highlight-color: transparent;
}
@-ms-viewport {
width: device-width;
}
article, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {
display: block;
}
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color: #212529;
text-align: left;
background-color: #fff;
}
[tabindex="-1"]:focus {
outline: 0 !important;
}
hr {
box-sizing: content-box;
height: 0;
overflow: visible;
}
h1, h2, h3, h4, h5, h6 {
margin-top: 0;
margin-bottom: 0.5rem;
}
p {
margin-top: 0;
margin-bottom: 1rem;
}
abbr[title],
abbr[data-original-title] {
text-decoration: underline;
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
cursor: help;
border-bottom: 0;
}
address {
margin-bottom: 1rem;
font-style: normal;
line-height: inherit;
}
ol,
ul,
dl {
margin-top: 0;
margin-bottom: 1rem;
}
ol ol,
ul ul,
ol ul,
ul ol {
margin-bottom: 0;
}
dt {
font-weight: 700;
}
dd {
margin-bottom: .5rem;
margin-left: 0;
}
blockquote {
margin: 0 0 1rem;
}
dfn {
font-style: italic;
}
b,
strong {
font-weight: bolder;
}
small {
font-size: 80%;
}
sub,
sup {
position: relative;
font-size: 75%;
line-height: 0;
vertical-align: baseline;
}
sub {
bottom: -.25em;
}
sup {
top: -.5em;
}
a {
color: #007bff;
text-decoration: none;
background-color: transparent;
-webkit-text-decoration-skip: objects;
}
a:hover {
color: #0056b3;
text-decoration: underline;
}
a:not([href]):not([tabindex]) {
color: inherit;
text-decoration: none;
}
a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {
color: inherit;
text-decoration: none;
}
a:not([href]):not([tabindex]):focus {
outline: 0;
}
pre,
code,
kbd,
samp {
font-family: monospace, monospace;
font-size: 1em;
}
pre {
margin-top: 0;
margin-bottom: 1rem;
overflow: auto;
-ms-overflow-style: scrollbar;
}
figure {
margin: 0 0 1rem;
}
img {
vertical-align: middle;
border-style: none;
}
svg:not(:root) {
overflow: hidden;
}
table {
border-collapse: collapse;
}
caption {
padding-top: 0.75rem;
padding-bottom: 0.75rem;
color: #6c757d;
text-align: left;
caption-side: bottom;
}
th {
text-align: inherit;
}
label {
display: inline-block;
margin-bottom: .5rem;
}
button {
border-radius: 0;
}
button:focus {
outline: 1px dotted;
outline: 5px auto -webkit-focus-ring-color;
}
input,
button,
select,
optgroup,
textarea {
margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
button,
input {
overflow: visible;
}
button,
select {
text-transform: none;
}
button,
html [type="button"],
[type="reset"],
[type="submit"] {
-webkit-appearance: button;
}
button::-moz-focus-inner,
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner {
padding: 0;
border-style: none;
}
input[type="radio"],
input[type="checkbox"] {
box-sizing: border-box;
padding: 0;
}
input[type="date"],
input[type="time"],
input[type="datetime-local"],
input[type="month"] {
-webkit-appearance: listbox;
}
textarea {
overflow: auto;
resize: vertical;
}
fieldset {
min-width: 0;
padding: 0;
margin: 0;
border: 0;
}
legend {
display: block;
width: 100%;
max-width: 100%;
padding: 0;
margin-bottom: .5rem;
font-size: 1.5rem;
line-height: inherit;
color: inherit;
white-space: normal;
}
progress {
vertical-align: baseline;
}
[type="number"]::-webkit-inner-spin-button,
[type="number"]::-webkit-outer-spin-button {
height: auto;
}
[type="search"] {
outline-offset: -2px;
-webkit-appearance: none;
}
[type="search"]::-webkit-search-cancel-button,
[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-file-upload-button {
font: inherit;
-webkit-appearance: button;
}
output {
display: inline-block;
}
summary {
display: list-item;
cursor: pointer;
}
template {
display: none;
}
[hidden] {
display: none !important;
}
/*# sourceMappingURL=bootstrap-reboot.css.map */

File diff suppressed because one or more lines are too long

8
src/web/css/bootstrap-reboot.min.css vendored Normal file
View File

@ -0,0 +1,8 @@
/*!
* Bootstrap Reboot v4.0.0 (https://getbootstrap.com)
* Copyright 2011-2018 The Bootstrap Authors
* Copyright 2011-2018 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}
/*# sourceMappingURL=bootstrap-reboot.min.css.map */

File diff suppressed because one or more lines are too long

8975
src/web/css/bootstrap.css vendored Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

7
src/web/css/bootstrap.min.css vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

18
src/web/index.html Normal file
View File

@ -0,0 +1,18 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title></title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
</head>
<body>
<div id="root">
</div>
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<script src="/sh-user.js"></script>
</body>
</html>

6328
src/web/js/bootstrap.bundle.js vendored Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

7
src/web/js/bootstrap.bundle.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

3894
src/web/js/bootstrap.js vendored Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

7
src/web/js/bootstrap.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

26
src/webpack.config.js Normal file
View File

@ -0,0 +1,26 @@
var path = require('path');
var webpack = require('webpack');
var x = __dirname;
module.exports = {
entry: {
user : './webpack/main.js'
},
output: {
path: path.resolve(x, 'public'),
filename: 'sh-[name].js'
},
module: {
loaders: [
{
test: /.jsx?$/,
loader: 'babel-loader',
exclude: /node_modules/,
query: {
presets: ['es2015', 'react']
}
}
]
}
};

1
src/webpack/main.js Normal file
View File

@ -0,0 +1 @@
import app from '../src/jsx/main.jsx';

View File

@ -1,7 +0,0 @@
var MPlayer = require('mplayer');
var player = new MPlayer();
var song = 'D:/theen/git/cyb3r-youtube-downloader/___.mp3';
player.openFile(song);