Skip to content

Commit 743cdcc

Browse files
committed
cache color scheme css
1 parent 604c956 commit 743cdcc

File tree

3 files changed

+46
-10
lines changed

3 files changed

+46
-10
lines changed

src/plugins/global-settings/color-schemes/color-scheme-picker.js

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,13 @@ const ColorSchemePicker = props => {
8989
setDisplayHoverNotice,
9090
} = props
9191

92-
const { colorSchemes } = useSelect( select => {
93-
const { colorSchemes: _colorSchemes } = select( 'stackable/global-color-schemes' ).getSettings()
92+
const {
93+
colorSchemes, cachedCss,
94+
} = useSelect( select => {
95+
const { colorSchemes: _colorSchemes, cachedCss } = select( 'stackable/global-color-schemes' ).getSettings()
9496
return {
9597
colorSchemes: cloneDeep( _colorSchemes ),
98+
cachedCss,
9699
}
97100
} )
98101

@@ -125,7 +128,7 @@ const ColorSchemePicker = props => {
125128

126129
// Add a custom color scheme
127130
const handleAddItem = ( event, scheme = null ) => {
128-
doAction( 'stackable.global-settings.global-color-schemes.custom-color-schemes.add-color-scheme', scheme, setItemInEdit, saveTimeout )
131+
doAction( 'stackable.global-settings.global-color-schemes.custom-color-schemes.add-color-scheme', scheme, setItemInEdit, cachedCss, saveTimeout )
129132
}
130133

131134
// For sorting custom color schemes
@@ -137,7 +140,7 @@ const ColorSchemePicker = props => {
137140
clearTimeout( saveTimeout )
138141

139142
// If the color scheme being edited is a custom color scheme, customUpdate will return true
140-
const customUpdate = applyFilters( 'stackable.global-settings.global-color-schemes.update-color-schemes', false, currentItem, saveTimeout )
143+
const customUpdate = applyFilters( 'stackable.global-settings.global-color-schemes.update-color-schemes', false, currentItem, cachedCss, saveTimeout )
141144

142145
if ( ! customUpdate ) {
143146
// Do this only when the color scheme being edited is the default/fixed color schemes (the first two color schemes)
@@ -146,12 +149,17 @@ const ColorSchemePicker = props => {
146149
updatedColorSchemes[ currentIndex ] = currentItem
147150

148151
saveTimeout = setTimeout( () => {
149-
const settings = new models.Settings( { stackable_global_color_schemes: updatedColorSchemes } ) // eslint-disable-line camelcase
152+
const settings = new models.Settings( {
153+
stackable_global_color_schemes: updatedColorSchemes, // eslint-disable-line camelcase
154+
// Clear the cached CSS when the color scheme is updated
155+
...( cachedCss ? { stackable_global_color_scheme_generated_css: '' } : {} ), // eslint-disable-line camelcase
156+
} )
150157
settings.save()
151158
}, 300 )
152159

153160
// Update our store.
154161
dispatch( 'stackable/global-color-schemes' ).updateColorSchemes( updatedColorSchemes )
162+
dispatch( 'stackable/global-color-schemes' ).updateSettings( { cachedCss: '' } )
155163
}
156164
}
157165

@@ -255,7 +263,7 @@ const ColorSchemePicker = props => {
255263

256264
const onDeleteItem = item => {
257265
// If the color scheme to be deleted is a custom color scheme, customDelete will return true
258-
const customDelete = applyFilters( 'stackable.global-settings.global-color-schemes.delete-color-scheme', false, item, setItemInEdit, saveTimeout )
266+
const customDelete = applyFilters( 'stackable.global-settings.global-color-schemes.delete-color-scheme', false, item, setItemInEdit, cachedCss, saveTimeout )
259267

260268
if ( ! customDelete ) {
261269
// Do not delete if it is not a custom color scheme, reset it to the default value instead.

src/plugins/global-settings/color-schemes/index.php

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,18 @@ public function register_color_schemes() {
120120
'default' => '',
121121
)
122122
);
123+
124+
register_setting(
125+
'stackable_global_settings',
126+
'stackable_global_color_scheme_generated_css',
127+
array(
128+
'type' => 'string',
129+
'description' => __( 'Stackable Global Color Scheme Generated CSS', STACKABLE_I18N ),
130+
'sanitize_callback' => 'sanitize_text_field',
131+
'show_in_rest' => true,
132+
'default' => '',
133+
)
134+
);
123135
}
124136

125137
// Make this function static so it can be used when
@@ -178,6 +190,15 @@ public static function get_color_scheme_properties( $values = null ) {
178190
* @return String
179191
*/
180192
public function add_global_color_schemes_styles( $current_css ) {
193+
$cached_color_scheme_css = get_option( 'stackable_global_color_scheme_generated_css' );
194+
195+
// If there is cached CSS, use it
196+
if ( $cached_color_scheme_css ) {
197+
$current_css .= $cached_color_scheme_css;
198+
return apply_filters( 'stackable_frontend_css' , $current_css );
199+
}
200+
201+
// Generate the CSS for the color schemes if there is no cached CSS
181202
$schemes_array = is_array( get_option( 'stackable_global_color_schemes' ) ) ? get_option( 'stackable_global_color_schemes' ) : [];
182203

183204
// Get all color schemes, including custom color schemes if any
@@ -251,10 +272,11 @@ public function add_global_color_schemes_styles( $current_css ) {
251272
$styles = $this->generate_color_scheme_styles( $styles, $scheme );
252273
}
253274

275+
$color_scheme_css = '';
254276
$generated_css = wp_style_engine_get_stylesheet_from_css_rules( $styles );
255277
if ( $generated_css != '' ) {
256-
$current_css .= "\n/* Global Color Schemes */\n";
257-
$current_css .= $generated_css;
278+
$color_scheme_css .= "\n/* Global Color Schemes */\n";
279+
$color_scheme_css .= $generated_css;
258280
}
259281

260282
foreach( $block_color_schemes as $mode => $block_schemes ) {
@@ -263,12 +285,15 @@ public function add_global_color_schemes_styles( $current_css ) {
263285
$generated_css = wp_style_engine_get_stylesheet_from_css_rules( $styles );
264286
if ( $generated_css != '' ) {
265287
$scheme_key = $scheme[ 'key' ];
266-
$current_css .= "\n/* Global Color Schemes ($mode-$scheme_key) */\n";
267-
$current_css .= $generated_css;
288+
$color_scheme_css .= "\n/* Global Color Schemes ($mode-$scheme_key) */\n";
289+
$color_scheme_css .= $generated_css;
268290
}
269291
}
270292
}
293+
// Add the generated CSS to the database
294+
update_option( 'stackable_global_color_scheme_generated_css', $color_scheme_css );
271295

296+
$current_css .= $color_scheme_css;
272297
return apply_filters( 'stackable_frontend_css' , $current_css );
273298
}
274299

src/plugins/global-settings/color-schemes/store.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ const DEFAULT_STATE = {
1818
baseColorScheme: '',
1919
backgroundModeColorScheme: '',
2020
containerModeColorScheme: '',
21+
cachedCss: '',
2122
}
2223

2324
const STORE_ACTIONS = {
@@ -75,6 +76,7 @@ domReady( () => {
7576
stackable_global_base_color_scheme: baseColorScheme,
7677
stackable_global_background_mode_color_scheme: backgroundModeColorScheme,
7778
stackable_global_container_mode_color_scheme: containerModeColorScheme,
79+
stackable_global_color_scheme_generated_css: cachedCss,
7880
} = response
7981

8082
const colorSchemes = Array.isArray( _colorSchemes ) && _colorSchemes.length > 0 ? _colorSchemes : [ {
@@ -113,6 +115,7 @@ domReady( () => {
113115
baseColorScheme,
114116
backgroundModeColorScheme,
115117
containerModeColorScheme,
118+
cachedCss,
116119
}
117120

118121
dispatch( 'stackable/global-color-schemes' ).updateSettings( settings )

0 commit comments

Comments
 (0)