gregmaze Posted April 29, 2015 Share Posted April 29, 2015 Greetings all... I am having a small problem with formatting arrows/bullets. I am trying to get a colored arrow preceding text within a line. When the customer adds text in Marcom Central text editor, the preceding symbol(arrow) is a different color than the text. After entering a return(Mac) key, adding additional lines, there should still be a colored symbol(arrow). I am attaching a screen shot to demonstrate what I am getting. The symbol shows up in the right place, but the color does not change. I am also attaching the code I am using... this is the main code: return Rule("Change detail font color").replace(/<p>/g, "<p> <span><f name =\"Arial Bold\"><color name='PANTONE 382 U'> ⇒ </span>"); "Change detail font color" rule: if (Field("Kitchen Detail")!= "") { return '<span><f name =\"Arial Bold\"><color name="PANTONE 382 U"> ⇒ </span>' + Field("Kitchen Detail"); } return ""; I would appreciate any assistance... Thanks Quote Link to comment Share on other sites More sharing options...
step Posted April 29, 2015 Share Posted April 29, 2015 I think you could accomplish this without the "Change detail font color" rule you've made. Just change your main code to this: var spanTag = '<span font="Arial Bold" color="PANTONE 382 U">⇒ </span>'; return Field("Kitchen Detail").split('<p>').filter(String).map(function(s){return spanTag + s;}).join('<p>'); Here's a break down of what's going on: var spanTag = '<span font="Arial Bold" color="PANTONE 382 U">⇒ </span>'; That's your arrow wrapped in span tags. Note: I used the 'font' and 'color' properties of the span tag rather than 'color' and 'f' tags. Field("Kitchen Detail").split('<p>') Create an array of the "Kitchen Detail" field. Each paragraph is now an element of an array. I'm assuming that returns are translated into paragraph tags in MarcomCentral. .filter(String) Filter out empty array positions. This handles the "if Field("Kitchen Detail") != ''" you had in your "Change detail font color" rule. It will also prevent multiple line breaks. .map(function(s){return spanTag + s;}) Map each element in the array (represented by the 's' variable) to be prepended by the 'spanTags' variable. .join('<p>') Converts the array back to a string and adds back the '<p>' tags. Quote Link to comment Share on other sites More sharing options...
Dan Korn Posted April 29, 2015 Share Posted April 29, 2015 I think that the <p> tags that your rule is trying to replace, which are added by the editor in MarcomCentral, probably have attributes in them, so it's not quite as simple as replacing <p> tags whole. (If they're even <p> tags; they might be <para> tags.) But it's hard to know for sure without seeing the data file that MarcomCentral generates, which is why this is really a MarcomCentral-specific question, which should probably be asked on the MarcomCentral forum. You might want to add a line such as: Print(Field("Kitchen Detail")); to the OnRecordStart rule, and then look in the composition log (.msg) file, which you can usually access by replacing the ".pdf" in the URL to the output with ".msg" in the browser. Then we'll have a better idea of what the actual tags are that Marcom is generating, and what we need to replace. That said, I would think that, instead of replacing <p> or <para> tags, you would simply want to replace instances of the arrows themselves, like so: return Field("Kitchen Detail").replace(/(⇒)/g, "<span><f name =\"Arial Bold\"><color name='PANTONE 382 U'>$1</span>"); Quote Link to comment Share on other sites More sharing options...
gregmaze Posted May 1, 2015 Author Share Posted May 1, 2015 Hello Ste and Dan, Thank you for these great responses... Your responses have given me some great ideas to try to wrap my head around. I did come up with another solution because of short time frame but I do want to try out these solutions... After reading Ste solution, I realized how extensive javascript can be. Again thank you for your help Quote Link to comment Share on other sites More sharing options...
gregmaze Posted May 27, 2015 Author Share Posted May 27, 2015 Good Morning Ste and Dan, I just wanted to followup concerning this thread. The solution Ste first gave worked exactly as I wanted it to. This is a much better solution than I used. Thank you both for the solutions to try. I wanted to especially Thank both of you for actually breaking down what was/is going on in the scripts. That was very helpful in learning the code as opposed to just using it. Again thank you very much and have a great day!!! Quote Link to comment Share on other sites More sharing options...
step Posted May 27, 2015 Share Posted May 27, 2015 Awesome I'm glad that worked for you! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.