Skip to content

Commit

Permalink
Respect the prefers-color-scheme setting (#1275)
Browse files Browse the repository at this point in the history
* Respect the prefers-color-scheme setting

* Added a scheme toggler

* update deps

---------

Co-authored-by: Taylor Otwell <taylor@laravel.com>
  • Loading branch information
ramonrietdijk and taylorotwell committed May 18, 2023
1 parent a364b36 commit 4f762b1
Show file tree
Hide file tree
Showing 8 changed files with 86 additions and 12 deletions.
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion public/app.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/mix-manifest.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"/app.js": "/app.js?id=821948ef9dd305db5755875c266d2355",
"/app.js": "/app.js?id=c6187bff8d842d49dbb4d3de4b583600",
"/app-dark.css": "/app-dark.css?id=15c72df05e2b1147fa3e4b0670cfb435",
"/app.css": "/app.css?id=4d6a1a7fe095eedc2cb2a4ce822ea8a5",
"/img/favicon.png": "/img/favicon.png?id=1542bfe8a0010dcbee710da13cce367f",
Expand Down
1 change: 1 addition & 0 deletions resources/js/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ const router = new VueRouter({

Vue.component('vue-json-pretty', VueJsonPretty);
Vue.component('alert', require('./components/Alert.vue').default);
Vue.component('scheme-toggler', require('./components/SchemeToggler.vue').default);

Vue.mixin(Base);

Expand Down
71 changes: 71 additions & 0 deletions resources/js/components/SchemeToggler.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
<script type="text/ecmascript-6">
export default {
data () {
return {
scheme: 'system'
}
},
watch: {
scheme (value) {
localStorage.setItem('scheme', value);
}
},
mounted () {
this.scheme = localStorage.getItem('scheme') ?? 'system';
window
.matchMedia('(prefers-color-scheme: dark)')
.addEventListener('change', () => this.calculateScheme())
this.calculateScheme()
},
methods: {
toggleScheme () {
if (this.scheme == 'system') {
this.scheme = 'dark'
} else if (this.scheme == 'dark') {
this.scheme = 'light'
} else {
this.scheme = 'system'
}
this.calculateScheme()
},
calculateScheme () {
const light = document.querySelector('link[data-scheme="light"]');
const dark = document.querySelector('link[data-scheme="dark"]');
if (this.scheme == 'system') {
const prefersDarkMode = window.matchMedia('(prefers-color-scheme: dark)');
light.disabled = prefersDarkMode.matches;
dark.disabled = ! prefersDarkMode.matches;
} else if (this.scheme == 'dark') {
light.disabled = true;
dark.disabled = false;
} else {
light.disabled = false;
dark.disabled = true;
}
}
}
}
</script>
<template>
<button class="btn btn-muted" title="Switch Theme" v-on:click.prevent="toggleScheme">
<svg v-if="scheme == 'system'" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" class="icon" fill="currentColor">
<path fill-rule="evenodd" d="M2 4.25A2.25 2.25 0 014.25 2h11.5A2.25 2.25 0 0118 4.25v8.5A2.25 2.25 0 0115.75 15h-3.105a3.501 3.501 0 001.1 1.677A.75.75 0 0113.26 18H6.74a.75.75 0 01-.484-1.323A3.501 3.501 0 007.355 15H4.25A2.25 2.25 0 012 12.75v-8.5zm1.5 0a.75.75 0 01.75-.75h11.5a.75.75 0 01.75.75v7.5a.75.75 0 01-.75.75H4.25a.75.75 0 01-.75-.75v-7.5z" clip-rule="evenodd" />
</svg>
<svg v-if="scheme == 'dark'" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" class="icon" fill="currentColor">
<path fill-rule="evenodd" d="M7.455 2.004a.75.75 0 01.26.77 7 7 0 009.958 7.967.75.75 0 011.067.853A8.5 8.5 0 116.647 1.921a.75.75 0 01.808.083z" clip-rule="evenodd" />
</svg>
<svg v-if="scheme == 'light'" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" class="icon" fill="currentColor">
<path d="M10 2a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0v-1.5A.75.75 0 0110 2zM10 15a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0v-1.5A.75.75 0 0110 15zM10 7a3 3 0 100 6 3 3 0 000-6zM15.657 5.404a.75.75 0 10-1.06-1.06l-1.061 1.06a.75.75 0 001.06 1.06l1.06-1.06zM6.464 14.596a.75.75 0 10-1.06-1.06l-1.06 1.06a.75.75 0 001.06 1.06l1.06-1.06zM18 10a.75.75 0 01-.75.75h-1.5a.75.75 0 010-1.5h1.5A.75.75 0 0118 10zM5 10a.75.75 0 01-.75.75h-1.5a.75.75 0 010-1.5h1.5A.75.75 0 015 10zM14.596 15.657a.75.75 0 001.06-1.06l-1.06-1.061a.75.75 0 10-1.06 1.06l1.06 1.06zM5.404 6.464a.75.75 0 001.06-1.06l-1.06-1.06a.75.75 0 10-1.061 1.06l1.06 1.06z" />
</svg>
</button>
</template>
17 changes: 11 additions & 6 deletions resources/views/layout.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
<!-- Style sheets-->
<link rel="preconnect" href="https://fonts.bunny.net">
<link href="https://fonts.bunny.net/css?family=figtree:300,400,500,600" rel="stylesheet" />
<link href="{{ asset(mix($cssFile, 'vendor/horizon')) }}" rel="stylesheet">
<link href="{{ asset(mix('app.css', 'vendor/horizon')) }}" rel="stylesheet" data-scheme="light">
<link href="{{ asset(mix('app-dark.css', 'vendor/horizon')) }}" rel="stylesheet" data-scheme="dark">
</head>
<body>
<div id="horizon" v-cloak>
Expand All @@ -35,11 +36,15 @@
</h1>
</router-link>

<button class="btn btn-muted ml-auto" :class="{active: autoLoadsNewEntries}" v-on:click.prevent="autoLoadNewEntries" title="Auto Load Entries">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" class="icon" fill="currentColor">
<path fill-rule="evenodd" d="M15.312 11.424a5.5 5.5 0 01-9.201 2.466l-.312-.311h2.433a.75.75 0 000-1.5H3.989a.75.75 0 00-.75.75v4.242a.75.75 0 001.5 0v-2.43l.31.31a7 7 0 0011.712-3.138.75.75 0 00-1.449-.39zm1.23-3.723a.75.75 0 00.219-.53V2.929a.75.75 0 00-1.5 0V5.36l-.31-.31A7 7 0 003.239 8.188a.75.75 0 101.448.389A5.5 5.5 0 0113.89 6.11l.311.31h-2.432a.75.75 0 000 1.5h4.243a.75.75 0 00.53-.219z" clip-rule="evenodd" />
</svg>
</button>
<div class="ml-auto">
<scheme-toggler></scheme-toggler>

<button class="btn btn-muted ml-2" :class="{active: autoLoadsNewEntries}" v-on:click.prevent="autoLoadNewEntries" title="Auto Load Entries">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" class="icon" fill="currentColor">
<path fill-rule="evenodd" d="M15.312 11.424a5.5 5.5 0 01-9.201 2.466l-.312-.311h2.433a.75.75 0 000-1.5H3.989a.75.75 0 00-.75.75v4.242a.75.75 0 001.5 0v-2.43l.31.31a7 7 0 0011.712-3.138.75.75 0 00-1.449-.39zm1.23-3.723a.75.75 0 00.219-.53V2.929a.75.75 0 00-1.5 0V5.36l-.31-.31A7 7 0 003.239 8.188a.75.75 0 101.448.389A5.5 5.5 0 0113.89 6.11l.311.31h-2.432a.75.75 0 000 1.5h4.243a.75.75 0 00.53-.219z" clip-rule="evenodd" />
</svg>
</button>
</div>
</div>

<div class="row mt-4">
Expand Down
1 change: 0 additions & 1 deletion src/Http/Controllers/HomeController.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ public function index()
{
return view('horizon::layout', [
'assetsAreCurrent' => Horizon::assetsAreCurrent(),
'cssFile' => Horizon::$useDarkTheme ? 'app-dark.css' : 'app.css',
'horizonScriptVariables' => Horizon::scriptVariables(),
'isDownForMaintenance' => App::isDownForMaintenance(),
]);
Expand Down
2 changes: 0 additions & 2 deletions stubs/HorizonServiceProvider.stub
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@ class HorizonServiceProvider extends HorizonApplicationServiceProvider
// Horizon::routeSmsNotificationsTo('15556667777');
// Horizon::routeMailNotificationsTo('example@example.com');
// Horizon::routeSlackNotificationsTo('slack-webhook-url', '#channel');

// Horizon::night();
}

/**
Expand Down

0 comments on commit 4f762b1

Please sign in to comment.