aboutsummaryrefslogtreecommitdiffstats
path: root/lib/toaster/toastergui/static/js/main.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/toaster/toastergui/static/js/main.js')
-rwxr-xr-xlib/toaster/toastergui/static/js/main.js497
1 files changed, 497 insertions, 0 deletions
diff --git a/lib/toaster/toastergui/static/js/main.js b/lib/toaster/toastergui/static/js/main.js
new file mode 100755
index 000000000..4c236689d
--- /dev/null
+++ b/lib/toaster/toastergui/static/js/main.js
@@ -0,0 +1,497 @@
+// Create a namespace
+var yocto = yocto || {};
+
+
+// Utilities
+yocto.utils = function() {
+ return {
+ document: jQuery(document),
+ window: jQuery(window),
+ body: jQuery('body')
+ };
+}();
+
+// Links opening file browsers
+yocto.files = function() {
+ var links = jQuery('.file-type');
+ return {
+ init: function() {
+ links.each(this.each);
+ links.click(this.click);
+ },
+ each: function() {
+ var form = jQuery(this.hash);
+ var file = form.find('[type=file]');
+ file.change(function() {
+ form.trigger('submit');
+ });
+ },
+ click: function(e) {
+ var form = jQuery(this.hash);
+ var file = form.find('[type=file]');
+ file.trigger('click');
+ e.preventDefault();
+ }
+ };
+}();
+
+yocto.users = function() {
+ var table = jQuery('#user-list');
+ return {
+ init: function() {
+ this.permissions.init();
+ },
+ permissions: {
+ init: function() {
+ var inputs = table.find('[type=checkbox]');
+ inputs.removeAttr('disabled').removeAttr('checked');
+ inputs.click(this.click);
+ },
+ click: function() {
+ var checkbox = jQuery(this);
+ var siblings = checkbox.parents('tr').find('[name=' + this.name + ']');
+ var chain = jQuery('[class^="' + this.className + '"]');
+
+ if (checkbox.is(':checked')) {
+ siblings.removeAttr('checked');
+ chain.prop('checked', true);
+ chain.prop('disabled', true);
+ checkbox.prop('disabled', false);
+ }
+ else {
+ siblings.removeAttr('disabled').removeAttr('checked');
+ }
+ }
+ }
+ };
+}();
+
+yocto.branches = function() {
+ var modal = jQuery('#branchModal');
+ var triggers = jQuery('a.branchModal');
+ var branches = modal.find('table a');
+ var current = triggers.filter(':first');
+ return {
+ init: function() {
+ triggers.click(this.click);
+ branches.click(this.close);
+ },
+ click: function(e) {
+ current = jQuery(this);
+ modal.modal('show');
+ },
+ close: function() {
+ current.text(this.text);
+ modal.modal('hide');
+ }
+ };
+}();
+
+yocto.dependencies = function() {
+ var images = jQuery('.dependencies-graph');
+ var table = jQuery('.dependencies-table');
+ var input = jQuery('#recommended-show');
+ return {
+ init: function() {
+ input.removeAttr('checked');
+ input.click(this.click);
+ images.hover(this.in, this.out);
+ },
+ click: function() {
+ if (input.is(':checked')) {
+ images.addClass(this.id);
+ table.addClass(this.id);
+ }
+ else {
+ images.removeClass(this.id);
+ table.removeClass(this.id);
+ }
+ },
+ in: function() {
+ table.addClass('hover');
+ },
+ out: function() {
+ table.removeClass('hover');
+ }
+ }
+}();
+
+$('.dropdown-toggle').dropdown();
+$('.popover-toggle').popover();
+$('.alert').alert();
+
+// Initialise all
+yocto.init = function() {
+ yocto.files.init();
+ yocto.users.init();
+ yocto.dependencies.init();
+ yocto.branches.init();
+}();
+
+
+$(document).ready(function() {
+ /*
+ * Table filtering.
+ *
+ */
+ // Enable table filtering using the search input
+ /*$('.filter').on('keyup', function() {
+ var $this = $(this);
+ var target = $this.attr('data-filter');
+ var filter = $this.val().toLowerCase();
+ if (target) {
+ // Retrieve array of td's that this input provides filtering for
+ var candidates = $('td[data-filter=' + target + ']');
+ candidates.each(function() {
+ if (filter) {
+ var innerText = $(this).text().toLowerCase();
+ if (innerText.indexOf(filter) === -1) {
+ $(this).closest('tr').hide();
+ }
+ } else {
+ // Restore hidden rows
+ $(this).closest('tr').show();
+ }
+ });
+ }
+ });*/
+
+ /*
+ * Table sorting
+ *
+ */
+ // Init tablesorter plugin
+ //$('.tablesorter').tablesorter();
+
+ // Append sort icon to each table header
+ //$('.tablesorter th').append('&nbsp;<i class="sort icon-sort"></i>');
+
+ // Update/change sort icon (up or down) when sort happens
+ $('.tablesorter').on('sortEnd', function() {
+ $(this).find('th').each(function() {
+ var $this = $(this);
+ // sort icon for this th
+ var $icon = $(this).find('.sort');
+ // switch icon depending on current sort status
+ if ($this.hasClass('headerSortUp')) {
+ $icon.attr('class', 'sort icon-caret-up');
+ } else if ($this.hasClass('headerSortDown')) {
+ $icon.attr('class', 'sort icon-caret-down');
+ } else {
+ $icon.attr('class', 'sort');
+ }
+ });
+ });
+
+ /*
+ * Collapse plugin.
+ *
+ */
+ $('.collapse').on('hide', function() {
+ $(this).siblings('[class="icon-caret-down"]').attr('class', 'icon-caret-right');
+ $(this).parent().find('[class="icon-caret-down"]').attr('class', 'icon-caret-right');
+ });
+ $('.collapse').on('show', function() {
+ $(this).siblings('[class="icon-caret-right"]').attr('class', 'icon-caret-down');
+ $(this).parent().find('[class="icon-caret-right"]').attr('class', 'icon-caret-down');
+ });
+
+ /*
+ * PrettyPrint plugin.
+ *
+ */
+ // Init
+ prettyPrint();
+
+ /*
+ * Misc
+ *
+ */
+ // Prevent clicking on muted (disabled) link
+ /* $('a.muted, div.muted').click(function() {
+ return false;
+
+ // Show tooltip for disabled links
+ }).tooltip({
+ title: 'Link is not functional in this demo.',
+ delay: {
+ show: 400,
+ hide: 0
+ }
+ });*/
+
+ /*$('table').tooltip({
+ title: 'Sorting disabled',
+ delay: {
+ show: 400,
+ hide: 0
+ }
+ });*/
+
+ $('.info').tooltip();
+
+ // Box functions on project-build page
+ $('.box-close').click(function() {
+ $(this).closest('.box').hide(100);
+ });
+
+ $('[name=highlight-row]').click(function() {
+ var parent = jQuery(this).parents('tr:first');
+ if (this.type == 'radio') {
+ parent.siblings().removeClass('selected');
+ }
+ if (this.checked) {
+ parent.addClass('selected');
+ }
+ else {
+ parent.removeClass('selected');
+ }
+ });
+
+ /*$('a.error, a.warning').each(function() {
+ this.href = 'all-tasks.html?filter=' + this.className;
+ });
+
+ $('.icon-minus-sign.warning').each(function() {
+ jQuery(this).next('a').attr('href', 'all-tasks.html?filter=warning');
+ });
+
+ $('.icon-minus-sign.error').each(function() {
+ jQuery(this).next('a').attr('href', 'all-tasks.html?filter=error');
+ });
+
+ $('#failedbuild').each(function() {
+ this.href = '#';
+ });
+
+ if (location.href.search('filter=') > -1) {
+ var filter = location.href.split('filter=')[1];
+ var cells = jQuery('.' + filter);
+ //jQuery('tr').hide();
+ $("tbody > tr").hide();
+ cells.each(function() {
+ if($(this).is('a')) {
+ jQuery(this).parents('tr').show();
+ }
+ });
+ }*/
+
+ // Prevent invalid links from jumping page scroll
+ $('a[href=#]').click(function() {
+ return false;
+ });
+
+ jQuery('#project-project-files-search-results').each(function() {
+ jQuery('input.' + this.id).val(jQuery(this).text());
+ });
+
+ jQuery('.bar.building').each(function() {
+ var bar = jQuery(this);
+ bar.animate({
+ width: '100%'
+ }, {
+ duration: parseInt(bar.attr('data-time')),
+ complete: function() {
+ location.href = bar.attr('data-url');
+ }
+ });
+ });
+
+ jQuery('#project-build-packages').each(function() {
+ var link = this;
+ var size = jQuery('[href=#size]');
+ var dependencies = jQuery('[href=#dependencies]');
+ size.click(function() {
+ link.href = 'project-build-packages.html';
+ });
+ dependencies.click(function() {
+ link.href = 'project-build-packages-dependencies.html';
+ });
+ });
+
+ if (location.href.search('tab') !== -1) {
+ jQuery('[href=#' + location.href.split('tab=')[1] + ']').trigger('click');
+ }
+
+ jQuery('.tree a').each(function() {
+ var link = jQuery(this);
+ var parent = link.parents('li:first');
+ var child = parent.find('ul');
+ var prev = link.prev('i:first');
+ link.click(function() {
+ if (prev.attr('class') == 'icon-caret-down') {
+ child.slideUp('fast');
+ prev.attr('class', 'icon-caret-right');
+ }
+ else {
+ child.slideDown('fast');
+ prev.attr('class', 'icon-caret-down');
+ }
+ return false;
+ });
+ });
+
+ /*jQuery('#nav').each(function() {
+ var links = jQuery(this).find('a');
+ var split = location.href.split('/');
+ var file = split[split.length - 1].split('?')[0];
+ if (file == 'project-build-packages-busybox.html') {
+ file = 'project-build-packages.html';
+ }
+ else if (file == 'project-build-packages-dependencies.html') {
+ file = 'project-build-packages.html';
+ }
+ links.filter('[href="' + file + '"]').parent().addClass('active');
+ });*/
+
+ //Belen's additions
+
+ //make help tooltip and popovers work on click, mutually exclusive and dismiss them when clicking outside their area
+ //from http://fuzzytolerance.info/blog/quick-hack-one-bootstarp-popover-at-a-time/
+ //one problem: clicking inside the tooltip or popover should not dismiss it, but it currently does
+
+ // Global variables - cringe
+ var visibleTooltip;
+
+ //show help information
+ $(".get-help").tooltip({ container: 'body', html: true, delay: {show: 300} /* trigger: 'hover'*/});
+
+ //show help for task outcome on hover
+ $(".hover-help").hide();
+ $("tr").hover(function () {
+ $(this).find(".hover-help").show();
+ });
+ $("tr").mouseleave(function () {
+ $(this).find(".hover-help").hide();
+ });
+
+ /*
+ //only allow one tooltip at a time
+ $(".get-help").on('click', function(e) {
+ // don't fall through
+ e.stopPropagation();
+ var $this = $(this);
+ // check if the one clicked is now shown
+ if ($this.data('tooltip').tip().hasClass('in')) {
+ // if another was showing, hide it
+ visibleTooltip && visibleTooltip.tooltip('hide');
+ // then store the current tooltip
+ visibleTooltip = $this;
+ } else {
+ // if it was hidden, then nothing must be showing
+ visibleTooltip = '';
+ }
+ // dismiss tooltips when you click outside them
+ $('body').on("click", function (e) {
+ var $target = $(e.target),
+ inTooltip = $(e.target).closest('.popover').length > 0
+ //hide only if clicked on button or inside popover
+ if (!inTooltip) {
+ visibleTooltip.tooltip('hide');
+ visibleTooltip = '';
+ }
+ });
+ });
+ */
+
+ // Global variables - cringe
+ var visiblePopover;
+
+ // enable popovers
+ $('.depends > a , .brought_in_by > a, .recommends > a, .layer_commit > a').popover({html:true, container:'body', placement: 'left'});
+
+ // make sure on hover elements do not disappear while the pointer is inside them
+ // buggy: doesn't work if you hover over the same popover twice in a row
+
+ /*$('.depends > a , .brought_in_by > a, .recommends > a, .layer_commit').popover({
+ offset: 10,
+ trigger: 'manual',
+ animate: false,
+ html: true,
+ placement: 'left',
+ container: 'body',
+ template: '<div class="popover" onmouseover="$(this).mouseleave(function() {$(this).hide(); });"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'
+
+ }).click(function(e) {
+ $(this).popover('show');
+ });*/
+
+ /*
+ // only allow 1 tooltip at a time
+ $('.get-help').on('click', function(e) {
+ // don't fall through
+ e.stopPropagation();
+ var $this = $(this);
+ // check if the one clicked is now shown
+ if ($this.data('tooltip').tip().hasClass('in')) {
+ // if another was showing, hide it
+ visibleTooltip && visibleTooltip.tooltip('hide');
+ // then store the current popover
+ visibleTooltip = $this;
+ } else {
+ // if it was hidden, then nothing must be showing
+ visibleToolitp = '';
+ }
+ });
+ */
+
+ //only allow 1 popover at a time
+ $('.depends > a , .brought_in_by > a, .recommends > a, .layer_commit > a').on('click', function(e) {
+ // don't fall through
+ e.stopPropagation();
+ var $this = $(this);
+ // check if the one hovered over is now shown
+ if ($this.data('popover').tip().hasClass('in')) {
+ // if another was showing, hide it
+ visiblePopover && visiblePopover.popover('hide');
+ // then store the current popover
+ visiblePopover = $this;
+ } else {
+ // if it was hidden, then nothing must be showing
+ visiblePopover = '';
+ }
+ // dismiss popovers when you click outside them
+ $('body').on("click", function (e) {
+ var $target = $(e.target),
+ inPopover = $(e.target).closest('.popover').length > 0
+ //hide only if clicked on button or inside popover
+ if (!inPopover) {
+ visiblePopover.popover('hide');
+ visiblePopover = '';
+ }
+ });
+ });
+
+
+ /*
+ // hide all tooltips if any non-tooltip part of the body is clicked
+ // this does not work properly: clicking the tooltip will also dismiss the tootlip
+ $("body").on('click', function () {
+ $(".get-help").tooltip('hide');
+ visibleTootlip = '';
+ });*/
+
+
+
+ // hide all popovers if any non-popover part of the body is clicked
+ // this does not work properly: clicking the popover will also dismiss the popover
+ /*$("body").on('click', function () {
+ $('.depends > a , .brought_in_by > a, .recommends > a, .layer_commit > a').popover('hide');
+ visiblePopover = '';
+ });*/
+
+ //linking directly to tabs
+ $(function(){
+ var hash = window.location.hash;
+ hash && $('ul.nav a[href="' + hash + '"]').tab('show');
+
+ $('.nav-tabs a').click(function (e) {
+ $(this).tab('show');
+ //var scrollmem = $('body').scrollTop();
+ //window.location.hash = this.hash;
+ //$('html,body').scrollTop(scrollmem);
+ });
+ });
+
+
+});