PluginProbe ʕ •ᴥ•ʔ
Everest Forms – Contact Form, Payment Form, Quiz, Survey & Custom Form Builder with AI / 1.9.9
Everest Forms – Contact Form, Payment Form, Quiz, Survey & Custom Form Builder with AI v1.9.9
3.5.2 3.5.1 3.5.0 3.4.8 3.4.7 3.4.6 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.5.1 1.1.6 1.1.7 1.1.8 1.1.9 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.5.0 1.5.1 1.5.10 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.6.1 1.6.7 1.7.0 1.7.0.1 1.7.0.2 1.7.0.3 1.7.1 1.7.2 1.7.2.1 1.7.2.2 1.7.3 1.7.4 1.7.5 1.7.5.1 1.7.5.2 1.7.6 1.7.7 1.7.7.1 1.7.7.2 1.7.8 1.7.9 1.8.0 1.8.0.1 1.8.1 1.8.2 1.8.2.1 1.8.2.2 1.8.2.3 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9.0 1.9.0.1 1.9.1 1.9.2 1.9.3 1.9.4 1.9.4.1 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.0.1 2.0.1 2.0.2 2.0.3 2.0.3.1 2.0.4 2.0.4.1 2.0.5 2.0.6 2.0.7 2.0.8 2.0.8.1 2.0.9 3.0.0 3.0.0.1 3.0.1 3.0.2 3.0.3 3.0.3.1 3.0.4 3.0.4.1 3.0.4.2 3.0.5 3.0.5.1 3.0.5.2 3.0.6 3.0.6.1 3.0.7.1 3.0.8 3.0.8.1 3.0.9 3.0.9.1 3.0.9.2 3.0.9.3 3.0.9.4 3.0.9.5 3.1.0 3.1.1 3.1.2 3.2.0 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.3.0 3.4.0 3.4.1 3.4.2 3.4.2.1 3.4.3 3.4.4 3.4.5 trunk 1.0 1.0.1 1.0.2 1.0.3
everest-forms / assets / js / frontend / text-limit.js
everest-forms / assets / js / frontend Last commit date
ajax-submission.js 3 years ago ajax-submission.min.js 3 years ago everest-forms.js 3 years ago everest-forms.min.js 3 years ago text-limit.js 6 years ago text-limit.min.js 4 years ago
text-limit.js
180 lines
1 /* global everest_forms_text_limit_params */
2 jQuery( function() {
3 'use strict';
4
5 // everest_forms_text_limit_params is required to continue, ensure the object exists.
6 if ( typeof everest_forms_text_limit_params === 'undefined' ) {
7 return false;
8 }
9
10 /**
11 * TextLimitHandler class.
12 */
13 var TextLimitHandler = function() {
14 self = this;
15
16 // Limit by characters.
17 Array.prototype.slice.call( document.querySelectorAll( '.everest-forms-limit-characters-enabled' ) ).map( function( event ) {
18 var limit = parseInt( event.dataset.textLimit, 10 ) || 0;
19 event.value = event.value.slice( 0, limit );
20 var hint = self.createHint(
21 event.dataset.formId,
22 event.dataset.fieldId,
23 self.renderHint(
24 everest_forms_text_limit_params.i18n_messages_limit_characters,
25 event.value.length,
26 limit
27 )
28 );
29 event.parentNode.appendChild( hint );
30
31 // Event listener.
32 event.addEventListener( 'keyup', self.checkCharacters( hint, limit ) );
33 event.addEventListener( 'keydown', self.checkCharacters( hint, limit ) );
34 } );
35
36 // Limit by words count.
37 Array.prototype.slice.call( document.querySelectorAll( '.everest-forms-limit-words-enabled' ) ).map( function( event ) {
38 var limit = parseInt( event.dataset.textLimit, 10 ) || 0;
39 event.value = event.value.trim().split( /\s+/ ).slice( 0, limit ).join( ' ' );
40 var hint = self.createHint(
41 event.dataset.formId,
42 event.dataset.fieldId,
43 self.renderHint(
44 everest_forms_text_limit_params.i18n_messages_limit_words,
45 event.value.trim().split( /\s+/ ).length,
46 limit
47 )
48 );
49 event.parentNode.appendChild( hint );
50
51 // Event listener.
52 event.addEventListener( 'keyup', self.checkWords( hint, limit ) );
53 event.addEventListener( 'keydown', self.checkWords( hint, limit ) );
54 event.addEventListener( 'paste', self.pasteWords( limit ) );
55 } );
56 };
57
58 /**
59 * Predefine hint text to display.
60 *
61 * @since 1.6.0
62 *
63 * @param {string} hintText Hint text.
64 * @param {number} count Current count.
65 * @param {number} limit Limit to.
66 *
67 * @returns {string} Predefined hint text.
68 */
69 TextLimitHandler.prototype.renderHint = function( hintText, count, limit ) {
70 return hintText.replace( '{count}', count ).replace( '{limit}', limit );
71 }
72
73 /**
74 * Create HTMLElement hint element with text.
75 *
76 * @since 1.6.0
77 *
78 * @param {number} formId Form id.
79 * @param {number} fieldId Form field id.
80 * @param {string} text Text to hint element.
81 *
82 * @returns {object} HTMLElement hint element with text.
83 */
84 TextLimitHandler.prototype.createHint = function( formId, fieldId, text ) {
85 var hint = document.createElement( 'div' );
86
87 hint.classList.add( 'everest-forms-field-limit-text' );
88 hint.id = 'everest-forms-field-limit-text-' + formId + '-' + fieldId;
89 hint.textContent = text;
90
91 return hint;
92 }
93
94 /**
95 * Keyup/Keydown event higher order function for characters limit.
96 *
97 * @since 1.6.0
98 *
99 * @param {object} hint HTMLElement hint element.
100 * @param {number} limit Max allowed number of characters.
101 *
102 * @returns {Function} Handler function.
103 */
104 TextLimitHandler.prototype.checkCharacters = function( hint, limit ) {
105 return function( event ) {
106 hint.textContent = self.renderHint(
107 everest_forms_text_limit_params.i18n_messages_limit_characters,
108 this.value.length,
109 limit
110 );
111 };
112 }
113
114 /**
115 * Keyup/Keydown event higher order function for words limit.
116 *
117 * @since 1.6.0
118 *
119 * @param {object} hint HTMLElement hint element.
120 * @param {number} limit Max allowed number of characters.
121 *
122 * @returns {Function} Handler function.
123 */
124 TextLimitHandler.prototype.checkWords = function( hint, limit ) {
125 return function( event ) {
126 var words = this.value.trim().split( /\s+/ );
127
128 if ( event.keyCode === 32 && words.length >= limit ) {
129 event.preventDefault();
130 }
131
132 hint.textContent = self.renderHint(
133 everest_forms_text_limit_params.i18n_messages_limit_words,
134 words.length,
135 limit
136 );
137 };
138 }
139
140 /**
141 * Get passed text from clipboard.
142 *
143 * @since 1.6.0
144 *
145 * @param {ClipboardEvent} e Clipboard event.
146 *
147 * @returns {string} Text from clipboard.
148 */
149 TextLimitHandler.prototype.getPastedText = function( event ) {
150 if ( window.clipboardData && window.clipboardData.getData ) { // IE
151 return window.clipboardData.getData( 'Text' );
152 } else if ( event.clipboardData && event.clipboardData.getData ) {
153 return event.clipboardData.getData( 'text/plain' );
154 }
155 }
156
157 /**
158 * Paste event higher order function for words limit.
159 *
160 * @since 1.6.0
161 *
162 * @param {number} limit Max allowed number of words.
163 *
164 * @returns {Function} Event handler.
165 */
166 TextLimitHandler.prototype.pasteWords = function( limit ) {
167 return function( event ) {
168 event.preventDefault();
169 var pastedText = self.getPastedText( event ).trim().split( /\s+/ );
170 pastedText.splice( limit, pastedText.length );
171 this.value = pastedText.join( ' ' );
172 };
173 }
174
175 /**
176 * Init TextLimitHandler.
177 */
178 new TextLimitHandler();
179 });
180