diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php
index 83ab1007..47cd5495 100644
--- a/app/Http/Controllers/AdminController.php
+++ b/app/Http/Controllers/AdminController.php
@@ -70,17 +70,6 @@ class AdminController extends Controller
public function customize(Request $request)
{
- if ($request->input('action') == 'color') {
- $this->validate($request, [
- 'color_scheme' => 'required',
- ]);
-
- $color_scheme = str_replace('_', '-', $request->input('color_scheme'));
- option(['color_scheme' => $color_scheme]);
-
- return json(trans('admin.customize.change-color.success'), 0);
- }
-
$homepage = Option::form('homepage', OptionForm::AUTO_DETECT, function ($form) {
$form->text('home_pic_url')->hint();
@@ -107,10 +96,12 @@ class AdminController extends Controller
$form->textarea('custom_js', 'JavaScript')->rows(6);
})->addMessage()->handle();
- return view('admin.customize', [
- 'forms' => compact('homepage', 'customJsCss'),
- 'extra' => ['currentSkin' => option('color_scheme')],
- ]);
+ if ($request->isMethod('post') && $request->input('action') == 'color') {
+ $color = $this->validate($request, ['color' => 'required'])['color'];
+ option(['color_scheme' => $color]);
+ }
+
+ return view('admin.customize', ['forms' => compact('homepage', 'customJsCss')]);
}
public function score()
diff --git a/resources/assets/src/scripts/route.ts b/resources/assets/src/scripts/route.ts
index a66ae257..e6cbaa76 100644
--- a/resources/assets/src/scripts/route.ts
+++ b/resources/assets/src/scripts/route.ts
@@ -62,8 +62,9 @@ export default [
},
{
path: 'admin/customize',
- component: () => import('../views/admin/Customization.vue'),
- el: '#change-color',
+ module: [
+ () => import('../views/admin/Customization'),
+ ],
},
{
path: 'admin/plugins/manage',
diff --git a/resources/assets/src/views/admin/Customization.ts b/resources/assets/src/views/admin/Customization.ts
new file mode 100644
index 00000000..0bc212ec
--- /dev/null
+++ b/resources/assets/src/views/admin/Customization.ts
@@ -0,0 +1,16 @@
+function handler(event: Event): void {
+ document.body.className =
+ document.body.className.replace(
+ /skin-\w+(?:-light)?/,
+ // eslint-disable-next-line no-extra-parens
+ (event.target as HTMLInputElement).value
+ )
+}
+
+const table = document.querySelector('#change-color')
+/* istanbul ignore next */
+if (table) {
+ table.addEventListener('change', handler)
+}
+
+export default handler
diff --git a/resources/assets/src/views/admin/Customization.vue b/resources/assets/src/views/admin/Customization.vue
deleted file mode 100644
index 49d28e6c..00000000
--- a/resources/assets/src/views/admin/Customization.vue
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-