]> git.saurik.com Git - wxWidgets.git/commitdiff
Use [DOMRange markupString] to get selection source.
authorVadim Zeitlin <vadim@wxwidgets.org>
Tue, 16 Jul 2013 14:10:17 +0000 (14:10 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Tue, 16 Jul 2013 14:10:17 +0000 (14:10 +0000)
This DOMRange method, previously used in GetSelectedText(), seems to provide
exactly what we need so there doesn't seem to be any reason to use JS to get
the selection text, especially as it didn't even work under OS X 10.8 and
returned an empty string in the unit test.

The unit test still needs adjustment to pass because we don't get back exactly
the same HTML as we used originally, but with more relaxed matching it does
pass now.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74541 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/osx/webview_webkit.mm
tests/controls/webtest.cpp

index 17f273603c0ef052e26a3f11116f3f5f9d4b7cd9..59617c81cf2437d13a7daf337237a2b4d29bc80e 100644 (file)
@@ -906,13 +906,11 @@ void wxWebViewWebKit::SelectAll()
 
 wxString wxWebViewWebKit::GetSelectedSource() const
 {
 
 wxString wxWebViewWebKit::GetSelectedSource() const
 {
-    wxString script = ("var range = window.getSelection().getRangeAt(0);"
-                       "var element = document.createElement('div');"
-                       "element.appendChild(range.cloneContents());"
-                       "return element.innerHTML;");
-    NSString *result = [m_webView stringByEvaluatingJavaScriptFromString:
-                                  wxNSStringWithWxString(script)];
-    return wxStringWithNSString(result);
+    DOMRange* dr = [m_webView selectedDOMRange];
+    if ( !dr )
+        return wxString();
+
+    return wxStringWithNSString([dr markupString]);
 }
 
 wxString wxWebViewWebKit::GetPageText() const
 }
 
 wxString wxWebViewWebKit::GetPageText() const
index 6e7bd6da4cfddb00e02298dc7ffc4b3b8797405e..fbb1bcd2ca01d141f9298a2c6e98f1511cfd0483 100644 (file)
@@ -220,9 +220,18 @@ void WebTestCase::Selection()
 
     CPPUNIT_ASSERT(m_browser->HasSelection());
     CPPUNIT_ASSERT_EQUAL("Some strong text", m_browser->GetSelectedText());
 
     CPPUNIT_ASSERT(m_browser->HasSelection());
     CPPUNIT_ASSERT_EQUAL("Some strong text", m_browser->GetSelectedText());
-    //We lower case the result as ie returns tags in uppercase
-    CPPUNIT_ASSERT_EQUAL("some <strong>strong</strong> text",
-                         m_browser->GetSelectedSource().Lower());
+
+    // The web engine doesn't necessarily represent the HTML in the same way as
+    // we used above, e.g. IE uses upper case for all the tags while WebKit
+    // under OS X inserts plenty of its own <span> tags, so don't test for
+    // equality and just check that the source contains things we'd expect it
+    // to.
+    const wxString selSource = m_browser->GetSelectedSource();
+    WX_ASSERT_MESSAGE
+    (
+        ("Unexpected selection source: \"%s\"", selSource),
+        selSource.Lower().Matches("*some*<strong*strong</strong>*text*")
+    );
 
     m_browser->ClearSelection();
     CPPUNIT_ASSERT(!m_browser->HasSelection());
 
     m_browser->ClearSelection();
     CPPUNIT_ASSERT(!m_browser->HasSelection());