2021-09-28 22:09:12 +09:30
{{ define "content" }}
2021-09-30 17:46:01 +09:30
{{ template "menu.tmpl" . }}
2021-09-28 22:09:12 +09:30
< div x-data = "config()" x-init = "fetch_config();" >
2021-09-30 17:12:03 +09:30
< p class = "error" x-show = "error_message" x-transition . duration . 500ms x-text = "error_message" > < / p >
< p class = "success" x-show = "success_message" x-transition . duration . 500ms x-text = "success_message" > < / p >
2021-09-28 22:09:12 +09:30
2021-09-30 17:46:16 +09:30
< p > Note: changes are not saved until the "Save Config" button is pressed at the bottom of the page.< / p >
2021-09-28 22:09:12 +09:30
< div class = "pure-g" >
2021-09-30 17:04:12 +09:30
2022-04-06 19:56:28 +09:30
< div class = "pure-u-md-1-2 pure-u-1 l-box" >
2021-09-28 22:09:12 +09:30
2021-09-30 13:00:31 +09:30
< form class = "pure-form pure-form-stacked gropple-config" >
2021-09-28 22:09:12 +09:30
< fieldset >
< legend > Server< / legend >
< label for = "config-server-port" > Listen Port< / label >
2021-09-29 23:15:44 +09:30
< input type = "text" id = "config-server-port" placeholder = "port number" x-model . number = "config.server.port" / >
2021-09-28 22:09:12 +09:30
< span class = "pure-form-message" > The port the web server will listen on.< / span >
< label for = "config-server-address" > Server address (URL)< / label >
2021-09-30 13:00:31 +09:30
< input type = "text" id = "config-server-address" class = "input-long" placeholder = "server address" x-model = "config.server.address" / >
2021-09-28 22:09:12 +09:30
< span class = "pure-form-message" >
The address the service will be available on. Generally it will be http://hostname:port where
hostname is the host the server is running on, and port is the port you set above.
< / span >
< label for = "config-server-downloadpath" > Download path< / label >
2021-09-30 13:00:31 +09:30
< input type = "text" id = "config-server-downloadpath" placeholder = "path" class = "input-long" x-model = "config.server.download_path" / >
2021-09-28 22:09:12 +09:30
< span class = "pure-form-message" > The path on the server to download files to.< / span >
2022-01-05 23:56:12 +10:30
< label for = "config-server-max-downloads" > Maximum active downloads per domain< / label >
2021-11-21 13:25:55 +10:30
< input type = "text" id = "config-server-max-downloads" placeholder = "2" class = "input-long" x-model . number = "config.server.maximum_active_downloads_per_domain" / >
2022-01-05 23:56:12 +10:30
< span class = "pure-form-message" > How many downloads can be simultaneously active. Use '0' for no limit. This limit is applied per domain that you download from.< / span >
2021-11-21 13:25:55 +10:30
2021-09-28 22:09:12 +09:30
< legend > UI< / legend >
2021-09-30 17:46:16 +09:30
< p > Note that changes to the popup dimensions will require you to recreate your bookmarklet.< / p >
2021-09-28 22:09:12 +09:30
< label for = "config-ui-popupwidth" > Popup Width< / label >
2021-09-29 23:15:44 +09:30
< input type = "text" id = "config-ui-popupwidth" placeholder = "width in pixels" x-model . number = "config.ui.popup_width" / >
2021-09-28 22:09:12 +09:30
< span class = "pure-form-message" > The width of popup windows in pixels.< / span >
< label for = "config-ui-popupheight" > Popup Height< / label >
2021-09-29 23:15:44 +09:30
< input type = "text" id = "config-ui-popupheight" placeholder = "height in pixels" x-model . number = "config.ui.popup_height" / >
2021-09-28 22:09:12 +09:30
< span class = "pure-form-message" > The height of popup windows in pixels.< / span >
< / fieldset >
< / form >
< / div >
2022-04-06 19:56:28 +09:30
< div class = "pure-u-md-1-2 pure-u-1 l-box" >
2021-09-30 13:00:31 +09:30
< form class = "pure-form gropple-config" >
2021-09-28 22:09:12 +09:30
< fieldset >
< legend > Download Profiles< / legend >
2021-09-30 13:00:31 +09:30
< p > Gropple supports multiple download profiles. Each profile specifies a different youtube-dl
compatible command, and arguments. When starting a download, you may choose which profile
to use. The URL will be appended to the argument list at the end.
< / p >
2021-09-30 17:46:16 +09:30
< hr >
2021-09-29 23:15:44 +09:30
< template x-for = "(profile, i) in config.profiles" >
< div >
2021-09-30 17:04:12 +09:30
< label x-bind:for = "'config-profiles-'+i+'-name'" > Name of profile < span x-text = "i+1" > < / span >
< / label >
2021-09-30 13:00:31 +09:30
< input type = "text" x-bind:id = "'config-profiles-'+i+'-name'" class = "input-long" placeholder = "name" x-model = "profile.name" / >
2021-09-30 17:04:12 +09:30
< button class = "pure-button button-del" href = "#" @ click . prevent = "config.profiles.splice(i, 1);;" > delete profile< / button >
2021-09-29 23:15:44 +09:30
< span class = "pure-form-message" > The name of this profile. For your information only.< / span >
< label x-bind:for = "'config-profiles-'+i+'-command'" > Command to run< / label >
2021-09-30 13:00:31 +09:30
< input type = "text" x-bind:id = "'config-profiles-'+i+'-command'" class = "input-long" placeholder = "name" x-model = "profile.command" / >
< span class = "pure-form-message" > Which command to run. Your path will be searched, or you can specify the full path here.< / span >
2021-09-29 23:15:44 +09:30
2021-09-30 13:00:31 +09:30
< label > Arguments< / label >
2021-09-29 23:15:44 +09:30
< template x-for = "(arg, j) in profile.args" >
< div >
< input type = "text" x-bind:id = "'config-profiles-'+i+'-arg-'+j" placeholder = "arg" x-model = "profile.args[j]" / >
2021-09-30 17:04:12 +09:30
< button class = "pure-button button-del" href = "#" @ click . prevent = "profile.args.splice(j, 1);;" > delete arg< / button >
2021-09-29 23:15:44 +09:30
< / div >
< / template >
2021-09-30 13:00:31 +09:30
< button class = "pure-button button-add" href = "#" @ click . prevent = "profile.args.push('');" > add arg< / button >
2022-04-06 19:56:28 +09:30
< span class = "pure-form-message" > Arguments for the command. Note that the shell is not used, so there is no need to quote or escape arguments, including those with spaces.< / span >
2021-09-29 23:15:44 +09:30
< hr >
< / div >
< / template >
2021-09-28 22:09:12 +09:30
2021-09-30 17:04:12 +09:30
< button class = "pure-button button-add" href = "#" @ click . prevent = "config.profiles.push({name: 'new profile', command: 'youtube-dl', args: []});" > add profile< / button >
2021-09-28 22:09:12 +09:30
< / fieldset >
< / form >
< / div >
< / div >
2021-09-29 23:15:44 +09:30
< div class = "pure-g" >
< div class = "pure-u-1" >
2021-09-30 13:00:31 +09:30
< button class = "pure-button pure-button-primary" @ click = "save_config();" href = "#" > Save Config< / button >
2021-09-29 23:15:44 +09:30
< / div >
< / div >
2021-09-28 22:09:12 +09:30
< / div >
{{ end }}
{{ define "js" }}
< script >
function config ( ) {
return {
2021-09-29 23:15:44 +09:30
config : { server : { } , ui : { } , profiles : [ ] } ,
error _message : '' ,
2021-09-30 17:04:12 +09:30
success _message : '' ,
2021-09-29 23:15:44 +09:30
2021-09-28 22:09:12 +09:30
fetch _config ( ) {
fetch ( '/rest/config' )
. then ( response => response . json ( ) )
. then ( config => {
this . config = config ;
} )
. catch ( error => {
2021-09-29 23:15:44 +09:30
console . log ( 'failed to fetch config' , error ) ;
2021-09-28 22:09:12 +09:30
} ) ;
} ,
2021-09-29 23:15:44 +09:30
save _config ( ) {
let op = {
method : 'POST' ,
2021-09-30 23:48:56 +09:30
body : JSON . stringify ( this . config ) ,
headers : { 'Content-Type' : 'application/json' }
} ;
2021-09-29 23:15:44 +09:30
fetch ( '/rest/config' , op )
. then ( response => {
2021-09-30 17:04:12 +09:30
return response . json ( ) ;
} )
. then ( response => {
if ( response . error ) {
this . error _message = response . error ;
this . success _message = '' ;
document . body . scrollTop = document . documentElement . scrollTop = 0 ;
} else {
this . error _message = '' ;
this . success _message = 'configuration saved' ;
document . body . scrollTop = document . documentElement . scrollTop = 0 ;
this . config = response ;
}
2021-09-29 23:15:44 +09:30
} )
. catch ( error => {
2021-09-30 17:04:12 +09:30
console . log ( 'exception' , error ) ;
2021-09-29 23:15:44 +09:30
} ) ;
}
2021-09-28 22:09:12 +09:30
}
}
< / script >
{{ end }}