PageSourceSearch

https://www.modaresanesharif.ac.ir/wp-content/plugins/gravityforms…jquery.textareaCounter.plugin.js?ver=1.8.22

js modaresanesharif.ac.ir collected 2026-09-24 13:16:38 UTC 4,961 bytes, 167 lines download raw bytes

1/*
2 * jQuery Textarea Characters Counter Plugin v 2.0
3 * Examples and documentation at: http://roy-jin.appspot.com/jsp/textareaCounter.jsp
4 * Copyright (c) 2010 Roy Jin
5 * Version: 2.0 (11-JUN-2010)
6 * Dual licensed under the MIT and GPL licenses:
7 * http://www.opensource.org/licenses/mit-license.php
8 * http://www.gnu.org/licenses/gpl.html
9 * Requires: jQuery v1.4.2 or later
10 */
11(function($){
12	$.fn.textareaCount = function(options, fn) {
13        var defaults = {
14			maxCharacterSize: -1,
15			originalStyle: 'originalTextareaInfo',
16			warningStyle: 'warningTextareaInfo',
17			warningNumber: 20,
18			displayFormat: '#input characters | #words words'
19		};
20
21		var options = $.extend(defaults, options);
22
23		var container = $(this);
24
25		$("<div class='charleft'>&nbsp;</div>").insertAfter(container);
26
27
28		//create charleft css
29		var charLeftCss = {
30			'width' : container.width()
31		};
32
33		var charLeftInfo = getNextCharLeftInformation(container);
34		charLeftInfo.addClass(options.originalStyle);
35		//charLeftInfo.css(charLeftCss);
36
37
38		var numInput = 0;
39		var maxCharacters = options.maxCharacterSize;
40		var numLeft = 0;
41		var numWords = 0;
42
43		container.bind('keyup', function(event){limitTextAreaByCharacterCount();})
44				 .bind('mouseover', function(event){setTimeout(function(){limitTextAreaByCharacterCount();}, 10);})
45				 .bind('paste', function(event){setTimeout(function(){limitTextAreaByCharacterCount();}, 10);});
46
47        limitTextAreaByCharacterCount();
48
49		function limitTextAreaByCharacterCount(){
50			charLeftInfo.html(countByCharacters());
51
52			//function call back
53			if(typeof fn != 'undefined'){
54				fn.call(this, getInfo());
55			}
56			return true;
57		}
58
59		function countByCharacters(){
60			var content = container.val();
61			var contentLength = content.length;
62			//Start Cut
63			if(options.maxCharacterSize > 0){
64				//If copied content is already more than maxCharacterSize, chop it to maxCharacterSize.
65				if(contentLength >= options.maxCharacterSize) {
66					content = content.substring(0, options.maxCharacterSize);
67				}
68
69				var newlineCount = getNewlineCount(content);
70
71				// newlineCount new line character. For windows, it occupies 2 characters
72				var systemmaxCharacterSize = options.maxCharacterSize - newlineCount;
73				if (!isWin()){
74					 systemmaxCharacterSize = options.maxCharacterSize
75				}
76				if(contentLength > systemmaxCharacterSize){
77					//avoid scroll bar moving
78					var originalScrollTopPosition = this.scrollTop;
79					container.val(content.substring(0, systemmaxCharacterSize));
80					this.scrollTop = originalScrollTopPosition;
81				}
82				charLeftInfo.removeClass(options.warningStyle);
83				if(systemmaxCharacterSize - contentLength <= options.warningNumber){
84					charLeftInfo.addClass(options.warningStyle);
85				}
86
87				numInput = container.val().length + newlineCount;
88				if(!isWin()){
89					numInput = container.val().length;
90				}
91
92				numWords = countWord(getCleanedWordString(container.val()));
93
94				numLeft = maxCharacters - numInput;
95			} else {
96				//normal count, no cut
97				var newlineCount = getNewlineCount(content);
98				numInput = container.val().length + newlineCount;
99				if(!isWin()){
100					numInput = container.val().length;
101				}
102				numWords = countWord(getCleanedWordString(container.val()));
103			}
104
105			return formatDisplayInfo();
106		}
107
108		function formatDisplayInfo(){
109			var format = options.displayFormat;
110			format = format.replace('#input', numInput);
111			format = format.replace('#words', numWords);
112			//When maxCharacters <= 0, #max, #left cannot be substituted.
113			if(maxCharacters > 0){
114				format = format.replace('#max', maxCharacters);
115				format = format.replace('#left', numLeft);
116			}
117			return format;
118		}
119
120		function getInfo(){
121			var info = {
122				input: numInput,
123				max: maxCharacters,
124				left: numLeft,
125				words: numWords
126			};
127			return info;
128		}
129
130		function getNextCharLeftInformation(container){
131				return container.next('.charleft');
132		}
133
134		function isWin(){
135			var strOS = navigator.appVersion;
136			if (strOS.toLowerCase().indexOf('win') != -1){
137				return true;
138			}
139			return false;
140		}
141
142		function getNewlineCount(content){
143			var newlineCount = 0;
144			for(var i=0; i<content.length;i++){
145				if(content.charAt(i) == '\n'){
146					newlineCount++;
147				}
148			}
149			return newlineCount;
150		}
151
152		function getCleanedWordString(content){
153			var fullStr = content + " ";
154			var initial_whitespace_rExp = /^[^A-Za-z0-9]+/gi;
155			var left_trimmedStr = fullStr.replace(initial_whitespace_rExp, "");
156			var non_alphanumerics_rExp = rExp = /[^A-Za-z0-9]+/gi;
157			var cleanedStr = left_trimmedStr.replace(non_alphanumerics_rExp, " ");
158			var splitString = cleanedStr.split(" ");
159			return splitString;
160		}
161
162		function countWord(cleanedWordString){
163			var word_count = cleanedWordString.length-1;
164			return word_count;
165		}
166	};
167})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.