/**
* @namespace WORKAREA.activeBySegmentTooltips
*/
WORKAREA.registerModule('activeBySegmentTooltips', (function () {
'use strict';
var hiddenInput = JST['workarea/core/templates/hidden_input'],
getSelectedOptionText = function ($select) {
return $select.find('option:selected').map(function (_i, option) {
return $.trim($(option).text());
}).toArray();
},
updateMessages = function ($link, $content) {
var $message = $link.find('.active-field__segments-message'),
names = getSelectedOptionText($content.find('select')),
text = I18n.t('workarea.admin.shared.active_field.by_segment', {
count: names.length,
name: names[0],
more_count: names.length - 1
});
if (_.isEmpty(names)) {
$message.html($('').text(text));
} else {
$message.html($('').text(text));
}
},
buildInput = function (name, value) {
var input = hiddenInput({ name: name, value: value });
return $(input).data('activeBySegmentInput', true);
},
addHiddenInputs = function ($form, $content) {
$content
.find('select')
.each(function (index, select) {
var $select = $(select);
if (_.isEmpty($select.val())) {
$form.append(buildInput(select.name, ''));
} else {
_.forEach($select.val(), function (value) {
$form.append(buildInput(select.name, value));
});
}
});
},
removeHiddenInputs = function ($form) {
$form
.find('[type=hidden]')
.filter(function (index, input) {
return $(input).data('activeBySegmentInput') === true;
})
.remove();
},
updateFields = function ($content, $trigger) {
var $form = $trigger.closest('form');
removeHiddenInputs($form);
addHiddenInputs($form, $content);
updateMessages($trigger, $content);
},
getConfig = function (trigger, $content) {
return _.assign({}, WORKAREA.config.tooltipster, {
interactive: true,
content: $content,
trigger: 'custom',
triggerOpen: {
click: true
},
triggerClose: {
mouseleave: true
}
});
},
setup = function (index, trigger) {
var $content = $(trigger.hash),
$select = $content.find('[data-select]'),
handleChange = _.partial(updateFields, $content, $(trigger));
$select.on('change', handleChange);
$(trigger).tooltipster(getConfig(trigger, $content));
},
/**
* @method
* @name init
* @memberof WORKAREA.activeBySegmentTooltips
*/
init = function ($scope) {
$('[data-active-by-segment-tooltip]', $scope)
.each(setup)
.on('click', function (event) {
event.preventDefault();
});
};
return {
init: init
};
}()));