/**
* Responsible for adding a formatted numbering on fields
* @module app/custom_binding/numbering
* @requires knockout
* @requires jquery
* @requires app/models/Field
* @requires hasher
*
* @example
* var field_stub = {
* showNumbering: true,
* numbering: false,
* showNumbering: true
* };
* <div data-bind="with: field">
* //prints 1.0
* <label data-bind="numbering: numbering"></label>
* </div>
*/
define(['knockout', 'jquery', 'models/Field', 'hasher'], function(ko, $, Field, hasher) {
ko.bindingHandlers.numbering = {
update: function(el, valueAccessor, allBindings, viewModel, bindingContext) {
var index = bindingContext.$index() + 1,
valAccessor = valueAccessor(),
numbering = valAccessor() ? valAccessor() + '.0 ' : ' ',
field = ko.dataFor(el),
parents = _.uniqBy(bindingContext.$parents, 'name'),
temp = [],
fieldDummyText = 'Item ' + numbering.replace('.0', ''),
currentRoute = hasher.getHashAsArray()[0];
// field.label(fieldDummyText);
if (!valAccessor()) {
valAccessor(index);
}
if (field.showNumbering()) {
if (parents.length > 2) {
ko.utils.arrayForEach(parents, function(parent) {
if (parent instanceof Field) {
if (parent !== field && parent.numbering()) {
temp.unshift(parent.numbering());
} else {
var field_index = ko.utils.arrayIndexOf(parent.childFields(), field);
console.log('ddddd', field_index);
// if(field_index > -1) {
// temp.unshift(field_index+1);
// }
}
}
});
if (temp.length && parents[1].showNumbering()) {
label = temp.join('.') + '.' + valAccessor() + ' ' + '';
} else {
label = '';
}
} else {
label = numbering + '';
}
} else {
label = '';
}
field.formatted_numbering = label;
field.temporary_label = label;
newValueAccessor = function() {
return label;
};
temp = null;
ko.bindingHandlers.text.update(el, newValueAccessor, allBindings, viewModel, bindingContext);
}
}
});