diff options
author | Marco Pesenti Gritti <marco@it.gnome.org> | 2003-08-05 23:53:46 +0800 |
---|---|---|
committer | Marco Pesenti Gritti <mpeseng@src.gnome.org> | 2003-08-05 23:53:46 +0800 |
commit | 1d3c560d4e3eb2fea630f2d01d2af05e07c2131d (patch) | |
tree | c45551d88480b9e35899665b149d0bdf975d4677 /embed | |
parent | 0cdb5df549513b32c291378257652adbe286faeb (diff) | |
download | gsoc2013-epiphany-1d3c560d4e3eb2fea630f2d01d2af05e07c2131d.tar gsoc2013-epiphany-1d3c560d4e3eb2fea630f2d01d2af05e07c2131d.tar.gz gsoc2013-epiphany-1d3c560d4e3eb2fea630f2d01d2af05e07c2131d.tar.bz2 gsoc2013-epiphany-1d3c560d4e3eb2fea630f2d01d2af05e07c2131d.tar.lz gsoc2013-epiphany-1d3c560d4e3eb2fea630f2d01d2af05e07c2131d.tar.xz gsoc2013-epiphany-1d3c560d4e3eb2fea630f2d01d2af05e07c2131d.tar.zst gsoc2013-epiphany-1d3c560d4e3eb2fea630f2d01d2af05e07c2131d.zip |
Use link text as bookmark title when no title is specified.
2003-08-05 Marco Pesenti Gritti <marco@it.gnome.org>
* embed/mozilla/EventContext.cpp:
* embed/mozilla/EventContext.h:
* src/popup-commands.c: (popup_cmd_bookmark_link):
Use link text as bookmark title when no title
is specified.
Diffstat (limited to 'embed')
-rw-r--r-- | embed/mozilla/EventContext.cpp | 85 | ||||
-rw-r--r-- | embed/mozilla/EventContext.h | 1 |
2 files changed, 85 insertions, 1 deletions
diff --git a/embed/mozilla/EventContext.cpp b/embed/mozilla/EventContext.cpp index 4f518875f..7c30839d0 100644 --- a/embed/mozilla/EventContext.cpp +++ b/embed/mozilla/EventContext.cpp @@ -58,6 +58,84 @@ nsresult EventContext::Init (EphyWrapper *wrapper) return NS_OK; } +nsresult EventContext::GatherTextUnder (nsIDOMNode* aNode, nsString& aResult) +{ + nsAutoString text; + nsCOMPtr<nsIDOMNode> node; + aNode->GetFirstChild(getter_AddRefs(node)); + PRUint32 depth = 1; + + while (node && depth) + { + nsCOMPtr<nsIDOMCharacterData> charData(do_QueryInterface(node)); + PRUint16 nodeType; + + node->GetNodeType(&nodeType); + if (charData && nodeType == nsIDOMNode::TEXT_NODE) + { + /* Add this text to our collection. */ + text += NS_LITERAL_STRING(" "); + nsAutoString data; + charData->GetData(data); + text += data; + } + else + { + nsCOMPtr<nsIDOMHTMLImageElement> img(do_QueryInterface(node)); + if (img) + { + nsAutoString altText; + img->GetAlt(altText); + if (!altText.IsEmpty()) + { + text = altText; + break; + } + } + } + + /* Find the next node to test. */ + PRBool hasChildNodes; + node->HasChildNodes(&hasChildNodes); + if (hasChildNodes) + { + nsCOMPtr<nsIDOMNode> temp = node; + temp->GetFirstChild(getter_AddRefs(node)); + depth++; + } + else + { + nsCOMPtr<nsIDOMNode> nextSibling; + node->GetNextSibling(getter_AddRefs(nextSibling)); + if (nextSibling) + { + node = nextSibling; + } + else + { + nsCOMPtr<nsIDOMNode> parentNode; + node->GetParentNode(getter_AddRefs(parentNode)); + if (!parentNode) + { + node = nsnull; + } + else + { + nsCOMPtr<nsIDOMNode> nextSibling; + parentNode->GetNextSibling(getter_AddRefs(nextSibling)); + node = nextSibling; + depth--; + } + } + } + } + + text.CompressWhitespace(); + aResult = text; + + return NS_OK; +} + nsresult EventContext::ResolveBaseURL (nsIDocument *doc, const nsAString &relurl, nsACString &url) { nsresult rv; @@ -303,9 +381,14 @@ nsresult EventContext::GetEventContext (nsIDOMEventTarget *EventTarget, if (tag.Equals(NS_LITERAL_STRING("a"), nsCaseInsensitiveStringComparator())) { + nsAutoString tmp; + + rv = GatherTextUnder (node, tmp); + if (NS_SUCCEEDED(rv)) + SetStringProperty ("linktext", tmp); + nsCOMPtr <nsIDOMHTMLAnchorElement> anchor = do_QueryInterface(node); - nsAutoString tmp; rv = anchor->GetHref (tmp); if (NS_FAILED(rv)) return NS_ERROR_FAILURE; diff --git a/embed/mozilla/EventContext.h b/embed/mozilla/EventContext.h index 54c51b035..ca59d16dd 100644 --- a/embed/mozilla/EventContext.h +++ b/embed/mozilla/EventContext.h @@ -52,6 +52,7 @@ private: EphyWrapper *mWrapper; nsCOMPtr<nsIDOMDocument> mDOMDocument; + nsresult GatherTextUnder (nsIDOMNode* aNode, nsString& aResult); nsresult ResolveBaseURL (nsIDocument *doc, const nsAString &relurl, nsACString &url); nsresult ResolveDocumentURL (nsIDocument *doc, const nsAString &relurl, nsACString &url); nsresult GetEventContext (nsIDOMEventTarget *EventTarget, |