/** * @file * Attaches preview-related behavior for the Color module. */ (function($, Drupal) { /** * Namespace for color-related functionality for Drupal. * * @namespace */ Drupal.color = { /** * The callback for when the color preview has been attached. * * @param {Element} context * The context to initiate the color behaviour. * @param {object} settings * Settings for the color functionality. * @param {HTMLFormElement} form * The form to initiate the color behaviour on. * @param {object} farb * The farbtastic object. * @param {number} height * Height of gradient. * @param {number} width * Width of gradient. */ callback(context, settings, form, farb, height, width) { let accum; let delta; // Solid background. form .find('.color-preview') .css( 'backgroundColor', form.find('.color-palette input[name="palette[base]"]').val(), ); // Text preview. form .find('#text') .css( 'color', form.find('.color-palette input[name="palette[text]"]').val(), ); form .find('#text a, #text h2') .css( 'color', form.find('.color-palette input[name="palette[link]"]').val(), ); function gradientLineColor(i, element) { Object.keys(accum || {}).forEach(k => { accum[k] += delta[k]; }); element.style.backgroundColor = farb.pack(accum); } // Set up gradients if there are some. let colorStart; let colorEnd; Object.keys(settings.gradients || {}).forEach(i => { colorStart = farb.unpack( form .find( `.color-palette input[name="palette[${ settings.gradients[i].colors[0] }]"]`, ) .val(), ); colorEnd = farb.unpack( form .find( `.color-palette input[name="palette[${ settings.gradients[i].colors[1] }]"]`, ) .val(), ); if (colorStart && colorEnd) { delta = []; Object.keys(colorStart || {}).forEach(colorStartKey => { delta[colorStartKey] = (colorEnd[colorStartKey] - colorStart[colorStartKey]) / (settings.gradients[i].vertical ? height[i] : width[i]); }); accum = colorStart; // Render gradient lines. form.find(`#gradient-${i} > div`).each(gradientLineColor); } }); }, }; })(jQuery, Drupal);