<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.webos-internals.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=JustaPre</id>
	<title>WebOS Internals - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.webos-internals.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=JustaPre"/>
	<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/wiki/Special:Contributions/JustaPre"/>
	<updated>2026-05-03T16:00:24Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Patch_Messaging_Character_Counter&amp;diff=4171</id>
		<title>Patch Messaging Character Counter</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Patch_Messaging_Character_Counter&amp;diff=4171"/>
		<updated>2009-08-10T18:29:38Z</updated>

		<summary type="html">&lt;p&gt;JustaPre: /* Notes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{template:patch}}&lt;br /&gt;
[[Image:Messaging_CharacterCounter.jpg|border|right|Character Counter]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
One of the features I liked about my old Treo was the character counter built-in to the messaging application. I thought it would be useful on the Pre, so I modified the messaging application to show the current character count. I made this a separate page from the other modifications because it requires many code changes. Maybe the other messaging modifications could be rolled into this page as well.&lt;br /&gt;
&lt;br /&gt;
== Procedure ==&lt;br /&gt;
&lt;br /&gt;
Run the following commands:&lt;br /&gt;
&lt;br /&gt;
''In this example, I have the patch file located in my home directory under '''patches'''''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /&lt;br /&gt;
sudo patch -p0 --backup-if-mismatch &amp;lt; ~/patches/charcounter.patch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is what you should see if it ran properly:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
patching file /usr/palm/applications/com.palm.app.messaging/app/controllers/chatview-assistant.js&lt;br /&gt;
patching file /usr/palm/applications/com.palm.app.messaging/app/controllers/compose-assistant.js&lt;br /&gt;
patching file /usr/palm/applications/com.palm.app.messaging/app/utilities/CharacterCounter.js&lt;br /&gt;
patching file /usr/palm/applications/com.palm.app.messaging/app/views/chatview/chatview-scene.html&lt;br /&gt;
patching file /usr/palm/applications/com.palm.app.messaging/app/views/compose/compose-scene.html&lt;br /&gt;
patching file /usr/palm/applications/com.palm.app.messaging/stylesheets/messaging.css&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These modifications will require LunaSysMgr to be restarted. A rescan will not work. After you've run the commands above, run one more command:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pkill LunaSysMgr&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== charcounter.patch ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
diff -ur /usr/palm/applications/com.palm.app.messaging/app/controllers/chatview-assistant.js /usr/palm/app-modified/com.palm.app.messaging/app/controllers/chatview-assistant.js&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.messaging/app/controllers/chatview-assistant.js	2009-07-18 00:22:14.000000000 -0500&lt;br /&gt;
+++ /usr/palm/app-modified/com.palm.app.messaging/app/controllers/chatview-assistant.js	2009-07-23 23:13:19.000000000 -0500&lt;br /&gt;
@@ -160,6 +160,11 @@&lt;br /&gt;
 				segmentCountContainer: this.controller.get('segmentCounterContainer'),&lt;br /&gt;
 				segmentCountElement: this.controller.get('segmentCounter'),&lt;br /&gt;
 				setTextFieldValueFn: this.setTextFieldValue.bind(this)&lt;br /&gt;
+			},&lt;br /&gt;
+			charCounter: {&lt;br /&gt;
+				charCountContainer: this.controller.get('charCounterContainer'),&lt;br /&gt;
+				charCountElement: this.controller.get('charCounter'),&lt;br /&gt;
+				setTextFieldValueFn: this.setTextFieldValue.bind(this)&lt;br /&gt;
 			}&lt;br /&gt;
 		};&lt;br /&gt;
 &lt;br /&gt;
diff -ur /usr/palm/applications/com.palm.app.messaging/app/controllers/compose-assistant.js /usr/palm/app-modified/com.palm.app.messaging/app/controllers/compose-assistant.js&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.messaging/app/controllers/compose-assistant.js	2009-07-18 00:22:14.000000000 -0500&lt;br /&gt;
+++ /usr/palm/app-modified/com.palm.app.messaging/app/controllers/compose-assistant.js	2009-07-23 23:14:11.000000000 -0500&lt;br /&gt;
@@ -140,6 +140,11 @@&lt;br /&gt;
 			segmentCountContainer: this.controller.get('segmentCounterContainer'),&lt;br /&gt;
 			segmentCountElement: this.controller.get('segmentCounter'),&lt;br /&gt;
 			setTextFieldValueFn: this.setTextFieldValue.bind(this)&lt;br /&gt;
+		},&lt;br /&gt;
+		charCounter: {&lt;br /&gt;
+			charCountContainer: this.controller.get('charCounterContainer'),&lt;br /&gt;
+			charCountElement: this.controller.get('charCounter'),&lt;br /&gt;
+			setTextFieldValueFn: this.setTextFieldValue.bind(this)&lt;br /&gt;
 		}&lt;br /&gt;
 	};&lt;br /&gt;
 &lt;br /&gt;
diff -ur /usr/palm/applications/com.palm.app.messaging/app/utilities/CharacterCounter.js /usr/palm/app-modified/com.palm.app.messaging/app/utilities/CharacterCounter.js&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.messaging/app/utilities/CharacterCounter.js	2009-07-18 00:22:14.000000000 -0500&lt;br /&gt;
+++ /usr/palm/app-modified/com.palm.app.messaging/app/utilities/CharacterCounter.js	2009-07-23 23:47:32.000000000 -0500&lt;br /&gt;
@@ -39,6 +39,10 @@&lt;br /&gt;
 				containerElement: null,&lt;br /&gt;
 				valueElement: null&lt;br /&gt;
 			};&lt;br /&gt;
+			var charCounterUI = {&lt;br /&gt;
+				containerElement: null,&lt;br /&gt;
+				valueElement: null&lt;br /&gt;
+			};&lt;br /&gt;
 			&lt;br /&gt;
 						&lt;br /&gt;
 			// TODO: eventually we might want to implement some cleverness that counts&lt;br /&gt;
@@ -185,6 +189,20 @@&lt;br /&gt;
 				}&lt;br /&gt;
 			};&lt;br /&gt;
 			&lt;br /&gt;
+			var setCurrentCharCount = function(newCharCount) {&lt;br /&gt;
+				if(charCounterUI.valueElement)&lt;br /&gt;
+					charCounterUI.valueElement.update(newCharCount);&lt;br /&gt;
+				if(charCounterUI.containerElement) {&lt;br /&gt;
+					if (newCharCount == 0) {&lt;br /&gt;
+						if (charCounterUI.containerElement.visible())&lt;br /&gt;
+							charCounterUI.containerElement.hide();&lt;br /&gt;
+					} else {&lt;br /&gt;
+						if (!charCounterUI.containerElement.visible())&lt;br /&gt;
+							charCounterUI.containerElement.show();&lt;br /&gt;
+					}&lt;br /&gt;
+				}&lt;br /&gt;
+			};&lt;br /&gt;
+			&lt;br /&gt;
 			return {&lt;br /&gt;
 				&lt;br /&gt;
 				init: function(controller,platform,textElement,params) {&lt;br /&gt;
@@ -265,7 +283,13 @@&lt;br /&gt;
 								setTextFieldValueFn = params.segmentCounter.setTextFieldValueFn;&lt;br /&gt;
 							}						&lt;br /&gt;
 						}&lt;br /&gt;
-&lt;br /&gt;
+						if(params.charCounter) {&lt;br /&gt;
+							charCounterUI.containerElement = params.charCounter.charCountContainer;&lt;br /&gt;
+							charCounterUI.valueElement = params.charCounter.charCountElement;&lt;br /&gt;
+							if(params.charCounter.setTextFieldValueFn) {&lt;br /&gt;
+								setTextFieldValueFn = params.charCounter.setTextFieldValueFn;&lt;br /&gt;
+							}						&lt;br /&gt;
+						}&lt;br /&gt;
 					}					&lt;br /&gt;
 				},&lt;br /&gt;
 				&lt;br /&gt;
@@ -304,6 +328,7 @@&lt;br /&gt;
 					var rawCharacterData = getRawCharacterData();&lt;br /&gt;
 					var messageData = parseMessage(rawCharacterData.message,rawCharacterData.count,_maxLength,true);&lt;br /&gt;
 					adjustedCharacterCount = messageData.adjustedCharacterCount;&lt;br /&gt;
+					setCurrentCharCount(rawCharacterData.count);&lt;br /&gt;
 					if (_maxLength &amp;gt; 0)&lt;br /&gt;
 						setOverLimit(messageData.isOverLimit);&lt;br /&gt;
 					setCurrentSegmentCount(messageData.segmentCount);				&lt;br /&gt;
diff -ur /usr/palm/applications/com.palm.app.messaging/app/views/chatview/chatview-scene.html /usr/palm/app-modified/com.palm.app.messaging/app/views/chatview/chatview-scene.html&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.messaging/app/views/chatview/chatview-scene.html	2009-07-18 00:22:14.000000000 -0500&lt;br /&gt;
+++ /usr/palm/app-modified/com.palm.app.messaging/app/views/chatview/chatview-scene.html	2009-07-23 23:16:55.000000000 -0500&lt;br /&gt;
@@ -22,6 +22,10 @@&lt;br /&gt;
 			&amp;lt;div id=&amp;quot;messageContainer&amp;quot; class='palm-row'&amp;gt;&lt;br /&gt;
 				&amp;lt;div class=&amp;quot;palm-row-wrapper textfield-group focused&amp;quot;&amp;gt;&lt;br /&gt;
 					&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&lt;br /&gt;
+						&amp;lt;div id=&amp;quot;charCounterContainer&amp;quot;&amp;gt;&lt;br /&gt;
+							&amp;lt;div id=&amp;quot;charCounter&amp;quot;&amp;gt;&lt;br /&gt;
+							&amp;lt;/div&amp;gt;&lt;br /&gt;
+						&amp;lt;/div&amp;gt;&lt;br /&gt;
 						&amp;lt;div id=&amp;quot;attachmentContainer&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
 							&amp;lt;div id=&amp;quot;cancelAttachment&amp;quot;&amp;gt;&lt;br /&gt;
 							&amp;lt;/div&amp;gt;&lt;br /&gt;
diff -ur /usr/palm/applications/com.palm.app.messaging/app/views/compose/compose-scene.html /usr/palm/app-modified/com.palm.app.messaging/app/views/compose/compose-scene.html&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.messaging/app/views/compose/compose-scene.html	2009-07-18 00:22:14.000000000 -0500&lt;br /&gt;
+++ /usr/palm/app-modified/com.palm.app.messaging/app/views/compose/compose-scene.html	2009-07-23 23:17:14.000000000 -0500&lt;br /&gt;
@@ -6,6 +6,10 @@&lt;br /&gt;
 		&amp;lt;div id=&amp;quot;messageContainer&amp;quot; class='palm-row'&amp;gt;&lt;br /&gt;
 			&amp;lt;div class=&amp;quot;palm-row-wrapper textfield-group focused&amp;quot;&amp;gt;&lt;br /&gt;
 				&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&lt;br /&gt;
+					&amp;lt;div id=&amp;quot;charCounterContainer&amp;quot;&amp;gt;&lt;br /&gt;
+						&amp;lt;div id=&amp;quot;charCounter&amp;quot;&amp;gt;&lt;br /&gt;
+						&amp;lt;/div&amp;gt;&lt;br /&gt;
+					&amp;lt;/div&amp;gt;&lt;br /&gt;
 					&amp;lt;div id=&amp;quot;attachmentContainer&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
 						&amp;lt;div id=&amp;quot;cancelAttachment&amp;quot;&amp;gt;&lt;br /&gt;
 						&amp;lt;/div&amp;gt;&lt;br /&gt;
diff -ur /usr/palm/applications/com.palm.app.messaging/stylesheets/messaging.css /usr/palm/app-modified/com.palm.app.messaging/stylesheets/messaging.css&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.messaging/stylesheets/messaging.css	2009-07-18 00:22:22.000000000 -0500&lt;br /&gt;
+++ /usr/palm/app-modified/com.palm.app.messaging/stylesheets/messaging.css	2009-07-23 23:19:25.000000000 -0500&lt;br /&gt;
@@ -837,6 +837,23 @@&lt;br /&gt;
 #messageContainer.palm-row .icon.right {&lt;br /&gt;
 	height: 61px;&lt;br /&gt;
 }&lt;br /&gt;
+#messageContainer #charCounterContainer {&lt;br /&gt;
+	line-height: 20px;&lt;br /&gt;
+	display:block;&lt;br /&gt;
+	height: 20px;&lt;br /&gt;
+	border-width: 0px 10px 0px 9px;&lt;br /&gt;
+	-webkit-border-image: url(../images/message-segment-badge.png) 0 10 0 9 stretch stretch;&lt;br /&gt;
+	position: absolute;&lt;br /&gt;
+	z-index: 3;&lt;br /&gt;
+	top: 2px;&lt;br /&gt;
+	left: 2px;&lt;br /&gt;
+}&lt;br /&gt;
+#messageContainer #charCounterContainer #charCounter {&lt;br /&gt;
+	font-size: 12px;&lt;br /&gt;
+	font-weight: bold;&lt;br /&gt;
+	color: #679BC2;&lt;br /&gt;
+	margin: 0px -4px 3px -3px;&lt;br /&gt;
+}&lt;br /&gt;
 #messageContainer #attachmentContainer {&lt;br /&gt;
 	position: relative;&lt;br /&gt;
 	margin-top:10px;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Post os1.1 update, you will need to swap in the following for the utilities/CharacterCounter.js section: (mod confirmed working by tcurtin, 7/24/09)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
diff -ur /usr/palm/applications/com.palm.app.messaging/app/utilities/CharacterCounter.js /usr/palm/app-modified/com.palm.app.messaging/app/utilities/CharacterCounter.js&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.messaging/app/utilities/CharacterCounter.js	2009-07-18 00:22:14.000000000 -0500&lt;br /&gt;
+++ /usr/palm/app-modified/com.palm.app.messaging/app/utilities/CharacterCounter.js	2009-07-24 12:20:12.000000000 -0500&lt;br /&gt;
@@ -39,6 +39,11 @@&lt;br /&gt;
                                containerElement: null,&lt;br /&gt;
                                valueElement: null&lt;br /&gt;
                        };&lt;br /&gt;
+                       var charCounterUI = {&lt;br /&gt;
+                               containerElement: null,&lt;br /&gt;
+                               valueElement: null&lt;br /&gt;
+                       };&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                        // TODO: eventually we might want to implement some cleverness that counts&lt;br /&gt;
@@ -51,6 +56,10 @@&lt;br /&gt;
                                var message = textAreaElement.value;&lt;br /&gt;
                                return {count:message.length, message:message};&lt;br /&gt;
                        };&lt;br /&gt;
+                       var charCounterUI = {&lt;br /&gt;
+                               containerElement: null,&lt;br /&gt;
+                               valueElement: null&lt;br /&gt;
+                       };&lt;br /&gt;
&lt;br /&gt;
                        var setOverLimit = function(isOver) {&lt;br /&gt;
                                if (isOver) {&lt;br /&gt;
@@ -185,6 +194,21 @@&lt;br /&gt;
                                }&lt;br /&gt;
                        };&lt;br /&gt;
&lt;br /&gt;
+                       var setCurrentCharCount = function(newCharCount) {&lt;br /&gt;
+                               if(charCounterUI.valueElement)&lt;br /&gt;
+                                       charCounterUI.valueElement.update(newCharCount);&lt;br /&gt;
+                               if(charCounterUI.containerElement) {&lt;br /&gt;
+                                       if (newCharCount == 0) {&lt;br /&gt;
+                                               if (charCounterUI.containerElement.visible())&lt;br /&gt;
+                                                       charCounterUI.containerElement.hide();&lt;br /&gt;
+                                       } else {&lt;br /&gt;
+                                               if (!charCounterUI.containerElement.visible())&lt;br /&gt;
+                                                       charCounterUI.containerElement.show();&lt;br /&gt;
+                                       }&lt;br /&gt;
+                               }&lt;br /&gt;
+                       };&lt;br /&gt;
+&lt;br /&gt;
+&lt;br /&gt;
                        return {&lt;br /&gt;
&lt;br /&gt;
                                init: function(controller,platform,textElement,params) {&lt;br /&gt;
@@ -265,7 +289,13 @@&lt;br /&gt;
                                                                setTextFieldValueFn = params.segmentCounter.setTextFieldValueFn;&lt;br /&gt;
                                                        }&lt;br /&gt;
                                                }&lt;br /&gt;
-&lt;br /&gt;
+                                               if(params.charCounter) {&lt;br /&gt;
+                                                       charCounterUI.containerElement = params.charCounter.charCountContainer;&lt;br /&gt;
+                                                       charCounterUI.valueElement = params.charCounter.charCountElement;&lt;br /&gt;
+                                                       if(params.charCounter.setTextFieldValueFn) {&lt;br /&gt;
+                                                               setTextFieldValueFn = params.charCounter.setTextFieldValueFn;&lt;br /&gt;
+                                                       }&lt;br /&gt;
+                                               }&lt;br /&gt;
                                        }&lt;br /&gt;
                                },&lt;br /&gt;
&lt;br /&gt;
@@ -304,6 +334,7 @@&lt;br /&gt;
                                        var rawCharacterData = getRawCharacterData();&lt;br /&gt;
                                        var messageData = parseMessage(rawCharacterData.message,rawCharacterData.count,_maxLength,true);&lt;br /&gt;
                                        adjustedCharacterCount = messageData.adjustedCharacterCount;&lt;br /&gt;
+                                       setCurrentCharCount(rawCharacterData.count);&lt;br /&gt;
                                        if (_maxLength &amp;gt; 0)&lt;br /&gt;
                                                setOverLimit(messageData.isOverLimit);&lt;br /&gt;
                                        setCurrentSegmentCount(messageData.segmentCount);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
[[Patch Messaging Forward Messages]] will not work when applying this patch. Please take a look into this. -thatdude&lt;br /&gt;
&lt;br /&gt;
If this patch is applied manually it works fine with the [[Patch Messaging Forward Messages]] patch. -NetWhiz&lt;br /&gt;
&lt;br /&gt;
This patch keeps giving me an error that it is malformed at line 15, and i cannot seem to fix it. Is there an already made patch file that doesnt involve me cutting and pasting? -paraplegicemu&lt;br /&gt;
&lt;br /&gt;
not sure if this will help.. but I too was getting the malformed stuff.. probably because of the several other patches to the files before this one, so I just manually added all the +++ (green) lines to the files where they should have been and everything is working perfectly.  quite helpful when trying to get into one text msg. - Justin&lt;br /&gt;
&lt;br /&gt;
== Acknowledgements ==&lt;br /&gt;
&lt;br /&gt;
HattCzech&lt;/div&gt;</summary>
		<author><name>JustaPre</name></author>
	</entry>
</feed>