From 1b8364fdfa17d1761e3dd22b6b399a9ada501900 Mon Sep 17 00:00:00 2001 From: Rajat Date: Thu, 2 Oct 2025 09:46:40 +0530 Subject: [PATCH] added form validator code snippet --- .../Field Completion Counter/README.md | 18 +++++++ .../Field Completion Counter/script.js | 54 +++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 Client-Side Components/Client Scripts/Field Completion Counter/README.md create mode 100644 Client-Side Components/Client Scripts/Field Completion Counter/script.js diff --git a/Client-Side Components/Client Scripts/Field Completion Counter/README.md b/Client-Side Components/Client Scripts/Field Completion Counter/README.md new file mode 100644 index 0000000000..f9b3848388 --- /dev/null +++ b/Client-Side Components/Client Scripts/Field Completion Counter/README.md @@ -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 \ No newline at end of file diff --git a/Client-Side Components/Client Scripts/Field Completion Counter/script.js b/Client-Side Components/Client Scripts/Field Completion Counter/script.js new file mode 100644 index 0000000000..65e727b63e --- /dev/null +++ b/Client-Side Components/Client Scripts/Field Completion Counter/script.js @@ -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); + } + } +} \ No newline at end of file