gitlab-org--gitlab-foss/app/assets/javascripts/project.js

140 lines
4.5 KiB
JavaScript
Raw Normal View History

2017-01-11 22:49:57 -05:00
/* eslint-disable func-names, space-before-function-paren, wrap-iife, no-var, quotes, consistent-return, no-new, prefer-arrow-callback, no-return-assign, one-var, one-var-declaration-per-line, object-shorthand, comma-dangle, no-else-return, newline-per-chained-call, no-shadow, vars-on-top, prefer-template, max-len */
/* global ProjectSelect */
2017-03-11 01:45:34 -05:00
import Cookies from 'js-cookie';
2016-07-24 16:45:11 -04:00
(function() {
this.Project = (function() {
function Project() {
2017-07-25 06:56:41 -04:00
const $cloneOptions = $('ul.clone-options-dropdown');
const $projectCloneField = $('#project_clone');
const $cloneBtnText = $('a.clone-dropdown-btn span');
const selectedCloneOption = $cloneBtnText.text().trim();
if (selectedCloneOption.length > 0) {
$(`a:contains('${selectedCloneOption}')`, $cloneOptions).addClass('is-active');
}
2017-07-25 06:56:41 -04:00
$('a', $cloneOptions).on('click', (e) => {
const $this = $(e.currentTarget);
const url = $this.attr('href');
e.preventDefault();
$('.is-active', $cloneOptions).not($this).removeClass('is-active');
$this.toggleClass('is-active');
2017-07-25 06:56:41 -04:00
$projectCloneField.val(url);
$cloneBtnText.text($this.text());
2016-07-24 16:45:11 -04:00
return $('.clone').text(url);
});
// Ref switcher
2016-07-24 16:45:11 -04:00
this.initRefSwitcher();
$('.project-refs-select').on('change', function() {
return $(this).parents('form').submit();
});
$('.hide-no-ssh-message').on('click', function(e) {
Cookies.set('hide_no_ssh_message', 'false');
2016-07-24 16:45:11 -04:00
$(this).parents('.no-ssh-key-message').remove();
return e.preventDefault();
});
$('.hide-no-password-message').on('click', function(e) {
Cookies.set('hide_no_password_message', 'false');
2016-07-24 16:45:11 -04:00
$(this).parents('.no-password-message').remove();
return e.preventDefault();
});
this.projectSelectDropdown();
}
Project.prototype.projectSelectDropdown = function() {
new ProjectSelect();
$('.project-item-select').on('click', (function(_this) {
return function(e) {
return _this.changeProject($(e.currentTarget).val());
};
})(this));
};
Project.prototype.changeProject = function(url) {
return window.location = url;
};
Project.prototype.initRefSwitcher = function() {
2017-02-03 12:53:36 -05:00
var refListItem = document.createElement('li');
var refLink = document.createElement('a');
2016-11-02 07:31:00 -04:00
refLink.href = '#';
2016-07-24 16:45:11 -04:00
return $('.js-project-refs-dropdown').each(function() {
var $dropdown, selected;
$dropdown = $(this);
selected = $dropdown.data('selected');
return $dropdown.glDropdown({
data: function(term, callback) {
return $.ajax({
url: $dropdown.data('refs-url'),
data: {
ref: $dropdown.data('ref'),
search: term
},
dataType: "json"
2016-07-24 16:45:11 -04:00
}).done(function(refs) {
return callback(refs);
});
},
selectable: true,
filterable: true,
filterRemote: true,
2016-07-24 16:45:11 -04:00
filterByText: true,
2017-08-05 16:03:48 -04:00
inputFieldName: $dropdown.data('input-field-name'),
fieldName: $dropdown.data('field-name'),
2016-07-24 16:45:11 -04:00
renderRow: function(ref) {
2016-11-02 07:31:00 -04:00
var li = refListItem.cloneNode(false);
2016-07-24 16:45:11 -04:00
if (ref.header != null) {
li.className = 'dropdown-header';
li.textContent = ref.header;
2016-07-24 16:45:11 -04:00
} else {
2016-11-02 07:31:00 -04:00
var link = refLink.cloneNode(false);
if (ref === selected) {
2016-11-02 07:31:00 -04:00
link.className = 'is-active';
}
link.textContent = ref;
link.dataset.ref = ref;
li.appendChild(link);
2016-07-24 16:45:11 -04:00
}
2016-11-02 07:31:00 -04:00
return li;
2016-07-24 16:45:11 -04:00
},
id: function(obj, $el) {
return $el.attr('data-ref');
},
toggleLabel: function(obj, $el) {
return $el.text().trim();
},
clicked: function(options) {
const { e } = options;
e.preventDefault();
if ($('input[name="ref"]').length) {
2017-01-11 22:49:57 -05:00
var $form = $dropdown.closest('form');
var $visit = $dropdown.data('visit');
2017-08-15 15:53:41 -04:00
var shouldVisit = $visit ? true : $visit;
2017-01-11 22:49:57 -05:00
var action = $form.attr('action');
var divider = action.indexOf('?') === -1 ? '?' : '&';
2017-08-01 09:41:24 -04:00
if (shouldVisit) {
2017-08-15 14:16:42 -04:00
gl.utils.visitUrl(`${action}${divider}${$form.serialize()}`);
}
}
2016-07-24 16:45:11 -04:00
}
});
});
};
return Project;
})();
}).call(window);