Various fixes
This commit is contained in:
parent
6157338a46
commit
0395b5cb8f
|
@ -1,9 +0,0 @@
|
||||||
RosaABF.controller('PlatformsController', ['$scope', 'PlatformsService', function($scope, PlatformsService) {
|
|
||||||
$scope.platforms = null;
|
|
||||||
|
|
||||||
$scope.requesting = true;
|
|
||||||
PlatformsService.getPlatforms().then(function(platforms) {
|
|
||||||
$scope.requesting = false;
|
|
||||||
$scope.platforms = platforms;
|
|
||||||
});
|
|
||||||
}]);
|
|
|
@ -1,25 +0,0 @@
|
||||||
RosaABF.controller('ProjectInfoController', ['$scope', 'ProjectInfoService', 'ProjectSelectService',
|
|
||||||
function($scope, ProjectInfoService, ProjectSelectService) {
|
|
||||||
$scope.widget_title = "";
|
|
||||||
$scope.$watch(function() {
|
|
||||||
return ProjectSelectService.load_project_info;
|
|
||||||
}, function() {
|
|
||||||
var project = ProjectSelectService.load_project_info;
|
|
||||||
if(project) {
|
|
||||||
$scope.requesting = true;
|
|
||||||
ProjectSelectService.disable_pi = true;
|
|
||||||
ProjectInfoService.getProjectInfo(project).then(function(res) {
|
|
||||||
$scope.project = project;
|
|
||||||
$scope.project_info = res;
|
|
||||||
$scope.requesting = false;
|
|
||||||
$scope.widget_title = " | " + project;
|
|
||||||
ProjectSelectService.disable_pi = false;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$scope.project_info = null;
|
|
||||||
$scope.project = "";
|
|
||||||
$scope.widget_title = "";
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}]);
|
|
|
@ -1,7 +1,6 @@
|
||||||
RosaABF.controller('ProjectsController', ['$scope', 'ProjectsService', 'ProjectSelectService',
|
RosaABF.controller('ProjectsController', ['$scope', 'ProjectsService',
|
||||||
function($scope, ProjectsService, ProjectSelectService) {
|
function($scope, ProjectsService) {
|
||||||
$scope.projects = null;
|
$scope.projects = null;
|
||||||
$scope.ProjectSelectService = ProjectSelectService;
|
|
||||||
$scope.search = "";
|
$scope.search = "";
|
||||||
|
|
||||||
var promiseResolve = function(projects) {
|
var promiseResolve = function(projects) {
|
||||||
|
@ -15,10 +14,6 @@ function($scope, ProjectsService, ProjectSelectService) {
|
||||||
ProjectsService.getProjects(search).then(promiseResolve);
|
ProjectsService.getProjects(search).then(promiseResolve);
|
||||||
}
|
}
|
||||||
|
|
||||||
$scope.selectProject = function(project) {
|
|
||||||
ProjectSelectService.project = project;
|
|
||||||
}
|
|
||||||
|
|
||||||
$scope.requesting = true;
|
$scope.requesting = true;
|
||||||
ProjectsService.getProjects().then(promiseResolve);
|
ProjectsService.getProjects().then(promiseResolve);
|
||||||
}]);
|
}]);
|
|
@ -23,7 +23,6 @@ RosaABF.controller 'RepositoryProjectsController',
|
||||||
owner_name: $scope.owner_name
|
owner_name: $scope.owner_name
|
||||||
project_name: $scope.project_name
|
project_name: $scope.project_name
|
||||||
page: $scope.page
|
page: $scope.page
|
||||||
sSortDir_0: 'asc'
|
|
||||||
format: 'json'
|
format: 'json'
|
||||||
|
|
||||||
path = Routes.projects_list_platform_repository_path $scope.platform_id, $scope.repository_id
|
path = Routes.projects_list_platform_repository_path $scope.platform_id, $scope.repository_id
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
angular.module("RosaABF").factory('PlatformsService', ["$http", function($http) {
|
|
||||||
var PlatformsService = {};
|
|
||||||
|
|
||||||
PlatformsService.getPlatforms = function() {
|
|
||||||
return $http.get(Routes.platforms_path({ format: 'json' })).then(function(res) {
|
|
||||||
return res.data.platforms;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return PlatformsService;
|
|
||||||
}]);
|
|
|
@ -1,11 +0,0 @@
|
||||||
angular.module("RosaABF").factory('ProjectInfoService', ["$http", function($http) {
|
|
||||||
var ProjectInfoService = {};
|
|
||||||
|
|
||||||
ProjectInfoService.getProjectInfo = function(name_with_owner) {
|
|
||||||
return $http.get(Routes.project_info_path(name_with_owner, { format: 'json' })).then(function(res) {
|
|
||||||
return res.data.project_info;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return ProjectInfoService;
|
|
||||||
}]);
|
|
|
@ -1,10 +0,0 @@
|
||||||
angular.module("RosaABF").factory('ProjectSelectService', function() {
|
|
||||||
return {
|
|
||||||
project: "",
|
|
||||||
disable_bl: false,
|
|
||||||
disable_pi: false,
|
|
||||||
disable: function() {
|
|
||||||
return this.disable_bl || this.disable_pi;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
});
|
|
|
@ -1,500 +0,0 @@
|
||||||
/*!
|
|
||||||
* bootstrap-typeahead.js v0.0.3 (http://www.upbootstrap.com)
|
|
||||||
* Copyright 2012-2014 Twitter Inc.
|
|
||||||
* Licensed under MIT (https://github.com/biggora/bootstrap-ajax-typeahead/blob/master/LICENSE)
|
|
||||||
* See Demo: http://plugins.upbootstrap.com/bootstrap-ajax-typeahead
|
|
||||||
* Updated: 2014-02-09 02:4:38
|
|
||||||
*
|
|
||||||
* Modifications by Paul Warelis and Alexey Gordeyev
|
|
||||||
*/
|
|
||||||
!function($) {
|
|
||||||
|
|
||||||
"use strict"; // jshint ;_;
|
|
||||||
|
|
||||||
/* TYPEAHEAD PUBLIC CLASS DEFINITION
|
|
||||||
* ================================= */
|
|
||||||
|
|
||||||
var Typeahead = function(element, options) {
|
|
||||||
|
|
||||||
//deal with scrollBar
|
|
||||||
var defaultOptions=$.fn.typeahead.defaults;
|
|
||||||
if(options.scrollBar){
|
|
||||||
options.items=100;
|
|
||||||
options.menu='<ul class="typeahead dropdown-menu" style="max-height:220px;overflow:auto;"></ul>';
|
|
||||||
}
|
|
||||||
|
|
||||||
var that = this;
|
|
||||||
that.$element = $(element);
|
|
||||||
that.options = $.extend({}, $.fn.typeahead.defaults, options);
|
|
||||||
that.$menu = $(that.options.menu).insertAfter(that.$element);
|
|
||||||
|
|
||||||
// Method overrides
|
|
||||||
that.eventSupported = that.options.eventSupported || that.eventSupported;
|
|
||||||
that.grepper = that.options.grepper || that.grepper;
|
|
||||||
that.highlighter = that.options.highlighter || that.highlighter;
|
|
||||||
that.lookup = that.options.lookup || that.lookup;
|
|
||||||
that.matcher = that.options.matcher || that.matcher;
|
|
||||||
that.render = that.options.render || that.render;
|
|
||||||
that.onSelect = that.options.onSelect || null;
|
|
||||||
that.sorter = that.options.sorter || that.sorter;
|
|
||||||
that.source = that.options.source || that.source;
|
|
||||||
that.displayField = that.options.displayField || that.displayField;
|
|
||||||
that.valueField = that.options.valueField || that.valueField;
|
|
||||||
|
|
||||||
if (that.options.ajax) {
|
|
||||||
var ajax = that.options.ajax;
|
|
||||||
|
|
||||||
if (typeof ajax === 'string') {
|
|
||||||
that.ajax = $.extend({}, $.fn.typeahead.defaults.ajax, {
|
|
||||||
url: ajax
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
if (typeof ajax.displayField === 'string') {
|
|
||||||
that.displayField = that.options.displayField = ajax.displayField;
|
|
||||||
}
|
|
||||||
if (typeof ajax.valueField === 'string') {
|
|
||||||
that.valueField = that.options.valueField = ajax.valueField;
|
|
||||||
}
|
|
||||||
|
|
||||||
that.ajax = $.extend({}, $.fn.typeahead.defaults.ajax, ajax);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!that.ajax.url) {
|
|
||||||
that.ajax = null;
|
|
||||||
}
|
|
||||||
that.query = "";
|
|
||||||
} else {
|
|
||||||
that.source = that.options.source;
|
|
||||||
that.ajax = null;
|
|
||||||
}
|
|
||||||
that.shown = false;
|
|
||||||
that.listen();
|
|
||||||
};
|
|
||||||
|
|
||||||
Typeahead.prototype = {
|
|
||||||
constructor: Typeahead,
|
|
||||||
//=============================================================================================================
|
|
||||||
// Utils
|
|
||||||
// Check if an event is supported by the browser eg. 'keypress'
|
|
||||||
// * This was included to handle the "exhaustive deprecation" of jQuery.browser in jQuery 1.8
|
|
||||||
//=============================================================================================================
|
|
||||||
eventSupported: function(eventName) {
|
|
||||||
var isSupported = (eventName in this.$element);
|
|
||||||
|
|
||||||
if (!isSupported) {
|
|
||||||
this.$element.setAttribute(eventName, 'return;');
|
|
||||||
isSupported = typeof this.$element[eventName] === 'function';
|
|
||||||
}
|
|
||||||
|
|
||||||
return isSupported;
|
|
||||||
},
|
|
||||||
select: function() {
|
|
||||||
var $selectedItem = this.$menu.find('.active');
|
|
||||||
var value = $selectedItem.attr('data-value');
|
|
||||||
var text = this.$menu.find('.active a').text();
|
|
||||||
|
|
||||||
if (this.options.onSelect) {
|
|
||||||
this.options.onSelect({
|
|
||||||
value: value,
|
|
||||||
text: text
|
|
||||||
});
|
|
||||||
}
|
|
||||||
this.$element
|
|
||||||
.val(this.updater(text))
|
|
||||||
.change();
|
|
||||||
return this.hide();
|
|
||||||
},
|
|
||||||
updater: function(item) {
|
|
||||||
return item;
|
|
||||||
},
|
|
||||||
show: function() {
|
|
||||||
var pos = $.extend({}, this.$element.position(), {
|
|
||||||
height: this.$element[0].offsetHeight
|
|
||||||
});
|
|
||||||
|
|
||||||
this.$menu.css({
|
|
||||||
top: pos.top + pos.height,
|
|
||||||
left: pos.left
|
|
||||||
});
|
|
||||||
|
|
||||||
this.$menu.show();
|
|
||||||
this.shown = true;
|
|
||||||
return this;
|
|
||||||
},
|
|
||||||
hide: function() {
|
|
||||||
this.$menu.hide();
|
|
||||||
this.shown = false;
|
|
||||||
return this;
|
|
||||||
},
|
|
||||||
ajaxLookup: function() {
|
|
||||||
|
|
||||||
var query = $.trim(this.$element.val());
|
|
||||||
|
|
||||||
if (query === this.query) {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Query changed
|
|
||||||
this.query = query;
|
|
||||||
|
|
||||||
// Cancel last timer if set
|
|
||||||
if (this.ajax.timerId) {
|
|
||||||
clearTimeout(this.ajax.timerId);
|
|
||||||
this.ajax.timerId = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!query || query.length < this.ajax.triggerLength) {
|
|
||||||
// cancel the ajax callback if in progress
|
|
||||||
if (this.ajax.xhr) {
|
|
||||||
this.ajax.xhr.abort();
|
|
||||||
this.ajax.xhr = null;
|
|
||||||
this.ajaxToggleLoadClass(false);
|
|
||||||
}
|
|
||||||
return this.shown ? this.hide() : this;
|
|
||||||
}
|
|
||||||
|
|
||||||
function execute() {
|
|
||||||
this.ajaxToggleLoadClass(true);
|
|
||||||
|
|
||||||
// Cancel last call if already in progress
|
|
||||||
if (this.ajax.xhr)
|
|
||||||
this.ajax.xhr.abort();
|
|
||||||
|
|
||||||
var params = this.ajax.preDispatch ? this.ajax.preDispatch(query) : {
|
|
||||||
query: query
|
|
||||||
};
|
|
||||||
this.ajax.xhr = $.ajax({
|
|
||||||
url: this.ajax.url,
|
|
||||||
data: params,
|
|
||||||
success: $.proxy(this.ajaxSource, this),
|
|
||||||
type: this.ajax.method || 'get',
|
|
||||||
dataType: 'json'
|
|
||||||
});
|
|
||||||
this.ajax.timerId = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Query is good to send, set a timer
|
|
||||||
this.ajax.timerId = setTimeout($.proxy(execute, this), this.ajax.timeout);
|
|
||||||
|
|
||||||
return this;
|
|
||||||
},
|
|
||||||
ajaxSource: function(data) {
|
|
||||||
this.ajaxToggleLoadClass(false);
|
|
||||||
var that = this, items;
|
|
||||||
if (!that.ajax.xhr)
|
|
||||||
return;
|
|
||||||
if (that.ajax.preProcess) {
|
|
||||||
data = that.ajax.preProcess(data);
|
|
||||||
}
|
|
||||||
// Save for selection retreival
|
|
||||||
that.ajax.data = data;
|
|
||||||
|
|
||||||
// Manipulate objects
|
|
||||||
items = that.grepper(that.ajax.data) || [];
|
|
||||||
if (!items.length) {
|
|
||||||
return that.shown ? that.hide() : that;
|
|
||||||
}
|
|
||||||
|
|
||||||
that.ajax.xhr = null;
|
|
||||||
return that.render(items.slice(0, that.options.items)).show();
|
|
||||||
},
|
|
||||||
ajaxToggleLoadClass: function(enable) {
|
|
||||||
if (!this.ajax.loadingClass)
|
|
||||||
return;
|
|
||||||
this.$element.toggleClass(this.ajax.loadingClass, enable);
|
|
||||||
},
|
|
||||||
lookup: function(event) {
|
|
||||||
var that = this, items;
|
|
||||||
|
|
||||||
if (that.ajax) {
|
|
||||||
that.ajaxer();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
that.query = that.$element.val();
|
|
||||||
|
|
||||||
if (!that.query) {
|
|
||||||
return that.shown ? that.hide() : that;
|
|
||||||
}
|
|
||||||
|
|
||||||
items = that.grepper(that.source);
|
|
||||||
|
|
||||||
if (!items || !items.length) {
|
|
||||||
return that.shown ? that.hide() : that;
|
|
||||||
}
|
|
||||||
|
|
||||||
return that.render(items.slice(0, that.options.items)).show();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
matcher: function(item) {
|
|
||||||
return ~item.toLowerCase().indexOf(this.query.toLowerCase());
|
|
||||||
},
|
|
||||||
sorter: function(items) {
|
|
||||||
if (!this.options.ajax) {
|
|
||||||
var beginswith = [],
|
|
||||||
caseSensitive = [],
|
|
||||||
caseInsensitive = [],
|
|
||||||
item;
|
|
||||||
|
|
||||||
while (item = items.shift()) {
|
|
||||||
if (!item.toLowerCase().indexOf(this.query.toLowerCase()))
|
|
||||||
beginswith.push(item);
|
|
||||||
else if (~item.indexOf(this.query))
|
|
||||||
caseSensitive.push(item);
|
|
||||||
else
|
|
||||||
caseInsensitive.push(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
return beginswith.concat(caseSensitive, caseInsensitive);
|
|
||||||
} else {
|
|
||||||
return items;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
highlighter: function(item) {
|
|
||||||
var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&');
|
|
||||||
return item.replace(new RegExp('(' + query + ')', 'ig'), function($1, match) {
|
|
||||||
return '<strong>' + match + '</strong>';
|
|
||||||
});
|
|
||||||
},
|
|
||||||
render: function(items) {
|
|
||||||
var that = this, display, isString = typeof that.options.displayField === 'string';
|
|
||||||
|
|
||||||
items = $(items).map(function(i, item) {
|
|
||||||
if (typeof item === 'object') {
|
|
||||||
display = isString ? item[that.options.displayField] : that.options.displayField(item);
|
|
||||||
i = $(that.options.item).attr('data-value', item[that.options.valueField]);
|
|
||||||
} else {
|
|
||||||
display = item;
|
|
||||||
i = $(that.options.item).attr('data-value', item);
|
|
||||||
}
|
|
||||||
i.find('a').html(that.highlighter(display));
|
|
||||||
return i[0];
|
|
||||||
});
|
|
||||||
|
|
||||||
items.first().addClass('active');
|
|
||||||
this.$menu.html(items);
|
|
||||||
return this;
|
|
||||||
},
|
|
||||||
//------------------------------------------------------------------
|
|
||||||
// Filters relevent results
|
|
||||||
//
|
|
||||||
grepper: function(data) {
|
|
||||||
var that = this, items, display, isString = typeof that.options.displayField === 'string';
|
|
||||||
|
|
||||||
if (isString && data && data.length) {
|
|
||||||
if (data[0].hasOwnProperty(that.options.displayField)) {
|
|
||||||
items = $.grep(data, function(item) {
|
|
||||||
display = isString ? item[that.options.displayField] : that.options.displayField(item);
|
|
||||||
return that.matcher(display);
|
|
||||||
});
|
|
||||||
} else if (typeof data[0] === 'string') {
|
|
||||||
items = $.grep(data, function(item) {
|
|
||||||
return that.matcher(item);
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return this.sorter(items);
|
|
||||||
},
|
|
||||||
next: function(event) {
|
|
||||||
var active = this.$menu.find('.active').removeClass('active'),
|
|
||||||
next = active.next();
|
|
||||||
|
|
||||||
if (!next.length) {
|
|
||||||
next = $(this.$menu.find('li')[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.options.scrollBar){
|
|
||||||
var index=this.$menu.children("li").index(next);
|
|
||||||
if(index%8==0){
|
|
||||||
this.$menu.scrollTop(index*26);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
next.addClass('active');
|
|
||||||
},
|
|
||||||
prev: function(event) {
|
|
||||||
var active = this.$menu.find('.active').removeClass('active'),
|
|
||||||
prev = active.prev();
|
|
||||||
|
|
||||||
if (!prev.length) {
|
|
||||||
prev = this.$menu.find('li').last();
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.options.scrollBar){
|
|
||||||
|
|
||||||
var $li=this.$menu.children("li");
|
|
||||||
var total=$li.length-1;
|
|
||||||
var index=$li.index(prev);
|
|
||||||
|
|
||||||
if((total-index)%8==0){
|
|
||||||
this.$menu.scrollTop((index-7)*26);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
prev.addClass('active');
|
|
||||||
|
|
||||||
},
|
|
||||||
listen: function() {
|
|
||||||
this.$element
|
|
||||||
.on('focus', $.proxy(this.focus, this))
|
|
||||||
.on('blur', $.proxy(this.blur, this))
|
|
||||||
.on('keypress', $.proxy(this.keypress, this))
|
|
||||||
.on('keyup', $.proxy(this.keyup, this));
|
|
||||||
|
|
||||||
if (this.eventSupported('keydown')) {
|
|
||||||
this.$element.on('keydown', $.proxy(this.keydown, this))
|
|
||||||
}
|
|
||||||
|
|
||||||
this.$menu
|
|
||||||
.on('click', $.proxy(this.click, this))
|
|
||||||
.on('mouseenter', 'li', $.proxy(this.mouseenter, this))
|
|
||||||
.on('mouseleave', 'li', $.proxy(this.mouseleave, this))
|
|
||||||
},
|
|
||||||
move: function(e) {
|
|
||||||
if (!this.shown)
|
|
||||||
return
|
|
||||||
|
|
||||||
switch (e.keyCode) {
|
|
||||||
case 9: // tab
|
|
||||||
case 13: // enter
|
|
||||||
case 27: // escape
|
|
||||||
e.preventDefault();
|
|
||||||
break
|
|
||||||
|
|
||||||
case 38: // up arrow
|
|
||||||
e.preventDefault()
|
|
||||||
this.prev()
|
|
||||||
break
|
|
||||||
|
|
||||||
case 40: // down arrow
|
|
||||||
e.preventDefault()
|
|
||||||
this.next()
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
e.stopPropagation();
|
|
||||||
},
|
|
||||||
keydown: function(e) {
|
|
||||||
this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40, 38, 9, 13, 27])
|
|
||||||
this.move(e)
|
|
||||||
},
|
|
||||||
keypress: function(e) {
|
|
||||||
if (this.suppressKeyPressRepeat)
|
|
||||||
return
|
|
||||||
this.move(e)
|
|
||||||
},
|
|
||||||
keyup: function(e) {
|
|
||||||
switch (e.keyCode) {
|
|
||||||
case 40: // down arrow
|
|
||||||
case 38: // up arrow
|
|
||||||
case 16: // shift
|
|
||||||
case 17: // ctrl
|
|
||||||
case 18: // alt
|
|
||||||
break
|
|
||||||
|
|
||||||
case 9: // tab
|
|
||||||
case 13: // enter
|
|
||||||
if (!this.shown)
|
|
||||||
return
|
|
||||||
this.select()
|
|
||||||
break
|
|
||||||
|
|
||||||
case 27: // escape
|
|
||||||
if (!this.shown)
|
|
||||||
return
|
|
||||||
this.hide()
|
|
||||||
break
|
|
||||||
|
|
||||||
default:
|
|
||||||
if (this.ajax)
|
|
||||||
this.ajaxLookup()
|
|
||||||
else
|
|
||||||
this.lookup()
|
|
||||||
}
|
|
||||||
|
|
||||||
e.stopPropagation()
|
|
||||||
e.preventDefault()
|
|
||||||
},
|
|
||||||
focus: function(e) {
|
|
||||||
this.focused = true
|
|
||||||
},
|
|
||||||
blur: function(e) {
|
|
||||||
this.focused = false
|
|
||||||
if (!this.mousedover && this.shown)
|
|
||||||
this.hide()
|
|
||||||
},
|
|
||||||
click: function(e) {
|
|
||||||
e.stopPropagation()
|
|
||||||
e.preventDefault()
|
|
||||||
this.select()
|
|
||||||
this.$element.focus()
|
|
||||||
},
|
|
||||||
mouseenter: function(e) {
|
|
||||||
this.mousedover = true
|
|
||||||
this.$menu.find('.active').removeClass('active')
|
|
||||||
$(e.currentTarget).addClass('active')
|
|
||||||
},
|
|
||||||
mouseleave: function(e) {
|
|
||||||
this.mousedover = false
|
|
||||||
if (!this.focused && this.shown)
|
|
||||||
this.hide()
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/* TYPEAHEAD PLUGIN DEFINITION
|
|
||||||
* =========================== */
|
|
||||||
|
|
||||||
$.fn.typeahead = function(option) {
|
|
||||||
return this.each(function() {
|
|
||||||
var $this = $(this),
|
|
||||||
data = $this.data('typeahead'),
|
|
||||||
options = typeof option === 'object' && option;
|
|
||||||
if (!data)
|
|
||||||
$this.data('typeahead', (data = new Typeahead(this, options)));
|
|
||||||
if (typeof option === 'string')
|
|
||||||
data[option]();
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
$.fn.typeahead.defaults = {
|
|
||||||
source: [],
|
|
||||||
items: 8,
|
|
||||||
menu: '<ul class="typeahead dropdown-menu"></ul>',
|
|
||||||
item: '<li><a href="#"></a></li>',
|
|
||||||
displayField: 'name',
|
|
||||||
scrollBar:false,
|
|
||||||
valueField: 'id',
|
|
||||||
onSelect: function() {
|
|
||||||
},
|
|
||||||
ajax: {
|
|
||||||
url: null,
|
|
||||||
timeout: 300,
|
|
||||||
method: 'get',
|
|
||||||
triggerLength: 1,
|
|
||||||
loadingClass: null,
|
|
||||||
preDispatch: null,
|
|
||||||
preProcess: null
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
$.fn.typeahead.Constructor = Typeahead;
|
|
||||||
|
|
||||||
/* TYPEAHEAD DATA-API
|
|
||||||
* ================== */
|
|
||||||
|
|
||||||
$(function() {
|
|
||||||
$('body').on('focus.typeahead.data-api', '[data-provide="typeahead"]', function(e) {
|
|
||||||
var $this = $(this);
|
|
||||||
if ($this.data('typeahead'))
|
|
||||||
return;
|
|
||||||
e.preventDefault();
|
|
||||||
$this.typeahead($this.data());
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
}(window.jQuery);
|
|
|
@ -1,18 +0,0 @@
|
||||||
_.each $('input.typeahead'), (item) ->
|
|
||||||
item = $(item)
|
|
||||||
triggerLength = 1
|
|
||||||
|
|
||||||
if item.data('id')
|
|
||||||
onSelect = (i) ->
|
|
||||||
$(item.data('id')).val i.value
|
|
||||||
|
|
||||||
if item.attr('id') is 'to_project'
|
|
||||||
onSelect = (data) ->
|
|
||||||
pullUpdateToProject(data)
|
|
||||||
triggerLength = 3
|
|
||||||
|
|
||||||
item.typeahead
|
|
||||||
ajax:
|
|
||||||
url: item.data('ajax')
|
|
||||||
triggerLength: triggerLength
|
|
||||||
onSelect: onSelect
|
|
|
@ -1,106 +0,0 @@
|
||||||
/*
|
|
||||||
* Placeholder plugin for jQuery
|
|
||||||
* ---
|
|
||||||
* Copyright 2010, Daniel Stocks (http://webcloud.se)
|
|
||||||
* Released under the MIT, BSD, and GPL Licenses.
|
|
||||||
*/
|
|
||||||
(function($) {
|
|
||||||
function Placeholder(input) {
|
|
||||||
this.input = input;
|
|
||||||
if (input.attr('type') == 'password') {
|
|
||||||
this.handlePassword();
|
|
||||||
}
|
|
||||||
// Prevent placeholder values from submitting
|
|
||||||
$(input[0].form).submit(function() {
|
|
||||||
if (input.hasClass('placeholder') && input[0].value == input.attr('placeholder')) {
|
|
||||||
input[0].value = '';
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
Placeholder.prototype = {
|
|
||||||
show : function(loading) {
|
|
||||||
// FF and IE saves values when you refresh the page. If the user refreshes the page with
|
|
||||||
// the placeholders showing they will be the default values and the input fields won't be empty.
|
|
||||||
if (this.input[0].value === '' || (loading && this.valueIsPlaceholder())) {
|
|
||||||
if (this.isPassword) {
|
|
||||||
try {
|
|
||||||
this.input[0].setAttribute('type', 'text');
|
|
||||||
} catch (e) {
|
|
||||||
this.input.before(this.fakePassword.show()).hide();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.input.addClass('placeholder');
|
|
||||||
this.input[0].value = this.input.attr('placeholder');
|
|
||||||
}
|
|
||||||
},
|
|
||||||
hide : function() {
|
|
||||||
if (this.valueIsPlaceholder() && this.input.hasClass('placeholder')) {
|
|
||||||
this.input.removeClass('placeholder');
|
|
||||||
this.input[0].value = '';
|
|
||||||
if (this.isPassword) {
|
|
||||||
try {
|
|
||||||
this.input[0].setAttribute('type', 'password');
|
|
||||||
} catch (e) { }
|
|
||||||
// Restore focus for Opera and IE
|
|
||||||
this.input.show();
|
|
||||||
this.input[0].focus();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
valueIsPlaceholder : function() {
|
|
||||||
return this.input[0].value == this.input.attr('placeholder');
|
|
||||||
},
|
|
||||||
handlePassword: function() {
|
|
||||||
var input = this.input;
|
|
||||||
input.attr('realType', 'password');
|
|
||||||
this.isPassword = true;
|
|
||||||
// IE < 9 doesn't allow changing the type of password inputs
|
|
||||||
if ($.browser.msie && input[0].outerHTML) {
|
|
||||||
var fakeHTML = $(input[0].outerHTML.replace(/type=(['"])?password\1/gi, 'type=$1text$1'));
|
|
||||||
this.fakePassword = fakeHTML.val(input.attr('placeholder')).addClass('placeholder').focus(function() {
|
|
||||||
input.trigger('focus');
|
|
||||||
$(this).hide();
|
|
||||||
});
|
|
||||||
$(input[0].form).submit(function() {
|
|
||||||
fakeHTML.remove();
|
|
||||||
input.show()
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
var NATIVE_SUPPORT = !!("placeholder" in document.createElement( "input" ));
|
|
||||||
$.fn.placeholder = function() {
|
|
||||||
return NATIVE_SUPPORT ? this : this.each(function() {
|
|
||||||
var input = $(this);
|
|
||||||
var placeholder = new Placeholder(input);
|
|
||||||
placeholder.show(true);
|
|
||||||
input.focus(function() {
|
|
||||||
placeholder.hide();
|
|
||||||
});
|
|
||||||
input.blur(function() {
|
|
||||||
placeholder.show(false);
|
|
||||||
});
|
|
||||||
|
|
||||||
// On page refresh, IE doesn't re-populate user input
|
|
||||||
// until the window.onload event is fired.
|
|
||||||
if ($.browser.msie) {
|
|
||||||
$(window).load(function() {
|
|
||||||
if(input.val()) {
|
|
||||||
input.removeClass("placeholder");
|
|
||||||
}
|
|
||||||
placeholder.show(true);
|
|
||||||
});
|
|
||||||
// What's even worse, the text cursor disappears
|
|
||||||
// when tabbing between text inputs, here's a fix
|
|
||||||
input.focus(function() {
|
|
||||||
if(this.value == "") {
|
|
||||||
var range = this.createTextRange();
|
|
||||||
range.collapse(true);
|
|
||||||
range.moveStart('character', 0);
|
|
||||||
range.select();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})(jQuery);
|
|
|
@ -1,5 +1,4 @@
|
||||||
class Platforms::MassBuildsController < Platforms::BaseController
|
class Platforms::MassBuildsController < Platforms::BaseController
|
||||||
include DatatableHelper
|
|
||||||
|
|
||||||
before_action :authenticate_user!
|
before_action :authenticate_user!
|
||||||
skip_before_action :authenticate_user!, only: [:index, :get_list] if APP_CONFIG['anonymous_access']
|
skip_before_action :authenticate_user!, only: [:index, :get_list] if APP_CONFIG['anonymous_access']
|
||||||
|
|
|
@ -6,16 +6,12 @@ class Platforms::PlatformsController < Platforms::BaseController
|
||||||
|
|
||||||
def index
|
def index
|
||||||
authorize :platform
|
authorize :platform
|
||||||
respond_to do |format|
|
@platforms = PlatformPolicy::Scope.new(current_user, Platform).related.select(:name, :distrib_type)
|
||||||
format.html {}
|
|
||||||
|
|
||||||
format.json {
|
|
||||||
@platforms = PlatformPolicy::Scope.new(current_user, Platform).related
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
|
@repositories = @platform.repositories
|
||||||
|
@repositories = Repository.custom_sort(@repositories).paginate(page: current_page)
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
|
@ -161,9 +157,9 @@ class Platforms::PlatformsController < Platforms::BaseController
|
||||||
subject_params(Platform)
|
subject_params(Platform)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Private: before_action hook which loads Platform.
|
|
||||||
def load_platform
|
def load_platform
|
||||||
authorize @platform = Platform.find_cached(params[:id]), :show? if params[:id]
|
return unless params[:id]
|
||||||
|
authorize @platform = Platform.find_cached(params[:id]), :show?
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
class Platforms::RepositoriesController < Platforms::BaseController
|
class Platforms::RepositoriesController < Platforms::BaseController
|
||||||
include DatatableHelper
|
|
||||||
include FileStoreHelper
|
include FileStoreHelper
|
||||||
include RepositoriesHelper
|
|
||||||
include PaginateHelper
|
include PaginateHelper
|
||||||
|
|
||||||
before_action :authenticate_user!
|
before_action :authenticate_user!
|
||||||
|
@ -11,11 +9,6 @@ class Platforms::RepositoriesController < Platforms::BaseController
|
||||||
before_action :set_members, only: [:edit, :update]
|
before_action :set_members, only: [:edit, :update]
|
||||||
before_action -> { @repository = @platform.repositories.find(params[:id]) if params[:id] }
|
before_action -> { @repository = @platform.repositories.find(params[:id]) if params[:id] }
|
||||||
|
|
||||||
def index
|
|
||||||
@repositories = @platform.repositories
|
|
||||||
@repositories = Repository.custom_sort(@repositories).paginate(page: current_page)
|
|
||||||
end
|
|
||||||
|
|
||||||
def show
|
def show
|
||||||
params[:per_page] = 30
|
params[:per_page] = 30
|
||||||
end
|
end
|
||||||
|
@ -128,7 +121,7 @@ class Platforms::RepositoriesController < Platforms::BaseController
|
||||||
|
|
||||||
# @total_projects = @projects.count
|
# @total_projects = @projects.count
|
||||||
@projects = @projects.by_owner(params[:owner_name]).
|
@projects = @projects.by_owner(params[:owner_name]).
|
||||||
search(params[:project_name]).order("projects.name #{sort_dir}")
|
search(params[:project_name]).order("projects.name asc")
|
||||||
|
|
||||||
@total_items = @projects.count
|
@total_items = @projects.count
|
||||||
@projects = @projects.paginate(paginate_params)
|
@projects = @projects.paginate(paginate_params)
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
class Projects::ProjectsController < Projects::BaseController
|
class Projects::ProjectsController < Projects::BaseController
|
||||||
include DatatableHelper
|
|
||||||
include ProjectsHelper
|
include ProjectsHelper
|
||||||
|
|
||||||
before_action :authenticate_user!
|
before_action :authenticate_user!
|
||||||
|
@ -20,35 +19,6 @@ class Projects::ProjectsController < Projects::BaseController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def project_info
|
|
||||||
authorize @project
|
|
||||||
respond_to do |format|
|
|
||||||
format.json {
|
|
||||||
@github_basic_info = @project.github_data
|
|
||||||
@commits = []
|
|
||||||
@project.github_branches.each do |branch|
|
|
||||||
last_commit_info = @project.github_last_commit(branch.name)[0]
|
|
||||||
if last_commit_info
|
|
||||||
last_commit = {
|
|
||||||
branch: branch.name,
|
|
||||||
url: last_commit_info['html_url'],
|
|
||||||
sha: last_commit_info['sha'],
|
|
||||||
message: last_commit_info['commit']['message']
|
|
||||||
}
|
|
||||||
if last_commit_info['committer']
|
|
||||||
last_commit[:committer_login] = last_commit_info['committer']['login']
|
|
||||||
last_commit[:committer_url] = last_commit_info['committer']['html_url']
|
|
||||||
else
|
|
||||||
last_commit[:committer_login] = last_commit_info['commit']['author']['name']
|
|
||||||
last_commit[:committer_url] = ''
|
|
||||||
end
|
|
||||||
@commits << last_commit
|
|
||||||
end
|
|
||||||
end
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def dashboard
|
def dashboard
|
||||||
authorize :project
|
authorize :project
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
module DatatableHelper
|
|
||||||
def page
|
|
||||||
(params[:iDisplayStart].to_i/(params[:iDisplayLength].present? ? params[:iDisplayLength] : 25).to_i).to_i + 1
|
|
||||||
end
|
|
||||||
|
|
||||||
def per_page
|
|
||||||
params[:iDisplayLength].present? ? params[:iDisplayLength] : 25
|
|
||||||
end
|
|
||||||
|
|
||||||
def sort_dir
|
|
||||||
params[:sSortDir_0] == 'asc' ? 'asc' : 'desc'
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
|
@ -1,3 +0,0 @@
|
||||||
module RepositoriesHelper
|
|
||||||
|
|
||||||
end
|
|
|
@ -1,8 +1,4 @@
|
||||||
- set_meta_tags title: t('layout.contact.page_header')
|
- set_meta_tags title: t('layout.contact.page_header')
|
||||||
- set_meta_tags og: { title: t('layout.contact.page_header'),
|
|
||||||
description: t('layout.contact.subheader') }
|
|
||||||
- set_meta_tags twitter: { title: t('layout.contact.page_header'),
|
|
||||||
description: t('layout.contact.subheader') }
|
|
||||||
|
|
||||||
.row
|
.row
|
||||||
.col-md-10.col-md-offset-1
|
.col-md-10.col-md-offset-1
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
- content_for :sidebar do
|
|
||||||
|
|
||||||
.tos_sidebar
|
|
||||||
%h3= link_to t("layout.tos.begin"), '#'
|
|
||||||
%ul
|
|
||||||
%li= link_to " I. #{t("layout.tos.account_terms")}", '#Account_Terms'
|
|
||||||
%li= link_to " II. #{t("layout.tos.cancellation_and_termination")}", '#Cancellation_and_Termination'
|
|
||||||
%li= link_to "III. #{t("layout.tos.service_modifications")}", '#Service_Modifications'
|
|
||||||
%li= link_to " IV. #{t("layout.tos.copyright_and_ownership")}", '#Copyright_and_Ownership'
|
|
||||||
%li= link_to " V. #{t("layout.tos.general_conditions")}", '#General_Conditions'
|
|
|
@ -1,203 +0,0 @@
|
||||||
- set_meta_tags og: { title: 'Terms of Service',
|
|
||||||
description: t('tour.meta_description') }
|
|
||||||
- set_meta_tags twitter: { title: 'Terms of Service',
|
|
||||||
description: t('tour.meta_description') }
|
|
||||||
|
|
||||||
- render 'tos_sidebar'
|
|
||||||
|
|
||||||
.tos
|
|
||||||
%a{name: '#'}
|
|
||||||
%h1 Terms of Service
|
|
||||||
|
|
||||||
%p
|
|
||||||
By using the ABF web site ("Service"), you are agreeing to be bound by the
|
|
||||||
following terms and conditions ("Terms of Service"). IF YOU ARE ENTERING INTO THIS AGREEMENT ON BEHALF OF A COMPANY
|
|
||||||
OR OTHER LEGAL ENTITY, YOU REPRESENT THAT YOU HAVE THE AUTHORITY TO BIND SUCH
|
|
||||||
ENTITY, ITS AFFILIATES AND ALL USERS WHO ACCESS OUR SERVICES THROUGH YOUR
|
|
||||||
ACCOUNT TO THESE TERMS AND CONDITIONS, IN WHICH CASE THE TERMS "YOU" OR "YOUR"
|
|
||||||
SHALL REFER TO SUCH ENTITY, ITS AFFILIATES AND USERS ASSOCIATED WITH IT. IF
|
|
||||||
YOU DO NOT HAVE SUCH AUTHORITY, OR IF YOU DO NOT AGREE WITH THESE TERMS AND
|
|
||||||
CONDITIONS, YOU MUST NOT ACCEPT THIS AGREEMENT AND MAY NOT USE THE SERVICES.
|
|
||||||
|
|
||||||
%p
|
|
||||||
Openmandriva reserves the right to update and change the Terms of Service from time
|
|
||||||
to time without notice. Any new features that augment or enhance the current
|
|
||||||
Service, including the release of new tools and resources, shall be subject
|
|
||||||
to the Terms of Service. Continued use of the Service after any such changes
|
|
||||||
shall constitute your consent to such changes. You can review the most current
|
|
||||||
version of the Terms of Service at any time at: #{ link_to tos_url }
|
|
||||||
|
|
||||||
%p
|
|
||||||
Violation of any of the terms below will result in the termination of your
|
|
||||||
Account. While Openmandriva prohibits such conduct and Content on the Service, you
|
|
||||||
understand and agree that Openmandriva cannot be responsible for the Content posted
|
|
||||||
on the Service and you nonetheless may be exposed to such materials. You agree
|
|
||||||
to use the Service at your own risk.
|
|
||||||
|
|
||||||
%a{name: 'Account_Terms'}
|
|
||||||
%h2 I. Account Terms
|
|
||||||
|
|
||||||
%ol
|
|
||||||
%li
|
|
||||||
You must be 13 years or older to use this Service.
|
|
||||||
%li
|
|
||||||
You must be a human. Accounts registered by “bots” or other automated
|
|
||||||
methods are not permitted.
|
|
||||||
%li
|
|
||||||
To register in ABF, you should provide your legal full name and a valid email address.
|
|
||||||
It is also possible to register using Google, Facebook or Github account.
|
|
||||||
%li
|
|
||||||
You are responsible for maintaining the security of your account and password.
|
|
||||||
Openmandriva cannot and will not be liable for any loss or damage from your
|
|
||||||
failure to comply with this security obligation.
|
|
||||||
%li
|
|
||||||
You are responsible for all Content posted and activity that occurs under your
|
|
||||||
account (even when Content is posted by others who have accounts under
|
|
||||||
your account).
|
|
||||||
%li
|
|
||||||
One person or legal entity may not maintain more than one free account.
|
|
||||||
%li
|
|
||||||
You may not use the Service for any illegal or unauthorized purpose. You must
|
|
||||||
not, in the use of the Service, violate any laws in your jurisdiction
|
|
||||||
(includingbut not limited to copyright or trademark laws).
|
|
||||||
|
|
||||||
%a{name: 'Cancellation_and_Termination'}
|
|
||||||
%h2 II. Cancellation and Termination
|
|
||||||
|
|
||||||
%ol
|
|
||||||
%li
|
|
||||||
To cancel your account, we need an email request sent from the same address as
|
|
||||||
the one you are registered with. An email request to cancel your account is necessary.
|
|
||||||
%li
|
|
||||||
All the content from your personal platform repositories will be immediately deleted
|
|
||||||
from the Service upon cancellation. This information cannot be recovered once your
|
|
||||||
account is canceled. Any content committed by you to repositories of other platforms
|
|
||||||
will remain in place until owners of that platforms cancel their accounts.
|
|
||||||
%li
|
|
||||||
Openmandriva has the right to suspend or terminate your account and refuse any and all current
|
|
||||||
or future use of the Service, or any other Openmandriva service, for one of the following reasons:
|
|
||||||
%ul
|
|
||||||
%li
|
|
||||||
your bandwidth or server CPU usage significantly exceeds the average bandwidth or
|
|
||||||
server CPU usage (as determined ABF administrators) of other Openmandriva customers.
|
|
||||||
%li
|
|
||||||
content uploaded by you to Openmandriva servers violates the laws of one of the countries where
|
|
||||||
the storage servers reside. Currently these countries include Russian Federation,
|
|
||||||
Switzerland and Germany. This list can be extended or changed in future;
|
|
||||||
if this is the case, we will notify ABF users in our blog in advance.
|
|
||||||
%li
|
|
||||||
you violate one of the statements from this Terms of Service.
|
|
||||||
If any of these events happens, Openmandriva representatives will temporary block your account,
|
|
||||||
remove forbidden content and contact you to discuss possible ways to resolve the problematic
|
|
||||||
situation. Once the solution is found, your account will be unblocked.
|
|
||||||
|
|
||||||
%a{name: 'Service_Modifications'}
|
|
||||||
%h2 III. Modifications to the Service and Conditions
|
|
||||||
|
|
||||||
%ol
|
|
||||||
%li
|
|
||||||
Openmandriva reserves the right at any time and from time to time to modify or discontinue,
|
|
||||||
temporarily or permanently, the Service (or any part thereof) with or without notice.
|
|
||||||
%li
|
|
||||||
Conditions of all Services are subject to change upon 30 days notice from us.
|
|
||||||
Such notice may be provided at any time by posting the changes to the Service Site
|
|
||||||
(#{ link_to root_url[0..-2], root_url })
|
|
||||||
%li
|
|
||||||
Openmandriva shall not be liable to you or to any third party for any modification, suspension
|
|
||||||
or discontinuance of the Service.
|
|
||||||
|
|
||||||
%a{name: 'Copyright_and_Ownership'}
|
|
||||||
%h2 IV. Copyright and Content Ownership
|
|
||||||
|
|
||||||
%ol
|
|
||||||
%li
|
|
||||||
We claim no intellectual property rights over the material you provide to the
|
|
||||||
Service. Your profile and materials uploaded remain yours. However, by setting
|
|
||||||
your pages to be viewed publicly, you agree to allow others to view your Content.
|
|
||||||
By setting your repositories to be viewed publicly, you agree to allow others
|
|
||||||
to view and fork your repositories.
|
|
||||||
%li
|
|
||||||
Openmandriva does not pre-screen Content, but Openmandriva and its designee have the right
|
|
||||||
(but not the obligation) in their sole discretion to refuse or remove any
|
|
||||||
Content that is available via the Service.
|
|
||||||
%li
|
|
||||||
You shall defend Openmandriva against any claim, demand, suit or proceeding made or
|
|
||||||
brought against Openmandriva by a third party alleging that Your Content,
|
|
||||||
or Your use of the Service in violation of this Agreement, infringes or
|
|
||||||
misappropriates the intellectual property rights of a third party or violates
|
|
||||||
applicable law, and shall indemnify Openmandriva for any damages finally awarded against,
|
|
||||||
and for reasonable attorney’s fees incurred by, Openmandriva in connection with any such
|
|
||||||
claim, demand, suit or proceeding; provided, that Openmandriva (a) promptly gives You
|
|
||||||
written notice of the claim, demand, suit or proceeding; (b) gives You sole
|
|
||||||
control of the defense and settlement of the claim, demand, suit or proceeding
|
|
||||||
(provided that You may not settle any claim, demand, suit or proceeding unless
|
|
||||||
the settlement unconditionally releases Openmandriva of all liability); and (c) provides
|
|
||||||
to You all reasonable assistance, at Your expense.
|
|
||||||
%li
|
|
||||||
The look and feel of the Service is copyright ©
|
|
||||||
= Date.today.year
|
|
||||||
Openmandriva Association. All rights reserved.
|
|
||||||
You may not duplicate, copy, or reuse any portion of the HTML/CSS, Javascript, or
|
|
||||||
visual design elements or concepts without express written permission from Openmandriva.
|
|
||||||
|
|
||||||
%a{name: 'General_Conditions'}
|
|
||||||
%h2 V. General Conditions
|
|
||||||
|
|
||||||
%ol
|
|
||||||
%li
|
|
||||||
Your use of the Service is at your sole risk. The service is provided on an “as is”
|
|
||||||
and “as available” basis.
|
|
||||||
%li
|
|
||||||
Technical support is only garanteed for paying account holders and is only available
|
|
||||||
via email. Support is available in English and Russian.
|
|
||||||
%li
|
|
||||||
You understand that Openmandriva uses third party vendors and hosting partners to provide
|
|
||||||
the necessary hardware, software, networking, storage, and related technology
|
|
||||||
required to run the Service.
|
|
||||||
%li
|
|
||||||
We may, but have no obligation to, remove Content and Accounts containing Content
|
|
||||||
that we determine in our sole discretion are unlawful, offensive, threatening,
|
|
||||||
libelous, defamatory, pornographic, obscene or otherwise objectionable or violates
|
|
||||||
any party’s intellectual property or these Terms of Service.
|
|
||||||
%li
|
|
||||||
Verbal, physical, written or other abuse (including threats of abuse or retribution)
|
|
||||||
of any Openmandriva customer, employee, member, or officer will result in immediate account
|
|
||||||
termination.
|
|
||||||
%li
|
|
||||||
You understand that the technical processing and transmission of the Service,
|
|
||||||
including your Content, may be transfered unencrypted and involve (a) transmissions
|
|
||||||
over various networks; and (b) changes to conform and adapt to technical requirements
|
|
||||||
of connecting networks or devices.
|
|
||||||
%li
|
|
||||||
You must not upload, post, host, or transmit unsolicited email, SMSs, or “spam” messages.
|
|
||||||
%li
|
|
||||||
You must not transmit any worms or viruses or any code of a destructive nature.
|
|
||||||
%li
|
|
||||||
Openmandriva does not warrant that (i) the service will meet your specific requirements,
|
|
||||||
(ii) the service will be uninterrupted, timely, secure, or error-free, (iii) the
|
|
||||||
results that may be obtained from the use of the service will be accurate or
|
|
||||||
reliable, (iv) the quality of any products, services, information, or other material
|
|
||||||
purchased or obtained by you through the service will meet your expectations, and
|
|
||||||
(v) any errors in the Service will be corrected.
|
|
||||||
%li
|
|
||||||
You expressly understand and agree that Openmandriva shall not be liable for any direct,
|
|
||||||
indirect, incidental, special, consequential or exemplary damages, including but
|
|
||||||
not limited to, damages for loss of profits, goodwill, use, data or other
|
|
||||||
intangible losses (even if Openmandriva has been advised of the possibility of such damages),
|
|
||||||
resulting from: (i) the use or the inability to use the service; (ii) the cost of
|
|
||||||
procurement of substitute goods and services resulting from any goods, data,
|
|
||||||
information or services purchased or obtained or messages received or transactions
|
|
||||||
entered into through or from the service; (iii) unauthorized access to or alteration
|
|
||||||
of your transmissions or data; (iv) statements or conduct of any third party on the
|
|
||||||
service; (v) or any other matter relating to the service.
|
|
||||||
%li
|
|
||||||
The failure of Openmandriva to exercise or enforce any right or provision of the Terms of
|
|
||||||
Service shall not constitute a waiver of such right or provision. The Terms of
|
|
||||||
Service constitutes the entire agreement between you and Openmandriva and govern your use of
|
|
||||||
the Service, superseding any prior agreements between you and Openmandriva (including, but
|
|
||||||
not limited to, any prior versions of the Terms of Service). You agree that these
|
|
||||||
Terms of Service and Your use of the Service are governed under European law.
|
|
||||||
|
|
||||||
%p
|
|
||||||
Questions about the Terms of Service should be sent to #{ mail_to 'abf@openmandriva.org' }
|
|
||||||
|
|
|
@ -10,10 +10,8 @@
|
||||||
/ Collect the nav links, forms, and other content for toggling
|
/ Collect the nav links, forms, and other content for toggling
|
||||||
ul.nav.navbar-nav.left-border
|
ul.nav.navbar-nav.left-border
|
||||||
|
|
||||||
li class=('active' if act == :show && contr == :platforms)
|
li class=('active' if act == :show && contr == :platforms || contr == :repositories)
|
||||||
= link_to t("layout.platforms.about"), platform_path(@platform)
|
= link_to t("layout.platforms.about"), platform_path(@platform)
|
||||||
li class=('active' if contr == :repositories)
|
|
||||||
= link_to t("layout.repositories.list_header"), platform_repositories_path(@platform)
|
|
||||||
li class=('active' if contr == :contents)
|
li class=('active' if contr == :contents)
|
||||||
= link_to t('layout.platforms.contents'), platform_contents_path(@platform)
|
= link_to t('layout.platforms.contents'), platform_contents_path(@platform)
|
||||||
- if policy(@platform).show?
|
- if policy(@platform).show?
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
- set_meta_tags title: t('layout.platforms.list_header')
|
- set_meta_tags title: t('layout.platforms.list_header')
|
||||||
.row.top-space ng-controller='PlatformsController'
|
.row.top-space
|
||||||
.col-md-6.col-md-offset-3
|
.col-md-6.col-md-offset-3
|
||||||
rd-widget
|
rd-widget
|
||||||
rd-widget-header title=(t('layout.platforms.list_header'))
|
rd-widget-header title=(t('layout.platforms.list_header'))
|
||||||
|
@ -13,9 +13,10 @@
|
||||||
th= t 'activerecord.attributes.platform.name'
|
th= t 'activerecord.attributes.platform.name'
|
||||||
th= t 'activerecord.attributes.platform.distrib_type'
|
th= t 'activerecord.attributes.platform.distrib_type'
|
||||||
tbody
|
tbody
|
||||||
tr ng-repeat='item in platforms'
|
- @platforms.each do |platform|
|
||||||
|
tr
|
||||||
td
|
td
|
||||||
a ng-href="{{item.link}}"
|
a href=platform_path(platform.name)
|
||||||
| {{item.name}}
|
= platform.name
|
||||||
td
|
td
|
||||||
| {{item.distrib_type}}
|
= platform.distrib_type
|
|
@ -43,7 +43,18 @@
|
||||||
b= t('layout.platforms.distrib_type')
|
b= t('layout.platforms.distrib_type')
|
||||||
td= @platform.distrib_type
|
td= @platform.distrib_type
|
||||||
|
|
||||||
|
.col-md-6
|
||||||
|
rd-widget
|
||||||
|
rd-widget-header title=t('layout.repositories.list_header')
|
||||||
|
-if policy(@platform.repositories.build).create?
|
||||||
|
a.btn.btn-primary.pull-right href=new_platform_repository_path(@platform)
|
||||||
|
= t("layout.repositories.new")
|
||||||
|
rd-widget-body class="no-padding"
|
||||||
|
= render 'platforms/repositories/list', object: @repositories
|
||||||
|
= will_paginate @repositories
|
||||||
|
|
||||||
- if @platform.platform_type == 'personal' and @platform.visibility == 'open'
|
- if @platform.platform_type == 'personal' and @platform.visibility == 'open'
|
||||||
|
.row
|
||||||
.col-md-6 ng-controller='PlatformSysReposController' ng-init="init(#{@platform.id})"
|
.col-md-6 ng-controller='PlatformSysReposController' ng-init="init(#{@platform.id})"
|
||||||
rd-widget
|
rd-widget
|
||||||
rd-widget-header title=t('layout.platforms.sys_repos_header')
|
rd-widget-header title=t('layout.platforms.sys_repos_header')
|
||||||
|
|
|
@ -1,8 +1,4 @@
|
||||||
- set_meta_tags title: t('.title')
|
- set_meta_tags title: t('.title')
|
||||||
- set_meta_tags og: { title: t('.title'), description: t('tour.meta_description') }
|
|
||||||
- set_meta_tags twitter: { title: t('.title'), description: t('tour.meta_description') }
|
|
||||||
|
|
||||||
/ == render 'projects/build_lists/submenu'
|
|
||||||
|
|
||||||
.row.top-space
|
.row.top-space
|
||||||
.col-md-10.col-md-offset-1
|
.col-md-10.col-md-offset-1
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
- title = title_object(@platform)
|
|
||||||
- set_meta_tags title: [title, t('layout.repositories.list_header')]
|
|
||||||
|
|
||||||
= render 'submenu' if params[:platform_id]
|
|
||||||
.row
|
|
||||||
.col-md-6.col-md-offset-3
|
|
||||||
rd-widget
|
|
||||||
rd-widget-header title=t('layout.repositories.list_header')
|
|
||||||
-if policy(@platform.repositories.build).create?
|
|
||||||
a.btn.btn-primary.pull-right href=new_platform_repository_path(@platform)
|
|
||||||
= t("layout.repositories.new")
|
|
||||||
rd-widget-body class="no-padding"
|
|
||||||
= render 'list', object: @repositories
|
|
||||||
= will_paginate @repositories
|
|
|
@ -1,7 +0,0 @@
|
||||||
json.project_info do |proj|
|
|
||||||
proj.(@github_basic_info, :html_url, :description)
|
|
||||||
|
|
||||||
proj.commits @commits do |commit|
|
|
||||||
proj.(commit, :branch, :url, :sha, :message, :committer_login, :committer_url)
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -69,6 +69,6 @@
|
||||||
ng-disabled = 'loading'
|
ng-disabled = 'loading'
|
||||||
class = 'form-control typeahead' ]
|
class = 'form-control typeahead' ]
|
||||||
|
|
||||||
a href='#' ng-click='update()'
|
a ng-click='update()'
|
||||||
b
|
b
|
||||||
= t('.refresh')
|
= t('.refresh')
|
||||||
|
|
|
@ -1,193 +1,72 @@
|
||||||
|
---
|
||||||
en:
|
en:
|
||||||
will_paginate:
|
|
||||||
previous_label: ‹ Previous
|
|
||||||
next_label: Next ›
|
|
||||||
page_gap: ...
|
|
||||||
|
|
||||||
datatables:
|
|
||||||
previous_label: ‹ Prev.
|
|
||||||
next_label: Next ›
|
|
||||||
first_label: « First
|
|
||||||
last_label: Last »
|
|
||||||
empty_label: No data accessible
|
|
||||||
info_label: Records displayed from _START_ to _END_ total _TOTAL_
|
|
||||||
info_empty_label: Records displayed from 0 to 0 total 0
|
|
||||||
filtered_label: (filtered from _MAX_)
|
|
||||||
|
|
||||||
layout:
|
|
||||||
logged_in_as: You logged as
|
|
||||||
logout: Logout
|
|
||||||
user_list: User list
|
|
||||||
edit: Edit
|
|
||||||
show: View
|
|
||||||
hide: Hide
|
|
||||||
cancel: Cancel
|
|
||||||
create: Create
|
|
||||||
update: Update
|
|
||||||
delete: Erase
|
|
||||||
delete_selected: Remove selected
|
|
||||||
save: Save
|
|
||||||
saving: Saving
|
|
||||||
clone: Clone
|
|
||||||
search_by_name: Filter by name
|
|
||||||
are_you_sure: "Sure?"
|
|
||||||
login: Login
|
|
||||||
or: or
|
|
||||||
yes_: Yes
|
|
||||||
no_: No
|
|
||||||
true_: True
|
|
||||||
false_: False
|
|
||||||
publish: Publish
|
|
||||||
publish_again: Publish again
|
|
||||||
publish_again_warning: Secondary publication will be able to break relationships in the repository. Be careful!
|
|
||||||
publish_into_testing: '[testing] Publish'
|
|
||||||
reject_publish: Reject
|
|
||||||
add: Add
|
|
||||||
upload: Upload
|
|
||||||
not_access: Access denied!
|
|
||||||
owner: Owner
|
|
||||||
confirm: Sure?
|
|
||||||
back: Back
|
|
||||||
processing: working ...
|
|
||||||
invalid_content_type: incorrect type
|
|
||||||
atom_link_tag_title: Private feed for %{nickname} | %{app_name}
|
|
||||||
preview: Preview
|
|
||||||
link: Link
|
|
||||||
noscript_message: You need javascript to properly use this site
|
|
||||||
|
|
||||||
settings:
|
|
||||||
label: Settings
|
|
||||||
notifier: Notifier setting
|
|
||||||
notifiers:
|
|
||||||
edit_header: Notifier setting
|
|
||||||
notice_header: You can receive notifies from other collaborators about changes into code of your projects. Notifies will be sent to your email %{email}.
|
|
||||||
change_email_link: Change email address
|
|
||||||
code_header: Code
|
|
||||||
tracker_header: Tracker
|
|
||||||
build_list_header: Build List
|
|
||||||
|
|
||||||
devise:
|
|
||||||
shared_links:
|
|
||||||
sign_in: Sign in
|
|
||||||
sign_up: Sign up
|
|
||||||
forgot_password: Forgot your password?
|
|
||||||
confirm_again: Do not receive the confirmation link?
|
|
||||||
unlock: Do not receive unlock instructions?
|
|
||||||
sign_in_through: Sign in by %{provider}
|
|
||||||
|
|
||||||
weekdays:
|
|
||||||
Monday: Monday
|
|
||||||
Tuesday: Tuesday
|
|
||||||
Wednesday: Wednesday
|
|
||||||
Thursday: Thursday
|
|
||||||
Friday: Friday
|
|
||||||
Saturday: Saturday
|
|
||||||
Sunday: Sunday
|
|
||||||
|
|
||||||
time:
|
|
||||||
ago: ago
|
|
||||||
|
|
||||||
sessions:
|
|
||||||
sign_in_header: Sign in
|
|
||||||
sign_up_with: or sign in with
|
|
||||||
|
|
||||||
collaborators:
|
|
||||||
back_to_proj: Back to project
|
|
||||||
edit: Edit list
|
|
||||||
add: Add/Remove
|
|
||||||
list: List
|
|
||||||
edit_roles: Edit roles
|
|
||||||
roles_header: Roles to
|
|
||||||
add_role: Add/Remove a role
|
|
||||||
input_username: Enter an username
|
|
||||||
input_groupname: Enter a groupname
|
|
||||||
members: Members
|
|
||||||
roles: Roles
|
|
||||||
role_names:
|
|
||||||
reader: Reader
|
|
||||||
writer: Writer
|
|
||||||
admin: Admin
|
|
||||||
|
|
||||||
git:
|
|
||||||
repositories:
|
|
||||||
empty: "Repository is empty. You need to wait some time if you have forked project or imported package"
|
|
||||||
source: Source
|
|
||||||
commits: Commits
|
|
||||||
commit_diff_too_big: Sorry, diff too big!
|
|
||||||
tags: Tags
|
|
||||||
branches: Branches
|
|
||||||
project_versions: Versions
|
|
||||||
|
|
||||||
flash:
|
|
||||||
settings:
|
|
||||||
saved: Settings saved success
|
|
||||||
save_error: Setting update error
|
|
||||||
|
|
||||||
subscribe:
|
|
||||||
saved: Subscription on notifications for this task is created
|
|
||||||
saved_error: Subscription create error
|
|
||||||
destroyed: Subscription on notifications for this task is cleaned
|
|
||||||
commit:
|
|
||||||
saved: Subscription on notifications for this commit is created
|
|
||||||
destroyed: Subscription on notifications for this commit is cleaned
|
|
||||||
|
|
||||||
exception_message: Access violation to this page!
|
|
||||||
|
|
||||||
500_message: Error 500. Something went wrong. We've been notified about this issue and we'll take a look at it shortly.
|
|
||||||
404_message: Error 404. Resource not found!
|
|
||||||
|
|
||||||
collaborators:
|
|
||||||
successfully_added: Member %{uname} successfully added
|
|
||||||
error_in_adding: Error adding member
|
|
||||||
successfully_removed: Member %{uname} successfully removed
|
|
||||||
error_in_removing: Error removing %{uname} member
|
|
||||||
successfully_updated: Member %{uname} role has been updated
|
|
||||||
error_in_updating: Error updating role
|
|
||||||
|
|
||||||
successfully_changed: Members list successfully changed
|
|
||||||
error_in_changing: Members list changing error
|
|
||||||
member_already_added: Member %s already added
|
|
||||||
group_already_added: Group already added
|
|
||||||
wrong_user: "User with nickname '%{uname}' not found!"
|
|
||||||
|
|
||||||
blob:
|
|
||||||
successfully_updated: "File '%{name}' successfully updated"
|
|
||||||
updating_error: "Error updating file '%{name}'"
|
|
||||||
|
|
||||||
attributes:
|
|
||||||
password: Password
|
|
||||||
password_confirmation: Confirmation
|
|
||||||
remember_me: Remember
|
|
||||||
name: Name
|
|
||||||
parent_platform_id: Parent platform
|
|
||||||
|
|
||||||
activerecord:
|
activerecord:
|
||||||
|
|
||||||
errors:
|
|
||||||
models:
|
|
||||||
project:
|
|
||||||
attributes:
|
|
||||||
base:
|
|
||||||
can_have_less_or_equal: You cannot have more than %{count} projects.
|
|
||||||
|
|
||||||
models:
|
models:
|
||||||
product_build_list: Product build list
|
product_build_list: Product build list
|
||||||
|
datatables:
|
||||||
attributes:
|
empty_label: No data accessible
|
||||||
arch:
|
filtered_label: "(filtered from _MAX_)"
|
||||||
name: Name
|
info_empty_label: Records displayed from 0 to 0 total 0
|
||||||
created_at: Created
|
info_label: Records displayed from _START_ to _END_ total _TOTAL_
|
||||||
updated_at: Updated
|
next_label: Next ›
|
||||||
|
previous_label: "‹ Prev."
|
||||||
into: into
|
|
||||||
from: from
|
|
||||||
by: by
|
|
||||||
diff: Diff
|
diff: Diff
|
||||||
|
flash:
|
||||||
|
collaborators:
|
||||||
|
wrong_user: User with nickname '%{uname}' not found!
|
||||||
|
exception_message: Access violation to this page!
|
||||||
|
settings:
|
||||||
|
save_error: Setting update error
|
||||||
|
saved: Settings saved success
|
||||||
|
layout:
|
||||||
|
add: Add
|
||||||
|
atom_link_tag_title: Private feed for %{nickname} | %{app_name}
|
||||||
|
cancel: Cancel
|
||||||
|
clone: Clone
|
||||||
|
collaborators:
|
||||||
|
members: Members
|
||||||
|
role_names:
|
||||||
|
admin: Admin
|
||||||
|
reader: Reader
|
||||||
|
writer: Writer
|
||||||
|
roles: Roles
|
||||||
|
confirm: Sure?
|
||||||
|
create: Create
|
||||||
|
delete: Erase
|
||||||
|
devise:
|
||||||
|
shared_links:
|
||||||
|
confirm_again: Do not receive the confirmation link?
|
||||||
|
forgot_password: Forgot your password?
|
||||||
|
sign_in: Sign in
|
||||||
|
sign_up: Sign up
|
||||||
|
unlock: Do not receive unlock instructions?
|
||||||
|
edit: Edit
|
||||||
|
false_: false
|
||||||
|
git:
|
||||||
|
repositories:
|
||||||
|
branches: Branches
|
||||||
|
tags: Tags
|
||||||
|
logout: Logout
|
||||||
|
no_: false
|
||||||
|
noscript_message: You need javascript to properly use this site
|
||||||
|
or: or
|
||||||
|
processing: working ...
|
||||||
|
publish: Publish
|
||||||
|
publish_again: Publish again
|
||||||
|
publish_again_warning: Secondary publication will be able to break relationships
|
||||||
|
in the repository. Be careful!
|
||||||
|
publish_into_testing: "[testing] Publish"
|
||||||
|
reject_publish: Reject
|
||||||
|
save: Save
|
||||||
|
settings:
|
||||||
|
label: Settings
|
||||||
|
notifiers:
|
||||||
|
build_list_header: Build List
|
||||||
|
change_email_link: Change email address
|
||||||
|
notice_header: You can receive notifies from other collaborators about changes
|
||||||
|
into code of your projects. Notifies will be sent to your email %{email}.
|
||||||
|
show: View
|
||||||
|
true_: true
|
||||||
|
none: None
|
||||||
number_rows: Number rows
|
number_rows: Number rows
|
||||||
reset: Reset
|
reset: Reset
|
||||||
_on: 'On'
|
|
||||||
until: Until
|
|
||||||
none: None
|
|
||||||
close: Close
|
|
||||||
|
|
||||||
new_feature: '(new!)'
|
|
||||||
|
|
|
@ -1,193 +1,73 @@
|
||||||
|
---
|
||||||
ru:
|
ru:
|
||||||
will_paginate:
|
activerecord:
|
||||||
previous_label: ‹ Предыдущая
|
models:
|
||||||
next_label: Следующая ›
|
product_build_list: "Сборочный лист продукта"
|
||||||
page_gap: ...
|
|
||||||
|
|
||||||
datatables:
|
datatables:
|
||||||
previous_label: ‹ Предыдущая
|
empty_label: "Нет доступных данных"
|
||||||
next_label: Следующая ›
|
filtered_label: "(отфильтровано из _MAX_)"
|
||||||
first_label: « Первая
|
info_empty_label: "Показаны записи с 0 по 0 из 0"
|
||||||
last_label: Последняя »
|
info_label: "Показаны записи с _START_ по _END_ из _TOTAL_"
|
||||||
empty_label: Нет доступных данных
|
next_label: "Следующая ›"
|
||||||
info_label: Показаны записи с _START_ по _END_ из _TOTAL_
|
previous_label: "‹ Предыдущая"
|
||||||
info_empty_label: Показаны записи с 0 по 0 из 0
|
diff: "Изменения"
|
||||||
filtered_label: (отфильтровано из _MAX_)
|
flash:
|
||||||
|
collaborators:
|
||||||
layout:
|
wrong_user: "Пользователь с ником '%{uname}' не найден."
|
||||||
logged_in_as: Вы вошли как
|
exception_message: "У Вас нет доступа к этой странице!"
|
||||||
logout: Выйти
|
|
||||||
user_list: Список пользователей
|
|
||||||
edit: Редактировать
|
|
||||||
show: Просмотр
|
|
||||||
hide: Скрыть
|
|
||||||
cancel: Отмена
|
|
||||||
create: Создать
|
|
||||||
update: Обновить
|
|
||||||
delete: Удалить
|
|
||||||
delete_selected: Удалить выбранное
|
|
||||||
save: Сохранить
|
|
||||||
saving: Сохранение...
|
|
||||||
clone: Клонировать
|
|
||||||
search_by_name: Фильтр по имени
|
|
||||||
are_you_sure: "Вы уверены?"
|
|
||||||
login: Войти
|
|
||||||
or: или
|
|
||||||
yes_: Да
|
|
||||||
no_: Нет
|
|
||||||
true_: Да
|
|
||||||
false_: Нет
|
|
||||||
publish: Опубликовать
|
|
||||||
publish_again: Опубликовать снова
|
|
||||||
publish_again_warning: Повторная публикация может привести к нарушению зависимостей в репозитории. Будьте осторожны!
|
|
||||||
publish_into_testing: '[testing] Опубликовать'
|
|
||||||
reject_publish: Отклонить
|
|
||||||
add: Добавить
|
|
||||||
upload: Загрузить
|
|
||||||
not_access: Нет доступа!
|
|
||||||
owner: Владелец
|
|
||||||
confirm: Уверены?
|
|
||||||
back: Назад
|
|
||||||
processing: Обрабатывается...
|
|
||||||
invalid_content_type: имеет неверный тип
|
|
||||||
atom_link_tag_title: Приватная лента для %{nickname} | %{app_name}
|
|
||||||
preview: Предосмотр
|
|
||||||
link: Ссылка
|
|
||||||
noscript_message: Включите javascript для корректной работы сайта
|
|
||||||
|
|
||||||
settings:
|
settings:
|
||||||
label: 'Настройки'
|
save_error: "При обновлении настроек произошла ошибка"
|
||||||
notifier: Настройки оповещений
|
saved: "Настройки успешно сохранены"
|
||||||
notifiers:
|
layout:
|
||||||
edit_header: Настройки оповещений
|
add: "Добавить"
|
||||||
notice_header: Вы можете получать уведомления об изменениях, которые вносят другие участники, в код ваших программ. Уведомления будут высылаться на указанный вами адрес электронной почты %{email}.
|
atom_link_tag_title: "Приватная лента для %{nickname} | %{app_name}"
|
||||||
change_email_link: Изменить адрес электронной почты
|
cancel: "Отмена"
|
||||||
code_header: Код
|
clone: "Клонировать"
|
||||||
tracker_header: Трекер задач
|
collaborators:
|
||||||
build_list_header: Сборочные задания
|
members: "Участники"
|
||||||
|
role_names:
|
||||||
|
admin: "Админ"
|
||||||
|
reader: "Читатель"
|
||||||
|
writer: "Писатель"
|
||||||
|
roles: "Роли"
|
||||||
|
confirm: "Уверены?"
|
||||||
|
create: "Создать"
|
||||||
|
delete: "Удалить"
|
||||||
devise:
|
devise:
|
||||||
shared_links:
|
shared_links:
|
||||||
sign_in: Войти
|
confirm_again: "Не получили инструкции по подтверждению?"
|
||||||
sign_up: Регистрация
|
forgot_password: "Забыли пароль?"
|
||||||
forgot_password: Забыли пароль?
|
sign_in: "Войти"
|
||||||
confirm_again: Не получили инструкции по подтверждению?
|
sign_up: "Регистрация"
|
||||||
unlock: Не получили инструкции по разблокировке?
|
unlock: "Не получили инструкции по разблокировке?"
|
||||||
sign_in_through: Войти через %{provider}
|
edit: "Редактировать"
|
||||||
|
false_: "Нет"
|
||||||
weekdays:
|
|
||||||
Monday: Понедельник
|
|
||||||
Tuesday: Вторник
|
|
||||||
Wednesday: Среда
|
|
||||||
Thursday: Четверг
|
|
||||||
Friday: Пятница
|
|
||||||
Saturday: Субота
|
|
||||||
Sunday: Воскресенье
|
|
||||||
|
|
||||||
time:
|
|
||||||
ago: назад
|
|
||||||
|
|
||||||
sessions:
|
|
||||||
sign_in_header: Вход в систему
|
|
||||||
sign_up_with: или войти с помощью
|
|
||||||
|
|
||||||
collaborators:
|
|
||||||
back_to_proj: Вернуться к проекту
|
|
||||||
edit: Редактировать список
|
|
||||||
add: Добавить/Удалить
|
|
||||||
list: Список
|
|
||||||
edit_roles: Редактировать роли
|
|
||||||
roles_header: Роли для
|
|
||||||
add_role: Добавить/Удалить роль
|
|
||||||
input_username: Введите псевдоним пользователя
|
|
||||||
input_groupname: Введите псевдоним группы
|
|
||||||
members: Участники
|
|
||||||
roles: Роли
|
|
||||||
role_names:
|
|
||||||
reader: Читатель
|
|
||||||
writer: Писатель
|
|
||||||
admin: Админ
|
|
||||||
|
|
||||||
git:
|
git:
|
||||||
repositories:
|
repositories:
|
||||||
empty: "Репозиторий пуст. Если вы клонировали(Fork) проект или импортировали пакет, данные скоро появятся"
|
branches: "Ветки"
|
||||||
source: Source
|
tags: "Теги"
|
||||||
commits: Коммиты
|
logout: "Выйти"
|
||||||
commit_diff_too_big: Извините, изменений слишком много!
|
no_: "Нет"
|
||||||
tags: Теги
|
noscript_message: "Включите javascript для корректной работы сайта"
|
||||||
branches: Ветки
|
or: "или"
|
||||||
project_versions: Версии
|
processing: "Обрабатывается..."
|
||||||
|
publish: "Опубликовать"
|
||||||
flash:
|
publish_again: "Опубликовать снова"
|
||||||
|
publish_again_warning: "Повторная публикация может привести к нарушению зависимостей
|
||||||
|
в репозитории. Будьте осторожны!"
|
||||||
|
publish_into_testing: "[testing] Опубликовать"
|
||||||
|
reject_publish: "Отклонить"
|
||||||
|
save: "Сохранить"
|
||||||
settings:
|
settings:
|
||||||
saved: Настройки успешно сохранены
|
label: "Настройки"
|
||||||
save_error: При обновлении настроек произошла ошибка
|
notifiers:
|
||||||
|
build_list_header: "Сборочные задания"
|
||||||
subscribe:
|
change_email_link: "Изменить адрес электронной почты"
|
||||||
saved: Вы подписаны на оповещения для этой задачи
|
notice_header: "Вы можете получать уведомления об изменениях, которые вносят
|
||||||
saved_error: При создании подписки произошла ошибка
|
другие участники, в код ваших программ. Уведомления будут высылаться на
|
||||||
destroyed: Подписка на оповещения для этой задачи убрана
|
указанный вами адрес электронной почты %{email}."
|
||||||
commit:
|
show: "Просмотр"
|
||||||
saved: Вы подписаны на оповещения для этого коммита
|
true_: "Да"
|
||||||
destroyed: Подписка на оповещения для этого коммита убрана
|
none: "Нет"
|
||||||
|
number_rows: "Количество строк"
|
||||||
exception_message: У Вас нет доступа к этой странице!
|
reset: "Сброс"
|
||||||
|
|
||||||
500_message: Ошибка 500. Что-то пошло не так. Мы уже в курсе данной проблемы и постараемся поскорее ее решить.
|
|
||||||
404_message: Ошибка 404. Страница не найдена!
|
|
||||||
|
|
||||||
collaborators:
|
|
||||||
successfully_added: Участник %{uname} успешно добавлен
|
|
||||||
error_in_adding: Ошибка при добавлении участника
|
|
||||||
successfully_removed: Участник %{uname} успешно удален
|
|
||||||
error_in_removing: Ошибка при удалении участника %{uname}
|
|
||||||
successfully_updated: Участнику %{uname} изменена роль
|
|
||||||
error_in_updating: Ошибка при изменении роли
|
|
||||||
|
|
||||||
successfully_changed: Список участников успешно изменен
|
|
||||||
error_in_changing: Ошибка изменения списка участников
|
|
||||||
member_already_added: Участник %s уже добавлен
|
|
||||||
group_already_added: Группа уже добавлена
|
|
||||||
wrong_user: "Пользователь с ником '%{uname}' не найден."
|
|
||||||
|
|
||||||
blob:
|
|
||||||
successfully_updated: "Файл '%{name}' успешно обновлен"
|
|
||||||
updating_error: "Ошибка обновления файла '%{name}'"
|
|
||||||
|
|
||||||
attributes:
|
|
||||||
password: Пароль
|
|
||||||
password_confirmation: Подтверждение
|
|
||||||
remember_me: Запомнить
|
|
||||||
name: Название
|
|
||||||
parent_platform_id: Родительская платформа
|
|
||||||
|
|
||||||
activerecord:
|
|
||||||
|
|
||||||
errors:
|
|
||||||
models:
|
|
||||||
project:
|
|
||||||
attributes:
|
|
||||||
base:
|
|
||||||
can_have_less_or_equal: Нельзя иметь больше, чем %{count} проектов.
|
|
||||||
|
|
||||||
models:
|
|
||||||
product_build_list: Сборочный лист продукта
|
|
||||||
|
|
||||||
attributes:
|
|
||||||
arch:
|
|
||||||
name: Название
|
|
||||||
created_at: Создана
|
|
||||||
updated_at: Обновлена
|
|
||||||
|
|
||||||
into: в
|
|
||||||
from: из
|
|
||||||
by: от
|
|
||||||
diff: Изменения
|
|
||||||
number_rows: Количество строк
|
|
||||||
reset: Сброс
|
|
||||||
_on: с
|
|
||||||
until: по
|
|
||||||
none: Нет
|
|
||||||
close: Закрыть
|
|
||||||
|
|
||||||
new_feature: '(новинка!)'
|
|
||||||
|
|
|
@ -168,7 +168,7 @@ Rails.application.routes.draw do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
resources :repositories do
|
resources :repositories, only: [:create, :new, :show, :edit] do
|
||||||
member do
|
member do
|
||||||
get :manage_projects
|
get :manage_projects
|
||||||
put :add_project
|
put :add_project
|
||||||
|
@ -274,7 +274,6 @@ Rails.application.routes.draw do
|
||||||
end
|
end
|
||||||
|
|
||||||
# Resource
|
# Resource
|
||||||
get '/project_info.:format' => 'projects#project_info', as: :project_info, format: /json/
|
|
||||||
get '/autocomplete_maintainers' => 'projects#autocomplete_maintainers', as: :autocomplete_maintainers
|
get '/autocomplete_maintainers' => 'projects#autocomplete_maintainers', as: :autocomplete_maintainers
|
||||||
get '/modify' => 'projects#edit', as: :edit_project
|
get '/modify' => 'projects#edit', as: :edit_project
|
||||||
patch '/' => 'projects#update', as: :project
|
patch '/' => 'projects#update', as: :project
|
||||||
|
|
Loading…
Reference in New Issue