Browse Source

260225 文章時間、調色盤加色減色、目前字數計算

OMEGA\lulufj.ho 1 month ago
parent
commit
461784774f

+ 51
- 5
app/Filament/Resources/NewsResource.php View File

38
 use Malzariey\FilamentLexicalEditor\FilamentLexicalEditor;
38
 use Malzariey\FilamentLexicalEditor\FilamentLexicalEditor;
39
 use SolutionForest\FilamentTranslateField\Forms\Component\Translate;
39
 use SolutionForest\FilamentTranslateField\Forms\Component\Translate;
40
 use RalphJSmit\Filament\SEO\SEO;
40
 use RalphJSmit\Filament\SEO\SEO;
41
+use Illuminate\Support\HtmlString;
41
 
42
 
42
 class NewsResource extends Resource
43
 class NewsResource extends Resource
43
 {
44
 {
72
                     ])->columnSpanFull()->columns(2),
73
                     ])->columnSpanFull()->columns(2),
73
                     Group::make()->schema([
74
                     Group::make()->schema([
74
                         DatePicker::make('post_date')
75
                         DatePicker::make('post_date')
75
-                        ->label("發布日期")
76
+                        ->label("文章日期")
76
                         ->closeOnDateSelection()->required(),
77
                         ->closeOnDateSelection()->required(),
77
                         DateTimePicker::make('start_date')
78
                         DateTimePicker::make('start_date')
78
                         ->label("預約發布時間")
79
                         ->label("預約發布時間")
92
                     Translate::make()->schema(fn (string $locale) => [
93
                     Translate::make()->schema(fn (string $locale) => [
93
                         TextInput::make('title')
94
                         TextInput::make('title')
94
                         ->label("標題")
95
                         ->label("標題")
96
+                        ->reactive()
97
+                        ->afterStateHydrated(function ($state, callable $set) {
98
+                            $set('title_length', mb_strlen($state ?? ''));
99
+                        })
100
+                        ->afterStateUpdated(function ($state, callable $set) {
101
+                            $set('title_length', mb_strlen($state ?? ''));
102
+                        })
103
+                        ->helperText(function (callable $get) {
104
+                            $length = $get('title_length') ?? 0;
105
+                            $max = 24;
106
+
107
+                            $divClass = 'text-limit-amount';
108
+
109
+                            return new HtmlString("
110
+                                <div class='{$divClass} text-sm'>
111
+                                    目前字數:{$length} / {$max}
112
+                                </div>
113
+                            ");
114
+                        })
95
                         ->columnSpan(1),
115
                         ->columnSpan(1),
96
                         TextInput::make('written_by')
116
                         TextInput::make('written_by')
97
                         ->label("發佈者")->columnSpan(1),
117
                         ->label("發佈者")->columnSpan(1),
98
-                        Textarea::make("description")->rows(5)->columnSpanFull()->label("短文"),
118
+                        
119
+
120
+                        Textarea::make("description")
121
+                        ->rows(5)
122
+                        ->columnSpanFull()
123
+                        ->label("短文")
124
+                        
125
+                        ->reactive()
126
+                        ->afterStateHydrated(function ($state, callable $set) {
127
+                            $set('description_length', mb_strlen($state ?? ''));
128
+                        })
129
+                        ->afterStateUpdated(function ($state, callable $set) {
130
+                            $set('description_length', mb_strlen($state ?? ''));
131
+                        })
132
+                        ->helperText(function (callable $get) {
133
+                            $length = $get('description_length') ?? 0;
134
+                            $max = 84;
135
+
136
+                            $divClass = 'text-limit-amount';
137
+
138
+                            return new HtmlString("
139
+                                <div class='{$divClass} text-sm'>
140
+                                    目前字數:{$length} / {$max}
141
+                                </div>
142
+                            ");
143
+                        })
99
                     ])->locales(["zh_TW", "en"])
144
                     ])->locales(["zh_TW", "en"])
100
                     ->id("main")
145
                     ->id("main")
101
                     ->columnSpanFull()->columns(3),
146
                     ->columnSpanFull()->columns(3),
147
+                    
102
                     TextInput::make('order')->label("排序")->integer()->default(0),
148
                     TextInput::make('order')->label("排序")->integer()->default(0),
103
                 ])->columns(3),
149
                 ])->columns(3),
104
                 Section::make("SEO")->schema([
150
                 Section::make("SEO")->schema([
165
                                     ToolbarItem::BOLD, ToolbarItem::ITALIC, ToolbarItem::UNDERLINE,
211
                                     ToolbarItem::BOLD, ToolbarItem::ITALIC, ToolbarItem::UNDERLINE,
166
                                     ToolbarItem::LINK, ToolbarItem::TEXT_COLOR, ToolbarItem::BACKGROUND_COLOR,
212
                                     ToolbarItem::LINK, ToolbarItem::TEXT_COLOR, ToolbarItem::BACKGROUND_COLOR,
167
                                     ToolbarItem::SUBSCRIPT, ToolbarItem::LOWERCASE, ToolbarItem::DIVIDER,
213
                                     ToolbarItem::SUBSCRIPT, ToolbarItem::LOWERCASE, ToolbarItem::DIVIDER,
168
-                                    ToolbarItem::UPPERCASE, ToolbarItem::CLEAR, ToolbarItem::HR
214
+                                    ToolbarItem::UPPERCASE, ToolbarItem::CLEAR, ToolbarItem::HR, ToolbarItem::FONT_FAMILY
169
                                 ])
215
                                 ])
170
                                 ->live(onBlur: true)
216
                                 ->live(onBlur: true)
171
                                 ->columnSpanFull(),
217
                                 ->columnSpanFull(),
179
                                     ToolbarItem::BOLD, ToolbarItem::ITALIC, ToolbarItem::UNDERLINE,
225
                                     ToolbarItem::BOLD, ToolbarItem::ITALIC, ToolbarItem::UNDERLINE,
180
                                     ToolbarItem::LINK, ToolbarItem::TEXT_COLOR, ToolbarItem::BACKGROUND_COLOR,
226
                                     ToolbarItem::LINK, ToolbarItem::TEXT_COLOR, ToolbarItem::BACKGROUND_COLOR,
181
                                     ToolbarItem::SUBSCRIPT, ToolbarItem::LOWERCASE, ToolbarItem::DIVIDER,
227
                                     ToolbarItem::SUBSCRIPT, ToolbarItem::LOWERCASE, ToolbarItem::DIVIDER,
182
-                                    ToolbarItem::UPPERCASE, ToolbarItem::CLEAR, ToolbarItem::HR
228
+                                    ToolbarItem::UPPERCASE, ToolbarItem::CLEAR, ToolbarItem::HR, ToolbarItem::FONT_FAMILY
183
                                 ])
