Tinymce spell check implementations

asp-classic, jquery, tinymce

Solution

First, I'm not sure if this is even ok to piggy back off SG 86's answer, so don't chastize me if it's not...

I used SG 86's example, found that you're unable to directly use TinyMCE's provided spellcheck capabilities, but if you used the hack provided by a forum user, it does successfully work.

- Install and set up TinyMCE

- Follow instructions from forum user

All credit for this solution with TinyMCE should go to the original forum user @ http://tinymce.com/forum/viewtopic.php?id=15662

I recommend setting up googiespell to work with a simple textarea with asp first: googiespell is here: http://orangoo.com/labs/GoogieSpell/

the asp script is James Newtons's ASP proxy on this page: http://orangoo.com/labs/GoogieSpell/Documentation/ So once you got this working here's how you integrate this with TinyMCE in your javascript setup the spellchecker config:

<script language="javascript">

tinyMCE.init({
    theme : "advanced",
    mode : "textareas",
    plugins : "spellchecker",
    theme_advanced_buttons3_add : "spellchecker",
    spellchecker_rpc_url : "/googiespell/spell.asp",
    spellchecker_languages : "+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv"
});

</script>

Edit the line:

   spellchecker_rpc_url : "/googiespell/spell.asp",

to point to where your spell.asp file is located on your application

Replace the contents of spell.asp with the following code:

<%

Dim ByteCount, BinRead
ByteCount = Request.TotalBytes
BinRead = Request.BinaryRead(ByteCount)
rawData = RSBinaryToString(BinRead)

'get language
if instr(rawData, """params"":[""") > 1 then
    lang = mid(rawData, InStr(rawData,"[")+2, 2)
else
    lang = "en"
end if

