2023-06-09 23:35:16 +08:00
'use strict' ;
'require form' ;
'require fs' ;
'require rpc' ;
'require uci' ;
'require ui' ;
'require view' ;
2023-06-15 16:21:20 +08:00
var callAvailSpace = rpc . declare ( {
object : 'luci.argon' ,
method : 'avail'
2023-06-09 23:35:16 +08:00
} ) ;
var callRemoveArgon = rpc . declare ( {
object : 'luci.argon' ,
method : 'remove' ,
params : [ 'filename' ] ,
expect : { '' : { } }
} ) ;
var callRenameArgon = rpc . declare ( {
object : 'luci.argon' ,
method : 'rename' ,
params : [ 'newname' ] ,
expect : { '' : { } }
} ) ;
var bg _path = '/www/luci-static/argon/background/' ;
var trans _set = [ 0 , 0.1 , 0.2 , 0.3 , 0.4 ,
0.5 , 0.6 , 0.7 , 0.8 , 0.9 , 1 ] ;
return view . extend ( {
load : function ( ) {
return Promise . all ( [
uci . load ( 'argon' ) ,
2023-06-15 16:21:20 +08:00
L . resolveDefault ( callAvailSpace ( ) , { } ) ,
2023-06-09 23:35:16 +08:00
L . resolveDefault ( fs . list ( bg _path ) , { } )
] ) ;
} ,
render : function ( data ) {
var m , s , o ;
m = new form . Map ( 'argon' , _ ( 'Argon theme configuration' ) ,
_ ( 'Here you can set the blur and transparency of the login page of argon theme, and manage the background pictures and videos. Chrome is recommended.' ) ) ;
s = m . section ( form . TypedSection , 'global' , _ ( 'Theme configuration' ) ) ;
s . addremove = false ;
s . anonymous = true ;
o = s . option ( form . ListValue , 'online_wallpaper' , _ ( 'Wallpaper source' ) ) ;
o . value ( 'none' , _ ( 'Built-in' ) ) ;
o . value ( 'bing' , _ ( 'Bing' ) ) ;
o . value ( 'unsplash' , _ ( 'Unsplash' ) ) ;
o . value ( 'wallhaven' , _ ( 'Wallhaven' ) ) ;
o . default = 'bing' ;
o . rmempty = false ;
o = s . option ( form . ListValue , 'mode' , _ ( 'Theme mode' ) ) ;
o . value ( 'normal' , _ ( 'Follow system' ) ) ;
o . value ( 'light' , _ ( 'Light mode' ) ) ;
o . value ( 'dark' , _ ( 'Dark mode' ) ) ;
o . default = 'normal' ;
o . rmempty = false ;
o = s . option ( form . Value , 'primary' , _ ( '[Light mode] Primary Color' ) , _ ( 'A HEX color (default: #5e72e4).' ) )
o . default = '#5e72e4' ;
o . rmempty = false ;
o . validate = function ( section _id , value ) {
if ( section _id )
return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i . test ( value ) ||
_ ( 'Expecting: %s' ) . format ( _ ( 'valid HEX color value' ) ) ;
return true ;
}
o = s . option ( form . ListValue , 'transparency' , _ ( '[Light mode] Transparency' ) ,
_ ( '0 transparent - 1 opaque (suggest: transparent: 0 or translucent preset: 0.5).' ) ) ;
for ( var i of trans _set )
o . value ( i ) ;
o . default = '0.5' ;
o . rmempty = false ;
o = s . option ( form . Value , 'blur' , _ ( '[Light mode] Frosted Glass Radius' ) ,
_ ( 'Larger value will more blurred (suggest: clear: 1 or blur preset: 10).' ) ) ;
o . datatype = 'ufloat' ;
o . default = '10' ;
o . rmempty = false ;
o = s . option ( form . Value , 'dark_primary' , _ ( '[Dark mode] Primary Color' ) ,
_ ( 'A HEX Color (default: #483d8b).' ) )
o . default = '#483d8b' ;
o . rmempty = false ;
o . validate = function ( section _id , value ) {
if ( section _id )
return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i . test ( value ) ||
_ ( 'Expecting: %s' ) . format ( _ ( 'valid HEX color value' ) ) ;
return true ;
}
o = s . option ( form . ListValue , 'transparency_dark' , _ ( '[Dark mode] Transparency' ) ,
_ ( '0 transparent - 1 opaque (suggest: black translucent preset: 0.5).' ) ) ;
for ( var i of trans _set )
o . value ( i ) ;
o . default = '0.5' ;
o . rmempty = false ;
o = s . option ( form . Value , 'blur_dark' , _ ( '[Dark mode] Frosted Glass Radius' ) ,
_ ( 'Larger value will more blurred (suggest: clear: 1 or blur preset: 10).' ) )
o . datatype = 'ufloat' ;
o . default = '10' ;
o . rmempty = false ;
o = s . option ( form . Button , '_save' , _ ( 'Save settings' ) ) ;
o . inputstyle = 'apply' ;
o . inputtitle = _ ( 'Save current settings' ) ;
o . onclick = function ( ) {
ui . changes . apply ( true ) ;
return this . map . save ( null , true ) ;
}
s = m . section ( form . TypedSection , null , _ ( 'Upload background (available space: %1024.2mB)' )
2023-06-15 16:21:20 +08:00
. format ( data [ 1 ] . avail * 1024 ) ,
2023-06-09 23:35:16 +08:00
_ ( 'You can upload files such as gif/jpg/mp4/png/webm/webp files, to change the login page background.' ) ) ;
s . addremove = false ;
s . anonymous = true ;
o = s . option ( form . Button , '_upload_bg' , _ ( 'Upload background' ) ,
_ ( 'Files will be uploaded to <code>%s</code>.' ) . format ( bg _path ) ) ;
o . inputstyle = 'action' ;
o . inputtitle = _ ( 'Upload...' ) ;
o . onclick = function ( ev , section _id ) {
var file = '/tmp/argon_background.tmp' ;
return ui . uploadFile ( file , ev . target ) . then ( function ( res ) {
return L . resolveDefault ( callRenameArgon ( res . name ) , { } ) . then ( function ( ret ) {
if ( ret . result === 0 )
return location . reload ( ) ;
else {
ui . addNotification ( null , E ( 'p' , _ ( 'Failed to upload file: %s.' ) . format ( res . name ) ) ) ;
return L . resolveDefault ( fs . remove ( file ) , { } ) ;
}
} ) ;
} )
. catch ( function ( e ) { ui . addNotification ( null , E ( 'p' , e . message ) ) ; } ) ;
} ;
o . modalonly = true ;
s = m . section ( form . TableSection ) ;
s . render = function ( ) {
var tbl = E ( 'table' , { 'class' : 'table cbi-section-table' } ,
E ( 'tr' , { 'class' : 'tr table-titles' } , [
E ( 'th' , { 'class' : 'th' } , [ _ ( 'Filename' ) ] ) ,
E ( 'th' , { 'class' : 'th' } , [ _ ( 'Modified date' ) ] ) ,
E ( 'th' , { 'class' : 'th' } , [ _ ( 'Size' ) ] ) ,
E ( 'th' , { 'class' : 'th' } , [ _ ( 'Action' ) ] )
] )
) ;
cbi _update _table ( tbl , data [ 2 ] . map ( L . bind ( function ( file ) {
return [
file . name ,
new Date ( file . mtime * 1000 ) . toLocaleString ( ) ,
String . format ( '%1024.2mB' , file . size ) ,
E ( 'button' , {
'class' : 'btn cbi-button cbi-button-remove' ,
'click' : ui . createHandlerFn ( this , function ( ) {
return L . resolveDefault ( callRemoveArgon ( file . name ) , { } )
. then ( function ( ) { return location . reload ( ) ; } ) ;
} )
} , [ _ ( 'Delete' ) ] )
] ;
} , this ) ) , E ( 'em' , _ ( 'No files found.' ) ) ) ;
return E ( 'div' , { 'class' : 'cbi-map' , 'id' : 'cbi-filelist' } , [
E ( 'h3' , _ ( 'Background file list' ) ) ,
tbl
] ) ;
} ;
return m . render ( ) ;
} ,
handleSaveApply : null ,
handleSave : null ,
handleReset : null
} ) ;