Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
35a4566107 | |||
7f6f74f50b | |||
c569c0beca | |||
6a3d4820c1 | |||
|
3d5d5320bd | ||
43fa503dcf |
2
.gitignore
vendored
2
.gitignore
vendored
@ -71,3 +71,5 @@ out
|
||||
*.mp3
|
||||
*.part
|
||||
*.ytdl
|
||||
|
||||
*.webm
|
||||
|
10825
package-lock.json
generated
10825
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
63
package.json
63
package.json
@ -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",
|
||||
"body-parser": "^1.18.2",
|
||||
"cors": "^2.8.4",
|
||||
"electron": "^1.7.6",
|
||||
"electron-config": "^1.0.0",
|
||||
"express": "^4.15.4",
|
||||
"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"
|
||||
}
|
||||
}
|
||||
|
BIN
src/app.ico
BIN
src/app.ico
Binary file not shown.
Before Width: | Height: | Size: 32 KiB |
22
src/app.js
Normal file
22
src/app.js
Normal 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}`)
|
@ -1,223 +0,0 @@
|
||||
$(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">
|
||||
<img id="img-` + video_id + `" class="d-flex align-self-start mr-3" src="`+ YT.thumbnail_url +`" alt="Generic placeholder image">
|
||||
<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
|
||||
});
|
||||
})
|
||||
}
|
||||
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';
|
||||
}
|
||||
}
|
||||
})
|
@ -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)
|
||||
}
|
||||
})
|
||||
})
|
@ -1,25 +0,0 @@
|
||||
$(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")
|
||||
});
|
||||
|
||||
|
||||
})
|
7
src/app/libs/bootstrap/bootstrap.min.css
vendored
7
src/app/libs/bootstrap/bootstrap.min.css
vendored
File diff suppressed because one or more lines are too long
6
src/app/libs/bootstrap/bootstrap.min.js
vendored
6
src/app/libs/bootstrap/bootstrap.min.js
vendored
File diff suppressed because one or more lines are too long
587
src/app/libs/bootstrap/css/bootstrap-theme.css
vendored
587
src/app/libs/bootstrap/css/bootstrap-theme.css
vendored
@ -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
6757
src/app/libs/bootstrap/css/bootstrap.css
vendored
6757
src/app/libs/bootstrap/css/bootstrap.css
vendored
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
6
src/app/libs/bootstrap/css/bootstrap.min.css
vendored
6
src/app/libs/bootstrap/css/bootstrap.min.css
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2377
src/app/libs/bootstrap/js/bootstrap.js
vendored
2377
src/app/libs/bootstrap/js/bootstrap.js
vendored
File diff suppressed because it is too large
Load Diff
7
src/app/libs/bootstrap/js/bootstrap.min.js
vendored
7
src/app/libs/bootstrap/js/bootstrap.min.js
vendored
File diff suppressed because one or more lines are too long
@ -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')
|
2337
src/app/libs/font-awesome/css/font-awesome.css
vendored
2337
src/app/libs/font-awesome/css/font-awesome.css
vendored
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Before Width: | Height: | Size: 434 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
4
src/app/libs/jquery/jquery-3.2.1.min.js
vendored
4
src/app/libs/jquery/jquery-3.2.1.min.js
vendored
File diff suppressed because one or more lines are too long
4
src/app/libs/jquery/jquery-3.2.1.slim.min.js
vendored
4
src/app/libs/jquery/jquery-3.2.1.slim.min.js
vendored
File diff suppressed because one or more lines are too long
5
src/app/libs/popper.min.js
vendored
5
src/app/libs/popper.min.js
vendored
File diff suppressed because one or more lines are too long
9150
src/app/style/bootstrap.css
vendored
9150
src/app/style/bootstrap.css
vendored
File diff suppressed because it is too large
Load Diff
@ -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;
|
||||
}
|
@ -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
@ -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}
|
@ -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;
|
||||
}
|
@ -1,205 +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",
|
||||
"wcmxa",
|
||||
"wc5e2"
|
||||
];
|
||||
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>
|
@ -1,161 +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="./../libs/jquery/jquery-3.2.1.slim.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/css/bootstrap.css" />
|
||||
<link rel="stylesheet" href="./../libs/bootstrap/css/bootstrap-theme.css" />-->
|
||||
<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="#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="#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>
|
||||
<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="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>
|
||||
</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) {
|
||||
require('remote').getCurrentWindow().toggleDevTools();
|
||||
} else if (e.which === 116) {
|
||||
location.reload();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
@ -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>
|
@ -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;
|
@ -1,138 +0,0 @@
|
||||
const request = require('request');
|
||||
const fs = require('fs')
|
||||
const ipcMain = require('electron').ipcMain;
|
||||
const unzip = require('unzip')
|
||||
|
||||
|
||||
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{
|
||||
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();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}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 = ''
|
||||
|
||||
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 = ''
|
||||
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]);
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
module.exports = libs;
|
@ -1,53 +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);
|
||||
})
|
||||
});
|
||||
}
|
@ -1,83 +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;
|
0
src/controller/router/router.js
Normal file
0
src/controller/router/router.js
Normal file
@ -1,26 +0,0 @@
|
||||
const {app, Menu, Tray} = require('electron')
|
||||
const main_window = require('./windows.js/main.js')
|
||||
|
||||
|
||||
|
||||
module.exports = ()=>{
|
||||
|
||||
|
||||
let tray = new Tray(global.dir+'/app.ico')
|
||||
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;
|
||||
}
|
@ -1,61 +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;
|
@ -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;
|
33
src/controller/webserver/router.js
Normal file
33
src/controller/webserver/router.js
Normal 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;
|
@ -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;
|
@ -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;
|
@ -1,167 +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 });
|
||||
|
||||
ipcMain
|
||||
.on('start-download', (event, arg)=>{
|
||||
path = orig_path
|
||||
var download = new yt_dl(arg.url,arg.id);
|
||||
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){
|
||||
this.url = url ;
|
||||
this.percent = 0;
|
||||
this.lwrite = null;
|
||||
this.id = id;
|
||||
}
|
||||
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);
|
||||
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});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if(this.url.match('youtube')){
|
||||
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 x = new Notification({
|
||||
title:"Cyb3r Downloader",
|
||||
body :"finished download for "+url,
|
||||
//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, log[log.length-2].split('[ffmpeg] Destination: ')[1]);
|
||||
console.log(success);*/
|
||||
//});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = yt_dl;
|
@ -1,31 +0,0 @@
|
||||
|
||||
|
||||
|
||||
module.exports = (path,url,format)=>{
|
||||
var command = global.dir+'/lib/youtube-dl';
|
||||
var param = [];
|
||||
console.log(url);
|
||||
if(url.match('youtube')){
|
||||
console.log('youtube')
|
||||
switch (format) {
|
||||
case "mp3":
|
||||
param = ['-x','--audio-format','mp3','-i',url,'-o',path+'/%(title)s.%(ext)s'];
|
||||
break;
|
||||
case "mp4":
|
||||
param = ['-w','-f','bestvideo[ext=mp4]+bestaudio[ext=m4a]/mp4',url,'-o',path+'/%(title)s.%(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];
|
||||
|
||||
|
||||
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
|
||||
|
||||
|
||||
|
||||
var st = {};
|
||||
|
||||
|
||||
st.replace = (str)=>{
|
||||
return str
|
||||
.replace(/\|/g, "_")
|
||||
.replace(/__/g, "_");
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
|
||||
module.exports = st;
|
99
src/index.js
99
src/index.js
@ -1,97 +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();
|
||||
/*var win;
|
||||
const createWindow = () =>{
|
||||
win = new BrowserWindow({
|
||||
width: 320,
|
||||
height: 500,
|
||||
show: false,
|
||||
frame: false,
|
||||
icon: __dirname + '/app.ico'
|
||||
})
|
||||
win.once('ready-to-show', () => {
|
||||
})
|
||||
|
||||
win.on('closed', () => {
|
||||
win = null;
|
||||
});
|
||||
}
|
||||
app.on('ready', createWindow);
|
||||
app.on('window-all-closed', () => {
|
||||
if (process.platform !== 'darwin') {
|
||||
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()
|
||||
//var x = new yt_dl("https://www.youtube.com/watch?v=UbQgXeY_zi4")
|
||||
//x.download();
|
||||
})
|
||||
win.on('closed', () => {
|
||||
// Dereference the window object, usually you would store windows
|
||||
// in an array if your app supports multi windows, this is the time
|
||||
// when you should delete the corresponding element.
|
||||
win = null;
|
||||
});
|
||||
}
|
||||
app.on('ready', createWindow);
|
||||
app.on('window-all-closed', () => {
|
||||
// On OS X it is common for applications and their menu bar
|
||||
// to stay active until the user quits explicitly with Cmd + Q
|
||||
if (process.platform !== 'darwin') {
|
||||
app.quit();
|
||||
}
|
||||
});
|
||||
app.on('activate', () => {
|
||||
// On OS X it's common to re-create a window in the app when the
|
||||
// dock icon is clicked and there are no other windows open.
|
||||
if (mainWindow === null) {
|
||||
createWindow();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = app;
|
||||
global.dir = __dirname;
|
||||
module.exports = require('./controller/webserver/router.js');
|
||||
|
@ -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
|
59
src/main.js
59
src/main.js
@ -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
36
src/src/jsx/form.jsx
Normal 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
20
src/src/jsx/main.jsx
Normal 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
0
src/src/jsx/main/nav.jsx
Normal 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;
|
||||
}
|
2050
src/web/css/bootstrap-grid.css
vendored
Normal file
2050
src/web/css/bootstrap-grid.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
src/web/css/bootstrap-grid.css.map
Normal file
1
src/web/css/bootstrap-grid.css.map
Normal file
File diff suppressed because one or more lines are too long
7
src/web/css/bootstrap-grid.min.css
vendored
Normal file
7
src/web/css/bootstrap-grid.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
src/web/css/bootstrap-grid.min.css.map
Normal file
1
src/web/css/bootstrap-grid.min.css.map
Normal file
File diff suppressed because one or more lines are too long
330
src/web/css/bootstrap-reboot.css
vendored
Normal file
330
src/web/css/bootstrap-reboot.css
vendored
Normal 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 */
|
1
src/web/css/bootstrap-reboot.css.map
Normal file
1
src/web/css/bootstrap-reboot.css.map
Normal file
File diff suppressed because one or more lines are too long
8
src/web/css/bootstrap-reboot.min.css
vendored
Normal file
8
src/web/css/bootstrap-reboot.min.css
vendored
Normal 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 */
|
1
src/web/css/bootstrap-reboot.min.css.map
Normal file
1
src/web/css/bootstrap-reboot.min.css.map
Normal file
File diff suppressed because one or more lines are too long
8975
src/web/css/bootstrap.css
vendored
Normal file
8975
src/web/css/bootstrap.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
src/web/css/bootstrap.css.map
Normal file
1
src/web/css/bootstrap.css.map
Normal file
File diff suppressed because one or more lines are too long
7
src/web/css/bootstrap.min.css
vendored
Normal file
7
src/web/css/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
src/web/css/bootstrap.min.css.map
Normal file
1
src/web/css/bootstrap.min.css.map
Normal file
File diff suppressed because one or more lines are too long
18
src/web/index.html
Normal file
18
src/web/index.html
Normal 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
6328
src/web/js/bootstrap.bundle.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
src/web/js/bootstrap.bundle.js.map
Normal file
1
src/web/js/bootstrap.bundle.js.map
Normal file
File diff suppressed because one or more lines are too long
7
src/web/js/bootstrap.bundle.min.js
vendored
Normal file
7
src/web/js/bootstrap.bundle.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
src/web/js/bootstrap.bundle.min.js.map
Normal file
1
src/web/js/bootstrap.bundle.min.js.map
Normal file
File diff suppressed because one or more lines are too long
3894
src/web/js/bootstrap.js
vendored
Normal file
3894
src/web/js/bootstrap.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
src/web/js/bootstrap.js.map
Normal file
1
src/web/js/bootstrap.js.map
Normal file
File diff suppressed because one or more lines are too long
7
src/web/js/bootstrap.min.js
vendored
Normal file
7
src/web/js/bootstrap.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
src/web/js/bootstrap.min.js.map
Normal file
1
src/web/js/bootstrap.min.js.map
Normal file
File diff suppressed because one or more lines are too long
26
src/webpack.config.js
Normal file
26
src/webpack.config.js
Normal 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
1
src/webpack/main.js
Normal file
@ -0,0 +1 @@
|
||||
import app from '../src/jsx/main.jsx';
|
@ -1,7 +0,0 @@
|
||||
|
||||
var MPlayer = require('mplayer');
|
||||
|
||||
var player = new MPlayer();
|
||||
var song = 'D:/theen/git/cyb3r-youtube-downloader/___.mp3';
|
||||
|
||||
player.openFile(song);
|
Loading…
Reference in New Issue
Block a user