color-scheme-control.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /* global colorScheme, Color */
  2. /**
  3. * Add a listener to the Color Scheme control to update other color controls to new values/defaults.
  4. * Also trigger an update of the Color Scheme CSS when a color is changed.
  5. */
  6. ( function( api ) {
  7. var cssTemplate = wp.template( 'twentysixteen-color-scheme' ),
  8. colorSchemeKeys = [
  9. 'background_color',
  10. 'page_background_color',
  11. 'link_color',
  12. 'main_text_color',
  13. 'secondary_text_color'
  14. ],
  15. colorSettings = [
  16. 'background_color',
  17. 'page_background_color',
  18. 'link_color',
  19. 'main_text_color',
  20. 'secondary_text_color'
  21. ];
  22. api.controlConstructor.select = api.Control.extend( {
  23. ready: function() {
  24. if ( 'color_scheme' === this.id ) {
  25. this.setting.bind( 'change', function( value ) {
  26. var colors = colorScheme[value].colors;
  27. // Update Background Color.
  28. var color = colors[0];
  29. api( 'background_color' ).set( color );
  30. api.control( 'background_color' ).container.find( '.color-picker-hex' )
  31. .data( 'data-default-color', color )
  32. .wpColorPicker( 'defaultColor', color );
  33. // Update Page Background Color.
  34. color = colors[1];
  35. api( 'page_background_color' ).set( color );
  36. api.control( 'page_background_color' ).container.find( '.color-picker-hex' )
  37. .data( 'data-default-color', color )
  38. .wpColorPicker( 'defaultColor', color );
  39. // Update Link Color.
  40. color = colors[2];
  41. api( 'link_color' ).set( color );
  42. api.control( 'link_color' ).container.find( '.color-picker-hex' )
  43. .data( 'data-default-color', color )
  44. .wpColorPicker( 'defaultColor', color );
  45. // Update Main Text Color.
  46. color = colors[3];
  47. api( 'main_text_color' ).set( color );
  48. api.control( 'main_text_color' ).container.find( '.color-picker-hex' )
  49. .data( 'data-default-color', color )
  50. .wpColorPicker( 'defaultColor', color );
  51. // Update Secondary Text Color.
  52. color = colors[4];
  53. api( 'secondary_text_color' ).set( color );
  54. api.control( 'secondary_text_color' ).container.find( '.color-picker-hex' )
  55. .data( 'data-default-color', color )
  56. .wpColorPicker( 'defaultColor', color );
  57. } );
  58. }
  59. }
  60. } );
  61. // Generate the CSS for the current Color Scheme.
  62. function updateCSS() {
  63. var scheme = api( 'color_scheme' )(),
  64. css,
  65. colors = _.object( colorSchemeKeys, colorScheme[ scheme ].colors );
  66. // Merge in color scheme overrides.
  67. _.each( colorSettings, function( setting ) {
  68. colors[ setting ] = api( setting )();
  69. } );
  70. // Add additional color.
  71. // jscs:disable
  72. colors.border_color = Color( colors.main_text_color ).toCSS( 'rgba', 0.2 );
  73. // jscs:enable
  74. css = cssTemplate( colors );
  75. api.previewer.send( 'update-color-scheme-css', css );
  76. }
  77. // Update the CSS whenever a color setting is changed.
  78. _.each( colorSettings, function( setting ) {
  79. api( setting, function( setting ) {
  80. setting.bind( updateCSS );
  81. } );
  82. } );
  83. } )( wp.customize );