Merge pull request #1482 from kijin/pr/color-scheme

다크모드 감지 및 설정을 위한 rx_color_scheme 쿠키값의 표준화
This commit is contained in:
Kijin Sung 2020-12-15 01:59:17 +09:00 committed by GitHub
commit c275702fbf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 91 additions and 2 deletions

View file

@ -439,4 +439,41 @@ class UA
return 'filename="' . preg_replace('/\./', '%2e', $filename, substr_count($filename, '.') - 1) . '"';
}
}
/**
* Get the current color scheme (auto, light, dark)
*
* @return string
*/
public static function getColorScheme(): string
{
if (isset($_COOKIE['rx_color_scheme']) && in_array($_COOKIE['rx_color_scheme'], ['light', 'dark']))
{
return strval($_COOKIE['rx_color_scheme']);
}
else
{
return 'auto';
}
}
/**
* Set the color scheme (auto, light, dark)
*
* @param string $color_scheme
* @return void
*/
public static function setColorScheme(string $color_scheme)
{
if (in_array($color_scheme, ['light', 'dark']))
{
$_COOKIE['rx_color_scheme'] = $color_scheme;
setcookie('rx_color_scheme', $color_scheme, time() + 86400 * 365, \RX_BASEURL, null, !!config('session.use_ssl_cookies'));
}
else
{
unset($_COOKIE['rx_color_scheme']);
setcookie('rx_color_scheme', 'deleted', time() - 86400, \RX_BASEURL, null);
}
}
}

View file

@ -349,6 +349,14 @@ jQuery(function($) {
}
});
/* Detect color scheme */
var body_element = $('body');
var color_scheme_cookie = XE.cookie.get('rx_color_scheme');
var color_scheme_detected = (window.matchMedia && window.matchMedia('(prefers-color-scheme:dark)').matches) ? 'dark' : 'light';
if (!color_scheme_cookie || (!body_element.hasClass('color_scheme_light') && !body_element.hasClass('color_scheme_dark'))) {
body_element.addClass('color_scheme_' + color_scheme_detected).removeClass('color_scheme_' + (color_scheme_detected === 'dark' ? 'light' : 'dark'));
}
/* Editor preview replacement */
$(".editable_preview").addClass("rhymix_content xe_content").attr("tabindex", 0);
$(".editable_preview").on("click", function() {
@ -766,6 +774,25 @@ function setLangType(lang_type) {
XE.cookie.set('lang_type', lang_type, { path: baseurl, expires: 365 });
}
/* 색상 테마 변경 */
function getColorScheme() {
if ($('body').hasClass('color_scheme_light')) {
return 'light';
} else {
return 'dark';
}
}
function setColorScheme(color_scheme) {
if (color_scheme === 'dark' || color_scheme === 'light') {
$('body').addClass('color_scheme_' + color_scheme).removeClass('color_scheme_' + (color_scheme === 'dark' ? 'light' : 'dark'));
XE.cookie.set('rx_color_scheme', color_scheme, { path: window.XE.URI(default_url).pathname(), expires: 365 });
} else {
XE.cookie.remove('rx_color_scheme', { path: window.XE.URI(default_url).pathname() });
color_scheme = (window.matchMedia && window.matchMedia('(prefers-color-scheme:dark)').matches) ? 'dark' : 'light';
$('body').addClass('color_scheme_' + color_scheme).removeClass('color_scheme_' + (color_scheme === 'dark' ? 'light' : 'dark'));
}
}
/* 미리보기 */
function doDocumentPreview(obj) {
var fo_obj = obj;