Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Field Completion Counter

## Use Case / Requirement
Display a simple message showing how many fields are completed vs total fields on a form. This helps users track their progress while filling out forms.

## Solution
A simple onLoad client script that:
- Counts filled vs empty fields
- Shows completion status in an info message
- Updates when fields are modified

## Implementation
Add this as an **onLoad** client script on any form.

## Notes
- Excludes system fields and read-only fields
- Updates in real-time as users fill fields
- Simple and lightweight solution
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
function onLoad() {
// Display field completion counter
showFieldProgress();

// Set up listener for field changes
setupProgressUpdater();

function showFieldProgress() {
var allFields = g_form.getFieldNames();
var visibleFields = [];
var filledFields = 0;

// Count visible, editable fields
for (var i = 0; i < allFields.length; i++) {
var fieldName = allFields[i];

// Skip system fields and hidden/readonly fields
if (fieldName.indexOf('sys_') === 0 ||
!g_form.isVisible(fieldName) ||
g_form.isReadOnly(fieldName)) {
continue;
}
visibleFields.push(fieldName);

// Check if field has value
if (g_form.getValue(fieldName)) {
filledFields++;
}
}
var totalFields = visibleFields.length;
var percentage = totalFields > 0 ? Math.round((filledFields / totalFields) * 100) : 0;

g_form.addInfoMessage('Form Progress: ' + filledFields + '/' + totalFields + ' fields completed (' + percentage + '%)');
}

function setupProgressUpdater() {
// Simple debounced update
var updateTimer;

function updateProgress() {
clearTimeout(updateTimer);
updateTimer = setTimeout(function() {
g_form.clearMessages();
showFieldProgress();
}, 500);
}

// Listen for any field change
var allFields = g_form.getFieldNames();
for (var i = 0; i < allFields.length; i++) {
g_form.addElementChangeListener(allFields[i], updateProgress);
}
}
}
Loading