Jump to content

How get plain text from UniHtmlMemo


arilotta

Recommended Posts

Hi all,

I need to get the plain text from a UniHtmlMemo, without HTML tags. Using HtmlMemo.Text property returns

text with HTML tags.

The following works:

unisession.addjs('alert('+HtmlMemo.jsname+'.getEditorBody().outerText);');

But I don't know if it is the best option.

Also, how can I get the outerText value from Delphi (server side) code ?

Thanks in advance

Link to comment
Share on other sites

Here is my function to strip HTML tags out of Text:-

function TUniMainModule.StripHTML(S: String): String;
var
  TagBegin, TagEnd, TagLength: Integer;
  MyStr: String;
begin
  TagBegin:= Pos( '<', S);  
  while (TagBegin > 0) do begin  
    TagEnd:= Pos('>', S);  
    TagLength:= TagEnd - TagBegin + 1;
    Delete(S, TagBegin, TagLength); 
    TagBegin:= Pos( '<', S);        
  end;
  MyStr:= S;
  if Pos('&nbsp; &nbsp;', MyStr, 1) > 0 then begin
    MyStr:= CRLF + MyStr;
  end;
  StringReplace(MyStr, #160, ' ', [rfReplaceAll, rfIgnoreCase]);
  MyStr:= Trim(MyStr);
  Result:= MyStr;                
end;
 

 

Link to comment
Share on other sites

Thank you andyhill,

but accessing "getEditorBody().outerText" gives me back automatically CRLF characters.

With the following HTML:

<div><span style="color:black;font-family:'Arial';font-size:11.00pt;">line1</span></div>
<div><span style="color:black;font-family:'Arial';font-size:11.00pt;">line2</span></div>

your function does not return a CRLF between line1 and line2.

Which is the correct way to access a ExtJS function/property from Delphi and obtain the result ?

Link to comment
Share on other sites

14 minutes ago, arilotta said:

<div><span style="color:black;font-family:'Arial';font-size:11.00pt;">line1</span></div> <div><span style="color:black;font-family:'Arial';font-size:11.00pt;">line2</span></div>

Hello,

Then you need to parse additionally I think.

For example, before "StripHTML":

UniMemo1.Text := StringReplace(UniMemo1.Text, '</div>', '</div>'#13#10, [rfReplaceAll]);

 

Link to comment
Share on other sites

Thank, but I think that accessing "getEditorBody().outerText" is the safest/quickest way.

How can I achieve it ?

This works:

unisession.addjs('alert('+HtmlMemo.jsname+'.getEditorBody().outerText);');

I need to pass the getEditorBody().outerText value back to the UniGUI/Delphi environment.

In general, I've learned that it is easy to call a JS procedure via JSCall.

But how can I call a JS function and obtain a result from UniGUI ?

Obviously, in a synchronous/blocking way, that is the Delphi statement should wait 

for the response and not proceed with the following line ?

Sorry for bothering you Sherzod, but I think it could be useful for other users/tasks.

Thank you

Link to comment
Share on other sites

15 minutes ago, arilotta said:

but I think that accessing "getEditorBody().outerText" is the safest/quickest way.

Ok I will check.

15 minutes ago, arilotta said:

I need to pass the getEditorBody().outerText value back to the UniGUI/Delphi environment.

At what point?

Link to comment
Share on other sites

23 hours ago, arilotta said:

I need to have both the HTML version and the plain text version; the plain version will be used to compose a report

Hello,

Can you use client events for this?

function change(sender, newValue, oldValue, eOpts)
{
    ajaxRequest...
}

 

Link to comment
Share on other sites

  • 4 weeks later...

I'va managed to obtain the plain version in the following way, I'm sharing my solution because I thin it could be used also in other scenarions, when there is the need to obtain something from JS:

  FText: string;

procedure TMyForm.UniFormAjaxEvent(Sender: TComponent; EventName: string; Params: TUniStrings);
begin
  if EventName='getHTMLtext' then
    FText:=Params.Values['t1'];
end;

...
...
  UniSession.SendResponse('var t1='+HTMLData.JSName+'.getEditorBody().outerText; '+
                          ' ajaxRequest('+self.Name+', "getHTMLtext", ["t1="+t1]);');
  UniSession.Synchronize; // processes request; fires AjaxEvent
  ShowMessageN(FText);
...
...

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...