Compare commits
21 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 35a4566107 | |||
| 7f6f74f50b | |||
| c569c0beca | |||
| 6a3d4820c1 | |||
|
|
3d5d5320bd | ||
| 43fa503dcf | |||
| 82d2cc5bd6 | |||
| 1155acf718 | |||
| d4041906be | |||
| 47be7ec8ca | |||
| 526d60720e | |||
| b371613f55 | |||
| 92511a8457 | |||
| 46435b7e52 | |||
| bc7901a69f | |||
| a2848a9ee3 | |||
| a317a880ae | |||
| 50c8ccd6b7 | |||
| 42e12189a4 | |||
| bb905111ec | |||
| 12db3c4599 |
7
.gitignore
vendored
7
.gitignore
vendored
@@ -66,3 +66,10 @@ src/lib/youtube-dl*
|
||||
node_modules
|
||||
out
|
||||
*.exe
|
||||
inst
|
||||
*.mp4
|
||||
*.mp3
|
||||
*.part
|
||||
*.ytdl
|
||||
|
||||
*.webm
|
||||
|
||||
24
README.md
24
README.md
@@ -1,7 +1,29 @@
|
||||
# electron-simple-youtube-downloader
|
||||
# Cyb3r Downloader
|
||||
|
||||

|
||||
|
||||
# Download 1.5.1 release
|
||||
|
||||
So I've changed a lot from 1.5.1, not program technically but for the install process and a bit the design
|
||||
The starter is a batch file, you have to keep it open to run it :( but you can minimize it.
|
||||
|
||||
For the browser script located in "browser_out" or [Link](https://git.tooru.thee.moe/theenoro/electron-simple-youtube-downloader/blob/master/browser_out/tampermonkey_plugin.js) in the repo you can use it with "tampermonkey". Create a new script and copy & paste the source code in. Now if you are on YT in the navbar is a new button.
|
||||
|
||||
[Download](https://cl.thee.moe/index.php/s/Z5YvrlHaPfvEdbu)
|
||||
|
||||
> 24.09.2017 Fixed Installer
|
||||
|
||||
## Install Process
|
||||
|
||||
Checks if node is installed, if not it downloads it for you and you have only to click throu the installer, after that it will continue with the normal process.
|
||||
|
||||
|
||||
# Download 1.5
|
||||
|
||||
At the moment it have a few bugs. If you find some talk to me and I will list them here and fix it as soon as possible
|
||||
or if you have an git account just add them in the issues tab. [Issues](https://git.tooru.thee.moe/theenoro/electron-simple-youtube-downloader/issues)
|
||||
|
||||
[Download](https://cl.thee.moe/index.php/s/hd9ILsF2etPoa6r)
|
||||
|
||||
# v 1.4.0 Alpha
|
||||
|
||||
|
||||
61
browser_out/tampermonkey_plugin.js
Normal file
61
browser_out/tampermonkey_plugin.js
Normal file
@@ -0,0 +1,61 @@
|
||||
// ==UserScript==
|
||||
// @name Cyber Downloader ADD
|
||||
// @namespace http://tampermonkey.net/
|
||||
// @version 0.1
|
||||
// @description try to take over the world!
|
||||
// @author You
|
||||
// @require http://code.jquery.com/jquery-latest.js
|
||||
// @require https://rawgit.com/notifyjs/notifyjs/master/dist/notify.js
|
||||
// @match https://www.youtube.com/watch?v=*
|
||||
// @grant none
|
||||
// ==/UserScript==
|
||||
|
||||
var css = `
|
||||
<style>.notifyjs-corner {
|
||||
top: 57px !important;
|
||||
z-index: 99999;
|
||||
}</style>
|
||||
<button id="cb3_send" style="
|
||||
background-color: transparent;
|
||||
color: #FFF;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
"><yt-iconx style=" display: inline-flex;
|
||||
-ms-flex-align: center;
|
||||
transform: rotate(180deg);
|
||||
-webkit-align-items: center;
|
||||
align-items: center;
|
||||
-ms-flex-pack: center;
|
||||
-webkit-justify-content: center;
|
||||
justify-content: center;
|
||||
position: relative;
|
||||
vertical-align: middle;
|
||||
fill: var(--iron-icon-fill-color, currentcolor);
|
||||
stroke: none;
|
||||
width: var(--iron-icon-width, 24px);
|
||||
height: var(--iron-icon-height, 24px);
|
||||
margin-right: var(--iron-icon_-_margin-right);
|
||||
width: var(--iron-icon_-_width, var(--iron-icon-width, 24px));
|
||||
height: var(--iron-icon_-_height, var(--iron-icon-height, 24px));
|
||||
margin-bottom: var(--iron-icon_-_margin-bottom);" class="style-scope ytd-button-renderer"><svg viewBox="0 0 24 24" preserveAspectRatio="xMidYMid meet" class="style-scope yt-icon" style="pointer-events: none; display: block; width: 100%; height: 100%;"><g class="style-scope yt-icon">
|
||||
<path d="M9 16h6v-6h4l-7-7-7 7h4zm-4 2h14v2H5z" class="style-scope yt-icon"></path>
|
||||
</g></svg>
|
||||
</yt-iconx> Send To Cyber</button>
|
||||
`;
|
||||
|
||||
(function() {
|
||||
'use strict';
|
||||
var s = jQuery.noConflict();
|
||||
console.log('loaded');
|
||||
setTimeout(function(){
|
||||
s('#end').prepend(css);
|
||||
},1000);
|
||||
// Your code here...
|
||||
s('body').delegate('#cb3_send','click',function(){
|
||||
var sy = window.location;
|
||||
s.notify("Start Download", "info");
|
||||
s.post( "http://127.0.0.1:54167/download?url="+encodeURI(sy),function() {
|
||||
|
||||
});
|
||||
});
|
||||
})();
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 155 KiB |
9171
package-lock.json
generated
Normal file
9171
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
73
package.json
73
package.json
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "cyb3r-youtube-downloader",
|
||||
"productName": "cyb3r-youtube-downloader",
|
||||
"version": "1.0.0",
|
||||
"description": "My Electron application description",
|
||||
"name": "cyb3r-downloader",
|
||||
"productName": "cyb3r-downloader",
|
||||
"version": "1.5.0",
|
||||
"description": "Cyb3r_Downloader",
|
||||
"main": "src/main.js",
|
||||
"scripts": {
|
||||
"start": "electron-forge start",
|
||||
@@ -12,59 +12,36 @@
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "theen",
|
||||
"license": "MIT",
|
||||
"config": {
|
||||
"forge": {
|
||||
"make_targets": {
|
||||
"win32": [
|
||||
"squirrel"
|
||||
],
|
||||
"darwin": [
|
||||
"zip"
|
||||
],
|
||||
"linux": [
|
||||
"deb",
|
||||
"rpm"
|
||||
]
|
||||
},
|
||||
"electronPackagerConfig": {
|
||||
"packageManager": "npm"
|
||||
},
|
||||
"electronWinstallerConfig": {
|
||||
"name": "cyb3r_youtube_downloader",
|
||||
"icon": "app.ico"
|
||||
},
|
||||
"electronInstallerDebian": {},
|
||||
"electronInstallerRedhat": {},
|
||||
"github_repository": {
|
||||
"owner": "Theenoro",
|
||||
"name": "https://git.tooru.thee.moe/theenoro/electron-simple-youtube-downloader"
|
||||
},
|
||||
"windowsStoreConfig": {
|
||||
"packageName": "",
|
||||
"name": "cyb3ryoutubedownloader"
|
||||
}
|
||||
}
|
||||
},
|
||||
"license": "GPL",
|
||||
"dependencies": {
|
||||
"electron": "^1.6.11",
|
||||
"electron-compile": "^6.4.1",
|
||||
"body-parser": "^1.18.2",
|
||||
"cors": "^2.8.4",
|
||||
"electron": "^1.7.6",
|
||||
"electron-config": "^1.0.0",
|
||||
"express": "^4.16.2",
|
||||
"express-session": "^1.15.6",
|
||||
"fs": "0.0.1-security",
|
||||
"http": "^0.0.0",
|
||||
"mkdirp": "^0.5.1",
|
||||
"node-id3": "0.0.10",
|
||||
"path": "^0.12.7",
|
||||
"react": "^16.2.0",
|
||||
"react-dom": "^16.2.0",
|
||||
"react-router-dom": "^4.2.2",
|
||||
"request": "^2.81.0",
|
||||
"unzip": "^0.1.11",
|
||||
"watchr": "^3.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"babel-plugin-transform-async-to-generator": "^6.24.1",
|
||||
"babel-preset-env": "^1.6.0",
|
||||
"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.6.11",
|
||||
"eslint": "^3.19.0",
|
||||
"eslint-config-airbnb": "^15.1.0",
|
||||
"eslint-plugin-import": "^2.7.0",
|
||||
"eslint-plugin-jsx-a11y": "^5.1.1",
|
||||
"eslint-plugin-react": "^7.1.0"
|
||||
"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,130 +0,0 @@
|
||||
$(function() {
|
||||
var download_progress = $('#download-progress');
|
||||
var format = null;
|
||||
var out = $('#output');
|
||||
var video = document.getElementById('video');
|
||||
const ipcRenderer = require('electron').ipcRenderer;
|
||||
const request = require('request');
|
||||
const helper = require('./../../helper/string');
|
||||
|
||||
const {
|
||||
dialog
|
||||
} = require('electron').remote;
|
||||
|
||||
var cache = {};
|
||||
var path = "";
|
||||
|
||||
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">' + 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 class="play-file" data-file="' + 'file://' + path + '/' + encodeURI(cache[arg.id]) + '.' + format + '">Play</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];
|
||||
console.log(path)
|
||||
ipcRenderer.send('setPath', {
|
||||
path: path
|
||||
});
|
||||
})
|
||||
$('#pot').click(function(){
|
||||
ipcRenderer.send('open-pot', {
|
||||
});
|
||||
});
|
||||
$('body').delegate('.play-file', 'click', function(e) {
|
||||
if(pot === false){
|
||||
video.setAttribute("src", e.currentTarget.dataset.file);
|
||||
video.play();
|
||||
}else{
|
||||
ipcRenderer.send('pot_run', {file:e.currentTarget.dataset.file});
|
||||
}
|
||||
})
|
||||
$('body').delegate('.format', 'click', function(e) {
|
||||
format = e.currentTarget.dataset.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" ><div class="media-left"><a href="#"><img id="img-' + video_id + '" width="128" class="media-object" src="' + '" alt="..."></a></div><div class="media-body" id="body-' + video_id + '"><h4 class="media-heading">' + url + '</h4> Author: ' + '<div class="progress"><div class="progress-bar" id="download-progress-' + video_id + '" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">0%</div></div><div class="media-out-' + video_id + '"></div></div></div>').prependTo('#output');
|
||||
ipcRenderer.send('start-download', {
|
||||
url: $('#url').val(),
|
||||
id: video_id
|
||||
});
|
||||
} else {
|
||||
|
||||
var video_id = $('#url').val().split('v=')[1];
|
||||
var ampersandPosition = video_id.indexOf('&');
|
||||
if (ampersandPosition != -1) {
|
||||
video_id = video_id.substring(0, ampersandPosition);
|
||||
}
|
||||
var playlist_id = $('#url').val().split('list=')[1];
|
||||
if (typeof playlist_id !== 'undefined') {
|
||||
var playlist_idPOS = playlist_id.indexOf('&');
|
||||
if (playlist_idPOS != -1) {
|
||||
playlist_id = playlist_id.substring(0, playlist_idPOS);
|
||||
}
|
||||
|
||||
request
|
||||
.get('https://www.youtube.com/oembed?url=https://www.youtube.com/playlist?list=' + playlist_id + '&format=json', function(err, httpResponse, body) {
|
||||
var YT = JSON.parse(body);
|
||||
$('<div class="media" ><div class="media-left"><a href="#"><img id="img-' + video_id + '" width="128" class="media-object" src="' + YT.thumbnail_url + '" alt="..."></a></div><div class="media-body" id="body-' + video_id + '"><h4 class="media-heading">' + YT.title + '</h4> Playlistauthor: ' + YT.author_name + '<div class="progress"><div class="progress-bar" id="download-progress-' + video_id + '" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">0%</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="media-left"><a href="#"><img id="img-' + video_id + '" width="128" class="media-object" src="' + YT.thumbnail_url + '" alt="..."></a></div><div class="media-body" id="body-' + video_id + '"><h4 class="media-heading">' + YT.title + '</h4> Author: ' + YT.author_name + '<div class="progress"><div class="progress-bar" id="download-progress-' + video_id + '" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">0%</div></div><div class="media-out-' + video_id + '"></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)
|
||||
|
||||
}
|
||||
|
||||
})
|
||||
})
|
||||
@@ -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")
|
||||
});
|
||||
|
||||
|
||||
})
|
||||
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
@@ -1,38 +0,0 @@
|
||||
#time {
|
||||
cursor: pointer;
|
||||
height: 10px;
|
||||
margin-bottom: 10px;
|
||||
outline: thin solid #FFF;
|
||||
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 #FFF;
|
||||
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: #FFF;
|
||||
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:50px;background:#111;color:#f8f8f8}.btn-success{color:#f8f8f8;background-color:#111;border-color:#f8f8f8;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:#111!important;background-color:#f8f8f8!important;border-color:#f8f8f8!important;transition:all .3s}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#f8f8f8;background-color:#111}.dropdown-menu{background-color:#111}span.input-group-btn.open>ul>li>a{background-image:none}.progress{background-image:none;background-color:#111;box-shadow:inset 0 0 3px 0 #f8f8f8}.progress-bar{background-image:none;background-color:#111;box-shadow:inset 0 0 12px 0 #f8f8f8;transition:.3s all}.media:first-child{margin-top:15px}.media{box-shadow:0 0 6px 1px #f8f8f8}.sidebar-nav{padding:10px}.nav.nav-list a{padding:5px 10px}.nav-header{font-weight:700}.scroll{overflow-y:scroll;height:calc(100vh - 96px)}.left-playlist{box-shadow:0 0 6px 1px #f8f8f8;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%}
|
||||
@@ -1,88 +0,0 @@
|
||||
/*
|
||||
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
@main-front-color : #f8f8f8;
|
||||
@background-color : #111111;
|
||||
@background-2ndcolor: #232323;
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
margin-top: 50px;
|
||||
background: @background-color;
|
||||
color:@main-front-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: 0px 0px 6px 1px @main-front-color;
|
||||
}
|
||||
.sidebar-nav {
|
||||
padding: 10px;
|
||||
}
|
||||
.nav.nav-list a {
|
||||
padding: 5px 10px;
|
||||
}
|
||||
|
||||
.nav-header {
|
||||
|
||||
font-weight: bold;
|
||||
}
|
||||
.scroll{
|
||||
overflow-y: scroll;
|
||||
height: ~"calc( 100vh - 96px)";
|
||||
}
|
||||
|
||||
.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%;
|
||||
}
|
||||
}
|
||||
@@ -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,104 +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</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" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="sidebar-nav">
|
||||
<ul class="nav nav-tabs nav-pills nav-stacked" role="tablist">
|
||||
<li role="presentation" class="active"><a href="#download" aria-controls="download" role="tab" data-toggle="tab">Download</a></li>
|
||||
<li role="presentation"><a href="#player" aria-controls="player" role="tab" data-toggle="tab">Player</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="tab-content">
|
||||
<div role="tabpanel" class="tab-pane fade in active" id="download">
|
||||
<input id="business" type="file" style="display: none" />
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="input-group input-group-lg">
|
||||
<span class="input-group-btn">
|
||||
<button id="party" class="very-sweet-looking btn btn-success btn-sm">Select Folder</button>
|
||||
</span>
|
||||
<input type="text" class="form-control input-sm" maxlength="128" id="url" placeholder="YT-Url" />
|
||||
<span class="input-group-btn">
|
||||
<button type="button" class="btn btn-success dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
Format <span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu" id="format">
|
||||
<li><a href="#" class="format" data-format="mp3">MP3</a></li>
|
||||
<li role="separator" class="divider"></li>
|
||||
<li><a href="#" class="format" data-format="mp4">MP4</a></li>
|
||||
</ul>
|
||||
</span>
|
||||
<span class="input-group-btn">
|
||||
<button type="button" id="start-download" class="btn btn-success btn-sm">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 id="watchr_files">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="embed-responsive embed-responsive-16by9">
|
||||
<video id="video"></video>
|
||||
</div>
|
||||
<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" id="pot" style="margin:0;"><i class="fa fa-window-restore" aria-hidden="true"></i></button>
|
||||
</div>
|
||||
<div class="left-playlist">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="./../js/app.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -1,77 +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" />
|
||||
<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,82 +0,0 @@
|
||||
const {
|
||||
app,
|
||||
BrowserWindow,
|
||||
Menu,
|
||||
dialog,
|
||||
ipcMain
|
||||
} = require('electron');
|
||||
|
||||
//alwaysOnTop
|
||||
|
||||
var win = null;
|
||||
|
||||
var pot = {};
|
||||
var s = 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,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;
|
||||
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,126 +0,0 @@
|
||||
const { spawn } = require('child_process');
|
||||
const ipcMain = require('electron').ipcMain;
|
||||
const dl_routine = require('./youtube-dl.routine')
|
||||
|
||||
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;
|
||||
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});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
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,15 +0,0 @@
|
||||
|
||||
|
||||
|
||||
|
||||
var st = {};
|
||||
|
||||
|
||||
st.replace = (str)=>{
|
||||
return sub
|
||||
.replace(/\|/g, "_");
|
||||
}
|
||||
|
||||
|
||||
|
||||
module.exports = st;
|
||||
118
src/index.js
118
src/index.js
@@ -1,116 +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');
|
||||
|
||||
|
||||
|
||||
if (!fs.existsSync(global.dir+'/tmp/inst')) {
|
||||
fs.writeFileSync(global.dir+'/tmp/inst',"out");
|
||||
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 = () =>{
|
||||
|
||||
//dl.download(dl.ff(process.platform));
|
||||
/*
|
||||
|
||||
win = new BrowserWindow({
|
||||
width: 1010,
|
||||
height: 800,
|
||||
minWidth: 1010,
|
||||
minHeight: 565,
|
||||
show: false,
|
||||
frame: true
|
||||
})
|
||||
*/
|
||||
win = new BrowserWindow({
|
||||
width: 320,
|
||||
height: 500,
|
||||
show: false,
|
||||
frame: false,
|
||||
icon: __dirname + '/app.ico'
|
||||
})
|
||||
ipcMain
|
||||
.on('start-full', (event, arg)=>{
|
||||
|
||||
var win2 = new BrowserWindow({
|
||||
width: 1010,
|
||||
height: 800,
|
||||
minWidth: 1010,
|
||||
minHeight: 565,
|
||||
show: true,
|
||||
frame: true,
|
||||
icon: __dirname + '/app.ico'
|
||||
})
|
||||
win.close();
|
||||
//var z = new browser('http://www.crunchyroll.com/');
|
||||
win2.loadURL(`file://${__dirname}/app/view/layout.html`)
|
||||
win = win2;
|
||||
});
|
||||
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
|
||||
57
src/main.js
57
src/main.js
@@ -1,57 +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;
|
||||
}
|
||||
|
||||
var squirrelCommand = process.argv[1];
|
||||
console.log(squirrelCommand);
|
||||
switch (squirrelCommand) {
|
||||
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);
|
||||
// Always quit when done
|
||||
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);
|
||||
// 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,88 +0,0 @@
|
||||
/*
|
||||
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
@main-front-color : #f8f8f8;
|
||||
@background-color : #111111;
|
||||
@background-2ndcolor: #232323;
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
margin-top: 50px;
|
||||
background: @background-color;
|
||||
color:@main-front-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: 0px 0px 6px 1px @main-front-color;
|
||||
}
|
||||
.sidebar-nav {
|
||||
padding: 10px;
|
||||
}
|
||||
.nav.nav-list a {
|
||||
padding: 5px 10px;
|
||||
}
|
||||
|
||||
.nav-header {
|
||||
|
||||
font-weight: bold;
|
||||
}
|
||||
.scroll{
|
||||
overflow-y: scroll;
|
||||
height: ~"calc( 100vh - 96px)";
|
||||
}
|
||||
|
||||
.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%;
|
||||
}
|
||||
}
|
||||
15
src/tmp/c
15
src/tmp/c
@@ -1,15 +0,0 @@
|
||||
# Netscape HTTP Cookie File
|
||||
# http://curl.haxx.se/rfc/cookie_spec.html
|
||||
# This is a generated file! Do not edit.
|
||||
|
||||
.crunchyroll.com TRUE / FALSE 1534887951 __cfduid db1426254a0b86e7ca8b70551a18644361503351951
|
||||
.crunchyroll.com TRUE / FALSE 1537220753 __qca P0-1835482882-1503351953593
|
||||
.crunchyroll.com TRUE / FALSE 1566942248 _ga GA1.2.1843711990.1503351953
|
||||
.crunchyroll.com TRUE / FALSE 1503956648 _gid GA1.2.1726060626.1503868189
|
||||
.crunchyroll.com TRUE / FALSE 1504561873 c_d p%3D1
|
||||
.crunchyroll.com TRUE / FALSE 1504561873 c_userid 64927993
|
||||
.crunchyroll.com TRUE / FALSE 1504561873 c_userkey 2%3AZxOX%2BsILKGFm2Nmfc6%2FX12lxWjo%3D
|
||||
.crunchyroll.com TRUE / FALSE 1518903952 c_visitor 95852853-d74d-4e9c-b5ad-182b74e6f44f
|
||||
.crunchyroll.com TRUE / FALSE 1503960371 cf_clearance fb4b8c534496cdfec5683c51ec28dc2e4c70e5ce-1503351970-604800
|
||||
.crunchyroll.com TRUE / FALSE 1537220753 sess_id jjdcwcg0amrsbt44eviz34disrmrqd2m
|
||||
.crunchyroll.com TRUE / FALSE 1537220753 session_id 2074779edf6db7782876092c0d2f03db
|
||||
@@ -1 +0,0 @@
|
||||
out
|
||||
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';
|
||||
Reference in New Issue
Block a user