if instr(rawData, """method"":""checkWords"",") > 1 then
'return mispelled words
 json = mid(rawData, InStrRev(rawData,"["))
 json = mid(json, 1, instr(json, "]"))
 json = replace(json, """,""", " ")
 json = replace(json, """", "")
 t = json

    r = "<?xml version=""1.0"" encoding=""utf-8"" ?><spellrequest textalreadyclipped=""0"" ignoredups=""0"" ignoredigits=""1"" ignoreallcaps=""1""><text>"_
        &t&"</text></spellrequest>"

    r = getURL("https://www.google.com/tbproxy/spell?lang="&lang, r, "","")
    out = "{""id"":null,""result"":["
    wrds = ""
    for each c in filter(split(r,"<c "),"</c>")
        'response.write "<br>"&server.htmlencode(c)
        o = cint(split(split(c,"o=",2)(1),"""")(1))+1
        l = cint(split(split(c,"l=",2)(1),"""")(1))
        s = cint(split(split(c,"s=",2)(1),"""")(1))
        out = out & """" & mid(t,o,l)& """, " 
        wrds = "1"
    next
    if wrds = "" then
        out = "{""id"":null,""result"":[],""error"":null}"
    else
        out = mid(out, 1, len(out)-2) & "],""error"":null}"
    end if

    response.write out
    response.end

else
 'return single word corrections
 json = mid(rawData, InStrRev(rawData,"["))
 json = mid(json, 1, instr(json, "]"))
 json = replace(json, """,""", " ")
 json = replace(json, "en ", "")
 json = replace(json, """", "")
 t = json

    r = "<?xml version=""1.0"" encoding=""utf-8"" ?><spellrequest textalreadyclipped=""0"" ignoredups=""0"" ignoredigits=""1"" ignoreallcaps=""1""><text>"_
        &t&"</text></spellrequest>"

    r = getURL("https://www.google.com/tbproxy/spell?lang="&lang, r, "","")

    for each c in filter(split(r,"<c "),"</c>")
        'response.write "<br>"&server.htmlencode(c)
        o = cint(split(split(c,"o=",2)(1),"""")(1))+1
        l = cint(split(split(c,"l=",2)(1),"""")(1))
        s = cint(split(split(c,"s=",2)(1),"""")(1))
        c = textbetween(">", c, "<")
        '{"id":null,"result":["Titmice","Times","Tines","Tinnies","Timmy\'s"],"error":null}
        out =  "{""id"":null,""result"":["
        wrds = ""
        for each w in split(c,vbTab)
            out = out & """" & w & """, "
            wrds = "1"
        next
        if wrds = "" then
            out = "{""id"":null,""result"":[],""error"":null}"
        else
            out = mid(out, 1, len(out)-2) & "],""error"":null}"
        end if
    next
    response.write out
    response.end
end if

 if t=empty then t = request.form()    'GoogieSpell is going to put the text in the POST data.

'show the reply from google for the POST data.     
 response.write getURL("https://www.google.com/tbproxy/spell?lang="&lang, t, "","")



Function TextBetween(sThis, sAnd, sThat)
    on error resume next
    TextBetween = split(split(sAnd,sThis,2,1)(1),sThat,2,1)(0)
end function

Function RSBinaryToString(xBinary)
  Dim Binary
  If vartype(xBinary)=8 Then Binary = MultiByteToBinary(xBinary) Else Binary = xBinary
  Dim RS, LBinary
  Const adLongVarChar = 201
  Set RS = CreateObject("ADODB.Recordset")
  LBinary = LenB(Binary)

  If LBinary>0 Then
    RS.Fields.Append "mBinary", adLongVarChar, LBinary
    RS.Open
    RS.AddNew
    RS("mBinary").AppendChunk Binary
    RS.Update
    RSBinaryToString = RS("mBinary")
  Else
    RSBinaryToString = ""
  End If
End Function

function getURL(aURL, anyPostData, anyUserName, anyPassword) 
DIM objSrvHTTP,web,method,s
    on error resume next
    s=""
    set objSrvHTTP = Server.CreateObject ("Msxml2.ServerXMLHTTP.3.0")
    if anyPostData=empty then
        objSrvHTTP.open "GET",aURL, true, anyUsername, anyPassword
    else
        objSrvHTTP.open "POST",aURL, true, anyUsername, anyPassword
        objSrvHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    end if
    objSrvHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)"
    objSrvHTTP.send anyPostData
    objSrvHTTP.waitForResponse 7
    select case objSrvHTTP.readyState
        case 0 'object created, but no URL opened
            debug "getURL("&aURL&", "&anyPostData&", "&anyUserName&", "&anyPassword&"): Object Created, no URL opened"
            err.raise 1, "Object Created, no URL opened"
            exit function
        case 1    'loading: URL opened, but no data sent
            debug "getURL("&aURL&", "&anyPostData&", "&anyUserName&", "&anyPassword&"):URL opened, no data sent"
            err.raise 2, "URL opened, no data sent"
            exit function
        case 2    'loaded: data sent, status and headers available, no response recieved.
            debug "getURL("&aURL&", "&anyPostData&", "&anyUserName&", "&anyPassword&"):No response from remote host"
            err.raise 3, "No response from remote host"
            exit function
        case 3    'interactive: some data recieved. responseBody and responseText will return partial results.
            debug "getURL("&aURL&", "&anyPostData&", "&anyUserName&", "&anyPassword&"):Partial response recieved:"
            debug server.htmlencode(objSrvHTTP.responseText)
            s = objSrvHTTP.responseText
            err.raise 4, "Partial response recieved"
        case 4    'complete: 
            s = objSrvHTTP.responseText
        end select
    getURL = s
end function

%>

Edit - Added my header for clarity:

<script type="text/javascript" src="tinymce/jscripts/tiny_mce/tiny_mce.js" ></script>
<script type="text/javascript">
tinyMCE.init({
    mode : "textareas",
    theme : "advanced",
    plugins : "spellchecker",
    theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,undo,redo,|,copy,paste,|,spellchecker",
    theme_advanced_buttons2 : "",
    theme_advanced_buttons3 : "",
    spellchecker_rpc_url : "googiespell/spell.asp",  <--! Needs to point to where the spell.asp script is located on your server. -->
    spellchecker_languages : "+English=en,Spanish=es"
});

</script>

Problem

I have a classic ASP page that has jquery features and has TinyMCE editors on it. I'd like to be able to spell check the editors, but every example I see is using PHP or ASP.net. I came across this page: http://achorniy.wordpress.com/2009/08/11/tinymce-spellchecker-in-java/ but I'm not familiar with SVN, so I'm not really sure how to follow the steps, and I've read that it may not work well with IE. Are there any other options out there to spell check my tinymce editors? Thanks a lot for any help.

Original source