ajax()) { return response()->json($palettes); } return view('palette-editor', compact('palettes')); } public function store(Request $request) { $request->validate([ 'name' => 'required|unique:palettes,name', ]); $palette = Palette::create(['name' => $request->name]); return response()->json($palette); } public function addColor(Request $request, Palette $palette) { $request->validate([ 'name' => 'required|regex:/^[a-z-]+$/', 'hex_value' => 'required|regex:/^#[a-fA-F0-9]{6}$/' ]); $color = PaletteColor::create([ 'palette_id' => $palette->id, 'name' => $request->name, 'hex_value' => $request->hex_value ]); return response()->json($color); } public function updateColor(Request $request, Palette $palette, PaletteColor $color) { $request->validate([ 'name' => 'required|regex:/^[a-z-]+$/', 'hex_value' => 'required|regex:/^#[a-fA-F0-9]{6}$/' ]); $color->update([ 'name' => $request->name, 'hex_value' => $request->hex_value ]); return response()->json($color); } public function deleteColor(Palette $palette, PaletteColor $color) { if ($palette->name === 'default-colors') { return response()->json(['message' => 'Cannot delete colors from the default palette'], 403); } $color->delete(); return response()->json(['message' => 'Color deleted']); } public function getColors(Palette $palette) { return response()->json($palette->colors); } public function export(Palette $palette) { $palette->load('colors'); // Load the colors relationship $fileName = $palette->name . '.pal'; $content = $palette->colors->map(function($color) { return [ 'name' => $color->name, 'hex_value' => $color->hex_value ]; })->toArray(); $jsonContent = json_encode($content, JSON_PRETTY_PRINT); // Format JSON for readability return response($jsonContent, 200) ->header('Content-Type', 'application/json') ->header('Content-Disposition', 'attachment; filename="'.$fileName.'"'); } public function import(Request $request) { $request->validate([ 'file' => 'required|file|mimes:json,txt' ]); $file = $request->file('file'); $content = json_decode(file_get_contents($file), true); $paletteName = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME); $palette = Palette::firstOrCreate(['name' => $paletteName]); foreach ($content as $color) { PaletteColor::updateOrCreate( ['palette_id' => $palette->id, 'name' => $color['name']], ['hex_value' => $color['hex_value']] ); } return response()->json(['message' => 'Palette imported successfully', 'palette' => $palette]); } public function rename(Request $request, Palette $palette) { if ($palette->name === 'default-colors') { return response()->json(['message' => 'Cannot rename the default palette'], 403); } $request->validate([ 'name' => 'required|unique:palettes,name', ]); $palette->name = $request->name; $palette->save(); return response()->json($palette); } public function delete(Palette $palette) { if ($palette->name === 'default-colors') { return response()->json(['message' => 'Cannot delete the default palette'], 403); } $palette->colors()->delete(); $palette->delete(); return response()->json(['message' => 'Palette deleted']); } }