Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
D
debomatic-webui
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
debomatic-webui-admins
debomatic-webui
Commits
f7a4f04a
Commit
f7a4f04a
authored
Jun 06, 2014
by
Leo Iannacone
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' into portable
parents
04380791
43903d3a
Changes
14
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
1431 additions
and
1435 deletions
+1431
-1435
debomatic-webui/debomatic-webui
debomatic-webui/debomatic-webui
+5
-0
debomatic-webui/lib/broadcaster.js
debomatic-webui/lib/broadcaster.js
+59
-59
debomatic-webui/lib/client.js
debomatic-webui/lib/client.js
+158
-161
debomatic-webui/lib/config.js
debomatic-webui/lib/config.js
+94
-97
debomatic-webui/lib/parser.js
debomatic-webui/lib/parser.js
+30
-29
debomatic-webui/lib/tail.js
debomatic-webui/lib/tail.js
+32
-30
debomatic-webui/lib/utils.js
debomatic-webui/lib/utils.js
+135
-131
debomatic-webui/public/javascripts/debug.js
debomatic-webui/public/javascripts/debug.js
+21
-20
debomatic-webui/public/javascripts/main.js
debomatic-webui/public/javascripts/main.js
+20
-19
debomatic-webui/public/javascripts/page_distribution.js
debomatic-webui/public/javascripts/page_distribution.js
+563
-577
debomatic-webui/public/javascripts/page_generic.js
debomatic-webui/public/javascripts/page_generic.js
+168
-171
debomatic-webui/public/javascripts/preferences.js
debomatic-webui/public/javascripts/preferences.js
+52
-50
debomatic-webui/public/javascripts/utils.js
debomatic-webui/public/javascripts/utils.js
+88
-89
debomatic-webui/views/distribution.ejs
debomatic-webui/views/distribution.ejs
+6
-2
No files found.
debomatic-webui/debomatic-webui
View file @
f7a4f04a
...
...
@@ -19,6 +19,11 @@ var express = require('express'),
Broadcaster = require('./lib/broadcaster.js');
// serve dsc files as octet-stream
serve_static.mime.define({
'application/octet-stream': ['dsc']
});
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(serve_static(__dirname + '/public'));
...
...
debomatic-webui/lib/broadcaster.js
View file @
f7a4f04a
var
config
=
require
(
'
./config.js
'
)
,
fs
=
require
(
'
fs
'
)
,
Tail
=
require
(
'
./tail.js
'
)
'
use strict
'
;
function
__watch_status_check_same_obj
(
obj1
,
obj2
)
{
var
config
=
require
(
'
./config.js
'
),
fs
=
require
(
'
fs
'
),
utils
=
require
(
'
./utils.js
'
),
Tail
=
require
(
'
./tail.js
'
);
function
__watch_status_check_same_obj
(
obj1
,
obj2
)
{
if
(
obj1
.
status
==
obj2
.
status
)
{
if
(
obj1
.
distribution
==
obj2
.
distribution
)
{
if
(
obj1
.
hasOwnProperty
(
'
package
'
)
&&
obj2
.
hasOwnProperty
(
'
package
'
))
{
obj2
.
hasOwnProperty
(
'
package
'
))
{
if
(
obj1
.
package
==
obj2
.
package
)
return
true
;
return
false
return
false
;
}
return
true
return
true
;
}
}
return
false
return
false
;
}
// watcher on build_status
function
__watch_status
(
socket
,
status
)
{
function
__watch_status
(
socket
,
status
)
{
var
watcher
=
new
Tail
(
config
.
debomatic
.
jsonfile
)
watcher
.
on
(
'
line
'
,
function
(
new_content
)
{
var
data
=
null
var
watcher
=
new
Tail
(
config
.
debomatic
.
jsonfile
);
watcher
.
on
(
'
line
'
,
function
(
new_content
)
{
var
data
=
null
;
try
{
data
=
JSON
.
parse
(
new_content
)
data
=
JSON
.
parse
(
new_content
);
}
catch
(
err
)
{
utils
.
errors_handler
(
'
Broadcaster:__watch_status:JSON.parse(new_content) -
'
,
err
,
socket
)
return
utils
.
errors_handler
(
'
Broadcaster:__watch_status:JSON.parse(new_content) -
'
,
err
,
socket
);
return
;
}
// looking for same status already in statuses lists
if
(
data
.
hasOwnProperty
(
'
success
'
))
{
for
(
i
=
0
;
i
<
status
.
length
;
i
++
)
{
for
(
var
i
=
0
;
i
<
status
.
length
;
i
++
)
{
if
(
__watch_status_check_same_obj
(
data
,
status
[
i
]))
{
status
.
splice
(
i
,
1
)
status
.
splice
(
i
,
1
);
break
;
}
else
}
else
continue
;
}
}
else
{
status
.
push
(
data
);
}
else
{
status
.
push
(
data
)
}
socket
.
emit
(
config
.
events
.
broadcast
.
status_update
,
data
)
})
watcher
.
on
(
'
error
'
,
function
(
msg
)
{
socket
.
emit
(
config
.
events
.
error
,
msg
)
})
socket
.
emit
(
config
.
events
.
broadcast
.
status_update
,
data
);
});
watcher
.
on
(
'
error
'
,
function
(
msg
)
{
socket
.
emit
(
config
.
events
.
error
,
msg
);
});
}
// watcher on new distributions
function
__watch_distributions
(
socket
)
{
fs
.
watch
(
config
.
debomatic
.
path
,
{
persistent
:
true
},
function
(
event
,
fileName
)
{
function
__watch_distributions
(
socket
)
{
fs
.
watch
(
config
.
debomatic
.
path
,
{
persistent
:
true
},
function
(
event
,
fileName
)
{
// wait half a second to get pool subdir created
setTimeout
(
function
()
{
utils
.
send_distributions
(
socket
)
},
500
)
})
setTimeout
(
function
()
{
utils
.
send_distributions
(
socket
);
},
500
);
});
}
function
Broadcaster
(
sockets
,
status
)
{
var
sockets
=
sockets
function
Broadcaster
(
sockets
,
status
)
{
__watch_status
(
sockets
,
status
)
__watch_status
(
sockets
,
status
);
__watch_distributions
(
sockets
)
__watch_distributions
(
sockets
);
return
{
}
};
}
module
.
exports
=
Broadcaster
module
.
exports
=
Broadcaster
;
debomatic-webui/lib/client.js
View file @
f7a4f04a
var
fs
=
require
(
'
fs
'
)
,
path
=
require
(
'
path
'
)
,
config
=
require
(
'
./config.js
'
)
,
utils
=
require
(
'
./utils.js
'
)
'
use strict
'
;
var
fs
=
require
(
'
fs
'
),
path
=
require
(
'
path
'
),
config
=
require
(
'
./config.js
'
),
utils
=
require
(
'
./utils.js
'
);
var
_e
=
config
.
events
.
client
var
_e
=
config
.
events
.
client
;
function
__get_files_list_from_package
(
data
,
callback
)
{
package_path
=
utils
.
get_package_path
(
data
)
utils
.
get_files_list
(
package_path
,
false
,
function
(
files
)
{
data
.
package
.
files
=
[]
data
.
package
.
debs
=
[]
data
.
package
.
sources
=
[]
var
package_path
=
utils
.
get_package_path
(
data
);
utils
.
get_files_list
(
package_path
,
false
,
function
(
files
)
{
data
.
package
.
files
=
[];
data
.
package
.
debs
=
[];
data
.
package
.
sources
=
[];
files
.
forEach
(
function
(
f
)
{
file
=
{}
file
.
path
=
path
.
join
(
package_path
,
f
).
replace
(
config
.
debomatic
.
path
,
config
.
routes
.
debomatic
)
file
.
orig_name
=
f
file
.
name
=
f
.
split
(
'
_
'
)[
0
]
var
file
=
{};
file
.
path
=
path
.
join
(
package_path
,
f
).
replace
(
config
.
debomatic
.
path
,
config
.
routes
.
debomatic
);
file
.
orig_name
=
f
;
file
.
name
=
f
.
split
(
'
_
'
)[
0
];
file
.
extension
=
f
.
split
(
'
.
'
).
pop
();
if
(
file
.
extension
==
"
deb
"
||
file
.
extension
==
"
ddeb
"
)
{
if
(
file
.
extension
==
'
deb
'
||
file
.
extension
==
'
ddeb
'
)
{
data
.
package
.
debs
.
push
(
file
);
}
else
if
(
f
.
indexOf
(
'
.tar
'
)
>=
0
||
file
.
extension
==
"
changes
"
||
file
.
extension
==
"
dsc
"
)
{
file
.
name
=
f
.
replace
(
data
.
package
.
name
+
'
_
'
+
data
.
package
.
version
+
'
.
'
,
''
)
}
else
if
(
f
.
indexOf
(
'
.tar
'
)
>=
0
||
file
.
extension
==
'
changes
'
||
file
.
extension
==
'
dsc
'
)
{
file
.
name
=
f
.
replace
(
data
.
package
.
name
+
'
_
'
+
data
.
package
.
version
+
'
.
'
,
''
);
if
(
file
.
extension
==
'
changes
'
)
file
.
name
=
file
.
extension
file
.
name
=
file
.
extension
;
else
if
(
f
.
indexOf
(
'
.tar
'
)
>=
0
&&
f
.
indexOf
(
'
.orig.
'
)
>
0
)
file
.
name
=
'
orig.
'
+
f
.
split
(
'
.orig.
'
).
pop
()
data
.
package
.
sources
.
push
(
file
)
}
else
{
file
.
name
=
file
.
extension
data
.
package
.
files
.
push
(
file
)
file
.
name
=
'
orig.
'
+
f
.
split
(
'
.orig.
'
).
pop
();
data
.
package
.
sources
.
push
(
file
);
}
else
{
file
.
name
=
file
.
extension
;
data
.
package
.
files
.
push
(
file
);
}
});
callback
(
data
);
});
}
function
__send_package_files_list
(
event_name
,
socket
,
data
)
{
__get_files_list_from_package
(
data
,
function
(
new_data
)
{
socket
.
emit
(
event_name
,
new_data
)
function
__send_package_files_list
(
event_name
,
socket
,
data
)
{
__get_files_list_from_package
(
data
,
function
(
new_data
)
{
socket
.
emit
(
event_name
,
new_data
);
});
}
function
__send_package_status
(
socket
,
data
,
package_data
)
{
var
event_name
=
config
.
events
.
client
.
distribution_packages
.
status
var
event_name
=
config
.
events
.
client
.
distribution_packages
.
status
;
var
new_data
=
{}
new_data
.
distribution
=
data
.
distribution
new_data
.
package
=
package_data
var
new_data
=
{};
new_data
.
distribution
=
data
.
distribution
;
new_data
.
package
=
package_data
;
var
status_data
=
{}
status_data
.
status
=
config
.
status
.
build
status_data
.
distribution
=
data
.
distribution
.
name
status_data
.
package
=
package_data
.
orig_name
var
status_data
=
{};
status_data
.
status
=
config
.
status
.
build
;
status_data
.
distribution
=
data
.
distribution
.
name
;
status_data
.
package
=
package_data
.
orig_name
;
var
package_path
=
utils
.
get_package_path
(
new_data
)
var
package_path
=
utils
.
get_package_path
(
new_data
);
// status policy:
// + successed: exists .dsc
// + building: wc -l .datestamp == 1 (FIX_ME)
// + failed: else
var
base_path
=
path
.
join
(
package_path
,
package_data
.
orig_name
)
fs
.
exists
(
base_path
+
'
.dsc
'
,
function
(
dsc_exists
)
{
var
base_path
=
path
.
join
(
package_path
,
package_data
.
orig_name
);
fs
.
exists
(
base_path
+
'
.dsc
'
,
function
(
dsc_exists
)
{
if
(
dsc_exists
)
{
status_data
.
success
=
config
.
status
.
success
socket
.
emit
(
event_name
,
status_data
)
}
else
{
status_data
.
success
=
config
.
status
.
success
;
socket
.
emit
(
event_name
,
status_data
);
}
else
{
// emulate wc -l .datestamp in nodejs
var
count
=
0
var
datestamp
=
base_path
+
'
.datestamp
'
fs
.
exists
(
datestamp
,
function
(
datestamp_exists
)
{
var
count
=
0
;
var
datestamp
=
base_path
+
'
.datestamp
'
;
fs
.
exists
(
datestamp
,
function
(
datestamp_exists
)
{
if
(
datestamp_exists
)
{
// count lines
fs
.
createReadStream
(
datestamp
)
.
on
(
'
data
'
,
function
(
chunk
)
{
for
(
var
i
=
0
;
i
<
chunk
.
length
;
++
i
)
.
on
(
'
data
'
,
function
(
chunk
)
{
for
(
var
i
=
0
;
i
<
chunk
.
length
;
++
i
)
if
(
chunk
[
i
]
==
10
)
count
++
;
})
.
on
(
'
end
'
,
function
()
{
.
on
(
'
end
'
,
function
()
{
if
(
count
>
1
)
status_data
.
success
=
config
.
status
.
fail
socket
.
emit
(
event_name
,
status_data
)
status_data
.
success
=
config
.
status
.
fail
;
socket
.
emit
(
event_name
,
status_data
);
});
}
})
});
}
})
});
}
function
__send_distribution_packages
(
event_name
,
socket
,
data
)
{
distro_path
=
utils
.
get_distribution_pool_path
(
data
)
function
__send_distribution_packages
(
event_name
,
socket
,
data
)
{
var
distro_path
=
utils
.
get_distribution_pool_path
(
data
);
utils
.
get_files_list
(
distro_path
,
true
,
function
(
packages
)
{
data
.
distribution
.
packages
=
[]
packages
.
forEach
(
function
(
p
)
{
pack
=
{}
info
=
p
.
split
(
'
_
'
)
pack
.
name
=
info
[
0
]
pack
.
version
=
info
[
1
]
pack
.
orig_name
=
p
data
.
distribution
.
packages
.
push
(
pack
)
__send_package_status
(
socket
,
data
,
pack
)
data
.
distribution
.
packages
=
[];
packages
.
forEach
(
function
(
p
)
{
var
pack
=
{};
var
info
=
p
.
split
(
'
_
'
);
pack
.
name
=
info
[
0
];
pack
.
version
=
info
[
1
];
pack
.
orig_name
=
p
;
data
.
distribution
.
packages
.
push
(
pack
);
__send_package_status
(
socket
,
data
,
pack
);
});
socket
.
emit
(
event_name
,
data
)
socket
.
emit
(
event_name
,
data
);
});
}
function
__send_file
(
event_name
,
socket
,
data
)
{
var
file_path
=
utils
.
get_file_path
(
data
)
function
__send_file
(
event_name
,
socket
,
data
)
{
var
file_path
=
utils
.
get_file_path
(
data
);
fs
.
readFile
(
file_path
,
'
utf8
'
,
function
(
err
,
content
)
{
if
(
err
)
{
utils
.
errors_handler
(
'
client:__send_file
'
,
err
,
socket
)
return
utils
.
errors_handler
(
'
client:__send_file
'
,
err
,
socket
);
return
;
}
data
.
file
.
orig_name
=
file_path
.
split
(
'
/
'
).
pop
()
data
.
file
.
content
=
content
data
.
file
.
path
=
file_path
.
replace
(
config
.
debomatic
.
path
,
config
.
routes
.
debomatic
)
socket
.
emit
(
event_name
,
data
)
data
.
file
.
orig_name
=
file_path
.
split
(
'
/
'
).
pop
();
data
.
file
.
content
=
content
;
data
.
file
.
path
=
file_path
.
replace
(
config
.
debomatic
.
path
,
config
.
routes
.
debomatic
);
socket
.
emit
(
event_name
,
data
);
});
}
function
__handler_get_file
(
socket
,
data
)
{
var
file_path
=
utils
.
get_file_path
(
data
)
utils
.
watch_path_onsocket
(
_e
.
file_newcontent
,
socket
,
data
,
file_path
,
function
(
event_name
,
socket
,
data
)
{
data
.
file
.
content
=
null
socket
.
emit
(
event_name
,
data
)
})
__send_file
(
_e
.
file
.
set
,
socket
,
data
)
function
__handler_get_file
(
socket
,
data
)
{
var
file_path
=
utils
.
get_file_path
(
data
);
utils
.
watch_path_onsocket
(
_e
.
file_newcontent
,
socket
,
data
,
file_path
,
function
(
event_name
,
socket
,
data
)
{
data
.
file
.
content
=
null
;
socket
.
emit
(
event_name
,
data
);
});
__send_file
(
_e
.
file
.
set
,
socket
,
data
);
}
function
Client
(
socket
)
{
var
socket
=
socket
function
Client
(
socket
)
{
this
.
start
=
function
()
{
// init send distributions
utils
.
send_distributions
(
socket
)
utils
.
send_distributions
(
socket
);
// init events
socket
.
on
(
_e
.
distribution_packages
.
get
,
function
(
data
)
{
if
(
!
utils
.
check_data_distribution
(
data
))
return
distribution_path
=
path
.
join
(
config
.
debomatic
.
path
,
data
.
distribution
.
name
,
'
pool
'
)
utils
.
generic_handler_watcher
(
_e
.
distribution_packages
.
set
,
socket
,
data
,
distribution_path
,
__send_distribution_packages
)
})
if
(
!
utils
.
check_data_distribution
(
data
))
return
;
var
distribution_path
=
path
.
join
(
config
.
debomatic
.
path
,
data
.
distribution
.
name
,
'
pool
'
);
utils
.
generic_handler_watcher
(
_e
.
distribution_packages
.
set
,
socket
,
data
,
distribution_path
,
__send_distribution_packages
);
});
socket
.
on
(
_e
.
package_files_list
.
get
,
function
(
data
)
{
if
(
!
utils
.
check_data_package
(
data
))
return
package_path
=
utils
.
get_package_path
(
data
)
utils
.
generic_handler_watcher
(
_e
.
package_files_list
.
set
,
socket
,
data
,
package_path
,
__send_package_files_list
)
})
socket
.
on
(
_e
.
package_files_list
.
get
,
function
(
data
)
{
if
(
!
utils
.
check_data_package
(
data
))
return
;
var
package_path
=
utils
.
get_package_path
(
data
);
utils
.
generic_handler_watcher
(
_e
.
package_files_list
.
set
,
socket
,
data
,
package_path
,
__send_package_files_list
);
});
socket
.
on
(
_e
.
file
.
get
,
function
(
data
)
{
if
(
!
utils
.
check_data_file
(
data
))
return
__handler_get_file
(
socket
,
data
)
})
socket
.
on
(
_e
.
file
.
get
,
function
(
data
)
{
if
(
!
utils
.
check_data_file
(
data
))
return
;
__handler_get_file
(
socket
,
data
);
});
// on client disconnection close all watchers
socket
.
on
(
'
disconnect
'
,
function
()
{
socket
.
get
(
"
watchers
"
,
function
(
err
,
socket_watchers
)
{
if
(
!
socket_watchers
)
socket
.
on
(
'
disconnect
'
,
function
()
{
socket
.
get
(
'
watchers
'
,
function
(
err
,
socket_watchers
)
{
if
(
!
socket_watchers
)
return
;
for
(
key
in
socket_watchers
)
{
try
{
socket_watchers
[
key
].
close
()
}
catch
(
err
)
{}
for
(
var
key
in
socket_watchers
)
{
try
{
socket_watchers
[
key
].
close
();
}
catch
(
err
)
{}
}
})
});
});
}
};
this
.
send_status
=
function
(
status
)
{
socket
.
emit
(
_e
.
status
,
status
)
}
this
.
send_status
=
function
(
status
)
{
socket
.
emit
(
_e
.
status
,
status
);
};
}
module
.
exports
=
Client
module
.
exports
=
Client
;
debomatic-webui/lib/config.js
View file @
f7a4f04a
'
use strict
'
;
/*
* Please DO NOT edit this file.
*
* Edit auto-generated
"user.config.js"
file instead.
* Edit auto-generated
'user.config.js'
file instead.
*
*/
// #start config-auto-export
var
config
=
{}
var
config
=
{}
;
/*
* Configure host and port.
* Please for ports < 1000 use authbind. DO NOT RUN nodejs as root.
* $ authbind nodejs index.js
*/
config
.
host
=
'
localhost
'
config
.
port
=
3000
config
.
host
=
'
localhost
'
;
config
.
port
=
3000
;
config
.
socket
=
{}
config
.
socket
.
log
=
false
config
.
socket
=
{}
;
config
.
socket
.
log
=
false
;
config
.
debomatic
=
{}
config
.
debomatic
.
path
=
'
/srv/debomatic-amd64
'
config
.
debomatic
.
jsonfile
=
'
/var/log/debomatic-json.log
'
config
.
debomatic
=
{}
;
config
.
debomatic
.
path
=
'
/srv/debomatic-amd64
'
;
config
.
debomatic
.
jsonfile
=
'
/var/log/debomatic-json.log
'
;
config
.
routes
=
{}
config
.
routes
.
debomatic
=
'
/debomatic
'
config
.
routes
.
distribution
=
'
/distribution
'
config
.
routes
.
preferences
=
'
/preferences
'
config
.
routes
=
{}
;
config
.
routes
.
debomatic
=
'
/debomatic
'
;
config
.
routes
.
distribution
=
'
/distribution
'
;
config
.
routes
.
preferences
=
'
/preferences
'
;
config
.
web
=
{}
config
.
web
.
title
=
"
Deb-o-Matic web.ui
"
config
.
web
.
description
=
"
This is a web interface for debomatic
"
config
.
web
=
{}
;
config
.
web
.
title
=
'
Deb-o-Matic web.ui
'
;
config
.
web
.
description
=
'
This is a web interface for debomatic
'
;
// debomatic configuration exportable for web
config
.
web
.
debomatic
=
{}
config
.
web
.
debomatic
.
admin
=
{}
config
.
web
.
debomatic
.
admin
.
name
=
"
Your Name
"
config
.
web
.
debomatic
.
admin
.
email
=
"
you AT debian DOT org
"
// please use this SPAMFREE form - it will be converted client side by javascript
config
.
web
.
debomatic
.
architecture
=
'
amd64
'
config
.
web
.
debomatic
.
dput
=
{}
config
.
web
.
debomatic
.
dput
.
incoming
=
config
.
debomatic
.
path
config
.
web
.
debomatic
.
dput
.
host
=
config
.
host
config
.
web
.
debomatic
.
dput
.
login
=
"
debomatic
"
config
.
web
.
debomatic
.
dput
.
method
=
"
scp
"
config
.
web
.
debomatic
.
dput
.
unsigned_uploads
=
false
config
.
web
.
debomatic
=
{}
;
config
.
web
.
debomatic
.
admin
=
{}
;
config
.
web
.
debomatic
.
admin
.
name
=
'
Your Name
'
;
config
.
web
.
debomatic
.
admin
.
email
=
'
you AT debian DOT org
'
;
// please use this SPAMFREE form - it will be converted client side by javascript
config
.
web
.
debomatic
.
architecture
=
'
amd64
'
;
config
.
web
.
debomatic
.
dput
=
{}
;
config
.
web
.
debomatic
.
dput
.
incoming
=
config
.
debomatic
.
path
;
config
.
web
.
debomatic
.
dput
.
host
=
config
.
host
;
config
.
web
.
debomatic
.
dput
.
login
=
'
debomatic
'
;
config
.
web
.
debomatic
.
dput
.
method
=
'
scp
'
;
config
.
web
.
debomatic
.
dput
.
unsigned_uploads
=
false
;
// default ui settings
config
.
web
.
preferences
=
{}
config
.
web
.
preferences
.
autoscroll
=
true
config
.
web
.
preferences
.
header
=
true
config
.
web
.
preferences
.
sidebar
=
true
config
.
web
.
preferences
.
glossy_theme
=
true
config
.
web
.
preferences
.
file_background
=
true
config
.
web
.
preferences
.
file_fontsize
=
13
// valid values are [13..16]
config
.
web
.
preferences
.
debug
=
0
// debug level - 0 means disabled
config
.
web
.
preferences
=
{}
;
config
.
web
.
preferences
.
autoscroll
=
true
;
config
.
web
.
preferences
.
header
=
true
;
config
.
web
.
preferences
.
sidebar
=
true
;
config
.
web
.
preferences
.
glossy_theme
=
true
;
config
.
web
.
preferences
.
file_background
=
true
;
config
.
web
.
preferences
.
file_fontsize
=
13
;
// valid values are [13..16]
config
.
web
.
preferences
.
debug
=
0
;
// debug level - 0 means disabled
// #end config-auto-export
// DO NOT TOUCH these ones
config
.
version
=
'
0.2.
2
'
config
.
version
=
'
0.2.
3
'
;
// A simple function to quickly have
// get and set strings for client events
...
...
@@ -69,78 +70,74 @@ function _event_get_set(event_name) {
return
{
set
:
event_name
,
get
:
'
get_
'
+
event_name
}
};
}
config
.
events
=
{}
config
.
events
.
error
=
'
error
'
config
.
events
.
broadcast
=
{}
config
.
events
.
broadcast
.
distributions
=
'
distributions
'
config
.
events
.
broadcast
.
status_update
=
'
status_update
'
config
.
events
=
{}
;
config
.
events
.
error
=
'
error
'
;
config
.
events
.
broadcast
=
{}
;
config
.
events
.
broadcast
.
distributions
=
'
distributions
'
;
config
.
events
.
broadcast
.
status_update
=
'
status_update
'
;
config
.
events
.
client
=
{}
config
.
events
.
client
.
distribution_packages
=
_event_get_set
(
'
distribution_packages
'
)
config
.
events
.
client
.
distribution_packages
.
status
=
'
package_status
'
config
.
events
.
client
.
package_files_list
=
_event_get_set
(
'
package_files_list
'
)
config
.
events
.
client
.
file
=
_event_get_set
(
'
file
'
)
config
.
events
.
client
.
file_newcontent
=
'
file_newcontent
'
config
.
events
.
client
.
status
=
'
status
'
config
.
events
.
client
=
{}
;
config
.
events
.
client
.
distribution_packages
=
_event_get_set
(
'
distribution_packages
'
)
;
config
.
events
.
client
.
distribution_packages
.
status
=
'
package_status
'
;
config
.
events
.
client
.
package_files_list
=
_event_get_set
(
'
package_files_list
'
)
;
config
.
events
.
client
.
file
=
_event_get_set
(
'
file
'
)
;
config
.
events
.
client
.
file_newcontent
=
'
file_newcontent
'
;
config
.
events
.
client
.
status
=
'
status
'
;
// debomatic status according with JSONLogger.py module
config
.
status
=
{}
config
.
status
.
build
=
'
build
'
config
.
status
.
create
=
'
create
'
config
.
status
.
update
=
'
update
'
config
.
status
.
success
=
true
config
.
status
.
fail
=
false
config
.
status
=
{}
;
config
.
status
.
build
=
'
build
'
;
config
.
status
.
create
=
'
create
'
;
config
.
status
.
update
=
'
update
'
;
config
.
status
.
success
=
true
;
config
.
status
.
fail
=
false
;
// read user configuration and merge it
/*
* update object1 with object2 values
*/
function
_merge
(
object1
,
object2
)
{
var
result
=
{}
for
(
p
in
object1
)
{
var
result
=
{};
for
(
var
p
in
object1
)
{
if
(
object2
.
hasOwnProperty
(
p
))
{
if
(
typeof
object1
[
p
]
===
'
object
'
&&
typeof
object2
[
p
]
===
'
object
'
)
{
result
[
p
]
=
_merge
(
object1
[
p
],
object2
[
p
])
}
else
{
result
[
p
]
=
object2
[
p
]
}
result
[
p
]
=
_merge
(
object1
[
p
],
object2
[
p
]);
}
else
{
result
[
p
]
=
object2
[
p
];
}
else
{
result
[
p
]
=
object1
[
p
]
}
else
{
result
[
p
]
=
object1
[
p
];
}
}
return
result
return
result
;
}
try
{
var
Parser
=
require
(
'
./parser.js
'
)
var
parser
=
new
Parser
()
var
user_config
=
parser
.
getUserConfig
()
var
Parser
=
require
(
'
./parser.js
'
);
var
parser
=
new
Parser
();
var
user_config
=
parser
.
getUserConfig
();
if
(
user_config
)
{
console
.
log
(
"
Reading user configutation ...
"
)
config
=
_merge
(
config
,
require
(
user_config
))
}
else
{
console
.
log
(
"
No user config specified. Using global settings.
"
)
console
.
log
(
'
Reading user configutation ...
'
);
config
=
_merge
(
config
,
require
(
user_config
));
}
else
{
console
.
log
(
'
No user config specified. Using global settings.
'
);
}
}
catch
(
err
)
{
if
(
err
.
code
==
'
MODULE_NOT_FOUND
'
)
{
console
.
log
(
"
File %s not found.
"
,
user_config
)
process
.
exit
(
1
)
}
else
{
console
.
error
(
"
Error reading user configutation
"
,
err
);
process
.
exit
(
1
)
console
.
log
(
'
File %s not found.
'
,
user_config
);
process
.
exit
(
1
);
}
else
{
console
.
error
(
'
Error reading user configutation
'
,
err
);
process
.
exit
(
1
);
}
}
finally
{
// export some variable
config
.
web
.
paths
=
config
.
routes
config
.
web
.
events
=
config
.
events
config
.
web
.
status
=
config
.
status
config
.
web
.
host
=
config
.
host
module
.
exports
=
config
config
.
web
.
paths
=
config
.
routes
;
config
.
web
.
events
=
config
.
events
;
config
.
web
.
status
=
config
.
status
;
config
.
web
.
host
=
config
.
host
;
module
.
exports
=
config
;
}
debomatic-webui/lib/parser.js
View file @
f7a4f04a
function
Parser
()
{
'
use strict
'
;
function
Parser
()
{
var
args
=
process
.
argv
.
slice
(
2
);
var
help
=
function
()
{
console
.
log
(
"
\
var
help
=
function
()
{
console
.
log
(
'
\
Usage: %s [-c config]
\n\
-h print this help
\n\
-c set user configuration file
"
,
-c set user configuration file
'
,
process
.
argv
[
1
].
split
(
'
/
'
).
pop
());
process
.
exit
(
0
);
}
};
this
.
getUserConfig
=
function
()
{
this
.
getUserConfig
=
function
()
{
var
configFile
=
null
;
args
.
forEach
(
function
(
val
,
index
)
{
if
(
val
==
'
-c
'
)
{
configFile
=
args
[
index
+
1
]
return
configFile
=
args
[
index
+
1
];
return
;
}
})
});
if
(
configFile
)
return
process
.
cwd
()
+
'
/
'
+
configFile
;
else
return
null
}
return
null
;
};
args
.
forEach
(
function
(
val
,
index
)
{
if
(
val
==
'
-h
'
)
{
help
()
help
();
}
})
});
}
module
.
exports
=
Parser
debomatic-webui/lib/tail.js
View file @
f7a4f04a
var
fs
=
require
(
'
fs
'
)
,
Tail
=
require
(
'
tail
'
).
Tail
'
use strict
'
;
Tail
.
prototype
.
watchEvent
=
function
(
e
)
{
var
fs
=
require
(
'
fs
'
),
Tail
=
require
(
'
tail
'
).
Tail
;
Tail
.
prototype
.
watchEvent
=
function
(
e
)
{
var
_this
=
this
;
if
(
e
===
'
change
'
)
{
return
fs
.
stat
(
this
.
filename
,
function
(
err
,
stats
)
{
return
fs
.
stat
(
this
.
filename
,
function
(
err
,
stats
)
{
if
(
err
)
{
_this
.
emit
(
'
error
'
,
err
);
}
...
...
@@ -19,18 +21,18 @@ Tail.prototype.watchEvent = function(e) {
});
_this
.
pos
=
stats
.
size
;
if
(
_this
.
queue
.
length
===
1
)
{
return
_this
.
internalDispatcher
.
emit
(
"
next
"
);
return
_this
.
internalDispatcher
.
emit
(
'
next
'
);
}
}
});
}
else
if
(
e
===
'
rename
'
)
{
this
.
unwatch
();
_this
.
emit
(
'
error
'
,
"
File
"
+
this
.
filename
+
"
deleted.
"
);
_this
.
emit
(
'
error
'
,
'
File
'
+
this
.
filename
+
'
deleted.
'
);
}
};
Tail
.
prototype
.
close
=
function
()
{
this
.
unwatch
()
}
Tail
.
prototype
.
close
=
function
()
{
this
.
unwatch
();
}
;
module
.
exports
=
Tail
\ No newline at end of file
module
.
exports
=
Tail
;
debomatic-webui/lib/utils.js
View file @
f7a4f04a
var
path
=
require
(
'
path
'
)
,
fs
=
require
(
'
fs
'
)
,
config
=
require
(
'
./config.js
'
)
,
Tail
=
require
(
'
./tail.js
'
)
'
use strict
'
;
var
path
=
require
(
'
path
'
),
fs
=
require
(
'
fs
'
),
config
=
require
(
'
./config.js
'
),
Tail
=
require
(
'
./tail.js
'
);
function
__errors_handler
(
from
,
err
,
socket
)
{
if
(
!
socket
)
from
=
"
NO SOCKET:
"
+
from
console
.
error
(
from
,
err
)
if
(
!
socket
)
from
=
'
NO SOCKET:
'
+
from
;
console
.
error
(
from
,
err
);
if
(
socket
)
socket
.
emit
(
config
.
events
.
error
,
err
.
message
)
socket
.
emit
(
config
.
events
.
error
,
err
.
message
);
}
function
__check_no_backward
(
backward_path
)
{
try
{
return
backward_path
.
indexOf
(
'
..
'
)
<
0
}
catch
(
err
)
{
return
true
}
return
backward_path
.
indexOf
(
'
..
'
)
<
0
;
}
catch
(
err
)
{
return
true
;
}
}
function
__check_data_distribution
(
data
)
{
return
__check_no_backward
(
data
)
&&
__check_no_backward
(
data
.
distribution
)
&&
__check_no_backward
(
data
.
distribution
.
name
)
return
__check_no_backward
(
data
)
&&
__check_no_backward
(
data
.
distribution
)
&&
__check_no_backward
(
data
.
distribution
.
name
);
}
function
__check_data_package
(
data
)
{
return
__check_data_distribution
(
data
)
&&
__check_no_backward
(
data
.
package
)
&&
__check_no_backward
(
data
.
package
.
name
)
&&
__check_no_backward
(
data
.
package
.
version
)
return
__check_data_distribution
(
data
)
&&
__check_no_backward
(
data
.
package
)
&&
__check_no_backward
(
data
.
package
.
name
)
&&
__check_no_backward
(
data
.
package
.
version
);
}
function
__check_data_file
(
data
)
{
return
__check_data_package
(
data
)
&&
__check_no_backward
(
data
.
file
)
&&
__check_no_backward
(
data
.
file
.
name
)
return
__check_data_package
(
data
)
&&
__check_no_backward
(
data
.
file
)
&&
__check_no_backward
(
data
.
file
.
name
);
}
function
__get_distribution_pool_path
(
data
)
{
return
path
.
join
(
config
.
debomatic
.
path
,
data
.
distribution
.
name
,
'
pool
'
)
return
path
.
join
(
config
.
debomatic
.
path
,
data
.
distribution
.
name
,
'
pool
'
);
}
function
__get_package_path
(
data
)
{
return
path
.
join
(
__get_distribution_pool_path
(
data
),
data
.
package
.
name
+
'
_
'
+
data
.
package
.
version
)
return
path
.
join
(
__get_distribution_pool_path
(
data
),
data
.
package
.
name
+
'
_
'
+
data
.
package
.
version
);
}
function
__get_file_path
(
data
)
{
return
path
.
join
(
__get_package_path
(
data
),
data
.
package
.
name
+
'
_
'
+
data
.
package
.
version
+
'
.
'
+
data
.
file
.
name
)
return
path
.
join
(
__get_package_path
(
data
),
data
.
package
.
name
+
'
_
'
+
data
.
package
.
version
+
'
.
'
+
data
.
file
.
name
);
}
function
__get_files_list
(
dir
,
onlyDirectories
,
callback
)
{
fs
.
readdir
(
dir
,
function
(
err
,
files
)
{
result
=
[];
fs
.
readdir
(
dir
,
function
(
err
,
files
)
{
var
result
=
[];
if
(
err
)
{
__errors_handler
(
"
__get_files_list
"
,
err
)
__errors_handler
(
'
__get_files_list
'
,
err
);
return
;
}
files
.
forEach
(
function
(
f
)
{
files
.
forEach
(
function
(
f
)
{
try
{
complete_path
=
path
.
join
(
dir
,
f
);
stat
=
fs
.
statSync
(
complete_path
)
var
complete_path
=
path
.
join
(
dir
,
f
);
var
stat
=
fs
.
statSync
(
complete_path
);
if
(
onlyDirectories
)
{
if
(
stat
.
isDirectory
())
{
result
.
push
(
f
);
}
}
else
{
}
else
{
if
(
stat
.
isFile
())
{
result
.
push
(
f
);
}
}
}
catch
(
fs_error
)
{
__errors_handler
(
"
__get_files_list:forEach
"
,
fs_error
)
return
__errors_handler
(
'
__get_files_list:forEach
'
,
fs_error
);
return
;
}
});
callback
(
result
);
...
...
@@ -72,102 +75,103 @@ function __get_files_list(dir, onlyDirectories, callback) {
}
function
__watch_path_onsocket
(
event_name
,
socket
,
data
,
watch_path
,
updater
)
{
socket
.
get
(
"
watchers
"
,
function
(
err
,
socket_watchers
)
{
if
(
!
socket_watchers
)
{
socket
.
get
(
'
watchers
'
,
function
(
err
,
socket_watchers
)
{
if
(
!
socket_watchers
)
{
// init socket watchers
socket_watchers
=
{}
socket_watchers
=
{};
}
try
{
var
watcher
=
socket_watchers
[
event_name
]
var
watcher
=
socket_watchers
[
event_name
];
if
(
watcher
)
watcher
.
close
()
watcher
.
close
();
fs
.
stat
(
watch_path
,
function
(
err
,
stats
)
{
fs
.
stat
(
watch_path
,
function
(
err
,
stats
)
{
if
(
err
)
{
__errors_handler
(
"
__watch_path_onsocket:fs.stat
"
,
err
,
socket
)
return
__errors_handler
(
'
__watch_path_onsocket:fs.stat
'
,
err
,
socket
);
return
;
}
if
(
stats
.
isDirectory
())
{
watcher
=
fs
.
watch
(
watch_path
,
{
persistent
:
true
},
function
(
event
,
fileName
)
{
if
(
event
==
'
rename
'
)
updater
(
event_name
,
socket
,
data
)
})
}
else
if
(
stats
.
isFile
())
{
watcher
=
new
Tail
(
watch_path
)
watcher
.
on
(
'
line
'
,
function
(
new_content
,
tailInfo
)
{
data
.
file
.
new_content
=
new_content
+
'
\n
'
updater
(
event_name
,
socket
,
data
)
watcher
=
fs
.
watch
(
watch_path
,
{
persistent
:
true
},
function
(
event
,
fileName
)
{
if
(
event
==
'
rename
'
)
updater
(
event_name
,
socket
,
data
);
});
watcher
.
on
(
'
error
'
,
function
(
msg
)
{
}
else
if
(
stats
.
isFile
())
{
watcher
=
new
Tail
(
watch_path
);
watcher
.
on
(
'
line
'
,
function
(
new_content
,
tailInfo
)
{
data
.
file
.
new_content
=
new_content
+
'
\n
'
;
updater
(
event_name
,
socket
,
data
);
});
watcher
.
on
(
'
error
'
,
function
(
msg
)
{
socket
.
emit
(
config
.
events
.
error
,
msg
);
});
}
socket_watchers
[
event_name
]
=
watcher
socket
.
set
(
"
watchers
"
,
socket_watchers
)
})
socket_watchers
[
event_name
]
=
watcher
;
socket
.
set
(
'
watchers
'
,
socket_watchers
);
});
}
catch
(
err
)
{
__errors_handler
(
"
__watch_path_onsocket <-
"
+
arguments
.
callee
.
caller
.
name
,
err
,
socket
)
return
__errors_handler
(
'
__watch_path_onsocket <-
'
+
arguments
.
callee
.
caller
.
name
,
err
,
socket
);
return
;
}
})
});
}
function
__generic_handler_watcher
(
event_name
,
socket
,
data
,
watch_path
,
callback
)
{
callback
(
event_name
,
socket
,
data
)
__watch_path_onsocket
(
event_name
,
socket
,
data
,
watch_path
,
callback
)
callback
(
event_name
,
socket
,
data
);
__watch_path_onsocket
(
event_name
,
socket
,
data
,
watch_path
,
callback
);
}
function
__send_distributions
(
socket
)
{
__get_files_list
(
config
.
debomatic
.
path
,
true
,
function
(
directories
)
{
var
distributions
=
[]
directories
.
forEach
(
function
(
dir
)
{
var
data
=
{}
data
.
distribution
=
{}
data
.
distribution
.
name
=
dir
var
pool_path
=
__get_distribution_pool_path
(
data
)
__get_files_list
(
config
.
debomatic
.
path
,
true
,
function
(
directories
)
{
var
distributions
=
[];
directories
.
forEach
(
function
(
dir
)
{
var
data
=
{};
data
.
distribution
=
{};
data
.
distribution
.
name
=
dir
;
var
pool_path
=
__get_distribution_pool_path
(
data
);
if
(
fs
.
existsSync
(
pool_path
))
{
distributions
.
push
(
dir
)
distributions
.
push
(
dir
);
}
})
});
socket
.
emit
(
config
.
events
.
broadcast
.
distributions
,
distributions
);
})
});
}
utils
=
{
check_data_distribution
:
function
(
data
)
{
return
__check_data_distribution
(
data
)
var
utils
=
{
check_data_distribution
:
function
(
data
)
{
return
__check_data_distribution
(
data
);
},
check_data_package
:
function
(
data
)
{
return
__check_data_package
(
data
)
check_data_package
:
function
(
data
)
{
return
__check_data_package
(
data
);
},
check_data_file
:
function
(
data
)
{
return
__check_data_file
(
data
)
check_data_file
:
function
(
data
)
{
return
__check_data_file
(
data
);
},
get_distribution_pool_path
:
function
(
data
)
{
return
__get_distribution_pool_path
(
data
)
get_distribution_pool_path
:
function
(
data
)
{
return
__get_distribution_pool_path
(
data
);
},
get_package_path
:
function
(
data
)
{
return
__get_package_path
(
data
)
get_package_path
:
function
(
data
)
{
return
__get_package_path
(
data
);
},
get_file_path
:
function
(
data
)
{
return
__get_file_path
(
data
)
get_file_path
:
function
(
data
)
{
return
__get_file_path
(
data
);
},
get_files_list
:
function
(
dir
,
onlyDirectories
,
callback
)
{
return
__get_files_list
(
dir
,
onlyDirectories
,
callback
)
get_files_list
:
function
(
dir
,
onlyDirectories
,
callback
)
{
return
__get_files_list
(
dir
,
onlyDirectories
,
callback
);
},
watch_path_onsocket
:
function
(
event_name
,
socket
,
data
,
watch_path
,
updater
)
{
return
__watch_path_onsocket
(
event_name
,
socket
,
data
,
watch_path
,
updater
)
watch_path_onsocket
:
function
(
event_name
,
socket
,
data
,
watch_path
,
updater
)
{
return
__watch_path_onsocket
(
event_name
,
socket
,
data
,
watch_path
,
updater
);
},
generic_handler_watcher
:
function
(
event_name
,
socket
,
data
,
watch_path
,
callback
)
{
generic_handler_watcher
:
function
(
event_name
,
socket
,
data
,
watch_path
,
callback
)
{
return
__generic_handler_watcher
(
event_name
,
socket
,
data
,
watch_path
,
callback
);
},
send_distributions
:
function
(
socket
)
{
return
__send_distributions
(
socket
)
send_distributions
:
function
(
socket
)
{
return
__send_distributions
(
socket
);
},
errors_handler
:
function
(
from
,
error
,
socket
)
{
return
__errors_handler
(
from
,
error
,
socket
)
errors_handler
:
function
(
from
,
error
,
socket
)
{
return
__errors_handler
(
from
,
error
,
socket
);
}
}
}
;
module
.
exports
=
utils
module
.
exports
=
utils
;
debomatic-webui/public/javascripts/debug.js
View file @
f7a4f04a
"
use strict
"
;
/*
General information about debugging:
...
...
@@ -10,17 +11,17 @@
3 - socket emit data
4 - socket received data
*/
var
debug
=
function
()
{
var
debug
=
function
()
{
if
(
arguments
.
length
<
2
)
{
return
return
;
}
var
level
=
arguments
[
0
]
arguments
[
0
]
=
"
debug [
"
+
level
+
"
]:
"
var
level
=
arguments
[
0
];
arguments
[
0
]
=
"
debug [
"
+
level
+
"
]:
"
;
if
(
level
<=
config
.
preferences
.
debug
)
{
if
(
console
.
debug
)
console
.
debug
.
apply
(
console
,
arguments
)
console
.
debug
.
apply
(
console
,
arguments
);
else
console
.
log
.
apply
(
console
,
arguments
)
console
.
log
.
apply
(
console
,
arguments
);
}
}
...
...
@@ -30,11 +31,11 @@ var debug = function() {
usage: debug_socket("emit"|"received", event_name, data)
*/
var
debug_socket
=
function
()
{
var
debug_socket
=
function
()
{
if
(
arguments
.
length
!=
3
)
return
return
;
var
level
=
3
;
if
(
arguments
[
0
]
==
"
received
"
)
level
=
4
debug
(
level
,
"
socket
"
,
arguments
[
0
],
"
event:
"
,
arguments
[
1
],
"
data:
"
,
arguments
[
2
])
level
=
4
;
debug
(
level
,
"
socket
"
,
arguments
[
0
],
"
event:
"
,
arguments
[
1
],
"
data:
"
,
arguments
[
2
]);
}
debomatic-webui/public/javascripts/main.js
View file @
f7a4f04a
// main client javascript
'
use strict
'
;
var
preferences
=
new
Preferences
()
var
preferences
=
new
Preferences
()
;
var
page_generic
=
new
Page_Generic
()
var
page_generic
=
new
Page_Generic
()
;
if
(
window
.
location
.
pathname
==
config
.
paths
.
preferences
)
{
preferences
.
initPage
()
preferences
.
initPage
();
}
if
(
window
.
location
.
pathname
==
'
/
'
)
{
// convert email addresses in the right format
var
emails
=
$
(
"
.email
"
)
$
.
each
(
emails
,
function
()
{
var
subject
=
''
var
emails
=
$
(
'
.email
'
);
$
.
each
(
emails
,
function
()
{
var
subject
=
''
;
if
(
$
(
this
).
attr
(
'
subject
'
))
{
subject
=
'
?subject=
'
+
$
(
this
).
attr
(
'
subject
'
)
subject
=
'
?subject=
'
+
$
(
this
).
attr
(
'
subject
'
);
}
var
real_email
=
$
(
this
).
attr
(
'
address
'
).
replace
(
'
AT
'
,
'
@
'
).
replace
(
'
DOT
'
,
'
.
'
).
replace
(
/ /g
,
''
)
var
label
=
real_email
if
(
config
.
debomatic
.
admin
.
name
&&
config
.
debomatic
.
admin
.
name
!=
'
Your Name
'
)
label
=
config
.
debomatic
.
admin
.
name
real_email
=
'
<a href="mailto:
'
+
real_email
+
subject
+
'
">
'
+
label
+
'
</a>
'
$
(
this
).
html
(
real_email
)
var
real_email
=
$
(
this
).
attr
(
'
address
'
).
replace
(
'
AT
'
,
'
@
'
).
replace
(
'
DOT
'
,
'
.
'
).
replace
(
/ /g
,
''
);
var
label
=
real_email
;
if
(
config
.
debomatic
.
admin
.
name
&&
config
.
debomatic
.
admin
.
name
!=
'
Your Name
'
);
label
=
config
.
debomatic
.
admin
.
name
;
real_email
=
'
<a href="mailto:
'
+
real_email
+
subject
+
'
">
'
+
label
+
'
</a>
'
;
$
(
this
).
html
(
real_email
);
})
}
var
socket
=
io
.
connect
(
'
/
'
);
page_generic
.
start
(
socket
)
page_generic
.
start
(
socket
)
;
if
(
window
.
location
.
pathname
==
config
.
paths
.
distribution
)
{
new
Page_Distrubion
(
socket
).
start
()
new
Page_Distrubion
(
socket
).
start
();
}
debomatic-webui/public/javascripts/page_distribution.js
View file @
f7a4f04a
'
use strict
'
;
// function to get all files in on click
// event comes from HTML
function
download_all
(
div_id
)
{
frame_id
=
'
downloadAllFrame
'
if
(
$
(
"
#
"
+
frame_id
).
length
>
0
)
frame
=
$
(
$
(
"
#
"
+
frame_id
)[
0
])
function
download_all
(
div_id
)
{
var
frame_id
=
'
downloadAllFrame
'
;
var
frame
=
null
;
if
(
$
(
'
#
'
+
frame_id
).
length
>
0
)
frame
=
$
(
$
(
'
#
'
+
frame_id
)[
0
]);
else
{
frame
=
$
(
'
<iframe></iframe>
'
)
frame
.
hide
()
frame
.
attr
(
'
id
'
,
frame_id
)
$
(
'
body
'
).
append
(
frame
)
}
files
=
$
(
div_id
).
find
(
'
ul li a
'
)
$
.
each
(
files
,
function
(
index
,
item
)
{
setTimeout
(
function
()
{
frame
.
attr
(
'
src
'
,
item
.
href
)
},
index
*
1000
)
})
frame
=
$
(
'
<iframe></iframe>
'
);
frame
.
hide
();
frame
.
attr
(
'
id
'
,
frame_id
);
$
(
'
body
'
).
append
(
frame
);
}
var
files
=
$
(
div_id
).
find
(
'
ul li a
'
);
$
.
each
(
files
,
function
(
index
,
item
)
{
setTimeout
(
function
()
{
frame
.
attr
(
'
src
'
,
item
.
href
);
},
index
*
1000
);
});
}
function
Page_Distrubion
(
socket
)
{
function
Page_Distrubion
(
socket
)
{
/*
...
...
@@ -60,549 +62,533 @@ function Page_Distrubion(socket)
*/
var
socket
=
socket
var
_e
=
config
.
events
.
client
var
view
=
Utils
.
from_hash_to_view
()
var
sidebarOffset
=
0
var
new_lines
=
[]
var
_e
=
config
.
events
.
client
;
var
view
=
Utils
.
from_hash_to_view
();
var
sidebarOffset
=
0
;
var
new_lines
=
[];
function
__check_hash_makes_sense
()
{
if
(
window
.
location
.
hash
.
indexOf
(
'
..
'
)
>=
0
)
{
error
.
set
(
"
Detected '..' God Is Watching You !
"
)
return
false
error
.
set
(
'
Detected ".." God Is Watching You !
'
);
return
false
;
}
if
(
!
window
.
location
.
hash
)
{
welcome
.
show
()
return
false
if
(
!
window
.
location
.
hash
)
{
welcome
.
show
();
return
false
;
}
var
info
=
window
.
location
.
hash
.
split
(
'
/
'
)
var
info
=
window
.
location
.
hash
.
split
(
'
/
'
);
if
(
info
.
length
==
2
)
window
.
location
.
hash
=
info
[
0
]
return
true
window
.
location
.
hash
=
info
[
0
];
return
true
;
}
var
title
=
{
set
:
function
(
label
)
{
set
:
function
(
label
)
{
if
(
label
)
{
$
(
'
#title
'
).
html
(
label
)
page_generic
.
set_window_title
(
label
)
return
$
(
'
#title
'
).
html
(
label
);
page_generic
.
set_window_title
(
label
);
return
;
}
var
label
=
''
var
window_title
=
null
label
=
''
;
var
window_title
=
null
;
if
(
Utils
.
check_view_file
(
view
))
{
var
complete_name
=
view
.
package
.
orig_name
+
'
.
'
+
view
.
file
.
name
window_title
=
complete_name
if
(
!
view
.
file
.
path
)
view
.
file
.
path
=
config
.
paths
.
debomatic
+
'
/
'
+
view
.
distribution
.
name
+
'
/pool/
'
+
view
.
package
.
orig_name
+
'
/
'
+
complete_name
label
=
complete_name
+
'
\
<a class="btn btn-link btn-lg" title="Download" href="
'
+
view
.
file
.
path
+
'
">
\
<span class="glyphicon glyphicon-download-alt"></span>
\
</a>
'
}
else
if
(
Utils
.
check_view_package
(
view
))
label
=
view
.
package
.
orig_name
var
complete_name
=
view
.
package
.
orig_name
+
'
.
'
+
view
.
file
.
name
;
window_title
=
complete_name
;
if
(
!
view
.
file
.
path
);
view
.
file
.
path
=
config
.
paths
.
debomatic
+
'
/
'
+
view
.
distribution
.
name
+
'
/pool/
'
+
view
.
package
.
orig_name
+
'
/
'
+
complete_name
;
label
=
complete_name
+
'
<a class="btn btn-link btn-lg" title="Download" href="
'
+
view
.
file
.
path
+
'
">
'
+
'
<span class="glyphicon glyphicon-download-alt"></span></a>
'
;
}
else
if
(
Utils
.
check_view_package
(
view
))
label
=
view
.
package
.
orig_name
;
else
if
(
Utils
.
check_view_distribution
(
view
))
label
=
view
.
distribution
.
name
$
(
'
#title
'
).
html
(
label
)
label
=
view
.
distribution
.
name
;
$
(
'
#title
'
).
html
(
label
);
if
(
window_title
)
label
=
window_title
page_generic
.
set_window_title
(
label
)
label
=
window_title
;
page_generic
.
set_window_title
(
label
);
},
clean
:
function
()
{
$
(
'
#title
'
).
html
(
''
)
page_generic
.
set_window_title
()
}
clean
:
function
()
{
$
(
'
#title
'
).
html
(
''
);
page_generic
.
set_window_title
();
}
};
var
packages
=
{
set
:
function
(
socket_data
)
{
packages
.
clean
()
var
tmp
=
Utils
.
clone
(
socket_data
)
tmp
.
file
=
null
view
.
packages
=
{}
packages
.
clean
();
var
tmp
=
Utils
.
clone
(
socket_data
);
tmp
.
file
=
null
;
view
.
packages
=
{};
if
(
socket_data
.
distribution
.
packages
&&
socket_data
.
distribution
.
packages
.
length
>
0
)
{
socket_data
.
distribution
.
packages
.
forEach
(
function
(
p
)
{
tmp
.
package
=
p
socket_data
.
distribution
.
packages
.
forEach
(
function
(
p
)
{
tmp
.
package
=
p
;
// get datestamp if package is clicked
$
(
'
#packages ul
'
).
append
(
'
<li id="package-
'
+
p
.
orig_name
+
'
"><a href="
'
+
Utils
.
from_view_to_hash
(
tmp
)
+
'
/datestamp">
'
+
p
.
name
+
'
<span>
'
+
p
.
version
+
'
</span></a></li>
'
)
view
.
packages
[
p
.
orig_name
]
=
Utils
.
clone
(
p
)
})
packages
.
select
()
}
else
{
$
(
'
#packages ul
'
).
append
(
'
<li class="text-muted">No packages yet</li>
'
)
$
(
'
#packages ul
'
).
append
(
'
<li id="package-
'
+
p
.
orig_name
+
'
"><a href="
'
+
Utils
.
from_view_to_hash
(
tmp
)
+
'
/datestamp">
'
+
p
.
name
+
'
<span>
'
+
p
.
version
+
'
</span></a></li>
'
);
view
.
packages
[
p
.
orig_name
]
=
Utils
.
clone
(
p
);
});
packages
.
select
();
}
else
{
$
(
'
#packages ul
'
).
append
(
'
<li class="text-muted">No packages yet</li>
'
);
}
packages
.
show
()
sticky
.
updateOffset
()
packages
.
show
();
sticky
.
updateOffset
();
},
clean
:
function
()
{
$
(
'
#packages ul
'
).
html
(
''
)
$
(
'
#packages ul
'
).
html
(
''
);
},
get
:
function
()
{
if
(
Utils
.
check_view_distribution
(
view
))
{
var
query_data
=
{}
query_data
.
distribution
=
view
.
distribution
debug_socket
(
"
emit
"
,
_e
.
distribution_packages
.
get
,
query_data
)
socket
.
emit
(
_e
.
distribution_packages
.
get
,
query_data
)
var
query_data
=
{};
query_data
.
distribution
=
view
.
distribution
;
debug_socket
(
'
emit
'
,
_e
.
distribution_packages
.
get
,
query_data
);
socket
.
emit
(
_e
.
distribution_packages
.
get
,
query_data
);
}
},
select
:
function
()
{
packages
.
unselect
()
select
:
function
()
{
packages
.
unselect
();
if
(
Utils
.
check_view_package
(
view
))
{
$
(
"
#packages li[id='package-
"
+
view
.
package
.
orig_name
+
"
']
"
).
addClass
(
'
active
'
)
$
(
'
#packages li[id="package-
'
+
view
.
package
.
orig_name
+
'
"]
'
).
addClass
(
'
active
'
);
}
},
unselect
:
function
()
{
$
(
'
#packages li
'
).
removeClass
(
'
active
'
)
unselect
:
function
()
{
$
(
'
#packages li
'
).
removeClass
(
'
active
'
);
},
set_status
:
function
(
status_data
)
{
// set status in view
if
(
view
.
distribution
.
name
==
status_data
.
distribution
&&
view
.
packages
[
status_data
.
package
]
)
{
view
.
packages
[
status_data
.
package
].
status
=
status_data
.
status
if
(
view
.
distribution
.
name
==
status_data
.
distribution
&&
view
.
packages
[
status_data
.
package
])
{
view
.
packages
[
status_data
.
package
].
status
=
status_data
.
status
;
if
(
status_data
.
hasOwnProperty
(
'
success
'
))
view
.
packages
[
status_data
.
package
].
success
=
status_data
.
success
view
.
packages
[
status_data
.
package
].
success
=
status_data
.
success
;
else
delete
(
view
.
packages
[
status_data
.
package
].
success
)
delete
(
view
.
packages
[
status_data
.
package
].
success
);
}
// and in html
var
p_html
=
$
(
"
#packages li[id='package-
"
+
status_data
.
package
+
"
'] a
"
)
p_html
.
find
(
'
span.icon
'
).
remove
()
p_html
.
append
(
Utils
.
get_status_icon_html
(
status_data
))
if
(
Utils
.
check_view_package
(
view
)
&&
view
.
package
.
orig_name
==
status_data
.
package
&&
view
.
distribution
.
name
==
status_data
.
distribution
)
{
var
p_html
=
$
(
'
#packages li[id="package-
'
+
status_data
.
package
+
'
"] a
'
);
p_html
.
find
(
'
span.icon
'
).
remove
();
p_html
.
append
(
Utils
.
get_status_icon_html
(
status_data
));
if
(
Utils
.
check_view_package
(
view
)
&&
view
.
package
.
orig_name
==
status_data
.
package
&&
view
.
distribution
.
name
==
status_data
.
distribution
)
{
// in case user is watching this package, update also view.package
view
.
package
=
Utils
.
clone
(
view
.
packages
[
status_data
.
package
])
view
.
package
=
Utils
.
clone
(
view
.
packages
[
status_data
.
package
]);
}
},
show
:
function
()
{
$
(
"
#packages
"
).
show
()
show
:
function
()
{
$
(
'
#packages
'
).
show
();
},
hide
:
function
()
{
$
(
"
#packages
"
).
hide
()
}
hide
:
function
()
{
$
(
'
#packages
'
).
hide
();
}
};
var
files
=
{
set
:
function
(
socket_data
)
{
files
.
clean
()
var
tmp
=
Utils
.
clone
(
socket_data
)
files
.
clean
();
var
tmp
=
Utils
.
clone
(
socket_data
);
if
(
socket_data
.
package
.
files
&&
socket_data
.
package
.
files
.
length
>
0
)
{
// update view
view
.
package
.
files
=
Utils
.
clone
(
socket_data
.
package
.
files
)
view
.
package
.
files
=
Utils
.
clone
(
socket_data
.
package
.
files
);
// update html
socket_data
.
package
.
files
.
forEach
(
function
(
f
){
tmp
.
file
=
f
var
html_file
=
$
(
'
<li id="file-
'
+
f
.
orig_name
+
'
"><a title="
'
+
f
.
orig_name
+
'
" href="
'
+
Utils
.
from_view_to_hash
(
tmp
)
+
'
">
'
+
f
.
name
+
'
</a></li>
'
)
html_file
.
on
(
"
click
"
,
function
(){
files
.
select
(
this
)
})
$
(
'
#logs ul
'
).
append
(
html_file
)
})
$
(
'
#logs
'
).
show
()
files
.
select
()
socket_data
.
package
.
files
.
forEach
(
function
(
f
)
{
tmp
.
file
=
f
;
var
html_file
=
$
(
'
<li id="file-
'
+
f
.
orig_name
+
'
"><a title="
'
+
f
.
orig_name
+
'
" href="
'
+
Utils
.
from_view_to_hash
(
tmp
)
+
'
">
'
+
f
.
name
+
'
</a></li>
'
);
html_file
.
on
(
'
click
'
,
function
()
{
files
.
select
(
this
);
});
$
(
'
#logs ul
'
).
append
(
html_file
);
});
$
(
'
#logs
'
).
show
();
files
.
select
();
}
if
(
socket_data
.
package
.
debs
&&
socket_data
.
package
.
debs
.
length
>
0
)
{
// update view
view
.
package
.
debs
=
Utils
.
clone
(
socket_data
.
package
.
debs
)
view
.
package
.
debs
=
Utils
.
clone
(
socket_data
.
package
.
debs
);
// update.html
socket_data
.
package
.
debs
.
forEach
(
function
(
f
){
$
(
'
#debs ul
'
).
append
(
'
<li><a title="
'
+
f
.
orig_name
+
'
" href="
'
+
f
.
path
+
'
">
'
+
f
.
name
+
'
</a> <span>.
'
+
f
.
extension
+
'
</span></li>
'
)
})
$
(
'
#debs
'
).
show
()
socket_data
.
package
.
debs
.
forEach
(
function
(
f
)
{
$
(
'
#debs ul
'
).
append
(
'
<li><a title="
'
+
f
.
orig_name
+
'
" href="
'
+
f
.
path
+
'
">
'
+
f
.
name
+
'
</a> <span>.
'
+
f
.
extension
+
'
</span></li>
'
);
});
$
(
'
#debs
'
).
show
();
}
if
(
socket_data
.
package
.
sources
&&
socket_data
.
package
.
sources
.
length
>
0
)
{
// update view
view
.
package
.
sources
=
Utils
.
clone
(
socket_data
.
package
.
sources
)
view
.
package
.
sources
=
Utils
.
clone
(
socket_data
.
package
.
sources
);
// update html
socket_data
.
package
.
sources
.
forEach
(
function
(
f
)
{
$
(
'
#sources ul
'
).
append
(
'
<li><a title="
'
+
f
.
orig_name
+
'
" href="
'
+
f
.
path
+
'
">
'
+
f
.
name
+
'
</a></li>
'
)
socket_data
.
package
.
sources
.
forEach
(
function
(
f
)
{
$
(
'
#sources ul
'
).
append
(
'
<li><a title="
'
+
f
.
orig_name
+
'
" href="
'
+
f
.
path
+
'
">
'
+
f
.
name
+
'
</a></li>
'
);
})
$
(
'
#sources
'
).
show
()
$
(
'
#sources
'
).
show
();
}
files
.
show
()
sticky
.
updateOffset
()
files
.
show
();
sticky
.
updateOffset
();
},
clean
:
function
()
{
clean
:
function
()
{
$
(
'
#logs ul
'
).
html
(
''
);
$
(
'
#logs
'
).
hide
()
$
(
'
#logs
'
).
hide
();
$
(
'
#debs ul
'
).
html
(
''
);
$
(
'
#debs
'
).
hide
();
$
(
'
#sources ul
'
).
html
(
''
)
$
(
'
#sources
'
).
hide
()
files
.
hide
()
$
(
'
#sources ul
'
).
html
(
''
);
$
(
'
#sources
'
).
hide
();
files
.
hide
();
},
get
:
function
()
{
if
(
Utils
.
check_view_package
(
view
))
{
var
query_data
=
{}
query_data
.
distribution
=
view
.
distribution
query_data
.
package
=
view
.
package
debug_socket
(
"
emit
"
,
_e
.
package_files_list
.
get
,
query_data
)
socket
.
emit
(
_e
.
package_files_list
.
get
,
query_data
)
var
query_data
=
{};
query_data
.
distribution
=
view
.
distribution
;
query_data
.
package
=
view
.
package
;
debug_socket
(
'
emit
'
,
_e
.
package_files_list
.
get
,
query_data
);
socket
.
emit
(
_e
.
package_files_list
.
get
,
query_data
);
}
},
select
:
function
()
{
files
.
show
()
files
.
unselect
()
select
:
function
()
{
files
.
show
();
files
.
unselect
();
if
(
Utils
.
check_view_file
(
view
))
{
$
(
"
#logs li[id='file-
"
+
view
.
file
.
orig_name
+
"
']
"
).
addClass
(
'
active
'
)
$
(
'
#logs li[id="file-
'
+
view
.
file
.
orig_name
+
'
"]
'
).
addClass
(
'
active
'
);
}
},
unselect
:
function
()
{
unselect
:
function
()
{
$
(
'
#logs li
'
).
removeClass
(
'
active
'
);
},
hide
:
function
()
{
$
(
'
#files
'
).
hide
()
hide
:
function
()
{
$
(
'
#files
'
).
hide
();
},
show
:
function
()
{
$
(
'
#files
'
).
show
()
show
:
function
()
{
$
(
'
#files
'
).
show
();
},
}
};
var
file
=
{
set
:
function
(
socket_data
)
{
view
.
file
=
Utils
.
clone
(
socket_data
.
file
)
$
(
"
#file pre
"
).
html
(
socket_data
.
file
.
content
)
$
(
"
#file
"
).
show
()
set
:
function
(
socket_data
)
{
view
.
file
=
Utils
.
clone
(
socket_data
.
file
);
$
(
'
#file pre
'
).
html
(
socket_data
.
file
.
content
);
$
(
'
#file
'
).
show
();
},
clean
:
function
()
{
$
(
'
#file pre
'
).
html
(
''
)
$
(
'
#file
'
).
hide
()
clean
:
function
()
{
$
(
'
#file pre
'
).
html
(
''
);
$
(
'
#file
'
).
hide
();
},
append
:
function
(
new_content
)
{
var
content
=
$
(
"
#file pre
"
)
content
.
append
(
new_content
)
append
:
function
(
new_content
)
{
var
content
=
$
(
'
#file pre
'
);
content
.
append
(
new_content
);
if
(
config
.
preferences
.
autoscroll
)
{
// scroll down if file is covering footer
var
file_height
=
$
(
"
#fileOffset
"
).
offset
().
top
var
footerOffset
=
$
(
"
footer
"
).
offset
().
top
var
file_height
=
$
(
'
#fileOffset
'
).
offset
().
top
;
var
footerOffset
=
$
(
'
footer
'
).
offset
().
top
;
if
(
file_height
>
footerOffset
)
{
debug
(
2
,
'
scoll down on new content
'
)
$
(
'
html,body
'
).
animate
({
scrollTop
:
file_height
},
0
);
debug
(
2
,
'
scoll down on new content
'
);
$
(
'
html,body
'
).
animate
({
scrollTop
:
file_height
},
0
);
}
}
},
get
:
function
()
{
get
:
function
()
{
if
(
Utils
.
check_view_file
(
view
))
{
var
query_data
=
{}
query_data
.
distribution
=
view
.
distribution
query_data
.
package
=
view
.
package
query_data
.
file
=
view
.
file
query_data
.
file
.
content
=
null
var
query_data
=
{};
query_data
.
distribution
=
view
.
distribution
;
query_data
.
package
=
view
.
package
;
query_data
.
file
=
view
.
file
;
query_data
.
file
.
content
=
null
;
// get a feedback to user while downloading file
$
(
"
#file pre
"
).
html
(
"
Downloading file, please wait a while ...
"
)
$
(
"
#file
"
).
show
()
debug_socket
(
"
emit
"
,
_e
.
file
.
get
,
query_data
)
socket
.
emit
(
_e
.
file
.
get
,
query_data
)
}
$
(
'
#file pre
'
).
html
(
'
Downloading file, please wait a while ...
'
);
$
(
'
#file
'
).
show
();
debug_socket
(
'
emit
'
,
_e
.
file
.
get
,
query_data
);
socket
.
emit
(
_e
.
file
.
get
,
query_data
);
}
}
};
var
breadcrumb
=
{
update
:
function
(
label
)
{
update
:
function
(
label
)
{
if
(
label
)
{
$
(
'
.breadcrumb
'
).
html
(
'
<li class="active">
'
+
label
+
'
</li>
'
)
return
}
hash
=
window
.
location
.
hash
.
replace
(
'
#
'
,
''
)
var
new_html
=
''
var
new_hash
=
'
#
'
var
info
=
hash
.
split
(
'
/
'
)
for
(
var
i
=
0
;
i
<
info
.
length
;
i
++
)
{
new_hash
+=
info
[
i
]
$
(
'
.breadcrumb
'
).
html
(
'
<li class="active">
'
+
label
+
'
</li>
'
);
return
;
}
var
hash
=
window
.
location
.
hash
.
replace
(
'
#
'
,
''
);
var
new_html
=
''
;
var
new_hash
=
'
#
'
;
var
info
=
hash
.
split
(
'
/
'
);
for
(
var
i
=
0
;
i
<
info
.
length
;
i
++
)
{
new_hash
+=
info
[
i
];
if
(
i
==
(
info
.
length
-
1
))
new_html
+=
'
<li class="active">
'
+
info
[
i
]
+
'
</li>
'
new_html
+=
'
<li class="active">
'
+
info
[
i
]
+
'
</li>
'
;
else
new_html
+=
'
<li><a href="
'
+
new_hash
+
'
">
'
+
info
[
i
]
+
'
</a>
'
new_hash
+=
'
/
'
}
$
(
'
.breadcrumb
'
).
html
(
new_html
)
new_html
+=
'
<li><a href="
'
+
new_hash
+
'
">
'
+
info
[
i
]
+
'
</a>
'
;
new_hash
+=
'
/
'
;
}
$
(
'
.breadcrumb
'
).
html
(
new_html
);
}
};
// sticky sidebar
var
sticky
=
{
init
:
function
()
{
if
(
sidebarOffset
==
0
)
return
init
:
function
()
{
if
(
sidebarOffset
=
==
0
)
return
;
if
(
$
(
window
).
scrollTop
()
>
sidebarOffset
)
{
sticky
.
show
()
sticky
.
show
();
}
else
{
sticky
.
hide
()
sticky
.
updateOffset
()
sticky
.
hide
();
sticky
.
updateOffset
();
}
},
start
:
function
()
{
$
(
window
).
scroll
(
sticky
.
init
)
start
:
function
()
{
$
(
window
).
scroll
(
sticky
.
init
);
},
stop
:
function
()
{
$
(
window
).
off
(
"
scroll
"
)
stop
:
function
()
{
$
(
window
).
off
(
'
scroll
'
);
},
reset
:
function
()
{
sticky
.
stop
()
sticky
.
update
()
sticky
.
init
()
sticky
.
start
()
reset
:
function
()
{
sticky
.
stop
();
sticky
.
update
();
sticky
.
init
();
sticky
.
start
();
},
show
:
function
()
{
show
:
function
()
{
if
(
config
.
preferences
.
sidebar
)
{
$
(
"
#sticky
"
).
addClass
(
'
fixed
'
)
$
(
'
#sticky
'
).
addClass
(
'
fixed
'
);
}
debug
(
2
,
"
showing sticky
"
)
$
(
"
#sticky-package
"
).
fadeIn
()
debug
(
2
,
'
showing sticky
'
);
$
(
'
#sticky-package
'
).
fadeIn
();
},
hide
:
function
()
{
$
(
"
#sticky
"
).
removeClass
(
'
fixed
'
)
$
(
"
#sticky-package
"
).
fadeOut
(
150
)
hide
:
function
()
{
$
(
'
#sticky
'
).
removeClass
(
'
fixed
'
);
$
(
'
#sticky-package
'
).
fadeOut
(
150
);
},
update
:
function
()
{
sticky
.
updateOffset
()
update
:
function
()
{
sticky
.
updateOffset
();
if
(
Utils
.
check_view_distribution
(
view
))
$
(
"
#sticky-package .distribution
"
).
html
(
view
.
distribution
.
name
)
$
(
'
#sticky-package .distribution
'
).
html
(
view
.
distribution
.
name
);
if
(
Utils
.
check_view_package
(
view
))
{
$
(
"
#sticky-package .name
"
).
html
(
view
.
package
.
name
)
$
(
"
#sticky-package .version
"
).
html
(
view
.
package
.
version
)
sticky
.
set_status
()
$
(
'
#sticky-package .name
'
).
html
(
view
.
package
.
name
);
$
(
'
#sticky-package .version
'
).
html
(
view
.
package
.
version
);
sticky
.
set_status
();
}
},
updateOffset
:
function
()
{
var
sidebar
=
$
(
"
#files
"
)
sidebarOffset
=
sidebar
.
offset
().
top
updateOffset
:
function
()
{
var
sidebar
=
$
(
'
#files
'
);
sidebarOffset
=
sidebar
.
offset
().
top
;
},
set_status
:
function
(
status_data
)
{
if
(
!
status_data
)
{
status_data
=
{}
status_data
.
distribution
=
view
.
distribution
.
name
status_data
.
package
=
view
.
package
.
orig_name
status_data
.
status
=
view
.
package
.
status
set_status
:
function
(
status_data
)
{
if
(
!
status_data
)
{
status_data
=
{};
status_data
.
distribution
=
view
.
distribution
.
name
;
status_data
.
package
=
view
.
package
.
orig_name
;
status_data
.
status
=
view
.
package
.
status
;
if
(
view
.
package
.
hasOwnProperty
(
'
success
'
))
status_data
.
success
=
view
.
package
.
success
status_data
.
success
=
view
.
package
.
success
;
}
if
(
Utils
.
check_view_package
(
view
)
&&
status_data
.
distribution
==
view
.
distribution
.
name
&&
status_data
.
package
==
view
.
package
.
orig_name
)
{
if
(
Utils
.
check_view_package
(
view
)
&&
status_data
.
distribution
==
view
.
distribution
.
name
&&
status_data
.
package
==
view
.
package
.
orig_name
)
{
// update html
var
info
=
Utils
.
get_status_icon_and_class
(
status_data
)
var
panel
=
$
(
"
#sticky-package-content
"
)
panel
.
removeClass
()
panel
.
addClass
(
'
panel panel-
'
+
info
.
className
)
var
div
=
$
(
"
#sticky-package .status
"
)
div
.
find
(
'
span.icon
'
).
remove
()
div
.
append
(
Utils
.
get_status_icon_html
(
status_data
))
}
var
info
=
Utils
.
get_status_icon_and_class
(
status_data
);
var
panel
=
$
(
'
#sticky-package-content
'
);
panel
.
removeClass
();
panel
.
addClass
(
'
panel panel-
'
+
info
.
className
);
var
div
=
$
(
'
#sticky-package .status
'
);
div
.
find
(
'
span.icon
'
).
remove
();
div
.
append
(
Utils
.
get_status_icon_html
(
status_data
));
}
}
};
var
error
=
{
set
:
function
(
socket_error
)
{
$
(
"
#error span
"
).
html
(
socket_error
)
error
.
view
()
set
:
function
(
socket_error
)
{
$
(
'
#error span
'
).
html
(
socket_error
);
error
.
view
();
},
clean
:
function
()
{
$
(
"
#error
"
).
hide
()
$
(
"
#error span
"
).
html
(
''
)
clean
:
function
()
{
$
(
'
#error
'
).
hide
();
$
(
'
#error span
'
).
html
(
''
);
},
view
:
function
()
{
$
(
"
#error
"
).
fadeIn
(
100
)
title
.
set
(
"
Something is wrong ...
"
)
breadcrumb
.
update
(
'
Something is wrong ...
'
)
file
.
clean
()
files
.
hide
()
unselect
()
view
:
function
()
{
$
(
'
#error
'
).
fadeIn
(
100
);
title
.
set
(
'
Something is wrong ...
'
);
breadcrumb
.
update
(
'
Something is wrong ...
'
);
file
.
clean
();
files
.
hide
();
unselect
();
},
}
};
var
welcome
=
{
set
:
function
(
distributions
)
{
welcome
.
clean
()
if
(
distributions
.
length
<
1
)
{
$
(
'
#welcome
'
).
append
(
'
<p class="lead text-muted">There is no distribution at the moment</p>
'
)
}
else
{
distributions
.
forEach
(
function
(
name
){
$
(
'
#welcome
'
).
append
(
'
<a class="btn btn-lg btn-primary" href="
'
+
config
.
paths
.
distribution
+
'
#
'
+
name
+
'
">
'
+
name
+
'
</a>
'
);
set
:
function
(
distributions
)
{
welcome
.
clean
();
if
(
distributions
.
length
<
1
)
{
$
(
'
#welcome
'
).
append
(
'
<p class="lead text-muted">There is no distribution at the moment</p>
'
);
}
else
{
distributions
.
forEach
(
function
(
name
)
{
$
(
'
#welcome
'
).
append
(
'
<a class="btn btn-lg btn-primary" href="
'
+
config
.
paths
.
distribution
+
'
#
'
+
name
+
'
">
'
+
name
+
'
</a>
'
);
});
}
},
show
:
function
()
{
title
.
set
(
"
Please select a distribution
"
)
breadcrumb
.
update
(
"
Select a distribution
"
)
packages
.
hide
()
file
.
clean
()
files
.
hide
()
unselect
()
$
(
"
#welcome
"
).
show
()
show
:
function
()
{
title
.
set
(
'
Please select a distribution
'
);
breadcrumb
.
update
(
'
Select a distribution
'
);
packages
.
hide
();
file
.
clean
();
files
.
hide
();
unselect
();
$
(
'
#welcome
'
).
show
();
},
clean
:
function
()
{
$
(
"
#welcome
"
).
html
(
''
)
clean
:
function
()
{
$
(
'
#welcome
'
).
html
(
''
);
},
hide
:
function
()
{
$
(
"
#welcome
"
).
hide
()
}
hide
:
function
()
{
$
(
'
#welcome
'
).
hide
();
}
};
var
preferences
=
function
()
{
if
(
!
config
.
preferences
.
sidebar
)
{
debug
(
2
,
"
no sidebar - updating html
"
)
$
(
"
#sidebar
"
).
removeClass
()
$
(
"
#sidebar
"
).
addClass
(
"
col-md-12 row
"
)
$
(
"
#packages
"
).
addClass
(
"
col-md-4
"
)
$
(
"
#logs
"
).
addClass
(
"
col-md-4
"
)
$
(
"
#files .others
"
).
addClass
(
"
col-md-4
"
)
$
(
"
#main
"
).
removeClass
().
addClass
(
"
col-md-12
"
)
$
(
"
#sticky-package
"
).
addClass
(
"
on-top
"
)
var
preferences
=
function
()
{
if
(
!
config
.
preferences
.
sidebar
)
{
debug
(
2
,
'
no sidebar - updating html
'
);
$
(
'
#sidebar
'
).
removeClass
();
$
(
'
#sidebar
'
).
addClass
(
'
col-md-12 row
'
);
$
(
'
#packages
'
).
addClass
(
'
col-md-4
'
);
$
(
'
#logs
'
).
addClass
(
'
col-md-4
'
);
$
(
'
#files .others
'
).
addClass
(
'
col-md-4
'
);
$
(
'
#main
'
).
removeClass
().
addClass
(
'
col-md-12
'
);
$
(
'
#sticky-package
'
).
addClass
(
'
on-top
'
);
}
if
(
!
config
.
preferences
.
file_background
)
{
$
(
"
#file pre
"
).
addClass
(
"
no-background
"
)
}
$
(
"
#file pre
"
).
css
(
'
font-size
'
,
config
.
preferences
.
file_fontsize
)
if
(
!
config
.
preferences
.
file_background
)
{
$
(
'
#file pre
'
).
addClass
(
'
no-background
'
);
}
$
(
'
#file pre
'
).
css
(
'
font-size
'
,
config
.
preferences
.
file_fontsize
);
};
var
select
=
function
()
{
unselect
()
var
select
=
function
()
{
unselect
();
if
(
Utils
.
check_view_distribution
(
view
))
{
$
(
"
#distributions li[id='distribution-
"
+
view
.
distribution
.
name
+
"
']
"
).
addClass
(
'
active
'
)
}
packages
.
select
()
files
.
select
()
}
var
unselect
=
function
()
{
$
(
'
#distributions li
'
).
removeClass
(
'
active
'
)
files
.
unselect
()
packages
.
unselect
()
}
var
clean
=
function
()
{
welcome
.
hide
()
title
.
clean
()
packages
.
clean
()
files
.
clean
()
file
.
clean
()
unselect
()
breadcrumb
.
update
()
error
.
clean
()
}
$
(
'
#distributions li[id="distribution-
'
+
view
.
distribution
.
name
+
'
"]
'
).
addClass
(
'
active
'
);
}
packages
.
select
();
files
.
select
();
};
var
unselect
=
function
()
{
$
(
'
#distributions li
'
).
removeClass
(
'
active
'
);
files
.
unselect
();
packages
.
unselect
();
};
var
clean
=
function
()
{
welcome
.
hide
();
title
.
clean
();
packages
.
clean
();
files
.
clean
();
file
.
clean
();
unselect
();
breadcrumb
.
update
();
error
.
clean
();
};
var
update
=
{
page
:
function
(
old_view
)
{
if
(
!
old_view
||
!
Utils
.
check_view_distribution
(
old_view
)
||
!
Utils
.
check_view_distribution
(
view
)
||
view
.
distribution
.
name
!=
old_view
.
distribution
.
name
||
!
view
.
package
.
orig_name
)
{
// new distribution view
populate
()
return
}
else
if
(
!
Utils
.
check_view_package
(
old_view
)
||
!
Utils
.
check_view_package
(
view
)
||
view
.
package
.
orig_name
!=
old_view
.
package
.
orig_name
)
{
// new package view
files
.
get
()
file
.
get
()
}
else
if
(
!
Utils
.
check_view_file
(
old_view
)
||
!
Utils
.
check_view_file
(
view
)
||
view
.
file
.
name
!=
old_view
.
file
.
name
)
{
// new file view
file
.
get
()
}
update
.
view
(
view
)
},
view
:
function
()
{
error
.
clean
()
title
.
set
()
breadcrumb
.
update
()
select
()
sticky
.
reset
()
}
}
page
:
function
(
old_view
)
{
if
(
!
old_view
||
!
Utils
.
check_view_distribution
(
old_view
)
||
!
Utils
.
check_view_distribution
(
view
)
||
view
.
distribution
.
name
!=
old_view
.
distribution
.
name
||
!
view
.
package
.
orig_name
)
{
// new distribution view
populate
();
return
;
}
else
if
(
!
Utils
.
check_view_package
(
old_view
)
||
!
Utils
.
check_view_package
(
view
)
||
view
.
package
.
orig_name
!=
old_view
.
package
.
orig_name
)
{
// new package view
files
.
get
();
file
.
get
();
}
else
if
(
!
Utils
.
check_view_file
(
old_view
)
||
!
Utils
.
check_view_file
(
view
)
||
view
.
file
.
name
!=
old_view
.
file
.
name
)
{
// new file view
file
.
get
();
}
update
.
view
(
view
);
},
view
:
function
()
{
error
.
clean
();
title
.
set
();
breadcrumb
.
update
();
select
();
sticky
.
reset
();
}
};
var
populate
=
function
()
{
clean
()
packages
.
get
()
files
.
get
()
file
.
get
()
update
.
view
()
}
clean
();
packages
.
get
();
files
.
get
();
file
.
get
();
update
.
view
();
};
this
.
start
=
function
()
{
socket
.
on
(
config
.
events
.
error
,
function
(
socket_error
)
{
debug_socket
(
"
received
"
,
config
.
events
.
error
,
socket_error
)
error
.
set
(
socket_error
)
})
socket
.
on
(
config
.
events
.
error
,
function
(
socket_error
)
{
debug_socket
(
'
received
'
,
config
.
events
.
error
,
socket_error
);
error
.
set
(
socket_error
);
});
socket
.
on
(
config
.
events
.
broadcast
.
distributions
,
function
(
socket_data
)
{
debug_socket
(
"
received
"
,
config
.
events
.
broadcast
.
distributions
,
socket_data
)
welcome
.
set
(
socket_data
)
})
debug_socket
(
'
received
'
,
config
.
events
.
broadcast
.
distributions
,
socket_data
);
welcome
.
set
(
socket_data
);
});
socket
.
on
(
_e
.
distribution_packages
.
set
,
function
(
socket_data
)
{
debug_socket
(
"
received
"
,
_e
.
distribution_packages
.
set
,
socket_data
)
packages
.
set
(
socket_data
)
})
socket
.
on
(
_e
.
distribution_packages
.
set
,
function
(
socket_data
)
{
debug_socket
(
'
received
'
,
_e
.
distribution_packages
.
set
,
socket_data
);
packages
.
set
(
socket_data
);
});
socket
.
on
(
_e
.
distribution_packages
.
status
,
function
(
socket_data
)
{
debug_socket
(
"
received
"
,
_e
.
distribution_packages
.
set
,
socket_data
)
packages
.
set_status
(
socket_data
)
sticky
.
set_status
(
socket_data
)
})
socket
.
on
(
_e
.
distribution_packages
.
status
,
function
(
socket_data
)
{
debug_socket
(
'
received
'
,
_e
.
distribution_packages
.
set
,
socket_data
);
packages
.
set_status
(
socket_data
);
sticky
.
set_status
(
socket_data
);
});
socket
.
on
(
config
.
events
.
broadcast
.
status_update
,
function
(
socket_data
)
{
packages
.
set_status
(
socket_data
)
sticky
.
set_status
(
socket_data
)
})
socket
.
on
(
config
.
events
.
broadcast
.
status_update
,
function
(
socket_data
)
{
packages
.
set_status
(
socket_data
);
sticky
.
set_status
(
socket_data
);
});
socket
.
on
(
_e
.
package_files_list
.
set
,
function
(
socket_data
)
{
debug_socket
(
"
received
"
,
_e
.
package_files_list
.
set
,
socket_data
)
files
.
set
(
socket_data
)
})
socket
.
on
(
_e
.
package_files_list
.
set
,
function
(
socket_data
)
{
debug_socket
(
'
received
'
,
_e
.
package_files_list
.
set
,
socket_data
);
files
.
set
(
socket_data
);
});
socket
.
on
(
_e
.
file
.
set
,
function
(
socket_data
)
{
debug_socket
(
"
received
"
,
_e
.
file
.
set
,
socket_data
)
file
.
set
(
socket_data
)
})
debug_socket
(
'
received
'
,
_e
.
file
.
set
,
socket_data
);
file
.
set
(
socket_data
);
});
socket
.
on
(
_e
.
file_newcontent
,
function
(
socket_data
)
{
debug_socket
(
"
received
"
,
_e
.
file_newcontent
,
socket_data
)
new_lines
.
push
(
socket_data
.
file
.
new_content
)
})
debug_socket
(
'
received
'
,
_e
.
file_newcontent
,
socket_data
);
new_lines
.
push
(
socket_data
.
file
.
new_content
);
});
$
(
window
).
on
(
'
hashchange
'
,
function
()
{
if
(
!
__check_hash_makes_sense
())
return
var
old_view
=
Utils
.
clone
(
view
)
var
new_view
=
Utils
.
from_hash_to_view
()
$
(
window
).
on
(
'
hashchange
'
,
function
()
{
if
(
!
__check_hash_makes_sense
())
return
;
var
old_view
=
Utils
.
clone
(
view
);
var
new_view
=
Utils
.
from_hash_to_view
();
// reset current view
view
.
distribution
=
Utils
.
clone
(
new_view
.
distribution
)
view
.
package
=
Utils
.
clone
(
new_view
.
package
)
view
.
distribution
=
Utils
.
clone
(
new_view
.
distribution
);
view
.
package
=
Utils
.
clone
(
new_view
.
package
);
if
(
view
.
packages
[
new_view
.
package
.
orig_name
])
view
.
package
=
Utils
.
clone
(
view
.
packages
[
new_view
.
package
.
orig_name
])
view
.
file
=
Utils
.
clone
(
new_view
.
file
)
update
.
page
(
old_view
)
$
(
'
html,body
'
).
animate
({
scrollTop
:
0
},
0
);
debug
(
1
,
"
changing view
"
,
"
old:
"
,
old_view
,
"
new:
"
,
view
)
view
.
package
=
Utils
.
clone
(
view
.
packages
[
new_view
.
package
.
orig_name
]);
view
.
file
=
Utils
.
clone
(
new_view
.
file
);
update
.
page
(
old_view
);
$
(
'
html,body
'
).
animate
({
scrollTop
:
0
},
0
);
debug
(
1
,
'
changing view
'
,
'
old:
'
,
old_view
,
'
new:
'
,
view
);
});
if
(
!
__check_hash_makes_sense
())
return
populate
()
if
(
!
__check_hash_makes_sense
())
return
;
populate
();
// Init sticky-package back_on_top on click
$
(
"
#sticky-package
"
).
on
(
"
click
"
,
function
(){
$
(
'
html,body
'
).
animate
({
scrollTop
:
0
},
100
);
})
$
(
'
#sticky-package
'
).
on
(
'
click
'
,
function
()
{
$
(
'
html,body
'
).
animate
({
scrollTop
:
0
},
100
);
});
// WORKAROUND:
// when page is loaded sidebar has offset().top
...
...
@@ -615,15 +601,15 @@ function Page_Distrubion(socket)
// Append lines every 200 mills.
function
watch_for_new_lines
()
{
if
(
new_lines
.
length
>
0
)
{
file
.
append
(
new_lines
.
join
(
''
))
new_lines
=
[]
file
.
append
(
new_lines
.
join
(
''
));
new_lines
=
[];
}
setTimeout
(
watch_for_new_lines
,
200
);
}
watch_for_new_lines
()
watch_for_new_lines
();
// Update html according with preferences
preferences
()
preferences
();
}
};
}
debomatic-webui/public/javascripts/page_generic.js
View file @
f7a4f04a
function
Page_Generic
()
{
var
_e
=
config
.
events
'
use strict
'
;
function
Page_Generic
()
{
var
_e
=
config
.
events
;
function
__get_status_html_id
(
status_data
)
{
var
result
=
'
status-
'
+
status_data
.
status
+
'
-
'
+
status_data
.
distribution
var
result
=
'
status-
'
+
status_data
.
status
+
'
-
'
+
status_data
.
distribution
;
if
(
status_data
.
hasOwnProperty
(
'
package
'
))
result
+=
'
-
'
+
status_data
.
package
return
result
result
+=
'
-
'
+
status_data
.
package
;
return
result
;
}
function
__get_status_html_href
(
status_data
)
{
result
=
config
.
paths
.
distribution
+
'
#
'
+
status_data
.
distribution
result
=
config
.
paths
.
distribution
+
'
#
'
+
status_data
.
distribution
;
if
(
status_data
.
hasOwnProperty
(
'
package
'
))
result
+=
'
/
'
+
status_data
.
package
.
replace
(
'
_
'
,
'
/
'
)
+
'
/datestamp
'
return
result
result
+=
'
/
'
+
status_data
.
package
.
replace
(
'
_
'
,
'
/
'
)
+
'
/datestamp
'
;
return
result
;
}
function
__get_status_html_title
(
status_data
)
{
result
=
status_data
.
status
+
'
:
'
+
status_data
.
distribution
result
=
status_data
.
status
+
'
:
'
+
status_data
.
distribution
;
if
(
status_data
.
hasOwnProperty
(
'
package
'
))
result
+=
'
>
'
+
status_data
.
package
result
+=
'
>
'
+
status_data
.
package
;
if
(
status_data
.
hasOwnProperty
(
'
uploader
'
)
&&
status_data
.
uploader
.
length
>
0
)
result
+=
'
by
'
+
status_data
.
uploader
return
result
result
+=
'
by
'
+
status_data
.
uploader
;
return
result
;
}
function
__get_status_html_inner
(
status_data
)
{
if
(
status_data
.
hasOwnProperty
(
'
package
'
))
return
status_data
.
package
;
return
status_data
.
distribution
return
status_data
.
distribution
;
}
function
__get_status_html
(
status_data
)
{
var
_s
=
status_data
var
li
=
$
(
'
<li></li>
'
)
li
.
attr
(
'
id
'
,
__get_status_html_id
(
status_data
))
var
button
=
$
(
'
<a></a>
'
)
button
.
addClass
(
'
btn btn-xs
'
)
button
.
addClass
(
_s
.
status
)
button
.
attr
(
'
title
'
,
__get_status_html_title
(
_s
))
button
.
attr
(
'
href
'
,
__get_status_html_href
(
_s
))
button
.
html
(
__get_status_html_inner
(
_s
))
var
info
=
Utils
.
get_status_icon_and_class
(
_s
)
button
.
addClass
(
'
btn-
'
+
info
.
className
)
var
_s
=
status_data
;
var
li
=
$
(
'
<li></li>
'
);
li
.
attr
(
'
id
'
,
__get_status_html_id
(
status_data
));
var
button
=
$
(
'
<a></a>
'
);
button
.
addClass
(
'
btn btn-xs
'
);
button
.
addClass
(
_s
.
status
);
button
.
attr
(
'
title
'
,
__get_status_html_title
(
_s
));
button
.
attr
(
'
href
'
,
__get_status_html_href
(
_s
));
button
.
html
(
__get_status_html_inner
(
_s
));
var
info
=
Utils
.
get_status_icon_and_class
(
_s
);
button
.
addClass
(
'
btn-
'
+
info
.
className
);
// add icon
button
.
html
(
button
.
html
()
+
'
'
+
Utils
.
get_status_icon_html
(
_s
))
li
.
html
(
button
)
var
result
=
$
(
'
<div></div>
'
)
result
.
html
(
li
)
return
result
.
html
()
button
.
html
(
button
.
html
()
+
'
'
+
Utils
.
get_status_icon_html
(
_s
));
li
.
html
(
button
);
var
result
=
$
(
'
<div></div>
'
);
result
.
html
(
li
);
return
result
.
html
();
}
var
distributions
=
{
set
:
function
(
distributions
)
{
set
:
function
(
distributions
)
{
$
(
'
#distributions ul
'
).
html
(
''
);
if
(
distributions
.
length
<
1
)
{
$
(
'
#distributions ul
'
).
append
(
'
<li><a title="There is no distribution at the moment" onclick="return false">None</li>
'
)
}
else
{
distributions
.
forEach
(
function
(
name
){
$
(
'
#distributions ul
'
).
append
(
'
<li id="distribution-
'
+
name
+
'
"><a href="
'
+
config
.
paths
.
distribution
+
'
#
'
+
name
+
'
">
'
+
name
+
'
</a></li>
'
);
if
(
distributions
.
length
<
1
)
{
$
(
'
#distributions ul
'
).
append
(
'
<li><a title="There is no distribution at the moment" onclick="return false">None</li>
'
);
}
else
{
distributions
.
forEach
(
function
(
name
)
{
$
(
'
#distributions ul
'
).
append
(
'
<li id="distribution-
'
+
name
+
'
"><a href="
'
+
config
.
paths
.
distribution
+
'
#
'
+
name
+
'
">
'
+
name
+
'
</a></li>
'
);
});
if
(
window
.
location
.
pathname
==
config
.
paths
.
distribution
)
{
var
data
=
Utils
.
from_hash_to_view
()
var
data
=
Utils
.
from_hash_to_view
();
if
(
Utils
.
check_view_distribution
(
data
))
{
$
(
"
#distributions li[id='distribution-
"
+
data
.
distribution
.
name
+
"
']
"
).
addClass
(
'
active
'
)
$
(
'
#distributions li[id="distribution-
'
+
data
.
distribution
.
name
+
'
"]
'
).
addClass
(
'
active
'
);
}
}
}
...
...
@@ -72,107 +72,104 @@ function Page_Generic()
}
var
status
=
{
set
:
function
(
data_status
)
{
$
(
"
#status ul
"
).
html
(
''
)
set
:
function
(
data_status
)
{
$
(
"
#status ul
"
).
html
(
''
);
if
(
data_status
.
length
>
0
)
{
data_status
.
forEach
(
function
(
s
)
{
status
.
append
(
s
)
data_status
.
forEach
(
function
(
s
)
{
status
.
append
(
s
);
})
}
},
append
:
function
(
status_data
)
{
$
(
'
#status .idle
'
).
hide
()
$
(
"
#status ul
"
).
append
(
__get_status_html
(
status_data
))
append
:
function
(
status_data
)
{
$
(
'
#status .idle
'
).
hide
();
$
(
"
#status ul
"
).
append
(
__get_status_html
(
status_data
));
},
update
:
function
(
status_data
)
{
update
:
function
(
status_data
)
{
var
li
=
$
(
"
#status li[id='
"
+
__get_status_html_id
(
status_data
)
+
"
']
"
)
if
(
li
.
length
>
0
&&
status_data
.
hasOwnProperty
(
'
success
'
))
{
var
li
=
$
(
'
#status li[id="
'
+
__get_status_html_id
(
status_data
)
+
'
"]
'
);
if
(
li
.
length
>
0
&&
status_data
.
hasOwnProperty
(
'
success
'
))
{
// Update color and icon
li
=
$
(
li
[
0
])
li
.
html
(
$
(
__get_status_html
(
status_data
)).
children
())
li
.
attr
(
'
id
'
,
''
)
li
=
$
(
li
[
0
]);
li
.
html
(
$
(
__get_status_html
(
status_data
)).
children
());
li
.
attr
(
'
id
'
,
''
);
// This is a chain to have a fadeOut and correctly
// delete status li from list.
// The first timemout fades out the status element.
setTimeout
(
function
()
{
li
.
children
().
fadeOut
(
config
.
status
.
delay
.
fadeOut
)
setTimeout
(
function
()
{
li
.
children
().
fadeOut
(
config
.
status
.
delay
.
fadeOut
);
// Then resize list.
setTimeout
(
function
()
{
li
.
animate
({
width
:
'
toggle
'
})
},
config
.
status
.
delay
.
fadeOut
)
setTimeout
(
function
()
{
li
.
animate
({
width
:
'
toggle
'
});
},
config
.
status
.
delay
.
fadeOut
);
// Finally remove status html
// and show idle label if necessary.
setTimeout
(
function
()
{
li
.
remove
()
if
(
$
(
'
#status li
'
).
length
==
0
)
$
(
'
#status .idle
'
).
show
()
},
config
.
status
.
delay
.
remove
+
2000
)
// more delay on remove html
},
config
.
status
.
delay
.
remove
)
}
else
if
(
!
status_data
.
hasOwnProperty
(
'
success
'
))
{
status
.
append
(
status_data
)
setTimeout
(
function
()
{
li
.
remove
();
if
(
$
(
'
#status li
'
).
length
===
0
);
$
(
'
#status .idle
'
).
show
();
},
config
.
status
.
delay
.
remove
+
2000
);
// more delay on remove html
},
config
.
status
.
delay
.
remove
);
}
else
if
(
!
status_data
.
hasOwnProperty
(
'
success
'
))
{
status
.
append
(
status_data
);
}
},
}
};
this
.
preferences
=
function
()
{
this
.
preferences
=
function
()
{
if
(
config
.
preferences
.
header
)
{
$
(
"
#pageheader
"
).
show
()
$
(
"
.navbar .home-link
"
).
hide
()
}
else
{
$
(
"
#pageheader
"
).
hide
()
$
(
"
.navbar .home-link
"
).
show
()
$
(
'
#pageheader
'
).
show
();
$
(
'
.navbar .home-link
'
).
hide
();
}
else
{
$
(
'
#pageheader
'
).
hide
();
$
(
'
.navbar .home-link
'
).
show
();
}
if
(
config
.
preferences
.
glossy_theme
)
{
if
(
$
(
"
head
"
).
find
(
"
link[href='/external_libs/bootstrap-3.1.1-dist/css/bootstrap-theme.min.css']
"
).
length
==
0
)
$
(
"
head
"
).
append
(
'
<link rel="stylesheet" href="/external_libs/bootstrap-3.1.1-dist/css/bootstrap-theme.min.css">
'
)
}
else
{
$
(
"
head
"
).
find
(
"
link[href='/external_libs/bootstrap-3.1.1-dist/css/bootstrap-theme.min.css']
"
).
remove
()
}
if
(
$
(
'
head
'
).
find
(
'
link[href="/external_libs/bootstrap-3.1.1-dist/css/bootstrap-theme.min.css"]
'
).
length
===
0
)
$
(
'
head
'
).
append
(
'
<link rel="stylesheet" href="/external_libs/bootstrap-3.1.1-dist/css/bootstrap-theme.min.css">
'
);
}
else
{
$
(
'
head
'
).
find
(
'
link[href="/external_libs/bootstrap-3.1.1-dist/css/bootstrap-theme.min.css"]
'
).
remove
();
}
};
this
.
set_window_title
=
function
(
label
)
{
var
window_title_separator
=
'
\
u00ab
'
var
window_title_separator
=
'
\
u00ab
'
;
if
(
label
)
window
.
document
.
title
=
label
+
window_title_separator
+
config
.
title
window
.
document
.
title
=
label
+
window_title_separator
+
config
.
title
;
else
window
.
document
.
title
=
config
.
title
}
window
.
document
.
title
=
config
.
title
;
};
this
.
start
=
function
(
socket
)
{
// update distributions
socket
.
on
(
_e
.
broadcast
.
distributions
,
function
(
socket_distributions
)
{
debug_socket
(
"
received
"
,
_e
.
broadcast
.
distributions
,
socket_distributions
)
distributions
.
set
(
socket_distributions
)
socket
.
on
(
_e
.
broadcast
.
distributions
,
function
(
socket_distributions
)
{
debug_socket
(
'
received
'
,
_e
.
broadcast
.
distributions
,
socket_distributions
);
distributions
.
set
(
socket_distributions
);
});
socket
.
on
(
_e
.
client
.
status
,
function
(
socket_status
)
{
debug_socket
(
"
received
"
,
_e
.
client
.
status
,
socket_status
)
status
.
set
(
socket_status
)
})
socket
.
on
(
_e
.
client
.
status
,
function
(
socket_status
)
{
debug_socket
(
'
received
'
,
_e
.
client
.
status
,
socket_status
);
status
.
set
(
socket_status
);
});
socket
.
on
(
_e
.
broadcast
.
status_update
,
function
(
package_status
)
{
debug_socket
(
"
received
"
,
_e
.
broadcast
.
status_update
,
package_status
)
status
.
update
(
package_status
)
})
socket
.
on
(
_e
.
broadcast
.
status_update
,
function
(
package_status
)
{
debug_socket
(
'
received
'
,
_e
.
broadcast
.
status_update
,
package_status
);
status
.
update
(
package_status
);
});
socket
.
on
(
_e
.
error
,
function
(
error
)
{
console
.
error
(
"
socket >
"
+
error
)
})
}
socket
.
on
(
_e
.
error
,
function
(
error
)
{
console
.
error
(
'
socket >
'
+
error
);
});
};
// select current page in navbar
if
(
window
.
location
.
pathname
!=
config
.
paths
.
distribution
)
{
$
(
"
.navbar li a[href='
"
+
window
.
location
.
pathname
+
"
']
"
).
parent
().
addClass
(
"
active
"
)
$
(
'
.navbar li a[href="
'
+
window
.
location
.
pathname
+
'
"]
'
).
parent
().
addClass
(
'
active
'
);
}
// update html according with preferences
this
.
preferences
()
this
.
preferences
();
}
debomatic-webui/public/javascripts/preferences.js
View file @
f7a4f04a
'
use strict
'
;
function
Preferences
()
{
// update config.preferences according with user choices
var
load
=
function
()
{
for
(
key
in
config
.
preferences
)
{
if
((
value
=
localStorage
.
getItem
(
key
)))
{
debug
(
2
,
'
loading preference
'
,
key
,
value
)
config
.
preferences
[
key
]
=
JSON
.
parse
(
value
)
}
for
(
var
key
in
config
.
preferences
)
{
var
value
=
localStorage
.
getItem
(
key
);
if
(
value
)
{
debug
(
2
,
'
loading preference
'
,
key
,
value
);
config
.
preferences
[
key
]
=
JSON
.
parse
(
value
);
}
}
};
// set prefence
var
set
=
function
(
key
,
value
)
{
if
(
config
.
preferences
.
hasOwnProperty
(
key
))
{
debug
(
1
,
'
setting preference
'
,
key
,
value
)
localStorage
.
setItem
(
key
,
value
)
config
.
preferences
[
key
]
=
JSON
.
parse
(
value
)
}
debug
(
1
,
'
setting preference
'
,
key
,
value
);
localStorage
.
setItem
(
key
,
value
);
config
.
preferences
[
key
]
=
JSON
.
parse
(
value
);
}
};
// init prefence page
this
.
initPage
=
function
()
{
this
.
initPage
=
function
()
{
page_generic
.
set_window_title
(
"
Preferences
"
)
page_generic
.
set_window_title
(
'
Preferences
'
);
// set view according with config.preferences
for
(
key
in
config
.
preferences
)
{
var
element
=
$
(
"
#preferences #
"
+
key
)
if
(
element
.
attr
(
'
type
'
)
==
"
checkbox
"
)
{
element
.
prop
(
'
checked
'
,
config
.
preferences
[
key
])
}
else
{
element
.
val
(
config
.
preferences
[
key
])
for
(
var
key
in
config
.
preferences
)
{
var
element
=
$
(
'
#preferences #
'
+
key
);
if
(
element
.
attr
(
'
type
'
)
==
'
checkbox
'
)
{
element
.
prop
(
'
checked
'
,
config
.
preferences
[
key
]);
}
else
{
element
.
val
(
config
.
preferences
[
key
]);
}
}
// on input change, set prefence
$
(
"
#preferences input, #preferences select
"
).
change
(
function
()
{
var
key
=
$
(
this
).
attr
(
'
id
'
)
var
value
=
$
(
this
).
val
()
$
(
'
#preferences input, #preferences select
'
).
change
(
function
()
{
var
key
=
$
(
this
).
attr
(
'
id
'
);
var
value
=
$
(
this
).
val
();
if
(
$
(
this
).
attr
(
'
type
'
)
==
'
checkbox
'
)
value
=
$
(
this
).
is
(
'
:checked
'
)
set
(
key
,
value
)
value
=
$
(
this
).
is
(
'
:checked
'
);
set
(
key
,
value
);
// give to user an immediate feedback changing preferences
page_generic
.
preferences
()
})
}
page_generic
.
preferences
();
});
};
load
()
load
();
}
debomatic-webui/public/javascripts/utils.js
View file @
f7a4f04a
'
use strict
'
;
var
Utils
=
{
from_hash_to_view
:
function
(
hash
)
{
if
(
!
hash
)
hash
=
window
.
location
.
hash
hash
=
hash
.
replace
(
'
#
'
,
''
)
info
=
hash
.
split
(
'
/
'
);
var
view
=
{}
view
.
distribution
=
{}
view
.
packages
=
{}
view
.
package
=
{}
view
.
file
=
{}
if
(
!
hash
)
hash
=
window
.
location
.
hash
;
hash
=
hash
.
replace
(
'
#
'
,
''
);
var
info
=
hash
.
split
(
'
/
'
);
var
view
=
{};
view
.
distribution
=
{};
view
.
packages
=
{};
view
.
package
=
{};
view
.
file
=
{};
if
(
info
.
length
>=
1
)
{
view
.
distribution
.
name
=
info
[
0
];
}
if
(
info
.
length
>=
3
)
{
if
(
info
.
length
>=
3
)
{
view
.
package
.
name
=
info
[
1
];
view
.
package
.
version
=
info
[
2
];
view
.
package
.
orig_name
=
view
.
package
.
name
+
'
_
'
+
view
.
package
.
version
view
.
package
.
orig_name
=
view
.
package
.
name
+
'
_
'
+
view
.
package
.
version
;
}
if
(
info
.
length
>=
4
)
{
view
.
file
.
name
=
info
[
3
]
view
.
file
.
orig_name
=
view
.
package
.
orig_name
+
'
.
'
+
view
.
file
.
name
view
.
file
.
name
=
info
[
3
];
view
.
file
.
orig_name
=
view
.
package
.
orig_name
+
'
.
'
+
view
.
file
.
name
;
}
return
view
return
view
;
},
from_view_to_hash
:
function
(
view
)
{
hash
=
"
#
"
var
hash
=
'
#
'
;
if
(
Utils
.
check_view_distribution
(
view
))
{
hash
=
hash
+
view
.
distribution
.
name
hash
=
hash
+
view
.
distribution
.
name
;
if
(
Utils
.
check_view_package
(
view
))
{
hash
=
hash
+
'
/
'
+
view
.
package
.
name
+
"
/
"
+
view
.
package
.
version
hash
=
hash
+
'
/
'
+
view
.
package
.
name
+
'
/
'
+
view
.
package
.
version
;
if
(
Utils
.
check_view_file
(
view
))
hash
=
hash
+
'
/
'
+
view
.
file
.
name
hash
=
hash
+
'
/
'
+
view
.
file
.
name
;
}
}
return
hash
return
hash
;
},
check_view_distribution
:
function
(
view
)
{
return
view
&&
view
.
distribution
&&
view
.
distribution
.
name
check_view_distribution
:
function
(
view
)
{
return
view
&&
view
.
distribution
&&
view
.
distribution
.
name
;
},
check_view_package
:
function
(
view
)
{
return
Utils
.
check_view_distribution
(
view
)
&&
view
.
package
&&
view
.
package
.
name
&&
view
.
package
.
version
&&
view
.
package
.
orig_name
check_view_package
:
function
(
view
)
{
return
Utils
.
check_view_distribution
(
view
)
&&
view
.
package
&&
view
.
package
.
name
&&
view
.
package
.
version
&&
view
.
package
.
orig_name
;
},
check_view_file
:
function
(
view
)
{
return
Utils
.
check_view_package
(
view
)
&&
view
.
file
&&
view
.
file
.
name
check_view_file
:
function
(
view
)
{
return
Utils
.
check_view_package
(
view
)
&&
view
.
file
&&
view
.
file
.
name
;
},
get_status_icon_and_class
:
function
(
status_data
)
{
var
_c
=
config
.
status
.
className
var
_i
=
config
.
status
.
icons
var
_s
=
status_data
var
className
=
null
var
icon
=
null
var
_c
=
config
.
status
.
className
;
var
_i
=
config
.
status
.
icons
;
var
_s
=
status_data
;
var
className
=
null
;
var
icon
=
null
;
if
(
_s
.
hasOwnProperty
(
'
success
'
))
{
if
(
_s
.
success
==
true
)
{
className
=
_c
.
success
icon
=
_i
.
success
}
else
{
className
=
_c
.
fail
icon
=
_i
.
fail
if
(
_s
.
success
===
true
)
{
className
=
_c
.
success
;
icon
=
_i
.
success
;
}
else
{
className
=
_c
.
fail
;
icon
=
_i
.
fail
;
}
}
else
{
className
=
_c
[
_s
.
status
]
icon
=
_i
[
_s
.
status
]
}
else
{
className
=
_c
[
_s
.
status
];
icon
=
_i
[
_s
.
status
];
}
// do not change color if update or create and successed
if
(
_s
.
success
==
true
&&
_s
.
status
!=
config
.
status
.
build
)
{
className
=
_c
[
_s
.
status
]
if
(
_s
.
success
===
true
&&
_s
.
status
!=
config
.
status
.
build
)
{
className
=
_c
[
_s
.
status
];
}
return
{
className
:
className
,
icon
:
icon
}
};
},
get_status_icon_html
:
function
(
status_data
)
{
info
=
Utils
.
get_status_icon_and_class
(
status_data
)
return
'
<span class="icon glyphicon glyphicon-
'
+
info
.
icon
+
'
"></span>
'
var
info
=
Utils
.
get_status_icon_and_class
(
status_data
);
return
'
<span class="icon glyphicon glyphicon-
'
+
info
.
icon
+
'
"></span>
'
;
},
// clone an object via JSON
clone
:
function
(
object
)
{
return
JSON
.
parse
(
JSON
.
stringify
(
object
));
}
}
}
;
debomatic-webui/views/distribution.ejs
View file @
f7a4f04a
...
...
@@ -24,7 +24,11 @@
</nav>
<div class="others">
<nav id="sources">
<h4>Sources</h4>
<h4>Sources
<a class="btn btn-link" title="Get all sources in one click" onclick="download_all('#sources')">
<span class="glyphicon glyphicon-download-alt"></span>
</a>
</h4>
<ul></ul>
</nav>
<nav id="debs">
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment