Skip to content

Commit eda4415

Browse files
feat: add character counter to Link's Description section
1 parent 9260453 commit eda4415

2 files changed

Lines changed: 10 additions & 1 deletion

File tree

templates/news/v3/create.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ <h1 class="create-post-page__title">Create Post</h1>
135135
</div>
136136

137137
<div class="field create-post-page__description-field" :style="isLinkType ? 'display:flex' : 'display: none'">
138-
{% include "v3/includes/_field_textarea.html" with name="description" field_id="description" label="Description" value=form.summary.value|default_if_none:"" alpine_disabled_expr="isWriteUp" alpine_x_model="linkDescription" alpine_at_input="onLinkDescriptionEdited($event)" %}
138+
{% include "v3/includes/_field_textarea.html" with name="description" field_id="description" label="Description" value=form.summary.value|default_if_none:"" alpine_disabled_expr="isWriteUp" alpine_x_model="linkDescription" alpine_at_input="onLinkDescriptionEdited($event)" char_counter_max=1000 %}
139139
{% comment %} Auto-Generate is Link-only (Video is out of scope). Disabled until the link field holds a valid URL. Click handler / actual fetch are wired in follow-up commits. {% endcomment %}
140140
<div class="create-post-page__description-actions" x-show="isLink" x-cloak>
141141
<button type="button" class="btn btn-secondary create-post-page__generate-btn" @click="generateLinkDescription()" :disabled="!linkUrlValid || linkGenerating">Auto-Generate Description</button>

templates/v3/includes/_field_textarea.html

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
alpine_disabled_expr (optional) — Alpine expression to conditionally disable the textarea
1414
alpine_x_model (optional) — Alpine state property to two-way bind via x-model (e.g. "linkDescription")
1515
alpine_at_input (optional) — Alpine expression for the @input handler (e.g. "onLinkDescriptionEdited($event)")
16+
char_counter_max (optional) — when set together with alpine_x_model, renders a live "N left" counter next to the label and sets maxlength on the textarea
1617
required (optional) — if truthy, adds required attribute
1718
disabled (optional) — if truthy, adds disabled attribute
1819
extra_class (optional) — additional classes on the wrapper
@@ -23,14 +24,22 @@
2324
<div class="field field--textarea{% if error %} field--error{% endif %}{% if extra_class %} {{ extra_class }}{% endif %}"
2425
{% if alpine_error %}:class="{ 'field--error': {{ alpine_error }} }"{% endif %}>
2526
{% if label %}
27+
{% if char_counter_max and alpine_x_model %}
28+
<div class="create-post-page__field-header">
29+
<label class="field__label" for="field-{{ fid }}">{{ label }}</label>
30+
<span class="create-post-page__char-counter" aria-hidden="true" x-text="({{ char_counter_max }} - ({{ alpine_x_model }} ? {{ alpine_x_model }}.length : 0)).toLocaleString() + ' left'">{{ char_counter_max }} left</span>
31+
</div>
32+
{% else %}
2633
<label class="field__label" for="field-{{ fid }}">{{ label }}</label>
2734
{% endif %}
35+
{% endif %}
2836
<div class="field__control field__control--textarea{% if disabled %} field__control--disabled{% endif %}">
2937
<textarea
3038
class="field__input field__input--textarea"
3139
id="field-{{ fid }}"
3240
name="{{ name }}"
3341
rows="{{ rows|default:4 }}"
42+
{% if char_counter_max %}maxlength="{{ char_counter_max }}"{% endif %}
3443
{% if placeholder %}placeholder="{{ placeholder }}"{% endif %}
3544
{% if required %}required{% endif %}
3645
{% if disabled %}disabled{% endif %}

0 commit comments

Comments
 (0)