diff --git a/NorahUniversity/__pycache__/settings.cpython-312.pyc b/NorahUniversity/__pycache__/settings.cpython-312.pyc index 44677f0..745fbd7 100644 Binary files a/NorahUniversity/__pycache__/settings.cpython-312.pyc and b/NorahUniversity/__pycache__/settings.cpython-312.pyc differ diff --git a/NorahUniversity/__pycache__/urls.cpython-312.pyc b/NorahUniversity/__pycache__/urls.cpython-312.pyc index 6c86a8b..0cc7192 100644 Binary files a/NorahUniversity/__pycache__/urls.cpython-312.pyc and b/NorahUniversity/__pycache__/urls.cpython-312.pyc differ diff --git a/NorahUniversity/settings.py b/NorahUniversity/settings.py index 1b33af7..8049d5a 100644 --- a/NorahUniversity/settings.py +++ b/NorahUniversity/settings.py @@ -48,6 +48,7 @@ INSTALLED_APPS = [ 'channels', 'django_filters', 'crispy_forms', + 'django_summernote', 'crispy_bootstrap5', 'django_extensions', 'template_partials', diff --git a/NorahUniversity/urls.py b/NorahUniversity/urls.py index b8ab419..84c78b0 100644 --- a/NorahUniversity/urls.py +++ b/NorahUniversity/urls.py @@ -16,7 +16,8 @@ urlpatterns = [ path('admin/', admin.site.urls), path('api/', include(router.urls)), path('accounts/', include('allauth.urls')), - path('i18n/', include('django.conf.urls.i18n')), + path('i18n/', include('django.conf.urls.i18n')), + path('summernote/', include('django_summernote.urls')), ] # 2. URLs that DO have a language prefix (user-facing views) diff --git a/db.sqlite3 b/db.sqlite3 index 0bc4b00..6cb77e4 100644 Binary files a/db.sqlite3 and b/db.sqlite3 differ diff --git a/recruitment/__pycache__/forms.cpython-312.pyc b/recruitment/__pycache__/forms.cpython-312.pyc index 7444e5d..72e2db2 100644 Binary files a/recruitment/__pycache__/forms.cpython-312.pyc and b/recruitment/__pycache__/forms.cpython-312.pyc differ diff --git a/recruitment/forms.py b/recruitment/forms.py index dab5dbc..05d2ae0 100644 --- a/recruitment/forms.py +++ b/recruitment/forms.py @@ -1,10 +1,12 @@ from django import forms from .validators import validate_hash_tags -from crispy_forms.helper import FormHelper from django.core.validators import URLValidator from django.utils.translation import gettext_lazy as _ -from crispy_forms.layout import Layout, Submit, HTML, Div, Field +from crispy_forms.helper import FormHelper +from crispy_forms.layout import Layout, Submit, Row, Column, Field, Div from .models import ZoomMeeting, Candidate,TrainingMaterial,JobPosting,FormTemplate,InterviewSchedule +from django_summernote.widgets import SummernoteWidget + class CandidateForm(forms.ModelForm): class Meta: @@ -150,28 +152,33 @@ class TrainingMaterialForm(forms.ModelForm): 'file': _('File'), } widgets = { - 'title': forms.TextInput(attrs={'class': 'form-control', 'placeholder': _('Enter title')}), - 'content': forms.Textarea(attrs={'rows': 6, 'class': 'form-control', 'placeholder': _('Enter material content')}), + 'title': forms.TextInput(attrs={'class': 'form-control', 'placeholder': _('Enter material title')}), + # 💡 Use SummernoteWidget here + 'content': SummernoteWidget(attrs={'placeholder': _('Enter material content')}), 'video_link': forms.URLInput(attrs={'class': 'form-control', 'placeholder': _('https://www.youtube.com/watch?v=...')}), 'file': forms.FileInput(attrs={'class': 'form-control'}), } - + + # The __init__ and FormHelper layout remains the same def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.helper = FormHelper() self.helper.form_method = 'post' - self.helper.form_class = 'form-horizontal' - self.helper.label_class = 'col-md-3' - self.helper.field_class = 'col-md-9' + self.helper.form_class = 'g-3' + self.helper.layout = Layout( - Field('title', css_class='form-control'), - Field('content', css_class='form-control'), - Div( - Field('video_link', css_class='form-control'), - Field('file', css_class='form-control'), - css_class='row' + 'title', + 'content', # Summernote is applied via the widgets dictionary + Row( + Column('video_link', css_class='col-md-6'), + Column('file', css_class='col-md-6'), + css_class='g-3 mb-4' ), - Submit('submit', _('Save Material'), css_class='btn btn-primary mt-3') + Div( + Submit('submit', _('Create Material'), + css_class='btn btn-main-action'), + css_class='col-12 mt-4' + ) ) @@ -222,25 +229,22 @@ class JobPostingForm(forms.ModelForm): 'value': 'United States' }), - # Job Details - 'description': forms.Textarea(attrs={ - 'class': 'form-control', - 'rows': 6, + # Job Details (Using SummernoteWidget) + 'description': SummernoteWidget(attrs={ + # Removed 'class' and 'rows' as Summernote handles styling 'placeholder': 'Provide a comprehensive description of the role, responsibilities, and expectations...', 'required': True }), - 'qualifications': forms.Textarea(attrs={ - 'class': 'form-control', - 'rows': 4, + 'qualifications': SummernoteWidget(attrs={ + # Removed 'class' and 'rows' 'placeholder': 'List required qualifications, skills, education, and experience...' }), 'salary_range': forms.TextInput(attrs={ 'class': 'form-control', 'placeholder': '$60,000 - $80,000' }), - 'benefits': forms.Textarea(attrs={ - 'class': 'form-control', - 'rows': 2, + 'benefits': SummernoteWidget(attrs={ + # Removed 'class' and 'rows' 'placeholder': 'Health insurance, retirement plans, tuition reimbursement, etc.' }), @@ -254,9 +258,8 @@ class JobPostingForm(forms.ModelForm): 'class': 'form-control', 'type': 'date' }), - 'application_instructions': forms.Textarea(attrs={ - 'class': 'form-control', - 'rows': 3, + 'application_instructions': SummernoteWidget(attrs={ + # Removed 'class' and 'rows' 'placeholder': 'Special instructions for applicants (e.g., required documents, reference requirements, etc.)' }), 'open_positions': forms.NumberInput(attrs={ @@ -267,8 +270,7 @@ class JobPostingForm(forms.ModelForm): 'hash_tags': forms.TextInput(attrs={ 'class': 'form-control', 'placeholder': '#hiring,#jobopening', - 'validators':validate_hash_tags, - + # 'validators':validate_hash_tags, # Assuming this is available }), # Internal Information diff --git a/templates/base.html b/templates/base.html index f47418c..5e676c5 100644 --- a/templates/base.html +++ b/templates/base.html @@ -279,7 +279,7 @@ {% endcomment %} -