Commit c0c918ec authored by Leo Iannacone's avatar Leo Iannacone

jslint client code

parent 08e14f2f
"use strict";
/* /*
General information about debugging: General information about debugging:
...@@ -10,17 +11,17 @@ ...@@ -10,17 +11,17 @@
3 - socket emit data 3 - socket emit data
4 - socket received data 4 - socket received data
*/ */
var debug = function() { var debug = function () {
if (arguments.length < 2) { if (arguments.length < 2) {
return return;
} }
var level = arguments[0] var level = arguments[0];
arguments[0] = "debug [" + level + "]:" arguments[0] = "debug [" + level + "]:";
if (level <= config.preferences.debug) { if (level <= config.preferences.debug) {
if (console.debug) if (console.debug)
console.debug.apply(console, arguments) console.debug.apply(console, arguments);
else else
console.log.apply(console, arguments) console.log.apply(console, arguments);
} }
} }
...@@ -30,11 +31,11 @@ var debug = function() { ...@@ -30,11 +31,11 @@ var debug = function() {
usage: debug_socket("emit"|"received", event_name, data) usage: debug_socket("emit"|"received", event_name, data)
*/ */
var debug_socket = function() { var debug_socket = function () {
if (arguments.length != 3) if (arguments.length != 3)
return return;
var level = 3; var level = 3;
if (arguments[0] == "received") if (arguments[0] == "received")
level = 4 level = 4;
debug(level, "socket", arguments[0], "event:", arguments[1], "data:", arguments[2]) debug(level, "socket", arguments[0], "event:", arguments[1], "data:", arguments[2]);
} }
// main client javascript // 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) { if (window.location.pathname == config.paths.preferences) {
preferences.initPage() preferences.initPage();
} }
if (window.location.pathname == '/') { if (window.location.pathname == '/') {
// convert email addresses in the right format // convert email addresses in the right format
var emails = $(".email") var emails = $('.email');
$.each(emails, function (){ $.each(emails, function () {
var subject = '' var subject = '';
if ($(this).attr('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 real_email = $(this).attr('address').replace('AT', '@').replace('DOT', '.').replace(/ /g, '');
var label = real_email var label = real_email;
if (config.debomatic.admin.name && config.debomatic.admin.name != 'Your Name') if (config.debomatic.admin.name && config.debomatic.admin.name != 'Your Name');
label = config.debomatic.admin.name label = config.debomatic.admin.name;
real_email = '<a href="mailto:' + real_email + subject + '">' + label + '</a>' real_email = '<a href="mailto:' + real_email + subject + '">' + label + '</a>';
$(this).html(real_email) $(this).html(real_email);
}) })
} }
var socket = io.connect('/'); var socket = io.connect('/');
page_generic.start(socket) page_generic.start(socket);
if (window.location.pathname == config.paths.distribution) { if (window.location.pathname == config.paths.distribution) {
new Page_Distrubion(socket).start() new Page_Distrubion(socket).start();
} }
'use strict';
// function to get all files in on click // function to get all files in on click
// event comes from HTML // event comes from HTML
function download_all (div_id) { function download_all(div_id) {
frame_id = 'downloadAllFrame' var frame_id = 'downloadAllFrame';
if ($("#" + frame_id).length > 0) var frame = null;
frame = $($("#" + frame_id)[0]) if ($('#' + frame_id).length > 0)
frame = $($('#' + frame_id)[0]);
else { else {
frame = $('<iframe></iframe>') frame = $('<iframe></iframe>');
frame.hide() frame.hide();
frame.attr('id', frame_id) frame.attr('id', frame_id);
$('body').append(frame) $('body').append(frame);
} }
files = $(div_id).find('ul li a') var files = $(div_id).find('ul li a');
$.each(files, function(index, item) { $.each(files, function (index, item) {
setTimeout(function() { setTimeout(function () {
frame.attr('src', item.href) frame.attr('src', item.href);
}, index * 1000) }, index * 1000);
}) });
} }
function Page_Distrubion(socket) function Page_Distrubion(socket) {
{
/* /*
...@@ -60,549 +62,533 @@ function Page_Distrubion(socket) ...@@ -60,549 +62,533 @@ function Page_Distrubion(socket)
*/ */
var socket = socket var _e = config.events.client;
var _e = config.events.client var view = Utils.from_hash_to_view();
var view = Utils.from_hash_to_view() var sidebarOffset = 0;
var sidebarOffset = 0 var new_lines = [];
var new_lines = []
function __check_hash_makes_sense() { function __check_hash_makes_sense() {
if (window.location.hash.indexOf('..') >= 0) { if (window.location.hash.indexOf('..') >= 0) {
error.set("Detected '..' God Is Watching You !") error.set('Detected ".." God Is Watching You !');
return false return false;
} }
if (! window.location.hash) { if (!window.location.hash) {
welcome.show() welcome.show();
return false return false;
} }
var info = window.location.hash.split('/') var info = window.location.hash.split('/');
if (info.length == 2) if (info.length == 2)
window.location.hash = info[0] window.location.hash = info[0];
return true return true;
} }
var title = { var title = {
set: function(label) { set: function (label) {
if (label) { if (label) {
$('#title').html(label) $('#title').html(label);
page_generic.set_window_title(label) page_generic.set_window_title(label);
return return;
} }
var label = '' label = '';
var window_title = null var window_title = null;
if (Utils.check_view_file(view)) { if (Utils.check_view_file(view)) {
var complete_name = view.package.orig_name + '.' + view.file.name var complete_name = view.package.orig_name + '.' + view.file.name;
window_title = complete_name window_title = complete_name;
if (! view.file.path) if (!view.file.path);
view.file.path = config.paths.debomatic + '/' + view.distribution.name + '/pool/' + view.package.orig_name + '/' + complete_name view.file.path = config.paths.debomatic + '/' + view.distribution.name + '/pool/' + view.package.orig_name + '/' + complete_name;
label = complete_name + ' \ label = complete_name + '<a class="btn btn-link btn-lg" title="Download" href="' + view.file.path + '"> ' +
<a class="btn btn-link btn-lg" title="Download" href="' + view.file.path + '">\ '<span class="glyphicon glyphicon-download-alt"></span></a>';
<span class="glyphicon glyphicon-download-alt"></span>\ } else if (Utils.check_view_package(view))
</a>' label = view.package.orig_name;
}
else if (Utils.check_view_package(view))
label = view.package.orig_name
else if (Utils.check_view_distribution(view)) else if (Utils.check_view_distribution(view))
label = view.distribution.name label = view.distribution.name;
$('#title').html(label) $('#title').html(label);
if (window_title) if (window_title)
label = window_title label = window_title;
page_generic.set_window_title(label) page_generic.set_window_title(label);
}, },
clean: function() { clean: function () {
$('#title').html('') $('#title').html('');
page_generic.set_window_title() page_generic.set_window_title();
}
} }
};
var packages = { var packages = {
set: function (socket_data) { set: function (socket_data) {
packages.clean() packages.clean();
var tmp = Utils.clone(socket_data) var tmp = Utils.clone(socket_data);
tmp.file = null tmp.file = null;
view.packages = {} view.packages = {};
if (socket_data.distribution.packages && socket_data.distribution.packages.length > 0) { if (socket_data.distribution.packages && socket_data.distribution.packages.length > 0) {
socket_data.distribution.packages.forEach(function(p){ socket_data.distribution.packages.forEach(function (p) {
tmp.package = p tmp.package = p;
// get datestamp if package is clicked // 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>') $('#packages ul').append('<li id="package-' + p.orig_name + '"><a href="' +
view.packages[p.orig_name] = Utils.clone(p) 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() });
} packages.select();
else { } else {
$('#packages ul').append('<li class="text-muted">No packages yet</li>') $('#packages ul').append('<li class="text-muted">No packages yet</li>');
} }
packages.show() packages.show();
sticky.updateOffset() sticky.updateOffset();
}, },
clean: function () { clean: function () {
$('#packages ul').html('') $('#packages ul').html('');
}, },
get: function () { get: function () {
if (Utils.check_view_distribution(view)) { if (Utils.check_view_distribution(view)) {
var query_data = {} var query_data = {};
query_data.distribution = view.distribution query_data.distribution = view.distribution;
debug_socket("emit", _e.distribution_packages.get, query_data) debug_socket('emit', _e.distribution_packages.get, query_data);
socket.emit(_e.distribution_packages.get, query_data) socket.emit(_e.distribution_packages.get, query_data);
} }
}, },
select: function() { select: function () {
packages.unselect() packages.unselect();
if (Utils.check_view_package(view)) { 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() { unselect: function () {
$('#packages li').removeClass('active') $('#packages li').removeClass('active');
}, },
set_status: function (status_data) { set_status: function (status_data) {
// set status in view // set status in view
if ( view.distribution.name == status_data.distribution if (view.distribution.name == status_data.distribution && view.packages[status_data.package]) {
&& view.packages[status_data.package] ) view.packages[status_data.package].status = status_data.status;
{
view.packages[status_data.package].status = status_data.status
if (status_data.hasOwnProperty('success')) if (status_data.hasOwnProperty('success'))
view.packages[status_data.package].success = status_data.success view.packages[status_data.package].success = status_data.success;
else else
delete(view.packages[status_data.package].success) delete(view.packages[status_data.package].success);
} }
// and in html // and in html
var p_html = $("#packages li[id='package-"+ status_data.package + "'] a") var p_html = $('#packages li[id="package-' + status_data.package + '"] a');
p_html.find('span.icon').remove() p_html.find('span.icon').remove();
p_html.append(Utils.get_status_icon_html(status_data)) p_html.append(Utils.get_status_icon_html(status_data));
if (Utils.check_view_package(view) if (Utils.check_view_package(view) && view.package.orig_name == status_data.package && view.distribution.name == status_data.distribution) {
&& view.package.orig_name == status_data.package
&& view.distribution.name == status_data.distribution)
{
// in case user is watching this package, update also view.package // 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() { show: function () {
$("#packages").show() $('#packages').show();
}, },
hide: function() { hide: function () {
$("#packages").hide() $('#packages').hide();
}
} }
};
var files = { var files = {
set: function (socket_data) { set: function (socket_data) {
files.clean() files.clean();
var tmp = Utils.clone(socket_data) var tmp = Utils.clone(socket_data);
if (socket_data.package.files && socket_data.package.files.length > 0) { if (socket_data.package.files && socket_data.package.files.length > 0) {
// update view // update view
view.package.files = Utils.clone(socket_data.package.files) view.package.files = Utils.clone(socket_data.package.files);
// update html // update html
socket_data.package.files.forEach(function(f){ socket_data.package.files.forEach(function (f) {
tmp.file = 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>') var html_file = $('<li id="file-' + f.orig_name + '"><a title="' + f.orig_name + '" href="' +
html_file.on("click", function(){ Utils.from_view_to_hash(tmp) + '">' + f.name + '</a></li>');
files.select(this) html_file.on('click', function () {
}) files.select(this);
$('#logs ul').append(html_file) });
}) $('#logs ul').append(html_file);
$('#logs').show() });
files.select() $('#logs').show();
files.select();
} }
if (socket_data.package.debs && socket_data.package.debs.length > 0) { if (socket_data.package.debs && socket_data.package.debs.length > 0) {
// update view // update view
view.package.debs = Utils.clone(socket_data.package.debs) view.package.debs = Utils.clone(socket_data.package.debs);
// update.html // update.html
socket_data.package.debs.forEach(function(f){ 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 ul').append('<li><a title="' + f.orig_name + '" href="' + f.path + '">' +
}) f.name + '</a> <span>.' + f.extension + '</span></li>');
$('#debs').show() });
$('#debs').show();
} }
if (socket_data.package.sources && socket_data.package.sources.length > 0) { if (socket_data.package.sources && socket_data.package.sources.length > 0) {
// update view // update view
view.package.sources = Utils.clone(socket_data.package.sources) view.package.sources = Utils.clone(socket_data.package.sources);
// update html // update html
socket_data.package.sources.forEach(function(f){ socket_data.package.sources.forEach(function (f) {
$('#sources ul').append('<li><a title="'+ f.orig_name +'" href="' + f.path + '">' + f.name +'</a></li>') $('#sources ul').append('<li><a title="' + f.orig_name + '" href="' + f.path + '">' + f.name + '</a></li>');
}) })
$('#sources').show() $('#sources').show();
} }
files.show() files.show();
sticky.updateOffset() sticky.updateOffset();
}, },
clean: function() { clean: function () {
$('#logs ul').html(''); $('#logs ul').html('');
$('#logs').hide() $('#logs').hide();
$('#debs ul').html(''); $('#debs ul').html('');
$('#debs').hide(); $('#debs').hide();
$('#sources ul').html('') $('#sources ul').html('');
$('#sources').hide() $('#sources').hide();
files.hide() files.hide();
}, },
get: function () { get: function () {
if (Utils.check_view_package(view)) { if (Utils.check_view_package(view)) {
var query_data = {} var query_data = {};
query_data.distribution = view.distribution query_data.distribution = view.distribution;
query_data.package = view.package query_data.package = view.package;
debug_socket("emit", _e.package_files_list.get, query_data) debug_socket('emit', _e.package_files_list.get, query_data);
socket.emit(_e.package_files_list.get, query_data) socket.emit(_e.package_files_list.get, query_data);
} }
}, },
select: function() { select: function () {
files.show() files.show();
files.unselect() files.unselect();
if (Utils.check_view_file(view)) { 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'); $('#logs li').removeClass('active');
}, },
hide: function() { hide: function () {
$('#files').hide() $('#files').hide();
}, },
show: function() { show: function () {
$('#files').show() $('#files').show();
}, },
} };
var file = { var file = {
set: function(socket_data) { set: function (socket_data) {
view.file = Utils.clone(socket_data.file) view.file = Utils.clone(socket_data.file);
$("#file pre").html(socket_data.file.content) $('#file pre').html(socket_data.file.content);
$("#file").show() $('#file').show();
}, },
clean: function() { clean: function () {
$('#file pre').html('') $('#file pre').html('');
$('#file').hide() $('#file').hide();
}, },
append: function(new_content) { append: function (new_content) {
var content = $("#file pre") var content = $('#file pre');
content.append(new_content) content.append(new_content);
if (config.preferences.autoscroll) { if (config.preferences.autoscroll) {
// scroll down if file is covering footer // scroll down if file is covering footer
var file_height = $("#fileOffset").offset().top var file_height = $('#fileOffset').offset().top;
var footerOffset = $("footer").offset().top var footerOffset = $('footer').offset().top;
if (file_height > footerOffset) { if (file_height > footerOffset) {
debug(2, 'scoll down on new content') debug(2, 'scoll down on new content');
$('html,body').animate({ scrollTop: file_height }, 0); $('html,body').animate({
scrollTop: file_height
}, 0);
} }
} }
}, },
get: function() { get: function () {
if (Utils.check_view_file(view)) { if (Utils.check_view_file(view)) {
var query_data = {} var query_data = {};
query_data.distribution = view.distribution query_data.distribution = view.distribution;
query_data.package = view.package query_data.package = view.package;
query_data.file = view.file query_data.file = view.file;
query_data.file.content = null query_data.file.content = null;
// get a feedback to user while downloading file // get a feedback to user while downloading file
$("#file pre").html("Downloading file, please wait a while ...") $('#file pre').html('Downloading file, please wait a while ...');
$("#file").show() $('#file').show();
debug_socket("emit", _e.file.get, query_data) debug_socket('emit', _e.file.get, query_data);
socket.emit(_e.file.get, query_data) socket.emit(_e.file.get, query_data);
}
} }
} }
};
var breadcrumb = { var breadcrumb = {
update: function(label) { update: function (label) {
if (label) { if (label) {
$('.breadcrumb').html('<li class="active">' + label + '</li>') $('.breadcrumb').html('<li class="active">' + label + '</li>');
return return;
} }
hash = window.location.hash.replace('#', '') var hash = window.location.hash.replace('#', '');
var new_html = '' var new_html = '';
var new_hash = '#' var new_hash = '#';
var info = hash.split('/') var info = hash.split('/');
for (var i = 0; i < info.length ; i++) { for (var i = 0; i < info.length; i++) {
new_hash += info[i] new_hash += info[i];
if (i == (info.length - 1)) if (i == (info.length - 1))
new_html += '<li class="active">' + info[i] + '</li>' new_html += '<li class="active">' + info[i] + '</li>';
else else
new_html += '<li><a href="' + new_hash + '">' + info[i] + '</a>' new_html += '<li><a href="' + new_hash + '">' + info[i] + '</a>';
new_hash += '/' new_hash += '/';
}
$('.breadcrumb').html(new_html)
} }
$('.breadcrumb').html(new_html);
} }
};
// sticky sidebar // sticky sidebar
var sticky = { var sticky = {
init: function() { init: function () {
if (sidebarOffset == 0) if (sidebarOffset === 0)
return return;
if ($(window).scrollTop() > sidebarOffset) { if ($(window).scrollTop() > sidebarOffset) {
sticky.show() sticky.show();
} else { } else {
sticky.hide() sticky.hide();
sticky.updateOffset() sticky.updateOffset();
} }
}, },
start: function() { start: function () {
$(window).scroll(sticky.init) $(window).scroll(sticky.init);
}, },
stop: function() { stop: function () {
$(window).off("scroll") $(window).off('scroll');
}, },
reset: function() { reset: function () {
sticky.stop() sticky.stop();
sticky.update() sticky.update();
sticky.init() sticky.init();
sticky.start() sticky.start();
}, },
show: function() { show: function () {
if (config.preferences.sidebar) { if (config.preferences.sidebar) {
$("#sticky").addClass('fixed') $('#sticky').addClass('fixed');
} }
debug(2, "showing sticky") debug(2, 'showing sticky');
$("#sticky-package").fadeIn() $('#sticky-package').fadeIn();
}, },
hide: function() { hide: function () {
$("#sticky").removeClass('fixed') $('#sticky').removeClass('fixed');
$("#sticky-package").fadeOut(150) $('#sticky-package').fadeOut(150);
}, },
update: function() { update: function () {
sticky.updateOffset() sticky.updateOffset();
if (Utils.check_view_distribution(view)) 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)) { if (Utils.check_view_package(view)) {
$("#sticky-package .name").html(view.package.name) $('#sticky-package .name').html(view.package.name);
$("#sticky-package .version").html(view.package.version) $('#sticky-package .version').html(view.package.version);
sticky.set_status() sticky.set_status();
} }
}, },
updateOffset: function() { updateOffset: function () {
var sidebar = $("#files") var sidebar = $('#files');
sidebarOffset = sidebar.offset().top sidebarOffset = sidebar.offset().top;
}, },
set_status: function(status_data) { set_status: function (status_data) {
if (! status_data) { if (!status_data) {
status_data = {} status_data = {};
status_data.distribution = view.distribution.name status_data.distribution = view.distribution.name;
status_data.package = view.package.orig_name status_data.package = view.package.orig_name;
status_data.status = view.package.status status_data.status = view.package.status;
if (view.package.hasOwnProperty('success')) if (view.package.hasOwnProperty('success'))
status_data.success = view.package.success status_data.success = view.package.success;
} }
if ( Utils.check_view_package(view) if (Utils.check_view_package(view) && status_data.distribution == view.distribution.name && status_data.package == view.package.orig_name) {
&& status_data.distribution == view.distribution.name
&& status_data.package == view.package.orig_name)
{
// update html // update html
var info = Utils.get_status_icon_and_class(status_data) var info = Utils.get_status_icon_and_class(status_data);
var panel = $("#sticky-package-content") var panel = $('#sticky-package-content');
panel.removeClass() panel.removeClass();
panel.addClass('panel panel-' + info.className) panel.addClass('panel panel-' + info.className);
var div = $("#sticky-package .status") var div = $('#sticky-package .status');
div.find('span.icon').remove() div.find('span.icon').remove();
div.append(Utils.get_status_icon_html(status_data)) div.append(Utils.get_status_icon_html(status_data));
}
} }
} }
};
var error = { var error = {
set: function(socket_error) { set: function (socket_error) {
$("#error span").html(socket_error) $('#error span').html(socket_error);
error.view() error.view();
}, },
clean: function() { clean: function () {
$("#error").hide() $('#error').hide();
$("#error span").html('') $('#error span').html('');
}, },
view: function() { view: function () {
$("#error").fadeIn(100) $('#error').fadeIn(100);
title.set("Something is wrong ...") title.set('Something is wrong ...');
breadcrumb.update('Something is wrong ...') breadcrumb.update('Something is wrong ...');
file.clean() file.clean();
files.hide() files.hide();
unselect() unselect();
}, },
} };
var welcome = { var welcome = {
set: function(distributions) { set: function (distributions) {
welcome.clean() welcome.clean();
if(distributions.length < 1) { if (distributions.length < 1) {
$('#welcome').append('<p class="lead text-muted">There is no distribution at the moment</p>') $('#welcome').append('<p class="lead text-muted">There is no distribution at the moment</p>');
} } else {
else { distributions.forEach(function (name) {
distributions.forEach(function (name){ $('#welcome').append('<a class="btn btn-lg btn-primary" href="' + config.paths.distribution +
$('#welcome').append('<a class="btn btn-lg btn-primary" href="'+ config.paths.distribution + '#'+ name + '">' + name + '</a>'); '# ' + name + '">' + name + '</a>');
}); });
} }
}, },
show: function() { show: function () {
title.set("Please select a distribution") title.set('Please select a distribution');
breadcrumb.update("Select a distribution") breadcrumb.update('Select a distribution');
packages.hide() packages.hide();
file.clean() file.clean();
files.hide() files.hide();
unselect() unselect();
$("#welcome").show() $('#welcome').show();
}, },
clean: function() { clean: function () {
$("#welcome").html('') $('#welcome').html('');
}, },
hide: function() { hide: function () {
$("#welcome").hide() $('#welcome').hide();
}
} }
};
var preferences = function() { var preferences = function () {
if (! config.preferences.sidebar) { if (!config.preferences.sidebar) {
debug(2, "no sidebar - updating html") debug(2, 'no sidebar - updating html');
$("#sidebar").removeClass() $('#sidebar').removeClass();
$("#sidebar").addClass("col-md-12 row") $('#sidebar').addClass('col-md-12 row');
$("#packages").addClass("col-md-4") $('#packages').addClass('col-md-4');
$("#logs").addClass("col-md-4") $('#logs').addClass('col-md-4');
$("#files .others").addClass("col-md-4") $('#files .others').addClass('col-md-4');
$("#main").removeClass().addClass("col-md-12") $('#main').removeClass().addClass('col-md-12');
$("#sticky-package").addClass("on-top") $('#sticky-package').addClass('on-top');
} }
if (! config.preferences.file_background) { if (!config.preferences.file_background) {
$("#file pre").addClass("no-background") $('#file pre').addClass('no-background');
}
$("#file pre").css('font-size', config.preferences.file_fontsize)
} }
$('#file pre').css('font-size', config.preferences.file_fontsize);
};
var select = function() { var select = function () {
unselect() unselect();
if (Utils.check_view_distribution(view)) { if (Utils.check_view_distribution(view)) {
$("#distributions li[id='distribution-" + view.distribution.name + "']").addClass('active') $('#distributions li[id="distribution-' + view.distribution.name + '"]').addClass('active');
} }
packages.select() packages.select();
files.select() files.select();
} };
var unselect = function() { var unselect = function () {
$('#distributions li').removeClass('active') $('#distributions li').removeClass('active');
files.unselect() files.unselect();
packages.unselect() packages.unselect();
} };
var clean = function() { var clean = function () {
welcome.hide() welcome.hide();
title.clean() title.clean();
packages.clean() packages.clean();
files.clean() files.clean();
file.clean() file.clean();
unselect() unselect();
breadcrumb.update() breadcrumb.update();
error.clean() error.clean();
} };
var update = { var update = {
page: function(old_view) { page: function (old_view) {
if ( ! 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
|| ! Utils.check_view_distribution(old_view) populate();
|| ! Utils.check_view_distribution(view) return;
|| view.distribution.name != old_view.distribution.name } else if (!Utils.check_view_package(old_view) || !Utils.check_view_package(view) ||
|| ! view.package.orig_name view.package.orig_name != old_view.package.orig_name) { // new package view
) files.get();
{ // new distribution view file.get();
populate() } else if (!Utils.check_view_file(old_view) || !Utils.check_view_file(view) ||
return view.file.name != old_view.file.name) { // new file view
} file.get();
else if ( ! Utils.check_view_package(old_view) || }
! Utils.check_view_package(view) || update.view(view);
view.package.orig_name != old_view.package.orig_name ) },
{ // new package view view: function () {
files.get() error.clean();
file.get() title.set();
} breadcrumb.update();
else if ( ! Utils.check_view_file(old_view) || select();
! Utils.check_view_file(view) || sticky.reset();
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 () { var populate = function () {
clean() clean();
packages.get() packages.get();
files.get() files.get();
file.get() file.get();
update.view() update.view();
} };
this.start = function () { this.start = function () {
socket.on(config.events.error, function(socket_error) { socket.on(config.events.error, function (socket_error) {
debug_socket("received", config.events.error, socket_error) debug_socket('received', config.events.error, socket_error);
error.set(socket_error) error.set(socket_error);
}) });
socket.on(config.events.broadcast.distributions, function (socket_data) { socket.on(config.events.broadcast.distributions, function (socket_data) {
debug_socket("received", config.events.broadcast.distributions, socket_data) debug_socket('received', config.events.broadcast.distributions, socket_data);
welcome.set(socket_data) welcome.set(socket_data);
}) });
socket.on(_e.distribution_packages.set, function (socket_data){ socket.on(_e.distribution_packages.set, function (socket_data) {
debug_socket("received", _e.distribution_packages.set, socket_data) debug_socket('received', _e.distribution_packages.set, socket_data);
packages.set(socket_data) packages.set(socket_data);
}) });
socket.on(_e.distribution_packages.status, function (socket_data){ socket.on(_e.distribution_packages.status, function (socket_data) {
debug_socket("received", _e.distribution_packages.set, socket_data) debug_socket('received', _e.distribution_packages.set, socket_data);
packages.set_status(socket_data) packages.set_status(socket_data);
sticky.set_status(socket_data) sticky.set_status(socket_data);
}) });
socket.on(config.events.broadcast.status_update, function (socket_data){ socket.on(config.events.broadcast.status_update, function (socket_data) {
packages.set_status(socket_data) packages.set_status(socket_data);
sticky.set_status(socket_data) sticky.set_status(socket_data);
}) });
socket.on(_e.package_files_list.set, function (socket_data){ socket.on(_e.package_files_list.set, function (socket_data) {
debug_socket("received", _e.package_files_list.set, socket_data) debug_socket('received', _e.package_files_list.set, socket_data);
files.set(socket_data) files.set(socket_data);
}) });
socket.on(_e.file.set, function (socket_data) { socket.on(_e.file.set, function (socket_data) {
debug_socket("received", _e.file.set, socket_data) debug_socket('received', _e.file.set, socket_data);
file.set(socket_data) file.set(socket_data);
}) });
socket.on(_e.file_newcontent, function (socket_data) { socket.on(_e.file_newcontent, function (socket_data) {
debug_socket("received", _e.file_newcontent, socket_data) debug_socket('received', _e.file_newcontent, socket_data);
new_lines.push(socket_data.file.new_content) new_lines.push(socket_data.file.new_content);
}) });
$(window).on('hashchange', function() { $(window).on('hashchange', function () {
if (! __check_hash_makes_sense()) if (!__check_hash_makes_sense())
return return;
var old_view = Utils.clone(view) var old_view = Utils.clone(view);
var new_view = Utils.from_hash_to_view() var new_view = Utils.from_hash_to_view();
// reset current view // reset current view
view.distribution = Utils.clone(new_view.distribution) view.distribution = Utils.clone(new_view.distribution);
view.package = Utils.clone(new_view.package) view.package = Utils.clone(new_view.package);
if (view.packages[new_view.package.orig_name]) if (view.packages[new_view.package.orig_name])
view.package = Utils.clone(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) view.file = Utils.clone(new_view.file);
update.page(old_view) update.page(old_view);
$('html,body').animate({scrollTop: 0}, 0); $('html,body').animate({
debug(1, "changing view", "old:", old_view, "new:", view) scrollTop: 0
}, 0);
debug(1, 'changing view', 'old:', old_view, 'new:', view);
}); });
if (! __check_hash_makes_sense()) if (!__check_hash_makes_sense())
return return;
populate() populate();
// Init sticky-package back_on_top on click // Init sticky-package back_on_top on click
$("#sticky-package").on("click", function(){ $('#sticky-package').on('click', function () {
$('html,body').animate({scrollTop: 0}, 100); $('html,body').animate({
}) scrollTop: 0
}, 100);
});
// WORKAROUND: // WORKAROUND:
// when page is loaded sidebar has offset().top // when page is loaded sidebar has offset().top
...@@ -615,15 +601,15 @@ function Page_Distrubion(socket) ...@@ -615,15 +601,15 @@ function Page_Distrubion(socket)
// Append lines every 200 mills. // Append lines every 200 mills.
function watch_for_new_lines() { function watch_for_new_lines() {
if (new_lines.length > 0) { if (new_lines.length > 0) {
file.append(new_lines.join('')) file.append(new_lines.join(''));
new_lines = [] new_lines = [];
} }
setTimeout(watch_for_new_lines, 200); setTimeout(watch_for_new_lines, 200);
} }
watch_for_new_lines() watch_for_new_lines();
// Update html according with preferences // Update html according with preferences
preferences() preferences();
} };
} }
function Page_Generic() 'use strict';
{
var _e = config.events function Page_Generic() {
var _e = config.events;
function __get_status_html_id(status_data) { 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')) if (status_data.hasOwnProperty('package'))
result += '-' + status_data.package result += '-' + status_data.package;
return result return result;
} }
function __get_status_html_href(status_data) { 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')) if (status_data.hasOwnProperty('package'))
result += '/' + status_data.package.replace('_', '/') + '/datestamp' result += '/' + status_data.package.replace('_', '/') + '/datestamp';
return result return result;
} }
function __get_status_html_title(status_data) { 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')) if (status_data.hasOwnProperty('package'))
result += ' > ' + status_data.package result += ' > ' + status_data.package;
if (status_data.hasOwnProperty('uploader') && status_data.uploader.length > 0) if (status_data.hasOwnProperty('uploader') && status_data.uploader.length > 0)
result += ' by ' + status_data.uploader result += ' by ' + status_data.uploader;
return result return result;
} }
function __get_status_html_inner(status_data) { function __get_status_html_inner(status_data) {
if (status_data.hasOwnProperty('package')) if (status_data.hasOwnProperty('package'))
return status_data.package; return status_data.package;
return status_data.distribution return status_data.distribution;
} }
function __get_status_html(status_data) { function __get_status_html(status_data) {
var _s = status_data var _s = status_data;
var li = $('<li></li>') var li = $('<li></li>');
li.attr('id', __get_status_html_id(status_data)) li.attr('id', __get_status_html_id(status_data));
var button = $('<a></a>') var button = $('<a></a>');
button.addClass('btn btn-xs') button.addClass('btn btn-xs');
button.addClass(_s.status) button.addClass(_s.status);
button.attr('title', __get_status_html_title(_s)) button.attr('title', __get_status_html_title(_s));
button.attr('href', __get_status_html_href(_s)) button.attr('href', __get_status_html_href(_s));
button.html(__get_status_html_inner(_s)) button.html(__get_status_html_inner(_s));
var info = Utils.get_status_icon_and_class(_s) var info = Utils.get_status_icon_and_class(_s);
button.addClass('btn-' + info.className) button.addClass('btn-' + info.className);
// add icon // add icon
button.html(button.html() + ' ' + Utils.get_status_icon_html(_s)) button.html(button.html() + ' ' + Utils.get_status_icon_html(_s));
li.html(button) li.html(button);
var result = $('<div></div>') var result = $('<div></div>');
result.html(li) result.html(li);
return result.html() return result.html();
} }
var distributions = { var distributions = {
set: function(distributions) { set: function (distributions) {
$('#distributions ul').html(''); $('#distributions ul').html('');
if(distributions.length < 1) { if (distributions.length < 1) {
$('#distributions ul').append('<li><a title="There is no distribution at the moment" onclick="return false">None</li>') $('#distributions ul').append('<li><a title="There is no distribution at the moment" onclick="return false">None</li>');
} } else {
else { distributions.forEach(function (name) {
distributions.forEach(function (name){ $('#distributions ul').append('<li id="distribution-' + name + '"><a href="' + config.paths.distribution + '#' + name + '">' + name + '</a></li>');
$('#distributions ul').append('<li id="distribution-' + name +'"><a href="'+ config.paths.distribution + '#'+ name + '">' + name + '</a></li>');
}); });
if (window.location.pathname == config.paths.distribution) { 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)) { 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() ...@@ -72,107 +72,104 @@ function Page_Generic()
} }
var status = { var status = {
set: function(data_status) { set: function (data_status) {
$("#status ul").html('') $("#status ul").html('');
if (data_status.length > 0) { if (data_status.length > 0) {
data_status.forEach(function(s){ data_status.forEach(function (s) {
status.append(s) status.append(s);
}) })
} }
}, },
append: function(status_data) { append: function (status_data) {
$('#status .idle').hide() $('#status .idle').hide();
$("#status ul").append(__get_status_html(status_data)) $("#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) + "']") var li = $('#status li[id="' + __get_status_html_id(status_data) + '"]');
if (li.length > 0 if (li.length > 0 && status_data.hasOwnProperty('success')) {
&& status_data.hasOwnProperty('success'))
{
// Update color and icon // Update color and icon
li = $(li[0]) li = $(li[0]);
li.html($(__get_status_html(status_data)).children()) li.html($(__get_status_html(status_data)).children());
li.attr('id', '') li.attr('id', '');
// This is a chain to have a fadeOut and correctly // This is a chain to have a fadeOut and correctly
// delete status li from list. // delete status li from list.
// The first timemout fades out the status element. // The first timemout fades out the status element.
setTimeout(function() { setTimeout(function () {
li.children().fadeOut(config.status.delay.fadeOut) li.children().fadeOut(config.status.delay.fadeOut);
// Then resize list. // Then resize list.
setTimeout(function() { setTimeout(function () {
li.animate({width: 'toggle'}) li.animate({
}, config.status.delay.fadeOut) width: 'toggle'
});
}, config.status.delay.fadeOut);
// Finally remove status html // Finally remove status html
// and show idle label if necessary. // and show idle label if necessary.
setTimeout(function() { setTimeout(function () {
li.remove() li.remove();
if ($('#status li').length == 0) if ($('#status li').length === 0);
$('#status .idle').show() $('#status .idle').show();
}, config.status.delay.remove + 2000) // more delay on remove html }, config.status.delay.remove + 2000); // more delay on remove html
}, config.status.delay.remove) }, config.status.delay.remove);
} } else if (!status_data.hasOwnProperty('success')) {
else if (!status_data.hasOwnProperty('success')) { status.append(status_data);
status.append(status_data)
} }
}, },
} };
this.preferences = function() { this.preferences = function () {
if (config.preferences.header) { if (config.preferences.header) {
$("#pageheader").show() $('#pageheader').show();
$(".navbar .home-link").hide() $('.navbar .home-link').hide();
} } else {
else { $('#pageheader').hide();
$("#pageheader").hide() $('.navbar .home-link').show();
$(".navbar .home-link").show()
} }
if (config.preferences.glossy_theme) { if (config.preferences.glossy_theme) {
if ($("head").find("link[href='/external_libs/bootstrap-3.1.1-dist/css/bootstrap-theme.min.css']").length == 0) 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">') $('head').append('<link rel="stylesheet" href="/external_libs/bootstrap-3.1.1-dist/css/bootstrap-theme.min.css">');
} } else {
else { $('head').find('link[href="/external_libs/bootstrap-3.1.1-dist/css/bootstrap-theme.min.css"]').remove();
$("head").find("link[href='/external_libs/bootstrap-3.1.1-dist/css/bootstrap-theme.min.css']").remove()
}
} }
};
this.set_window_title = function (label) { this.set_window_title = function (label) {
var window_title_separator = ' \u00ab ' var window_title_separator = ' \u00ab ';
if (label) if (label)
window.document.title = label + window_title_separator + config.title window.document.title = label + window_title_separator + config.title;
else else
window.document.title = config.title window.document.title = config.title;
} };
this.start = function (socket) { this.start = function (socket) {
// update distributions // update distributions
socket.on(_e.broadcast.distributions, function(socket_distributions) { socket.on(_e.broadcast.distributions, function (socket_distributions) {
debug_socket("received", _e.broadcast.distributions, socket_distributions) debug_socket('received', _e.broadcast.distributions, socket_distributions);
distributions.set(socket_distributions) distributions.set(socket_distributions);
}); });
socket.on(_e.client.status, function(socket_status) { socket.on(_e.client.status, function (socket_status) {
debug_socket("received", _e.client.status, socket_status) debug_socket('received', _e.client.status, socket_status);
status.set(socket_status) status.set(socket_status);
}) });
socket.on(_e.broadcast.status_update, function(package_status) { socket.on(_e.broadcast.status_update, function (package_status) {
debug_socket("received", _e.broadcast.status_update, package_status) debug_socket('received', _e.broadcast.status_update, package_status);
status.update(package_status) status.update(package_status);
}) });
socket.on(_e.error, function(error) { socket.on(_e.error, function (error) {
console.error("socket > " + error) console.error('socket > ' + error);
}) });
} };
// select current page in navbar // select current page in navbar
if (window.location.pathname != config.paths.distribution) { 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 // update html according with preferences
this.preferences() this.preferences();
} }
'use strict';
function Preferences() { function Preferences() {
// update config.preferences according with user choices // update config.preferences according with user choices
var load = function () { var load = function () {
for (key in config.preferences) { for (var key in config.preferences) {
if ((value = localStorage.getItem(key))) { var value = localStorage.getItem(key);
debug(2, 'loading preference', key, value) if (value) {
config.preferences[key] = JSON.parse(value) debug(2, 'loading preference', key, value);
} config.preferences[key] = JSON.parse(value);
} }
} }
};
// set prefence // set prefence
var set = function (key, value) { var set = function (key, value) {
if (config.preferences.hasOwnProperty(key)) { if (config.preferences.hasOwnProperty(key)) {
debug(1, 'setting preference', key, value) debug(1, 'setting preference', key, value);
localStorage.setItem(key, value) localStorage.setItem(key, value);
config.preferences[key] = JSON.parse(value) config.preferences[key] = JSON.parse(value);
}
} }
};
// init prefence page // 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 // set view according with config.preferences
for (key in config.preferences) { for (var key in config.preferences) {
var element = $("#preferences #" + key) var element = $('#preferences #' + key);
if (element.attr('type') == "checkbox") { if (element.attr('type') == 'checkbox') {
element.prop('checked', config.preferences[key]) element.prop('checked', config.preferences[key]);
} } else {
else { element.val(config.preferences[key]);
element.val(config.preferences[key])
} }
} }
// on input change, set prefence // on input change, set prefence
$("#preferences input, #preferences select").change(function() { $('#preferences input, #preferences select').change(function () {
var key = $(this).attr('id') var key = $(this).attr('id');
var value = $(this).val() var value = $(this).val();
if ($(this).attr('type') == 'checkbox') if ($(this).attr('type') == 'checkbox')
value = $(this).is(':checked') value = $(this).is(':checked');
set(key,value) set(key, value);
// give to user an immediate feedback changing preferences // give to user an immediate feedback changing preferences
page_generic.preferences() page_generic.preferences();
}) });
} };
load() load();
} }
'use strict';
var Utils = { var Utils = {
from_hash_to_view: function (hash) { from_hash_to_view: function (hash) {
if (! hash ) if (!hash)
hash = window.location.hash hash = window.location.hash;
hash = hash.replace('#', '') hash = hash.replace('#', '');
info = hash.split('/'); var info = hash.split('/');
var view = {} var view = {};
view.distribution = {} view.distribution = {};
view.packages = {} view.packages = {};
view.package = {} view.package = {};
view.file = {} view.file = {};
if (info.length >= 1) { if (info.length >= 1) {
view.distribution.name = info[0]; view.distribution.name = info[0];
} }
if (info.length >= 3){ if (info.length >= 3) {
view.package.name = info[1]; view.package.name = info[1];
view.package.version = info[2]; 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) { if (info.length >= 4) {
view.file.name = info[3] view.file.name = info[3];
view.file.orig_name = view.package.orig_name + '.' + view.file.name view.file.orig_name = view.package.orig_name + '.' + view.file.name;
} }
return view return view;
}, },
from_view_to_hash: function (view) { from_view_to_hash: function (view) {
hash = "#" var hash = '#';
if (Utils.check_view_distribution(view)) { if (Utils.check_view_distribution(view)) {
hash = hash + view.distribution.name hash = hash + view.distribution.name;
if (Utils.check_view_package(view)) { 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)) 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) { check_view_distribution: function (view) {
return view && view.distribution && view.distribution.name return view && view.distribution && view.distribution.name;
}, },
check_view_package: function(view) { check_view_package: function (view) {
return Utils.check_view_distribution(view) && view.package && view.package.name && view.package.version && view.package.orig_name return Utils.check_view_distribution(view) && view.package && view.package.name && view.package.version && view.package.orig_name;
}, },
check_view_file: function(view) { check_view_file: function (view) {
return Utils.check_view_package(view) && view.file && view.file.name return Utils.check_view_package(view) && view.file && view.file.name;
}, },
get_status_icon_and_class: function (status_data) { get_status_icon_and_class: function (status_data) {
var _c = config.status.className var _c = config.status.className;
var _i = config.status.icons var _i = config.status.icons;
var _s = status_data var _s = status_data;
var className = null var className = null;
var icon = null var icon = null;
if (_s.hasOwnProperty('success')) { if (_s.hasOwnProperty('success')) {
if (_s.success == true) { if (_s.success === true) {
className = _c.success className = _c.success;
icon = _i.success icon = _i.success;
} } else {
else { className = _c.fail;
className = _c.fail icon = _i.fail;
icon = _i.fail
} }
} } else {
else { className = _c[_s.status];
className = _c[_s.status] icon = _i[_s.status];
icon = _i[_s.status]
} }
// do not change color if update or create and successed // do not change color if update or create and successed
if (_s.success == true && if (_s.success === true &&
_s.status != config.status.build) _s.status != config.status.build) {
{ className = _c[_s.status];
className = _c[_s.status]
} }
return { return {
className: className, className: className,
icon: icon icon: icon
} };
}, },
get_status_icon_html: function (status_data) { get_status_icon_html: function (status_data) {
info = Utils.get_status_icon_and_class(status_data) var info = Utils.get_status_icon_and_class(status_data);
return '<span class="icon glyphicon glyphicon-' + info.icon + '"></span>' return '<span class="icon glyphicon glyphicon-' + info.icon + '"></span>';
}, },
// clone an object via JSON // clone an object via JSON
clone: function (object) { clone: function (object) {
return JSON.parse(JSON.stringify(object)); return JSON.parse(JSON.stringify(object));
} }
} };
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment