skillset_inview-8.x-1.x-dev/js/skillset-inview-color.js
js/skillset-inview-color.js
/**
* @file
* Drupal behavior for Skillset Inview -- assist color selection preview.
*/
(function ($, Drupal) {
'use strict';
/**
* Attach behavior for the Overview form.
*/
Drupal.behaviors.skillsetInviewColor = {
attach: function (context) {
// Init setup. SKILLBAR PREVIEW with current colors.
$(once('skillbarColorInit', '.skill-line', context)).each(function (index, value) {
// With active JS..remove attr so that js can now set colors. degrade state page load.
$('.skill-line, .skill-bar, .skill-label, .percent.inside, .percent.outside', context).removeAttr('style');
Drupal.skillsetInviewColor.updatePreview();
});
// Add farbtastic to page and basic connect to inputs.
var farb = $.farbtastic('.farbtastic-element');
$(once('colorHelperInit', '.color-helper input', context)).each(function (index, value) {
farb.linkTo(this);
}).focus(function () {
farb.linkTo(this);
});
// Focus on first input.
$('input[name="color-bar"]', context).focus();
// Block input return submits.
$('input[type="text"], input[type="range"]', context).on('keyup keypress', function (e) {
if (e.keyCode === 13) {
e.preventDefault();
return false;
}
});
// Watch FRAB by basic mouse events, and update preview.
$(once('skillsetFrabWatch', '.farbtastic-element', context)).on('mouseout mouseup', function () {
Drupal.skillsetInviewColor.updatePreview();
});
// Update preview when inputs changed by manual typing.
$(once('skillsetColorAssist', '.color-helper input', context)).on('input paste change', function () {
Drupal.skillsetInviewColor.updatePreview();
});
// Change percent visual description when changed, and update preview.
$(once('skillsetOpacityChange', '.form-type-range input', context)).on('input change', function () {
var name = $(this).attr('name');
var value = $(this).val();
switch (name) {
case 'color-bar-opacity':
var $currentBar = $('input[name="color-bar"]').val();
var rgbaBar = Drupal.skillsetInviewColor.hexToRgb($currentBar, value);
$('.skill-bar').css({ background: rgbaBar });
break;
case 'color-back-opacity':
var $currentBack = $('input[name="color-back"]').val();
var rgbaBack = Drupal.skillsetInviewColor.hexToRgb($currentBack, value);
$('.skill-line').css({ background: rgbaBack });
break;
}
});
}
};
/**
* Init namespace.
*/
Drupal.skillsetInviewColor = Drupal.skillsetInviewColor || {};
/**
* Function: hexToRgb converter.
*
* @param {string} hex
* hexadecimal color to process
* @param {number} opacity
* opacity range (0-100) to process
*
* @return {string}
* rbga color value to use for CSS
*/
Drupal.skillsetInviewColor.hexToRgb = function (hex, opacity) {
var color = hex.replace('#', '');
color = color.match(new RegExp('(.{' + (color.length) / 3 + '})', 'g'));
for (var i = 0; i < color.length; i++) {
color[i] = parseInt((color[i].length === 1 ? color[i] + color[i] : color[i]), 16);
}
if (typeof opacity !== 'undefined') {
var percent = parseFloat(opacity / 100).toFixed(2);
color.push(percent);
}
return 'rgba(' + color.join(',') + ')';
};
/**
* Function: validates a input as a hex color.
*
* @param {string} input
* String to test.
*
* @return {bool}
* Input is valid, or not.
*/
Drupal.skillsetInviewColor.validateHex = function (input) {
var regColor = /^(#)?([0-9a-fA-F]{3})([0-9a-fA-F]{3})?$/;
if (regColor.test(input) === false) {
return false;
}
return true;
};
/**
* Function: task to update preview.
*/
Drupal.skillsetInviewColor.updatePreview = function () {
var colorBar = $('input[name="color-bar"]').val();
var colorBack = $('input[name="color-back"]').val();
var colorBorder = $('input[name="color-border"]').val();
var colorLabels = $('input[name="color-labels"]').val();
var colorPercentInside = $('input[name="color-percent-inside"]').val();
var colorPercentOutside = $('input[name="color-percent-outside"]').val();
if (Drupal.skillsetInviewColor.validateHex(colorBar) &&
Drupal.skillsetInviewColor.validateHex(colorBack) &&
Drupal.skillsetInviewColor.validateHex(colorBorder) &&
Drupal.skillsetInviewColor.validateHex(colorLabels) &&
Drupal.skillsetInviewColor.validateHex(colorPercentInside) &&
Drupal.skillsetInviewColor.validateHex(colorPercentOutside)
) {
var colorBarOpacity = $('input[name="color-bar-opacity"]').val();
var colorBackOpacity = $('input[name="color-back-opacity"]').val();
var barColor = Drupal.skillsetInviewColor.hexToRgb(colorBar, colorBarOpacity);
var barBack = Drupal.skillsetInviewColor.hexToRgb(colorBack, colorBackOpacity);
$('.skill-bar').css({ background: barColor });
$('.skill-line').css({ background: barBack, border: '1px solid ' + colorBorder });
$('.skill-label').css({ color: colorLabels });
$('.percent.inside').css({ color: colorPercentInside });
$('.percent.outside').css({ color: colorPercentOutside });
}
};
}(jQuery, Drupal));
