Files
Syed Ali Abbas Zaidi f1fb38ed83 fix: multi lines and spaces issues (#31885)
* fix: multi lines and spaces issues

* fix: eslint operator-linebreak issue

* fix: eslint quotes issue

* fix: remaining quotes issues

* fix: eslint object curly newline issue

* fix: eslint object curly spacing issue

* fix: eslint brace-style issues

* fix: react jsx indent and props issues

* fix: eslint trailing spaces issues

* fix: eslint linbreak style issue

* fix: eslint space unary operator issue

* fix: eslint line around directives issue

* fix: void and typeof space unary ops issue
2023-05-03 12:22:46 +05:00

113 lines
3.6 KiB
JavaScript

define([
'underscore', 'underscore.string', 'backbone', 'gettext', 'js/models/group'
],
function(_, str, Backbone, gettext, GroupModel) {
'use strict';
var GroupCollection = Backbone.Collection.extend({
model: GroupModel,
comparator: 'order',
/*
* Return next index for the model.
* @return {Number}
*/
nextOrder: function() {
if (!this.length) {
return 0;
}
return this.last().get('order') + 1;
},
/**
* Indicates if the collection is empty when all the models are empty
* or the collection does not include any models.
* */
isEmpty: function() {
return this.length === 0 || this.every(function(m) {
return m.isEmpty();
});
},
/*
* Return default name for the group.
* @return {String}
* @examples
* Group A, Group B, Group AA, Group ZZZ etc.
*/
getNextDefaultGroupName: function() {
var index = this.nextOrder(),
usedNames = _.pluck(this.toJSON(), 'name'),
name = '';
do {
name = str.sprintf(gettext('Group %s'), this.getGroupId(index));
index++;
} while (_.contains(usedNames, name));
return name;
},
/*
* Return group id for the default name of the group.
* @param {Number} number Current index of the model in the collection.
* @return {String}
* @examples
* A, B, AA in Group A, Group B, ..., Group AA, etc.
*/
getGroupId: (function() {
/*
Translators: Dictionary used for creation ids that are used in
default group names. For example: A, B, AA in Group A,
Group B, ..., Group AA, etc.
*/
var dict = gettext('ABCDEFGHIJKLMNOPQRSTUVWXYZ').split(''),
len = dict.length,
divide;
divide = function(numerator, denominator) {
if (!_.isNumber(numerator) || !denominator) {
return null;
}
return {
quotient: numerator / denominator,
remainder: numerator % denominator
};
};
return function getId(number) {
var accumulatedValues = '',
result = divide(number, len),
index;
if (result) {
// subtract 1 to start the count with 0.
index = Math.floor(result.quotient) - 1;
// Proceed by dividing the non-remainder part of the
// dividend by the desired base until the result is less
// than one.
if (index < len) {
// if index < 0, we do not need an additional power.
if (index > -1) {
// Get value for the next power.
accumulatedValues += dict[index];
}
} else {
// If we need more than 1 additional power.
// Get value for the next powers.
accumulatedValues += getId(index);
}
// Accumulated values + the current reminder
return accumulatedValues + dict[result.remainder];
}
return String(number);
};
}())
});
return GroupCollection;
});