Initial grid
This commit is contained in:
parent
400b6bdd83
commit
d700f8f14f
3 changed files with 164 additions and 188 deletions
150
app.coffee
150
app.coffee
|
@ -11,81 +11,86 @@ trackers = [
|
||||||
opts = {announce: trackers}
|
opts = {announce: trackers}
|
||||||
|
|
||||||
client = new WebTorrent
|
client = new WebTorrent
|
||||||
debug = window.localStorage ? window.localStorage.getItem('debug') == '*':false
|
|
||||||
|
|
||||||
app = angular.module 'bTorrent', [], ['$compileProvider','$locationProvider', ($compileProvider, $locationProvider) ->
|
dbg = (string, torrent) ->
|
||||||
|
if (window.localStorage ? window.localStorage.getItem('debug') == '*':false)
|
||||||
|
if torrent
|
||||||
|
console.debug '%c' + torrent.name + ' (' + torrent.infoHash + '): %c' + string, 'color: #33C3F0', 'color: #333'
|
||||||
|
return
|
||||||
|
else
|
||||||
|
console.debug '%cClient: %c' + string, 'color: #33C3F0', 'color: #333'
|
||||||
|
return
|
||||||
|
return
|
||||||
|
|
||||||
|
app = angular.module 'bTorrent', ['ui.grid', 'ui.grid.resizeColumns', 'ui.grid.selection'], ['$compileProvider','$locationProvider', ($compileProvider, $locationProvider) ->
|
||||||
$compileProvider.aHrefSanitizationWhitelist /^\s*(https?|magnet|blob|javascript):/
|
$compileProvider.aHrefSanitizationWhitelist /^\s*(https?|magnet|blob|javascript):/
|
||||||
$locationProvider.html5Mode(
|
$locationProvider.html5Mode(
|
||||||
enabled: true
|
enabled: true
|
||||||
requireBase: false).hashPrefix '#'
|
requireBase: false).hashPrefix '#'
|
||||||
]
|
]
|
||||||
|
|
||||||
app.controller 'bTorrentCtrl', ['$scope','$http','$log','$location', ($scope, $http, $log, $location) ->
|
app.controller 'bTorrentCtrl', ['$scope','$http','$log','$location', 'uiGridConstants', ($scope, $http, $log, $location, uiGridConstants) ->
|
||||||
$scope.client = client
|
$scope.client = client
|
||||||
$scope.seedIt = true
|
$scope.seedIt = true
|
||||||
|
|
||||||
dbg = (string, torrent) ->
|
$scope.columns = [
|
||||||
if debug
|
{field: 'name', cellTooltip: true, minWidth: '200'}
|
||||||
if torrent
|
{field: 'length', name: 'Size', cellFilter: 'pbytes', width: '80'}
|
||||||
$log.debug '%c' + torrent.name + ' (' + torrent.infoHash + '): %c' + string, 'color: #33C3F0', 'color: #333'
|
{field: 'received', displayName: 'Downloaded', cellFilter: 'pbytes', width: '135'}
|
||||||
return
|
{field: 'downloadSpeed()', displayName: '↓ Speed', cellFilter: 'pbytes:1', width: '100'}
|
||||||
else
|
{field: 'progress', displayName: 'Progress', cellFilter: 'progress', width: '100'}
|
||||||
$log.debug '%cClient: %c' + string, 'color: #33C3F0', 'color: #333'
|
{field: 'timeRemaining', displayName: 'ETA', cellFilter: 'humanTime', width: '150'}
|
||||||
return
|
{field: 'uploaded', displayName: 'Uploaded', cellFilter: 'pbytes', width: '125'}
|
||||||
return
|
{field: 'uploadSpeed()', displayName: '↑ Speed', cellFilter: 'pbytes:1', width: '100'}
|
||||||
|
{field: 'numPeers', displayName: 'Peers', width: '80'}
|
||||||
|
{field: 'ratio', cellFilter: 'number:2', width: '80'}
|
||||||
|
]
|
||||||
|
|
||||||
|
$scope.gridOptions =
|
||||||
|
columnDefs: $scope.columns
|
||||||
|
data: $scope.client.torrents
|
||||||
|
enableColumnResizing: true
|
||||||
|
enableColumnMenus: false
|
||||||
|
enableRowSelection: true
|
||||||
|
enableRowHeaderSelection: false
|
||||||
|
multiSelect: false
|
||||||
|
|
||||||
updateAll = ->
|
updateAll = ->
|
||||||
|
if $scope.client.processing
|
||||||
|
return
|
||||||
$scope.$apply()
|
$scope.$apply()
|
||||||
return
|
return
|
||||||
|
|
||||||
setInterval updateAll, 500
|
setInterval updateAll, 500
|
||||||
|
|
||||||
$scope.client.done = ->
|
$scope.gridOptions.onRegisterApi = ( gridApi ) ->
|
||||||
done = true
|
$scope.gridApi = gridApi
|
||||||
$scope.client.torrents.forEach (torrent) ->
|
gridApi.selection.on.rowSelectionChanged $scope, (row) ->
|
||||||
if !torrent.done
|
if !row.isSelected && $scope.selectedTorrent? && $scope.selectedTorrent.infoHash = row.entity.infoHash
|
||||||
done = false
|
$scope.selectedTorrent = null
|
||||||
return
|
else
|
||||||
done
|
$scope.selectedTorrent = row.entity
|
||||||
|
|
||||||
$scope.client.downloading = ->
|
|
||||||
downloading = true
|
|
||||||
$scope.client.torrents.forEach (torrent) ->
|
|
||||||
if torrent.done
|
|
||||||
downloading = false
|
|
||||||
return
|
|
||||||
downloading
|
|
||||||
|
|
||||||
$scope.uploadFile = ->
|
$scope.uploadFile = ->
|
||||||
document.getElementById('fileUpload').click()
|
document.getElementById('fileUpload').click()
|
||||||
return
|
return
|
||||||
|
|
||||||
$scope.uploadFile2 = (elem) ->
|
$scope.uploadFile2 = (elem) ->
|
||||||
$scope.client.processing = true
|
|
||||||
dbg 'Seeding ' + elem.files[0].name
|
dbg 'Seeding ' + elem.files[0].name
|
||||||
|
$scope.client.processing = true
|
||||||
|
$scope.$apply()
|
||||||
$scope.client.seed elem.files, opts, $scope.onSeed
|
$scope.client.seed elem.files, opts, $scope.onSeed
|
||||||
return
|
return
|
||||||
|
|
||||||
$scope.fromInput = ->
|
$scope.fromInput = ->
|
||||||
if $scope.torrentInput != ''
|
if $scope.torrentInput != ''
|
||||||
$scope.client.processing = true
|
|
||||||
dbg 'Adding ' + $scope.torrentInput
|
dbg 'Adding ' + $scope.torrentInput
|
||||||
|
$scope.client.processing = true
|
||||||
|
$scope.$apply()
|
||||||
$scope.client.add $scope.torrentInput, opts, $scope.onTorrent
|
$scope.client.add $scope.torrentInput, opts, $scope.onTorrent
|
||||||
$scope.torrentInput = ''
|
$scope.torrentInput = ''
|
||||||
return
|
return
|
||||||
|
|
||||||
$scope.toggleTorrent = (torrent) ->
|
|
||||||
if torrent.showFiles
|
|
||||||
torrent.showFiles = false
|
|
||||||
$scope.sTorrent = null
|
|
||||||
return
|
|
||||||
else
|
|
||||||
$scope.client.torrents.forEach (t) ->
|
|
||||||
t.showFiles = false
|
|
||||||
torrent.showFiles = true
|
|
||||||
$scope.sTorrent = torrent
|
|
||||||
return
|
|
||||||
|
|
||||||
$scope.destroyedTorrent = (err) ->
|
$scope.destroyedTorrent = (err) ->
|
||||||
$scope.client.processing = false
|
$scope.client.processing = false
|
||||||
if err
|
if err
|
||||||
|
@ -94,39 +99,24 @@ app.controller 'bTorrentCtrl', ['$scope','$http','$log','$location', ($scope, $h
|
||||||
return
|
return
|
||||||
|
|
||||||
$scope.onTorrent = (torrent, isSeed) ->
|
$scope.onTorrent = (torrent, isSeed) ->
|
||||||
if !isSeed
|
torrent.safeTorrentFileURL = torrent.torrentFileURL
|
||||||
$scope.client.processing = false
|
|
||||||
torrent.pSize = torrent.length
|
|
||||||
torrent.showFiles = false
|
|
||||||
torrent.fileName = torrent.name + '.torrent'
|
torrent.fileName = torrent.name + '.torrent'
|
||||||
torrent.oTorrentFileURL = torrent.torrentFileURL
|
|
||||||
if angular.isUndefined($scope.sTorrent) or $scope.sTorrent == null
|
if !isSeed
|
||||||
$scope.sTorrent = torrent
|
$scope.client.processing = false
|
||||||
torrent.showFiles = true
|
if !($scope.selectedTorrent?)
|
||||||
|
$scope.selectedTorrent = torrent
|
||||||
torrent.update = ->
|
|
||||||
torrent.pProgress = (100 * torrent.progress).toFixed(1)
|
|
||||||
if torrent.done
|
|
||||||
torrent.tRemaining = 'Done'
|
|
||||||
return
|
|
||||||
else
|
|
||||||
remaining = moment.duration(torrent.timeRemaining / 1000, 'seconds').humanize()
|
|
||||||
torrent.tRemaining = remaining[0].toUpperCase() + remaining.substr(1)
|
|
||||||
return
|
|
||||||
|
|
||||||
torrent.files.forEach (file) ->
|
torrent.files.forEach (file) ->
|
||||||
file.pSize = file.length
|
|
||||||
file.status = 'Downloading'
|
|
||||||
file.url = 'javascript: return false;'
|
|
||||||
file.getBlobURL (err, url) ->
|
file.getBlobURL (err, url) ->
|
||||||
if err
|
if err
|
||||||
throw err
|
throw err
|
||||||
if isSeed
|
if isSeed
|
||||||
$scope.client.processing = false
|
$scope.client.processing = false
|
||||||
|
$scope.$apply()
|
||||||
file.url = url
|
file.url = url
|
||||||
if !isSeed
|
if !isSeed
|
||||||
dbg 'Finished downloading file ' + file.name, torrent
|
dbg 'Finished downloading file ' + file.name, torrent
|
||||||
file.status = 'Ready'
|
|
||||||
return
|
return
|
||||||
if !isSeed
|
if !isSeed
|
||||||
dbg 'Received file ' + file.name + ' metadata', torrent
|
dbg 'Received file ' + file.name + ' metadata', torrent
|
||||||
|
@ -147,8 +137,6 @@ app.controller 'bTorrentCtrl', ['$scope','$http','$log','$location', ($scope, $h
|
||||||
torrent.on 'wire', (wire, addr) ->
|
torrent.on 'wire', (wire, addr) ->
|
||||||
dbg 'Wire ' + addr, torrent
|
dbg 'Wire ' + addr, torrent
|
||||||
return
|
return
|
||||||
setInterval torrent.update, 500
|
|
||||||
torrent.update()
|
|
||||||
return
|
return
|
||||||
$scope.onSeed = (torrent) ->
|
$scope.onSeed = (torrent) ->
|
||||||
$scope.onTorrent torrent, true
|
$scope.onTorrent torrent, true
|
||||||
|
@ -156,8 +144,10 @@ app.controller 'bTorrentCtrl', ['$scope','$http','$log','$location', ($scope, $h
|
||||||
|
|
||||||
if $location.hash() != ''
|
if $location.hash() != ''
|
||||||
$scope.client.processing = true
|
$scope.client.processing = true
|
||||||
dbg 'Adding ' + $location.hash()
|
setTimeout ->
|
||||||
client.add $location.hash(), $scope.onTorrent
|
dbg 'Adding ' + $location.hash()
|
||||||
|
$scope.client.add $location.hash(), $scope.onTorrent
|
||||||
|
, 500
|
||||||
return
|
return
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -168,28 +158,32 @@ app.filter 'html', ['$sce', ($sce) ->
|
||||||
]
|
]
|
||||||
|
|
||||||
app.filter 'pbytes', ->
|
app.filter 'pbytes', ->
|
||||||
(num) ->
|
(num, speed) ->
|
||||||
if isNaN(num)
|
if isNaN(num)
|
||||||
return ''
|
return ''
|
||||||
exponent = undefined
|
exponent = undefined
|
||||||
unit = undefined
|
unit = undefined
|
||||||
neg = num < 0
|
|
||||||
units = [
|
units = [
|
||||||
'B'
|
'B'
|
||||||
'kB'
|
'kB'
|
||||||
'MB'
|
'MB'
|
||||||
'GB'
|
'GB'
|
||||||
'TB'
|
'TB'
|
||||||
'PB'
|
|
||||||
'EB'
|
|
||||||
'ZB'
|
|
||||||
'YB'
|
|
||||||
]
|
]
|
||||||
if neg
|
|
||||||
num = -num
|
|
||||||
if num < 1
|
if num < 1
|
||||||
return (if neg then '-' else '') + num + ' B'
|
return (if speed then '' else '0 B')
|
||||||
exponent = Math.min(Math.floor(Math.log(num) / Math.log(1000)), 8)
|
exponent = Math.min(Math.floor(Math.log(num) / Math.log(1000)), 8)
|
||||||
num = (num / 1000 ** exponent).toFixed(1) * 1
|
num = (num / 1000 ** exponent).toFixed(1) * 1
|
||||||
unit = units[exponent]
|
unit = units[exponent]
|
||||||
(if neg then '-' else '') + num + ' ' + unit
|
num + ' ' + unit + (if speed then '/s' else '')
|
||||||
|
|
||||||
|
app.filter 'humanTime', ->
|
||||||
|
(millis) ->
|
||||||
|
if millis < 1000
|
||||||
|
return ''
|
||||||
|
remaining = moment.duration(millis / 1000, 'seconds').humanize()
|
||||||
|
remaining[0].toUpperCase() + remaining.substr(1)
|
||||||
|
|
||||||
|
app.filter 'progress', ->
|
||||||
|
(num) ->
|
||||||
|
(100 * num).toFixed(1) + '%'
|
140
index.jade
140
index.jade
|
@ -8,102 +8,76 @@ html(ng-app='bTorrent', lang='en')
|
||||||
meta(name='keywords', content='βTorrent, btorrent, client, webtorrent, browser, torrent, stream, bittorrent')
|
meta(name='keywords', content='βTorrent, btorrent, client, webtorrent, browser, torrent, stream, bittorrent')
|
||||||
meta(name='author', content='Diego Rodríguez Baquero - DiegoRBaquero')
|
meta(name='author', content='Diego Rodríguez Baquero - DiegoRBaquero')
|
||||||
meta(name='viewport', content='width=device-width, initial-scale=1')
|
meta(name='viewport', content='width=device-width, initial-scale=1')
|
||||||
script(src='https://cdn.jsdelivr.net/g/webtorrent@0.62,momentjs@2.10,angularjs@1.4')
|
script(src='https://cdn.jsdelivr.net/g/webtorrent@0.63.1,momentjs@2.10,angularjs@1.4,angular.ui-grid@3.0.7')
|
||||||
link(rel='stylesheet', href='https://cdn.jsdelivr.net/g/normalize@3.0,skeleton@2.0')
|
link(rel='stylesheet', href='https://cdn.jsdelivr.net/g/normalize@3.0,skeleton@2.0')
|
||||||
link(rel='stylesheet', href='https://cdn.jsdelivr.net/fontawesome/4.5/css/font-awesome.min.css')
|
link(rel='stylesheet', href='https://cdn.jsdelivr.net/fontawesome/4.5/css/font-awesome.min.css')
|
||||||
|
link(rel='stylesheet', href='https://cdn.jsdelivr.net/angular.ui-grid/3.0.7/ui-grid.min.css')
|
||||||
link(rel='stylesheet', href='style.css')
|
link(rel='stylesheet', href='style.css')
|
||||||
body
|
body(ng-controller='bTorrentCtrl', ng-cloak='')
|
||||||
header
|
header
|
||||||
h1
|
h1
|
||||||
| βTorrent
|
| βTorrent
|
||||||
span.version v0.5.03
|
span.version v0.6
|
||||||
.container(ng-controller='bTorrentCtrl', ng-cloak='')
|
|
||||||
|
.container
|
||||||
.row
|
.row
|
||||||
.twelve.columns
|
.five.columns
|
||||||
.row
|
input#torrentInput.u-full-width(type='text', placeholder='magnet link or hash', ng-model='torrentInput')
|
||||||
.five.columns
|
.two.columns
|
||||||
input#torrentInput.u-full-width(type='text', placeholder='magnet link or hash', ng-model='torrentInput')
|
button.button-primary(ng-click='fromInput()')
|
||||||
.two.columns
|
i.fa.fa-download
|
||||||
button.button-primary(ng-click='fromInput()')
|
| Download
|
||||||
i.fa.fa-download
|
.five.columns.u-pull-right
|
||||||
| Download
|
input#fileUpload(type='file', style='display: none;', onchange='angular.element(this).scope().uploadFile2(this)')
|
||||||
.five.columns.u-pull-right
|
label.u-pull-right
|
||||||
input#fileUpload(type='file', style='display: none;', onchange='angular.element(this).scope().uploadFile2(this)')
|
button.button-primary(ng-click='uploadFile()')
|
||||||
label.u-pull-right
|
i.fa.fa-upload
|
||||||
button.button-primary(ng-click='uploadFile()')
|
| Seed a file
|
||||||
i.fa.fa-upload
|
.row.grid(ui-grid='gridOptions', ui-grid-resize-columns, ui-grid-selection)
|
||||||
| Seed a file
|
.row(ng-if="selectedTorrent")
|
||||||
|
.six.columns
|
||||||
|
h4 {{selectedTorrent.name}}
|
||||||
|
h5 Share
|
||||||
|
ul
|
||||||
|
li
|
||||||
|
a(ng-href='#{{selectedTorrent.infoHash}}', target='_blank') βTorrent
|
||||||
|
li
|
||||||
|
a(ng-href='{{selectedTorrent.magnetURI}}', target='_blank') Magnet URI
|
||||||
|
li
|
||||||
|
a(ng-href='{{selectedTorrent.safeTorrentFileURL}}', target='_blank', download='{{torrent.fileName}}') .torrent
|
||||||
|
li
|
||||||
|
strong Hash:
|
||||||
|
| {{selectedTorrent.infoHash}}
|
||||||
|
.six.columns
|
||||||
|
h4 Files
|
||||||
table.u-full-width
|
table.u-full-width
|
||||||
thead
|
thead
|
||||||
tr
|
tr
|
||||||
th Name
|
th Name
|
||||||
th(ng-hide='client.done()') Downloaded
|
th Size
|
||||||
th(ng-hide='client.done()') Remaining
|
tbody
|
||||||
th(ng-hide='client.downloading()') Uploaded
|
tr.files(ng-repeat='file in selectedTorrent.files')
|
||||||
th Peers
|
td(ng-hide='file.done') {{file.name}}
|
||||||
th Share
|
td(ng-show='file.done')
|
||||||
th Actions
|
a(ng-href='{{file.url}}', download='{{file.name}}', target='_blank', ng-show='file.done') {{file.name}}
|
||||||
tbody(ng-hide='client.torrents.length')
|
td {{file.length | pbytes}}
|
||||||
tr
|
hr
|
||||||
td.center(colspan='100') Add a torrent or seed a file!
|
|
||||||
tbody(ng-repeat='torrent in client.torrents', ng-if='torrent.name')
|
|
||||||
tr.torrentRow(ng-class='{selectedTorrent: torrent.showFiles}')
|
|
||||||
td
|
|
||||||
div
|
|
||||||
i.fa.fa-cloud-download(ng-hide='torrent.done')
|
|
||||||
i.fa.fa-check(ng-show='torrent.done')
|
|
||||||
| {{torrent.name}}
|
|
||||||
span.subInfo
|
|
||||||
| {{torrent.pSize | pbytes}} in
|
|
||||||
a(href='#', onclick='return false;', ng-click='toggleTorrent(torrent)') {{torrent.files.length}} files
|
|
||||||
td(ng-hide='client.done()')
|
|
||||||
| {{torrent.downloaded | pbytes}}
|
|
||||||
span.subInfo ({{torrent.pProgress}}%)
|
|
||||||
br
|
|
||||||
span.subInfo @ {{torrent.downloadSpeed() | pbytes}}/s
|
|
||||||
td(ng-hide='client.done()')
|
|
||||||
| {{torrent.tRemaining}}
|
|
||||||
td(ng-hide='client.downloading()')
|
|
||||||
| {{torrent.uploaded | pbytes}}
|
|
||||||
br
|
|
||||||
span.subInfo @ {{torrent.uploadSpeed() | pbytes}}/s
|
|
||||||
td {{torrent.swarm.wires.length}}
|
|
||||||
td
|
|
||||||
a(ng-href='#{{torrent.infoHash}}', target='_blank')
|
|
||||||
| βTorrent
|
|
||||||
|
|
|
||||||
a(ng-href='{{torrent.magnetURI}}', target='_blank')
|
|
||||||
| Magnet URI
|
|
||||||
|
|
|
||||||
a(ng-href='{{torrent.oTorrentFileURL}}', target='_blank', download='{{torrent.fileName}}')
|
|
||||||
| .torrent
|
|
||||||
br
|
|
||||||
span.subInfo
|
|
||||||
i.fa.fa-hashtag
|
|
||||||
| {{torrent.infoHash}}
|
|
||||||
td
|
|
||||||
i.fa.fa-times(ng-click='client.processing = true; client.remove(torrent, destroyedTorrent)')
|
|
||||||
tr(ng-show='torrent.showFiles')
|
|
||||||
td.files(colspan='100')
|
|
||||||
.row
|
|
||||||
.two.columns.center
|
|
||||||
i.fa.fa-file
|
|
||||||
strong Files:
|
|
||||||
.ten.columns.fix-height
|
|
||||||
ul.no-margin
|
|
||||||
li(ng-repeat='file in torrent.files')
|
|
||||||
span(ng-hide='file.done') {{file.status}}: {{file.name}}
|
|
||||||
a(href='{{file.url}}', download='{{file.name}}', target='_blank', ng-show='file.done') {{file.name}}
|
|
||||||
span.subInfo {{file.pSize | pbytes}}
|
|
||||||
tbody(ng-show='client.processing')
|
|
||||||
tr
|
|
||||||
td.center(colspan='100') Please wait a few seconds!
|
|
||||||
footer
|
footer
|
||||||
|
a.button(href="https://github.com/DiegoRBaquero/BTorrent", target="_blank") View on GitHub
|
||||||
|
i.fa.fa-github
|
||||||
|
|
|
||||||
|
a.button(href="https://github.com/DiegoRBaquero/BTorrent/issues", target="_blank") Suggest a new feature / Report a bug
|
||||||
|
i.fa.comment
|
||||||
|
|
|
||||||
|
a.button(href="https://github.com/DiegoRBaquero/BTorrent/fork", target="_blank") Fork me
|
||||||
|
i.fa.fa-code-fork
|
||||||
|
br
|
||||||
| Made in Bogotá, Colombia by
|
| Made in Bogotá, Colombia by
|
||||||
a(href='http://diegorbaquero.com') DiegoRBaquero
|
a(href='http://diegorbaquero.com') DiegoRBaquero
|
||||||
br
|
br
|
||||||
small
|
| Powered by
|
||||||
| Powered by
|
a(href='https://webtorrent.io') WebTorrent
|
||||||
a(href='https://webtorrent.io') WebTorrent
|
|
||||||
p
|
p
|
||||||
script(src='app.js')
|
.spinner(ng-show="client.processing")
|
||||||
|
i.fa.fa-spinner.fa-6.fa-spin.spinner-icon
|
||||||
|
script(src='app.js')
|
62
style.sass
62
style.sass
|
@ -6,37 +6,45 @@ header, footer, .center
|
||||||
text-align: center
|
text-align: center
|
||||||
|
|
||||||
th, td
|
th, td
|
||||||
padding-left: 10px
|
padding: 2px 15px
|
||||||
padding-right: 10px
|
|
||||||
max-width: 200px
|
max-width: 200px
|
||||||
overflow: auto
|
overflow: auto
|
||||||
white-space: nowrap
|
white-space: nowrap
|
||||||
|
|
||||||
|
hr
|
||||||
|
margin-top: 20px
|
||||||
|
margin-bottom: 10px
|
||||||
|
|
||||||
|
h2, h3, h4, h5, h6, ul, li
|
||||||
|
margin-bottom: 0
|
||||||
|
|
||||||
|
.container
|
||||||
|
width: 95%
|
||||||
|
max-width: 95%
|
||||||
|
|
||||||
|
.grid
|
||||||
|
margin-bottom: 20px
|
||||||
|
width: 100%
|
||||||
|
height: 200px
|
||||||
|
|
||||||
.version
|
.version
|
||||||
color: #ccc
|
color: #ccc
|
||||||
font-size: 0.3em
|
font-size: 0.3em
|
||||||
|
|
||||||
.torrentRow
|
.spinner
|
||||||
line-height: 1.2
|
position: absolute
|
||||||
border-bottom: 0
|
top: 30%
|
||||||
|
left: 30%
|
||||||
.subInfo
|
width: 40%
|
||||||
color: #bbbbbb
|
height: 40%
|
||||||
font-size: 0.7em
|
z-index: 1000
|
||||||
|
background-color: grey
|
||||||
.column, .columns
|
border-radius: 25px
|
||||||
margin-left: 1%
|
opacity: .8
|
||||||
|
text-align: center
|
||||||
.files
|
.spinner-icon
|
||||||
padding-top: 1px
|
position: relative
|
||||||
padding-bottom: 1px
|
top: 50%
|
||||||
|
margin-top: -100px
|
||||||
.fix-height
|
font-size: 200px
|
||||||
max-height: 24px
|
transform: translateY(-50%)
|
||||||
|
|
||||||
.no-margin
|
|
||||||
margin: 0
|
|
||||||
|
|
||||||
.selectedTorrent
|
|
||||||
background: rgb(100, 100, 100)
|
|
||||||
background: rgba(100, 100, 100, 0.06)
|
|
Loading…
Reference in a new issue