Showing preview only (5,187K chars total). Download the full file or copy to clipboard to get everything.
Repository: deranjer/goTorrent
Branch: master
Commit: ae88043eaabf
Files: 196
Total size: 4.9 MB
Directory structure:
gitextract_ys94f86f/
├── .gitignore
├── .vscode/
│ ├── settings.json
│ └── tasks.json
├── Dockerfile
├── LICENSE
├── README.md
├── config.toml
├── config.toml.bk
├── dist-specific-files/
│ ├── Linux-systemd/
│ │ └── goTorrent.service
│ └── ReverseProxy/
│ └── nginx.conf
├── engine/
│ ├── clientStructs.go
│ ├── cronJobs.go
│ ├── doneTorrentActions.go
│ ├── engine.go
│ └── engineHelpers.go
├── go.mod
├── go.sum
├── goTorrentWebUI/
│ ├── .babelrc
│ ├── acorn
│ ├── acorn.cmd
│ ├── ansi-html
│ ├── ansi-html.cmd
│ ├── atob
│ ├── atob.cmd
│ ├── babel
│ ├── babel-doctor
│ ├── babel-doctor.cmd
│ ├── babel-external-helpers
│ ├── babel-external-helpers.cmd
│ ├── babel-node
│ ├── babel-node.cmd
│ ├── babel.cmd
│ ├── babylon
│ ├── babylon.cmd
│ ├── browserslist
│ ├── browserslist.cmd
│ ├── cssesc
│ ├── cssesc.cmd
│ ├── csso
│ ├── csso.cmd
│ ├── detect
│ ├── detect-port
│ ├── detect-port.cmd
│ ├── detect.cmd
│ ├── errno
│ ├── errno.cmd
│ ├── escodegen
│ ├── escodegen.cmd
│ ├── esgenerate
│ ├── esgenerate.cmd
│ ├── eslint
│ ├── eslint.cmd
│ ├── esparse
│ ├── esparse.cmd
│ ├── esvalidate
│ ├── esvalidate.cmd
│ ├── fonts/
│ │ └── index.css
│ ├── handlebars
│ ├── handlebars.cmd
│ ├── he
│ ├── he.cmd
│ ├── html-minifier
│ ├── html-minifier.cmd
│ ├── import-local-fixture
│ ├── import-local-fixture.cmd
│ ├── internal-ip
│ ├── internal-ip.cmd
│ ├── is-ci
│ ├── is-ci.cmd
│ ├── jest
│ ├── jest-runtime
│ ├── jest-runtime.cmd
│ ├── jest.cmd
│ ├── js-yaml
│ ├── js-yaml.cmd
│ ├── jsesc
│ ├── jsesc.cmd
│ ├── json5
│ ├── json5.cmd
│ ├── lib/
│ │ ├── BackendComm/
│ │ │ └── backendWebsocket.js
│ │ ├── BottomMenu/
│ │ │ ├── Tabs/
│ │ │ │ ├── fileTab.js
│ │ │ │ ├── generalTab.js
│ │ │ │ └── peerTab.js
│ │ │ └── bottomMenu.js
│ │ ├── CustomCells/
│ │ │ └── progressBarCell.js
│ │ ├── TopMenu/
│ │ │ ├── Modals/
│ │ │ │ ├── RSSModal/
│ │ │ │ │ ├── RSSFeedList.js
│ │ │ │ │ ├── RSSModalLayout.js
│ │ │ │ │ ├── RSSTorrentList.js
│ │ │ │ │ └── addRSSModal.js
│ │ │ │ ├── addTorrentFileModal.js
│ │ │ │ ├── addTorrentLinkModal.js
│ │ │ │ └── deleteTorrentModal.js
│ │ │ └── topMenu.js
│ │ ├── app.js
│ │ ├── index.html
│ │ ├── leftMenu/
│ │ │ └── leftMenu.js
│ │ ├── modals.js
│ │ ├── store/
│ │ │ ├── actions.js
│ │ │ └── reducer.js
│ │ └── torrentlist.js
│ ├── loose-envify
│ ├── loose-envify.cmd
│ ├── miller-rabin
│ ├── miller-rabin.cmd
│ ├── mime
│ ├── mime.cmd
│ ├── mkdirp
│ ├── mkdirp.cmd
│ ├── multicast-dns
│ ├── multicast-dns.cmd
│ ├── package.json
│ ├── parcel
│ ├── parcel.cmd
│ ├── rc
│ ├── rc.cmd
│ ├── react-scripts
│ ├── react-scripts.cmd
│ ├── regjsparser
│ ├── regjsparser.cmd
│ ├── rimraf
│ ├── rimraf.cmd
│ ├── sane
│ ├── sane.cmd
│ ├── semver
│ ├── semver.cmd
│ ├── sha.js
│ ├── sha.js.cmd
│ ├── src/
│ │ ├── BackendComm/
│ │ │ └── backendWebsocket.js
│ │ ├── BottomMenu/
│ │ │ ├── Tabs/
│ │ │ │ ├── fileTab.js
│ │ │ │ ├── generalTab.js
│ │ │ │ └── peerTab.js
│ │ │ └── bottomMenu.js
│ │ ├── CSS/
│ │ │ └── topMenu.css
│ │ ├── CustomCells/
│ │ │ └── progressBarCell.js
│ │ ├── TopMenu/
│ │ │ ├── Modals/
│ │ │ │ ├── RSSModal/
│ │ │ │ │ ├── RSSFeedList.js
│ │ │ │ │ ├── RSSModalLayout.js
│ │ │ │ │ ├── RSSTorrentList.js
│ │ │ │ │ └── addRSSModal.js
│ │ │ │ ├── SettingsModal/
│ │ │ │ │ ├── SettingsModalContentTabs/
│ │ │ │ │ │ ├── apiSettingsTab.js
│ │ │ │ │ │ ├── clientSettingsTab.js
│ │ │ │ │ │ ├── loggingSettingsTab.js
│ │ │ │ │ │ ├── notesTab.js
│ │ │ │ │ │ └── serverSettingsTab.js
│ │ │ │ │ ├── addSettingsModal.js
│ │ │ │ │ ├── settingsModalContent.js
│ │ │ │ │ ├── settingsModalLayout.js
│ │ │ │ │ └── settingsModalList.js
│ │ │ │ ├── addTorrentFileModal.js
│ │ │ │ ├── addTorrentLinkModal.js
│ │ │ │ ├── changeStorageModal.js
│ │ │ │ └── deleteTorrentModal.js
│ │ │ ├── topMenu.js
│ │ │ └── torrentSearch.js
│ │ ├── app.jsx
│ │ ├── leftMenu/
│ │ │ └── leftMenu.js
│ │ ├── login.js
│ │ ├── notifications.js
│ │ ├── store/
│ │ │ ├── actions.js
│ │ │ └── reducer.js
│ │ ├── torrentlist-test.js
│ │ └── torrentlist.js
│ ├── sshpk-conv
│ ├── sshpk-conv.cmd
│ ├── sshpk-sign
│ ├── sshpk-sign.cmd
│ ├── sshpk-verify
│ ├── sshpk-verify.cmd
│ ├── strip-indent
│ ├── strip-indent.cmd
│ ├── svgo
│ ├── svgo.cmd
│ ├── sw-precache
│ ├── sw-precache.cmd
│ ├── uglifyjs
│ ├── uglifyjs.cmd
│ ├── user-home
│ ├── user-home.cmd
│ ├── uuid
│ ├── uuid.cmd
│ ├── webpack
│ ├── webpack-dev-server
│ ├── webpack-dev-server.cmd
│ ├── webpack.cmd
│ ├── webpack.config.js
│ ├── which
│ └── which.cmd
├── main.go
├── public/
│ └── static/
│ ├── css/
│ │ └── gridbase.css
│ └── js/
│ ├── bundle.js
│ └── kickwebsocket-manual.js
├── settings/
│ ├── authentication_helper.go
│ ├── clientConnectGenerate.go
│ └── settings.go
├── storage/
│ └── storage.go
├── templates/
│ └── home.tmpl
└── torrentUpload/
└── desktop.ini
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
downloads/
downloading/
downloaded/
uploadedTorrents/
boltBrowser/
storage.db.lock
storage.db
storage.db.old
.torrent.bolt.db.lock
.torrent.bolt.db
.idea/torrent-project.iml
.idea/modules.xml
.idea/misc.xml
output.json
.idea/workspace.xml
.idea/vcs.xml
*.torrent
boltbrowser.win64.exe
logs/server.log
.goreleaser.yml
config.toml.backup
config.1.toml
config.toml.old
/public/static/js/kickwebsocket.js.backup
/public/static/js/kickwebsocket-generated.js
clientAuth.txt
dist
debScripts/
================================================
FILE: .vscode/settings.json
================================================
{
"git.ignoreLimitWarning": true,
"cSpell.words": [
"anacrolix",
"asdine",
"btih",
"gofeed",
"logrus",
"mmcdole",
"otiai"
]
}
================================================
FILE: .vscode/tasks.json
================================================
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"taskName": "Run Program",
"type": "shell",
"command": "go run main.go storage.go settings.go",
"problemMatcher": [
"$go"
]
},
{
"taskName": "goReleaser Snapshot",
"type": "shell",
"command": "C:/Users/deranjer/go/bin/goreleaser.exe -rm-dist -snapshot",
"problemMatcher": [
"$go"
]
}
]
}
================================================
FILE: Dockerfile
================================================
FROM scratch
COPY goTorrent /
ENTRYPOINT [ "/goTorrent" ]
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2017 deranjer
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
# goTorrent
[](https://gitter.im/goTorrent-project/Lobby) [](https://goreportcard.com/report/github.com/deranjer/goTorrent)
goTorrent is a torrenting server built with Go (Golang) with websocket API that comes with a React web frontend.
The current release is an alpha release which means there may be bugs, please open issues to help me improve this software!
Image of the frontend UI

## Supported Platforms:
- Windows
- Linux
- MacOS - (untested as I do not have a Mac)
### Supported Arch:
- x64
## Features:
- Responsive React based WebUI
- Download torrents from File upload or Magnet Link
- Start/Stop/Delete Multiple Torrents
- Add RSS feeds and automatically download new torrents from feed
- Detailed information for each torrent
- Automatic stop after seeding ratio reached
- Pushbullet notification on torrent complete
- Automatic move of completed torrent to new directory (leave symlink behind for seeding)
- Symlinks don't work on Windows yet, have to copy file for now
## Roadmap
- Early-Mid 2018
- [X] Ability to modify storage path of torrent after it has been added
- [X] Backend to frontend notification messages
- [X] Global Rate Limiting for Upload/Download Speed
- [X] Add torrents from watch folder (cron job every 5 minutes)
- [X] Authentication from client to server (done via JWT, will add functionality for 3rd party clients later)
- [X] Reverse Proxy Support with SSL upgrade added (with provided config for nginx)
- [X] Mostly generated client config from toml.config on first run
- [X] Ability to view TOML settings from WebUI (and perhaps change a few as well)
- [X] Ability to set priority for individual files (needs more testing!)
- [ ] Unit testing completed for a large portion of the package
- [ ] Stability/bug fixing/Optimization rewrite of some of the core structures of the WebUI and base server
- [ ] Put the "Move torrent after download" into own goroutine with checks so the WebUI doesn't freeze when moving torrent
- Late 2018
- [X] Define the websocket API for users to write their own clients/extensions
- [ ] React-native Android app (I don't own any Mac products so there will be no iPhone version)
# Documentation
All the documentation is available [here](https://deranjer.github.io/goTorrentDocs/)
# Special Thanks
I viewed cloud-torrent source to construct my project:
[Cloud-Torent:Cloud torrent is a a self-hosted remote torrent client, written in Go (golang)](https://github.com/jpillora/cloud-torrent)
[Anacrolix BitTorrent client package and utilities](https://github.com/anacrolix/torrent)
[goreleaser: Deliver Go binaries as fast and easily as possible](https://github.com/goreleaser/goreleaser)
[Viper: Go configuration with fangs](https://github.com/spf13/viper)
[logrus: Structured, pluggable logging for Go.](https://github.com/sirupsen/logrus)
[boltdb: An embedded key/value database for Go.](https://github.com/boltdb/bolt)
[storm: Simple and powerful toolkit for BoltDB](https://github.com/asdine/storm)
[Gorilla: web toolkit for the Go programming language](http://www.gorillatoolkit.org/)
[gofeed: Parse RSS and Atom feeds in Go](https://github.com/mmcdole/gofeed)
[pushbullet-go: A library to call Pushbullet HTTP API for Golang](https://github.com/mitsuse/pushbullet-go)
================================================
FILE: config.toml
================================================
[serverConfig]
ServerPort = "8000" #Required to input as string
ServerAddr = "192.168.1.8" #Put in the IP address you want to bind to as string
LogLevel = "Debug" # Options = Debug, Info, Warn, Error, Fatal, Panic
LogOutput = "file" #Options = file, stdout #file will print it to logs/server.log
SeedRatioStop = 1.50 #automatically stops the torrent after it reaches this seeding ratio
#Relative or absolute path accepted, the server will convert any relative path to an absolute path.
DefaultMoveFolder = 'downloads' #default path that a finished torrent is symlinked to after completion. Torrents added via RSS will default here
TorrentWatchFolder = 'torrentUpload' #folder path that is watched for .torrent files and adds them automatically every 5 minutes
#Limits your upload and download speed globally, all are averages and not burst protected (usually burst on start).
#Low = ~.05MB/s, Medium = ~.5MB/s, High = ~1.5MB/s
UploadRateLimit = "Unlimited" #Options are "Low", "Medium", "High", "Unlimited" #Unlimited is default
DownloadRateLimit = "Unlimited"
#Maximum number of allowed active torrents, the rest will be queued
MaxActiveTorrents = 5
[goTorrentWebUI]
#Basic goTorrentWebUI authentication (not terribly secure, implemented in JS, password is hashed to SHA256, not salted, basically don't depend on this if you require very good security)
WebUIAuth = false # bool, if false no authentication is required for the webUI
WebUIUser = "admin"
WebUIPassword = "Password1"
[notifications]
PushBulletToken = "" #add your pushbullet api token here to notify of torrent completion to pushbullet
# execute the command when torrent completes
NotifyCommand = ""
[reverseProxy]
#This is for setting up goTorrent behind a reverse Proxy (with SSL, reverse proxy with no SSL will require editing the WSS connection to a WS connection manually)
ProxyEnabled = false #bool, either false or true
#URL is CASE SENSITIVE
BaseURL = "domain.com/subroute/" # MUST be in the format (if you have a subdomain, and must have trailing slash) "yoursubdomain.domain.org/subroute/"
[socksProxy]
SocksProxyEnabled = false #bool, either false or true
# Sets usage of Socks5 Proxy. Authentication should be included in the url if needed.
# Examples: socks5://demo:demo@192.168.99.100:1080
# http://proxy.domain.com:3128
SocksProxyURL = ""
[EncryptionPolicy]
DisableEncryption = false
ForceEncryption = false
PreferNoEncryption = true
[torrentClientConfig]
DownloadDir = 'downloading' #the full OR relative path where the torrent server stores in-progress torrents
Seed = true #boolean #seed after download
# Never send chunks to peers.
NoUpload = false #boolean
#User-provided Client peer ID. If not present, one is generated automatically.
PeerID = "" #string
#The address to listen for new uTP and TCP bittorrent protocol connections. DHT shares a UDP socket with uTP unless configured otherwise.
ListenAddr = "" #Leave Blank for default, syntax "HOST:PORT"
#Don't announce to trackers. This only leaves DHT to discover peers.
DisableTrackers = false #boolean
DisablePEX = false # boolean
# Don't create a DHT.
NoDHT = false #boolean
#For the bittorrent protocol.
DisableUTP = false #bool
#For the bittorrent protocol.
DisableTCP = false #bool
#Called to instantiate storage for each added torrent. Builtin backends
# are in the storage package. If not set, the "file" implementation is used.
DefaultStorage = "storage.ClientImpl"
#encryption policy
IPBlocklist = "" #of type iplist.Ranger
DisableIPv6 = false #boolean
Debug = false #boolean
#HTTP *http.Client
HTTPUserAgent = "" # HTTPUserAgent changes default UserAgent for HTTP requests
ExtendedHandshakeClientVersion = ""
Bep20 = ""
# Overrides the default DHT configuration, see dhtServerConfig #advanced.. so be careful
DHTConfig = "" # default is "dht.ServerConfig"
[dhtServerConfig]
# Set NodeId Manually. Caller must ensure that if NodeId does not conform to DHT Security Extensions, that NoSecurity is also set.
NodeId = "" #[20]byte
Conn = "" # https:#godoc.org/net#PacketConn #not implemented
# Don't respond to queries from other nodes.
Passive = false # boolean
# the default addresses are "router.utorrent.com:6881","router.bittorrent.com:6881","dht.transmissionbt.com:6881","dht.aelitis.com:6881",
#https:#github.com/anacrolix/dht/blob/master/dht.go
StartingNodes = "dht.GlobalBootstrapAddrs"
#Disable the DHT security extension: http:#www.libtorrent.org/dht_sec.html.
NoSecurity = false
#Initial IP blocklist to use. Applied before serving and bootstrapping begins.
IPBlocklist = "" #of type iplist.Ranger
#Used to secure the server's ID. Defaults to the Conn's LocalAddr(). Set to the IP that remote nodes will see,
#as that IP is what they'll use to validate our ID.
PublicIP = "" #net.IP
#Hook received queries. Return true if you don't want to propagate to the default handlers.
OnQuery = "func(query *krpc.Msg, source net.Addr) (propagate bool)"
#Called when a peer successfully announces to us.
OnAnnouncePeer = "func(infoHash metainfo.Hash, peer Peer)"
#How long to wait before re-sending queries that haven't received a response. Defaults to a random value between 4.5 and 5.5s.
QueryResendDelay = "func() time.Duration"
================================================
FILE: config.toml.bk
================================================
[serverConfig]
ServerPort = ":8000" #leave format as is it expects a string with colon
ServerAddr = "192.168.1.8" #Put in the IP address you want to bind to
LogLevel = "Info" # Options = Debug, Info, Warn, Error, Fatal, Panic
LogOutput = "stdout" #Options = file, stdout #file will print it to logs/server.log
SeedRatioStop = 1.50 #automatically stops the torrent after it reaches this seeding ratio
#Relative or absolute path accepted, the server will convert any relative path to an absolute path.
DefaultMoveFolder = 'Z:\downloads' #default path that a finished torrent is symlinked to after completion. Torrents added via RSS will default here
TorrentWatchFolder = 'torrentUpload' #folder path that is watched for .torrent files and adds them automatically every 5 minutes
#Limits your upload and download speed globally, all are averages and not burst protected (usually burst on start).
#Low = ~.05MB/s, Medium = ~.5MB/s, High = ~1.5MB/s
UploadRateLimit = "Unlimited" #Options are "Low", "Medium", "High", "Unlimited" #Unlimited is default
DownloadRateLimit = "Unlimited"
[goTorrentWebUI]
#Basic goTorrentWebUI authentication (not terribly secure, implemented in JS, password is hashed to SHA256, not salted, basically don't depend on this if you require very good security)
WebUIAuth = false # bool, if false no authentication is required for the webUI
WebUIUser = "admin"
WebUIPassword = "Password1"
[notifications]
PushBulletToken = "o.8sUHemPkTCaty3u7KnyvEBN19EkeT63g" #add your pushbullet api token here to notify of torrent completion to pushbullet
[reverseProxy]
#This is for setting up goTorrent behind a reverse Proxy (with SSL, reverse proxy with no SSL will require editing the WSS connection to a WS connection manually)
ProxyEnabled = false #bool, either false or true
#URL is CASE SENSITIVE
BaseURL = "derajnet.duckdns.org/gopher/" # MUST be in the format (if you have a subdomain, and must have trailing slash) "yoursubdomain.domain.org/subroute/"
[EncryptionPolicy]
DisableEncryption = false
ForceEncryption = false
PreferNoEncryption = false
[torrentClientConfig]
DownloadDir = 'downloading' #the full OR relative path where the torrent server stores in-progress torrents
Seed = false #boolean #seed after download
# Never send chunks to peers.
NoUpload = false #boolean
#User-provided Client peer ID. If not present, one is generated automatically.
PeerID = "" #string
#The address to listen for new uTP and TCP bittorrent protocol connections. DHT shares a UDP socket with uTP unless configured otherwise.
ListenAddr = "" #Leave Blank for default, syntax "HOST:PORT"
#Don't announce to trackers. This only leaves DHT to discover peers.
DisableTrackers = false #boolean
DisablePEX = false # boolean
# Don't create a DHT.
NoDHT = false #boolean
#For the bittorrent protocol.
DisableUTP = false #bool
#For the bittorrent protocol.
DisableTCP = false #bool
#Called to instantiate storage for each added torrent. Builtin backends
# are in the storage package. If not set, the "file" implementation is used.
DefaultStorage = "storage.ClientImpl"
#encryption policy
IPBlocklist = "" #of type iplist.Ranger
DisableIPv6 = false #boolean
Debug = false #boolean
#HTTP *http.Client
HTTPUserAgent = "" # HTTPUserAgent changes default UserAgent for HTTP requests
ExtendedHandshakeClientVersion = ""
Bep20 = ""
# Overrides the default DHT configuration, see dhtServerConfig #advanced.. so be careful
DHTConfig = "" # default is "dht.ServerConfig"
[dhtServerConfig]
# Set NodeId Manually. Caller must ensure that if NodeId does not conform to DHT Security Extensions, that NoSecurity is also set.
NodeId = "" #[20]byte
Conn = "" # https:#godoc.org/net#PacketConn #not implemented
# Don't respond to queries from other nodes.
Passive = false # boolean
# the default addresses are "router.utorrent.com:6881","router.bittorrent.com:6881","dht.transmissionbt.com:6881","dht.aelitis.com:6881",
#https:#github.com/anacrolix/dht/blob/master/dht.go
StartingNodes = "dht.GlobalBootstrapAddrs"
#Disable the DHT security extension: http:#www.libtorrent.org/dht_sec.html.
NoSecurity = false
#Initial IP blocklist to use. Applied before serving and bootstrapping begins.
IPBlocklist = "" #of type iplist.Ranger
#Used to secure the server's ID. Defaults to the Conn's LocalAddr(). Set to the IP that remote nodes will see,
#as that IP is what they'll use to validate our ID.
PublicIP = "" #net.IP
#Hook received queries. Return true if you don't want to propagate to the default handlers.
OnQuery = "func(query *krpc.Msg, source net.Addr) (propagate bool)"
#Called when a peer successfully announces to us.
OnAnnouncePeer = "func(infoHash metainfo.Hash, peer Peer)"
#How long to wait before re-sending queries that haven't received a response. Defaults to a random value between 4.5 and 5.5s.
QueryResendDelay = "func() time.Duration"
================================================
FILE: dist-specific-files/Linux-systemd/goTorrent.service
================================================
[Unit]
Description=goTorrent Server
After=network.target
[Service]
type=simple
User=goTorrent
WorkingDirectory=/opt/goTorrent
ExecStart=/opt/goTorrent/goTorrent
Restart=on-abort
[Install]
WantedBy=multi-user.target
================================================
FILE: dist-specific-files/ReverseProxy/nginx.conf
================================================
location ^~ /gotorrent/ {
proxy_pass http://192.168.1.100:8000/;
proxy_redirect http:// https://;
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $http_address;
proxy_set_header X-Scheme $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
================================================
FILE: engine/clientStructs.go
================================================
package engine
import (
"time"
"github.com/anacrolix/torrent"
"github.com/anacrolix/torrent/metainfo"
Settings "github.com/deranjer/goTorrent/settings"
Storage "github.com/deranjer/goTorrent/storage"
)
//All the message types are first, first the server handling messages from the client
//Message contains the JSON messages from the client, we first unmarshal to get the messagetype, then pass it on to each module
type Message struct {
MessageType string
Payload interface{}
}
//Next are the messages the server sends to the client
//AuthResponse is sent when the client fails to perform authentication correctly
type AuthResponse struct {
MessageType string
Payload string
}
//ServerPushMessage is information (usually logs and status messages) that the server pushes to the client
type ServerPushMessage struct {
MessageType string
MessageLevel string //can be "success", "error", "warn", "info"
Payload string //the actual message
}
//RSSJSONList is a slice of gofeed.Feeds sent to the client
type RSSJSONList struct {
MessageType string
TotalRSSFeeds int
RSSFeeds []RSSFeedsNames //strings of the full rss feed
}
//RSSFeedsNames stores all of the feeds by name and with URL
type RSSFeedsNames struct {
RSSName string
RSSFeedURL string
}
//SingleRSSFeedMessage contains the torrents/name/etc of a single torrent feed
type SingleRSSFeedMessage struct { //TODO had issues with getting this to work with Storage or Engine
MessageType string
URL string //the URL of the individual RSS feed
Name string
TotalTorrents int
Torrents []Storage.SingleRSSTorrent //name of the torrents
}
//TorrentList struct contains the torrent list that is sent to the client
type TorrentList struct { //helps create the JSON structure that react expects to receive
MessageType string `json:"MessageType"`
Totaltorrents int `json:"total"`
ClientDBstruct []ClientDB `json:"data"`
}
//TorrentFileList supplies a list of files attached to a single torrent along with some additional information
type TorrentFileList struct {
MessageType string
TotalFiles int `json:"TotalFiles"`
FileList []TorrentFile `json:"FileList"`
}
//PeerFileList returns a slice of peers
type PeerFileList struct {
MessageType string
TotalPeers int
PeerList []torrent.Peer
}
//TorrentFile describes a single file that a torrent client is downloading for a single torrent
type TorrentFile struct {
TorrentHashString string //Used to tie the file to a torrent //TODO not sure if needed
FileName string //The name of the file
FilePath string //The relative filepath to the file
FileSize string //Humanized file size display
FilePercent string //String value of percent of individual file percent done
FilePriority string //Currently "High", "Normal", or "Cancel"
}
type SettingsFile struct {
MessageType string
Config Settings.FullClientSettings
}
//ClientDB struct contains the struct that is used to compose the torrentlist
type ClientDB struct { //TODO maybe separate out the internal bits into another client struct
TorrentHashString string //Passed to client for displaying hash and is used to uniquely identify all torrents
TorrentName string //String of the name of the torrent
DownloadedSize string //how much the client has downloaded total
Size string //total size of the torrent
DownloadSpeed string //the dl speed of the torrent
Status string //Passed to client for display
PercentDone string //Passed to client to show percent done
ActivePeers string //passed to client
UploadSpeed string //passed to client to show Uploadspeed
StoragePath string //Passed to client (and stored in stormdb)
DateAdded string //Passed to client (and stored in stormdb)
ETA string //Passed to client
TorrentLabel string //Passed to client and stored in stormdb
SourceType string //Stores whether the torrent came from a torrent file or a magnet link
KnownSwarm []torrent.Peer //Passed to client for Peer Tab
UploadRatio string //Passed to client, stores the string for uploadratio stored in stormdb
TotalUploadedSize string //Humanized version of TotalUploadedBytes to pass to the client
TotalUploadedBytes int64 `json:"-"` //includes bytes that happened before reboot (from stormdb)
downloadSpeedInt int64 //Internal used for calculating dl speed
BytesCompleted int64 `json:"-"` //Internal used for calculating the dl speed
DataBytesWritten int64 `json:"-"` //Internal used for calculating dl speed
DataBytesRead int64 `json:"-"` //Internal used for calculating dl speed
UpdatedAt time.Time `json:"-"` //Internal used for calculating speeds of upload and download
TorrentHash metainfo.Hash `json:"-"` //Used to create string for TorrentHashString... not sure why I have it... make that a TODO I guess
NumberofFiles int //Number of files in the torrent
NumberofPieces int //Total number of pieces in the torrent (Not currently used)
MaxConnections int //Used to stop the torrent by limiting the max allowed connections
}
================================================
FILE: engine/cronJobs.go
================================================
package engine
import (
"io/ioutil"
"os"
"path/filepath"
"github.com/anacrolix/torrent"
"github.com/asdine/storm"
Settings "github.com/deranjer/goTorrent/settings"
Storage "github.com/deranjer/goTorrent/storage"
"github.com/mmcdole/gofeed"
"github.com/robfig/cron"
"github.com/sirupsen/logrus"
)
//InitializeCronEngine initializes and starts the cron engine so we can add tasks as needed, returns pointer to the engine
func InitializeCronEngine() *cron.Cron {
c := cron.New()
c.Start()
return c
}
//CheckTorrentWatchFolder adds torrents from a watch folder //TODO see if you can use filepath.Abs instead of changing directory
func CheckTorrentWatchFolder(c *cron.Cron, db *storm.DB, tclient *torrent.Client, torrentLocalStorage Storage.TorrentLocal, config Settings.FullClientSettings, torrentQueues Storage.TorrentQueues) {
c.AddFunc("@every 5m", func() {
Logger.WithFields(logrus.Fields{"Watch Folder": config.TorrentWatchFolder}).Info("Running the watch folder cron job")
torrentFiles, err := ioutil.ReadDir(config.TorrentWatchFolder)
if err != nil {
Logger.WithFields(logrus.Fields{"Folder": config.TorrentWatchFolder, "Error": err}).Error("Unable to read from the torrent upload folder")
return
}
for _, file := range torrentFiles {
if filepath.Ext(file.Name()) != ".torrent" {
Logger.WithFields(logrus.Fields{"File": file.Name(), "error": err}).Error("Not a torrent file..")
continue
} else {
fullFilePath := filepath.Join(config.TorrentWatchFolder, file.Name())
fullFilePathAbs, err := filepath.Abs(fullFilePath)
fullNewFilePath := filepath.Join(config.TFileUploadFolder, file.Name())
fullNewFilePathAbs, err := filepath.Abs(fullNewFilePath)
Logger.WithFields(logrus.Fields{"Name": file.Name(), "FullFilePath": fullFilePathAbs, "newFullFilePath": fullNewFilePathAbs}).Info("Attempting to add the following file... and copy to")
CopyFile(fullFilePathAbs, fullNewFilePathAbs)
clientTorrent, err := tclient.AddTorrentFromFile(fullNewFilePathAbs)
if err != nil {
Logger.WithFields(logrus.Fields{"err": err, "Torrent": file.Name()}).Warn("Unable to add torrent to torrent client!")
continue
}
os.Remove(fullFilePathAbs) //delete the torrent after adding it and copying it over
Logger.WithFields(logrus.Fields{"Source Folder": fullFilePathAbs, "Destination Folder": fullNewFilePathAbs, "Torrent": file.Name()}).Info("Added torrent from watch folder, and moved torrent file")
AddTorrent(clientTorrent, torrentLocalStorage, db, "file", fullNewFilePathAbs, config.DefaultMoveFolder, "default", config)
}
}
})
}
//CheckTorrentsCron runs a upload ratio check, a queue check (essentially anything that should not be frontend dependent)
func CheckTorrentsCron(c *cron.Cron, db *storm.DB, tclient *torrent.Client, config Settings.FullClientSettings) {
c.AddFunc("@every 30s", func() {
Logger.Debug("Running a torrent Ratio and Queue Check")
torrentLocalArray := Storage.FetchAllStoredTorrents(db)
torrentQueues := Storage.FetchQueues(db)
for _, singleTorrentFromStorage := range torrentLocalArray {
var singleTorrent *torrent.Torrent
for _, liveTorrent := range tclient.Torrents() { //matching the torrent from storage to the live torrent
if singleTorrentFromStorage.Hash == liveTorrent.InfoHash().String() {
singleTorrent = liveTorrent
}
}
calculatedCompletedSize := CalculateCompletedSize(singleTorrentFromStorage, singleTorrent)
bytesCompleted := CalculateCompletedSize(singleTorrentFromStorage, singleTorrent)
if float64(singleTorrentFromStorage.UploadedBytes)/float64(bytesCompleted) >= config.SeedRatioStop && singleTorrentFromStorage.TorrentUploadLimit == true { //If storage shows torrent stopped or if it is over the seeding ratio AND is under the global limit
Logger.WithFields(logrus.Fields{"Action: Stopping torrent due to seed Ratio": singleTorrentFromStorage.TorrentName}).Info()
StopTorrent(singleTorrent, singleTorrentFromStorage, db)
}
if len(torrentQueues.ActiveTorrents) < config.MaxActiveTorrents && singleTorrentFromStorage.TorrentStatus == "Queued" {
Logger.WithFields(logrus.Fields{"Action: Adding Torrent to Active Queue": singleTorrentFromStorage.TorrentName}).Info()
AddTorrentToActive(singleTorrentFromStorage, singleTorrent, db)
}
if (calculatedCompletedSize == singleTorrentFromStorage.TorrentSize) && (singleTorrentFromStorage.TorrentMoved == false) { //if we are done downloading and haven't moved torrent yet
Logger.WithFields(logrus.Fields{"singleTorrent": singleTorrentFromStorage.TorrentName}).Info("Torrent Completed, moving...")
tStorage := Storage.FetchTorrentFromStorage(db, singleTorrent.InfoHash().String()) //Todo... find a better way to do this in the go-routine currently just to make sure it doesn't trigger multiple times
tStorage.TorrentMoved = true
Storage.UpdateStorageTick(db, tStorage)
go func() { //moving torrent in separate go-routine then verifying that the data is still there and correct
err := MoveAndLeaveSymlink(config, singleTorrent.InfoHash().String(), db, false, "") //can take some time to move file so running this in another thread TODO make this a goroutine and skip this block if the routine is still running
if err != nil { //If we fail, print the error and attempt a retry
Logger.WithFields(logrus.Fields{"singleTorrent": singleTorrentFromStorage.TorrentName, "error": err}).Error("Failed to move Torrent!")
VerifyData(singleTorrent)
tStorage.TorrentMoved = false
Storage.UpdateStorageTick(db, tStorage)
}
}()
}
}
ValidateQueues(db, config, tclient) //Ensure we don't have too many in activeQueue
})
}
//RefreshRSSCron refreshes all of the RSS feeds on an hourly basis
func RefreshRSSCron(c *cron.Cron, db *storm.DB, tclient *torrent.Client, torrentLocalStorage Storage.TorrentLocal, config Settings.FullClientSettings, torrentQueues Storage.TorrentQueues) {
c.AddFunc("@hourly", func() {
torrentHashHistory := Storage.FetchHashHistory(db)
RSSFeedStore := Storage.FetchRSSFeeds(db)
singleRSSTorrent := Storage.SingleRSSTorrent{}
newFeedStore := Storage.RSSFeedStore{ID: RSSFeedStore.ID} //creating a new feed store just using old one to parse for new torrents
fp := gofeed.NewParser()
for _, singleFeed := range RSSFeedStore.RSSFeeds {
feed, err := fp.ParseURL(singleFeed.URL)
if err != nil {
Logger.WithFields(logrus.Fields{"err": err, "url": singleFeed.URL}).Error("Failed to parse RSS URL")
}
for _, RSSTorrent := range feed.Items {
Logger.WithFields(logrus.Fields{"Torrent": RSSTorrent.Title}).Info("Found new torrent")
singleRSSTorrent.Link = RSSTorrent.Link
singleRSSTorrent.Title = RSSTorrent.Title
singleRSSTorrent.PubDate = RSSTorrent.Published
for _, hash := range torrentHashHistory.HashList {
linkHash := singleRSSTorrent.Link[20:60] //cutting the infohash out of the link
if linkHash == hash {
Logger.WithFields(logrus.Fields{"Torrent": RSSTorrent.Title}).Warn("Torrent already added for this RSS item, skipping torrent")
}
}
clientTorrent, err := tclient.AddMagnet(RSSTorrent.Link)
if err != nil {
Logger.WithFields(logrus.Fields{"err": err, "Torrent": RSSTorrent.Title}).Warn("Unable to add torrent to torrent client!")
break //break out of the loop entirely for this message since we hit an error
}
AddTorrent(clientTorrent, torrentLocalStorage, db, "magnet", "", config.DefaultMoveFolder, "RSS", config) //TODO let user specify torrent default storage location and let change on fly
singleFeed.Torrents = append(singleFeed.Torrents, singleRSSTorrent)
}
newFeedStore.RSSFeeds = append(newFeedStore.RSSFeeds, singleFeed)
}
Storage.UpdateRSSFeeds(db, newFeedStore) //Calling this to fully update storage will all rss feeds
})
}
//LogCronStatus prints out the status of the cron jobs to the log
func LogCronStatus(c *cron.Cron) { //TODO add a cron to inspect cron jobs and log the outputs
}
================================================
FILE: engine/doneTorrentActions.go
================================================
package engine
import (
"fmt"
"os"
"os/exec"
"path/filepath"
"github.com/asdine/storm"
Settings "github.com/deranjer/goTorrent/settings"
Storage "github.com/deranjer/goTorrent/storage"
pushbullet "github.com/mitsuse/pushbullet-go"
"github.com/mitsuse/pushbullet-go/requests"
folderCopy "github.com/otiai10/copy"
"github.com/sirupsen/logrus"
)
//MoveAndLeaveSymlink takes the file from the default download dir and moves it to the user specified directory and then leaves a symlink behind.
func MoveAndLeaveSymlink(config Settings.FullClientSettings, tHash string, db *storm.DB, moveDone bool, oldPath string) error { //moveDone and oldPath are for moving a completed torrent
tStorage := Storage.FetchTorrentFromStorage(db, tHash)
Logger.WithFields(logrus.Fields{"Torrent Name": tStorage.TorrentName}).Info("Move and Create symlink started for torrent")
var oldFilePath string
if moveDone { //only occurs on manual move
oldFilePathTemp := filepath.Join(oldPath, tStorage.TorrentName)
var err error
oldFilePath, err = filepath.Abs(oldFilePathTemp)
if err != nil {
Logger.WithFields(logrus.Fields{"Torrent Name": tStorage.TorrentName, "Filepath": oldFilePath}).Error("Cannot create absolute file path!")
moveDone = false
return err
}
} else {
oldFilePathTemp := filepath.Join(config.TorrentConfig.DataDir, tStorage.TorrentName)
var err error
oldFilePath, err = filepath.Abs(oldFilePathTemp)
if err != nil {
Logger.WithFields(logrus.Fields{"Torrent Name": tStorage.TorrentName, "Filepath": oldFilePath}).Error("Cannot create absolute file path!")
moveDone = false
return err
}
}
newFilePathTemp := filepath.Join(tStorage.StoragePath, tStorage.TorrentName)
newFilePath, err := filepath.Abs(newFilePathTemp)
if err != nil {
Logger.WithFields(logrus.Fields{"Torrent Name": tStorage.TorrentName, "Filepath": newFilePath}).Error("Cannot create absolute file path for new file path!")
moveDone = false
return err
}
_, err = os.Stat(tStorage.StoragePath)
if os.IsNotExist(err) {
err := os.MkdirAll(tStorage.StoragePath, 0777)
if err != nil {
Logger.WithFields(logrus.Fields{"New File Path": newFilePath, "error": err}).Error("Cannot create new directory")
moveDone = false
return err
}
}
oldFileInfo, err := os.Stat(oldFilePath)
if err != nil {
Logger.WithFields(logrus.Fields{"Old File info": oldFileInfo, "Old File Path": oldFilePath, "error": err}).Error("Cannot find the old file to copy/symlink!")
moveDone = false
return err
}
if oldFilePath != newFilePath {
newFilePathDir := filepath.Dir(newFilePath)
os.Mkdir(newFilePathDir, 0777)
err := folderCopy.Copy(oldFilePath, newFilePath) //copy the folder to the new location
if err != nil {
Logger.WithFields(logrus.Fields{"Old File Path": oldFilePath, "New File Path": newFilePath, "error": err}).Error("Error Copying Folder!")
return err
}
err = filepath.Walk(newFilePath, func(path string, info os.FileInfo, err error) error { //Walking the file path to change the permissions
if err != nil {
Logger.WithFields(logrus.Fields{"file": path, "error": err}).Error("Potentially non-critical error, continuing..")
}
os.Chmod(path, 0777)
return nil
})
/* if runtime.GOOS != "windows" { //TODO the windows symlink is broken on windows 10 creator edition, so on the other platforms create symlink (windows will copy) until Go1.11
os.RemoveAll(oldFilePath)
err = os.Symlink(newFilePath, oldFilePath)
if err != nil {
Logger.WithFields(logrus.Fields{"Old File Path": oldFilePath, "New File Path": newFilePath, "error": err}).Error("Error creating symlink")
moveDone = false
return err
}
} */
if moveDone == false {
tStorage.TorrentMoved = true //TODO error handling instead of just saying torrent was moved when it was not
notifyUser(tStorage, config, db) //Only notify if we haven't moved yet, don't want to push notify user every time user uses change storage button
}
Logger.WithFields(logrus.Fields{"Old File Path": oldFilePath, "New File Path": newFilePath}).Info("Moving completed torrent")
tStorage.StoragePath = filepath.Dir(newFilePath)
Storage.UpdateStorageTick(db, tStorage)
}
return nil
}
func notifyUser(tStorage Storage.TorrentLocal, config Settings.FullClientSettings, db *storm.DB) {
Logger.WithFields(logrus.Fields{"New File Path": tStorage.StoragePath, "Torrent Name": tStorage.TorrentName}).Info("Attempting to notify user..")
tStorage.TorrentMoved = true
//Storage.AddTorrentLocalStorage(db, tStorage) //Updating the fact that we moved the torrent
Storage.UpdateStorageTick(db, tStorage)
if config.PushBulletToken != "" {
pb := pushbullet.New(config.PushBulletToken)
n := requests.NewNote()
n.Title = tStorage.TorrentName
n.Body = "Completed and moved to " + tStorage.StoragePath
if _, err := pb.PostPushesNote(n); err != nil {
Logger.WithFields(logrus.Fields{"Torrent": tStorage.TorrentName, "New File Path": tStorage.StoragePath, "error": err}).Error("Error pushing PushBullet Note")
return
}
Logger.WithFields(logrus.Fields{"Torrent": tStorage.TorrentName, "New File Path": tStorage.StoragePath}).Info("Pushbullet note sent")
} else {
Logger.WithFields(logrus.Fields{"New File Path": tStorage.StoragePath, "Torrent Name": tStorage.TorrentName}).Info("No pushbullet API key set, not notifying")
}
if config.NotifyCommand != "" {
cmd := exec.Command(config.NotifyCommand)
cmd.Env = append(os.Environ(),
fmt.Sprintf("DIR=%s", tStorage.StoragePath),
fmt.Sprintf("PATH=%s", tStorage.TorrentFileName),
fmt.Sprintf("SIZE=%d", tStorage.TorrentSize),
fmt.Sprintf("FILECNT=%d", len(tStorage.TorrentFile)))
stdoutStderr, err := cmd.CombinedOutput()
if err != nil {
Logger.WithFields(logrus.Fields{"Torrent Name": tStorage.TorrentName, "New File Path": tStorage.StoragePath}).Error("NotifyCommand called error:", err)
}
Logger.WithFields(logrus.Fields{"Torrent Name": tStorage.TorrentName, "New File Path": tStorage.StoragePath}).Info("NotifyCommand called output:", stdoutStderr)
}
}
================================================
FILE: engine/engine.go
================================================
package engine //main file for all the calculations and data gathering needed for creating the running torrent arrays
import (
"fmt"
"io/ioutil"
"os"
"strconv"
"strings"
"time"
"github.com/anacrolix/torrent"
"github.com/anacrolix/torrent/metainfo"
"github.com/asdine/storm"
Settings "github.com/deranjer/goTorrent/settings"
Storage "github.com/deranjer/goTorrent/storage"
"github.com/gorilla/websocket"
"github.com/mmcdole/gofeed"
"github.com/sirupsen/logrus"
)
//Logger is the injected variable for global logger
var Logger *logrus.Logger
//Config is the injected variable for the torrent config
var Config Settings.FullClientSettings
//Conn is the injected variable for the websocket connection
var Conn *websocket.Conn
//CreateServerPushMessage Pushes a message from the server to the client
func CreateServerPushMessage(message ServerPushMessage, conn *websocket.Conn) {
conn.WriteJSON(message)
}
//RefreshSingleRSSFeed refreshing a single RSS feed to send to the client (so no updating database) mainly by updating the torrent list to display any changes
func RefreshSingleRSSFeed(db *storm.DB, RSSFeed Storage.SingleRSSFeed) Storage.SingleRSSFeed { //Todo.. duplicate as cron job... any way to merge these to reduce duplication?
singleRSSFeed := Storage.SingleRSSFeed{URL: RSSFeed.URL, Name: RSSFeed.Name}
singleRSSTorrent := Storage.SingleRSSTorrent{}
fp := gofeed.NewParser()
feed, err := fp.ParseURL(RSSFeed.URL)
if err != nil {
Logger.WithFields(logrus.Fields{"RSSFeedURL": RSSFeed.URL, "error": err}).Error("Unable to parse URL")
CreateServerPushMessage(ServerPushMessage{MessageType: "serverPushMessage", MessageLevel: "error", Payload: "Unable to add Storage Path"}, Conn)
}
for _, RSSTorrent := range feed.Items {
singleRSSTorrent.Link = RSSTorrent.Link
singleRSSTorrent.Title = RSSTorrent.Title
singleRSSTorrent.PubDate = RSSTorrent.Published
singleRSSFeed.Torrents = append(singleRSSFeed.Torrents, singleRSSTorrent)
}
return singleRSSFeed
}
//ForceRSSRefresh forces a refresh (in addition to the cron schedule) to add the new RSS feed
func ForceRSSRefresh(db *storm.DB, RSSFeedStore Storage.RSSFeedStore) { //Todo.. duplicate as cron job... any way to merge these to reduce duplication?
singleRSSTorrent := Storage.SingleRSSTorrent{}
newFeedStore := Storage.RSSFeedStore{ID: RSSFeedStore.ID} //creating a new feed store just using old one to parse for new torrents
fp := gofeed.NewParser()
Logger.WithFields(logrus.Fields{"RSSFeedStoreLength": len(RSSFeedStore.RSSFeeds)}).Debug("Length of RSS feeds (should be ONE)")
for _, singleFeed := range RSSFeedStore.RSSFeeds {
feed, err := fp.ParseURL(singleFeed.URL)
if err != nil {
Logger.WithFields(logrus.Fields{"RSSFeedURL": singleFeed.URL, "error": err}).Error("Unable to parse RSS URL")
CreateServerPushMessage(ServerPushMessage{MessageType: "serverPushMessage", MessageLevel: "error", Payload: "Unable to parse RSS URL"}, Conn)
}
for _, RSSTorrent := range feed.Items {
singleRSSTorrent.Link = RSSTorrent.Link
singleRSSTorrent.Title = RSSTorrent.Title
singleRSSTorrent.PubDate = RSSTorrent.Published
singleFeed.Torrents = append(singleFeed.Torrents, singleRSSTorrent)
}
newFeedStore.RSSFeeds = append(newFeedStore.RSSFeeds, singleFeed)
}
Storage.UpdateRSSFeeds(db, newFeedStore) //Calling this to fully update storage will all rss feeds
}
//timeOutInfo forcing a timeout of the torrent if it doesn't load from program restart
func timeOutInfo(clientTorrent *torrent.Torrent, seconds time.Duration) (deleted bool) {
Logger.WithFields(logrus.Fields{"Seconds to wait for info...": seconds}).Info("Attempting to download info for torrent")
timeout := make(chan bool, 1) //creating a timeout channel for our gotinfo
go func() {
time.Sleep(seconds * time.Second)
timeout <- true
}()
select {
case <-clientTorrent.GotInfo(): //attempting to retrieve info for torrent
Logger.WithFields(logrus.Fields{"clientTorrentName": clientTorrent.Name()}).Debug("Received torrent info for torrent")
return false
case <-timeout: // getting info for torrent has timed out so purging the torrent
Logger.WithFields(logrus.Fields{"clientTorrentName": clientTorrent.Name()}).Error("Forced to drop torrent from timeout waiting for info")
CreateServerPushMessage(ServerPushMessage{MessageType: "serverPushMessage", MessageLevel: "error", Payload: "Timout waiting for torrent info... dropping"}, Conn)
clientTorrent.Drop()
return true
}
}
func readTorrentFileFromDB(element *Storage.TorrentLocal, tclient *torrent.Client, db *storm.DB) (singleTorrent *torrent.Torrent, err error) {
tempFile, err := ioutil.TempFile("", "TorrentFileTemp")
if err != nil {
Logger.WithFields(logrus.Fields{"tempfile": tempFile, "err": err}).Error("Unable to create tempfile")
return nil, err
}
//defer tempFile.Close() //Todo.. if we remove this do we need to close it?
defer os.Remove(tempFile.Name())
if _, err := tempFile.Write(element.TorrentFile); err != nil { //writing out out the entire file back into the temp dir from boltdb
Logger.WithFields(logrus.Fields{"tempfile": tempFile, "err": err}).Error("Unable to write to tempfile")
return nil, err
}
if err := tempFile.Close(); err != nil { //close the tempfile so that we can add it back into the torrent client
Logger.WithFields(logrus.Fields{"tempfile": tempFile, "err": err}).Error("Unable to close tempfile")
}
_, err = os.Stat(element.TorrentFileName) //if we CAN find the torrent, add it
if err != nil {
Logger.WithFields(logrus.Fields{"tempfile": tempFile, "err": err}).Error("Unable to find file")
Storage.DelTorrentLocalStorage(db, element.Hash) //purge the torrent
return nil, err
}
singleTorrent, err = tclient.AddTorrentFromFile(element.TorrentFileName)
if err != nil {
Logger.WithFields(logrus.Fields{"tempfile": element.TorrentFileName, "err": err}).Error("Unable to add Torrent from file!")
CreateServerPushMessage(ServerPushMessage{MessageType: "serverPushMessage", MessageLevel: "error", Payload: "Unable to add Torrent from file!"}, Conn)
Storage.DelTorrentLocalStorage(db, element.Hash) //purge the torrent
return nil, err
}
return singleTorrent, nil
}
//AddTorrent creates the storage.db entry and starts A NEW TORRENT and adds to the running torrent array
func AddTorrent(clientTorrent *torrent.Torrent, torrentLocalStorage Storage.TorrentLocal, db *storm.DB, torrentType, torrentFilePathAbs, torrentStoragePath, labelValue string, config Settings.FullClientSettings) {
timedOut := timeOutInfo(clientTorrent, 45) //seeing if adding the torrent times out (giving 45 seconds)
if timedOut { //if we fail to add the torrent return
return
}
var TempHash metainfo.Hash
TempHash = clientTorrent.InfoHash()
fmt.Println("GOT INFOHASH", TempHash.String())
allStoredTorrents := Storage.FetchAllStoredTorrents(db)
for _, runningTorrentHashes := range allStoredTorrents {
if runningTorrentHashes.Hash == TempHash.String() {
Logger.WithFields(logrus.Fields{"Hash": TempHash.String()}).Info("Torrent has duplicate hash to already running torrent... will not add to storage")
return
}
}
torrentLocalStorage.Hash = TempHash.String() // we will store the infohash to add it back later on client restart (if needed)
torrentLocalStorage.InfoBytes = clientTorrent.Metainfo().InfoBytes
torrentLocalStorage.Label = labelValue
torrentLocalStorage.DateAdded = time.Now().Format("Jan _2 2006")
torrentLocalStorage.StoragePath = torrentStoragePath
torrentLocalStorage.TempStoragePath = config.TorrentConfig.DataDir
torrentLocalStorage.TorrentName = clientTorrent.Name()
torrentLocalStorage.TorrentUploadLimit = true //by default all of the torrents will stop uploading after the global rate is set.
torrentLocalStorage.TorrentMoved = false //by default the torrent has no been moved.
torrentLocalStorage.TorrentStatus = "Running" //by default start all the torrents as downloading.
torrentLocalStorage.TorrentType = torrentType //either "file" or "magnet" maybe more in the future
torrentLocalStorage.TorrentSize = clientTorrent.Length() //Length will change as we cancel files so store it in DB
if torrentType == "file" { //if it is a file read the entire file into the database for us to spit out later
torrentfile, err := ioutil.ReadFile(torrentFilePathAbs)
torrentLocalStorage.TorrentFileName = torrentFilePathAbs
if err != nil {
Logger.WithFields(logrus.Fields{"torrentFile": torrentfile, "error": err}).Error("Unable to read the torrent file")
}
torrentLocalStorage.TorrentFile = torrentfile //storing the entire file in to database
}
Logger.WithFields(logrus.Fields{"Storage Path": torrentStoragePath, "Torrent Name": clientTorrent.Name()}).Info("Adding Torrent with following storage path, to active Queue")
torrentFiles := clientTorrent.Files() //storing all of the files in the database along with the priority
var TorrentFilePriorityArray = []Storage.TorrentFilePriority{}
for _, singleFile := range torrentFiles { //creating the database setup for the file array
var torrentFilePriority = Storage.TorrentFilePriority{}
torrentFilePriority.TorrentFilePath = singleFile.DisplayPath()
torrentFilePriority.TorrentFilePriority = "Normal"
torrentFilePriority.TorrentFileSize = singleFile.Length()
TorrentFilePriorityArray = append(TorrentFilePriorityArray, torrentFilePriority)
}
torrentLocalStorage.TorrentFilePriority = TorrentFilePriorityArray
//torrentQueues := Storage.FetchQueues(db)
AddTorrentToActive(&torrentLocalStorage, clientTorrent, db)
Storage.AddTorrentLocalStorage(db, torrentLocalStorage) //writing all of the data to the database
}
//CreateInitialTorrentArray adds all the torrents on program start from the database
func CreateInitialTorrentArray(tclient *torrent.Client, TorrentLocalArray []*Storage.TorrentLocal, db *storm.DB, config Settings.FullClientSettings) {
for _, singleTorrentFromStorage := range TorrentLocalArray {
var singleTorrent *torrent.Torrent
var err error
if singleTorrentFromStorage.TorrentType == "file" { //if it is a file pull it from the uploaded torrent folder
singleTorrent, err = readTorrentFileFromDB(singleTorrentFromStorage, tclient, db)
if err != nil {
continue
}
} else {
singleTorrentFromStorageMagnet := "magnet:?xt=urn:btih:" + singleTorrentFromStorage.Hash //For magnet links just need to prepend the magnet part to the hash to readd
singleTorrent, err = tclient.AddMagnet(singleTorrentFromStorageMagnet)
if err != nil {
continue
}
}
if len(singleTorrentFromStorage.InfoBytes) == 0 { //TODO.. kind of a fringe scenario.. not sure if needed since the db should always have the infobytes
timeOut := timeOutInfo(singleTorrent, 45)
if timeOut == true { // if we did timeout then drop the torrent from the bolt.db database
Storage.DelTorrentLocalStorage(db, singleTorrentFromStorage.Hash) //purging torrent from the local database
continue
}
singleTorrentFromStorage.InfoBytes = singleTorrent.Metainfo().InfoBytes
}
err = singleTorrent.SetInfoBytes(singleTorrentFromStorage.InfoBytes) //setting the infobytes back into the torrent
if err != nil {
Logger.WithFields(logrus.Fields{"torrentFile": singleTorrent.Name(), "error": err}).Error("Unable to add infobytes to the torrent!")
}
torrentQueues := Storage.FetchQueues(db)
if singleTorrentFromStorage.TorrentStatus == "Stopped" {
singleTorrent.SetMaxEstablishedConns(0)
continue
}
if singleTorrentFromStorage.TorrentStatus == "ForceStart" {
AddTorrentToForceStart(singleTorrentFromStorage, singleTorrent, db)
}
if len(torrentQueues.ActiveTorrents) == 0 && len(torrentQueues.QueuedTorrents) == 0 { // If empty, run through all the torrents and assign them
if len(torrentQueues.ActiveTorrents) < Config.MaxActiveTorrents {
if singleTorrentFromStorage.TorrentStatus == "Completed" || singleTorrentFromStorage.TorrentStatus == "Seeding" {
Logger.WithFields(logrus.Fields{"Torrent Name": singleTorrentFromStorage.TorrentName}).Info("Completed Torrents have lower priority, adding to Queued")
AddTorrentToQueue(singleTorrentFromStorage, singleTorrent, db)
} else {
Logger.WithFields(logrus.Fields{"Torrent Name": singleTorrentFromStorage.TorrentName}).Info("Adding Torrent to Active Queue (Initial Torrent Load)")
AddTorrentToActive(singleTorrentFromStorage, singleTorrent, db)
}
} else {
Logger.WithFields(logrus.Fields{"Torrent Name": singleTorrentFromStorage.TorrentName}).Info("Last resort for torrent, adding to Queued")
AddTorrentToQueue(singleTorrentFromStorage, singleTorrent, db)
}
} else { //If we already have a queue set up then assign torrents to queue
if singleTorrentFromStorage.TorrentStatus == "Queued" {
AddTorrentToQueue(singleTorrentFromStorage, singleTorrent, db)
} else {
if len(torrentQueues.ActiveTorrents) < Config.MaxActiveTorrents {
Logger.WithFields(logrus.Fields{"Torrent Name": singleTorrentFromStorage.TorrentName}).Info("Adding Torrent to Active Queue (Initial Torrent Load Second)")
AddTorrentToActive(singleTorrentFromStorage, singleTorrent, db)
} else {
AddTorrentToQueue(singleTorrentFromStorage, singleTorrent, db)
}
}
RemoveDuplicatesFromQueues(db)
}
Storage.UpdateStorageTick(db, *singleTorrentFromStorage)
}
torrentQueues := Storage.FetchQueues(db)
if len(torrentQueues.ActiveTorrents) < config.MaxActiveTorrents && len(torrentQueues.QueuedTorrents) > 0 { //after all the torrents are added, see if out active torrent list isn't full, then add from the queue
Logger.WithFields(logrus.Fields{"Max Active: ": config.MaxActiveTorrents, "Current : ": torrentQueues.ActiveTorrents}).Info("Adding Torrents from queue to active to fill...")
maxCanSend := config.MaxActiveTorrents - len(torrentQueues.ActiveTorrents)
if maxCanSend > len(torrentQueues.QueuedTorrents) {
maxCanSend = len(torrentQueues.QueuedTorrents)
}
torrentsToStart := make([]string, maxCanSend)
copy(torrentsToStart, torrentQueues.QueuedTorrents[len(torrentsToStart)-1:])
for _, torrentStart := range torrentsToStart {
for _, singleTorrent := range tclient.Torrents() {
if singleTorrent.InfoHash().String() == torrentStart {
singleTorrentFromStorage := Storage.FetchTorrentFromStorage(db, torrentStart)
AddTorrentToActive(&singleTorrentFromStorage, singleTorrent, db)
}
}
}
}
SetFilePriority(tclient, db) //Setting the desired file priority from storage
Logger.WithFields(logrus.Fields{"Max Active: ": config.MaxActiveTorrents, "Current : ": torrentQueues.ActiveTorrents}).Debug("Queue after all initial torrents have been added")
}
//CreateRunningTorrentArray creates the entire torrent list to pass to client
func CreateRunningTorrentArray(tclient *torrent.Client, TorrentLocalArray []*Storage.TorrentLocal, PreviousTorrentArray []ClientDB, config Settings.FullClientSettings, db *storm.DB) (RunningTorrentArray []ClientDB) {
torrentQueues := Storage.FetchQueues(db)
Logger.WithFields(logrus.Fields{"Max Active: ": config.MaxActiveTorrents, "TorrentQueues": torrentQueues}).Debug("Current TorrentQueues")
for _, singleTorrentFromStorage := range TorrentLocalArray {
torrentQueues := Storage.FetchQueues(db)
var singleTorrent *torrent.Torrent
for _, liveTorrent := range tclient.Torrents() { //matching the torrent from storage to the live torrent
if singleTorrentFromStorage.Hash == liveTorrent.InfoHash().String() {
singleTorrent = liveTorrent
}
}
tickUpdateStruct := Storage.TorrentLocal{} //we are shoving the tick updates into a torrentlocal struct to pass to storage happens at the end of the routine
fullClientDB := new(ClientDB)
//Handling deleted torrents here
if singleTorrentFromStorage.TorrentStatus == "Dropped" {
Logger.WithFields(logrus.Fields{"selection": singleTorrentFromStorage.TorrentName}).Info("Deleting just the torrent")
DeleteTorrentFromQueues(singleTorrentFromStorage.Hash, db)
singleTorrent.Drop()
Storage.DelTorrentLocalStorage(db, singleTorrentFromStorage.Hash)
}
if singleTorrentFromStorage.TorrentStatus == "DroppedData" {
Logger.WithFields(logrus.Fields{"selection": singleTorrentFromStorage.TorrentName}).Info("Deleting torrent and data")
singleTorrent.Drop()
DeleteTorrentFromQueues(singleTorrentFromStorage.Hash, db)
Storage.DelTorrentLocalStorageAndFiles(db, singleTorrentFromStorage.Hash, Config.TorrentConfig.DataDir)
}
if singleTorrentFromStorage.TorrentType == "file" { //if it is a file pull it from the uploaded torrent folder
fullClientDB.SourceType = "Torrent File"
} else {
fullClientDB.SourceType = "Magnet Link"
}
var TempHash metainfo.Hash
TempHash = singleTorrent.InfoHash()
calculatedTotalSize := CalculateDownloadSize(singleTorrentFromStorage, singleTorrent)
calculatedCompletedSize := CalculateCompletedSize(singleTorrentFromStorage, singleTorrent)
fullStruct := singleTorrent.Stats()
activePeersString := strconv.Itoa(fullStruct.ActivePeers) //converting to strings
totalPeersString := fmt.Sprintf("%v", fullStruct.TotalPeers)
fullClientDB.StoragePath = singleTorrentFromStorage.StoragePath
downloadedSizeHumanized := HumanizeBytes(float32(calculatedCompletedSize)) //convert size to GB if needed
totalSizeHumanized := HumanizeBytes(float32(calculatedTotalSize))
fullClientDB.DownloadedSize = downloadedSizeHumanized
fullClientDB.Size = totalSizeHumanized
PercentDone := fmt.Sprintf("%.2f", float32(calculatedCompletedSize)/float32(calculatedTotalSize))
fullClientDB.TorrentHash = TempHash
fullClientDB.PercentDone = PercentDone
fullClientDB.DataBytesRead = fullStruct.ConnStats.BytesReadData.Int64() //used for calculations not passed to client calculating up/down speed
fullClientDB.DataBytesWritten = fullStruct.ConnStats.BytesWrittenData.Int64() //used for calculations not passed to client calculating up/down speed
fullClientDB.ActivePeers = activePeersString + " / (" + totalPeersString + ")"
fullClientDB.TorrentHashString = TempHash.String()
fullClientDB.TorrentName = singleTorrentFromStorage.TorrentName
fullClientDB.DateAdded = singleTorrentFromStorage.DateAdded
fullClientDB.TorrentLabel = singleTorrentFromStorage.Label
fullClientDB.BytesCompleted = calculatedCompletedSize
fullClientDB.NumberofFiles = len(singleTorrent.Files())
if len(PreviousTorrentArray) > 0 { //if we actually have a previous array //ranging over the previous torrent array to calculate the speed for each torrent
for _, previousElement := range PreviousTorrentArray {
TempHash := singleTorrent.InfoHash()
if previousElement.TorrentHashString == TempHash.String() { //matching previous to new
CalculateTorrentSpeed(singleTorrent, fullClientDB, previousElement, calculatedCompletedSize)
fullClientDB.TotalUploadedBytes = singleTorrentFromStorage.UploadedBytes + (fullStruct.ConnStats.BytesWrittenData.Int64() - previousElement.DataBytesWritten)
}
}
}
CalculateTorrentETA(singleTorrentFromStorage.TorrentSize, calculatedCompletedSize, fullClientDB) //needs to be here since we need the speed calculated before we can estimate the eta.
fullClientDB.TotalUploadedSize = HumanizeBytes(float32(fullClientDB.TotalUploadedBytes))
fullClientDB.UploadRatio = CalculateUploadRatio(singleTorrent, fullClientDB) //calculate the upload ratio
CalculateTorrentStatus(singleTorrent, fullClientDB, config, singleTorrentFromStorage, calculatedCompletedSize, calculatedTotalSize, torrentQueues, db) //add torrents to the queue, remove from queue, etc
tickUpdateStruct.UploadRatio = fullClientDB.UploadRatio
tickUpdateStruct.TorrentSize = calculatedTotalSize
tickUpdateStruct.UploadedBytes = fullClientDB.TotalUploadedBytes
tickUpdateStruct.TorrentStatus = fullClientDB.Status
tickUpdateStruct.Hash = fullClientDB.TorrentHashString //needed for index
Storage.UpdateStorageTick(db, tickUpdateStruct)
RunningTorrentArray = append(RunningTorrentArray, *fullClientDB)
}
return RunningTorrentArray
}
//CreateFileListArray creates a file list for a single torrent that is selected and sent to the server
func CreateFileListArray(tclient *torrent.Client, selectedHash string, db *storm.DB, config Settings.FullClientSettings) TorrentFileList {
runningTorrents := tclient.Torrents() //don't need running torrent array since we aren't adding or deleting from storage
torrentFileListStorage := Storage.FetchTorrentFromStorage(db, selectedHash)
TorrentFileListSelected := TorrentFileList{}
TorrentFileStruct := TorrentFile{}
for _, singleTorrent := range runningTorrents {
tempHash := singleTorrent.InfoHash().String()
if tempHash == selectedHash { // if our selection hash equals our torrent hash
torrentFilesRaw := singleTorrent.Files()
Logger.WithFields(logrus.Fields{"torrentFiles": torrentFilesRaw}).Debug("Unable to close tempfile")
for _, singleFile := range torrentFilesRaw {
TorrentFileStruct.TorrentHashString = tempHash
TorrentFileStruct.FileName = singleFile.DisplayPath()
TorrentFileStruct.FilePath = singleFile.Path()
PieceState := singleFile.State()
var downloadedBytes int64
for _, piece := range PieceState {
if piece.Complete {
downloadedBytes = downloadedBytes + piece.Bytes //adding up the bytes in the completed pieces
}
}
TorrentFileStruct.FilePercent = fmt.Sprintf("%.2f", float32(downloadedBytes)/float32(singleFile.Length()))
for i, specificFile := range torrentFileListStorage.TorrentFilePriority { //searching for that specific file in storage
if specificFile.TorrentFilePath == singleFile.DisplayPath() {
TorrentFileStruct.FilePriority = torrentFileListStorage.TorrentFilePriority[i].TorrentFilePriority
}
}
TorrentFileStruct.FileSize = HumanizeBytes(float32(singleFile.Length()))
TorrentFileListSelected.FileList = append(TorrentFileListSelected.FileList, TorrentFileStruct)
}
TorrentFileListSelected.MessageType = "torrentFileList"
TorrentFileListSelected.TotalFiles = len(singleTorrent.Files())
Logger.WithFields(logrus.Fields{"selectedFiles": TorrentFileListSelected}).Debug("Selected Torrent Files")
return TorrentFileListSelected
}
}
return TorrentFileListSelected
}
//CreatePeerListArray create a list of peers for the torrent and displays them
func CreatePeerListArray(tclient *torrent.Client, selectedHash string) PeerFileList {
runningTorrents := tclient.Torrents()
TorrentPeerList := PeerFileList{}
for _, singleTorrent := range runningTorrents {
tempHash := singleTorrent.InfoHash().String()
if (strings.Compare(tempHash, selectedHash)) == 0 {
TorrentPeerList.MessageType = "torrentPeerList"
TorrentPeerList.PeerList = singleTorrent.KnownSwarm()
TorrentPeerList.TotalPeers = len(TorrentPeerList.PeerList)
return TorrentPeerList
}
}
return TorrentPeerList
}
//CreateTorrentDetailJSON creates the json response for a request for more torrent information
func CreateTorrentDetailJSON(tclient *torrent.Client, selectedHash string, torrentStorage *storm.DB) ClientDB {
localTorrentInfo := Storage.FetchTorrentFromStorage(torrentStorage, selectedHash)
runningTorrents := tclient.Torrents()
TorrentDetailStruct := ClientDB{}
for _, singleTorrent := range runningTorrents { //ranging through the running torrents to find the one we are looking for
tempHash := singleTorrent.InfoHash().String()
if tempHash == selectedHash {
Logger.WithFields(logrus.Fields{"torrentHash": tempHash, "detailedInfo": localTorrentInfo}).Info("Creating detailed torrent list")
return TorrentDetailStruct
}
}
return TorrentDetailStruct
}
================================================
FILE: engine/engineHelpers.go
================================================
package engine
import (
"fmt"
"io"
"os"
"time"
"github.com/anacrolix/torrent"
"github.com/asdine/storm"
Settings "github.com/deranjer/goTorrent/settings"
"github.com/deranjer/goTorrent/storage"
Storage "github.com/deranjer/goTorrent/storage"
"github.com/sirupsen/logrus"
)
func secondsToMinutes(inSeconds int64) string {
minutes := inSeconds / 60
seconds := inSeconds % 60
minutesString := fmt.Sprintf("%d", minutes)
secondsString := fmt.Sprintf("%d", seconds)
str := minutesString + " Min/ " + secondsString + " Sec"
return str
}
//VerifyData just verifies the data of a torrent by hash
func VerifyData(singleTorrent *torrent.Torrent) {
singleTorrent.VerifyData()
}
//MakeRange creates a range of pieces to set their priority based on a file
func MakeRange(min, max int) []int {
a := make([]int, max-min+1)
for i := range a {
a[i] = min + i
}
return a
}
//HumanizeBytes returns a nice humanized version of bytes in either GB or MB
func HumanizeBytes(bytes float32) string {
if bytes < 1000000 { //if we have less than 1MB in bytes convert to KB
pBytes := fmt.Sprintf("%.2f", bytes/1024)
pBytes = pBytes + " KB"
return pBytes
}
bytes = bytes / 1024 / 1024 //Converting bytes to a useful measure
if bytes > 1024 {
pBytes := fmt.Sprintf("%.2f", bytes/1024)
pBytes = pBytes + " GB"
return pBytes
}
pBytes := fmt.Sprintf("%.2f", bytes) //If not too big or too small leave it as MB
pBytes = pBytes + " MB"
return pBytes
}
//CopyFile takes a source file string and a destination file string and copies the file
func CopyFile(srcFile string, destFile string) { //TODO move this to our imported copy repo
fileContents, err := os.Open(srcFile)
defer fileContents.Close()
if err != nil {
Logger.WithFields(logrus.Fields{"File": srcFile, "Error": err}).Error("Cannot open source file")
}
outfileContents, err := os.Create(destFile)
defer outfileContents.Close()
if err != nil {
Logger.WithFields(logrus.Fields{"File": destFile, "Error": err}).Error("Cannot open destination file")
}
_, err = io.Copy(outfileContents, fileContents)
if err != nil {
Logger.WithFields(logrus.Fields{"Source File": srcFile, "Destination File": destFile, "Error": err}).Error("Cannot write contents to destination file")
}
}
//SetFilePriority sets the priorities for all of the files in all of the torrents
func SetFilePriority(t *torrent.Client, db *storm.DB) {
storedTorrents := Storage.FetchAllStoredTorrents(db)
for _, singleTorrent := range t.Torrents() {
for _, storedTorrent := range storedTorrents {
if storedTorrent.Hash == singleTorrent.InfoHash().String() {
for _, file := range singleTorrent.Files() {
for _, storedFile := range storedTorrent.TorrentFilePriority {
if storedFile.TorrentFilePath == file.DisplayPath() {
switch storedFile.TorrentFilePriority {
case "High":
file.SetPriority(torrent.PiecePriorityHigh)
case "Normal":
file.SetPriority(torrent.PiecePriorityNormal)
case "Cancel":
file.SetPriority(torrent.PiecePriorityNone)
default:
file.SetPriority(torrent.PiecePriorityNormal)
}
}
}
}
}
}
}
}
//CalculateTorrentSpeed is used to calculate the torrent upload and download speed over time c is current clientdb, oc is last client db to calculate speed over time
func CalculateTorrentSpeed(t *torrent.Torrent, c *ClientDB, oc ClientDB, completedSize int64) {
now := time.Now()
bytes := completedSize
bytesUpload := t.Stats().BytesWrittenData
dt := float32(now.Sub(oc.UpdatedAt)) // get the delta time length between now and last updated
db := float32(bytes - oc.BytesCompleted) //getting the delta bytes
rate := db * (float32(time.Second) / dt) // converting into seconds
dbU := float32(bytesUpload.Int64() - oc.DataBytesWritten)
rateUpload := dbU * (float32(time.Second) / dt)
if rate >= 0 {
rateMB := rate / 1024 / 1024 //creating MB to calculate ETA
c.DownloadSpeed = fmt.Sprintf("%.2f", rateMB)
c.DownloadSpeed = c.DownloadSpeed + " MB/s"
c.downloadSpeedInt = int64(rate)
}
if rateUpload >= 0 {
rateUpload = rateUpload / 1024 / 1024
c.UploadSpeed = fmt.Sprintf("%.2f", rateUpload)
c.UploadSpeed = c.UploadSpeed + " MB/s"
}
c.UpdatedAt = now
}
//CalculateDownloadSize will calculate the download size once file priorities are sorted out
func CalculateDownloadSize(tFromStorage *Storage.TorrentLocal, activeTorrent *torrent.Torrent) int64 {
var totalLength int64
for _, file := range tFromStorage.TorrentFilePriority {
if file.TorrentFilePriority != "Cancel" {
totalLength = totalLength + file.TorrentFileSize
}
}
return totalLength
}
//CalculateCompletedSize will be used to calculate how much of the actual torrent we have completed minus the canceled files (even if they have been partially downloaded)
func CalculateCompletedSize(tFromStorage *Storage.TorrentLocal, activeTorrent *torrent.Torrent) int64 {
var discardByteLength int64
for _, storageFile := range tFromStorage.TorrentFilePriority {
if storageFile.TorrentFilePriority == "Cancel" { //If the file is canceled don't count it as downloaded
for _, activeFile := range activeTorrent.Files() {
if activeFile.DisplayPath() == storageFile.TorrentFilePath { //match the file from storage to active
for _, piece := range activeFile.State() {
if piece.Partial || piece.Complete {
discardByteLength = discardByteLength + piece.Bytes
}
}
}
}
}
}
downloadedLength := activeTorrent.BytesCompleted() - discardByteLength
if downloadedLength < 0 {
downloadedLength = 0
}
return downloadedLength
}
//CalculateTorrentETA is used to estimate the remaining dl time of the torrent based on the speed that the MB are being downloaded
func CalculateTorrentETA(tSize int64, tBytesCompleted int64, c *ClientDB) {
missingBytes := tSize - tBytesCompleted
if missingBytes == 0 {
c.ETA = "Done"
} else if c.downloadSpeedInt == 0 {
c.ETA = "N/A"
} else {
ETASeconds := missingBytes / c.downloadSpeedInt
str := secondsToMinutes(ETASeconds) //converting seconds to minutes + seconds
c.ETA = str
}
}
//CalculateUploadRatio calculates the download to upload ratio so you can see if you are being a good seeder
func CalculateUploadRatio(t *torrent.Torrent, c *ClientDB) string {
if c.TotalUploadedBytes > 0 && t.BytesCompleted() > 0 { //If we have actually started uploading and downloading stuff start calculating our ratio
uploadRatio := fmt.Sprintf("%.2f", float64(c.TotalUploadedBytes)/float64(t.BytesCompleted()))
return uploadRatio
}
uploadRatio := "0.00" //we haven't uploaded anything so no upload ratio just pass a string directly
return uploadRatio
}
//StopTorrent stops the torrent, updates the database and sends a message. Since stoptorrent is called by each loop (individually) no need to call an array
func StopTorrent(singleTorrent *torrent.Torrent, torrentLocalStorage *Storage.TorrentLocal, db *storm.DB) {
if torrentLocalStorage.TorrentStatus == "Stopped" { //if we are already stopped
Logger.WithFields(logrus.Fields{"Torrent Name": torrentLocalStorage.TorrentName}).Info("Torrent Already Stopped, returning...")
return
}
torrentLocalStorage.TorrentStatus = "Stopped"
torrentLocalStorage.MaxConnections = 0
singleTorrent.SetMaxEstablishedConns(0)
DeleteTorrentFromQueues(singleTorrent.InfoHash().String(), db)
Storage.UpdateStorageTick(db, *torrentLocalStorage)
CreateServerPushMessage(ServerPushMessage{MessageType: "serverPushMessage", MessageLevel: "success", Payload: "Torrent Stopped!"}, Conn)
Logger.WithFields(logrus.Fields{"Torrent Name": torrentLocalStorage.TorrentName}).Info("Torrent Stopped Success!")
}
//AddTorrentToForceStart forces torrent to be high priority on start
func AddTorrentToForceStart(torrentLocalStorage *Storage.TorrentLocal, singleTorrent *torrent.Torrent, db *storm.DB) {
torrentQueues := Storage.FetchQueues(db)
for index, torrentHash := range torrentQueues.ActiveTorrents {
if torrentHash == singleTorrent.InfoHash().String() { //If torrent already in active remove from active
torrentQueues.ActiveTorrents = append(torrentQueues.ActiveTorrents[:index], torrentQueues.ActiveTorrents[index+1:]...)
}
}
for index, queuedTorrentHash := range torrentQueues.QueuedTorrents { //Removing from the queued torrents if in queued torrents
if queuedTorrentHash == singleTorrent.InfoHash().String() {
torrentQueues.QueuedTorrents = append(torrentQueues.QueuedTorrents[:index], torrentQueues.QueuedTorrents[index+1:]...)
}
}
singleTorrent.NewReader()
singleTorrent.SetMaxEstablishedConns(80)
torrentQueues.ActiveTorrents = append(torrentQueues.ActiveTorrents, singleTorrent.InfoHash().String())
torrentLocalStorage.TorrentStatus = "ForceStart"
torrentLocalStorage.MaxConnections = 80
for _, file := range singleTorrent.Files() {
for _, sentFile := range torrentLocalStorage.TorrentFilePriority {
if file.DisplayPath() == sentFile.TorrentFilePath {
switch sentFile.TorrentFilePriority {
case "High":
file.SetPriority(torrent.PiecePriorityHigh)
case "Normal":
file.SetPriority(torrent.PiecePriorityNormal)
case "Cancel":
file.SetPriority(torrent.PiecePriorityNone)
default:
file.SetPriority(torrent.PiecePriorityNormal)
}
}
}
}
Logger.WithFields(logrus.Fields{"Torrent Name": torrentLocalStorage.TorrentName}).Info("Adding Torrent to ForceStart Queue")
Storage.UpdateStorageTick(db, *torrentLocalStorage)
Storage.UpdateQueues(db, torrentQueues)
}
//AddTorrentToActive adds a torrent to the active slice
func AddTorrentToActive(torrentLocalStorage *Storage.TorrentLocal, singleTorrent *torrent.Torrent, db *storm.DB) {
torrentQueues := Storage.FetchQueues(db)
if torrentLocalStorage.TorrentStatus == "Stopped" {
Logger.WithFields(logrus.Fields{"Torrent Name": torrentLocalStorage.TorrentName}).Info("Torrent set as stopped, skipping add")
return
}
for _, torrentHash := range torrentQueues.ActiveTorrents {
if torrentHash == singleTorrent.InfoHash().String() { //If torrent already in active skip
return
}
}
for index, queuedTorrentHash := range torrentQueues.QueuedTorrents { //Removing from the queued torrents if in queued torrents
if queuedTorrentHash == singleTorrent.InfoHash().String() {
torrentQueues.QueuedTorrents = append(torrentQueues.QueuedTorrents[:index], torrentQueues.QueuedTorrents[index+1:]...)
}
}
singleTorrent.NewReader()
singleTorrent.SetMaxEstablishedConns(80)
torrentQueues.ActiveTorrents = append(torrentQueues.ActiveTorrents, singleTorrent.InfoHash().String())
torrentLocalStorage.TorrentStatus = "Running"
torrentLocalStorage.MaxConnections = 80
for _, file := range singleTorrent.Files() {
for _, sentFile := range torrentLocalStorage.TorrentFilePriority {
if file.DisplayPath() == sentFile.TorrentFilePath {
switch sentFile.TorrentFilePriority {
case "High":
file.SetPriority(torrent.PiecePriorityHigh)
case "Normal":
file.SetPriority(torrent.PiecePriorityNormal)
case "Cancel":
file.SetPriority(torrent.PiecePriorityNone)
default:
file.SetPriority(torrent.PiecePriorityNormal)
}
}
}
}
Logger.WithFields(logrus.Fields{"Torrent Name": torrentLocalStorage.TorrentName}).Info("Adding Torrent to Active Queue (Manual Call)")
Storage.UpdateStorageTick(db, *torrentLocalStorage)
Storage.UpdateQueues(db, torrentQueues)
}
//RemoveTorrentFromActive forces a torrent to be removed from the active list if the max limit is already there and user forces a new torrent to be added
func RemoveTorrentFromActive(torrentLocalStorage *Storage.TorrentLocal, singleTorrent *torrent.Torrent, db *storm.DB) {
torrentQueues := Storage.FetchQueues(db)
for x, torrentHash := range torrentQueues.ActiveTorrents {
if torrentHash == singleTorrent.InfoHash().String() {
torrentQueues.ActiveTorrents = append(torrentQueues.ActiveTorrents[:x], torrentQueues.ActiveTorrents[x+1:]...)
torrentQueues.QueuedTorrents = append(torrentQueues.QueuedTorrents, torrentHash)
torrentLocalStorage.TorrentStatus = "Queued"
torrentLocalStorage.MaxConnections = 0
singleTorrent.SetMaxEstablishedConns(0)
Storage.UpdateQueues(db, torrentQueues)
//AddTorrentToQueue(torrentLocalStorage, singleTorrent, db) //Adding the lasttorrent from active to queued
Storage.UpdateStorageTick(db, *torrentLocalStorage)
}
}
}
//DeleteTorrentFromQueues deletes the torrent from all queues (for a stop or delete action)
func DeleteTorrentFromQueues(torrentHash string, db *storm.DB) {
torrentQueues := Storage.FetchQueues(db)
for x, torrentHashActive := range torrentQueues.ActiveTorrents { //FOR EXTRA CAUTION deleting it from both queues in case a mistake occurred.
if torrentHash == torrentHashActive {
torrentQueues.ActiveTorrents = append(torrentQueues.ActiveTorrents[:x], torrentQueues.ActiveTorrents[x+1:]...)
Logger.Info("Removing Torrent from Active: ", torrentHash)
}
}
for x, torrentHashQueued := range torrentQueues.QueuedTorrents { //FOR EXTRA CAUTION deleting it from both queues in case a mistake occurred.
if torrentHash == torrentHashQueued {
torrentQueues.QueuedTorrents = append(torrentQueues.QueuedTorrents[:x], torrentQueues.QueuedTorrents[x+1:]...)
Logger.Info("Removing Torrent from Queued", torrentHash)
}
}
for x, torrentHashActive := range torrentQueues.ForcedTorrents { //FOR EXTRA CAUTION deleting it from all queues in case a mistake occurred.
if torrentHash == torrentHashActive {
torrentQueues.ForcedTorrents = append(torrentQueues.ForcedTorrents[:x], torrentQueues.ForcedTorrents[x+1:]...)
Logger.Info("Removing Torrent from Forced: ", torrentHash)
}
}
Storage.UpdateQueues(db, torrentQueues)
Logger.WithFields(logrus.Fields{"Torrent Hash": torrentHash, "TorrentQueues": torrentQueues}).Info("Removing Torrent from all Queues")
}
//AddTorrentToQueue adds a torrent to the queue
func AddTorrentToQueue(torrentLocalStorage *Storage.TorrentLocal, singleTorrent *torrent.Torrent, db *storm.DB) {
torrentQueues := Storage.FetchQueues(db)
for _, torrentHash := range torrentQueues.QueuedTorrents {
if singleTorrent.InfoHash().String() == torrentHash { //don't add duplicate to que but do everything else (TODO, maybe find a better way?)
singleTorrent.SetMaxEstablishedConns(0)
torrentLocalStorage.MaxConnections = 0
torrentLocalStorage.TorrentStatus = "Queued"
Logger.WithFields(logrus.Fields{"TorrentName": torrentLocalStorage.TorrentName}).Info("Adding torrent to the queue, not active")
Storage.UpdateStorageTick(db, *torrentLocalStorage)
return
}
}
torrentQueues.QueuedTorrents = append(torrentQueues.QueuedTorrents, singleTorrent.InfoHash().String())
singleTorrent.SetMaxEstablishedConns(0)
torrentLocalStorage.MaxConnections = 0
torrentLocalStorage.TorrentStatus = "Queued"
Logger.WithFields(logrus.Fields{"TorrentName": torrentLocalStorage.TorrentName}).Info("Adding torrent to the queue, not active")
Storage.UpdateQueues(db, torrentQueues)
Storage.UpdateStorageTick(db, *torrentLocalStorage)
}
//RemoveDuplicatesFromQueues removes any duplicates from torrentQueues.QueuedTorrents (which will happen if it is read in from DB)
func RemoveDuplicatesFromQueues(db *storm.DB) {
torrentQueues := Storage.FetchQueues(db)
for _, torrentHash := range torrentQueues.ActiveTorrents {
for i, queuedHash := range torrentQueues.QueuedTorrents {
if torrentHash == queuedHash {
torrentQueues.QueuedTorrents = append(torrentQueues.QueuedTorrents[:i], torrentQueues.QueuedTorrents[i+1:]...)
}
}
}
Storage.UpdateQueues(db, torrentQueues)
}
//ValidateQueues is a sanity check that runs every tick to make sure the queues are in order... tried to avoid this but seems to be required
func ValidateQueues(db *storm.DB, config Settings.FullClientSettings, tclient *torrent.Client) {
torrentQueues := Storage.FetchQueues(db)
for len(torrentQueues.ActiveTorrents) > config.MaxActiveTorrents {
removeTorrent := torrentQueues.ActiveTorrents[:1]
for _, singleTorrent := range tclient.Torrents() {
if singleTorrent.InfoHash().String() == removeTorrent[0] {
singleTorrentFromStorage := Storage.FetchTorrentFromStorage(db, removeTorrent[0])
RemoveTorrentFromActive(&singleTorrentFromStorage, singleTorrent, db)
}
}
}
torrentQueues = Storage.FetchQueues(db)
for _, singleTorrent := range tclient.Torrents() {
singleTorrentFromStorage := Storage.FetchTorrentFromStorage(db, singleTorrent.InfoHash().String())
if singleTorrentFromStorage.TorrentStatus == "Stopped" {
continue
}
for _, queuedTorrent := range torrentQueues.QueuedTorrents { //If we have a queued torrent that is missing data, and an active torrent that is seeding, then prioritize the missing data one
if singleTorrent.InfoHash().String() == queuedTorrent {
if singleTorrent.BytesMissing() > 0 {
for _, activeTorrent := range torrentQueues.ActiveTorrents {
for _, singleActiveTorrent := range tclient.Torrents() {
if activeTorrent == singleActiveTorrent.InfoHash().String() {
if singleActiveTorrent.Seeding() == true {
singleActiveTFS := Storage.FetchTorrentFromStorage(db, activeTorrent)
Logger.WithFields(logrus.Fields{"TorrentName": singleActiveTFS.TorrentName}).Info("Seeding, Removing from active to add queued")
RemoveTorrentFromActive(&singleActiveTFS, singleActiveTorrent, db)
singleQueuedTFS := Storage.FetchTorrentFromStorage(db, queuedTorrent)
Logger.WithFields(logrus.Fields{"TorrentName": singleQueuedTFS.TorrentName}).Info("Adding torrent to the queue, not active")
AddTorrentToActive(&singleQueuedTFS, singleTorrent, db)
}
}
}
}
}
}
}
}
}
//CalculateTorrentStatus is used to determine what the STATUS column of the frontend will display ll2
func CalculateTorrentStatus(t *torrent.Torrent, c *ClientDB, config Settings.FullClientSettings, tFromStorage *storage.TorrentLocal, bytesCompleted int64, totalSize int64, torrentQueues Storage.TorrentQueues, db *storm.DB) {
if tFromStorage.TorrentStatus == "Stopped" {
c.Status = "Stopped"
return
}
//Only has 2 states in storage, stopped or running, so we know it should be running, and the websocket request handled updating the database with connections and status
for _, torrentHash := range torrentQueues.QueuedTorrents {
if tFromStorage.Hash == torrentHash {
c.Status = "Queued"
return
}
}
bytesMissing := totalSize - bytesCompleted
c.MaxConnections = 80
t.SetMaxEstablishedConns(80)
if t.Seeding() && t.Stats().ActivePeers > 0 && bytesMissing == 0 {
c.Status = "Seeding"
} else if t.Stats().ActivePeers > 0 && bytesMissing > 0 {
c.Status = "Downloading"
} else if t.Stats().ActivePeers == 0 && bytesMissing == 0 {
c.Status = "Completed"
} else if t.Stats().ActivePeers == 0 && bytesMissing > 0 {
c.Status = "Awaiting Peers"
} else {
c.Status = "Unknown"
}
}
================================================
FILE: go.mod
================================================
module github.com/deranjer/goTorrent
go 1.12
require (
github.com/BurntSushi/toml v0.3.1 // indirect
github.com/DataDog/zstd v1.3.5 // indirect
github.com/PuerkitoBio/goquery v1.5.0 // indirect
github.com/Sereal/Sereal v0.0.0-20190226181601-237c2cca198f // indirect
github.com/anacrolix/dht v1.0.1
github.com/anacrolix/torrent v1.1.1
github.com/asdine/storm v2.1.2+incompatible
github.com/dgrijalva/jwt-go v3.2.0+incompatible
github.com/golang/protobuf v1.3.1 // indirect
github.com/gorilla/handlers v1.4.0
github.com/gorilla/mux v1.7.0
github.com/gorilla/websocket v1.4.0
github.com/mitsuse/pushbullet-go v0.1.0
github.com/mmcdole/gofeed v1.0.0-beta2
github.com/mmcdole/goxpp v0.0.0-20181012175147-0068e33feabf // indirect
github.com/otiai10/copy v1.0.1
github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95 // indirect
github.com/robfig/cron v0.0.0-20180505203441-b41be1df6967
github.com/sirupsen/logrus v1.4.0
github.com/spf13/viper v1.3.2
github.com/vmihailenco/msgpack v4.0.3+incompatible // indirect
go.etcd.io/bbolt v1.3.2 // indirect
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
google.golang.org/appengine v1.5.0 // indirect
)
================================================
FILE: go.sum
================================================
bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8=
bou.ke/monkey v1.0.1 h1:zEMLInw9xvNakzUUPjfS4Ds6jYPqCFx3m7bRmG5NH2U=
bou.ke/monkey v1.0.1/go.mod h1:FgHuK96Rv2Nlf+0u1OOVDpCMdsWyOFmeeketDHE7LIg=
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/DataDog/zstd v1.3.5 h1:DtpNbljikUepEPD16hD4LvIcmhnhdLTiW/5pHgbmp14=
github.com/DataDog/zstd v1.3.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo=
github.com/PuerkitoBio/goquery v1.5.0 h1:uGvmFXOA73IKluu/F84Xd1tt/z07GYm8X49XKHP7EJk=
github.com/PuerkitoBio/goquery v1.5.0/go.mod h1:qD2PgZ9lccMbQlc7eEOjaeRlFQON7xY8kdmcsrnKqMg=
github.com/RoaringBitmap/roaring v0.4.7/go.mod h1:8khRDP4HmeXns4xIj9oGrKSz7XTQiJx2zgh7AcNke4w=
github.com/RoaringBitmap/roaring v0.4.17 h1:oCYFIFEMSQZrLHpywH7919esI1VSrQZ0pJXkZPGIJ78=
github.com/RoaringBitmap/roaring v0.4.17/go.mod h1:D3qVegWTmfCaX4Bl5CrBE9hfrSrrXIr8KVNvRsDi1NI=
github.com/Sereal/Sereal v0.0.0-20190226181601-237c2cca198f h1:99C4f5FJQChWyzMSpZPU4eUv3kjFmjxyWy8t2rlbUcs=
github.com/Sereal/Sereal v0.0.0-20190226181601-237c2cca198f/go.mod h1:D0JMgToj/WdxCgd30Kc1UcA9E+WdZoJqeVOuYW7iTBM=
github.com/anacrolix/dht v0.0.0-20180412060941-24cbf25b72a4/go.mod h1:hQfX2BrtuQsLQMYQwsypFAab/GvHg8qxwVi4OJdR1WI=
github.com/anacrolix/dht v0.0.0-20181129074040-b09db78595aa/go.mod h1:Ayu4t+5TsHQ07/P8XzRJqVofv7lU4R1ZTT7KW5+SPFA=
github.com/anacrolix/dht v1.0.1 h1:a7zVMiZWfPiToAUbjMZYeI3UvmsDP3j8vH5EDIAjM9c=
github.com/anacrolix/dht v1.0.1/go.mod h1:dtcIktBFD8YD/7ZcE5nQuuGGfLxcwa8+18mHl+GU+KA=
github.com/anacrolix/dht/v2 v2.0.1 h1:gOHJ+OKqJ4Eb48OYStZm4AlWr1/nSA2TWlzb/+t36SA=
github.com/anacrolix/dht/v2 v2.0.1/go.mod h1:GbTT8BaEtfqab/LPd5tY41f3GvYeii3mmDUK300Ycyo=
github.com/anacrolix/envpprof v0.0.0-20180404065416-323002cec2fa h1:xCaATLKmn39QqLs3tUZYr6eKvezJV+FYvVOLTklxK6U=
github.com/anacrolix/envpprof v0.0.0-20180404065416-323002cec2fa/go.mod h1:KgHhUaQMc8cC0+cEflSgCFNFbKwi5h54gqtVn8yhP7c=
github.com/anacrolix/go-libutp v0.0.0-20180522111405-6baeb806518d/go.mod h1:beQSaSxwH2d9Eeu5ijrEnHei5Qhk+J6cDm1QkWFru4E=
github.com/anacrolix/go-libutp v0.0.0-20180808010927-aebbeb60ea05 h1:Zoniih3jyqtr3I0xFoMvw1USWpg+CbI/zOrcLudr0lc=
github.com/anacrolix/go-libutp v0.0.0-20180808010927-aebbeb60ea05/go.mod h1:POY/GPlrFKRxnOKH1sGAB+NBWMoP+sI+hHJxgcgWbWw=
github.com/anacrolix/log v0.0.0-20180412014343-2323884b361d/go.mod h1:sf/7c2aTldL6sRQj/4UKyjgVZBu2+M2z9wf7MmwPiew=
github.com/anacrolix/log v0.1.0/go.mod h1:sf/7c2aTldL6sRQj/4UKyjgVZBu2+M2z9wf7MmwPiew=
github.com/anacrolix/log v0.2.0 h1:LzaW6XTEk2zcmLZkcZPkJ2mDdnZkOdOTeBH7Kt81ouU=
github.com/anacrolix/log v0.2.0/go.mod h1:sf/7c2aTldL6sRQj/4UKyjgVZBu2+M2z9wf7MmwPiew=
github.com/anacrolix/missinggo v0.0.0-20180522035225-b4a5853e62ff/go.mod h1:b0p+7cn+rWMIphK1gDH2hrDuwGOcbB6V4VXeSsEfHVk=
github.com/anacrolix/missinggo v0.0.0-20180725070939-60ef2fbf63df/go.mod h1:kwGiTUTZ0+p4vAz3VbAI5a30t2YbvemcmspjKwrAz5s=
github.com/anacrolix/missinggo v0.0.0-20181129073415-3237bf955fed/go.mod h1:IN+9GUe7OxKMIs/XeXEbT/rMUolmJzmlZiXHS7FwD/Y=
github.com/anacrolix/missinggo v0.2.1-0.20190310234110-9fbdc9f242a8/go.mod h1:MBJu3Sk/k3ZfGYcS7z18gwfu72Ey/xopPFJJbTi5yIo=
github.com/anacrolix/missinggo v1.1.0 h1:0lZbaNa6zTR1bELAIzCNmRGAtkHuLDPJqTiTtXoAIx8=
github.com/anacrolix/missinggo v1.1.0/go.mod h1:MBJu3Sk/k3ZfGYcS7z18gwfu72Ey/xopPFJJbTi5yIo=
github.com/anacrolix/mmsg v0.0.0-20180515031531-a4a3ba1fc8bb/go.mod h1:x2/ErsYUmT77kezS63+wzZp8E3byYB0gzirM/WMBLfw=
github.com/anacrolix/mmsg v0.0.0-20180808012353-5adb2c1127c0 h1:Fa1XqqLW62lQzEDlNA+QcdJbkfJcxQN0YC8983kj5tU=
github.com/anacrolix/mmsg v0.0.0-20180808012353-5adb2c1127c0/go.mod h1:x8kRaJY/dCrY9Al0PEcj1mb/uFHwP6GCJ9fLl4thEPc=
github.com/anacrolix/sync v0.0.0-20171108081538-eee974e4f8c1/go.mod h1:+u91KiUuf0lyILI6x3n/XrW7iFROCZCG+TjgK8nW52w=
github.com/anacrolix/sync v0.0.0-20180611022320-3c4cb11f5a01/go.mod h1:+u91KiUuf0lyILI6x3n/XrW7iFROCZCG+TjgK8nW52w=
github.com/anacrolix/sync v0.0.0-20180808010631-44578de4e778 h1:XpCDEixzXOB8yaTW/4YBzKrJdMcFI0DzpPTYNv75wzk=
github.com/anacrolix/sync v0.0.0-20180808010631-44578de4e778/go.mod h1:s735Etp3joe/voe2sdaXLcqDdJSay1O0OPnM0ystjqk=
github.com/anacrolix/tagflag v0.0.0-20180109131632-2146c8d41bf0/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw=
github.com/anacrolix/tagflag v0.0.0-20180605133421-f477c8c2f14c/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw=
github.com/anacrolix/tagflag v0.0.0-20180803105420-3a8ff5428f76/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw=
github.com/anacrolix/torrent v0.0.0-20180622074351-fefeef4ee9eb/go.mod h1:3vcFVxgOASslNXHdivT8spyMRBanMCenHRpe0u5vpBs=
github.com/anacrolix/torrent v1.0.1/go.mod h1:ZYV1Z2Wx3jXYSh26mDvneAbk8XIUxfvoVil2GW962zY=
github.com/anacrolix/torrent v1.1.1 h1:f54cvN3950x72hOB8UvzRwEbF5AY3VMj4vPyntgt24Q=
github.com/anacrolix/torrent v1.1.1/go.mod h1:XdYEuC3KuxFQZrQ6iUBXnwKr3IyxeyUlVH6RT8FhyaU=
github.com/anacrolix/utp v0.0.0-20180219060659-9e0e1d1d0572 h1:kpt6TQTVi6gognY+svubHfxxpq0DLU9AfTQyZVc3UOc=
github.com/anacrolix/utp v0.0.0-20180219060659-9e0e1d1d0572/go.mod h1:MDwc+vsGEq7RMw6lr2GKOEqjWny5hO5OZXRVNaBJ2Dk=
github.com/andybalholm/cascadia v1.0.0 h1:hOCXnnZ5A+3eVDX8pvgl4kofXv2ELss0bKcqRySc45o=
github.com/andybalholm/cascadia v1.0.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
github.com/asdine/storm v2.1.2+incompatible h1:dczuIkyqwY2LrtXPz8ixMrU/OFgZp71kbKTHGrXYt/Q=
github.com/asdine/storm v2.1.2+incompatible/go.mod h1:RarYDc9hq1UPLImuiXK3BIWPJLdIygvV3PsInK0FbVQ=
github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4=
github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps=
github.com/bradfitz/iter v0.0.0-20140124041915-454541ec3da2/go.mod h1:PyRFw1Lt2wKX4ZVSQ2mk+PeDa1rxyObEDlApuIsUKuo=
github.com/bradfitz/iter v0.0.0-20190303215204-33e6a9893b0c h1:FUUopH4brHNO2kJoNN3pV+OBEYmgraLT/KHZrMM69r0=
github.com/bradfitz/iter v0.0.0-20190303215204-33e6a9893b0c/go.mod h1:PyRFw1Lt2wKX4ZVSQ2mk+PeDa1rxyObEDlApuIsUKuo=
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
github.com/dustin/go-humanize v0.0.0-20180421182945-02af3965c54e/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw=
github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
github.com/elgatito/upnp v0.0.0-20180711183757-2f244d205f9a h1:2Zw3pxDRTs4nX1WCLAEm27UN0hvjZSge7EaUUQexRZw=
github.com/elgatito/upnp v0.0.0-20180711183757-2f244d205f9a/go.mod h1:afkYpY8JAIL4341N7Zj9xJ5yTovsg6BkWfBFlCzIoF4=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE=
github.com/glycerine/go-unsnap-stream v0.0.0-20181221182339-f9677308dec2 h1:Ujru1hufTHVb++eG6OuNDKMxZnGIvF6o/u8q/8h2+I4=
github.com/glycerine/go-unsnap-stream v0.0.0-20181221182339-f9677308dec2/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE=
github.com/glycerine/goconvey v0.0.0-20180728074245-46e3a41ad493/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24=
github.com/glycerine/goconvey v0.0.0-20190315024820-982ee783a72e h1:SiEs4J3BKVIeaWrH3tKaz3QLZhJ68iJ/A4xrzIoE5+Y=
github.com/glycerine/goconvey v0.0.0-20190315024820-982ee783a72e/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c h1:964Od4U6p2jUkFxvCydnIczKteheJEzHRToSGK3Bnlw=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gopherjs/gopherjs v0.0.0-20190309154008-847fc94819f9 h1:Z0f701LpR4dqO92bP6TnIe3ZURClzJtBhds8R8u1HBE=
github.com/gopherjs/gopherjs v0.0.0-20190309154008-847fc94819f9/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gorilla/handlers v1.4.0 h1:XulKRWSQK5uChr4pEgSE4Tc/OcmnU9GJuSwdog/tZsA=
github.com/gorilla/handlers v1.4.0/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
github.com/gorilla/mux v1.7.0 h1:tOSd0UKHQd6urX6ApfOn4XdBMY6Sh1MfxV3kmaazO+U=
github.com/gorilla/mux v1.7.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gosuri/uilive v0.0.0-20170323041506-ac356e6e42cd/go.mod h1:qkLSc0A5EXSP6B04TrN4oQoxqFI7A8XvoXSlJi8cwk8=
github.com/gosuri/uiprogress v0.0.0-20170224063937-d0567a9d84a1/go.mod h1:C1RTYn4Sc7iEyf6j8ft5dyoZ4212h8G1ol9QQluh5+0=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo=
github.com/huandu/xstrings v1.2.0 h1:yPeWdRnmynF7p+lLYz0H2tthW9lqhMJrQV/U7yy4wX0=
github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4=
github.com/ipfs/go-ipfs v0.4.18/go.mod h1:iXzbK+Wa6eePj3jQg/uY6Uoq5iOwY+GToD/bgaRadto=
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY=
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-sqlite3 v1.7.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/mattn/go-sqlite3 v1.10.0 h1:jbhqpg7tQe4SupckyijYiy0mJJ/pRyHvXf7JdWK860o=
github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitsuse/pushbullet-go v0.1.0 h1:W9izHOpz8uilRBgbYSnqb+LZK/l8Ad4slRTCBFpItG0=
github.com/mitsuse/pushbullet-go v0.1.0/go.mod h1:sJ6Y3IROSfSQNLY/8gtYjq4Gs49DFnrxaqxQA6DVgnM=
github.com/mmcdole/gofeed v1.0.0-beta2 h1:CjQ0ADhAwNSb08zknAkGOEYqr8zfZKfrzgk9BxpWP2E=
github.com/mmcdole/gofeed v1.0.0-beta2/go.mod h1:/BF9JneEL2/flujm8XHoxUcghdTV6vvb3xx/vKyChFU=
github.com/mmcdole/goxpp v0.0.0-20181012175147-0068e33feabf h1:sWGE2v+hO0Nd4yFU/S/mDBM5plIU8v/Qhfz41hkDIAI=
github.com/mmcdole/goxpp v0.0.0-20181012175147-0068e33feabf/go.mod h1:pasqhqstspkosTneA62Nc+2p9SOBBYAPbnmRRWPQ0V8=
github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae h1:VeRdUYdCw49yizlSbMEn2SZ+gT+3IUKx8BqxyQdz+BY=
github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg=
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 h1:lDH9UUVJtmYCjyT0CI4q8xvlXPxeZ0gYCVvWbmPlp88=
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
github.com/otiai10/copy v1.0.1 h1:gtBjD8aq4nychvRZ2CyJvFWAw0aja+VHazDdruZKGZA=
github.com/otiai10/copy v1.0.1/go.mod h1:8bMCJrAqOtN/d9oyh5HR7HhLQMvcGMpGdwRDYsfOCHc=
github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95 h1:+OLn68pqasWca0z5ryit9KGfp3sUsW4Lqg32iRMJyzs=
github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE=
github.com/otiai10/mint v1.2.3 h1:PsrRBmrxR68kyNu6YlqYHbNlItc5vOkuS6LBEsNttVA=
github.com/otiai10/mint v1.2.3/go.mod h1:YnfyPNhBvnY8bW4SGQHCs/aAFhkgySlMZbrF5U0bOVw=
github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/philhofer/fwd v1.0.0 h1:UbZqGr5Y38ApvM/V/jEljVxwocdweyH+vmYvRPBnbqQ=
github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/robfig/cron v0.0.0-20180505203441-b41be1df6967 h1:x7xEyJDP7Hv3LVgvWhzioQqbC/KtuUhTigKlH/8ehhE=
github.com/robfig/cron v0.0.0-20180505203441-b41be1df6967/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k=
github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 h1:GHRpF1pTW19a8tTFrMLUcfWwyC0pnifVo2ClaLq+hP8=
github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5PCi+MFsC7HjREoAz1BU+Mq60+05gifQSsHSDG/8=
github.com/sirupsen/logrus v1.4.0 h1:yKenngtzGh+cUSSh6GWbxW2abRqhYUSR/t/6+2QqNvE=
github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/assertions v0.0.0-20190215210624-980c5ac6f3ac h1:wbW+Bybf9pXxnCFAOWZTqkRjAc7rAIwo2e1ArUhiHxg=
github.com/smartystreets/assertions v0.0.0-20190215210624-980c5ac6f3ac/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s=
github.com/smartystreets/goconvey v0.0.0-20190306220146-200a235640ff h1:86HlEv0yBCry9syNuylzqznKXDK11p6D0DT596yNMys=
github.com/smartystreets/goconvey v0.0.0-20190306220146-200a235640ff/go.mod h1:KSQcGKpxUMHk3nbYzs/tIBAM2iDooCn0BmttHOJEbLs=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI=
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk=
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/viper v1.3.2 h1:VUFqw5KcqRf7i70GOzW7N+Q7+gxVBkSSqiXB12+JQ4M=
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/syncthing/syncthing v0.14.48-rc.4/go.mod h1:nw3siZwHPA6M8iSfjDCWQ402eqvEIasMQOE8nFOxy7M=
github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
github.com/tinylib/msgp v1.1.0 h1:9fQd+ICuRIu/ue4vxJZu6/LzxN0HwMds2nq/0cFvxHU=
github.com/tinylib/msgp v1.1.0/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
github.com/vmihailenco/msgpack v4.0.3+incompatible h1:g+G529Dqo4BY2Gxn5GKENa/3NVK+mu/6hM7G3jEWszQ=
github.com/vmihailenco/msgpack v4.0.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=
github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
github.com/willf/bitset v1.1.9/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
github.com/willf/bitset v1.1.10 h1:NotGKqX0KwQ72NUzqrjZq5ipPNDQex9lo3WpaS8L2sc=
github.com/willf/bitset v1.1.10/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
github.com/willf/bloom v0.0.0-20170505221640-54e3b963ee16/go.mod h1:MmAltL9pDMNTrvUkxdg0k0q5I0suxmuwp3KbyrZLOZ8=
github.com/willf/bloom v2.0.3+incompatible h1:QDacWdqcAUI1MPOwIQZRy9kOR7yxfyEmxX8Wdm2/JPA=
github.com/willf/bloom v2.0.3+incompatible/go.mod h1:MmAltL9pDMNTrvUkxdg0k0q5I0suxmuwp3KbyrZLOZ8=
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
go.etcd.io/bbolt v1.3.2 h1:Z/90sZLPOeCy2PwprqkFa25PdkusRzaj9P8zm/KNyvk=
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180524181706-dfa909b99c79/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190318221613-d196dffd7c2b h1:ZWpVMTsK0ey5WJCu+vVdfMldWq7/ezaOcjnKWIHWVkE=
golang.org/x/net v0.0.0-20190318221613-d196dffd7c2b/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190102155601-82a175fd1598/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190318195719-6c81ef8f67ca h1:o2TLx1bGN3W+Ei0EMU5fShLupLmTOU95KvJJmfYhAzM=
golang.org/x/sys v0.0.0-20190318195719-6c81ef8f67ca/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
================================================
FILE: goTorrentWebUI/.babelrc
================================================
{
"presets": [
"react",
"env",
"stage-2",
],
"plugins": ["transform-class-properties"]
}
================================================
FILE: goTorrentWebUI/acorn
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/acorn/bin/acorn" "$@"
ret=$?
else
node "$basedir/node_modules/acorn/bin/acorn" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/acorn.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\acorn\bin\acorn" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\acorn\bin\acorn" %*
)
================================================
FILE: goTorrentWebUI/ansi-html
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/ansi-html/bin/ansi-html" "$@"
ret=$?
else
node "$basedir/node_modules/ansi-html/bin/ansi-html" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/ansi-html.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\ansi-html\bin\ansi-html" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\ansi-html\bin\ansi-html" %*
)
================================================
FILE: goTorrentWebUI/atob
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/atob/bin/atob.js" "$@"
ret=$?
else
node "$basedir/node_modules/atob/bin/atob.js" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/atob.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\atob\bin\atob.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\atob\bin\atob.js" %*
)
================================================
FILE: goTorrentWebUI/babel
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/babel-cli/bin/babel.js" "$@"
ret=$?
else
node "$basedir/node_modules/babel-cli/bin/babel.js" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/babel-doctor
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/babel-cli/bin/babel-doctor.js" "$@"
ret=$?
else
node "$basedir/node_modules/babel-cli/bin/babel-doctor.js" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/babel-doctor.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\babel-cli\bin\babel-doctor.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\babel-cli\bin\babel-doctor.js" %*
)
================================================
FILE: goTorrentWebUI/babel-external-helpers
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/babel-cli/bin/babel-external-helpers.js" "$@"
ret=$?
else
node "$basedir/node_modules/babel-cli/bin/babel-external-helpers.js" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/babel-external-helpers.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\babel-cli\bin\babel-external-helpers.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\babel-cli\bin\babel-external-helpers.js" %*
)
================================================
FILE: goTorrentWebUI/babel-node
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/babel-cli/bin/babel-node.js" "$@"
ret=$?
else
node "$basedir/node_modules/babel-cli/bin/babel-node.js" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/babel-node.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\babel-cli\bin\babel-node.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\babel-cli\bin\babel-node.js" %*
)
================================================
FILE: goTorrentWebUI/babel.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\babel-cli\bin\babel.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\babel-cli\bin\babel.js" %*
)
================================================
FILE: goTorrentWebUI/babylon
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/babylon/bin/babylon.js" "$@"
ret=$?
else
node "$basedir/node_modules/babylon/bin/babylon.js" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/babylon.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\babylon\bin\babylon.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\babylon\bin\babylon.js" %*
)
================================================
FILE: goTorrentWebUI/browserslist
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/browserslist/cli.js" "$@"
ret=$?
else
node "$basedir/node_modules/browserslist/cli.js" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/browserslist.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\browserslist\cli.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\browserslist\cli.js" %*
)
================================================
FILE: goTorrentWebUI/cssesc
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/cssesc/bin/cssesc" "$@"
ret=$?
else
node "$basedir/node_modules/cssesc/bin/cssesc" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/cssesc.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\cssesc\bin\cssesc" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\cssesc\bin\cssesc" %*
)
================================================
FILE: goTorrentWebUI/csso
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/csso/bin/csso" "$@"
ret=$?
else
node "$basedir/node_modules/csso/bin/csso" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/csso.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\csso\bin\csso" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\csso\bin\csso" %*
)
================================================
FILE: goTorrentWebUI/detect
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/detect-port-alt/bin/detect-port" "$@"
ret=$?
else
node "$basedir/node_modules/detect-port-alt/bin/detect-port" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/detect-port
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/detect-port-alt/bin/detect-port" "$@"
ret=$?
else
node "$basedir/node_modules/detect-port-alt/bin/detect-port" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/detect-port.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\detect-port-alt\bin\detect-port" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\detect-port-alt\bin\detect-port" %*
)
================================================
FILE: goTorrentWebUI/detect.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\detect-port-alt\bin\detect-port" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\detect-port-alt\bin\detect-port" %*
)
================================================
FILE: goTorrentWebUI/errno
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/errno/cli.js" "$@"
ret=$?
else
node "$basedir/node_modules/errno/cli.js" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/errno.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\errno\cli.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\errno\cli.js" %*
)
================================================
FILE: goTorrentWebUI/escodegen
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/escodegen/bin/escodegen.js" "$@"
ret=$?
else
node "$basedir/node_modules/escodegen/bin/escodegen.js" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/escodegen.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\escodegen\bin\escodegen.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\escodegen\bin\escodegen.js" %*
)
================================================
FILE: goTorrentWebUI/esgenerate
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/escodegen/bin/esgenerate.js" "$@"
ret=$?
else
node "$basedir/node_modules/escodegen/bin/esgenerate.js" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/esgenerate.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\escodegen\bin\esgenerate.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\escodegen\bin\esgenerate.js" %*
)
================================================
FILE: goTorrentWebUI/eslint
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/eslint/bin/eslint.js" "$@"
ret=$?
else
node "$basedir/node_modules/eslint/bin/eslint.js" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/eslint.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\eslint\bin\eslint.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\eslint\bin\eslint.js" %*
)
================================================
FILE: goTorrentWebUI/esparse
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/esprima/bin/esparse.js" "$@"
ret=$?
else
node "$basedir/node_modules/esprima/bin/esparse.js" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/esparse.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\esprima\bin\esparse.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\esprima\bin\esparse.js" %*
)
================================================
FILE: goTorrentWebUI/esvalidate
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/esprima/bin/esvalidate.js" "$@"
ret=$?
else
node "$basedir/node_modules/esprima/bin/esvalidate.js" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/esvalidate.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\esprima\bin\esvalidate.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\esprima\bin\esvalidate.js" %*
)
================================================
FILE: goTorrentWebUI/fonts/index.css
================================================
* {
font-family: Roboto, sans-serif;
}
@font-face {
font-family: 'Roboto';
src: url('Roboto-Regular-webfont.eot');
src: url('Roboto-Regular-webfont.eot?#iefix') format('embedded-opentype'),
url('Roboto-Regular-webfont.woff') format('woff'),
url('Roboto-Regular-webfont.ttf') format('truetype'),
url('Roboto-Regular-webfont.svg#RobotoRegular') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Roboto';
src: url('Roboto-Italic-webfont.eot');
src: url('Roboto-Italic-webfont.eot?#iefix') format('embedded-opentype'),
url('Roboto-Italic-webfont.woff') format('woff'),
url('Roboto-Italic-webfont.ttf') format('truetype'),
url('Roboto-Italic-webfont.svg#RobotoItalic') format('svg');
font-weight: normal;
font-style: italic;
}
@font-face {
font-family: 'Roboto';
src: url('Roboto-Bold-webfont.eot');
src: url('Roboto-Bold-webfont.eot?#iefix') format('embedded-opentype'),
url('Roboto-Bold-webfont.woff') format('woff'),
url('Roboto-Bold-webfont.ttf') format('truetype'),
url('Roboto-Bold-webfont.svg#RobotoBold') format('svg');
font-weight: bold;
font-style: normal;
}
@font-face {
font-family: 'Roboto';
src: url('Roboto-BoldItalic-webfont.eot');
src: url('Roboto-BoldItalic-webfont.eot?#iefix') format('embedded-opentype'),
url('Roboto-BoldItalic-webfont.woff') format('woff'),
url('Roboto-BoldItalic-webfont.ttf') format('truetype'),
url('Roboto-BoldItalic-webfont.svg#RobotoBoldItalic') format('svg');
font-weight: bold;
font-style: italic;
}
@font-face {
font-family: 'Roboto';
src: url('Roboto-Thin-webfont.eot');
src: url('Roboto-Thin-webfont.eot?#iefix') format('embedded-opentype'),
url('Roboto-Thin-webfont.woff') format('woff'),
url('Roboto-Thin-webfont.ttf') format('truetype'),
url('Roboto-Thin-webfont.svg#RobotoThin') format('svg');
font-weight: 200;
font-style: normal;
}
@font-face {
font-family: 'Roboto';
src: url('Roboto-ThinItalic-webfont.eot');
src: url('Roboto-ThinItalic-webfont.eot?#iefix') format('embedded-opentype'),
url('Roboto-ThinItalic-webfont.woff') format('woff'),
url('Roboto-ThinItalic-webfont.ttf') format('truetype'),
url('Roboto-ThinItalic-webfont.svg#RobotoThinItalic') format('svg'); (under the Apache Software License).
font-weight: 200;
font-style: italic;
}
@font-face {
font-family: 'Roboto';
src: url('Roboto-Light-webfont.eot');
src: url('Roboto-Light-webfont.eot?#iefix') format('embedded-opentype'),
url('Roboto-Light-webfont.woff') format('woff'),
url('Roboto-Light-webfont.ttf') format('truetype'),
url('Roboto-Light-webfont.svg#RobotoLight') format('svg');
font-weight: 100;
font-style: normal;
}
@font-face {
font-family: 'Roboto';
src: url('Roboto-LightItalic-webfont.eot');
src: url('Roboto-LightItalic-webfont.eot?#iefix') format('embedded-opentype'),
url('Roboto-LightItalic-webfont.woff') format('woff'),
url('Roboto-LightItalic-webfont.ttf') format('truetype'),
url('Roboto-LightItalic-webfont.svg#RobotoLightItalic') format('svg');
font-weight: 100;
font-style: italic;
}
@font-face {
font-family: 'Roboto';
src: url('Roboto-Medium-webfont.eot');
src: url('Roboto-Medium-webfont.eot?#iefix') format('embedded-opentype'),
url('Roboto-Medium-webfont.woff') format('woff'),
url('Roboto-Medium-webfont.ttf') format('truetype'),
url('Roboto-Medium-webfont.svg#RobotoMedium') format('svg');
font-weight: 300;
font-style: normal;
}
@font-face {
font-family: 'Roboto';
src: url('Roboto-MediumItalic-webfont.eot');
src: url('Roboto-MediumItalic-webfont.eot?#iefix') format('embedded-opentype'),
url('Roboto-MediumItalic-webfont.woff') format('woff'),
url('Roboto-MediumItalic-webfont.ttf') format('truetype'),
url('Roboto-MediumItalic-webfont.svg#RobotoMediumItalic') format('svg');
font-weight: 300;
font-style: italic;
}
================================================
FILE: goTorrentWebUI/handlebars
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/handlebars/bin/handlebars" "$@"
ret=$?
else
node "$basedir/node_modules/handlebars/bin/handlebars" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/handlebars.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\handlebars\bin\handlebars" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\handlebars\bin\handlebars" %*
)
================================================
FILE: goTorrentWebUI/he
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/he/bin/he" "$@"
ret=$?
else
node "$basedir/node_modules/he/bin/he" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/he.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\he\bin\he" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\he\bin\he" %*
)
================================================
FILE: goTorrentWebUI/html-minifier
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/html-minifier/cli.js" "$@"
ret=$?
else
node "$basedir/node_modules/html-minifier/cli.js" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/html-minifier.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\html-minifier\cli.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\html-minifier\cli.js" %*
)
================================================
FILE: goTorrentWebUI/import-local-fixture
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/import-local/fixtures/cli.js" "$@"
ret=$?
else
node "$basedir/node_modules/import-local/fixtures/cli.js" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/import-local-fixture.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\import-local\fixtures\cli.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\import-local\fixtures\cli.js" %*
)
================================================
FILE: goTorrentWebUI/internal-ip
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/internal-ip/cli.js" "$@"
ret=$?
else
node "$basedir/node_modules/internal-ip/cli.js" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/internal-ip.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\internal-ip\cli.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\internal-ip\cli.js" %*
)
================================================
FILE: goTorrentWebUI/is-ci
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/is-ci/bin.js" "$@"
ret=$?
else
node "$basedir/node_modules/is-ci/bin.js" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/is-ci.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\is-ci\bin.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\is-ci\bin.js" %*
)
================================================
FILE: goTorrentWebUI/jest
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/jest/bin/jest.js" "$@"
ret=$?
else
node "$basedir/node_modules/jest/bin/jest.js" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/jest-runtime
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/jest-runtime/bin/jest-runtime.js" "$@"
ret=$?
else
node "$basedir/node_modules/jest-runtime/bin/jest-runtime.js" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/jest-runtime.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\jest-runtime\bin\jest-runtime.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\jest-runtime\bin\jest-runtime.js" %*
)
================================================
FILE: goTorrentWebUI/jest.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\jest\bin\jest.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\jest\bin\jest.js" %*
)
================================================
FILE: goTorrentWebUI/js-yaml
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/js-yaml/bin/js-yaml.js" "$@"
ret=$?
else
node "$basedir/node_modules/js-yaml/bin/js-yaml.js" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/js-yaml.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\js-yaml\bin\js-yaml.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\js-yaml\bin\js-yaml.js" %*
)
================================================
FILE: goTorrentWebUI/jsesc
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/jsesc/bin/jsesc" "$@"
ret=$?
else
node "$basedir/node_modules/jsesc/bin/jsesc" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/jsesc.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\jsesc\bin\jsesc" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\jsesc\bin\jsesc" %*
)
================================================
FILE: goTorrentWebUI/json5
================================================
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/json5/lib/cli.js" "$@"
ret=$?
else
node "$basedir/node_modules/json5/lib/cli.js" "$@"
ret=$?
fi
exit $ret
================================================
FILE: goTorrentWebUI/json5.cmd
================================================
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\json5\lib\cli.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\json5\lib\cli.js" %*
)
================================================
FILE: goTorrentWebUI/lib/BackendComm/backendWebsocket.js
================================================
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactDom = require('react-dom');
var _reactDom2 = _interopRequireDefault(_reactDom);
var _reactTooltip = require('react-tooltip');
var _reactTooltip2 = _interopRequireDefault(_reactTooltip);
var _InfoOutline = require('material-ui-icons/InfoOutline');
var _InfoOutline2 = _interopRequireDefault(_InfoOutline);
var _reactRedux = require('react-redux');
var _actions = require('../store/actions');
var actionTypes = _interopRequireWildcard(_actions);
var _Select = require('material-ui/Select/Select');
var _Select2 = _interopRequireDefault(_Select);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var title = document.title; //Set the number of active torrents in the title
var torrents = [];
var peerList = [];
var fileList = [];
var RSSList = [];
var RSSTorrentList = [];
var torrentListRequest = {
MessageType: "torrentListRequest"
//websocket is started in kickwebsocket.js and is picked up here so "ws" is already defined 22
};ws.onmessage = function (evt) {
//When we recieve a message from the websocket
var serverMessage = JSON.parse(evt.data);
//console.log("message", serverMessage.MessageType)
switch (serverMessage.MessageType) {
case "torrentList":
//console.log("Recieved Client Update...", serverMessage)
//var serverMessage = JSON.parse(evt.data);
torrents = []; //clearing out the torrent array to make room for new (so that it does keep adding)
for (var i = 0; i < serverMessage.total; i++) {
var _torrents$push;
torrents.push((_torrents$push = {
TorrentHashString: serverMessage.data[i].TorrentHashString,
TorrentName: serverMessage.data[i].TorrentName,
DownloadedSize: serverMessage.data[i].DownloadedSize,
Size: serverMessage.data[i].Size,
DownloadSpeed: serverMessage.data[i].DownloadSpeed,
UploadSpeed: serverMessage.data[i].UploadSpeed,
PercentDone: serverMessage.data[i].PercentDone,
StoragePath: serverMessage.data[i].StoragePath,
DateAdded: serverMessage.data[i].DateAdded,
SourceType: serverMessage.data[i].SourceType,
Status: serverMessage.data[i].Status,
BytesCompleted: serverMessage.data[i].BytesCompleted,
ActivePeers: serverMessage.data[i].ActivePeers,
ETA: serverMessage.data[i].ETA,
TotalUploadedSize: serverMessage.data[i].TotalUploadedSize,
Ratio: serverMessage.data[i].UploadRatio
}, _defineProperty(_torrents$push, 'DateAdded', serverMessage.data[i].DateAdded), _defineProperty(_torrents$push, 'FileNumber', serverMessage.data[i].NumberofFiles), _defineProperty(_torrents$push, 'PieceNumber', serverMessage.data[i].NumberofPieces), _defineProperty(_torrents$push, 'MaxConnections', serverMessage.data[i].MaxConnections), _torrents$push));
}
var newTitle = '(' + serverMessage.total + ')' + title; //updating the title
document.title = newTitle;
break;
case "torrentPeerList":
peerList = []; //clearing out the peerlist array to make room for new (so that it does keep adding)
for (var i = 0; i < serverMessage.TotalPeers; i++) {
peerList.push({
PeerID: serverMessage.PeerList[i].Id.toString(),
IP: serverMessage.PeerList[i].IP,
Port: serverMessage.PeerList[i].Port,
Source: serverMessage.PeerList[i].Source,
SupportsEncryption: serverMessage.PeerList[i].SupportsEncryption.toString()
});
}
break;
case "torrentFileList":
fileList = [];
for (var i = 0; i < serverMessage.TotalFiles; i++) {
fileList.push({
FileName: serverMessage.FileList[i].FileName,
FilePath: serverMessage.FileList[i].FilePath,
FileSize: serverMessage.FileList[i].FileSize,
FilePercent: serverMessage.FileList[i].FilePercent,
FilePriority: serverMessage.FileList[i].FilePriority
});
}
console.log("filelist", fileList);
break;
case "speedTab":
console.log("Speedtab data requested");
break;
case "loggerData":
console.log("Logger data requested");
break;
case "rssList":
console.log("RSSListRequest recieved", evt.data);
RSSList = [];
for (var i = 0; i < serverMessage.TotalRSSFeeds; i++) {
RSSList.push({
RSSURL: serverMessage.RSSFeeds[i].RSSFeedURL,
RSSName: serverMessage.RSSFeeds[i].RSSName
});
}
console.log("RSSURLS", RSSList);
console.log("FIRSTURL", RSSList[1]);
console.log("FULLURL", RSSList[1].RSSURL);
break;
case "rssTorrentList":
//console.log("RSSTorrentList recieved", evt.data)
RSSTorrentList = [];
for (var i = 0; i < serverMessage.TotalTorrents; i++) {
RSSTorrentList.push({
TorrentName: serverMessage.Torrents[i].Title,
TorrentLink: serverMessage.Torrents[i].Link,
PublishDate: serverMessage.Torrents[i].PubDate
});
}
}
};
ws.onclose = function () {
console.log('Closing connection');
};
var divStyle = {
display: 'inline-block',
paddingTop: '10px',
paddingLeft: '10px'
};
var buttonStyle = {
fontSize: '60px'
};
var BackendSocket = function (_React$Component) {
_inherits(BackendSocket, _React$Component);
function BackendSocket() {
var _ref;
var _temp, _this, _ret;
_classCallCheck(this, BackendSocket);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = BackendSocket.__proto__ || Object.getPrototypeOf(BackendSocket)).call.apply(_ref, [this].concat(args))), _this), _this.selectionHandler = function (selectionHashes, selectedTab) {
switch (selectedTab) {
case 0:
console.log("general tab information requested");
break;
case 1:
var peerListHashes = {
MessageType: "torrentPeerListRequest",
Payload: {"PeerListHash": selectionHashes}
};
console.log("Peers tab information requested", peerListHashes);
ws.send(JSON.stringify(peerListHashes));
break;
case 2:
var fileListHashes = {
MessageType: "torrentFileListRequest",
Payload: {"FileListHash": selectionHashes[0]}
};
console.log("Files tab information requested", fileListHashes);
ws.send(JSON.stringify(fileListHashes));
break;
case 3:
console.log("Speed tab information requested");
break;
case 4:
console.log("Logger tab information requested");
break;
default:
console.log("default tab");
break;
}
}, _this.testSelectionLength = function (selection) {
if (nextProps.selectionHashes.length > 1) {
return true;
}
return false;
}, _temp), _possibleConstructorReturn(_this, _ret);
}
_createClass(BackendSocket, [{
key: 'componentDidMount',
value: function componentDidMount() {
var _this2 = this;
this.timerID = setInterval(function () {
return _this2.tick();
}, 2000);
}
}, {
key: 'componentWillUnmount',
value: function componentWillUnmount() {
clearInterval(this.timerID);
}
}, {
key: 'tick',
value: function tick() {
// this tick is the main tick that updates ALL of the components that update on tick... which is a lot
if (this.props.RSSList != RSSList & this.props.RSSModalOpen == true) {
this.props.newRSSFeedStore(RSSList); //pushing the new RSSList to Redux
}
if (this.props.RSSTorrentList != RSSTorrentList & this.props.RSSModalOpen == true) {
this.props.RSSTorrentList(RSSTorrentList); //pushing the new RSSTorrentList to Redux
}
ws.send(JSON.stringify(torrentListRequest)); //talking to the server to get the torrent list
//console.log("Torrentlist", torrents)
this.props.setButtonState(this.props.selection); //forcing an update to the buttons
this.props.newTorrentList(torrents); //sending the list of torrents to torrentlist.js
if (this.props.selectionHashes.length === 1) {
switch (this.props.selectedTab) {
case 1:
var peerListHashes = {
MessageType: "torrentPeerListRequest",
Payload: {"PeerListHash": this.props.selectionHashes}
};
ws.send(JSON.stringify(peerListHashes));
this.props.newPeerList(peerList);
break;
case 2:
var fileListHashes = {
MessageType: "torrentFileListRequest",
Payload: {"FileListHash": this.props.selectionHashes[0]}
};
ws.send(JSON.stringify(fileListHashes));
this.props.newFileList(fileList);
break;
}
}
}
}, {
key: 'componentWillReceiveProps',
value: function componentWillReceiveProps(nextProps) {
console.log("Lenght", nextProps.selectionHashes.length, "value", nextProps.selectionHashes);
if (nextProps.selectionHashes.length === 1) {
//if we have a selection pass it on for the tabs to verify
this.selectionHandler(nextProps.selectionHashes, nextProps.selectedTab);
}
}
}, {
key: 'render',
value: function render() {
return _react2.default.createElement(
'div',
{ style: divStyle },
_react2.default.createElement(_InfoOutline2.default, { styles: buttonStyle, color: 'primary', 'data-tip': 'BackendStatus: Green=Good', 'aria-label': 'Settings' })
);
}
}]);
return BackendSocket;
}(_react2.default.Component);
var mapStateToProps = function mapStateToProps(state) {
return {
selectionHashes: state.selectionHashes,
selectedTab: state.selectedTab,
selection: state.selection,
RSSModalOpen: state.RSSModalOpen,
RSSTorrentList: state.RSSTorrentList
};
};
var mapDispatchToProps = function mapDispatchToProps(dispatch) {
return {
newTorrentList: function newTorrentList(torrentList) {
return dispatch({ type: actionTypes.TORRENT_LIST, torrentList: torrentList });
},
newPeerList: function newPeerList(peerList) {
return dispatch({ type: actionTypes.PEER_LIST, peerList: peerList });
},
newFileList: function newFileList(fileList) {
return dispatch({ type: actionTypes.FILE_LIST, fileList: fileList });
},
setButtonState: function setButtonState(buttonState) {
return dispatch({ type: actionTypes.SET_BUTTON_STATE, buttonState: buttonState });
},
newRSSFeedStore: function newRSSFeedStore(RSSList) {
return dispatch({ type: actionTypes.NEW_RSS_FEED_STORE, RSSList: RSSList });
},
RSSTorrentList: function RSSTorrentList(_RSSTorrentList) {
return dispatch({ type: actionTypes.RSS_TORRENT_LIST, RSSTorrentList: _RSSTorrentList });
}
//changeSelection: (selection) => dispatch({type: actionTypes.CHANGE_SELECTION, selection}),//forcing an update to the buttons
};
};
exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(BackendSocket);
================================================
FILE: goTorrentWebUI/lib/BottomMenu/Tabs/fileTab.js
================================================
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactDom = require('react-dom');
var _reactDom2 = _interopRequireDefault(_reactDom);
var _Button = require('material-ui/Button');
var _Button2 = _interopRequireDefault(_Button);
var _progressBarCell = require('../../CustomCells/progressBarCell');
var _dxReactGrid = require('@devexpress/dx-react-grid');
var _dxReactGridMaterialUi = require('@devexpress/dx-react-grid-material-ui');
var _reactRedux = require('react-redux');
var _actions = require('../../store/actions');
var actionTypes = _interopRequireWildcard(_actions);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var FileTab = function (_React$Component) {
_inherits(FileTab, _React$Component);
function FileTab(props) {
_classCallCheck(this, FileTab);
var _this = _possibleConstructorReturn(this, (FileTab.__proto__ || Object.getPrototypeOf(FileTab)).call(this, props));
_this.changeSelection = function (selection) {
console.log("Filelist is changing selection now", selection);
_this.setState({ selected: selection });
if (selection.length > 0) {
//if selection is empty buttons will be default and selectionHashes will be blanked out and pushed to redux
console.log("Getting the selected Rows");
var selectedRows = []; //array of all the selected Rows
selection.forEach(function (element) {
selectedRows.push(_this.props.fileList[element]); //pushing the selected rows out of torrentlist
});
_this.setState({ fileSelection: selectedRows });
}
};
_this.sendPriorityRequest = function (priority, sendfileNames) {
_this.state.fileSelection.forEach(function (element) {
console.log("element", element);
sendFileNames.push(element.FilePath);
});
var setFilePriority = {
MessageType: "setFilePriority",
Payload: sendFileNames
};
console.log(JSON.stringify(setFilePriority));
ws.send(JSON.stringify(setFilePriority));
};
_this.setHighPriority = function () {
var priorty = "High";
var selectionHash = _this.props.selectionHashes[0]; //getting the first element (should be the only one)
var sendFileNames = [selectionHash, "High"]; // adding the selection hash as the first element will be stripped out by the server, second element is the prioty request
};
_this.setNormalPriority = function () {
var priorty = "Normal";
var selectionHash = _this.props.selectionHashes[0]; //getting the first element (should be the only one)
var sendFileNames = [selectionHash, "Normal"]; // adding the selection hash as the first element will be stripped out by the server, second element is the prioty request
};
_this.setCancelPriority = function () {
var priorty = "Cancel";
var selectionHash = _this.props.selectionHashes[0]; //getting the first element (should be the only one)
var sendFileNames = [selectionHash, "Cancel"]; // adding the selection hash as the first element will be stripped out by the server, second element is the prioty request
};
_this.state = { //rows are stored in redux they are sent over from the server
columns: [{ name: 'FileName', title: 'File Name' }, { name: 'FilePath', title: 'File Path' }, { name: 'FileSize', title: 'File Size' }, { name: 'FilePercent', title: 'File Percent' }, { name: 'FilePriority', title: 'File Priority' }],
sorting: [],
columnOrder: ['FileName', 'FilePath', 'FileSize', 'FilePercent', 'FilePriority'],
columnWidths: { FileName: 450, FilePath: 650, FileSize: 100, FilePercent: 100, FilePriority: 75 },
fileSelection: [],
selected: []
};
_this.changeColumnOrder = function (columnOrder) {
return _this.setState({ columnOrder: columnOrder });
};
_this.changeColumnWidths = function (columnWidths) {
return _this.setState({ columnWidths: columnWidths });
};
_this.changeSorting = function (sorting) {
return _this.setState({ sorting: sorting });
};
return _this;
}
_createClass(FileTab, [{
key: 'render',
value: function render() {
return (
//Buttons here
_react2.default.createElement(
'div',
null,
'Set File Priority:',
_react2.default.createElement(
_Button2.default,
{ raised: true, color: 'primary', onClick: this.setHighPriority },
'High'
),
_react2.default.createElement(
_Button2.default,
{ raised: true, color: 'primary', onClick: this.setNormalPriority },
'Normal'
),
_react2.default.createElement(
_Button2.default,
{ raised: true, color: 'accent', onClick: this.setCancelPriority },
'Do Not Download'
),
_react2.default.createElement(
_dxReactGridMaterialUi.Grid,
{ rows: this.props.fileList, columns: this.state.columns },
_react2.default.createElement(_dxReactGrid.SortingState, { sorting: this.state.sorting, onSortingChange: this.changeSorting }),
_react2.default.createElement(_dxReactGrid.LocalSorting, null),
_react2.default.createElement(_dxReactGridMaterialUi.DragDropContext, null),
_react2.default.createElement(_dxReactGrid.SelectionState, { onSelectionChange: this.changeSelection, selection: this.state.selection }),
_react2.default.createElement(_dxReactGridMaterialUi.VirtualTableView, { height: 300, tableCellTemplate: function tableCellTemplate(_ref) {
var row = _ref.row,
column = _ref.column,
style = _ref.style;
if (column.name === 'FilePercent') {
return _react2.default.createElement(_progressBarCell.ProgressBarCell, { value: row.FilePercent * 100, style: style });
}
return undefined;
} }),
'/>',
_react2.default.createElement(_dxReactGridMaterialUi.TableColumnResizing, { columnWidths: this.state.columnWidths, onColumnWidthsChange: this.changeColumnWidths }),
_react2.default.createElement(_dxReactGridMaterialUi.TableColumnReordering, { order: this.state.columnOrder, onOrderChange: this.changeColumnOrder }),
_react2.default.createElement(_dxReactGridMaterialUi.TableSelection, { selectByRowClick: true, highlightSelected: true }),
_react2.default.createElement(_dxReactGridMaterialUi.TableHeaderRow, { allowSorting: true, allowResizing: true, allowDragging: true })
)
)
);
}
}]);
return FileTab;
}(_react2.default.Component);
var mapStateToProps = function mapStateToProps(state) {
return {
selectionHashes: state.selectionHashes,
fileList: state.fileList
//fileSelectionNames: state.fileSelectionNames,
};
};
var mapDispatchToProps = function mapDispatchToProps(dispatch) {
return {
//changeFileSelection: (fileSelection) => dispatch({type: actionTypes.CHANGE_FILE_SELECTION, fileSelection}),
sendSelectionHashes: function sendSelectionHashes(selectionHashes) {
return dispatch({ type: actionTypes.SELECTION_HASHES, selectionHashes: selectionHashes });
}
};
};
exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(FileTab);
================================================
FILE: goTorrentWebUI/lib/BottomMenu/Tabs/generalTab.js
================================================
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactDom = require('react-dom');
var _reactDom2 = _interopRequireDefault(_reactDom);
var _styles = require('material-ui/styles');
var _Paper = require('material-ui/Paper');
var _Paper2 = _interopRequireDefault(_Paper);
var _Grid = require('material-ui/Grid');
var _Grid2 = _interopRequireDefault(_Grid);
var _reactRedux = require('react-redux');
var _actions = require('../../store/actions');
var actionTypes = _interopRequireWildcard(_actions);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var styles = function styles(theme) {
return {
root: {
flexGrow: 1,
marginTop: 0
},
paper: {
padding: 16,
textAlign: 'left',
color: theme.palette.text.primary
},
floatRight: {
float: 'right'
}
};
};
var GeneralTab = function (_React$Component) {
_inherits(GeneralTab, _React$Component);
function GeneralTab(props) {
_classCallCheck(this, GeneralTab);
var _this = _possibleConstructorReturn(this, (GeneralTab.__proto__ || Object.getPrototypeOf(GeneralTab)).call(this, props));
_this.componentWillReceiveProps = function () {
//console.log("recieving props in generaltab", "TYPE", this.props.selectionHashes[Object.keys(this.props.selectionHashes)[0]])
if (_this.props.selectionHashes.length === 1) {
//if one torrent is selected
var selectionHashTemp = _this.props.selectionHashes[Object.keys(_this.props.selectionHashes)[0]]; // extract out the hash of the single selection
var selectedTorrentTemp = [];
_this.props.torrentList.forEach(function (singleTorrent) {
if (singleTorrent.TorrentHashString === selectionHashTemp) {
selectedTorrentTemp = singleTorrent;
}
});
//selectedTorrentTemp = this.props.torrentList.filter(torrent => torrent.TorrentHashString === this.props.selectionHashes)
//console.log("SelectedTorrentTemp", selectedTorrentTemp)
_this.setState({ selectedTorrent: selectedTorrentTemp });
} else {
_this.setState({ selectedTorrent: [] });
}
};
_this.state = {
selectedTorrent: []
};
return _this;
}
_createClass(GeneralTab, [{
key: 'render',
value: function render() {
var classes = this.props.classes;
return _react2.default.createElement(
'div',
{ className: classes.root },
_react2.default.createElement(
_Grid2.default,
{ container: true, spacing: 8 },
_react2.default.createElement(
_Grid2.default,
{ item: true, xs: 12, sm: 4 },
_react2.default.createElement(
_Paper2.default,
{ className: classes.paper },
'Torrent Name: ',
_react2.default.createElement(
'span',
{ className: classes.floatRight },
this.state.selectedTorrent["TorrentName"],
' '
)
),
_react2.default.createElement(
_Paper2.default,
{ className: classes.paper },
'Torrent Size: ',
_react2.default.createElement(
'span',
{ className: classes.floatRight },
this.state.selectedTorrent["Size"],
' '
),
' '
),
_react2.default.createElement(
_Paper2.default,
{ className: classes.paper },
'Storage Path: ',
_react2.default.createElement(
'span',
{ className: classes.floatRight },
this.state.selectedTorrent["StoragePath"],
' '
),
' '
),
_react2.default.createElement(
_Paper2.default,
{ className: classes.paper },
'Date Added: ',
_react2.default.createElement(
'span',
{ className: classes.floatRight },
' ',
this.state.selectedTorrent["DateAdded"],
' '
),
' '
),
_react2.default.createElement(
_Paper2.default,
{ className: classes.paper },
'Source Type: ',
_react2.default.createElement(
'span',
{ className: classes.floatRight },
' ',
this.state.selectedTorrent["SourceType"],
' '
),
' '
),
_react2.default.createElement(
_Paper2.default,
{ className: classes.paper },
'Label: ',
_react2.default.createElement(
'span',
{ className: classes.floatRight },
' None '
),
' '
),
_react2.default.createElement(
_Paper2.default,
{ className: classes.paper },
'Torrent Hash: ',
_react2.default.createElement(
'span',
{ className: classes.floatRight },
' ',
this.state.selectedTorrent["TorrentHashString"],
' '
),
' '
)
),
_react2.default.createElement(
_Grid2.default,
{ item: true, xs: 12, sm: 4 },
_react2.default.createElement(
_Paper2.default,
{ className: classes.paper },
'Status: ',
_react2.default.createElement(
'span',
{ className: classes.floatRight },
this.state.selectedTorrent["Status"],
' '
),
' '
),
_react2.default.createElement(
_Paper2.default,
{ className: classes.paper },
'Percent Done: ',
_react2.default.createElement(
'span',
{ className: classes.floatRight },
this.state.selectedTorrent["PercentDone"],
' '
),
' '
),
_react2.default.createElement(
_Paper2.default,
{ className: classes.paper },
'Torrent DL Amount: ',
_react2.default.createElement(
'span',
{ className: classes.floatRight },
this.state.selectedTorrent["DownloadedSize"],
' '
),
' '
),
_react2.default.createElement(
_Paper2.default,
{ className: classes.paper },
'Total Upload Amount: ',
_react2.default.createElement(
'span',
{ className: classes.floatRight },
this.state.selectedTorrent["TotalUploadedSize"],
' '
),
' '
),
_react2.default.createElement(
_Paper2.default,
{ className: classes.paper },
'Seeding Ratio: ',
_react2.default.createElement(
'span',
{ className: classes.floatRight },
this.state.selectedTorrent["Ratio"],
' '
),
' '
),
_react2.default.createElement(
_Paper2.default,
{ className: classes.paper },
'ETA: ',
_react2.default.createElement(
'span',
{ className: classes.floatRight },
this.state.selectedTorrent["ETA"],
' '
),
' '
),
_react2.default.createElement(
_Paper2.default,
{ className: classes.paper },
'Max Connections: ',
_react2.default.createElement(
'span',
{ className: classes.floatRight },
this.state.selectedTorrent["MaxConnections"],
' '
),
' '
)
),
_react2.default.createElement(
_Grid2.default,
{ item: true, xs: 12, sm: 4 },
_react2.default.createElement(
_Paper2.default,
{ className: classes.paper },
'Number of Files: ',
_react2.default.createElement(
'span',
{ className: classes.floatRight },
this.state.selectedTorrent["FileNumber"],
' '
),
' '
),
_react2.default.createElement(
_Paper2.default,
{ className: classes.paper },
'Number of Pieces: ',
_react2.default.createElement(
'span',
{ className: classes.floatRight },
this.state.selectedTorrent["PieceNumber"],
' '
),
' '
)
)
)
);
}
}]);
return GeneralTab;
}(_react2.default.Component);
var mapStateToProps = function mapStateToProps(state) {
return {
selectionHashes: state.selectionHashes,
torrentList: state.torrentList
};
};
exports.default = (0, _styles.withStyles)(styles)((0, _reactRedux.connect)(mapStateToProps)(GeneralTab));
================================================
FILE: goTorrentWebUI/lib/BottomMenu/Tabs/peerTab.js
================================================
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactDom = require('react-dom');
var _reactDom2 = _interopRequireDefault(_reactDom);
var _reactBootstrapTable = require('react-bootstrap-table');
var _dxReactGrid = require('@devexpress/dx-react-grid');
var _dxReactGridMaterialUi = require('@devexpress/dx-react-grid-material-ui');
var _reactRedux = require('react-redux');
var _actions = require('../../store/actions');
var actionTypes = _interopRequireWildcard(_actions);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var PeerTab = function (_React$Component) {
_inherits(PeerTab, _React$Component);
function PeerTab(props) {
_classCallCheck(this, PeerTab);
var _this = _possibleConstructorReturn(this, (PeerTab.__proto__ || Object.getPrototypeOf(PeerTab)).call(this, props));
_this.state = { //rows are stored in redux they are sent over from the server
columns: [{ name: 'PeerID', title: 'Peer ID' }, { name: 'IP', title: 'IP Address' },
//{ name: 'Country', title: 'Country of Origin'}, //TODO map IP to country
{ name: 'Port', title: 'Port' }, { name: 'Source', title: 'Source' }, //T=Tracker, I=Incoming, Hg=DHTGetPeers, Ha=DHTAnnouncePeer, X=PEX
{ name: 'SupportsEncryption', title: 'Supports Encryption' }],
sorting: [],
columnOrder: ['PeerID', 'IP', 'Port', 'Source', 'SupportsEncryption'],
columnWidths: { PeerID: 250, IP: 150, Port: 100, Source: 150, SupportsEncryption: 150 }
};
_this.changeColumnOrder = function (columnOrder) {
return _this.setState({ columnOrder: columnOrder });
};
_this.changeColumnWidths = function (columnWidths) {
return _this.setState({ columnWidths: columnWidths });
};
_this.changeSorting = function (sorting) {
return _this.setState({ sorting: sorting });
};
return _this;
}
_createClass(PeerTab, [{
key: 'render',
value: function render() {
return _react2.default.createElement(
_dxReactGridMaterialUi.Grid,
{ rows: this.props.peerList, columns: this.state.columns },
_react2.default.createElement(_dxReactGrid.SortingState, { sorting: this.state.sorting, onSortingChange: this.changeSorting }),
_react2.default.createElement(_dxReactGrid.LocalSorting, null),
_react2.default.createElement(_dxReactGridMaterialUi.DragDropContext, null),
_react2.default.createElement(_dxReactGridMaterialUi.VirtualTableView, { height: 350 }),
_react2.default.createElement(_dxReactGridMaterialUi.TableColumnResizing, { columnWidths: this.state.columnWidths, onColumnWidthsChange: this.changeColumnWidths }),
_react2.default.createElement(_dxReactGridMaterialUi.TableColumnReordering, { order: this.state.columnOrder, onOrderChange: this.changeColumnOrder }),
_react2.default.createElement(_dxReactGridMaterialUi.TableHeaderRow, { allowSorting: true, allowResizing: true, allowDragging: true })
);
}
}]);
return PeerTab;
}(_react2.default.Component);
var mapStateToProps = function mapStateToProps(state) {
return {
selectionHashes: state.selectionHashes,
peerList: state.peerList
};
};
exports.default = (0, _reactRedux.connect)(mapStateToProps)(PeerTab);
================================================
FILE: goTorrentWebUI/lib/BottomMenu/bottomMenu.js
================================================
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
require('typeface-roboto');
var _styles = require('material-ui/styles');
var _AppBar = require('material-ui/AppBar');
var _AppBar2 = _interopRequireDefault(_AppBar);
var _Tabs = require('material-ui/Tabs');
var _Tabs2 = _interopRequireDefault(_Tabs);
var _generalTab = require('./Tabs/generalTab');
var _generalTab2 = _interopRequireDefault(_generalTab);
var _peerTab = require('./Tabs/peerTab');
var _peerTab2 = _interopRequireDefault(_peerTab);
var _fileTab = require('./Tabs/fileTab');
var _fileTab2 = _interopRequireDefault(_fileTab);
var _reactRedux = require('react-redux');
var _actions = require('../store/actions');
var actionTypes = _interopRequireWildcard(_actions);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // contains the font for material UI
//Redux
function TabContainer(props) {
return _react2.default.createElement(
'div',
{ style: { padding: 8 * 3 } },
props.children
);
}
TabContainer.propTypes = {
children: _propTypes2.default.node.isRequired
};
var styles = function styles(theme) {
return {
root: {
// flexGrow: 1,
// marginTop: theme.spacing.unit * 3,
//backgroundColor: theme.palette.background.paper,
backgroundColor: '#e5e5e5',
height: '100%',
boxShadow: '0 0 20px #000'
}
};
};
var BasicTabs = function (_React$Component) {
_inherits(BasicTabs, _React$Component);
function BasicTabs() {
var _ref;
var _temp, _this, _ret;
_classCallCheck(this, BasicTabs);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = BasicTabs.__proto__ || Object.getPrototypeOf(BasicTabs)).call.apply(_ref, [this].concat(args))), _this), _this.handleChange = function (event, value) {
//this.setState({ value });
_this.props.changeTab(value);
}, _temp), _possibleConstructorReturn(_this, _ret);
}
_createClass(BasicTabs, [{
key: 'render',
value: function render() {
var classes = this.props.classes;
return _react2.default.createElement(
'div',
{ className: classes.root },
_react2.default.createElement(
'div',
{ className: 'DragHandle' },
' ',
_react2.default.createElement(
_AppBar2.default,
{ position: 'static' },
_react2.default.createElement(
_Tabs2.default,
{ value: this.props.selectedTab, onChange: this.handleChange },
_react2.default.createElement(_Tabs.Tab, { label: 'General' }),
_react2.default.createElement(_Tabs.Tab, { label: 'Peers' }),
_react2.default.createElement(_Tabs.Tab, { label: 'Files' }),
_react2.default.createElement(_Tabs.Tab, { label: 'Speed' }),
_react2.default.createElement(_Tabs.Tab, { label: 'Logger', href: '#basic-tabs' })
)
)
),
this.props.selectedTab === 0 && _react2.default.createElement(
TabContainer,
null,
_react2.default.createElement(_generalTab2.default, null)
),
this.props.selectedTab === 1 && _react2.default.createElement(
TabContainer,
null,
_react2.default.createElement(_peerTab2.default, null)
),
this.props.selectedTab === 2 && _react2.default.createElement(
TabContainer,
null,
_react2.default.createElement(_fileTab2.default, null)
),
this.props.selectedTab === 3 && _react2.default.createElement(
TabContainer,
null,
'Speed'
),
this.props.selectedTab === 4 && _react2.default.createElement(
TabContainer,
null,
'Logger'
)
);
}
}]);
return BasicTabs;
}(_react2.default.Component);
BasicTabs.propTypes = {
classes: _propTypes2.default.object.isRequired
};
var mapStateToProps = function mapStateToProps(state) {
return {
selectedTab: state.selectedTab
};
};
var mapDispatchToProps = function mapDispatchToProps(dispatch) {
return {
changeTab: function changeTab(selectedTab) {
return dispatch({ type: actionTypes.SELECTED_TAB, selectedTab: selectedTab });
}
};
};
exports.default = (0, _styles.withStyles)(styles)((0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(BasicTabs));
================================================
FILE: goTorrentWebUI/lib/CustomCells/progressBarCell.js
================================================
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ProgressBarCell = exports.ProgressBarCellBase = undefined;
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _materialUi = require('material-ui');
var _styles = require('material-ui/styles');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var styles = function styles(theme) {
var _progressText;
return {
progressBarCell: {
paddingLeft: theme.spacing.unit,
paddingRight: theme.spacing.unit,
borderBottom: '1px solid ' + theme.palette.text.lightDivider
},
progressBar: {
backgroundColor: theme.palette.primary[300],
float: 'left',
height: theme.spacing.unit,
whiteSpace: 'nowrap'
},
progressText: (_progressText = {
display: 'inline-block',
fontSize: '1em',
textAlign: 'right',
verticalAlign: 'text-top'
}, _defineProperty(_progressText, 'fontSize', '12px'), _defineProperty(_progressText, 'fontWeight', 'bold'), _defineProperty(_progressText, 'margin', '5px'), _defineProperty(_progressText, 'whiteSpace', 'nowrap'), _progressText)
};
};
var ProgressBarCellBase = exports.ProgressBarCellBase = function ProgressBarCellBase(_ref) {
var value = _ref.value,
classes = _ref.classes,
style = _ref.style;
return _react2.default.createElement(
_materialUi.TableCell,
{
className: classes.progressBarCell,
style: style
},
_react2.default.createElement('div', {
className: classes.progressBar,
style: { width: value + '%' },
title: value.toFixed(1) + '%'
}),
_react2.default.createElement(
'div',
{ className: classes.progressText },
value
)
);
};
ProgressBarCellBase.propTypes = {
value: _propTypes2.default.number.isRequired,
classes: _propTypes2.default.object.isRequired,
style: _propTypes2.default.object
};
ProgressBarCellBase.defaultProps = {
style: {}
};
var ProgressBarCell = exports.ProgressBarCell = (0, _styles.withStyles)(styles, { name: 'ProgressBarCell' })(ProgressBarCellBase);
================================================
FILE: goTorrentWebUI/lib/TopMenu/Modals/RSSModal/RSSFeedList.js
================================================
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactDom = require('react-dom');
var _reactDom2 = _interopRequireDefault(_reactDom);
var _Button = require('material-ui/Button');
var _Button2 = _interopRequireDefault(_Button);
var _TextField = require('material-ui/TextField');
var _TextField2 = _interopRequireDefault(_TextField);
var _styles = require('material-ui/styles');
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _List = require('material-ui/List');
var _List2 = _interopRequireDefault(_List);
var _Dialog = require('material-ui/Dialog');
var _Dialog2 = _interopRequireDefault(_Dialog);
var _Link = require('material-ui-icons/Link');
var _Link2 = _interopRequireDefault(_Link);
var _reactTooltip = require('react-tooltip');
var _reactTooltip2 = _interopRequireDefault(_reactTooltip);
var _Icon = require('material-ui/Icon');
var _Icon2 = _interopRequireDefault(_Icon);
var _IconButton = require('material-ui/IconButton');
var _IconButton2 = _interopRequireDefault(_IconButton);
var _RssFeed = require('material-ui-icons/RssFeed');
var _RssFeed2 = _interopRequireDefault(_RssFeed);
var _AddCircle = require('material-ui-icons/AddCircle');
var _AddCircle2 = _interopRequireDefault(_AddCircle);
var _Delete = require('material-ui-icons/Delete');
var _Delete2 = _interopRequireDefault(_Delete);
var _reactRedux = require('react-redux');
var _actions = require('../../../store/actions');
var actionTypes = _interopRequireWildcard(_actions);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
//Redux
var button = {
fontSize: '60px',
paddingRight: '20px',
paddingLeft: '20px'
};
var smallButton = {
width: '36px',
height: '36px',
padding: '5px'
};
var rssInput = {
width: '90%',
paddingRight: '10px'
};
var inlineStyle = {
display: 'inline-block',
backdrop: 'static'
};
var RSSFeedList = function (_React$Component) {
_inherits(RSSFeedList, _React$Component);
function RSSFeedList() {
var _ref;
var _temp, _this, _ret;
_classCallCheck(this, RSSFeedList);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = RSSFeedList.__proto__ || Object.getPrototypeOf(RSSFeedList)).call.apply(_ref, [this].concat(args))), _this), _this.state = {
testRSSFeeds: [],
showList: false,
selectedIndex: 0
}, _this.showRSSFiles = function (key) {
var RSSTorrentsRequest = {
messageType: "rssTorrentsRequest",
Payload: [_this.props.RSSList[key].RSSURL]
};
ws.send(JSON.stringify(RSSTorrentsRequest));
_this.setState({ selectedIndex: key }); //setting our selected index for styling
console.log("RSSFEED", key, "sending message", JSON.stringify(RSSTorrentsRequest));
}, _this.getStyle = function (index) {
console.log("SettingStye", selectedIndex, index);
if (selectedIndex == index) {
console.log("Returning activestyle");
style = "{{backgroundColor: '#80b3ff'}}";
return style;
}
style = "{{backgroundColor: '#f44295'}}";
return style;
}, _this.deleteRSSFeed = function (key) {
var RSSURLDelete = {
messageType: "deleteRSSFeed",
Payload: [_this.props.RSSList[key]]
};
console.log("Deleting THIS", _this.props.RSSList[key]);
//ws.send(JSON.stringify(RSSURLDelete));
}, _temp), _possibleConstructorReturn(_this, _ret);
}
_createClass(RSSFeedList, [{
key: 'render',
value: function render() {
var _this2 = this;
//const { classes, onRequestClose, handleRequestClose, handleSubmit } = this.props;
if (this.props.RSSList.length > 0 && this.state.showList == false) {
console.log("Setting list to show....");
this.setState({ showList: true });
}
return _react2.default.createElement(
'div',
{ style: inlineStyle },
this.state.showList == true && //if we have any rss torrent feeds then display them in list }
_react2.default.createElement(
_List2.default,
{ dense: true },
this.props.RSSList.map(function (RSSFeed, index) {
return _react2.default.createElement(
_List.ListItem,
{ button: true, onClick: function onClick() {
return _this2.showRSSFiles(index);
}, key: index },
_react2.default.createElement(_List.ListItemText, { primary: RSSFeed.RSSName }),
_react2.default.createElement(
_List.ListItemSecondaryAction,
null,
_react2.default.createElement(
_IconButton2.default,
{ key: index, onClick: function onClick() {
return _this2.deleteRSSFeed(index);
}, 'aria-label': 'Delete' },
_react2.default.createElement(_Delete2.default, null)
)
)
);
})
)
);
}
}]);
return RSSFeedList;
}(_react2.default.Component);
;
var mapStateToProps = function mapStateToProps(state) {
return {
RSSList: state.RSSList
};
};
var mapDispatchToProps = function mapDispatchToProps(dispatch) {
return {
rssModalOpenState: function rssModalOpenState(RSSModalOpen) {
return dispatch({ type: actionTypes.RSS_MODAL_OPEN_STATE, RSSModalOpen: RSSModalOpen });
} //sending modal state to backendwebsocket so we can update RSS lists
};
};
exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(RSSFeedList);
================================================
FILE: goTorrentWebUI/lib/TopMenu/Modals/RSSModal/RSSModalLayout.js
================================================
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactDom = require('react-dom');
var _reactDom2 = _interopRequireDefault(_reactDom);
require('../../../../node_modules/react-grid-layout/css/styles.css');
require('../../../../node_modules/react-resizable/css/styles.css');
var _reactGridLayout = require('react-grid-layout');
var _reactGridLayout2 = _interopRequireDefault(_reactGridLayout);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
var _reactRedux = require('react-redux');
var _actions = require('../../../store/actions');
var actionTypes = _interopRequireWildcard(_actions);
var _TextField = require('material-ui/TextField');
var _TextField2 = _interopRequireDefault(_TextField);
var _styles = require('material-ui/styles');
var _Dialog = require('material-ui/Dialog');
var _Dialog2 = _interopRequireDefault(_Dialog);
var _reactTooltip = require('react-tooltip');
var _reactTooltip2 = _interopRequireDefault(_reactTooltip);
var _Icon = require('material-ui/Icon');
var _Icon2 = _interopRequireDefault(_Icon);
var _RssFeed = require('material-ui-icons/RssFeed');
var _RssFeed2 = _interopRequireDefault(_RssFeed);
var _AddCircle = require('material-ui-icons/AddCircle');
var _AddCircle2 = _interopRequireDefault(_AddCircle);
var _RSSFeedList = require('./RSSFeedList');
var _RSSFeedList2 = _interopRequireDefault(_RSSFeedList);
var _RSSTorrentList = require('./RSSTorrentList');
var _RSSTorrentList2 =
gitextract_ys94f86f/
├── .gitignore
├── .vscode/
│ ├── settings.json
│ └── tasks.json
├── Dockerfile
├── LICENSE
├── README.md
├── config.toml
├── config.toml.bk
├── dist-specific-files/
│ ├── Linux-systemd/
│ │ └── goTorrent.service
│ └── ReverseProxy/
│ └── nginx.conf
├── engine/
│ ├── clientStructs.go
│ ├── cronJobs.go
│ ├── doneTorrentActions.go
│ ├── engine.go
│ └── engineHelpers.go
├── go.mod
├── go.sum
├── goTorrentWebUI/
│ ├── .babelrc
│ ├── acorn
│ ├── acorn.cmd
│ ├── ansi-html
│ ├── ansi-html.cmd
│ ├── atob
│ ├── atob.cmd
│ ├── babel
│ ├── babel-doctor
│ ├── babel-doctor.cmd
│ ├── babel-external-helpers
│ ├── babel-external-helpers.cmd
│ ├── babel-node
│ ├── babel-node.cmd
│ ├── babel.cmd
│ ├── babylon
│ ├── babylon.cmd
│ ├── browserslist
│ ├── browserslist.cmd
│ ├── cssesc
│ ├── cssesc.cmd
│ ├── csso
│ ├── csso.cmd
│ ├── detect
│ ├── detect-port
│ ├── detect-port.cmd
│ ├── detect.cmd
│ ├── errno
│ ├── errno.cmd
│ ├── escodegen
│ ├── escodegen.cmd
│ ├── esgenerate
│ ├── esgenerate.cmd
│ ├── eslint
│ ├── eslint.cmd
│ ├── esparse
│ ├── esparse.cmd
│ ├── esvalidate
│ ├── esvalidate.cmd
│ ├── fonts/
│ │ └── index.css
│ ├── handlebars
│ ├── handlebars.cmd
│ ├── he
│ ├── he.cmd
│ ├── html-minifier
│ ├── html-minifier.cmd
│ ├── import-local-fixture
│ ├── import-local-fixture.cmd
│ ├── internal-ip
│ ├── internal-ip.cmd
│ ├── is-ci
│ ├── is-ci.cmd
│ ├── jest
│ ├── jest-runtime
│ ├── jest-runtime.cmd
│ ├── jest.cmd
│ ├── js-yaml
│ ├── js-yaml.cmd
│ ├── jsesc
│ ├── jsesc.cmd
│ ├── json5
│ ├── json5.cmd
│ ├── lib/
│ │ ├── BackendComm/
│ │ │ └── backendWebsocket.js
│ │ ├── BottomMenu/
│ │ │ ├── Tabs/
│ │ │ │ ├── fileTab.js
│ │ │ │ ├── generalTab.js
│ │ │ │ └── peerTab.js
│ │ │ └── bottomMenu.js
│ │ ├── CustomCells/
│ │ │ └── progressBarCell.js
│ │ ├── TopMenu/
│ │ │ ├── Modals/
│ │ │ │ ├── RSSModal/
│ │ │ │ │ ├── RSSFeedList.js
│ │ │ │ │ ├── RSSModalLayout.js
│ │ │ │ │ ├── RSSTorrentList.js
│ │ │ │ │ └── addRSSModal.js
│ │ │ │ ├── addTorrentFileModal.js
│ │ │ │ ├── addTorrentLinkModal.js
│ │ │ │ └── deleteTorrentModal.js
│ │ │ └── topMenu.js
│ │ ├── app.js
│ │ ├── index.html
│ │ ├── leftMenu/
│ │ │ └── leftMenu.js
│ │ ├── modals.js
│ │ ├── store/
│ │ │ ├── actions.js
│ │ │ └── reducer.js
│ │ └── torrentlist.js
│ ├── loose-envify
│ ├── loose-envify.cmd
│ ├── miller-rabin
│ ├── miller-rabin.cmd
│ ├── mime
│ ├── mime.cmd
│ ├── mkdirp
│ ├── mkdirp.cmd
│ ├── multicast-dns
│ ├── multicast-dns.cmd
│ ├── package.json
│ ├── parcel
│ ├── parcel.cmd
│ ├── rc
│ ├── rc.cmd
│ ├── react-scripts
│ ├── react-scripts.cmd
│ ├── regjsparser
│ ├── regjsparser.cmd
│ ├── rimraf
│ ├── rimraf.cmd
│ ├── sane
│ ├── sane.cmd
│ ├── semver
│ ├── semver.cmd
│ ├── sha.js
│ ├── sha.js.cmd
│ ├── src/
│ │ ├── BackendComm/
│ │ │ └── backendWebsocket.js
│ │ ├── BottomMenu/
│ │ │ ├── Tabs/
│ │ │ │ ├── fileTab.js
│ │ │ │ ├── generalTab.js
│ │ │ │ └── peerTab.js
│ │ │ └── bottomMenu.js
│ │ ├── CSS/
│ │ │ └── topMenu.css
│ │ ├── CustomCells/
│ │ │ └── progressBarCell.js
│ │ ├── TopMenu/
│ │ │ ├── Modals/
│ │ │ │ ├── RSSModal/
│ │ │ │ │ ├── RSSFeedList.js
│ │ │ │ │ ├── RSSModalLayout.js
│ │ │ │ │ ├── RSSTorrentList.js
│ │ │ │ │ └── addRSSModal.js
│ │ │ │ ├── SettingsModal/
│ │ │ │ │ ├── SettingsModalContentTabs/
│ │ │ │ │ │ ├── apiSettingsTab.js
│ │ │ │ │ │ ├── clientSettingsTab.js
│ │ │ │ │ │ ├── loggingSettingsTab.js
│ │ │ │ │ │ ├── notesTab.js
│ │ │ │ │ │ └── serverSettingsTab.js
│ │ │ │ │ ├── addSettingsModal.js
│ │ │ │ │ ├── settingsModalContent.js
│ │ │ │ │ ├── settingsModalLayout.js
│ │ │ │ │ └── settingsModalList.js
│ │ │ │ ├── addTorrentFileModal.js
│ │ │ │ ├── addTorrentLinkModal.js
│ │ │ │ ├── changeStorageModal.js
│ │ │ │ └── deleteTorrentModal.js
│ │ │ ├── topMenu.js
│ │ │ └── torrentSearch.js
│ │ ├── app.jsx
│ │ ├── leftMenu/
│ │ │ └── leftMenu.js
│ │ ├── login.js
│ │ ├── notifications.js
│ │ ├── store/
│ │ │ ├── actions.js
│ │ │ └── reducer.js
│ │ ├── torrentlist-test.js
│ │ └── torrentlist.js
│ ├── sshpk-conv
│ ├── sshpk-conv.cmd
│ ├── sshpk-sign
│ ├── sshpk-sign.cmd
│ ├── sshpk-verify
│ ├── sshpk-verify.cmd
│ ├── strip-indent
│ ├── strip-indent.cmd
│ ├── svgo
│ ├── svgo.cmd
│ ├── sw-precache
│ ├── sw-precache.cmd
│ ├── uglifyjs
│ ├── uglifyjs.cmd
│ ├── user-home
│ ├── user-home.cmd
│ ├── uuid
│ ├── uuid.cmd
│ ├── webpack
│ ├── webpack-dev-server
│ ├── webpack-dev-server.cmd
│ ├── webpack.cmd
│ ├── webpack.config.js
│ ├── which
│ └── which.cmd
├── main.go
├── public/
│ └── static/
│ ├── css/
│ │ └── gridbase.css
│ └── js/
│ ├── bundle.js
│ └── kickwebsocket-manual.js
├── settings/
│ ├── authentication_helper.go
│ ├── clientConnectGenerate.go
│ └── settings.go
├── storage/
│ └── storage.go
├── templates/
│ └── home.tmpl
└── torrentUpload/
└── desktop.ini
Showing preview only (328K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3545 symbols across 61 files)
FILE: engine/clientStructs.go
type Message (line 15) | type Message struct
type AuthResponse (line 23) | type AuthResponse struct
type ServerPushMessage (line 29) | type ServerPushMessage struct
type RSSJSONList (line 36) | type RSSJSONList struct
type RSSFeedsNames (line 43) | type RSSFeedsNames struct
type SingleRSSFeedMessage (line 49) | type SingleRSSFeedMessage struct
type TorrentList (line 58) | type TorrentList struct
type TorrentFileList (line 65) | type TorrentFileList struct
type PeerFileList (line 72) | type PeerFileList struct
type TorrentFile (line 79) | type TorrentFile struct
type SettingsFile (line 88) | type SettingsFile struct
type ClientDB (line 94) | type ClientDB struct
FILE: engine/cronJobs.go
function InitializeCronEngine (line 18) | func InitializeCronEngine() *cron.Cron {
function CheckTorrentWatchFolder (line 25) | func CheckTorrentWatchFolder(c *cron.Cron, db *storm.DB, tclient *torren...
function CheckTorrentsCron (line 61) | func CheckTorrentsCron(c *cron.Cron, db *storm.DB, tclient *torrent.Clie...
function RefreshRSSCron (line 105) | func RefreshRSSCron(c *cron.Cron, db *storm.DB, tclient *torrent.Client,...
function LogCronStatus (line 145) | func LogCronStatus(c *cron.Cron) { //TODO add a cron to inspect cron job...
FILE: engine/doneTorrentActions.go
function MoveAndLeaveSymlink (line 19) | func MoveAndLeaveSymlink(config Settings.FullClientSettings, tHash strin...
function notifyUser (line 100) | func notifyUser(tStorage Storage.TorrentLocal, config Settings.FullClien...
FILE: engine/engine.go
function CreateServerPushMessage (line 31) | func CreateServerPushMessage(message ServerPushMessage, conn *websocket....
function RefreshSingleRSSFeed (line 36) | func RefreshSingleRSSFeed(db *storm.DB, RSSFeed Storage.SingleRSSFeed) S...
function ForceRSSRefresh (line 57) | func ForceRSSRefresh(db *storm.DB, RSSFeedStore Storage.RSSFeedStore) { ...
function timeOutInfo (line 81) | func timeOutInfo(clientTorrent *torrent.Torrent, seconds time.Duration) ...
function readTorrentFileFromDB (line 101) | func readTorrentFileFromDB(element *Storage.TorrentLocal, tclient *torre...
function AddTorrent (line 133) | func AddTorrent(clientTorrent *torrent.Torrent, torrentLocalStorage Stor...
function CreateInitialTorrentArray (line 186) | func CreateInitialTorrentArray(tclient *torrent.Client, TorrentLocalArra...
function CreateRunningTorrentArray (line 274) | func CreateRunningTorrentArray(tclient *torrent.Client, TorrentLocalArra...
function CreateFileListArray (line 363) | func CreateFileListArray(tclient *torrent.Client, selectedHash string, d...
function CreatePeerListArray (line 405) | func CreatePeerListArray(tclient *torrent.Client, selectedHash string) P...
function CreateTorrentDetailJSON (line 421) | func CreateTorrentDetailJSON(tclient *torrent.Client, selectedHash strin...
FILE: engine/engineHelpers.go
function secondsToMinutes (line 17) | func secondsToMinutes(inSeconds int64) string {
function VerifyData (line 27) | func VerifyData(singleTorrent *torrent.Torrent) {
function MakeRange (line 32) | func MakeRange(min, max int) []int {
function HumanizeBytes (line 41) | func HumanizeBytes(bytes float32) string {
function CopyFile (line 59) | func CopyFile(srcFile string, destFile string) { //TODO move this to our...
function SetFilePriority (line 78) | func SetFilePriority(t *torrent.Client, db *storm.DB) {
function CalculateTorrentSpeed (line 105) | func CalculateTorrentSpeed(t *torrent.Torrent, c *ClientDB, oc ClientDB,...
function CalculateDownloadSize (line 130) | func CalculateDownloadSize(tFromStorage *Storage.TorrentLocal, activeTor...
function CalculateCompletedSize (line 141) | func CalculateCompletedSize(tFromStorage *Storage.TorrentLocal, activeTo...
function CalculateTorrentETA (line 164) | func CalculateTorrentETA(tSize int64, tBytesCompleted int64, c *ClientDB) {
function CalculateUploadRatio (line 178) | func CalculateUploadRatio(t *torrent.Torrent, c *ClientDB) string {
function StopTorrent (line 188) | func StopTorrent(singleTorrent *torrent.Torrent, torrentLocalStorage *St...
function AddTorrentToForceStart (line 203) | func AddTorrentToForceStart(torrentLocalStorage *Storage.TorrentLocal, s...
function AddTorrentToActive (line 242) | func AddTorrentToActive(torrentLocalStorage *Storage.TorrentLocal, singl...
function RemoveTorrentFromActive (line 285) | func RemoveTorrentFromActive(torrentLocalStorage *Storage.TorrentLocal, ...
function DeleteTorrentFromQueues (line 303) | func DeleteTorrentFromQueues(torrentHash string, db *storm.DB) {
function AddTorrentToQueue (line 328) | func AddTorrentToQueue(torrentLocalStorage *Storage.TorrentLocal, single...
function RemoveDuplicatesFromQueues (line 350) | func RemoveDuplicatesFromQueues(db *storm.DB) {
function ValidateQueues (line 363) | func ValidateQueues(db *storm.DB, config Settings.FullClientSettings, tc...
function CalculateTorrentStatus (line 404) | func CalculateTorrentStatus(t *torrent.Torrent, c *ClientDB, config Sett...
FILE: goTorrentWebUI/lib/BackendComm/backendWebsocket.js
function defineProperties (line 7) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireWildcard (line 35) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
function _interopRequireDefault (line 37) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 39) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 41) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 43) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function _defineProperty (line 45) | function _defineProperty(obj, key, value) { if (key in obj) { Object.def...
function BackendSocket (line 175) | function BackendSocket() {
FILE: goTorrentWebUI/lib/BottomMenu/Tabs/fileTab.js
function defineProperties (line 7) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireWildcard (line 33) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
function _interopRequireDefault (line 35) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 37) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 39) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 41) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function FileTab (line 46) | function FileTab(props) {
FILE: goTorrentWebUI/lib/BottomMenu/Tabs/generalTab.js
function defineProperties (line 7) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireWildcard (line 33) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
function _interopRequireDefault (line 35) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 37) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 39) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 41) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function GeneralTab (line 63) | function GeneralTab(props) {
FILE: goTorrentWebUI/lib/BottomMenu/Tabs/peerTab.js
function defineProperties (line 7) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireWildcard (line 29) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
function _interopRequireDefault (line 31) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 33) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 35) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 37) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function PeerTab (line 42) | function PeerTab(props) {
FILE: goTorrentWebUI/lib/BottomMenu/bottomMenu.js
function defineProperties (line 7) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireWildcard (line 47) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
function _interopRequireDefault (line 49) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 51) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 53) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 55) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function TabContainer (line 61) | function TabContainer(props) {
function BasicTabs (line 89) | function BasicTabs() {
FILE: goTorrentWebUI/lib/CustomCells/progressBarCell.js
function _interopRequireDefault (line 20) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _defineProperty (line 22) | function _defineProperty(obj, key, value) { if (key in obj) { Object.def...
FILE: goTorrentWebUI/lib/TopMenu/Modals/RSSModal/RSSFeedList.js
function defineProperties (line 7) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireWildcard (line 73) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
function _interopRequireDefault (line 75) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 77) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 79) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 81) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function RSSFeedList (line 111) | function RSSFeedList() {
FILE: goTorrentWebUI/lib/TopMenu/Modals/RSSModal/RSSModalLayout.js
function defineProperties (line 9) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireWildcard (line 83) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
function _interopRequireDefault (line 85) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 87) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 89) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 91) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function RSSModalLayout (line 132) | function RSSModalLayout(props) {
FILE: goTorrentWebUI/lib/TopMenu/Modals/RSSModal/RSSTorrentList.js
function defineProperties (line 7) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireWildcard (line 31) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
function _interopRequireDefault (line 33) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 35) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 37) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 39) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function RSSTorrentList (line 46) | function RSSTorrentList(props) {
FILE: goTorrentWebUI/lib/TopMenu/Modals/RSSModal/addRSSModal.js
function defineProperties (line 7) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireWildcard (line 73) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
function _interopRequireDefault (line 75) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 77) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 79) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 81) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function AddRSSModal (line 100) | function AddRSSModal() {
FILE: goTorrentWebUI/lib/TopMenu/Modals/addTorrentFileModal.js
function defineProperties (line 7) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireDefault (line 51) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 53) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 55) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 57) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function addTorrentFilePopup (line 85) | function addTorrentFilePopup() {
FILE: goTorrentWebUI/lib/TopMenu/Modals/addTorrentLinkModal.js
function defineProperties (line 7) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireDefault (line 51) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 53) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 55) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 57) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function addTorrentPopup (line 73) | function addTorrentPopup() {
FILE: goTorrentWebUI/lib/TopMenu/Modals/deleteTorrentModal.js
function defineProperties (line 7) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireWildcard (line 57) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
function _interopRequireDefault (line 59) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 61) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 63) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 65) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function DeleteTorrentModal (line 87) | function DeleteTorrentModal() {
FILE: goTorrentWebUI/lib/TopMenu/topMenu.js
function defineProperties (line 7) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireWildcard (line 83) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
function _interopRequireDefault (line 85) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 87) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 89) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 91) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function IconButtons (line 134) | function IconButtons(props) {
FILE: goTorrentWebUI/lib/app.js
function defineProperties (line 5) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireDefault (line 55) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 57) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 59) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 61) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function BasicLayout (line 83) | function BasicLayout(props) {
FILE: goTorrentWebUI/lib/leftMenu/leftMenu.js
function defineProperties (line 7) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireWildcard (line 51) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
function _interopRequireDefault (line 53) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 55) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 57) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 59) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function SimpleList (line 91) | function SimpleList(props) {
FILE: goTorrentWebUI/lib/modals.js
function _interopRequireDefault (line 15) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
FILE: goTorrentWebUI/lib/store/reducer.js
function _interopRequireWildcard (line 13) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
FILE: goTorrentWebUI/lib/torrentlist.js
function defineProperties (line 7) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireWildcard (line 39) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
function _interopRequireDefault (line 41) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 43) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 45) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 47) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function sendEvent (line 65) | function sendEvent(message) {
function TorrentListTable (line 73) | function TorrentListTable(props) {
FILE: goTorrentWebUI/src/BackendComm/backendWebsocket.js
class BackendSocket (line 163) | class BackendSocket extends React.Component {
method componentDidMount (line 203) | componentDidMount() {
method componentWillUnmount (line 215) | componentWillUnmount() {
method tick (line 219) | tick() { // this tick is the main tick that updates ALL of the compone...
method componentWillReceiveProps (line 272) | componentWillReceiveProps (nextProps) {
method render (line 283) | render() {
FILE: goTorrentWebUI/src/BottomMenu/Tabs/fileTab.js
class FileTab (line 25) | class FileTab extends React.Component {
method constructor (line 27) | constructor(props) {
method render (line 109) | render() {
FILE: goTorrentWebUI/src/BottomMenu/Tabs/generalTab.js
class GeneralTab (line 28) | class GeneralTab extends React.Component {
method constructor (line 29) | constructor(props) {
method render (line 53) | render() {
FILE: goTorrentWebUI/src/BottomMenu/Tabs/peerTab.js
class PeerTab (line 21) | class PeerTab extends React.Component {
method constructor (line 23) | constructor(props) {
method render (line 50) | render() {
FILE: goTorrentWebUI/src/BottomMenu/bottomMenu.js
function TabContainer (line 18) | function TabContainer(props) {
class BasicTabs (line 37) | class BasicTabs extends React.Component {
method render (line 45) | render() {
FILE: goTorrentWebUI/src/TopMenu/Modals/RSSModal/RSSFeedList.js
class RSSFeedList (line 53) | class RSSFeedList extends React.Component {
method render (line 95) | render() {
FILE: goTorrentWebUI/src/TopMenu/Modals/RSSModal/RSSModalLayout.js
class RSSModalLayout (line 68) | class RSSModalLayout extends React.Component {
method constructor (line 84) | constructor(props) {
method onLayoutChange (line 99) | onLayoutChange(layout) {
method render (line 124) | render() {
FILE: goTorrentWebUI/src/TopMenu/Modals/RSSModal/RSSTorrentList.js
class RSSTorrentList (line 23) | class RSSTorrentList extends React.Component {
method constructor (line 25) | constructor(props) {
method componentWillReceiveProps (line 78) | componentWillReceiveProps () {
method render (line 83) | render() {
FILE: goTorrentWebUI/src/TopMenu/Modals/RSSModal/addRSSModal.js
class AddRSSModal (line 40) | class AddRSSModal extends React.Component {
method render (line 53) | render() {
FILE: goTorrentWebUI/src/TopMenu/Modals/SettingsModal/SettingsModalContentTabs/apiSettingsTab.js
class APISettingsTab (line 30) | class APISettingsTab extends React.Component {
method render (line 54) | render() {
FILE: goTorrentWebUI/src/TopMenu/Modals/SettingsModal/SettingsModalContentTabs/clientSettingsTab.js
class ClientSettingsTab (line 26) | class ClientSettingsTab extends React.PureComponent {
method render (line 28) | render() {
FILE: goTorrentWebUI/src/TopMenu/Modals/SettingsModal/SettingsModalContentTabs/loggingSettingsTab.js
class LoggingSettingsTab (line 30) | class LoggingSettingsTab extends React.Component {
method render (line 49) | render() {
FILE: goTorrentWebUI/src/TopMenu/Modals/SettingsModal/SettingsModalContentTabs/notesTab.js
class NotesTab (line 23) | class NotesTab extends React.PureComponent {
method render (line 25) | render() {
FILE: goTorrentWebUI/src/TopMenu/Modals/SettingsModal/SettingsModalContentTabs/serverSettingsTab.js
class ServerSettingsTab (line 26) | class ServerSettingsTab extends React.PureComponent {
method render (line 28) | render() {
FILE: goTorrentWebUI/src/TopMenu/Modals/SettingsModal/addSettingsModal.js
class AddSettingsModal (line 41) | class AddSettingsModal extends React.Component {
method render (line 55) | render() {
FILE: goTorrentWebUI/src/TopMenu/Modals/SettingsModal/settingsModalContent.js
class SettingsModalContent (line 16) | class SettingsModalContent extends React.Component {
method render (line 28) | render() {
FILE: goTorrentWebUI/src/TopMenu/Modals/SettingsModal/settingsModalLayout.js
class SettingsModalLayout (line 64) | class SettingsModalLayout extends React.Component {
method constructor (line 80) | constructor(props) {
method onLayoutChange (line 95) | onLayoutChange(layout) {
method render (line 109) | render() {
FILE: goTorrentWebUI/src/TopMenu/Modals/SettingsModal/settingsModalList.js
class SettingsMenuList (line 59) | class SettingsMenuList extends React.Component {
method constructor (line 60) | constructor(props){
method render (line 77) | render() {
FILE: goTorrentWebUI/src/TopMenu/Modals/addTorrentFileModal.js
class addTorrentFilePopup (line 41) | class addTorrentFilePopup extends React.Component {
method render (line 95) | render() {
FILE: goTorrentWebUI/src/TopMenu/Modals/addTorrentLinkModal.js
class addTorrentPopup (line 31) | class addTorrentPopup extends React.Component {
method render (line 76) | render() {
FILE: goTorrentWebUI/src/TopMenu/Modals/changeStorageModal.js
class ChangeStorageModal (line 34) | class ChangeStorageModal extends React.Component {
method render (line 65) | render() {
FILE: goTorrentWebUI/src/TopMenu/Modals/deleteTorrentModal.js
class DeleteTorrentModal (line 34) | class DeleteTorrentModal extends React.Component {
method render (line 85) | render() {
FILE: goTorrentWebUI/src/TopMenu/topMenu.js
class IconButtons (line 65) | class IconButtons extends React.Component {
method constructor (line 66) | constructor(props){
method render (line 113) | render() {
FILE: goTorrentWebUI/src/TopMenu/torrentSearch.js
class TorrentSearch (line 21) | class TorrentSearch extends React.Component {
method constructor (line 22) | constructor(props){
method render (line 45) | render() {
FILE: goTorrentWebUI/src/app.jsx
class BasicLayout (line 35) | class BasicLayout extends React.PureComponent {
method constructor (line 51) | constructor(props) {
method onLayoutChange (line 69) | onLayoutChange(layout) {
method componentWillMount (line 73) | componentWillMount() { //if login not required log in automatically
method render (line 79) | render() {
FILE: goTorrentWebUI/src/leftMenu/leftMenu.js
class SimpleList (line 38) | class SimpleList extends React.Component {
method constructor (line 39) | constructor(props){
method render (line 64) | render() {
FILE: goTorrentWebUI/src/login.js
class Login (line 36) | class Login extends React.Component {
method componentWillMount (line 46) | componentWillMount() {
method componentDidMount (line 52) | componentDidMount() {
method componentWillUnmount (line 56) | componentWillUnmount() {
method render (line 88) | render() {
FILE: goTorrentWebUI/src/notifications.js
class Notifications (line 11) | class Notifications extends React.Component {
method constructor (line 12) | constructor(props){
method componentWillReceiveProps (line 17) | componentWillReceiveProps(nextprops) {
method render (line 35) | render() {
FILE: goTorrentWebUI/src/store/actions.js
constant SORTLIST (line 1) | const SORTLIST = 'SORTLIST';
constant CHANGE_SELECTION (line 2) | const CHANGE_SELECTION = 'CHANGE_SELECTION';
constant CHANGE_FILTER (line 3) | const CHANGE_FILTER = 'CHANGE_FILTER';
constant TORRENT_LIST (line 4) | const TORRENT_LIST = 'TORRENT_LIST';
constant SET_BUTTON_STATE (line 5) | const SET_BUTTON_STATE = 'BUTTON_STATE';
constant SELECTION_HASHES (line 6) | const SELECTION_HASHES = 'SELECTION_HASHES';
constant SELECTED_TAB (line 7) | const SELECTED_TAB = 'SELECTED_TAB';
constant PEER_LIST (line 8) | const PEER_LIST = 'PEER_LIST';
constant FILE_LIST (line 9) | const FILE_LIST = 'FILE_LIST';
constant CHANGE_FILE_SELECTION (line 10) | const CHANGE_FILE_SELECTION = 'CHANGE_FILE_SELECTION';
constant NEW_RSS_FEED_STORE (line 11) | const NEW_RSS_FEED_STORE = 'NEW_RSS_FEED_STORE';
constant RSS_MODAL_OPEN_STATE (line 12) | const RSS_MODAL_OPEN_STATE = 'RSS_MODAL_OPEN_STATE';
constant SETTINGS_MODAL_OPEN_STATE (line 13) | const SETTINGS_MODAL_OPEN_STATE = 'SETTINGS_MODAL_OPEN_STATE';
constant NEW_SETTINGS_FILE (line 14) | const NEW_SETTINGS_FILE = 'NEW_SETTINGS_FILE';
constant RSS_TORRENT_LIST (line 15) | const RSS_TORRENT_LIST = 'RSS_TORRENT_LIST';
constant SERVER_MESSAGE (line 16) | const SERVER_MESSAGE = 'SERVER_MESSAGE';
constant WEBSOCKET_STATE (line 17) | const WEBSOCKET_STATE = 'WEBSOCKET_STATE';
constant TOKEN_RETURN (line 18) | const TOKEN_RETURN = 'TOKEN_RETURN';
FILE: goTorrentWebUI/src/torrentlist-test.js
class TorrentListTable (line 23) | class TorrentListTable extends React.Component {
method render (line 25) | render() {
FILE: goTorrentWebUI/src/torrentlist.js
class TorrentListTable (line 23) | class TorrentListTable extends React.Component {
method constructor (line 25) | constructor(props) {
method componentWillReceiveProps (line 78) | componentWillReceiveProps (nextProps){ //this is for setting the filt...
method render (line 119) | render() {
FILE: main.go
function serveHome (line 47) | func serveHome(w http.ResponseWriter, r *http.Request) {
function handleMessages (line 53) | func handleMessages(conn *websocket.Conn) {
function handleAuthentication (line 60) | func handleAuthentication(conn *websocket.Conn, db *storm.DB) {
function main (line 103) | func main() {
FILE: public/static/js/bundle.js
function __webpack_require__ (line 6) | function __webpack_require__(moduleId) {
function defaultSetTimout (line 96) | function defaultSetTimout() {
function defaultClearTimeout (line 99) | function defaultClearTimeout () {
function runTimeout (line 122) | function runTimeout(fun) {
function runClearTimeout (line 147) | function runClearTimeout(marker) {
function cleanUpNextTick (line 179) | function cleanUpNextTick() {
function drainQueue (line 194) | function drainQueue() {
function Item (line 232) | function Item(fun, array) {
function noop (line 246) | function noop() {}
function _interopRequireDefault (line 340) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireWildcard (line 462) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
function _interopRequireDefault (line 464) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function getDefaultTheme (line 490) | function getDefaultTheme() {
function WithStyles (line 523) | function WithStyles(props, context) {
function classNames (line 784) | function classNames () {
function _interopRequireDefault (line 836) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function checkDCE (line 860) | function checkDCE() {
function _interopRequireDefault (line 933) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function defineProperties (line 936) | function defineProperties(target, props) {
function _interopRequireDefault (line 966) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 997) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 1070) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 1251) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 1452) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function capitalize (line 1454) | function capitalize(string) {
function contains (line 1462) | function contains(obj, pred) {
function findIndex (line 1468) | function findIndex(arr, pred) {
function find (line 1484) | function find(arr, pred) {
function createChainedFunction (line 1498) | function createChainedFunction() {
function _interopRequireDefault (line 1540) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 1567) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 1604) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 1626) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 1723) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function classNames (line 1741) | function classNames () {
function defineProperties (line 1789) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireDefault (line 1860) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 1862) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 1864) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 1866) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function ReactTooltip (line 1871) | function ReactTooltip(props) {
function _interopRequireDefault (line 2462) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 2506) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function ownerDocument (line 2519) | function ownerDocument(node) {
function _interopRequireDefault (line 2549) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 2589) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 2767) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 2836) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function mergeDefaultEventOptions (line 2843) | function mergeDefaultEventOptions(options) {
function getEventListenerArgs (line 2847) | function getEventListenerArgs(eventName, callback, options) {
function on (line 2853) | function on(target, eventName, callback, options) {
function off (line 2858) | function off(target, eventName, callback, options) {
function forEachListener (line 2863) | function forEachListener(props, iteratee) {
function withOptions (line 2895) | function withOptions(handler, options) {
function EventListener (line 2907) | function EventListener() {
function _interopRequireDefault (line 3006) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 3061) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function clamp (line 3071) | function clamp(value) {
function convertHexToRGB (line 3095) | function convertHexToRGB(color) {
function decomposeColor (line 3120) | function decomposeColor(color) {
function recomposeColor (line 3143) | function recomposeColor(color) {
function getContrastRatio (line 3172) | function getContrastRatio(foreground, background) {
function getLuminance (line 3187) | function getLuminance(color) {
function emphasize (line 3212) | function emphasize(color) {
function fade (line 3226) | function fade(color, value) {
function darken (line 3249) | function darken(color, coefficient) {
function lighten (line 3274) | function lighten(color, coefficient) {
function _interopRequireDefault (line 3322) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 3435) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function cloneChildrenWithClassName (line 3439) | function cloneChildrenWithClassName(children, className) {
function isMuiElement (line 3447) | function isMuiElement(element, muiNames) {
function isMuiComponent (line 3451) | function isMuiComponent(element, muiNames) {
function _interopRequireDefault (line 3529) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function debounce (line 3660) | function debounce(func, wait, options) {
function _interopRequireDefault (line 3807) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function defineProperties (line 3882) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireDefault (line 3896) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 3898) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function StyleRule (line 3901) | function StyleRule(key, style, options) {
function _interopRequireDefault (line 4095) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function getDefaultTheme (line 4099) | function getDefaultTheme() {
function WithTheme (line 4114) | function WithTheme(props, context) {
function _interopRequireDefault (line 4350) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireWildcard (line 4352) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
function _objectWithoutProperties (line 4354) | function _objectWithoutProperties(obj, keys) { var target = {}; for (var...
function _classCallCheck (line 4356) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 4358) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 4360) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function Transition (line 4449) | function Transition(props, context) {
function noop (line 4862) | function noop() {}
function _interopRequireDefault (line 4934) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function bottom (line 4946) | function bottom(layout) {
function cloneLayout (line 4956) | function cloneLayout(layout) {
function cloneLayoutItem (line 4965) | function cloneLayoutItem(layoutItem) {
function childrenEqual (line 4988) | function childrenEqual(a, b) {
function collides (line 4999) | function collides(l1, l2) {
function compact (line 5017) | function compact(layout, compactType, cols) {
function resolveCompactionCollision (line 5051) | function resolveCompactionCollision(layout, item, moveToCoord, axis) {
function compactItem (line 5074) | function compactItem(compareWith, l, compactType, cols, fullLayout) {
function correctBounds (line 5117) | function correctBounds(layout, bounds) {
function getLayoutItem (line 5146) | function getLayoutItem(layout, id) {
function getFirstCollision (line 5160) | function getFirstCollision(layout, layoutItem) {
function getAllCollisions (line 5166) | function getAllCollisions(layout, layoutItem) {
function getStatics (line 5177) | function getStatics(layout) {
function moveElement (line 5191) | function moveElement(layout, l, x, y, isUserAction, preventCollision, co...
function moveElementAwayFromCollision (line 5251) | function moveElementAwayFromCollision(layout, collidesWith, itemToMove, ...
function perc (line 5288) | function perc(num) {
function setTransform (line 5292) | function setTransform(_ref) {
function setTopLeft (line 5312) | function setTopLeft(_ref2) {
function sortLayoutItems (line 5333) | function sortLayoutItems(layout, compactType) {
function sortLayoutItemsByRowCol (line 5337) | function sortLayoutItemsByRowCol(layout) {
function sortLayoutItemsByColRow (line 5349) | function sortLayoutItemsByColRow(layout) {
function synchronizeLayoutWithChildren (line 5367) | function synchronizeLayoutWithChildren(initialLayout, children, cols, co...
function validateLayout (line 5417) | function validateLayout(layout) {
function autoBindHandlers (line 5439) | function autoBindHandlers(el, fns) {
function log (line 5445) | function log() {
function _interopRequireDefault (line 5505) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function createBreakpoints (line 5512) | function createBreakpoints(breakpoints) {
function defineProperties (line 5588) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireDefault (line 5606) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 5608) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function RuleList (line 5617) | function RuleList(options) {
function _interopRequireDefault (line 5861) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function exactProp (line 5869) | function exactProp(propTypes, componentNameInError) {
function _interopRequireDefault (line 5894) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 5915) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 5967) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 6007) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function getTransitionProps (line 6024) | function getTransitionProps(props, options) {
function _interopRequireDefault (line 6059) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function AwaitValue (line 6146) | function AwaitValue(value) {
function AsyncGenerator (line 6150) | function AsyncGenerator(gen) {
function defineProperties (line 6269) | function defineProperties(target, props) {
function sliceIterator (line 6370) | function sliceIterator(arr, i) {
function GridCore (line 6432) | function GridCore() {
function ColumnChooser (line 6528) | function ColumnChooser(props) {
function FilteringState (line 6702) | function FilteringState(props) {
function IntegratedFiltering (line 6763) | function IntegratedFiltering() {
function EditingState (line 6810) | function EditingState(props) {
function PagingState (line 6975) | function PagingState(props) {
function IntegratedPaging (line 7090) | function IntegratedPaging() {
function CustomPaging (line 7119) | function CustomPaging() {
function GroupingState (line 7165) | function GroupingState(props) {
function IntegratedGrouping (line 7328) | function IntegratedGrouping() {
function CustomGrouping (line 7390) | function CustomGrouping() {
function SelectionState (line 7442) | function SelectionState(props) {
function IntegratedSelection (line 7536) | function IntegratedSelection() {
function SortingState (line 7565) | function SortingState(props) {
function IntegratedSorting (line 7627) | function IntegratedSorting() {
function DragDropProvider$$1 (line 7684) | function DragDropProvider$$1(props) {
function TableColumnReordering (line 7770) | function TableColumnReordering(props) {
function Table (line 8029) | function Table() {
function TableSelection (line 8215) | function TableSelection() {
function RowDetailState (line 8359) | function RowDetailState(props) {
function TableRowDetail (line 8421) | function TableRowDetail() {
function TableGroupRow (line 8564) | function TableGroupRow() {
function TableHeaderRow (line 8703) | function TableHeaderRow() {
function TableFilterRow (line 8828) | function TableFilterRow() {
function TableEditRow (line 8945) | function TableEditRow() {
function TableEditColumn (line 9078) | function TableEditColumn() {
function TableColumnResizing (line 9235) | function TableColumnResizing(props) {
function PagingPanel (line 9311) | function PagingPanel() {
function GroupingPanel (line 9378) | function GroupingPanel() {
function DataTypeProvider (line 9493) | function DataTypeProvider() {
function TableColumnVisibility (line 9563) | function TableColumnVisibility(props) {
function TableLayout (line 9665) | function TableLayout(props) {
function ColumnGroup (line 9772) | function ColumnGroup() {
function RowLayout (line 9815) | function RowLayout() {
function VirtualTableLayout (line 9943) | function VirtualTableLayout(props) {
function RowsBlockLayout (line 10195) | function RowsBlockLayout() {
function StaticTableLayout (line 10240) | function StaticTableLayout() {
function ItemLayout (line 10314) | function ItemLayout(props) {
function GroupPanelLayout (line 10381) | function GroupPanelLayout(props) {
function Toolbar (line 10558) | function Toolbar() {
function _interopRequireDefault (line 10697) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _toConsumableArray (line 10699) | function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i ...
function _defineProperty (line 10701) | function _defineProperty(obj, key, value) { if (key in obj) { Object.def...
function speedy (line 10713) | function speedy(bool) {
function simulations (line 10743) | function simulations() {
function simulate (line 10754) | function simulate() {
function cssLabels (line 10782) | function cssLabels(bool) {
function simple (line 10787) | function simple(str) {
function hashify (line 10797) | function hashify(obj) {
function isLikeRule (line 10807) | function isLikeRule(rule) {
function idFor (line 10818) | function idFor(rule) {
function splitSelector (line 10846) | function splitSelector(selector) {
function selector (line 10875) | function selector(id, path) {
function toCSS (line 10895) | function toCSS(_ref) {
function deconstruct (line 10903) | function deconstruct(style) {
function deconstructedStyleToCSS (line 10932) | function deconstructedStyleToCSS(id, style) {
function insert (line 10967) | function insert(spec) {
function register (line 10981) | function register(spec) {
function _getRegistered (line 10987) | function _getRegistered(rule) {
function toRule (line 11000) | function toRule(spec) {
function log (line 11018) | function log() {
function isSelector (line 11024) | function isSelector(key) {
function joinSelectors (line 11037) | function joinSelectors(a, b) {
function joinMediaQueries (line 11052) | function joinMediaQueries(a, b) {
function isMediaQuery (line 11056) | function isMediaQuery(key) {
function isSupports (line 11060) | function isSupports(key) {
function joinSupports (line 11064) | function joinSupports(a, b) {
function flatten (line 11069) | function flatten(inArr) {
function build (line 11082) | function build(dest, _ref2) {
function _css (line 11153) | function _css(rules) {
function multiIndexCache (line 11177) | function multiIndexCache(fn) {
function css (line 11224) | function css() {
function insertKeyframe (line 11265) | function insertKeyframe(spec) {
function insertFontFace (line 11318) | function insertFontFace(spec) {
function rehydrate (line 11328) | function rehydrate(ids) {
function flush (line 11339) | function flush() {
function select (line 11362) | function select(selector) {
function parent (line 11374) | function parent(selector) {
function media (line 11385) | function media(query) {
function pseudo (line 11393) | function pseudo(selector) {
function active (line 11403) | function active(x) {
function any (line 11407) | function any(x) {
function checked (line 11411) | function checked(x) {
function disabled (line 11415) | function disabled(x) {
function empty (line 11419) | function empty(x) {
function enabled (line 11423) | function enabled(x) {
function _default (line 11427) | function _default(x) {
function first (line 11431) | function first(x) {
function firstChild (line 11435) | function firstChild(x) {
function firstOfType (line 11439) | function firstOfType(x) {
function fullscreen (line 11443) | function fullscreen(x) {
function focus (line 11447) | function focus(x) {
function hover (line 11451) | function hover(x) {
function indeterminate (line 11455) | function indeterminate(x) {
function inRange (line 11459) | function inRange(x) {
function invalid (line 11463) | function invalid(x) {
function lastChild (line 11467) | function lastChild(x) {
function lastOfType (line 11471) | function lastOfType(x) {
function left (line 11475) | function left(x) {
function link (line 11479) | function link(x) {
function onlyChild (line 11483) | function onlyChild(x) {
function onlyOfType (line 11487) | function onlyOfType(x) {
function optional (line 11491) | function optional(x) {
function outOfRange (line 11495) | function outOfRange(x) {
function readOnly (line 11499) | function readOnly(x) {
function readWrite (line 11503) | function readWrite(x) {
function required (line 11507) | function required(x) {
function right (line 11511) | function right(x) {
function root (line 11515) | function root(x) {
function scope (line 11519) | function scope(x) {
function target (line 11523) | function target(x) {
function valid (line 11527) | function valid(x) {
function visited (line 11531) | function visited(x) {
function dir (line 11536) | function dir(p, x) {
function lang (line 11539) | function lang(p, x) {
function not (line 11542) | function not(p, x) {
function nthChild (line 11554) | function nthChild(p, x) {
function nthLastChild (line 11557) | function nthLastChild(p, x) {
function nthLastOfType (line 11560) | function nthLastOfType(p, x) {
function nthOfType (line 11563) | function nthOfType(p, x) {
function after (line 11568) | function after(x) {
function before (line 11571) | function before(x) {
function firstLetter (line 11574) | function firstLetter(x) {
function firstLine (line 11577) | function firstLine(x) {
function selection (line 11580) | function selection(x) {
function backdrop (line 11583) | function backdrop(x) {
function placeholder (line 11586) | function placeholder(x) {
function cssFor (line 11594) | function cssFor() {
function attribsFor (line 11607) | function attribsFor() {
function isPrefixedValue (line 11637) | function isPrefixedValue(value) {
function makeEmptyFunction (line 11690) | function makeEmptyFunction(arg) {
function cssWithMappingToString (line 11769) | function cssWithMappingToString(item, useSourceMap) {
function toComment (line 11789) | function toComment(sourceMap) {
function addStylesToDom (line 11908) | function addStylesToDom (styles, options) {
function listToStyles (line 11935) | function listToStyles (list, options) {
function insertStyleElement (line 11954) | function insertStyleElement (options, style) {
function removeStyleElement (line 11982) | function removeStyleElement (style) {
function createStyleElement (line 11992) | function createStyleElement (options) {
function createLinkElement (line 12003) | function createLinkElement (options) {
function addAttrs (line 12015) | function addAttrs (el, attrs) {
function addStyle (line 12021) | function addStyle (obj, options) {
function applyToSingletonTag (line 12101) | function applyToSingletonTag (style, index, remove, obj) {
function applyToTag (line 12120) | function applyToTag (style, obj) {
function updateLink (line 12139) | function updateLink (link, options, obj) {
function isNonNullObject (line 12211) | function isNonNullObject(value) {
function isSpecial (line 12215) | function isSpecial(value) {
function isReactElement (line 12227) | function isReactElement(value) {
function emptyTarget (line 12231) | function emptyTarget(val) {
function cloneUnlessOtherwiseSpecified (line 12235) | function cloneUnlessOtherwiseSpecified(value, optionsArgument) {
function defaultArrayMerge (line 12243) | function defaultArrayMerge(target, source, optionsArgument) {
function mergeObject (line 12249) | function mergeObject(target, source, optionsArgument) {
function deepmerge (line 12266) | function deepmerge(target, source, optionsArgument) {
function toCssValue (line 12327) | function toCssValue(value) {
function _interopRequireDefault (line 12375) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function createRule (line 12380) | function createRule() {
function _interopRequireDefault (line 12432) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 12547) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function ownerWindow (line 12549) | function ownerWindow(node) {
function _interopRequireDefault (line 12570) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function fallback (line 12586) | function fallback(context, node) {
function _interopRequireDefault (line 12631) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 12674) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function AwaitValue (line 12805) | function AwaitValue(value) {
function AsyncGenerator (line 12809) | function AsyncGenerator(gen) {
function defineProperties (line 12928) | function defineProperties(target, props) {
function ColumnChooser$$1 (line 13179) | function ColumnChooser$$1() {
function DragDropProvider$$1 (line 13307) | function DragDropProvider$$1() {
function PagingPanel$$1 (line 13718) | function PagingPanel$$1() {
function GroupingPanel$$1 (line 13925) | function GroupingPanel$$1() {
function TableRowDetail$$1 (line 14119) | function TableRowDetail$$1() {
function TableGroupRow$$1 (line 14245) | function TableGroupRow$$1() {
function TableSelection$$1 (line 14450) | function TableSelection$$1() {
function Table$$1 (line 14734) | function Table$$1() {
function VirtualTable (line 14828) | function VirtualTable(props) {
function TableFilterRow$$1 (line 14971) | function TableFilterRow$$1() {
function ResizingControlBase (line 15110) | function ResizingControlBase(props) {
function TableHeaderCellBase (line 15294) | function TableHeaderCellBase(props) {
function TableHeaderRow$$1 (line 15449) | function TableHeaderRow$$1() {
function TableEditColumn$$1 (line 15623) | function TableEditColumn$$1() {
function TableEditRow$$1 (line 15742) | function TableEditRow$$1() {
function TableColumnVisibility$$1 (line 15787) | function TableColumnVisibility$$1() {
function TableColumnResizing$$1 (line 15887) | function TableColumnResizing$$1() {
function Toolbar$$1 (line 15946) | function Toolbar$$1() {
function defineStyle (line 16017) | function defineStyle(props) {
function makeEmptyFunction (line 16041) | function makeEmptyFunction(arg) {
function makeEmptyFunction (line 16156) | function makeEmptyFunction(arg) {
function invariant (line 16218) | function invariant(condition, format, a, b, c, d, e, f) {
function arrayFilter (line 16389) | function arrayFilter(array, predicate) {
function arrayPush (line 16412) | function arrayPush(array, values) {
function arraySome (line 16433) | function arraySome(array, predicate) {
function baseTimes (line 16454) | function baseTimes(n, iteratee) {
function baseUnary (line 16471) | function baseUnary(func) {
function cacheHas (line 16485) | function cacheHas(cache, key) {
function getValue (line 16497) | function getValue(object, key) {
function mapToArray (line 16508) | function mapToArray(map) {
function overArg (line 16526) | function overArg(func, transform) {
function setToArray (line 16539) | function setToArray(set) {
function Hash (line 16621) | function Hash(entries) {
function hashClear (line 16639) | function hashClear() {
function hashDelete (line 16654) | function hashDelete(key) {
function hashGet (line 16669) | function hashGet(key) {
function hashHas (line 16687) | function hashHas(key) {
function hashSet (line 16702) | function hashSet(key, value) {
function ListCache (line 16723) | function ListCache(entries) {
function listCacheClear (line 16741) | function listCacheClear() {
function listCacheDelete (line 16755) | function listCacheDelete(key) {
function listCacheGet (line 16781) | function listCacheGet(key) {
function listCacheHas (line 16797) | function listCacheHas(key) {
function listCacheSet (line 16811) | function listCacheSet(key, value) {
function MapCache (line 16838) | function MapCache(entries) {
function mapCacheClear (line 16856) | function mapCacheClear() {
function mapCacheDelete (line 16874) | function mapCacheDelete(key) {
function mapCacheGet (line 16889) | function mapCacheGet(key) {
function mapCacheHas (line 16902) | function mapCacheHas(key) {
function mapCacheSet (line 16916) | function mapCacheSet(key, value) {
function SetCache (line 16940) | function SetCache(values) {
function setCacheAdd (line 16960) | function setCacheAdd(value) {
function setCacheHas (line 16974) | function setCacheHas(value) {
function Stack (line 16989) | function Stack(entries) {
function stackClear (line 17001) | function stackClear() {
function stackDelete (line 17015) | function stackDelete(key) {
function stackGet (line 17032) | function stackGet(key) {
function stackHas (line 17045) | function stackHas(key) {
function stackSet (line 17059) | function stackSet(key, value) {
function arrayLikeKeys (line 17090) | function arrayLikeKeys(value, inherited) {
function assocIndexOf (line 17125) | function assocIndexOf(array, key) {
function baseGetAllKeys (line 17146) | function baseGetAllKeys(object, keysFunc, symbolsFunc) {
function baseGetTag (line 17158) | function baseGetTag(value) {
function baseIsArguments (line 17174) | function baseIsArguments(value) {
function baseIsEqual (line 17192) | function baseIsEqual(value, other, bitmask, customizer, stack) {
function baseIsEqualDeep (line 17216) | function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, ...
function baseIsNative (line 17269) | function baseIsNative(value) {
function baseIsTypedArray (line 17284) | function baseIsTypedArray(value) {
function baseKeys (line 17296) | function baseKeys(object) {
function equalArrays (line 17322) | function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
function equalByTag (line 17400) | function equalByTag(object, other, tag, bitmask, customizer, equalFunc, ...
function equalObjects (line 17478) | function equalObjects(object, other, bitmask, customizer, equalFunc, sta...
function getAllKeys (line 17549) | function getAllKeys(object) {
function getMapData (line 17561) | function getMapData(map, key) {
function getNative (line 17576) | function getNative(object, key) {
function getRawTag (line 17588) | function getRawTag(value) {
function isIndex (line 17666) | function isIndex(value, length) {
function isKeyable (line 17680) | function isKeyable(value) {
function isMasked (line 17694) | function isMasked(func) {
function isPrototype (line 17705) | function isPrototype(value) {
function objectToString (line 17719) | function objectToString(value) {
function toSource (line 17730) | function toSource(func) {
function eq (line 17774) | function eq(value, other) {
function isArrayLike (line 17851) | function isArrayLike(value) {
function isEqual (line 17902) | function isEqual(value, other) {
function isFunction (line 17923) | function isFunction(value) {
function isLength (line 17959) | function isLength(value) {
function isObject (line 17989) | function isObject(value) {
function isObjectLike (line 18018) | function isObjectLike(value) {
function keys (line 18069) | function keys(object) {
function stubArray (line 18091) | function stubArray() {
function stubFalse (line 18108) | function stubFalse() {
function makeEmptyFunction (line 18160) | function makeEmptyFunction(arg) {
function invariant (line 18222) | function invariant(condition, format, a, b, c, d, e, f) {
function apply (line 18731) | function apply(func, thisArg, args) {
function arrayAggregator (line 18751) | function arrayAggregator(array, setter, iteratee, accumulator) {
function arrayEach (line 18771) | function arrayEach(array, iteratee) {
function arrayEachRight (line 18792) | function arrayEachRight(array, iteratee) {
function arrayEvery (line 18813) | function arrayEvery(array, predicate) {
function arrayFilter (line 18834) | function arrayFilter(array, predicate) {
function arrayIncludes (line 18858) | function arrayIncludes(array, value) {
function arrayIncludesWith (line 18872) | function arrayIncludesWith(array, value, comparator) {
function arrayMap (line 18893) | function arrayMap(array, iteratee) {
function arrayPush (line 18912) | function arrayPush(array, values) {
function arrayReduce (line 18935) | function arrayReduce(array, iteratee, accumulator, initAccum) {
function arrayReduceRight (line 18960) | function arrayReduceRight(array, iteratee, accumulator, initAccum) {
function arraySome (line 18981) | function arraySome(array, predicate) {
function asciiToArray (line 19009) | function asciiToArray(string) {
function asciiWords (line 19020) | function asciiWords(string) {
function baseFindKey (line 19035) | function baseFindKey(collection, predicate, eachFunc) {
function baseFindIndex (line 19057) | function baseFindIndex(array, predicate, fromIndex, fromRight) {
function baseIndexOf (line 19078) | function baseIndexOf(array, value, fromIndex) {
function baseIndexOfWith (line 19094) | function baseIndexOfWith(array, value, fromIndex, comparator) {
function baseIsNaN (line 19113) | function baseIsNaN(value) {
function baseMean (line 19126) | function baseMean(array, iteratee) {
function baseProperty (line 19138) | function baseProperty(key) {
function basePropertyOf (line 19151) | function basePropertyOf(object) {
function baseReduce (line 19170) | function baseReduce(collection, iteratee, accumulator, initAccum, eachFu...
function baseSortBy (line 19189) | function baseSortBy(array, comparer) {
function baseSum (line 19208) | function baseSum(array, iteratee) {
function baseTimes (line 19231) | function baseTimes(n, iteratee) {
function baseToPairs (line 19250) | function baseToPairs(object, props) {
function baseUnary (line 19263) | function baseUnary(func) {
function baseValues (line 19279) | function baseValues(object, props) {
function cacheHas (line 19293) | function cacheHas(cache, key) {
function charsStartIndex (line 19306) | function charsStartIndex(strSymbols, chrSymbols) {
function charsEndIndex (line 19323) | function charsEndIndex(strSymbols, chrSymbols) {
function countHolders (line 19338) | function countHolders(array, placeholder) {
function escapeStringChar (line 19376) | function escapeStringChar(chr) {
function getValue (line 19388) | function getValue(object, key) {
function hasUnicode (line 19399) | function hasUnicode(string) {
function hasUnicodeWord (line 19410) | function hasUnicodeWord(string) {
function iteratorToArray (line 19421) | function iteratorToArray(iterator) {
function mapToArray (line 19438) | function mapToArray(map) {
function overArg (line 19456) | function overArg(func, transform) {
function replaceHolders (line 19471) | function replaceHolders(array, placeholder) {
function safeGet (line 19495) | function safeGet(object, key) {
function setToArray (line 19508) | function setToArray(set) {
function setToPairs (line 19525) | function setToPairs(set) {
function strictIndexOf (line 19545) | function strictIndexOf(array, value, fromIndex) {
function strictLastIndexOf (line 19567) | function strictLastIndexOf(array, value, fromIndex) {
function stringSize (line 19584) | function stringSize(string) {
function stringToArray (line 19597) | function stringToArray(string) {
function unicodeSize (line 19619) | function unicodeSize(string) {
function unicodeToArray (line 19634) | function unicodeToArray(string) {
function unicodeWords (line 19645) | function unicodeWords(string) {
function lodash (line 19922) | function lodash(value) {
function object (line 19943) | function object() {}
function baseLodash (line 19963) | function baseLodash() {
function LodashWrapper (line 19974) | function LodashWrapper(value, chainAll) {
function LazyWrapper (line 20059) | function LazyWrapper(value) {
function lazyClone (line 20077) | function lazyClone() {
function lazyReverse (line 20096) | function lazyReverse() {
function lazyValue (line 20116) | function lazyValue() {
function Hash (line 20178) | function Hash(entries) {
function hashClear (line 20196) | function hashClear() {
function hashDelete (line 20211) | function hashDelete(key) {
function hashGet (line 20226) | function hashGet(key) {
function hashHas (line 20244) | function hashHas(key) {
function hashSet (line 20259) | function hashSet(key, value) {
function ListCache (line 20282) | function ListCache(entries) {
function listCacheClear (line 20300) | function listCacheClear() {
function listCacheDelete (line 20314) | function listCacheDelete(key) {
function listCacheGet (line 20340) | function listCacheGet(key) {
function listCacheHas (line 20356) | function listCacheHas(key) {
function listCacheSet (line 20370) | function listCacheSet(key, value) {
function MapCache (line 20399) | function MapCache(entries) {
function mapCacheClear (line 20417) | function mapCacheClear() {
function mapCacheDelete (line 20435) | function mapCacheDelete(key) {
function mapCacheGet (line 20450) | function mapCacheGet(key) {
function mapCacheHas (line 20463) | function mapCacheHas(key) {
function mapCacheSet (line 20477) | function mapCacheSet(key, value) {
function SetCache (line 20503) | function SetCache(values) {
function setCacheAdd (line 20523) | function setCacheAdd(value) {
function setCacheHas (line 20537) | function setCacheHas(value) {
function Stack (line 20554) | function Stack(entries) {
function stackClear (line 20566) | function stackClear() {
function stackDelete (line 20580) | function stackDelete(key) {
function stackGet (line 20597) | function stackGet(key) {
function stackHas (line 20610) | function stackHas(key) {
function stackSet (line 20624) | function stackSet(key, value) {
function arrayLikeKeys (line 20657) | function arrayLikeKeys(value, inherited) {
function arraySample (line 20691) | function arraySample(array) {
function arraySampleSize (line 20704) | function arraySampleSize(array, n) {
function arrayShuffle (line 20715) | function arrayShuffle(array) {
function assignMergeValue (line 20728) | function assignMergeValue(object, key, value) {
function assignValue (line 20745) | function assignValue(object, key, value) {
function assocIndexOf (line 20761) | function assocIndexOf(array, key) {
function baseAggregator (line 20782) | function baseAggregator(collection, setter, iteratee, accumulator) {
function baseAssign (line 20798) | function baseAssign(object, source) {
function baseAssignIn (line 20811) | function baseAssignIn(object, source) {
function baseAssignValue (line 20824) | function baseAssignValue(object, key, value) {
function baseAt (line 20845) | function baseAt(object, paths) {
function baseClamp (line 20866) | function baseClamp(number, lower, upper) {
function baseClone (line 20894) | function baseClone(value, bitmask, customizer, key, object, stack) {
function baseConforms (line 20983) | function baseConforms(source) {
function baseConformsTo (line 20998) | function baseConformsTo(object, source, props) {
function baseDelay (line 21026) | function baseDelay(func, wait, args) {
function baseDifference (line 21044) | function baseDifference(array, values, iteratee, comparator) {
function baseEvery (line 21118) | function baseEvery(collection, predicate) {
function baseExtremum (line 21137) | function baseExtremum(array, iteratee, comparator) {
function baseFill (line 21166) | function baseFill(array, value, start, end) {
function baseFilter (line 21192) | function baseFilter(collection, predicate) {
function baseFlatten (line 21213) | function baseFlatten(array, depth, predicate, isStrict, result) {
function baseForOwn (line 21269) | function baseForOwn(object, iteratee) {
function baseForOwnRight (line 21281) | function baseForOwnRight(object, iteratee) {
function baseFunctions (line 21294) | function baseFunctions(object, props) {
function baseGet (line 21308) | function baseGet(object, path) {
function baseGetAllKeys (line 21331) | function baseGetAllKeys(object, keysFunc, symbolsFunc) {
function baseGetTag (line 21343) | function baseGetTag(value) {
function baseGt (line 21361) | function baseGt(value, other) {
function baseHas (line 21373) | function baseHas(object, key) {
function baseHasIn (line 21385) | function baseHasIn(object, key) {
function baseInRange (line 21398) | function baseInRange(number, start, end) {
function baseIntersection (line 21412) | function baseIntersection(arrays, iteratee, comparator) {
function baseInverter (line 21476) | function baseInverter(object, setter, iteratee, accumulator) {
function baseInvoke (line 21493) | function baseInvoke(object, path, args) {
function baseIsArguments (line 21507) | function baseIsArguments(value) {
function baseIsArrayBuffer (line 21518) | function baseIsArrayBuffer(value) {
function baseIsDate (line 21529) | function baseIsDate(value) {
function baseIsEqual (line 21547) | function baseIsEqual(value, other, bitmask, customizer, stack) {
function baseIsEqualDeep (line 21571) | function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, ...
function baseIsMap (line 21623) | function baseIsMap(value) {
function baseIsMatch (line 21637) | function baseIsMatch(object, source, matchData, customizer) {
function baseIsNative (line 21689) | function baseIsNative(value) {
function baseIsRegExp (line 21704) | function baseIsRegExp(value) {
function baseIsSet (line 21715) | function baseIsSet(value) {
function baseIsTypedArray (line 21726) | function baseIsTypedArray(value) {
function baseIteratee (line 21738) | function baseIteratee(value) {
function baseKeys (line 21762) | function baseKeys(object) {
function baseKeysIn (line 21782) | function baseKeysIn(object) {
function baseLt (line 21806) | function baseLt(value, other) {
function baseMap (line 21818) | function baseMap(collection, iteratee) {
function baseMatches (line 21835) | function baseMatches(source) {
function baseMatchesProperty (line 21853) | function baseMatchesProperty(path, srcValue) {
function baseMerge (line 21876) | function baseMerge(object, source, srcIndex, customizer, stack) {
function baseMergeDeep (line 21913) | function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customi...
function baseNth (line 21983) | function baseNth(array, n) {
function baseOrderBy (line 22001) | function baseOrderBy(collection, iteratees, orders) {
function basePick (line 22026) | function basePick(object, paths) {
function basePickBy (line 22041) | function basePickBy(object, paths, predicate) {
function basePropertyDeep (line 22064) | function basePropertyDeep(path) {
function basePullAll (line 22081) | function basePullAll(array, values, iteratee, comparator) {
function basePullAt (line 22117) | function basePullAt(array, indexes) {
function baseRandom (line 22144) | function baseRandom(lower, upper) {
function baseRange (line 22159) | function baseRange(start, end, step, fromRight) {
function baseRepeat (line 22179) | function baseRepeat(string, n) {
function baseRest (line 22207) | function baseRest(func, start) {
function baseSample (line 22218) | function baseSample(collection) {
function baseSampleSize (line 22230) | function baseSampleSize(collection, n) {
function baseSet (line 22245) | function baseSet(object, path, value, customizer) {
function baseShuffle (line 22312) | function baseShuffle(collection) {
function baseSlice (line 22325) | function baseSlice(array, start, end) {
function baseSome (line 22355) | function baseSome(collection, predicate) {
function baseSortedIndex (line 22377) | function baseSortedIndex(array, value, retHighest) {
function baseSortedIndexBy (line 22411) | function baseSortedIndexBy(array, value, iteratee, retHighest) {
function baseSortedUniq (line 22460) | function baseSortedUniq(array, iteratee) {
function baseToNumber (line 22486) | function baseToNumber(value) {
function baseToString (line 22504) | function baseToString(value) {
function baseUniq (line 22529) | function baseUniq(array, iteratee, comparator) {
function baseUnset (line 22589) | function baseUnset(object, path) {
function baseUpdate (line 22605) | function baseUpdate(object, path, updater, customizer) {
function baseWhile (line 22620) | function baseWhile(array, predicate, isDrop, fromRight) {
function baseWrapperValue (line 22642) | function baseWrapperValue(value, actions) {
function baseXor (line 22662) | function baseXor(arrays, iteratee, comparator) {
function baseZipObject (line 22692) | function baseZipObject(props, values, assignFunc) {
function castArrayLikeObject (line 22712) | function castArrayLikeObject(value) {
function castFunction (line 22723) | function castFunction(value) {
function castPath (line 22735) | function castPath(value, object) {
function castSlice (line 22762) | function castSlice(array, start, end) {
function cloneBuffer (line 22786) | function cloneBuffer(buffer, isDeep) {
function cloneArrayBuffer (line 22804) | function cloneArrayBuffer(arrayBuffer) {
function cloneDataView (line 22818) | function cloneDataView(dataView, isDeep) {
function cloneRegExp (line 22830) | function cloneRegExp(regexp) {
function cloneSymbol (line 22843) | function cloneSymbol(symbol) {
function cloneTypedArray (line 22855) | function cloneTypedArray(typedArray, isDeep) {
function compareAscending (line 22868) | function compareAscending(value, other) {
function compareMultiple (line 22912) | function compareMultiple(object, other, orders) {
function composeArgs (line 22950) | function composeArgs(args, partials, holders, isCurried) {
function composeArgsRight (line 22985) | function composeArgsRight(args, partials, holders, isCurried) {
function copyArray (line 23019) | function copyArray(source, array) {
function copyObject (line 23040) | function copyObject(source, props, object, customizer) {
function copySymbols (line 23074) | function copySymbols(source, object) {
function copySymbolsIn (line 23086) | function copySymbolsIn(source, object) {
function createAggregator (line 23098) | function createAggregator(setter, initializer) {
function createAssigner (line 23114) | function createAssigner(assigner) {
function createBaseEach (line 23148) | function createBaseEach(eachFunc, fromRight) {
function createBaseFor (line 23176) | function createBaseFor(fromRight) {
function createBind (line 23203) | function createBind(func, bitmask, thisArg) {
function createCaseFirst (line 23221) | function createCaseFirst(methodName) {
function createCompounder (line 23248) | function createCompounder(callback) {
function createCtor (line 23262) | function createCtor(Ctor) {
function createCurry (line 23296) | function createCurry(func, bitmask, arity) {
function createFind (line 23331) | function createFind(findIndexFunc) {
function createFlow (line 23351) | function createFlow(fromRight) {
function createHybrid (line 23424) | function createHybrid(func, bitmask, thisArg, partials, holders, partial...
function createInverter (line 23486) | function createInverter(setter, toIteratee) {
function createMathOperation (line 23500) | function createMathOperation(operator, defaultValue) {
function createOver (line 23533) | function createOver(arrayFunc) {
function createPadding (line 23554) | function createPadding(length, chars) {
function createPartial (line 23579) | function createPartial(func, bitmask, thisArg, partials) {
function createRange (line 23609) | function createRange(fromRight) {
function createRelationalOperation (line 23634) | function createRelationalOperation(operator) {
function createRecurry (line 23661) | function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, pa...
function createRound (line 23694) | function createRound(methodName) {
function createToPairs (line 23730) | function createToPairs(keysFunc) {
function createWrap (line 23768) | function createWrap(func, bitmask, thisArg, partials, holders, argPos, a...
function customDefaultsAssignIn (line 23835) | function customDefaultsAssignIn(objValue, srcValue, key, object) {
function customDefaultsMerge (line 23857) | function customDefaultsMerge(objValue, srcValue, key, object, source, st...
function customOmitClone (line 23876) | function customOmitClone(value) {
function equalArrays (line 23893) | function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
function equalByTag (line 23971) | function equalByTag(object, other, tag, bitmask, customizer, equalFunc, ...
function equalObjects (line 24049) | function equalObjects(object, other, bitmask, customizer, equalFunc, sta...
function flatRest (line 24120) | function flatRest(func) {
function getAllKeys (line 24131) | function getAllKeys(object) {
function getAllKeysIn (line 24143) | function getAllKeysIn(object) {
function getFuncName (line 24165) | function getFuncName(func) {
function getHolder (line 24187) | function getHolder(func) {
function getIteratee (line 24203) | function getIteratee() {
function getMapData (line 24217) | function getMapData(map, key) {
function getMatchData (line 24231) | function getMatchData(object) {
function getNative (line 24252) | function getNative(object, key) {
function getRawTag (line 24264) | function getRawTag(value) {
function getView (line 24360) | function getView(start, end, transforms) {
function getWrapDetails (line 24385) | function getWrapDetails(source) {
function hasPath (line 24399) | function hasPath(object, path, hasFunc) {
function initCloneArray (line 24428) | function initCloneArray(array) {
function initCloneObject (line 24447) | function initCloneObject(object) {
function initCloneByTag (line 24465) | function initCloneByTag(object, tag, isDeep) {
function insertWrapDetails (line 24509) | function insertWrapDetails(source, details) {
function isFlattenable (line 24527) | function isFlattenable(value) {
function isIndex (line 24540) | function isIndex(value, length) {
function isIterateeCall (line 24560) | function isIterateeCall(value, index, object) {
function isKey (line 24582) | function isKey(value, object) {
function isKeyable (line 24602) | function isKeyable(value) {
function isLaziable (line 24617) | function isLaziable(func) {
function isMasked (line 24638) | function isMasked(func) {
function isPrototype (line 24658) | function isPrototype(value) {
function isStrictComparable (line 24673) | function isStrictComparable(value) {
function matchesStrictComparable (line 24686) | function matchesStrictComparable(key, srcValue) {
function memoizeCapped (line 24704) | function memoizeCapped(func) {
function mergeData (line 24732) | function mergeData(data, source) {
function nativeKeysIn (line 24796) | function nativeKeysIn(object) {
function objectToString (line 24813) | function objectToString(value) {
function overRest (line 24826) | function overRest(func, start, transform) {
function parent (line 24855) | function parent(object, path) {
function reorder (line 24869) | function reorder(array, indexes) {
function setWrapToString (line 24929) | function setWrapToString(wrapper, reference, bitmask) {
function shortOut (line 24943) | function shortOut(func) {
function shuffleSelf (line 24971) | function shuffleSelf(array, size) {
function toKey (line 25013) | function toKey(value) {
function toSource (line 25028) | function toSource(func) {
function updateWrapDetails (line 25048) | function updateWrapDetails(details, bitmask) {
function wrapperClone (line 25065) | function wrapperClone(wrapper) {
function chunk (line 25099) | function chunk(array, size, guard) {
function compact (line 25134) | function compact(array) {
function concat (line 25171) | function concat() {
function drop (line 25307) | function drop(array, n, guard) {
function dropRight (line 25341) | function dropRight(array, n, guard) {
function dropRightWhile (line 25386) | function dropRightWhile(array, predicate) {
function dropWhile (line 25427) | function dropWhile(array, predicate) {
function fill (line 25462) | function fill(array, value, start, end) {
function findIndex (line 25509) | function findIndex(array, predicate, fromIndex) {
function findLastIndex (line 25556) | function findLastIndex(array, predicate, fromIndex) {
function flatten (line 25585) | function flatten(array) {
function flattenDeep (line 25604) | function flattenDeep(array) {
function flattenDepth (line 25629) | function flattenDepth(array, depth) {
function fromPairs (line 25653) | function fromPairs(pairs) {
function head (line 25683) | function head(array) {
function indexOf (line 25710) | function indexOf(array, value, fromIndex) {
function initial (line 25736) | function initial(array) {
function join (line 25851) | function join(array, separator) {
function last (line 25869) | function last(array) {
function lastIndexOf (line 25895) | function lastIndexOf(array, value, fromIndex) {
function nth (line 25931) | function nth(array, n) {
function pullAll (line 25980) | function pullAll(array, values) {
function pullAllBy (line 26009) | function pullAllBy(array, values, iteratee) {
function pullAllWith (line 26038) | function pullAllWith(array, values, comparator) {
function remove (line 26107) | function remove(array, predicate) {
function reverse (line 26151) | function reverse(array) {
function slice (line 26171) | function slice(array, start, end) {
function sortedIndex (line 26204) | function sortedIndex(array, value) {
function sortedIndexBy (line 26233) | function sortedIndexBy(array, value, iteratee) {
function sortedIndexOf (line 26253) | function sortedIndexOf(array, value) {
function sortedLastIndex (line 26282) | function sortedLastIndex(array, value) {
function sortedLastIndexBy (line 26311) | function sortedLastIndexBy(array, value, iteratee) {
function sortedLastIndexOf (line 26331) | function sortedLastIndexOf(array, value) {
function sortedUniq (line 26357) | function sortedUniq(array) {
function sortedUniqBy (line 26379) | function sortedUniqBy(array, iteratee) {
function tail (line 26399) | function tail(array) {
function take (line 26429) | function take(array, n, guard) {
function takeRight (line 26462) | function takeRight(array, n, guard) {
function takeRightWhile (line 26507) | function takeRightWhile(array, predicate) {
function takeWhile (line 26548) | function takeWhile(array, predicate) {
function uniq (line 26650) | function uniq(array) {
function uniqBy (line 26677) | function uniqBy(array, iteratee) {
function uniqWith (line 26701) | function uniqWith(array, comparator) {
function unzip (line 26725) | function unzip(array) {
function unzipWith (line 26762) | function unzipWith(array, iteratee) {
function zipObject (line 26915) | function zipObject(props, values) {
function zipObjectDeep (line 26934) | function zipObjectDeep(props, values) {
function chain (line 26997) | function chain(value) {
function tap (line 27026) | function tap(value, interceptor) {
function thru (line 27054) | function thru(value, interceptor) {
function wrapperChain (line 27125) | function wrapperChain() {
function wrapperCommit (line 27155) | function wrapperCommit() {
function wrapperNext (line 27181) | function wrapperNext() {
function wrapperToIterator (line 27209) | function wrapperToIterator() {
function wrapperPlant (line 27237) | function wrapperPlant(value) {
function wrapperReverse (line 27277) | function wrapperReverse() {
function wrapperValue (line 27309) | function wrapperValue() {
function every (line 27386) | function every(collection, predicate, guard) {
function filter (line 27431) | function filter(collection, predicate) {
function flatMap (line 27516) | function flatMap(collection, iteratee) {
function flatMapDeep (line 27540) | function flatMapDeep(collection, iteratee) {
function flatMapDepth (line 27565) | function flatMapDepth(collection, iteratee, depth) {
function forEach (line 27600) | function forEach(collection, iteratee) {
function forEachRight (line 27625) | function forEachRight(collection, iteratee) {
function includes (line 27691) | function includes(collection, value, fromIndex, guard) {
function map (line 27812) | function map(collection, iteratee) {
function orderBy (line 27846) | function orderBy(collection, iteratees, orders, guard) {
function reduce (line 27937) | function reduce(collection, iteratee, accumulator) {
function reduceRight (line 27966) | function reduceRight(collection, iteratee, accumulator) {
function reject (line 28007) | function reject(collection, predicate) {
function sample (line 28026) | function sample(collection) {
function sampleSize (line 28051) | function sampleSize(collection, n, guard) {
function shuffle (line 28076) | function shuffle(collection) {
function size (line 28102) | function size(collection) {
function some (line 28152) | function some(collection, predicate, guard) {
function after (line 28250) | function after(n, func) {
function ary (line 28279) | function ary(func, n, guard) {
function before (line 28302) | function before(n, func) {
function curry (line 28458) | function curry(func, arity, guard) {
function curryRight (line 28503) | function curryRight(func, arity, guard) {
function debounce (line 28564) | function debounce(func, wait, options) {
function flip (line 28751) | function flip(func) {
function memoize (line 28799) | function memoize(func, resolver) {
function negate (line 28842) | function negate(predicate) {
function once (line 28876) | function once(func) {
function rest (line 29054) | function rest(func, start) {
function spread (line 29096) | function spread(func, start) {
function throttle (line 29156) | function throttle(func, wait, options) {
function unary (line 29189) | function unary(func) {
function wrap (line 29215) | function wrap(value, wrapper) {
function castArray (line 29254) | function castArray() {
function clone (line 29288) | function clone(value) {
function cloneWith (line 29323) | function cloneWith(value, customizer) {
function cloneDeep (line 29346) | function cloneDeep(value) {
function cloneDeepWith (line 29378) | function cloneDeepWith(value, customizer) {
function conformsTo (line 29407) | function conformsTo(object, source) {
function eq (line 29443) | function eq(value, other) {
function isArrayLike (line 29591) | function isArrayLike(value) {
function isArrayLikeObject (line 29620) | function isArrayLikeObject(value) {
function isBoolean (line 29641) | function isBoolean(value) {
function isElement (line 29701) | function isElement(value) {
function isEmpty (line 29738) | function isEmpty(value) {
function isEqual (line 29790) | function isEqual(value, other) {
function isEqualWith (line 29826) | function isEqualWith(value, other, customizer) {
function isError (line 29850) | function isError(value) {
function isFinite (line 29885) | function isFinite(value) {
function isFunction (line 29906) | function isFunction(value) {
function isInteger (line 29942) | function isInteger(value) {
function isLength (line 29972) | function isLength(value) {
function isObject (line 30002) | function isObject(value) {
function isObjectLike (line 30031) | function isObjectLike(value) {
function isMatch (line 30082) | function isMatch(object, source) {
function isMatchWith (line 30118) | function isMatchWith(object, source, customizer) {
function isNaN (line 30151) | function isNaN(value) {
function isNative (line 30184) | function isNative(value) {
function isNull (line 30208) | function isNull(value) {
function isNil (line 30232) | function isNil(value) {
function isNumber (line 30262) | function isNumber(value) {
function isPlainObject (line 30295) | function isPlainObject(value) {
function isSafeInteger (line 30354) | function isSafeInteger(value) {
function isString (line 30394) | function isString(value) {
function isSymbol (line 30416) | function isSymbol(value) {
function isUndefined (line 30457) | function isUndefined(value) {
function isWeakMap (line 30478) | function isWeakMap(value) {
function isWeakSet (line 30499) | function isWeakSet(value) {
function toArray (line 30578) | function toArray(value) {
function toFinite (line 30617) | function toFinite(value) {
function toInteger (line 30655) | function toInteger(value) {
function toLength (line 30689) | function toLength(value) {
function toNumber (line 30716) | function toNumber(value) {
function toPlainObject (line 30761) | function toPlainObject(value) {
function toSafeInteger (line 30789) | function toSafeInteger(value) {
function toString (line 30816) | function toString(value) {
function create (line 31019) | function create(prototype, properties) {
function findKey (line 31135) | function findKey(object, predicate) {
function findLastKey (line 31174) | function findLastKey(object, predicate) {
function forIn (line 31206) | function forIn(object, iteratee) {
function forInRight (line 31238) | function forInRight(object, iteratee) {
function forOwn (line 31272) | function forOwn(object, iteratee) {
function forOwnRight (line 31302) | function forOwnRight(object, iteratee) {
function functions (line 31329) | function functions(object) {
function functionsIn (line 31356) | function functionsIn(object) {
function get (line 31385) | function get(object, path, defaultValue) {
function has (line 31417) | function has(object, path) {
function hasIn (line 31447) | function hasIn(object, path) {
function keys (line 31565) | function keys(object) {
function keysIn (line 31592) | function keysIn(object) {
function mapKeys (line 31617) | function mapKeys(object, iteratee) {
function mapValues (line 31655) | function mapValues(object, iteratee) {
function omitBy (line 31797) | function omitBy(object, predicate) {
function pickBy (line 31840) | function pickBy(object, predicate) {
function result (line 31882) | function result(object, path, defaultValue) {
function set (line 31932) | function set(object, path, value) {
function setWith (line 31960) | function setWith(object, path, value, customizer) {
function transform (line 32047) | function transform(object, iteratee, accumulator) {
function unset (line 32097) | function unset(object, path) {
function update (line 32128) | function update(object, path, updater) {
function updateWith (line 32156) | function updateWith(object, path, updater, customizer) {
function values (line 32187) | function values(object) {
function valuesIn (line 32215) | function valuesIn(object) {
function clamp (line 32240) | function clamp(number, lower, upper) {
function inRange (line 32294) | function inRange(number, start, end) {
function random (line 32337) | function random(lower, upper, floating) {
function capitalize (line 32418) | function capitalize(string) {
function deburr (line 32440) | function deburr(string) {
function endsWith (line 32468) | function endsWith(string, target, position) {
function escape (line 32510) | function escape(string) {
function escapeRegExp (line 32532) | function escapeRegExp(string) {
function pad (line 32630) | function pad(string, length, chars) {
function padEnd (line 32669) | function padEnd(string, length, chars) {
function padStart (line 32702) | function padStart(string, length, chars) {
function parseInt (line 32736) | function parseInt(string, radix, guard) {
function repeat (line 32767) | function repeat(string, n, guard) {
function replace (line 32795) | function replace() {
function split (line 32846) | function split(string, separator, limit) {
function startsWith (line 32915) | function startsWith(string, target, position) {
function template (line 33029) | function template(string, options, guard) {
function toLower (line 33158) | function toLower(value) {
function toUpper (line 33183) | function toUpper(value) {
function trim (line 33209) | function trim(string, chars, guard) {
function trimEnd (line 33244) | function trimEnd(string, chars, guard) {
function trimStart (line 33277) | function trimStart(string, chars, guard) {
function truncate (line 33328) | function truncate(string, options) {
function unescape (line 33403) | function unescape(string) {
function words (line 33472) | function words(string, pattern, guard) {
function cond (line 33577) | function cond(pairs) {
function conforms (line 33623) | function conforms(source) {
function constant (line 33646) | function constant(value) {
function defaultTo (line 33672) | function defaultTo(value, defaultValue) {
function identity (line 33739) | function identity(value) {
function iteratee (line 33785) | function iteratee(func) {
function matches (line 33817) | function matches(source) {
function matchesProperty (line 33847) | function matchesProperty(path, srcValue) {
function mixin (line 33946) | function mixin(object, source, options) {
function noConflict (line 33995) | function noConflict() {
function noop (line 34014) | function noop() {
function nthArg (line 34038) | function nthArg(n) {
function property (line 34139) | function property(path) {
function propertyOf (line 34164) | function propertyOf(object) {
function stubArray (line 34269) | function stubArray() {
function stubFalse (line 34286) | function stubFalse() {
function stubObject (line 34308) | function stubObject() {
function stubString (line 34325) | function stubString() {
function stubTrue (line 34342) | function stubTrue() {
function times (line 34365) | function times(n, iteratee) {
function toPath (line 34400) | function toPath(value) {
function uniqueId (line 34424) | function uniqueId(prefix) {
function max (line 34533) | function max(array) {
function maxBy (line 34562) | function maxBy(array, iteratee) {
function mean (line 34582) | function mean(array) {
function meanBy (line 34609) | function meanBy(array, iteratee) {
function min (line 34631) | function min(array) {
function minBy (line 34660) | function minBy(array, iteratee) {
function sum (line 34741) | function sum(array) {
function sumBy (line 34770) | function sumBy(array, iteratee) {
function makeEmptyFunction (line 35386) | function makeEmptyFunction(arg) {
function invariant (line 35448) | function invariant(condition, format, a, b, c, d, e, f) {
function warning (line 35503) | function warning(message) {
function _interopRequireDefault (line 35578) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function createMuiTheme (line 35580) | function createMuiTheme() {
function _interopRequireDefault (line 35760) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function indentStr (line 35766) | function indentStr(str, indent) {
function toCss (line 35777) | function toCss(selector, style) {
function _interopRequireDefault (line 35846) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 35871) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function makeEmptyFunction (line 36116) | function makeEmptyFunction(arg) {
function invariant (line 36178) | function invariant(condition, format, a, b, c, d, e, f) {
function _interopRequireDefault (line 36241) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 36417) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function hasValue (line 36425) | function hasValue(value) {
function isDirty (line 36437) | function isDirty(obj) {
function isAdornedStart (line 36449) | function isAdornedStart(obj) {
function formControlState (line 36613) | function formControlState(props, context) {
function Input (line 36642) | function Input() {
function _interopRequireDefault (line 37078) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function Select (line 37135) | function Select(props) {
function _interopRequireDefault (line 37290) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 37351) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function Fade (line 37372) | function Fade() {
function _interopRequireDefault (line 37576) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function WithWidth (line 37609) | function WithWidth() {
function makeEmptyFunction (line 37759) | function makeEmptyFunction(arg) {
function invariant (line 37821) | function invariant(condition, format, a, b, c, d, e, f) {
function _interopRequireDefault (line 37887) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function makeEmptyFunction (line 37923) | function makeEmptyFunction(arg) {
function invariant (line 37985) | function invariant(condition, format, a, b, c, d, e, f) {
function makeEmptyFunction (line 38044) | function makeEmptyFunction(arg) {
function invariant (line 38106) | function invariant(condition, format, a, b, c, d, e, f) {
function makeEmptyFunction (line 38165) | function makeEmptyFunction(arg) {
function invariant (line 38227) | function invariant(condition, format, a, b, c, d, e, f) {
function _interopRequireDefault (line 38342) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function SwitchBase (line 38373) | function SwitchBase() {
function _interopRequireDefault (line 38612) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 38634) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 38656) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function makeEmptyFunction (line 38674) | function makeEmptyFunction(arg) {
function invariant (line 38736) | function invariant(condition, format, a, b, c, d, e, f) {
function _toConsumableArray (line 38884) | function _toConsumableArray(arr) {
function _interopRequireDefault (line 39035) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function getTranslateValue (line 39044) | function getTranslateValue(props, node) {
function setTranslateValue (line 39079) | function setTranslateValue(props, node) {
function Slide (line 39096) | function Slide() {
function _interopRequireDefault (line 39408) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function Collapse (line 39440) | function Collapse() {
function toObject (line 39688) | function toObject(val) {
function shouldUseNative (line 39696) | function shouldUseNative() {
function toObject (line 39785) | function toObject(val) {
function shouldUseNative (line 39793) | function shouldUseNative() {
function invariant (line 39925) | function invariant(condition, format, a, b, c, d, e, f) {
function toObject (line 40074) | function toObject(val) {
function shouldUseNative (line 40082) | function shouldUseNative() {
function getActiveElement (line 40263) | function getActiveElement(doc) /*?DOMElement*/{
function is (line 40302) | function is(x, y) {
function shallowEqual (line 40320) | function shallowEqual(objA, objB) {
function containsNode (line 40371) | function containsNode(outerNode, innerNode) {
function focusNode (line 40410) | function focusNode(node) {
function invariant (line 40481) | function invariant(condition, format, a, b, c, d, e, f) {
function _interopRequireDefault (line 40607) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 40609) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 40611) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 40613) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function ReactGridLayout (line 40626) | function ReactGridLayout(props, context) {
function classNames (line 41278) | function classNames () {
function __webpack_require__ (line 41336) | function __webpack_require__(moduleId) {
function findInArray (line 41413) | function findInArray(array /*: Array<any> | TouchList*/, callback /*: Fu...
function isFunction (line 41419) | function isFunction(func /*: any*/) /*: boolean*/ {
function isNum (line 41423) | function isNum(num /*: any*/) /*: boolean*/ {
function int (line 41427) | function int(a /*: string*/) /*: number*/ {
function dontSetMe (line 41431) | function dontSetMe(props /*: Object*/, propName /*: string*/, componentN...
function makeEmptyFunction (line 41455) | function makeEmptyFunction(arg) {
function invariant (line 41519) | function invariant(condition, format, a, b, c, d, e, f) {
function _interopRequireDefault (line 41607) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _defineProperty (line 41609) | function _defineProperty(obj, key, value) { if (key in obj) { Object.def...
function matchesSelector (line 41615) | function matchesSelector(el /*: Node*/, selector /*: string*/) /*: boole...
function matchesSelectorAndParentsTo (line 41628) | function matchesSelectorAndParentsTo(el /*: Node*/, selector /*: string*...
function addEvent (line 41639) | function addEvent(el /*: ?Node*/, event /*: string*/, handler /*: Functi...
function removeEvent (line 41653) | function removeEvent(el /*: ?Node*/, event /*: string*/, handler /*: Fun...
function outerHeight (line 41667) | function outerHeight(node /*: HTMLElement*/) /*: number*/ {
function outerWidth (line 41677) | function outerWidth(node /*: HTMLElement*/) /*: number*/ {
function innerHeight (line 41686) | function innerHeight(node /*: HTMLElement*/) /*: number*/ {
function innerWidth (line 41694) | function innerWidth(node /*: HTMLElement*/) /*: number*/ {
function offsetXYFromParent (line 41703) | function offsetXYFromParent(evt /*: {clientX: number, clientY: number}*/...
function createCSSTransform (line 41713) | function createCSSTransform(_ref) /*: Object*/ {
function createSVGTransform (line 41721) | function createSVGTransform(_ref3) /*: string*/ {
function getTouch (line 41728) | function getTouch(e /*: MouseTouchEvent*/, identifier /*: number*/) /*: ...
function getTouchIdentifier (line 41736) | function getTouchIdentifier(e /*: MouseTouchEvent*/) /*: ?number*/ {
function addUserSelectStyles (line 41746) | function addUserSelectStyles(doc /*: Document*/) {
function removeUserSelectStyles (line 41759) | function removeUserSelectStyles(doc /*: Document*/) {
function styleHacks (line 41764) | function styleHacks() /*: Object*/ {
function addClassName (line 41774) | function addClassName(el /*: HTMLElement*/, className /*: string*/) {
function removeClassName (line 41784) | function removeClassName(el /*: HTMLElement*/, className /*: string*/) {
function _interopRequireDefault (line 41930) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function getBoundPosition (line 41935) | function getBoundPosition(draggable /*: Draggable*/, x /*: number*/, y /...
function snapToGrid (line 41980) | function snapToGrid(grid /*: [number, number]*/, pendingX /*: number*/, ...
function canDragX (line 41986) | function canDragX(draggable /*: Draggable*/) /*: boolean*/ {
function canDragY (line 41990) | function canDragY(draggable /*: Draggable*/) /*: boolean*/ {
function getControlPosition (line 41995) | function getControlPosition(e /*: MouseTouchEvent*/, touchIdentifier /*:...
function createCoreData (line 42005) | function createCoreData(draggable /*: DraggableCore*/, x /*: number*/, y...
function createDraggableData (line 42030) | function createDraggableData(draggable /*: Draggable*/, coreData /*: Dra...
function cloneBounds (line 42043) | function cloneBounds(bounds /*: Bounds*/) /*: Bounds*/ {
function findDOMNode (line 42052) | function findDOMNode(draggable /*: Draggable | DraggableCore*/) /*: HTML...
function sliceIterator (line 42072) | function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = ...
function defineProperties (line 42074) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireDefault (line 42098) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 42100) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 42102) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 42104) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function DraggableCore (line 42174) | function DraggableCore() {
function log (line 42543) | function log() {
function sliceIterator (line 42579) | function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = ...
function defineProperties (line 42581) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireDefault (line 42613) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _defineProperty (line 42615) | function _defineProperty(obj, key, value) { if (key in obj) { Object.def...
function _classCallCheck (line 42617) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 42619) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 42621) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function Draggable (line 42653) | function Draggable(props /*: DraggableProps*/) {
function getIteratorFn (line 43019) | function getIteratorFn(maybeIterable) {
function is (line 43102) | function is(x, y) {
function PropTypeError (line 43122) | function PropTypeError(message) {
function createChainableTypeChecker (line 43129) | function createChainableTypeChecker(validate) {
function createPrimitiveTypeChecker (line 43189) | function createPrimitiveTypeChecker(expectedType) {
function createAnyTypeChecker (line 43206) | function createAnyTypeChecker() {
function createArrayOfTypeChecker (line 43210) | function createArrayOfTypeChecker(typeChecker) {
function createElementTypeChecker (line 43231) | function createElementTypeChecker() {
function createInstanceTypeChecker (line 43243) | function createInstanceTypeChecker(expectedClass) {
function createEnumTypeChecker (line 43255) | function createEnumTypeChecker(expectedValues) {
function createObjectOfTypeChecker (line 43275) | function createObjectOfTypeChecker(typeChecker) {
function createUnionTypeChecker (line 43298) | function createUnionTypeChecker(arrayOfTypeCheckers) {
function createNodeChecker (line 43331) | function createNodeChecker() {
function createShapeTypeChecker (line 43341) | function createShapeTypeChecker(shapeTypes) {
function isNode (line 43363) | function isNode(propValue) {
function isSymbol (line 43410) | function isSymbol(propType, propValue) {
function getPropType (line 43430) | function getPropType(propValue) {
function getPreciseType (line 43449) | function getPreciseType(propValue) {
function getPostfixForTypeWarning (line 43466) | function getPostfixForTypeWarning(value) {
function getClassName (line 43482) | function getClassName(propValue) {
function checkPropTypes (line 43530) | function checkPropTypes(typeSpecs, values, location, componentName, getS...
function shim (line 43585) | function shim(props, propName, componentName, location, propFullName, se...
function getShim (line 43598) | function getShim() {
function classNames (line 43646) | function classNames () {
function getPrefix (line 43699) | function getPrefix() /*: string*/ {
function browserPrefixToKey (line 43718) | function browserPrefixToKey(prop /*: string*/, prefix /*: string*/) /*: ...
function browserPrefixToStyle (line 43722) | function browserPrefixToStyle(prop /*: string*/, prefix /*: string*/) /*...
function kebabToTitleCase (line 43726) | function kebabToTitleCase(str /*: string*/) /*: string*/ {
function defaultSetTimout (line 43762) | function defaultSetTimout() {
function defaultClearTimeout (line 43765) | function defaultClearTimeout () {
function runTimeout (line 43788) | function runTimeout(fun) {
function runClearTimeout (line 43813) | function runClearTimeout(marker) {
function cleanUpNextTick (line 43845) | function cleanUpNextTick() {
function drainQueue (line 43860) | function drainQueue() {
function Item (line 43898) | function Item(fun, array) {
function noop (line 43912) | function noop() {}
function _interopRequireDefault (line 43967) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _objectWithoutProperties (line 43969) | function _objectWithoutProperties(obj, keys) { var target = {}; for (var...
function _classCallCheck (line 43971) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 43973) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 43975) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function Resizable (line 43980) | function Resizable() {
function getBreakpointFromWidth (line 44235) | function getBreakpointFromWidth(breakpoints, width) {
function getColsFromBreakpoint (line 44253) | function getColsFromBreakpoint(breakpoint, cols) {
function findOrGenerateResponsiveLayout (line 44274) | function findOrGenerateResponsiveLayout(layouts, breakpoints, breakpoint...
function sortBreakpoints (line 44299) | function sortBreakpoints(breakpoints) {
function isCrushed (line 44403) | function isCrushed() {}
function createStore (line 44459) | function createStore(reducer, preloadedState, enhancer) {
function isPlainObject (line 44727) | function isPlainObject(value) {
function warning (line 44769) | function warning(message) {
function compose (line 44802) | function compose() {
function _classCallCheck (line 44968) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 44970) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 44972) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function _objectWithoutProperties (line 44974) | function _objectWithoutProperties(obj, keys) { var target = {}; for (var...
function noop (line 44985) | function noop() {}
function makeSelectorStateful (line 44986) | function makeSelectorStateful(sourceSelector, store) {
function connectAdvanced (line 45007) | function connectAdvanced(
function wrapMapToPropsConstant (line 45268) | function wrapMapToPropsConstant(getConstant) {
function getDependsOnOwnProps (line 45287) | function getDependsOnOwnProps(mapToProps) {
function wrapMapToPropsFunc (line 45303) | function wrapMapToPropsFunc(mapToProps, methodName) {
function verifyPlainObject (line 45346) | function verifyPlainObject(value, displayName, methodName) {
function _interopRequireDefault (line 45413) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function createGenerateClassName (line 45423) | function createGenerateClassName() {
function _interopRequireDefault (line 45726) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function jssPreset (line 45730) | function jssPreset() {
function _interopRequireDefault (line 45817) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function defineProperties (line 45842) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _classCallCheck (line 45844) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function SheetsRegistry (line 45850) | function SheetsRegistry() {
function _interopRequireDefault (line 45950) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function linkRule (line 45970) | function linkRule(rule, cssRule) {
function _interopRequireDefault (line 45998) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function defineProperties (line 46052) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireDefault (line 46062) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 46064) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function StyleSheet (line 46067) | function StyleSheet(styles, options) {
function isObject (line 46639) | function isObject(value) {
function is (line 46699) | function is(x, y) {
function shallowEqual (line 46717) | function shallowEqual(objA, objB) {
function _interopRequireDefault (line 46801) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 46843) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function FormGroup (line 46861) | function FormGroup(props) {
function _interopRequireDefault (line 46969) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function FormControl (line 47011) | function FormControl(props, context) {
function _interopRequireDefault (line 47234) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function FormHelperText (line 47260) | function FormHelperText(props, context) {
function _interopRequireDefault (line 47353) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 47427) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function Menu (line 47453) | function Menu() {
function _interopRequireDefault (line 47677) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 47699) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function activeElement (line 47701) | function activeElement() {
function _interopRequireDefault (line 47749) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function RefHolder (line 47760) | function RefHolder() {
function _interopRequireDefault (line 47804) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 47845) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function findIndexOf (line 47847) | function findIndexOf(data, callback) {
function findContainer (line 47859) | function findContainer(data, modal) {
function getPaddingRight (line 47865) | function getPaddingRight(node) {
function setContainerStyle (line 47869) | function setContainerStyle(data, container) {
function removeContainerStyle (line 47898) | function removeContainerStyle(data, container) {
function _interopRequireDefault (line 48030) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function camelizeStyleName (line 48037) | function camelizeStyleName(string) {
function _interopRequireDefault (line 48086) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function Backdrop (line 48106) | function Backdrop(props) {
function _interopRequireDefault (line 48208) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function getScale (line 48210) | function getScale(value) {
function Grow (line 48233) | function Grow() {
function _interopRequireDefault (line 48482) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function MenuList (line 48489) | function MenuList() {
function _interopRequireDefault (line 48735) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function ListItem (line 48798) | function ListItem() {
function _interopRequireDefault (line 48956) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 48977) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 49096) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function AwaitValue (line 49222) | function AwaitValue(value) {
function AsyncGenerator (line 49226) | function AsyncGenerator(gen) {
function defineProperties (line 49345) | function defineProperties(target, props) {
function sliceIterator (line 49436) | function sliceIterator(arr, i) {
function PluginIndexerContext (line 49539) | function PluginIndexerContext() {
function Template (line 49574) | function Template(props, context) {
function TemplatePlaceholder (line 49653) | function TemplatePlaceholder(props, context) {
function PluginHost$$1 (line 49785) | function PluginHost$$1(props) {
function Plugin (line 49838) | function Plugin() {
function Action (line 49956) | function Action() {
function Getter (line 50035) | function Getter() {
function undefined (line 50058) | function undefined(_x) {
function TemplateConnector (line 50143) | function TemplateConnector(props, context) {
function TouchStrategy (line 50207) | function TouchStrategy(delegate) {
function MouseStrategy (line 50322) | function MouseStrategy(delegate) {
function Draggable (line 50425) | function Draggable(props, context) {
function DragDropProviderCore (line 50573) | function DragDropProviderCore() {
function DragDropProvider (line 50604) | function DragDropProvider(props) {
function DragSource (line 50661) | function DragSource() {
function DropTarget (line 50739) | function DropTarget(props, context) {
function RenderComponent (line 50830) | function RenderComponent() {
function AwaitValue (line 51212) | function AwaitValue(value) {
function AsyncGenerator (line 51216) | function AsyncGenerator(gen) {
function sliceIterator (line 51396) | function sliceIterator(arr, i) {
function _interopRequireDefault (line 52919) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 52941) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 53026) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 53072) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function TableCell (line 53116) | function TableCell(props, context) {
function _interopRequireDefault (line 53233) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 53275) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 53314) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 53356) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function Avatar (line 53388) | function Avatar(props) {
function _interopRequireDefault (line 53508) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 53533) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 53573) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 53604) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 53670) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 53823) | function _interopRequireDefault(obj) {
function _classCallCheck (line 53835) | function _classCallCheck(instance, Constructor) {
function defineProperties (line 53842) | function defineProperties(target, props) {
function _possibleConstructorReturn (line 53859) | function _possibleConstructorReturn(self, call) {
function _inherits (line 53867) | function _inherits(subClass, superClass) {
function SAlertContent (line 53886) | function SAlertContent(props) {
function defineProperties (line 54023) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireDefault (line 54065) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 54067) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 54069) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 54071) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function TableHeaderColumn (line 54078) | function TableHeaderColumn(props) {
function _interopRequireDefault (line 54510) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 54654) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function defineProperties (line 54693) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireDefault (line 54703) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 54705) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 54707) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 54709) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function SizePerPageDropDown (line 54716) | function SizePerPageDropDown() {
function hidden (line 54843) | function hidden(el) {
function visible (line 54847) | function visible(element) {
function focusable (line 54857) | function focusable(element, isTabIndexNotNaN) {
function tabbable (line 54863) | function tabbable(element) {
function findTabbableDescendants (line 54870) | function findTabbableDescendants(element) {
function assertNodeList (line 54895) | function assertNodeList(nodeList, selector) {
function setElement (line 54901) | function setElement(element) {
function tryForceFallback (line 54912) | function tryForceFallback() {
function validateElement (line 54921) | function validateElement(appElement) {
function hide (line 54927) | function hide(appElement) {
function show (line 54932) | function show(appElement) {
function documentNotReadyOrSSRTesting (line 54937) | function documentNotReadyOrSSRTesting() {
function resetForTesting (line 54941) | function resetForTesting() {
function get (line 54961) | function get() {
function add (line 54965) | function add(bodyClass) {
function remove (line 54974) | function remove(bodyClass) {
function totalCount (line 54981) | function totalCount() {
function _interopRequireDefault (line 55003) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function defineProperties (line 55024) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireDefault (line 55038) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 55040) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 55042) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 55044) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function InsertModalHeader (line 55049) | function InsertModalHeader() {
function defineProperties (line 55187) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireDefault (line 55201) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 55203) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 55205) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 55207) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function InsertModalFooter (line 55212) | function InsertModalFooter() {
function defineProperties (line 55359) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireDefault (line 55373) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 55375) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 55377) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 55379) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function InsertModalBody (line 55385) | function InsertModalBody() {
function defineProperties (line 55527) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireDefault (line 55541) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _objectWithoutProperties (line 55543) | function _objectWithoutProperties(obj, keys) { var target = {}; for (var...
function _classCallCheck (line 55545) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 55547) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 55549) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function InsertButton (line 55556) | function InsertButton() {
function defineProperties (line 55641) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireDefault (line 55655) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _objectWithoutProperties (line 55657) | function _objectWithoutProperties(obj, keys) { var target = {}; for (var...
function _classCallCheck (line 55659) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 55661) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 55663) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function DeleteButton (line 55670) | function DeleteButton() {
function defineProperties (line 55755) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireDefault (line 55769) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _objectWithoutProperties (line 55771) | function _objectWithoutProperties(obj, keys) { var target = {}; for (var...
function _classCallCheck (line 55773) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 55775) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 55777) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function ExportCSVButton (line 55784) | function ExportCSVButton() {
function defineProperties (line 55869) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireDefault (line 55883) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _objectWithoutProperties (line 55885) | function _objectWithoutProperties(obj, keys) { var target = {}; for (var...
function _classCallCheck (line 55887) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 55889) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 55891) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function ShowSelectedOnlyButton (line 55898) | function ShowSelectedOnlyButton() {
function defineProperties (line 55986) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireDefault (line 56000) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _objectWithoutProperties (line 56002) | function _objectWithoutProperties(obj, keys) { var target = {}; for (var...
function _classCallCheck (line 56004) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 56006) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 56008) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function SearchField (line 56013) | function SearchField() {
function defineProperties (line 56095) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireDefault (line 56105) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _objectWithoutProperties (line 56107) | function _objectWithoutProperties(obj, keys) { var target = {}; for (var...
function _classCallCheck (line 56109) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 56111) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 56113) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function ClearSearchButton (line 56120) | function ClearSearchButton() {
function _interopRequireDefault (line 56221) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _defineProperty (line 56223) | function _defineProperty(obj, key, value) { if (key in obj) { Object.def...
function _interopRequireDefault (line 56331) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function ClickAwayListener (line 56347) | function ClickAwayListener() {
function _interopRequireDefault (line 56431) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 56462) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 56514) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function SnackbarContent (line 56551) | function SnackbarContent(props) {
function _interopRequireDefault (line 56654) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function StepLabel (line 56695) | function StepLabel(props) {
function _interopRequireDefault (line 56847) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function StepIcon (line 56860) | function StepIcon(props) {
function _interopRequireDefault (line 56937) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function createMarkupForStyles (line 57046) | function createMarkupForStyles(styles, component) {
function capitalizeString (line 57153) | function capitalizeString(str) {
function isValidDelay (line 57174) | function isValidDelay(val) {
function objectValues (line 57178) | function objectValues(obj) {
function withRequired (line 57184) | function withRequired(fn) {
function _toConsumableArray (line 57228) | function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i ...
function defineProperties (line 57279) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _interopRequireDefault (line 57337) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 57339) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 57341) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 57343) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function BasicLayout (line 57369) | function BasicLayout(props) {
function y (line 57475) | function y(a){for(var b=arguments.length-1,e="Minified React error #"+a+...
function A (line 57476) | function A(a,b,e){this.props=a;this.context=b;this.refs=n;this.updater=e...
function B (line 57477) | function B(a,b,e){this.props=a;this.context=b;this.refs=n;this.updater=e...
function C (line 57477) | function C(){}
function E (line 57477) | function E(a,b,e){this.props=a;this.context=b;this.refs=n;this.updater=e...
function J (line 57478) | function J(a,b,e){var c,d={},g=null,k=null;if(null!=b)for(c in void 0!==...
function K (line 57478) | function K(a){return"object"===typeof a&&null!==a&&a.$$typeof===r}
function escape (line 57479) | function escape(a){var b={"\x3d":"\x3d0",":":"\x3d2"};return"$"+(""+a).r...
function N (line 57479) | function N(a,b,e,c){if(M.length){var d=M.pop();d.result=a;d.keyPrefix=b;...
function O (line 57479) | function O(a){a.result=null;a.keyPrefix=null;a.func=null;a.context=null;...
function P (line 57480) | function P(a,b,e,c){var d=typeof a;if("undefined"===d||"boolean"===d)a=n...
function Q (line 57481) | function Q(a,b){return"object"===typeof a&&null!==a&&null!=a.key?escape(...
function R (line 57481) | function R(a,b){a.func.call(a.context,b,a.count++)}
function S (line 57482) | function S(a,b,e){var c=a.result,d=a.keyPrefix;a=a.func.call(a.context,b...
function T (line 57482) | function T(a,b,e,c,d){var g="";null!=e&&(g=(""+e).replace(L,"$\x26/")+"/...
function getIteratorFn (line 57534) | function getIteratorFn(maybeIterable) {
function warnNoop (line 57607) | function warnNoop(publicInstance, callerName) {
function Component (line 57691) | function Component(props, context, updater) {
function PureComponent (line 57778) | function PureComponent(props, context, updater) {
function ComponentDummy (line 57788) | function ComponentDummy() {}
function AsyncComponent (line 57796) | function AsyncComponent(props, context, updater) {
function hasValidRef (line 57841) | function hasValidRef(config) {
function hasValidKey (line 57853) | function hasValidKey(config) {
function defineKeyPropWarningGetter (line 57865) | function defineKeyPropWarningGetter(props, displayName) {
function defineRefPropWarningGetter (line 57879) | function defineRefPropWarningGetter(props, displayName) {
function createElement (line 57973) | function createElement(type, config, children) {
function cloneAndReplaceKey (line 58051) | function cloneAndReplaceKey(oldElement, newKey) {
function cloneElement (line 58061) | function cloneElement(element, config, children) {
function isValidElement (line 58130) | function isValidElement(object) {
function escape (line 58158) | function escape(key) {
function escapeUserProvidedKey (line 58179) | function escapeUserProvidedKey(text) {
function getPooledTraverseContext (line 58185) | function getPooledTraverseContext(mapResult, keyPrefix, mapFunction, map...
function releaseTraverseContext (line 58205) | function releaseTraverseContext(traverseContext) {
function traverseAllChildrenImpl (line 58224) | function traverseAllChildrenImpl(children, nameSoFar, callback, traverse...
function traverseAllChildren (line 58320) | function traverseAllChildren(children, callback, traverseContext) {
function getComponentKey (line 58335) | function getComponentKey(component, index) {
function forEachSingleChild (line 58346) | function forEachSingleChild(bookKeeping, child, name) {
function forEachChildren (line 58365) | function forEachChildren(children, forEachFunc, forEachContext) {
function mapSingleChildIntoContext (line 58374) | function mapSingleChildIntoContext(bookKeeping, child, childKey) {
function mapIntoWithKeyPrefixInternal (line 58395) | function mapIntoWithKeyPrefixInternal(children, array, prefix, func, con...
function mapChildren (line 58418) | function mapChildren(children, func, context) {
function countChildren (line 58436) | function countChildren(children, context) {
function toArray (line 58446) | function toArray(children) {
function onlyChild (line 58466) | function onlyChild(children) {
function getComponentName (line 58475) | function getComponentName(fiber) {
function getDeclarationErrorAddendum (line 58527) | function getDeclarationErrorAddendum() {
function getSourceInfoErrorAddendum (line 58537) | function getSourceInfoErrorAddendum(elementProps) {
function getCurrentComponentErrorInfo (line 58554) | function getCurrentComponentErrorInfo(parentType) {
function validateExplicitKey (line 58577) | function validateExplicitKey(element, parentType) {
function validateChildKeys (line 58614) | function validateChildKeys(node, parentType) {
function validatePropTypes (line 58654) | function validatePropTypes(element) {
function validateFragmentProps (line 58678) | function validateFragmentProps(fragment) {
function createElementWithValidation (line 58716) | function createElementWithValidation(type, props, children) {
function createFactoryWithValidation (line 58766) | function createFactoryWithValidation(type) {
function cloneElementWithValidation (line 58787) | function cloneElementWithValidation(element, props, children) {
function checkPropTypes (line 58885) | function checkPropTypes(typeSpecs, values, location, componentName, getS...
function E (line 58957) | function E(a){for(var b=arguments.length-1,c="Minified React error #"+a+...
function pa (line 58958) | function pa(a,b){return(a&b)===b}
function va (line 58961) | function va(a,b){if(oa.hasOwnProperty(a)||2<a.length&&("o"===a[0]||"O"==...
function wa (line 58961) | function wa(a){return ua.hasOwnProperty(a)?ua[a]:null}
function Ia (line 58965) | function Ia(a){return a[1].toUpperCase()}
function Ja (line 58969) | function Ja(a,b,c,d,e,f,g,h,k){P._hasCaughtError=!1;P._caughtError=null;...
function Ka (line 58970) | function Ka(){if(P._hasRethrowError){var a=P._rethrowError;P._rethrowErr...
function Na (line 58971) | function Na(){if(La)for(var a in Ma){var b=Ma[a],c=La.indexOf(a);-1<c?vo...
function Qa (line 58972) | function Qa(a,b,c){Ra[a]?E("100",a):void 0;Ra[a]=b;Sa[a]=b.eventTypes[c]...
function Ta (line 58972) | function Ta(a){La?E("101"):void 0;La=Array.prototype.slice.call(a);Na()}
function Ua (line 58972) | function Ua(a){var b=!1,c;for(c in a)if(a.hasOwnProperty(c)){var d=a[c];...
function Za (line 58973) | function Za(a,b,c,d){b=a.type||"unknown-event";a.currentTarget=Ya(d);P.i...
function $a (line 58974) | function $a(a,b){null==b?E("30"):void 0;if(null==a)return b;if(Array.isA...
function ab (line 58974) | function ab(a,b,c){Array.isArray(a)?a.forEach(b,c):a&&b.call(c,a)}
function cb (line 58975) | function cb(a,b){if(a){var c=a._dispatchListeners,d=a._dispatchInstances...
function db (line 58975) | function db(a){return cb(a,!0)}
function gb (line 58975) | function gb(a){return cb(a,!1)}
function ib (line 58976) | function ib(a,b){var c=a.stateNode;if(!c)return null;var d=Wa(c);if(!d)r...
function jb (line 58977) | function jb(a,b,c,d){for(var e,f=0;f<Oa.length;f++){var g=Oa[f];g&&(g=g....
function kb (line 58977) | function kb(a){a&&(bb=$a(bb,a))}
function lb (line 58977) | function lb(a){var b=bb;bb=null;b&&(a?ab(b,db):ab(b,gb),bb?E("95"):void ...
function pb (line 58978) | function pb(a){if(a[Q])return a[Q];for(var b=[];!a[Q];)if(b.push(a),a.pa...
function qb (line 58978) | function qb(a){if(5===a.tag||6===a.tag)return a.stateNode;E("33")}
function rb (line 58978) | function rb(a){return a[ob]||null}
function tb (line 58979) | function tb(a){do a=a["return"];while(a&&5!==a.tag);return a?a:null}
function ub (line 58979) | function ub(a,b,c){for(var d=[];a;)d.push(a),a=tb(a);for(a=d.length;0<a-...
function vb (line 58980) | function vb(a,b,c){if(b=ib(a,c.dispatchConfig.phasedRegistrationNames[b]...
function wb (line 58980) | function wb(a){a&&a.dispatchConfig.phasedRegistrationNames&&ub(a._target...
function xb (line 58980) | function xb(a){if(a&&a.dispatchConfig.phasedRegistrationNames){var b=a._...
function yb (line 58981) | function yb(a,b,c){a&&c&&c.dispatchConfig.registrationName&&(b=ib(a,c.di...
function zb (line 58981) | function zb(a){a&&a.dispatchConfig.registrationName&&yb(a._targetInst,nu...
function Ab (line 58981) | function Ab(a){ab(a,wb)}
function Bb (line 58982) | function Bb(a,b,c,d){if(c&&d)a:{var e=c;for(var f=d,g=0,h=e;h;h=tb(h))g+...
function Eb (line 58983) | function Eb(){!Db&&l.canUseDOM&&(Db="textContent"in document.documentEle...
function Fb (line 58984) | function Fb(){if(S._fallbackText)return S._fallbackText;var a,b=S._start...
function Gb (line 58984) | function Gb(){return"value"in S._root?S._root.value:S._root[Eb()]}
function T (line 58986) | function T(a,b,c,d){this.dispatchConfig=a;this._targetInst=b;this.native...
function c (line 58988) | function c(){}
function Kb (line 58988) | function Kb(a,b,c,d){if(this.eventPool.length){var e=this.eventPool.pop(...
function Lb (line 58989) | function Lb(a){a instanceof this?void 0:E("223");a.destructor();10>this....
function Jb (line 58989) | function Jb(a){a.eventPool=[];a.getPooled=Kb;a.release=Lb}
function Mb (line 58989) | function Mb(a,b,c,d){return T.call(this,a,b,c,d)}
function Nb (line 58989) | function Nb(a,b,c,d){return T.call(this,a,b,c,d)}
function dc (line 58993) | function dc(a,b){switch(a){case "topKeyUp":return-1!==Pb.indexOf(b.keyCo...
function ec (line 58993) | function ec(a){a=a.detail;return"object"===typeof a&&"data"in a?a.data:n...
function gc (line 58993) | function gc(a,b){switch(a){case "topCompositionEnd":return ec(b);case "t...
function hc (line 58994) | function hc(a,b){if(fc)return"topCompositionEnd"===a||!Vb&&dc(a,b)?(a=Fb...
function mc (line 58996) | function mc(a){if(a=Xa(a)){jc&&"function"===typeof jc.restoreControlledS...
function oc (line 58996) | function oc(a){kc?lc?lc.push(a):lc=[a]:kc=a}
function pc (line 58997) | function pc(){if(kc){var a=kc,b=lc;lc=kc=null;mc(a);if(b)for(a=0;a<b.len...
function rc (line 58997) | function rc(a,b){return a(b)}
function tc (line 58997) | function tc(a,b){if(sc)return rc(a,b);sc=!0;try{return rc(a,b)}finally{s...
function vc (line 58998) | function vc(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return"inpu...
function wc (line 58998) | function wc(a){a=a.target||a.srcElement||window;a.correspondingUseElemen...
function yc (line 58999) | function yc(a,b){if(!l.canUseDOM||b&&!("addEventListener"in document))re...
function zc (line 58999) | function zc(a){var b=a.type;return(a=a.nodeName)&&"input"===a.toLowerCas...
function Ac (line 59000) | function Ac(a){var b=zc(a)?"checked":"value",c=Object.getOwnPropertyDesc...
function Bc (line 59001) | function Bc(a){a._valueTracker||(a._valueTracker=Ac(a))}
function Cc (line 59001) | function Cc(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c...
function Ec (line 59002) | function Ec(a,b,c){a=T.getPooled(Dc.change,a,b,c);a.type="change";oc(c);...
function Hc (line 59002) | function Hc(a){kb(a);lb(!1)}
function Ic (line 59002) | function Ic(a){var b=qb(a);if(Cc(b))return a}
function Jc (line 59002) | function Jc(a,b){if("topChange"===a)return b}
function Lc (line 59002) | function Lc(){Fc&&(Fc.detachEvent("onpropertychange",Mc),Gc=Fc=null)}
function Mc (line 59002) | function Mc(a){"value"===a.propertyName&&Ic(Gc)&&(a=Ec(Gc,a,wc(a)),tc(Hc...
function Nc (line 59003) | function Nc(a,b,c){"topFocus"===a?(Lc(),Fc=b,Gc=c,Fc.attachEvent("onprop...
function Oc (line 59003) | function Oc(a){if("topSelectionChange"===a||"topKeyUp"===a||"topKeyDown"...
function Pc (line 59003) | function Pc(a,b){if("topClick"===a)return Ic(b)}
function $c (line 59003) | function $c(a,b){if("topInput"===a||"topChange"===a)return Ic(b)}
function bd (line 59005) | function bd(a,b,c,d){return T.call(this,a,b,c,d)}
function dd (line 59005) | function dd(a){var b=this.nativeEvent;return b.getModifierState?b.getMod...
function ed (line 59005) | function ed(){return dd}
function fd (line 59005) | function fd(a,b,c,d){return T.call(this,a,b,c,d)}
function jd (line 59008) | function jd(a){a=a.type;return"string"===typeof a?a:"function"===typeof ...
function kd (line 59009) | function kd(a){var b=a;if(a.alternate)for(;b["return"];)b=b["return"];el...
function ld (line 59009) | function ld(a){return(a=a._reactInternalFiber)?2===kd(a):!1}
function md (line 59009) | function md(a){2!==kd(a)?E("188"):void 0}
function nd (line 59010) | function nd(a){var b=a.alternate;if(!b)return b=kd(a),3===b?E("188"):voi...
function od (line 59011) | function od(a){a=nd(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6=...
function pd (line 59012) | function pd(a){a=nd(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6=...
function rd (line 59013) | function rd(a){var b=a.targetInst;do{if(!b){a.ancestors.push(b);break}va...
function ud (line 59013) | function ud(a){td=!!a}
function U (line 59013) | function U(a,b,c){return c?ba.listen(c,b,vd.bind(null,a)):null}
function wd (line 59013) | function wd(a,b,c){return c?ba.capture(c,b,vd.bind(null,a)):null}
function vd (line 59014) | function vd(a,b){if(td){var c=wc(b);c=pb(c);null===c||"number"!==typeof ...
method _enabled (line 59015) | get _enabled(){return td}
method _handleTopLevel (line 59015) | get _handleTopLevel(){return sd}
function yd (line 59015) | function yd(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c["Webkit"+...
function Cd (line 59017) | function Cd(a){if(Ad[a])return Ad[a];if(!zd[a])return a;var b=zd[a],c;fo...
function Hd (line 59021) | function Hd(a){Object.prototype.hasOwnProperty.call(a,Gd)||(a[Gd]=Fd++,E...
function Id (line 59021) | function Id(a){for(;a&&a.firstChild;)a=a.firstChild;return a}
function Jd (line 59022) | function Jd(a,b){var c=Id(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c....
function Kd (line 59022) | function Kd(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(...
function Rd (line 59024) | function Rd(a,b){if(Qd||null==Nd||Nd!==da())return null;var c=Nd;"select...
function Td (line 59026) | function Td(a,b,c,d){return T.call(this,a,b,c,d)}
function Ud (line 59026) | function Ud(a,b,c,d){return T.call(this,a,b,c,d)}
function Vd (line 59026) | function Vd(a,b,c,d){return T.call(this,a,b,c,d)}
function Wd (line 59027) | function Wd(a){var b=a.keyCode;"charCode"in a?(a=a.charCode,0===a&&13===...
function Zd (line 59029) | function Zd(a,b,c,d){return T.call(this,a,b,c,d)}
function $d (line 59031) | function $d(a,b,c,d){return T.call(this,a,b,c,d)}
function ae (line 59031) | function ae(a,b,c,d){return T.call(this,a,b,c,d)}
function be (line 59031) | function be(a,b,c,d){return T.call(this,a,b,c,d)}
function ce (line 59032) | function ce(a,b,c,d){return T.call(this,a,b,c,d)}
function V (line 59037) | function V(a){0>he||(a.current=ge[he],ge[he]=null,he--)}
function W (line 59037) | function W(a,b){he++;ge[he]=a.current;a.current=b}
function ke (line 59037) | function ke(a){return le(a)?je:ie.current}
function me (line 59038) | function me(a,b){var c=a.type.contextTypes;if(!c)return D;var d=a.stateN...
function le (line 59038) | function le(a){return 2===a.tag&&null!=a.type.childContextTypes}
function ne (line 59038) | function ne(a){le(a)&&(V(X,a),V(ie,a))}
function oe (line 59039) | function oe(a,b,c){null!=ie.cursor?E("168"):void 0;W(ie,b,a);W(X,c,a)}
function pe (line 59039) | function pe(a,b){var c=a.stateNode,d=a.type.childContextTypes;if("functi...
function qe (line 59039) | function qe(a){if(!le(a))return!1;var b=a.stateNode;b=b&&b.__reactIntern...
function re (line 59040) | function re(a,b){var c=a.stateNode;c?void 0:E("169");if(b){var d=pe(a,je...
function Y (line 59041) | function Y(a,b,c){this.tag=a;this.key=b;this.stateNode=this.type=null;th...
function se (line 59042) | function se(a,b,c){var d=a.alternate;null===d?(d=new Y(a.tag,a.key,a.int...
function te (line 59043) | function te(a,b,c){var d=void 0,e=a.type,f=a.key;"function"===typeof e?(...
function ue (line 59043) | function ue(a,b,c,d){b=new Y(10,d,b);b.pendingProps=a;b.expirationTime=c...
function ve (line 59044) | function ve(a,b,c){b=new Y(6,null,b);b.pendingProps=a;b.expirationTime=c...
function we (line 59044) | function we(a,b,c){b=new Y(7,a.key,b);b.type=a.handler;b.pendingProps=a;...
function xe (line 59044) | function xe(a,b,c){a=new Y(9,null,b);a.expirationTime=c;return a}
function ye (line 59044) | function ye(a,b,c){b=new Y(4,a.key,b);b.pendingProps=a.children||[];b.ex...
function Be (line 59045) | function Be(a){return function(b){try{return a(b)}catch(c){}}}
function Ce (line 59045) | function Ce(a){if("undefined"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)re...
function De (line 59045) | function De(a){"function"===typeof ze&&ze(a)}
function Ee (line 59045) | function Ee(a){"function"===typeof Ae&&Ae(a)}
function Fe (line 59046) | function Fe(a){return{baseState:a,expirationTime:0,first:null,last:null,...
function Ge (line 59046) | function Ge(a,b){null===a.last?a.first=a.last=b:(a.last.next=b,a.last=b)...
function He (line 59047) | function He(a,b){var c=a.alternate,d=a.updateQueue;null===d&&(d=a.update...
function Ie (line 59047) | function Ie(a,b,c,d){a=a.partialState;return"function"===typeof a?a.call...
function Je (line 59048) | function Je(a,b,c,d,e,f){null!==a&&a.updateQueue===c&&(c=b.updateQueue={...
function Ke (line 59050) | function Ke(a,b){var c=a.callbackList;if(null!==c)for(a.callbackList=nul...
function Le (line 59051) | function Le(a,b,c,d){function e(a,b){b.updater=f;a.stateNode=b;b._reactI...
function Xe (line 59057) | function Xe(a){if(null===a||"undefined"===typeof a)return null;a=We&&a[W...
function Ze (line 59058) | function Ze(a,b){var c=b.ref;if(null!==c&&"function"!==typeof c){if(b._o...
function $e (line 59059) | function $e(a,b){"textarea"!==a.type&&E("31","[object Object]"===Object....
function af (line 59060) | function af(a){function b(b,c){if(a){var d=b.lastEffect;null!==d?(d.next...
function df (line 59073) | function df(a,b,c,d,e){function f(a,b,c){var d=b.expirationTime;b.child=...
function ef (line 59081) | function ef(a,b,c){function d(a){a.effectTag|=4}var e=a.createInstance,f...
function ff (line 59086) | function ff(a,b){function c(a){var c=a.ref;if(null!==c)try{c(null)}catch...
function hf (line 59094) | function hf(a){function b(a){a===gf?E("174"):void 0;return a}var c=a.get...
function jf (line 59096) | function jf(a){function b(a,b){var c=new Y(5,null,0);c.type="DELETED";c....
function kf (line 59100) | function kf(a){function b(a){Qb=ja=!0;var b=a.stateNode;b.current===a?E(...
function lf (line 59116) | function lf(a){function b(a){a=od(a);return null===a?null:a.stateNode}va...
function pf (line 59119) | function pf(a,b,c){var d=3<arguments.length&&void 0!==arguments[3]?argum...
function Hf (line 59124) | function Hf(a){if(Gf.hasOwnProperty(a))return!0;if(Ff.hasOwnProperty(a))...
function If (line 59125) | function If(a,b,c){var d=wa(b);if(d&&va(b,c)){var e=d.mutationMethod;e?e...
function Kf (line 59126) | function Kf(a,b,c){Hf(b)&&(null==c?a.removeAttribute(b):a.setAttribute(b...
function Jf (line 59126) | function Jf(a,b){var c=wa(b);c?(b=c.mutationMethod)?b(a,void 0):c.mustUs...
function Lf (line 59127) | function Lf(a,b){var c=b.value,d=b.checked;return B({type:void 0,step:vo...
function Mf (line 59127) | function Mf(a,b){var c=b.defaultValue;a._wrapperState={initialChecked:nu...
function Nf (line 59128) | function Nf(a,b){b=b.checked;null!=b&&If(a,"checked",b)}
function Of (line 59128) | function Of(a,b){Nf(a,b);var c=b.value;if(null!=c)if(0===c&&""===a.value...
function Pf (line 59129) | function Pf(a,b){switch(b.type){case "submit":case "reset":break;case "c...
function Qf (line 59129) | function Qf(a){var b="";aa.Children.forEach(a,function(a){null==a||"stri...
function Rf (line 59130) | function Rf(a,b){a=B({children:void 0},b);if(b=Qf(b.children))a.children...
function Sf (line 59130) | function Sf(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e<c.length;e++)b...
function Tf (line 59131) | function Tf(a,b){var c=b.value;a._wrapperState={initialValue:null!=c?c:b...
function Uf (line 59131) | function Uf(a,b){null!=b.dangerouslySetInnerHTML?E("91"):void 0;return B...
function Vf (line 59131) | function Vf(a,b){var c=b.value;null==c&&(c=b.defaultValue,b=b.children,n...
function Wf (line 59132) | function Wf(a,b){var c=b.value;null!=c&&(c=""+c,c!==a.value&&(a.value=c)...
function Xf (line 59132) | function Xf(a){var b=a.textContent;b===a._wrapperState.initialValue&&(a....
function Zf (line 59133) | function Zf(a){switch(a){case "svg":return"http://www.w3.org/2000/svg";c...
function $f (line 59133) | function $f(a,b){return null==a||"http://www.w3.org/1999/xhtml"===a?Zf(b...
function cg (line 59135) | function cg(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.n...
function fg (line 59138) | function fg(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=...
function hg (line 59139) | function hg(a,b,c){b&&(gg[a]&&(null!=b.children||null!=b.dangerouslySetI...
function ig (line 59140) | function ig(a,b){if(-1===a.indexOf("-"))return"string"===typeof b.is;swi...
function lg (line 59141) | function lg(a,b){a=9===a.nodeType||11===a.nodeType?a:a.ownerDocument;var...
function ng (line 59143) | function ng(a,b,c,d){c=9===c.nodeType?c:c.ownerDocument;d===jg&&(d=Zf(a)...
function og (line 59143) | function og(a,b){return(9===b.nodeType?b:b.ownerDocument).createTextNode...
function pg (line 59144) | function pg(a,b,c,d){var e=ig(b,c);switch(b){case "iframe":case "object"...
function sg (line 59148) | function sg(a,b,c,d,e){var f=null;switch(b){case "input":c=Lf(a,c);d=Lf(...
function tg (line 59151) | function tg(a,b,c,d,e){"input"===c&&"radio"===e.type&&null!=e.name&&Nf(a...
function ug (line 59153) | function ug(a,b,c,d,e){switch(b){case "iframe":case "object":U("topLoad"...
function vg (line 59155) | function vg(a,b){return a.nodeValue!==b}
function Ng (line 59157) | function Ng(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeTy...
function Og (line 59158) | function Og(a){a=a?9===a.nodeType?a.documentElement:a.firstChild:null;re...
function Pg (line 59168) | function Pg(a,b,c,d,e){Ng(c)?void 0:E("200");var f=c._reactRootContainer...
function Qg (line 59168) | function Qg(a,b){var c=2<arguments.length&&void 0!==arguments[2]?argumen...
function Rg (line 59169) | function Rg(a,b){this._reactRootContainer=Z.createContainer(a,b)}
function isTextNode (line 59197) | function isTextNode(object) {
function isNode (line 59223) | function isNode(object) {
function checkMask (line 59291) | function checkMask(value, bitmask) {
function shouldSetAttribute (line 59423) | function shouldSetAttribute(name, value) {
function getPropertyInfo (line 59447) | function getPropertyInfo(name) {
function shouldAttributeAcceptBooleanValue (line 59451) | function shouldAttributeAcceptBooleanValue(name) {
function isReservedProp (line 59472) | function isReservedProp(name) {
function callCallback (line 59771) | function callCallback() {
function onError (line 59797) | function onError(event) {
function recomputePluginOrdering (line 59864) | function recomputePluginOrdering() {
function publishEventForPlugin (line 59893) | function publishEventForPlugin(dispatchConfig, pluginModule, eventName) {
function publishRegistrationName (line 59920) | function publishRegistrationName(registrationName, pluginModule, eventNa...
function injectEventPluginOrder (line 59979) | function injectEventPluginOrder(injectedEventPluginOrder) {
function injectEventPluginsByName (line 59996) | function injectEventPluginsByName(injectedNamesToPlugins) {
function executeDispatch (line 60068) | function executeDispatch(event, simulated, listener, inst) {
function executeDispatchesInOrder (line 60078) | function executeDispatchesInOrder(event, simulated) {
function accumulateInto (line 60133) | function accumulateInto(current, next) {
function forEachAccumulated (line 60168) | function forEachAccumulated(arr, cb, scope) {
function isInteractive (line 60205) | function isInteractive(tag) {
function shouldPreventMouseEvent (line 60209) | function shouldPreventMouseEvent(name, type, props) {
function getListener (line 60271) | function getListener(inst, registrationName) {
function extractEvents (line 60301) | function extractEvents(topLevelType, targetInst, nativeEvent, nativeEven...
function enqueueEvents (line 60323) | function enqueueEvents(events) {
function processEventQueue (line 60334) | function processEventQueue(simulated) {
function precacheFiberNode$1 (line 60378) | function precacheFiberNode$1(hostInst, node) {
function getClosestInstanceFromNode (line 60386) | function getClosestInstanceFromNode(node) {
function getInstanceFromNode$1 (line 60421) | function getInstanceFromNode$1(node) {
function getNodeFromInstance$1 (line 60437) | function getNodeFromInstance$1(inst) {
function getFiberCurrentPropsFromNode$1 (line 60449) | function getFiberCurrentPropsFromNode$1(node) {
function updateFiberProps$1 (line 60453) | function updateFiberProps$1(node, props) {
function getParent (line 60466) | function getParent(inst) {
function getLowestCommonAncestor (line 60485) | function getLowestCommonAncestor(instA, instB) {
function getParentInstance (line 60527) | function getParentInstance(inst) {
function traverseTwoPhase (line 60534) | function traverseTwoPhase(inst, fn, arg) {
function traverseEnterLeave (line 60556) | function traverseEnterLeave(from, to, fn, argFrom, argTo) {
function listenerAtPhase (line 60600) | function listenerAtPhase(inst, event, propagationPhase) {
function accumulateDirectionalDispatches (line 60621) | function accumulateDirectionalDispatches(inst, phase, event) {
function accumulateTwoPhaseDispatchesSingle (line 60639) | function accumulateTwoPhaseDispatchesSingle(event) {
function accumulateTwoPhaseDispatchesSingleSkipTarget (line 60648) | function accumulateTwoPhaseDispatchesSingleSkipTarget(event) {
function accumulateDispatches (line 60661) | function accumulateDispatches(inst, ignoredDirection, event) {
function accumulateDirectDispatchesSingle (line 60677) | function accumulateDirectDispatchesSingle(event) {
function accumulateTwoPhaseDispatches (line 60683) | function accumulateTwoPhaseDispatches(events) {
function accumulateTwoPhaseDispatchesSkipTarget (line 60687) | function accumulateTwoPhaseDispatchesSkipTarget(events) {
function accumulateEnterLeaveDispatches (line 60691) | function accumulateEnterLeaveDispatches(leave, enter, from, to) {
function accumulateDirectDispatches (line 60695) | function accumulateDirectDispatches(events) {
function getTextContentAccessor (line 60714) | function getTextContentAccessor() {
function initialize (line 60740) | function initialize(nativeEventTarget) {
function reset (line 60746) | function reset() {
function getData (line 60752) | function getData() {
function getText (line 60782) | function getText() {
function SyntheticEvent (line 60834) | function SyntheticEvent(dispatchConfig, targetInst, nativeEvent, nativeE...
function getPooledWarningPropertyDefinition (line 61010) | function getPooledWarningPropertyDefinition(propName, getVal) {
function getPooledEvent (line 61037) | function getPooledEvent(dispatchConfig, targetInst, nativeEvent, nativeI...
function releasePooledEvent (line 61047) | function releasePooledEvent(event) {
function addEventPoolingTo (line 61056) | function addEventPoolingTo(EventConstructor) {
function SyntheticCompositionEvent (line 61078) | function SyntheticCompositionEvent(dispatchConfig, dispatchMarker, nativ...
function SyntheticInputEvent (line 61099) | function SyntheticInputEvent(dispatchConfig, dispatchMarker, nativeEvent...
function isPresto (line 61129) | function isPresto() {
function isKeypressCommand (line 61177) | function isKeypressCommand(nativeEvent) {
function getCompositionEventType (line 61189) | function getCompositionEventType(topLevelType) {
function isFallbackCompositionStart (line 61208) | function isFallbackCompositionStart(topLevelType, nativeEvent) {
function isFallbackCompositionEnd (line 61219) | function isFallbackCompositionEnd(topLevelType, nativeEvent) {
function getDataFromCustomEvent (line 61247) | function getDataFromCustomEvent(nativeEvent) {
function extractCompositionEvent (line 61261) | function extractCompositionEvent(topLevelType, targetInst, nativeEvent, ...
function getNativeBeforeInputChars (line 61313) | function getNativeBeforeInputChars(topLevelType, nativeEvent) {
function getFallbackBeforeInputChars (line 61367) | function getFallbackBeforeInputChars(topLevelType, nativeEvent) {
function extractBeforeInputEvent (line 61431) | function extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, ...
function restoreStateOfTarget (line 61494) | function restoreStateOfTarget(target) {
function enqueueStateRestore (line 61509) | function enqueueStateRestore(target) {
function restoreStateIfNeeded (line 61521) | function restoreStateIfNeeded() {
function batchedUpdates (line 61556) | function batchedUpdates(fn, bookkeeping) {
function isTextInputElement (line 61605) | function isTextInputElement(elem) {
function getEventTarget (line 61636) | function getEventTarget(nativeEvent) {
function isEventSupported (line 61671) | function isEventSupported(eventNameSuffix, capture) {
function isCheckable (line 61693) | function isCheckable(elem) {
function getTracker (line 61699) | function getTracker(node) {
function detachTracker (line 61703) | function detachTracker(node) {
function getValueFromNode (line 61707) | function getValueFromNode(node) {
function trackValueOnNode (line 61722) | function trackValueOnNode(node) {
function track (line 61763) | function track(node) {
function updateValueIfChanged (line 61772) | function updateValueIfChanged(node) {
function createAndAccumulateChangeEvent (line 61803) | function createAndAccumulateChangeEvent(inst, nativeEvent, target) {
function shouldUseChangeEvent (line 61820) | function shouldUseChangeEvent(elem) {
function manualDispatchChangeEvent (line 61825) | function manualDispatchChangeEvent(nativeEvent) {
function runEventInBatch (line 61842) | function runEventInBatch(event) {
function getInstIfValueChanged (line 61847) | function getInstIfValueChanged(targetInst) {
function getTargetInstForChangeEvent (line 61854) | function getTargetInstForChangeEvent(topLevelType, targetInst) {
function startWatchingForValueChange (line 61875) | function startWatchingForValueChange(target, targetInst) {
function stopWatchingForValueChange (line 61885) | function stopWatchingForValueChange() {
function handlePropertyChange (line 61898) | function handlePropertyChange(nativeEvent) {
function handleEventsForInputEventPolyfill (line 61907) | function handleEventsForInputEventPolyfill(topLevelType, target, targetI...
function getTargetInstForInputEventPolyfill (line 61927) | function getTargetInstForInputEventPolyfill(topLevelType, targetInst) {
function shouldUseClickEvent (line 61946) | function shouldUseClickEvent(elem) {
function getTargetInstForClickEvent (line 61954) | function getTargetInstForClickEvent(topLevelType, targetInst) {
function getTargetInstForInputOrChangeEvent (line 61960) | function getTargetInstForInputOrChangeEvent(topLevelType, targetInst) {
function handleControlledInputBlur (line 61966) | function handleControlledInputBlur(inst, node) {
function SyntheticUIEvent (line 62063) | function SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent, n...
function modifierStateGetter (line 62084) | function modifierStateGetter(keyArg) {
function getEventModifierState (line 62094) | function getEventModifierState(nativeEvent) {
function SyntheticMouseEvent (line 62127) | function SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent...
function get (line 62230) | function get(key) {
function has (line 62234) | function has(key) {
function set (line 62238) | function set(key, value) {
function getComponentName (line 62247) | function getComponentName(fiber) {
function isFiberMountedImpl (line 62277) | function isFiberMountedImpl(fiber) {
function isFiberMounted (line 62306) | function isFiberMounted(fiber) {
function isMounted (line 62310) | function isMounted(component) {
function assertIsMounted (line 62328) | function assertIsMounted(fiber) {
function findCurrentFiberUsingSlowPath (line 62332) | function findCurrentFiberUsingSlowPath(fiber) {
function findCurrentHostFiber (line 62444) | function findCurrentHostFiber(parent) {
function findCurrentHostFiberWithNoPortals (line 62477) | function findCurrentHostFiberWithNoPortals(parent) {
function findRootContainerNode (line 62518) | function findRootContainerNode(inst) {
function getTopLevelCallbackBookKeeping (line 62533) | function getTopLevelCallbackBookKeeping(topLevelType, nativeEvent, targe...
function releaseTopLevelCallbackBookKeeping (line 62549) | function releaseTopLevelCallbackBookKeeping(instance) {
function handleTopLevelImpl (line 62559) | function handleTopLevelImpl(bookKeeping) {
function setHandleTopLevel (line 62590) | function setHandleTopLevel(handleTopLevel) {
function setEnabled (line 62594) | function setEnabled(enabled) {
function isEnabled (line 62598) | function isEnabled() {
function trapBubbledEvent (line 62612) | function trapBubbledEvent(topLevelType, handlerBaseName, element) {
function trapCapturedEvent (line 62629) | function trapCapturedEvent(topLevelType, handlerBaseName, element) {
function dispatchEvent (line 62636) | function dispatchEvent(topLevelType, nativeEvent) {
method _enabled (line 62663) | get _enabled () { return _enabled; }
method _handleTopLevel (line 62664) | get _handleTopLevel () { return _handleTopLevel; }
function makePrefixMap (line 62680) | function makePrefixMap(styleProp, eventName) {
function getVendorPrefixedEventName (line 62740) | function getVendorPrefixedEventName(eventName) {
function runEventQueueInBatch (line 62840) | function runEventQueueInBatch(events) {
function handleTopLevel (line 62849) | function handleTopLevel(topLevelType, targetInst, nativeEvent, nativeEve...
function getListeningForDocument (line 62920) | function getListeningForDocument(mountAt) {
function listenTo (line 62951) | function listenTo(registrationName, contentDocumentHandle) {
function isListeningToAllDependencies (line 62987) | function isListeningToAllDependencies(registrationName, mountAt) {
function getLeafNode (line 63005) | function getLeafNode(node) {
function getSiblingNode (line 63019) | function getSiblingNode(node) {
function getNodeForCharacterOffset (line 63035) | function getNodeForCharacterOffset(root, offset) {
function getOffsets (line 63062) | function getOffsets(outerNode) {
function getModernOffsetsFromPoints (line 63103) | function getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset,...
function setOffsets (line 63184) | function setOffsets(node, offsets) {
function isInDocument (line 63223) | function isInDocument(node) {
function hasSelectionCapabilities (line 63234) | function hasSelectionCapabilities(elem) {
function getSelectionInformation (line 63239) | function getSelectionInformation() {
function restoreSelection (line 63252) | function restoreSelection(priorSelectionInformation) {
function getSelection$1 (line 63290) | function getSelection$1(input) {
function setSelection (line 63313) | function setSelection(input, offsets) {
function getSelection (line 63355) | function getSelection(node) {
function constructSelectEvent (line 63378) | function constructSelectEvent(nativeEvent, nativeEventTarget) {
function SyntheticAnimationEvent (line 63495) | function SyntheticAnimationEvent(dispatchConfig, dispatchMarker, nativeE...
function SyntheticClipboardEvent (line 63517) | function SyntheticClipboardEvent(dispatchConfig, dispatchMarker, nativeE...
function SyntheticFocusEvent (line 63537) | function SyntheticFocusEvent(dispatchConfig, dispatchMarker, nativeEvent...
function getEventCharCode (line 63553) | function getEventCharCode(nativeEvent) {
function getEventKey (line 63645) | function getEventKey(nativeEvent) {
function SyntheticKeyboardEvent (line 63732) | function SyntheticKeyboardEvent(dispatchConfig, dispatchMarker, nativeEv...
function SyntheticDragEvent (line 63752) | function SyntheticDragEvent(dispatchConfig, dispatchMarker, nativeEvent,...
function SyntheticTouchEvent (line 63779) | function SyntheticTouchEvent(dispatchConfig, dispatchMarker, nativeEvent...
function SyntheticTransitionEvent (line 63802) | function SyntheticTransitionEvent(dispatchConfig, dispatchMarker, native...
function SyntheticWheelEvent (line 63837) | function SyntheticWheelEvent(dispatchConfig, dispatchMarker, nativeEvent...
function createCursor (line 64024) | function createCursor(defaultValue) {
function pop (line 64032) | function pop(cursor, fiber) {
function push (line 64057) | function push(cursor, value, fiber) {
function reset$1 (line 64069) | function reset$1() {
function describeFiber (line 64085) | function describeFiber(fiber) {
function getStackAddendumByWorkInProgressFiber (line 64107) | function getStackAddendumByWorkInProgressFiber(workInProgress) {
function getCurrentFiberOwnerName (line 64118) | function getCurrentFiberOwnerName() {
function getCurrentFiberStackAddendum (line 64132) | function getCurrentFiberStackAddendum() {
function resetCurrentFiber (line 64145) | function resetCurrentFiber() {
function setCurrentFiber (line 64151) | function setCurrentFiber(fiber) {
function setCurrentPhase (line 64157) | function setCurrentPhase(phase) {
function recordEffect (line 64336) | function recordEffect() {
function recordScheduleUpdate (line 64342) | function recordScheduleUpdate() {
function startRequestCallbackTimer (line 64353) | function startRequestCallbackTimer() {
function stopRequestCallbackTimer (line 64362) | function stopRequestCallbackTimer(didExpire) {
function startWorkTimer (line 64372) | function startWorkTimer(fiber) {
function cancelWorkTimer (line 64386) | function cancelWorkTimer(fiber) {
function stopWorkTimer (line 64398) | function stopWorkTimer(fiber) {
function stopFailedWorkTimer (line 64413) | function stopFailedWorkTimer(fiber) {
function startPhaseTimer (line 64429) | function startPhaseTimer(fiber, phase) {
function stopPhaseTimer (line 64443) | function stopPhaseTimer() {
function startWorkLoopTimer (line 64457) | function startWorkLoopTimer(nextUnitOfWork) {
function stopWorkLoopTimer (line 64472) | function stopWorkLoopTimer(interruptedBy) {
function startCommitTimer (line 64495) | function startCommitTimer() {
function stopCommitTimer (line 64507) | function stopCommitTimer() {
function startCommitHostEffectsTimer (line 64528) | function startCommitHostEffectsTimer() {
function stopCommitHostEffectsTimer (line 64538) | function stopCommitHostEffectsTimer() {
function startCommitLifeCyclesTimer (line 64549) | function startCommitLifeCyclesTimer() {
function stopCommitLifeCyclesTimer (line 64559) | function stopCommitLifeCyclesTimer() {
function getUnmaskedContext (line 64583) | function getUnmaskedContext(workInProgress) {
function cacheContext (line 64595) | function cacheContext(workInProgress, unmaskedContext, maskedContext) {
function getMaskedContext (line 64601) | function getMaskedContext(workInProgress, unmaskedContext) {
function hasContextChanged (line 64635) | function hasContextChanged() {
function isContextConsumer (line 64639) | function isContextConsumer(fiber) {
function isContextProvider (line 64643) | function isContextProvider(fiber) {
function popContextProvider (line 64647) | function popContextProvider(fiber) {
function popTopLevelContextObject (line 64656) | function popTopLevelContextObject(fiber) {
function pushTopLevelContextObject (line 64661) | function pushTopLevelContextObject(fiber, context, didChange) {
function processChildContext (line 64668) | function processChildContext(fiber, parentContext) {
function pushContextProvider (line 64713) | function pushContextProvider(workInProgress) {
function invalidateContextProvider (line 64733) | function invalidateContextProvider(workInProgress, didChange) {
function resetContext (line 64757) | function resetContext() {
function findCurrentUnmaskedContext (line 64763) | function findCurrentUnmaskedContext(fiber) {
function msToExpirationTime (line 64789) | function msToExpirationTime(ms) {
function expirationTimeToMs (line 64794) | function expirationTimeToMs(expirationTime) {
function ceiling (line 64798) | function ceiling(num, precision) {
function computeExpirationBucket (line 64802) | function computeExpirationBucket(currentTime, expirationInMs, bucketSize...
function FiberNode (line 64830) | function FiberNode(tag, key, internalContextTag) {
function shouldConstruct (line 64892) | function shouldConstruct(Component) {
function createWorkInProgress (line 64897) | function createWorkInProgress(current, pendingProps, expirationTime) {
function createHostRootFiber (line 64945) | function createHostRootFiber() {
function createFiberFromElement (line 64950) | function createFiberFromElement(element, internalContextTag, expirationT...
function createFiberFromFragment (line 65001) | function createFiberFromFragment(elements, internalContextTag, expiratio...
function createFiberFromText (line 65008) | function createFiberFromText(content, internalContextTag, expirationTime) {
function createFiberFromHostInstanceForDeletion (line 65015) | function createFiberFromHostInstanceForDeletion() {
function createFiberFromCall (line 65021) | function createFiberFromCall(call, internalContextTag, expirationTime) {
function createFiberFromReturn (line 65029) | function createFiberFromReturn(returnNode, internalContextTag, expiratio...
function createFiberFromPortal (line 65035) | function createFiberFromPortal(portal, internalContextTag, expirationTim...
function createFiberRoot (line 65047) | function createFiberRoot(containerInfo, hydrate) {
function catchErrors (line 65071) | function catchErrors(fn) {
function injectInternals (line 65084) | function injectInternals(internals) {
function onCommitRoot (line 65122) | function onCommitRoot(root) {
function onCommitUnmount (line 65128) | function onCommitUnmount(fiber) {
function createUpdateQueue (line 65154) | function createUpdateQueue(baseState) {
function insertUpdateIntoQueue (line 65170) | function insertUpdateIntoQueue(queue, update) {
function insertUpdateIntoFiber (line 65184) | function insertUpdateIntoFiber(fiber, update) {
function getUpdateExpirationTime (line 65236) | function getUpdateExpirationTime(fiber) {
function getStateFromUpdate (line 65247) | function getStateFromUpdate(update, instance, prevState, props) {
function processUpdateQueue (line 65263) | function processUpdateQueue(current, workInProgress, queue, instance, pr...
function commitCallbacks (line 65384) | function commitCallbacks(queue, context) {
function checkShouldComponentUpdate (line 65489) | function checkShouldComponentUpdate(workInProgress, oldProps, newProps, ...
function checkClassInstance (line 65521) | function checkClassInstance(workInProgress) {
function resetInputPointers (line 65570) | function resetInputPointers(workInProgress, instance) {
function adoptClassInstance (line 65575) | function adoptClassInstance(workInProgress, instance) {
function constructClassInstance (line 65585) | function constructClassInstance(workInProgress, props) {
function callComponentWillMount (line 65602) | function callComponentWillMount(workInProgress, instance) {
function callComponentWillReceiveProps (line 65621) | function callComponentWillReceiveProps(workInProgress, instance, newProp...
function mountClassInstance (line 65645) | function mountClassInstance(workInProgress, renderExpirationTime) {
function updateClassInstance (line 65789) | function updateClassInstance(current, workInProgress, renderExpirationTi...
function getIteratorFn (line 65896) | function getIteratorFn(maybeIterable) {
function coerceRef (line 65942) | function coerceRef(current, element) {
function throwOnInvalidObjectType (line 65977) | function throwOnInvalidObjectType(returnFiber, newChild) {
function warnOnFunctionType (line 65987) | function warnOnFunctionType() {
function ChildReconciler (line 66002) | function ChildReconciler(shouldTrackSideEffects) {
function cloneChildFibers (line 66938) | function cloneChildFibers(current, workInProgress) {
function reconcileChildren (line 66981) | function reconcileChildren(current, workInProgress, nextChildren) {
function reconcileChildrenAtExpirationTime (line 66985) | function reconcileChildrenAtExpirationTime(current, workInProgress, next...
function updateFragment (line 67003) | function updateFragment(current, workInProgress) {
function markRef (line 67019) | function markRef(current, workInProgress) {
function updateFunctionalComponent (line 67027) | function updateFunctionalComponent(current, workInProgress) {
function updateClassComponent (line 67064) | function updateClassComponent(current, workInProgress, renderExpirationT...
function finishClassComponent (line 67088) | function finishClassComponent(current, workInProgress, shouldUpdate, has...
function pushHostRootContext (line 67130) | function pushHostRootContext(workInProgress) {
function updateHostRoot (line 67141) | function updateHostRoot(current, workInProgress, renderExpirationTime) {
function updateHostComponent (line 67185) | function updateHostComponent(current, workInProgress, renderExpirationTi...
function updateHostText (line 67238) | function updateHostText(current, workInProgress) {
function mountIndeterminateComponent (line 67252) | function mountIndeterminateComponent(current, workInProgress, renderExpi...
function updateCallComponent (line 67316) | function updateCallComponent(current, workInProgress, renderExpirationTi...
function updatePortalComponent (line 67348) | function updatePortalComponent(current, workInProgress, renderExpiration...
function bailoutOnAlreadyFinishedWork (line 67396) | function bailoutOnAlreadyFinishedWork(current, workInProgress) {
function bailoutOnLowPriority (line 67417) | function bailoutOnLowPriority(current, workInProgress) {
function memoizeProps (line 67439) | function memoizeProps(workInProgress, nextProps) {
function memoizeState (line 67443) | function memoizeState(workInProgress, nextState) {
function beginWork (line 67449) | function beginWork(current, workInProgress, renderExpirationTime) {
function beginFailedWork (line 67486) | function beginFailedWork(current, workInProgress, renderExpirationTime) {
function markUpdate (line 67558) | function markUpdate(workInProgress) {
function markRef (line 67564) | function markRef(workInProgress) {
function appendAllReturns (line 67568) | function appendAllReturns(returns, workInProgress) {
function moveCallToHandlerPhase (line 67594) | function moveCallToHandlerPhase(current, workInProgress, renderExpiratio...
function appendAllChildren (line 67620) | function appendAllChildren(parent, workInProgress) {
function completeWork (line 67792) | function completeWork(current, workInProgress, renderExpirationTime) {
function safelyCallComponentWillUnmount (line 67972) | function safelyCallComponentWillUnmount(current, instance) {
function safelyDetachRef (line 67982) | function safelyDetachRef(current) {
function commitLifeCycles (line 67995) | function commitLifeCycles(current, finishedWork) {
function commitAttachRef (line 68065) | function commitAttachRef(finishedWork) {
function commitDetachRef (line 68079) | function commitDetachRef(current) {
function commitUnmount (line 68089) | function commitUnmount(current) {
function commitNestedUnmounts (line 68129) | function commitNestedUnmounts(root) {
function detachFiber (line 68161) | function detachFiber(current) {
function getHostParentFiber (line 68258) | function getHostParentFiber(fiber) {
function isHostParent (line 68269) | function isHostParent(fiber) {
function getHostSibling (line 68273) | function getHostSibling(fiber) {
function commitPlacement (line 68314) | function commitPlacement(finishedWork) {
function unmountHostComponents (line 68384) | function unmountHostComponents(current) {
function commitDeletion (line 68466) | function commitDeletion(current) {
function commitWork (line 68473) | function commitWork(current, finishedWork) {
function commitResetTextContent (line 68522) | function commitResetTextContent(current) {
function requiredContext (line 68552) | function requiredContext(c) {
function getRootHostContainer (line 68557) | function getRootHostContainer() {
function pushHostContainer (line 68562) | function pushHostContainer(fiber, nextRootInstance) {
function popHostContainer (line 68575) | function popHostContainer(fiber) {
function getHostContext (line 68581) | function getHostContext() {
function pushHostContext (line 68586) | function pushHostContext(fiber) {
function popHostContext (line 68602) | function popHostContext(fiber) {
function resetHostContainer (line 68613) | function resetHostContainer() {
function enterHydrationState (line 68676) | function enterHydrationState(fiber) {
function deleteHydratableInstance (line 68684) | function deleteHydratableInstance(returnFiber, instance) {
function insertNonHydratedInstance (line 68714) | function insertNonHydratedInstance(returnFiber, fiber) {
function tryHydrate (line 68758) | function tryHydrate(fiber, nextInstance) {
function tryToClaimNextHydratableInstance (line 68786) | function tryToClaimNextHydratableInstance(fiber) {
function prepareToHydrateHostInstance (line 68820) | function prepareToHydrateHostInstance(fiber, rootContainerInstance, host...
function prepareToHydrateHostTextInstance (line 68833) | function prepareToHydrateHostTextInstance(fiber) {
function popToNextHostParent (line 68865) | function popToNextHostParent(fiber) {
function popHydrationState (line 68873) | function popHydrationState(fiber) {
function resetHydrationState (line 68908) | function resetHydrationState() {
function logCapturedError (line 68940) | function logCapturedError(capturedError) {
function resetContextStack (line 69095) | function resetContextStack() {
function commitAllHostEffects (line 69103) | function commitAllHostEffects() {
function commitAllLifeCycles (line 69174) | function commitAllLifeCycles() {
function commitRoot (line 69206) | function commitRoot(finishedWork) {
function resetExpirationTime (line 69334) | function resetExpirationTime(workInProgress, renderTime) {
function completeUnitOfWork (line 69357) | function completeUnitOfWork(workInProgress) {
function performUnitOfWork (line 69446) | function performUnitOfWork(workInProgress) {
function performFailedUnitOfWork (line 69477) | function performFailedUnitOfWork(workInProgress) {
function workLoop (line 69507) | function workLoop(expirationTime) {
function slowWorkLoopThatChecksForFailedWork (line 69533) | function slowWorkLoopThatChecksForFailedWork(expirationTime) {
function renderRootCatchBlock (line 69561) | function renderRootCatchBlock(root, failedWork, boundary, expirationTime) {
function renderRoot (line 69578) | function renderRoot(root, expirationTime) {
function captureError (line 69666) | function captureError(failedWork, error) {
function hasCapturedError (line 69807) | function hasCapturedError(fiber) {
function isFailedBoundary (line 69813) | function isFailedBoundary(fiber) {
function commitErrorHandling (line 69819) | function commitErrorHandling(effectfulFiber) {
function unwindContexts (line 69857) | function unwindContexts(from, to) {
function computeAsyncExpiration (line 69884) | function computeAsyncExpiration() {
function computeExpirationForFiber (line 69894) | function computeExpirationForFiber(fiber) {
function scheduleWork (line 69923) | function scheduleWork(fiber, expirationTime) {
function checkRootNeedsClearing (line 69927) | function checkRootNeedsClearing(root, fiber, expirationTime) {
function scheduleWorkImpl (line 69940) | function scheduleWorkImpl(fiber, expirationTime, isErrorRecovery) {
function scheduleErrorRecovery (line 69982) | function scheduleErrorRecovery(fiber) {
function recalculateCurrentTime (line 69986) | function recalculateCurrentTime() {
function deferredUpdates (line 69993) | function deferredUpdates(fn) {
function syncUpdates (line 70003) | function syncUpdates(fn) {
function scheduleCallbackWithExpiration (line 70039) | function scheduleCallbackWithExpiration(expirationTime) {
function requestWork (line 70066) | function requestWork(root, expirationTime) {
function findHighestPriorityRoot (line 70119) | function findHighestPriorityRoot() {
function performAsyncWork (line 70185) | function performAsyncWork(dl) {
function performWork (line 70189) | function performWork(minExpirationTime, dl) {
function performWorkOnRoot (line 70233) | function performWorkOnRoot(root, expirationTime) {
function shouldYield (line 70285) | function shouldYield() {
function onUncaughtError (line 70300) | function onUncaughtError(error) {
function batchedUpdates (line 70313) | function batchedUpdates(fn, a) {
function unbatchedUpdates (line 70328) | function unbatchedUpdates(fn) {
function flushSync (line 70342) | function flushSync(fn) {
function getContextForSubtree (line 70373) | function getContextForSubtree(parentComponent) {
function scheduleTopLevelUpdate (line 70395) | function scheduleTopLevelUpdate(current, element, callback) {
function findHostInstance (line 70431) | function findHostInstance(fiber) {
function createPortal$1 (line 70534) | function createPortal$1(children, containerInfo,
function isAttributeNameSafe (line 70790) | function isAttributeNameSafe(attributeName) {
function shouldIgnoreValue (line 70810) | function shouldIgnoreValue(propertyInfo, value) {
function getValueForProperty (line 70827) | function getValueForProperty(node, name, expected) {
function getValueForAttribute (line 70888) | function getValueForAttribute(node, name, expected) {
function setValueForProperty (line 70911) | function setValueForProperty(node, name, value) {
function setValueForAttribute (line 70948) | function setValueForAttribute(node, name, value) {
function deleteValueForAttribute (line 70969) | function deleteValueForAttribute(node, name) {
function deleteValueForProperty (line 70979) | function deleteValueForProperty(node, name) {
function isControlled (line 71048) | function isControlled(props) {
function getHostProps (line 71070) | function getHostProps(element, props) {
function initWrapperState (line 71096) | function initWrapperState(element, props) {
function updateChecked (line 71119) | function updateChecked(element, props) {
function updateWrapper (line 71127) | function updateWrapper(element, props) {
function postMountWrapper (line 71187) | function postMountWrapper(element, props) {
function restoreControlledState$1 (line 71233) | function restoreControlledState$1(element, props) {
function updateNamedCousins (line 71239) | function updateNamedCousins(rootNode, props) {
function flattenChildren (line 71281) | function flattenChildren(children) {
function validateProps (line 71304) | function validateProps(element, props) {
function postMountWrapper$1 (line 71311) | function postMountWrapper$1(element, props) {
function getHostProps$1 (line 71318) | function getHostProps$1(element, props) {
function getDeclarationErrorAddendum (line 71338) | function getDeclarationErrorAddendum() {
function checkSelectPropTypes (line 71351) | function checkSelectPropTypes(props) {
function updateOptions (line 71368) | function updateOptions(node, multiple, propValue, setDefaultSelected) {
function getHostProps$2 (line 71426) | function getHostProps$2(element, props) {
function initWrapperState$1 (line 71432) | function initWrapperState$1(element, props) {
function postMountWrapper$2 (line 71452) | function postMountWrapper$2(element, props) {
function postUpdateWrapper (line 71463) | function postUpdateWrapper(element, props) {
function restoreControlledState$2 (line 71486) | function restoreControlledState$2(element, props) {
function getHostProps$3 (line 71516) | function getHostProps$3(element, props) {
function initWrapperState$2 (line 71535) | function initWrapperState$2(element, props) {
function updateWrapper$1 (line 71575) | function updateWrapper$1(element, props) {
function postMountWrapper$3 (line 71596) | function postMountWrapper$3(element, props) {
function restoreControlledState$3 (line 71611) | function restoreControlledState$3(element, props) {
function getIntrinsicNamespace (line 71627) | function getIntrinsicNamespace(type) {
function getChildNamespace (line 71638) | function getChildNamespace(parentNamespace, type) {
function prefixKey (line 71775) | function prefixKey(prefix, key) {
function dangerousStyleValue (line 71802) | function dangerousStyleValue(name, value, isCustomProperty) {
function createDangerousStringForStyles (line 71915) | function createDangerousStringForStyles(styles) {
function setValueForStyles (line 71943) | function setValueForStyles(node, styles, getStack) {
function assertValidProps (line 71997) | function assertValidProps(tag, props, getStack) {
function isCustomComponent (line 72015) | function isCustomComponent(tagName, props) {
function getStackAddendum (line 72099) | function getStackAddendum() {
function validateProperty (line 72104) | function validateProperty(tagName, name) {
function warnInvalidARIAProps (line 72149) | function warnInvalidARIAProps(type, props) {
function validateProperties (line 72170) | function validateProperties(type, props) {
function getStackAddendum$1 (line 72179) | function getStackAddendum$1() {
function validateProperties$1 (line 72184) | function validateProperties$1(type, props) {
function getStackAddendum$2 (line 72687) | function getStackAddendum$2() {
function validateProperties$2 (line 72831) | function validateProperties$2(type, props, canUseEventSystem) {
function ensureListeningTo (line 72949) | function ensureListeningTo(rootContainerElement, registrationName) {
function getOwnerDocumentFromRootContainer (line 72955) | function getOwnerDocumentFromRootContainer(rootContainerElement) {
function trapClickOnNonInteractiveElement (line 72987) | function trapClickOnNonInteractiveElement(node) {
function setInitialDOMProperties (line 73000) | function setInitialDOMProperties(tag, domElement, rootContainerElement, ...
function updateDOMProperties (line 73057) | function updateDOMProperties(domElement, updatePayload, wasCustomCompone...
function createElement$1 (line 73085) | function createElement$1(type, props, rootContainerElement, parentNamesp...
function createTextNode$1 (line 73134) | function createTextNode$1(text, rootContainerElement) {
function setInitialProperties$1 (line 73138) | function setInitialProperties$1(domElement, tag, rawProps, rootContainer...
function diffProperties$1 (line 73250) | function diffProperties$1(domElement, tag, lastRawProps, nextRawProps, r...
function updateProperties$1 (line 73415) | function updateProperties$1(domElement, updatePayload, tag, lastRawProps...
function diffHydratedProperties$1 (line 73448) | function diffHydratedProperties$1(domElement, tag, rawProps, parentNames...
function diffHydratedText$1 (line 73681) | function diffHydratedText$1(textNode, text) {
function warnForUnmatchedText$1 (line 73686) | function warnForUnmatchedText$1(textNode, text) {
function warnForDeletedHydratableElement$1 (line 73692) | function warnForDeletedHydratableElement$1(parentNode, child) {
function warnForDeletedHydratableText$1 (line 73702) | function warnForDeletedHydratableText$1(parentNode, child) {
function warnForInsertedHydratedElement$1 (line 73712) | function warnForInsertedHydratedElement$1(parentNode, tag, props) {
function warnForInsertedHydratedText$1 (line 73722) | function warnForInsertedHydratedText$1(parentNode, text) {
function restoreControlledState (line 73739) | function restoreControlledState(domElement, tag, props) {
function isValidContainer (line 74116) | function isValidContainer(node) {
function getReactRootElementInContainer (line 74120) | function getReactRootElementInContainer(container) {
function shouldHydrateDueToLegacyHeuristic (line 74132) | function shouldHydrateDueToLegacyHeuristic(container) {
function shouldAutoFocusHostComponent (line 74137) | function shouldAutoFocusHostComponent(type, props) {
function renderSubtreeIntoContainer (line 74414) | function renderSubtreeIntoContainer(parentComponent, children, container...
function createPortal (line 74469) | function createPortal(children, container) {
function ReactRoot (line 74477) | function ReactRoot(container, hydrate) {
function checkPropTypes (line 74665) | function checkPropTypes(typeSpecs, values, location, componentName, getS...
function hyphenateStyleName (line 74755) | function hyphenateStyleName(string) {
function hyphenate (line 74791) | function hyphenate(string) {
function camelizeStyleName (line 74834) | function camelizeStyleName(string) {
function camelize (line 74867) | function camelize(string) {
function getIteratorFn (line 75039) | function getIteratorFn(maybeIterable) {
function is (line 75123) | function is(x, y) {
function PropTypeError (line 75143) | function PropTypeError(message) {
function createChainableTypeChecker (line 75150) | function createChainableTypeChecker(validate) {
function createPrimitiveTypeChecker (line 75210) | function createPrimitiveTypeChecker(expectedType) {
function createAnyTypeChecker (line 75227) | function createAnyTypeChecker() {
function createArrayOfTypeChecker (line 75231) | function createArrayOfTypeChecker(typeChecker) {
function createElementTypeChecker (line 75252) | function createElementTypeChecker() {
function createInstanceTypeChecker (line 75264) | function createInstanceTypeChecker(expectedClass) {
function createEnumTypeChecker (line 75276) | function createEnumTypeChecker(expectedValues) {
function createObjectOfTypeChecker (line 75296) | function createObjectOfTypeChecker(typeChecker) {
function createUnionTypeChecker (line 75319) | function createUnionTypeChecker(arrayOfTypeCheckers) {
function createNodeChecker (line 75352) | function createNodeChecker() {
function createShapeTypeChecker (line 75362) | function createShapeTypeChecker(shapeTypes) {
function createStrictShapeTypeChecker (line 75384) | function createStrictShapeTypeChecker(shapeTypes) {
function isNode (line 75414) | function isNode(propValue) {
function isSymbol (line 75461) | function isSymbol(propType, propValue) {
function getPropType (line 75481) | function getPropType(propValue) {
function getPreciseType (line 75500) | function getPreciseType(propValue) {
function getPostfixForTypeWarning (line 75517) | function getPostfixForTypeWarning(value) {
function getClassName (line 75533) | function getClassName(propValue) {
function toObject (line 75565) | function toObject(val) {
function shouldUseNative (line 75573) | function shouldUseNative() {
function checkPropTypes (line 75677) | function checkPropTypes(typeSpecs, values, location, componentName, getS...
function shim (line 75731) | function shim(props, propName, componentName, location, propFullName, se...
function getShim (line 75744) | function getShim() {
function _interopRequireDefault (line 75806) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 75808) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 75810) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 75812) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function GridItem (line 75820) | function GridItem() {
function _interopRequireDefault (line 76316) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _interopRequireDefault (line 76352) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _objectWithoutProperties (line 76354) | function _objectWithoutProperties(obj, keys) { var target = {}; for (var...
function _classCallCheck (line 76356) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 76358) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 76360) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function ResizableBox (line 76366) | function ResizableBox() {
function _interopRequireDefault (line 76484) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _objectWithoutProperties (line 76486) | function _objectWithoutProperties(obj, keys) { var target = {}; for (var...
function _classCallCheck (line 76488) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 76490) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 76492) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function ResponsiveReactGridLayout (line 76501) | function ResponsiveReactGridLayout() {
function _interopRequireDefault (line 76711) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _objectWithoutProperties (line 76713) | function _objectWithoutProperties(obj, keys) { var target = {};
Condensed preview — 196 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,341K chars).
[
{
"path": ".gitignore",
"chars": 484,
"preview": "downloads/\ndownloading/\ndownloaded/\nuploadedTorrents/\nboltBrowser/\nstorage.db.lock\nstorage.db\nstorage.db.old\n.torrent.bo"
},
{
"path": ".vscode/settings.json",
"chars": 193,
"preview": "{\n \"git.ignoreLimitWarning\": true,\n \"cSpell.words\": [\n \"anacrolix\",\n \"asdine\",\n \"btih\",\n "
},
{
"path": ".vscode/tasks.json",
"chars": 634,
"preview": "{\n // See https://go.microsoft.com/fwlink/?LinkId=733558\n // for the documentation about the tasks.json format\n "
},
{
"path": "Dockerfile",
"chars": 57,
"preview": "FROM scratch\nCOPY goTorrent /\nENTRYPOINT [ \"/goTorrent\" ]"
},
{
"path": "LICENSE",
"chars": 1065,
"preview": "MIT License\n\nCopyright (c) 2017 deranjer\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\no"
},
{
"path": "README.md",
"chars": 3517,
"preview": "# goTorrent\n[](https://gitter.im/goTorrent-project/Lobby) ["
},
{
"path": "config.toml",
"chars": 5574,
"preview": "[serverConfig]\n\n ServerPort = \"8000\" #Required to input as string\n ServerAddr = \"192.168.1.8\" #Put in the IP addre"
},
{
"path": "config.toml.bk",
"chars": 5185,
"preview": "[serverConfig]\n\n ServerPort = \":8000\" #leave format as is it expects a string with colon\n ServerAddr = \"192.168.1."
},
{
"path": "dist-specific-files/Linux-systemd/goTorrent.service",
"chars": 217,
"preview": "[Unit]\nDescription=goTorrent Server\nAfter=network.target\n\n[Service]\ntype=simple\nUser=goTorrent\nWorkingDirectory=/opt/goT"
},
{
"path": "dist-specific-files/ReverseProxy/nginx.conf",
"chars": 377,
"preview": "location ^~ /gotorrent/ {\n proxy_pass http://192.168.1.100:8000/;\n proxy_redirect http:// https://;\n proxy_pass"
},
{
"path": "engine/clientStructs.go",
"chars": 5449,
"preview": "package engine\n\nimport (\n\t\"time\"\n\n\t\"github.com/anacrolix/torrent\"\n\t\"github.com/anacrolix/torrent/metainfo\"\n\tSettings \"gi"
},
{
"path": "engine/cronJobs.go",
"chars": 8112,
"preview": "package engine\n\nimport (\n\t\"io/ioutil\"\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"github.com/anacrolix/torrent\"\n\t\"github.com/asdine/storm\""
},
{
"path": "engine/doneTorrentActions.go",
"chars": 6072,
"preview": "package engine\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\n\t\"github.com/asdine/storm\"\n\tSettings \"github.com/dera"
},
{
"path": "engine/engine.go",
"chars": 23756,
"preview": "package engine //main file for all the calculations and data gathering needed for creating the running torrent arrays\n\ni"
},
{
"path": "engine/engineHelpers.go",
"chars": 18940,
"preview": "package engine\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"time\"\n\n\t\"github.com/anacrolix/torrent\"\n\t\"github.com/asdine/storm\"\n\tSetting"
},
{
"path": "go.mod",
"chars": 1175,
"preview": "module github.com/deranjer/goTorrent\n\ngo 1.12\n\nrequire (\n\tgithub.com/BurntSushi/toml v0.3.1 // indirect\n\tgithub.com/Data"
},
{
"path": "go.sum",
"chars": 22696,
"preview": "bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8=\nbou.ke/monkey v"
},
{
"path": "goTorrentWebUI/.babelrc",
"chars": 102,
"preview": "{ \n\t\"presets\": [\n\t\t\"react\",\n\t\t\"env\",\n\t\t\"stage-2\",\n\t],\n\t\n\t\"plugins\": [\"transform-class-properties\"]\n\t\n}"
},
{
"path": "goTorrentWebUI/acorn",
"chars": 321,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/acorn.cmd",
"chars": 192,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\acorn\\bin\\acorn\" %*\n) ELSE (\n @SETLOCAL\n @SET PAT"
},
{
"path": "goTorrentWebUI/ansi-html",
"chars": 337,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/ansi-html.cmd",
"chars": 208,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\ansi-html\\bin\\ansi-html\" %*\n) ELSE (\n @SETLOCAL\n "
},
{
"path": "goTorrentWebUI/atob",
"chars": 323,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/atob.cmd",
"chars": 194,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\atob\\bin\\atob.js\" %*\n) ELSE (\n @SETLOCAL\n @SET PA"
},
{
"path": "goTorrentWebUI/babel",
"chars": 335,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/babel-doctor",
"chars": 349,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/babel-doctor.cmd",
"chars": 220,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\babel-cli\\bin\\babel-doctor.js\" %*\n) ELSE (\n @SETLO"
},
{
"path": "goTorrentWebUI/babel-external-helpers",
"chars": 369,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/babel-external-helpers.cmd",
"chars": 240,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\babel-cli\\bin\\babel-external-helpers.js\" %*\n) ELSE "
},
{
"path": "goTorrentWebUI/babel-node",
"chars": 345,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/babel-node.cmd",
"chars": 216,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\babel-cli\\bin\\babel-node.js\" %*\n) ELSE (\n @SETLOCA"
},
{
"path": "goTorrentWebUI/babel.cmd",
"chars": 206,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\babel-cli\\bin\\babel.js\" %*\n) ELSE (\n @SETLOCAL\n @"
},
{
"path": "goTorrentWebUI/babylon",
"chars": 335,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/babylon.cmd",
"chars": 206,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\babylon\\bin\\babylon.js\" %*\n) ELSE (\n @SETLOCAL\n @"
},
{
"path": "goTorrentWebUI/browserslist",
"chars": 329,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/browserslist.cmd",
"chars": 200,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\browserslist\\cli.js\" %*\n) ELSE (\n @SETLOCAL\n @SET"
},
{
"path": "goTorrentWebUI/cssesc",
"chars": 325,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/cssesc.cmd",
"chars": 196,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\cssesc\\bin\\cssesc\" %*\n) ELSE (\n @SETLOCAL\n @SET P"
},
{
"path": "goTorrentWebUI/csso",
"chars": 317,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/csso.cmd",
"chars": 188,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\csso\\bin\\csso\" %*\n) ELSE (\n @SETLOCAL\n @SET PATHE"
},
{
"path": "goTorrentWebUI/detect",
"chars": 353,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/detect-port",
"chars": 353,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/detect-port.cmd",
"chars": 224,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\detect-port-alt\\bin\\detect-port\" %*\n) ELSE (\n @SET"
},
{
"path": "goTorrentWebUI/detect.cmd",
"chars": 224,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\detect-port-alt\\bin\\detect-port\" %*\n) ELSE (\n @SET"
},
{
"path": "goTorrentWebUI/errno",
"chars": 315,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/errno.cmd",
"chars": 186,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\errno\\cli.js\" %*\n) ELSE (\n @SETLOCAL\n @SET PATHEX"
},
{
"path": "goTorrentWebUI/escodegen",
"chars": 343,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/escodegen.cmd",
"chars": 214,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\escodegen\\bin\\escodegen.js\" %*\n) ELSE (\n @SETLOCAL"
},
{
"path": "goTorrentWebUI/esgenerate",
"chars": 345,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/esgenerate.cmd",
"chars": 216,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\escodegen\\bin\\esgenerate.js\" %*\n) ELSE (\n @SETLOCA"
},
{
"path": "goTorrentWebUI/eslint",
"chars": 331,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/eslint.cmd",
"chars": 202,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\eslint\\bin\\eslint.js\" %*\n) ELSE (\n @SETLOCAL\n @SE"
},
{
"path": "goTorrentWebUI/esparse",
"chars": 335,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/esparse.cmd",
"chars": 206,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\esprima\\bin\\esparse.js\" %*\n) ELSE (\n @SETLOCAL\n @"
},
{
"path": "goTorrentWebUI/esvalidate",
"chars": 341,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/esvalidate.cmd",
"chars": 212,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\esprima\\bin\\esvalidate.js\" %*\n) ELSE (\n @SETLOCAL\n"
},
{
"path": "goTorrentWebUI/fonts/index.css",
"chars": 4188,
"preview": "* {\n font-family: Roboto, sans-serif; \n}\n\n@font-face {\n font-family: 'Roboto';\n src: url('Roboto-Regular-webfont"
},
{
"path": "goTorrentWebUI/handlebars",
"chars": 341,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/handlebars.cmd",
"chars": 212,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\handlebars\\bin\\handlebars\" %*\n) ELSE (\n @SETLOCAL\n"
},
{
"path": "goTorrentWebUI/he",
"chars": 309,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/he.cmd",
"chars": 180,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\he\\bin\\he\" %*\n) ELSE (\n @SETLOCAL\n @SET PATHEXT=%"
},
{
"path": "goTorrentWebUI/html-minifier",
"chars": 331,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/html-minifier.cmd",
"chars": 202,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\html-minifier\\cli.js\" %*\n) ELSE (\n @SETLOCAL\n @SE"
},
{
"path": "goTorrentWebUI/import-local-fixture",
"chars": 347,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/import-local-fixture.cmd",
"chars": 218,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\import-local\\fixtures\\cli.js\" %*\n) ELSE (\n @SETLOC"
},
{
"path": "goTorrentWebUI/internal-ip",
"chars": 327,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/internal-ip.cmd",
"chars": 198,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\internal-ip\\cli.js\" %*\n) ELSE (\n @SETLOCAL\n @SET "
},
{
"path": "goTorrentWebUI/is-ci",
"chars": 315,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/is-ci.cmd",
"chars": 186,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\is-ci\\bin.js\" %*\n) ELSE (\n @SETLOCAL\n @SET PATHEX"
},
{
"path": "goTorrentWebUI/jest",
"chars": 323,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/jest-runtime",
"chars": 355,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/jest-runtime.cmd",
"chars": 226,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\jest-runtime\\bin\\jest-runtime.js\" %*\n) ELSE (\n @SE"
},
{
"path": "goTorrentWebUI/jest.cmd",
"chars": 194,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\jest\\bin\\jest.js\" %*\n) ELSE (\n @SETLOCAL\n @SET PA"
},
{
"path": "goTorrentWebUI/js-yaml",
"chars": 335,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/js-yaml.cmd",
"chars": 206,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\js-yaml\\bin\\js-yaml.js\" %*\n) ELSE (\n @SETLOCAL\n @"
},
{
"path": "goTorrentWebUI/jsesc",
"chars": 321,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/jsesc.cmd",
"chars": 192,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\jsesc\\bin\\jsesc\" %*\n) ELSE (\n @SETLOCAL\n @SET PAT"
},
{
"path": "goTorrentWebUI/json5",
"chars": 323,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/json5.cmd",
"chars": 194,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\json5\\lib\\cli.js\" %*\n) ELSE (\n @SETLOCAL\n @SET PA"
},
{
"path": "goTorrentWebUI/lib/BackendComm/backendWebsocket.js",
"chars": 15011,
"preview": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { func"
},
{
"path": "goTorrentWebUI/lib/BottomMenu/Tabs/fileTab.js",
"chars": 10237,
"preview": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { func"
},
{
"path": "goTorrentWebUI/lib/BottomMenu/Tabs/generalTab.js",
"chars": 14740,
"preview": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { func"
},
{
"path": "goTorrentWebUI/lib/BottomMenu/Tabs/peerTab.js",
"chars": 5343,
"preview": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { func"
},
{
"path": "goTorrentWebUI/lib/BottomMenu/bottomMenu.js",
"chars": 6508,
"preview": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { functi"
},
{
"path": "goTorrentWebUI/lib/CustomCells/progressBarCell.js",
"chars": 2467,
"preview": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ProgressBarCell = exports.Progre"
},
{
"path": "goTorrentWebUI/lib/TopMenu/Modals/RSSModal/RSSFeedList.js",
"chars": 7610,
"preview": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { functi"
},
{
"path": "goTorrentWebUI/lib/TopMenu/Modals/RSSModal/RSSModalLayout.js",
"chars": 9328,
"preview": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || functio"
},
{
"path": "goTorrentWebUI/lib/TopMenu/Modals/RSSModal/RSSTorrentList.js",
"chars": 7658,
"preview": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { func"
},
{
"path": "goTorrentWebUI/lib/TopMenu/Modals/RSSModal/addRSSModal.js",
"chars": 6345,
"preview": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { functi"
},
{
"path": "goTorrentWebUI/lib/TopMenu/Modals/addTorrentFileModal.js",
"chars": 7677,
"preview": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { functi"
},
{
"path": "goTorrentWebUI/lib/TopMenu/Modals/addTorrentLinkModal.js",
"chars": 6904,
"preview": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { functi"
},
{
"path": "goTorrentWebUI/lib/TopMenu/Modals/deleteTorrentModal.js",
"chars": 8442,
"preview": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { functi"
},
{
"path": "goTorrentWebUI/lib/TopMenu/topMenu.js",
"chars": 8914,
"preview": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { functi"
},
{
"path": "goTorrentWebUI/lib/app.js",
"chars": 5842,
"preview": "'use strict';\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var sour"
},
{
"path": "goTorrentWebUI/lib/index.html",
"chars": 105,
"preview": "<html>\n<head>\n<script type=\"text/javascript\" src=\"modals.js\"</script>\n<head>\n<div id=\"app\"></div>\n</html>"
},
{
"path": "goTorrentWebUI/lib/leftMenu/leftMenu.js",
"chars": 9397,
"preview": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { functi"
},
{
"path": "goTorrentWebUI/lib/modals.js",
"chars": 574,
"preview": "'use strict';\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('r"
},
{
"path": "goTorrentWebUI/lib/store/actions.js",
"chars": 919,
"preview": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar SORTLIST = exports.SORTLIST = 'SORTL"
},
{
"path": "goTorrentWebUI/lib/store/reducer.js",
"chars": 6616,
"preview": "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || funct"
},
{
"path": "goTorrentWebUI/lib/torrentlist.js",
"chars": 11858,
"preview": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { func"
},
{
"path": "goTorrentWebUI/loose-envify",
"chars": 329,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/loose-envify.cmd",
"chars": 200,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\loose-envify\\cli.js\" %*\n) ELSE (\n @SETLOCAL\n @SET"
},
{
"path": "goTorrentWebUI/miller-rabin",
"chars": 349,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/miller-rabin.cmd",
"chars": 220,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\miller-rabin\\bin\\miller-rabin\" %*\n) ELSE (\n @SETLO"
},
{
"path": "goTorrentWebUI/mime",
"chars": 313,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/mime.cmd",
"chars": 184,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\mime\\cli.js\" %*\n) ELSE (\n @SETLOCAL\n @SET PATHEXT"
},
{
"path": "goTorrentWebUI/mkdirp",
"chars": 325,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/mkdirp.cmd",
"chars": 196,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\mkdirp\\bin\\cmd.js\" %*\n) ELSE (\n @SETLOCAL\n @SET P"
},
{
"path": "goTorrentWebUI/multicast-dns",
"chars": 331,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/multicast-dns.cmd",
"chars": 202,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\multicast-dns\\cli.js\" %*\n) ELSE (\n @SETLOCAL\n @SE"
},
{
"path": "goTorrentWebUI/package.json",
"chars": 1243,
"preview": "{\n \"name\": \"torrent-project\",\n \"version\": \"0.3.0\",\n \"private\": true,\n \"scripts\": {\n \"build\": \"babel src -d lib\"\n "
},
{
"path": "goTorrentWebUI/parcel",
"chars": 341,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/parcel.cmd",
"chars": 212,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\parcel-bundler\\bin\\cli.js\" %*\n) ELSE (\n @SETLOCAL\n"
},
{
"path": "goTorrentWebUI/rc",
"chars": 309,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/rc.cmd",
"chars": 180,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\rc\\cli.js\" %*\n) ELSE (\n @SETLOCAL\n @SET PATHEXT=%"
},
{
"path": "goTorrentWebUI/react-scripts",
"chars": 359,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/react-scripts.cmd",
"chars": 230,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\react-scripts\\bin\\react-scripts.js\" %*\n) ELSE (\n @"
},
{
"path": "goTorrentWebUI/regjsparser",
"chars": 335,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/regjsparser.cmd",
"chars": 206,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\regjsparser\\bin\\parser\" %*\n) ELSE (\n @SETLOCAL\n @"
},
{
"path": "goTorrentWebUI/rimraf",
"chars": 317,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/rimraf.cmd",
"chars": 188,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\rimraf\\bin.js\" %*\n) ELSE (\n @SETLOCAL\n @SET PATHE"
},
{
"path": "goTorrentWebUI/sane",
"chars": 321,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/sane.cmd",
"chars": 192,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\sane\\src\\cli.js\" %*\n) ELSE (\n @SETLOCAL\n @SET PAT"
},
{
"path": "goTorrentWebUI/semver",
"chars": 325,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/semver.cmd",
"chars": 196,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\semver\\bin\\semver\" %*\n) ELSE (\n @SETLOCAL\n @SET P"
},
{
"path": "goTorrentWebUI/sha.js",
"chars": 317,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/sha.js.cmd",
"chars": 188,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\sha.js\\bin.js\" %*\n) ELSE (\n @SETLOCAL\n @SET PATHE"
},
{
"path": "goTorrentWebUI/src/BackendComm/backendWebsocket.js",
"chars": 12766,
"preview": "import React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport ReactTooltip from 'react-tooltip'\nimport BackendIco"
},
{
"path": "goTorrentWebUI/src/BottomMenu/Tabs/fileTab.js",
"chars": 6145,
"preview": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Button from 'material-ui/Button';\nimport Paper from "
},
{
"path": "goTorrentWebUI/src/BottomMenu/Tabs/generalTab.js",
"chars": 4796,
"preview": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { withStyles } from 'material-ui/styles';\nimport Pap"
},
{
"path": "goTorrentWebUI/src/BottomMenu/Tabs/peerTab.js",
"chars": 2818,
"preview": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Paper from 'material-ui/Paper';\n\nimport {BootstrapTa"
},
{
"path": "goTorrentWebUI/src/BottomMenu/bottomMenu.js",
"chars": 2572,
"preview": "import React from 'react';\nimport PropTypes from 'prop-types';\n//import 'typeface-roboto'; // contains the font for mat"
},
{
"path": "goTorrentWebUI/src/CSS/topMenu.css",
"chars": 127,
"preview": ".button {\n font-size: '60px';\n }\n\n .padding {\n display: inline-block;\n padding-top: '10px';\n padding-left: '10p"
},
{
"path": "goTorrentWebUI/src/CustomCells/progressBarCell.js",
"chars": 1294,
"preview": "import React from 'react';\nimport PropTypes from 'prop-types';\nimport { TableCell } from 'material-ui';\nimport { withSty"
},
{
"path": "goTorrentWebUI/src/TopMenu/Modals/RSSModal/RSSFeedList.js",
"chars": 3634,
"preview": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Button from 'material-ui/Button';\nimport TextField f"
},
{
"path": "goTorrentWebUI/src/TopMenu/Modals/RSSModal/RSSModalLayout.js",
"chars": 4976,
"preview": "import React from 'react';\nimport ReactDOM from 'react-dom';\n//css for react grid\nimport '../../../../node_modules/react"
},
{
"path": "goTorrentWebUI/src/TopMenu/Modals/RSSModal/RSSTorrentList.js",
"chars": 4491,
"preview": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Button from 'material-ui/Button';\nimport Paper from "
},
{
"path": "goTorrentWebUI/src/TopMenu/Modals/RSSModal/addRSSModal.js",
"chars": 2199,
"preview": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Button from 'material-ui/Button';\nimport TextField f"
},
{
"path": "goTorrentWebUI/src/TopMenu/Modals/SettingsModal/SettingsModalContentTabs/apiSettingsTab.js",
"chars": 2486,
"preview": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { withStyles } from 'material-ui/styles';\nimport Pap"
},
{
"path": "goTorrentWebUI/src/TopMenu/Modals/SettingsModal/SettingsModalContentTabs/clientSettingsTab.js",
"chars": 2400,
"preview": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { withStyles } from 'material-ui/styles';\nimport Pap"
},
{
"path": "goTorrentWebUI/src/TopMenu/Modals/SettingsModal/SettingsModalContentTabs/loggingSettingsTab.js",
"chars": 2129,
"preview": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { withStyles } from 'material-ui/styles';\nimport Pap"
},
{
"path": "goTorrentWebUI/src/TopMenu/Modals/SettingsModal/SettingsModalContentTabs/notesTab.js",
"chars": 678,
"preview": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { withStyles } from 'material-ui/styles';\n\n\n\nconst s"
},
{
"path": "goTorrentWebUI/src/TopMenu/Modals/SettingsModal/SettingsModalContentTabs/serverSettingsTab.js",
"chars": 2015,
"preview": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { withStyles } from 'material-ui/styles';\nimport Pap"
},
{
"path": "goTorrentWebUI/src/TopMenu/Modals/SettingsModal/addSettingsModal.js",
"chars": 2337,
"preview": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Button from 'material-ui/Button';\nimport TextField f"
},
{
"path": "goTorrentWebUI/src/TopMenu/Modals/SettingsModal/settingsModalContent.js",
"chars": 1486,
"preview": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Button from 'material-ui/Button';\nimport Paper from "
},
{
"path": "goTorrentWebUI/src/TopMenu/Modals/SettingsModal/settingsModalLayout.js",
"chars": 3688,
"preview": "import React from 'react';\nimport ReactDOM from 'react-dom';\n//css for react grid\nimport '../../../../node_modules/react"
},
{
"path": "goTorrentWebUI/src/TopMenu/Modals/SettingsModal/settingsModalList.js",
"chars": 3062,
"preview": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Button from 'material-ui/Button';\nimport TextField f"
},
{
"path": "goTorrentWebUI/src/TopMenu/Modals/addTorrentFileModal.js",
"chars": 4185,
"preview": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Button from 'material-ui/Button';\nimport TextField f"
},
{
"path": "goTorrentWebUI/src/TopMenu/Modals/addTorrentLinkModal.js",
"chars": 3568,
"preview": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Button from 'material-ui/Button';\nimport TextField f"
},
{
"path": "goTorrentWebUI/src/TopMenu/Modals/changeStorageModal.js",
"chars": 3211,
"preview": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Button from 'material-ui/Button';\nimport TextField f"
},
{
"path": "goTorrentWebUI/src/TopMenu/Modals/deleteTorrentModal.js",
"chars": 4229,
"preview": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Button from 'material-ui/Button';\nimport TextField f"
},
{
"path": "goTorrentWebUI/src/TopMenu/topMenu.js",
"chars": 5625,
"preview": "import React from 'react';\nimport PropTypes from 'prop-types';\nimport 'typeface-roboto'; // contains the font for mater"
},
{
"path": "goTorrentWebUI/src/TopMenu/torrentSearch.js",
"chars": 1808,
"preview": "import React from 'react';\nimport PropTypes from 'prop-types';\nimport TextField from 'material-ui/TextField';\nimport { w"
},
{
"path": "goTorrentWebUI/src/app.jsx",
"chars": 3007,
"preview": "import React from 'react';\nimport ReactDOM from 'react-dom';\n//css for react grid\nimport '../node_modules/react-grid-lay"
},
{
"path": "goTorrentWebUI/src/leftMenu/leftMenu.js",
"chars": 4012,
"preview": "import React from 'react';\nimport PropTypes from 'prop-types';\nimport 'typeface-roboto'; // contains the font for mater"
},
{
"path": "goTorrentWebUI/src/login.js",
"chars": 3442,
"preview": "var sha256 = require('js-sha256').sha256;\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport Button fro"
},
{
"path": "goTorrentWebUI/src/notifications.js",
"chars": 1384,
"preview": "import React from 'react';\n//Redux\nimport {connect} from 'react-redux';\nimport * as actionTypes from './store/actions';\n"
},
{
"path": "goTorrentWebUI/src/store/actions.js",
"chars": 893,
"preview": "export const SORTLIST = 'SORTLIST';\nexport const CHANGE_SELECTION = 'CHANGE_SELECTION';\nexport const CHANGE_FILTER = 'CH"
},
{
"path": "goTorrentWebUI/src/store/reducer.js",
"chars": 7171,
"preview": "import * as actionTypes from './actions';\n\n\n\nconst initialState = {\n buttonStateDefault: [{startButton: \"default\", st"
},
{
"path": "goTorrentWebUI/src/torrentlist-test.js",
"chars": 1388,
"preview": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport styles from '../node_modules/react-bootstrap-table/d"
},
{
"path": "goTorrentWebUI/src/torrentlist.js",
"chars": 7489,
"preview": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport styles from '../node_modules/react-bootstrap-table/d"
},
{
"path": "goTorrentWebUI/sshpk-conv",
"chars": 331,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/sshpk-conv.cmd",
"chars": 202,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\sshpk\\bin\\sshpk-conv\" %*\n) ELSE (\n @SETLOCAL\n @SE"
},
{
"path": "goTorrentWebUI/sshpk-sign",
"chars": 331,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/sshpk-sign.cmd",
"chars": 202,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\sshpk\\bin\\sshpk-sign\" %*\n) ELSE (\n @SETLOCAL\n @SE"
},
{
"path": "goTorrentWebUI/sshpk-verify",
"chars": 335,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/sshpk-verify.cmd",
"chars": 206,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\sshpk\\bin\\sshpk-verify\" %*\n) ELSE (\n @SETLOCAL\n @"
},
{
"path": "goTorrentWebUI/strip-indent",
"chars": 329,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/strip-indent.cmd",
"chars": 200,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\strip-indent\\cli.js\" %*\n) ELSE (\n @SETLOCAL\n @SET"
},
{
"path": "goTorrentWebUI/svgo",
"chars": 317,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/svgo.cmd",
"chars": 188,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\svgo\\bin\\svgo\" %*\n) ELSE (\n @SETLOCAL\n @SET PATHE"
},
{
"path": "goTorrentWebUI/sw-precache",
"chars": 327,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/sw-precache.cmd",
"chars": 198,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\sw-precache\\cli.js\" %*\n) ELSE (\n @SETLOCAL\n @SET "
},
{
"path": "goTorrentWebUI/uglifyjs",
"chars": 335,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/uglifyjs.cmd",
"chars": 206,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\uglify-js\\bin\\uglifyjs\" %*\n) ELSE (\n @SETLOCAL\n @"
},
{
"path": "goTorrentWebUI/user-home",
"chars": 323,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/user-home.cmd",
"chars": 194,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\user-home\\cli.js\" %*\n) ELSE (\n @SETLOCAL\n @SET PA"
},
{
"path": "goTorrentWebUI/uuid",
"chars": 317,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/uuid.cmd",
"chars": 188,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\uuid\\bin\\uuid\" %*\n) ELSE (\n @SETLOCAL\n @SET PATHE"
},
{
"path": "goTorrentWebUI/webpack",
"chars": 335,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/webpack-dev-server",
"chars": 379,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/webpack-dev-server.cmd",
"chars": 250,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\webpack-dev-server\\bin\\webpack-dev-server.js\" %*\n) "
},
{
"path": "goTorrentWebUI/webpack.cmd",
"chars": 206,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\webpack\\bin\\webpack.js\" %*\n) ELSE (\n @SETLOCAL\n @"
},
{
"path": "goTorrentWebUI/webpack.config.js",
"chars": 561,
"preview": "module.exports = {\n entry: './src/app.jsx',\n output: {\n filename: '../public/static/js/bundle.js'\n },\n module: {\n"
},
{
"path": "goTorrentWebUI/which",
"chars": 321,
"preview": "#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\,/,g')\")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w \"$bas"
},
{
"path": "goTorrentWebUI/which.cmd",
"chars": 192,
"preview": "@IF EXIST \"%~dp0\\node.exe\" (\n \"%~dp0\\node.exe\" \"%~dp0\\node_modules\\which\\bin\\which\" %*\n) ELSE (\n @SETLOCAL\n @SET PAT"
},
{
"path": "main.go",
"chars": 36305,
"preview": "package main\n\nimport (\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"html/template\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"os\"\n\t\"path"
},
{
"path": "public/static/css/gridbase.css",
"chars": 1018,
"preview": "* {box-sizing: border-box;}\n.wrapper {\n\tdisplay: grid;\n\tgrid-gap: 10px;\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: "
},
{
"path": "public/static/js/bundle.js",
"chars": 4674802,
"preview": "/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/**"
},
{
"path": "public/static/js/kickwebsocket-manual.js",
"chars": 1103,
"preview": "//This is the basic template used to generate the kickwebsocket. If needed you can manually edit this one to your needs"
},
{
"path": "settings/authentication_helper.go",
"chars": 1932,
"preview": "package settings\n\nimport (\n\t\"crypto/rand\"\n\t\"math/big\"\n\n\t\"github.com/dgrijalva/jwt-go\"\n\t\"github.com/sirupsen/logrus\"\n)\n\n/"
},
{
"path": "settings/clientConnectGenerate.go",
"chars": 1687,
"preview": "package settings\n\nimport (\n\t\"io/ioutil\"\n\t\"os\"\n)\n\nvar (\n\tbaseFile = `\n\tvar authMessage = {\n\t\tMessageType: \"authRequest\",\n"
},
{
"path": "settings/settings.go",
"chars": 9712,
"preview": "package settings\n\nimport (\n\t\"crypto/sha256\"\n\t\"fmt\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"golang.org/x/time/rate\"\n\n\t\""
},
{
"path": "storage/storage.go",
"chars": 15117,
"preview": "package storage\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"github.com/asdine/storm\"\n\tSettings \"github.com/deranjer/goTor"
},
{
"path": "templates/home.tmpl",
"chars": 452,
"preview": "{{define \"base\"}}\n<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <title>goTorrent</title>\n\t\t<link rel=\"icon\" href=\""
},
{
"path": "torrentUpload/desktop.ini",
"chars": 199,
"preview": "[LocalizedFileNames]\nPlan_9_from_Outer_Space_1959_archive.torrent=@Plan_9_from_Outer_Space_1959_archive.torrent,0\nReturn"
}
]
About this extraction
This page contains the full source code of the deranjer/goTorrent GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 196 files (4.9 MB), approximately 1.3M tokens, and a symbol index with 3545 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.