Initial commit, just the basic webui layout and basic golang backend with websocket communication tested.
4
.idea/misc.xml
generated
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="GOROOT" path="C:\Go" />
|
||||
</project>
|
8
.idea/modules.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/torrent-project.iml" filepath="$PROJECT_DIR$/.idea/torrent-project.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
9
.idea/torrent-project.iml
generated
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="WEB_MODULE" version="4">
|
||||
<component name="Go" enabled="true" />
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
6
.idea/vcs.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
72
main.go
Normal file
@@ -0,0 +1,72 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"github.com/gorilla/mux"
|
||||
"github.com/gorilla/websocket"
|
||||
"html/template"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"time"
|
||||
)
|
||||
|
||||
var (
|
||||
httpAddr = flag.String("addr", ":8000", "Http server address")
|
||||
baseTmpl string = "templates/base.tmpl"
|
||||
|
||||
APP_ID = os.Getenv("APP_ID")
|
||||
APP_SECRET = os.Getenv("APP_SECRET")
|
||||
)
|
||||
|
||||
var upgrader = websocket.Upgrader{
|
||||
ReadBufferSize: 1024,
|
||||
WriteBufferSize: 1024,
|
||||
}
|
||||
|
||||
func serveHome(w http.ResponseWriter, r *http.Request) {
|
||||
s1, _ := template.ParseFiles("templates/home.tmpl")
|
||||
s1.ExecuteTemplate(w, "base", map[string]string{"APP_ID": APP_ID})
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
||||
r := mux.NewRouter()
|
||||
|
||||
r.HandleFunc("/", serveHome)
|
||||
http.Handle("/static/", http.FileServer(http.Dir("public")))
|
||||
http.Handle("/", r)
|
||||
http.HandleFunc("/websocket", func(w http.ResponseWriter, r *http.Request) {
|
||||
conn, err := upgrader.Upgrade(w, r, nil)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
for {
|
||||
msgType, msg, err := conn.ReadMessage()
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
if string(msg) == "ping" {
|
||||
fmt.Println("ping")
|
||||
time.Sleep(2 * time.Second)
|
||||
err = conn.WriteMessage(msgType, []byte("pong"))
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
conn.Close()
|
||||
fmt.Println(string(msg))
|
||||
return
|
||||
}
|
||||
}
|
||||
})
|
||||
if err := http.ListenAndServe(*httpAddr, nil); err != nil {
|
||||
log.Fatalf("Error listening, %v", err)
|
||||
}
|
||||
|
||||
//
|
||||
}
|
172
projectFilesBackup/.idea/workspace.xml
generated
Normal file
@@ -0,0 +1,172 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="057beee9-5607-4a22-8523-4af575dc8251" name="Default" comment="" />
|
||||
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
||||
<option name="TRACKING_ENABLED" value="true" />
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="FileEditorManager">
|
||||
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
|
||||
<file leaf-file-name="main.go" pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/main.go">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="459">
|
||||
<caret line="27" column="4" lean-forward="false" selection-start-line="27" selection-start-column="4" selection-end-line="27" selection-end-column="4" />
|
||||
<folding>
|
||||
<element signature="e#14#100#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
</leaf>
|
||||
</component>
|
||||
<component name="FileTemplateManagerImpl">
|
||||
<option name="RECENT_TEMPLATES">
|
||||
<list>
|
||||
<option value="Go File" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="IdeDocumentHistory">
|
||||
<option name="CHANGED_PATHS">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/main.go" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
|
||||
<component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
|
||||
<component name="JsGulpfileManager">
|
||||
<detection-done>true</detection-done>
|
||||
<sorting>DEFINITION_ORDER</sorting>
|
||||
</component>
|
||||
<component name="ProjectFrameBounds" extendedState="6">
|
||||
<option name="x" value="-251" />
|
||||
<option name="y" value="-8" />
|
||||
<option name="width" value="1934" />
|
||||
<option name="height" value="1084" />
|
||||
</component>
|
||||
<component name="ProjectView">
|
||||
<navigator currentView="ProjectPane" proportions="" version="1">
|
||||
<flattenPackages />
|
||||
<showMembers />
|
||||
<showModules />
|
||||
<showLibraryContents />
|
||||
<hideEmptyPackages />
|
||||
<abbreviatePackageNames />
|
||||
<autoscrollToSource />
|
||||
<autoscrollFromSource />
|
||||
<sortByType />
|
||||
<manualOrder />
|
||||
<foldersAlwaysOnTop value="true" />
|
||||
</navigator>
|
||||
<panes>
|
||||
<pane id="Scratches" />
|
||||
<pane id="Scope" />
|
||||
<pane id="ProjectPane">
|
||||
<subPane>
|
||||
<expand>
|
||||
<path>
|
||||
<item name="torrent-project" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="torrent-project" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
</expand>
|
||||
<select />
|
||||
</subPane>
|
||||
</pane>
|
||||
</panes>
|
||||
</component>
|
||||
<component name="PropertiesComponent">
|
||||
<property name="last_opened_file_path" value="$USER_HOME$" />
|
||||
<property name="go.sdk.automatically.set" value="true" />
|
||||
<property name="DefaultGoTemplateProperty" value="Go File" />
|
||||
</component>
|
||||
<component name="RunDashboard">
|
||||
<option name="ruleStates">
|
||||
<list>
|
||||
<RuleState>
|
||||
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
|
||||
</RuleState>
|
||||
<RuleState>
|
||||
<option name="name" value="StatusDashboardGroupingRule" />
|
||||
</RuleState>
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="RunManager" selected="Go Single File.go run main.go">
|
||||
<configuration name="go run main.go" type="GoRunFileConfiguration" factoryName="Go Single File" temporary="true">
|
||||
<module name="torrent-project" />
|
||||
<working_directory value="$PROJECT_DIR$/" />
|
||||
<filePath value="$PROJECT_DIR$/main.go" />
|
||||
</configuration>
|
||||
<recent_temporary>
|
||||
<list size="1">
|
||||
<item index="0" class="java.lang.String" itemvalue="Go Single File.go run main.go" />
|
||||
</list>
|
||||
</recent_temporary>
|
||||
</component>
|
||||
<component name="ShelveChangesManager" show_recycled="false">
|
||||
<option name="remove_strategy" value="false" />
|
||||
</component>
|
||||
<component name="ToolWindowManager">
|
||||
<frame x="-8" y="-8" width="1936" height="1096" extended-state="6" />
|
||||
<layout>
|
||||
<window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.25266525" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
|
||||
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
|
||||
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32917964" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
|
||||
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
|
||||
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
||||
</layout>
|
||||
</component>
|
||||
<component name="TypeScriptGeneratedFilesManager">
|
||||
<option name="version" value="1" />
|
||||
</component>
|
||||
<component name="VcsContentAnnotationSettings">
|
||||
<option name="myLimit" value="2678400000" />
|
||||
</component>
|
||||
<component name="XDebuggerManager">
|
||||
<breakpoint-manager>
|
||||
<option name="time" value="1" />
|
||||
</breakpoint-manager>
|
||||
<watches-manager />
|
||||
</component>
|
||||
<component name="editorHistoryManager">
|
||||
<entry file="file://$PROJECT_DIR$/main.go">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="0">
|
||||
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
<folding>
|
||||
<element signature="e#14#100#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/main.go">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="459">
|
||||
<caret line="27" column="4" lean-forward="false" selection-start-line="27" selection-start-column="4" selection-end-line="27" selection-end-column="4" />
|
||||
<folding>
|
||||
<element signature="e#14#100#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</component>
|
||||
</project>
|
120
public/static/css/gridbase.css
Normal file
@@ -0,0 +1,120 @@
|
||||
* {box-sizing: border-box;}
|
||||
.wrapper {
|
||||
display: grid;
|
||||
grid-gap: 10px;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: #F8F9F9;
|
||||
grid-template-columns: 200px 1fr;
|
||||
|
||||
}
|
||||
|
||||
.box {
|
||||
background-color: #F2F3F4;
|
||||
border-radius: 1px;
|
||||
|
||||
}
|
||||
|
||||
.navcolumn {
|
||||
grid-column: 1;
|
||||
grid-row: 2 / span 2;
|
||||
border-style: double;
|
||||
}
|
||||
|
||||
.navcolumnImage {
|
||||
padding-right: 10%;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.liNavcolumn {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.liNavcolumn:hover {
|
||||
background-color: grey;
|
||||
|
||||
}
|
||||
|
||||
.navsettings {
|
||||
grid-column: 1 / span 2;
|
||||
grid-row: 1;
|
||||
border-style: double;
|
||||
max-height: 80px;
|
||||
}
|
||||
|
||||
.imagezoom {
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
|
||||
.imagezoom:hover {
|
||||
background-color: grey;
|
||||
}
|
||||
|
||||
|
||||
.torrentlist {
|
||||
grid-column: 2;
|
||||
grid-row: 2;
|
||||
border-style: double;
|
||||
min-height: 400px;
|
||||
}
|
||||
|
||||
.torrentdetails {
|
||||
grid-column: 2;
|
||||
grid-row: 3;
|
||||
border-style: double;
|
||||
min-height: 100px;
|
||||
}
|
||||
|
||||
ul.none {
|
||||
list-style-type: none;
|
||||
padding: 0 2% 0 0;
|
||||
}
|
||||
|
||||
ul.navsettingsUl {
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
li.top {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
|
||||
hr {
|
||||
border-width: 2px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.verticalLine {
|
||||
border-left: solid grey;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
td, th {
|
||||
border: 1px solid #dddddd;
|
||||
text-align: left;
|
||||
padding: 8px;
|
||||
background-color: #3B83CB;
|
||||
}
|
||||
|
||||
tr:nth-child(even) {
|
||||
background-color: #dddddd;
|
||||
}
|
||||
|
||||
.activeButton {
|
||||
background-color: red;
|
||||
}
|
||||
|
||||
.tab {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.defaultTab {
|
||||
display: initial;
|
||||
}
|
BIN
public/static/images/iconActiveTorrents.png
Normal file
After Width: | Height: | Size: 546 B |
BIN
public/static/images/iconAddTorrent.png
Normal file
After Width: | Height: | Size: 913 B |
BIN
public/static/images/iconAddTorrentLink.png
Normal file
After Width: | Height: | Size: 527 B |
BIN
public/static/images/iconDelete.png
Normal file
After Width: | Height: | Size: 794 B |
BIN
public/static/images/iconDownList.png
Normal file
After Width: | Height: | Size: 753 B |
BIN
public/static/images/iconDownload.png
Normal file
After Width: | Height: | Size: 506 B |
BIN
public/static/images/iconInactiveTorrents.png
Normal file
After Width: | Height: | Size: 787 B |
BIN
public/static/images/iconPause.png
Normal file
After Width: | Height: | Size: 251 B |
BIN
public/static/images/iconRSS.png
Normal file
After Width: | Height: | Size: 850 B |
BIN
public/static/images/iconScrollDown.png
Normal file
After Width: | Height: | Size: 565 B |
BIN
public/static/images/iconScrollUp.png
Normal file
After Width: | Height: | Size: 579 B |
BIN
public/static/images/iconSettings.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
public/static/images/iconStart.png
Normal file
After Width: | Height: | Size: 524 B |
BIN
public/static/images/iconStop.png
Normal file
After Width: | Height: | Size: 219 B |
BIN
public/static/images/iconTorrent.png
Normal file
After Width: | Height: | Size: 539 B |
BIN
public/static/images/iconUpList.png
Normal file
After Width: | Height: | Size: 728 B |
BIN
public/static/images/iconUpload.png
Normal file
After Width: | Height: | Size: 470 B |
BIN
public/static/images/testicon.png
Normal file
After Width: | Height: | Size: 1014 B |
161
templates/home.tmpl
Normal file
@@ -0,0 +1,161 @@
|
||||
{{define "base"}}
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<link rel="stylesheet" href="/static/css/gridbase.css" type="text/css" />
|
||||
<title>torrent-project</title>
|
||||
<script>
|
||||
function openTab(evt, tabName) {
|
||||
var i, x, tablinks;
|
||||
x = document.getElementsByClassName("tab");
|
||||
for (i = 0; i < x.length; i++) {
|
||||
x[i].style.display = "none";
|
||||
}
|
||||
tablinks = document.getElementsByClassName("tablink");
|
||||
for (i = 0; i < x.length; i++) {
|
||||
tablinks[i].className = tablinks[i].className.replace(" activeButton", "");
|
||||
}
|
||||
document.getElementById(tabName).style.display = "block";
|
||||
evt.currentTarget.className += " activeButton";
|
||||
}
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
function myWebsocketStart()
|
||||
{
|
||||
var ws = new WebSocket("ws://192.168.1.141:8000/websocket");
|
||||
|
||||
ws.onopen = function()
|
||||
{
|
||||
// Web Socket is connected, send data using send()
|
||||
ws.send("ping");
|
||||
var myTextArea = document.getElementById("loggerData");
|
||||
myTextArea.innerHTML = myTextArea.innerHTML + "\n" + "First message sent";
|
||||
};
|
||||
|
||||
ws.onmessage = function (evt)
|
||||
{
|
||||
var myTextArea = document.getElementById("loggerData");
|
||||
myTextArea.innerHTML = myTextArea.innerHTML + "\n" + evt.data
|
||||
if(evt.data == "pong") {
|
||||
setTimeout(function(){ws.send("ping");}, 2000);
|
||||
}
|
||||
};
|
||||
|
||||
ws.onclose = function()
|
||||
{
|
||||
var myTextArea = document.getElementById("loggerData");
|
||||
myTextArea.innerHTML = myTextArea.innerHTML + "\n" + "Connection closed";
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body onload="javascript:myWebsocketStart()">
|
||||
<div class="wrapper">
|
||||
<div class="box navcolumn">
|
||||
<hr>
|
||||
<ul class="none">
|
||||
<li class="liNavcolumn" id="allTorrents"><img class="navcolumnImage" src="/static/images/iconTorrent.png">All Torrents</li><hr>
|
||||
<li class="liNavcolumn" id="downloading"><img class="navcolumnImage" src="/static/images/iconDownload.png">Downloading</li><hr>
|
||||
<li class="liNavcolumn" id="uploading"><img class="navcolumnImage" src="/static/images/iconUpload.png">Uploading</li><hr>
|
||||
<li class="liNavcolumn" id="active"><img class="navcolumnImage" src="/static/images/iconActiveTorrents.png">Active</li><hr>
|
||||
<li class="liNavcolumn" id="inactive"><img class="navcolumnImage" src="/static/images/iconInactiveTorrents.png">Inactive</li>
|
||||
</ul>
|
||||
<hr>
|
||||
</div>
|
||||
<div class="box navsettings">
|
||||
<ul class="navsettingsUl">
|
||||
<li class="top" id="addTorrent"><img class="imagezoom" src="/static/images/iconAddTorrent.png"></li>
|
||||
<li class="top" id="addTorrentLink"><img class="imagezoom" src="/static/images/iconAddTorrentLink.png"></li>
|
||||
<li class="top verticalLine" id="deleteTorrent"><img class="imagezoom" src="/static/images/iconDelete.png"></li>
|
||||
<li class="top verticalLine" id="startTorrent"><img class="imagezoom" src="/static/images/iconStart.png"></li>
|
||||
<li class="top" id="pauseTorrent"><img class="imagezoom" src="/static/images/iconPause.png"></li>
|
||||
<li class="top" id="stopTorrent"><img class="imagezoom" src="/static/images/iconStop.png"></li>
|
||||
<li class="top verticalLine" id="upTorrent"><img class="imagezoom" src="/static/images/iconScrollUp.png"></li>
|
||||
<li class="top" id="downTorrent"><img class="imagezoom" src="/static/images/iconScrollDown.png"></li>
|
||||
<li class="top verticalLine" id="rssTorrent"><img class="imagezoom" src="/static/images/iconRss.png"></li>
|
||||
<li class="top verticalLine" id="settingsIcon"><img class="imagezoom" src="/static/images/iconSettings.png"></li>
|
||||
</div>
|
||||
<div class="box torrentlist">
|
||||
<table>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Size</th>
|
||||
<th>Done</th>
|
||||
<th>Status</th>
|
||||
<th>Seeds</th>
|
||||
<th>Peers</th>
|
||||
<th>Down Speed</th>
|
||||
<th>Up Speed</th>
|
||||
<th>ETA</th>
|
||||
<th>Ratio</th>
|
||||
<th>Avail.</th>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="box torrentdetails">
|
||||
|
||||
<div>
|
||||
<button class="tablink activeButton" onclick="openTab(event, 'General')">General</button>
|
||||
<button class="tablink" onclick="openTab(event, 'Peers')">Peers</button>
|
||||
<button class="tablink" onclick="openTab(event, 'Files')">Files</button>
|
||||
<button class="tablink" onclick="openTab(event, 'Speed')">Speed</button>
|
||||
<button class="tablink" onclick="openTab(event, 'Logger')">Logger</button>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div id="General" class="tab defaultTab">
|
||||
<h2>General</h2>
|
||||
<p>General Information</p>
|
||||
</div>
|
||||
|
||||
<div id="Peers" class="tab">
|
||||
<h2>Peers</h2>
|
||||
<table>
|
||||
<tr>
|
||||
<th>IP</th>
|
||||
<th>Client</th>
|
||||
<th>Flags</th>
|
||||
<th>Percent</th>
|
||||
<th>Down Speed</th>
|
||||
<th>Up Speed</th>
|
||||
<th>Reqs</th>
|
||||
<th>Uploaded</th>
|
||||
<th>Downloaded</th>
|
||||
<th>Peer dl.</th>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div id="Files" class="tab">
|
||||
<h2>Files</h2>
|
||||
<table>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Size</th>
|
||||
<th>Done</th>
|
||||
<th>Percent</th>
|
||||
<th>Priority</th>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div id="Speed" class="tab">
|
||||
<h2>Speed</h2>
|
||||
<p>Speed Graph Here</p>
|
||||
</div>
|
||||
|
||||
<div id="Logger" class="tab">
|
||||
<h2>Logger</h2>
|
||||
<p id="loggerData">Logger lines here</p>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
<footer>Icons by <a href="https://icons8.com">icons8</a>
|
||||
</html>
|
||||
{{end}}
|