229
                                 ])
184
                                 ->columnSpanFull(),
230
                                 ->columnSpanFull(),
185
                         ])->visible(fn (Get $get):bool => $get("paragraph_type") == 2),
231
                         ])->visible(fn (Get $get):bool => $get("paragraph_type") == 2),
253
                 TextColumn::make("newsCategory.name")->label("分類")->alignCenter(),
299
                 TextColumn::make("newsCategory.name")->label("分類")->alignCenter(),
254
                 TextColumn::make("title")->label("標題")->alignCenter(),
300
                 TextColumn::make("title")->label("標題")->alignCenter(),
255
                 TextColumn::make("written_by")->label("發佈者")->alignCenter(),
301
                 TextColumn::make("written_by")->label("發佈者")->alignCenter(),
256
-                TextColumn::make("post_date")->label("發佈時間")->dateTime('Y/m/d')->alignCenter(),
302
+                TextColumn::make("post_date")->label("文章時間")->dateTime('Y/m/d')->alignCenter(),
257
                 ImageColumn::make("news_img_pc_url")->label("列表圖")->alignCenter(),
303
                 ImageColumn::make("news_img_pc_url")->label("列表圖")->alignCenter(),
258
                 TextColumn::make("list_audit_state")->label("狀態")->badge()
304
                 TextColumn::make("list_audit_state")->label("狀態")->badge()
259
                 ->color(fn (string $state): string => match ($state) {
305
                 ->color(fn (string $state): string => match ($state) {

+ 4
- 0
public/css/malzariey/filament-lexical-editor/filament-lexical-editor-styles.css View File

6272
 .dark\:invert:is(.dark *) {
6272
 .dark\:invert:is(.dark *) {
6273
   --tw-invert: invert(100%);
6273
   --tw-invert: invert(100%);
6274
   filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)
6274
   filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)
6275
+}
6276
+
6277
+div.relative.w-52.h-11.py-1:has(select.font-family) {
6278
+  display: none !important;
6275
 }
6279
 }

+ 1
- 1
public/js/malzariey/filament-lexical-editor/components/lexical-component.js
File diff suppressed because it is too large
View File