File:  [mozdev] / chimera / GeckoUtils.h
Revision 1.3: download - view: text, annotated - select for diffs - revision graph
Sun Mar 10 19:26:16 2002 UTC (17 years, 8 months ago) by hyatt
Branches: MAIN
CVS tags: HEAD
Full implementation of window autosaving (including correct ignoring of windows opened as popups by web pages.

    1: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
    2: /* ***** BEGIN LICENSE BLOCK *****
    3:  * Version: NPL 1.1/GPL 2.0/LGPL 2.1
    4:  *
    5:  * The contents of this file are subject to the Netscape Public License
    6:  * Version 1.1 (the "License"); you may not use this file except in
    7:  * compliance with the License. You may obtain a copy of the License at
    8:  * http://www.mozilla.org/NPL/
    9:  *
   10:  * Software distributed under the License is distributed on an "AS IS" basis,
   11:  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
   12:  * for the specific language governing rights and limitations under the
   13:  * License.
   14:  *
   15:  * The Original Code is mozilla.org code.
   16:  *
   17:  * The Initial Developer of the Original Code is 
   18:  * Netscape Communications Corporation.
   19:  * Portions created by the Initial Developer are Copyright (C) 2002
   20:  * the Initial Developer. All Rights Reserved.
   21:  *
   22:  * Contributor(s):
   23:  *
   24:  * Alternatively, the contents of this file may be used under the terms of
   25:  * either the GNU General Public License Version 2 or later (the "GPL"), or 
   26:  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
   27:  * in which case the provisions of the GPL or the LGPL are applicable instead
   28:  * of those above. If you wish to allow use of your version of this file only
   29:  * under the terms of either the GPL or the LGPL, and not to allow others to
   30:  * use your version of this file under the terms of the NPL, indicate your
   31:  * decision by deleting the provisions above and replace them with the notice
   32:  * and other provisions required by the GPL or the LGPL. If you do not delete
   33:  * the provisions above, a recipient may use your version of this file under
   34:  * the terms of any one of the NPL, the GPL or the LGPL.
   35:  *
   36:  * ***** END LICENSE BLOCK ***** */
   37: 
   38: #ifndef __GeckoUtils_h__
   39: #define __GeckoUtils_h__
   40: 
   41: class GeckoUtils
   42: {
   43: public:
   44:   static void GatherTextUnder(nsIDOMNode* aNode, nsString& aResult) {
   45:     nsAutoString text;
   46:     nsCOMPtr<nsIDOMNode> node;
   47:     aNode->GetFirstChild(getter_AddRefs(node));
   48:     PRUint32 depth = 1;
   49:     while (node && depth) {
   50:       nsCOMPtr<nsIDOMCharacterData> charData(do_QueryInterface(node));
   51:       PRUint16 nodeType;
   52:       node->GetNodeType(&nodeType);
   53:       if (charData && nodeType == nsIDOMNode::TEXT_NODE) {
   54:         // Add this text to our collection.
   55:         text += NS_LITERAL_STRING(" ");
   56:         nsAutoString data;
   57:         charData->GetData(data);
   58:         text += data;
   59:       }
   60:       else {
   61:         nsCOMPtr<nsIDOMHTMLImageElement> img(do_QueryInterface(node));
   62:         if (img) {
   63:           nsAutoString altText;
   64:           img->GetAlt(altText);
   65:           if (!altText.IsEmpty()) {
   66:             text = altText;
   67:             break;
   68:           }
   69:         }
   70:       }
   71: 
   72:       // Find the next node to test.
   73:       PRBool hasChildNodes;
   74:       node->HasChildNodes(&hasChildNodes);
   75:       if (hasChildNodes) {
   76:         nsCOMPtr<nsIDOMNode> temp = node;
   77:         temp->GetFirstChild(getter_AddRefs(node));
   78:         depth++;
   79:       }
   80:       else {
   81:         nsCOMPtr<nsIDOMNode> nextSibling;
   82:         node->GetNextSibling(getter_AddRefs(nextSibling));
   83:         if (nextSibling)
   84:           node = nextSibling;
   85:         else {
   86:           nsCOMPtr<nsIDOMNode> parentNode;
   87:           node->GetParentNode(getter_AddRefs(parentNode));
   88:           if (!parentNode)
   89:             node = nsnull;
   90:           else {
   91:             nsCOMPtr<nsIDOMNode> nextSibling;
   92:             parentNode->GetNextSibling(getter_AddRefs(nextSibling));
   93:             node = nextSibling;
   94:             depth--;
   95:           }
   96:         }
   97:       }
   98:     }
   99: 
  100:     text.CompressWhitespace();
  101:     aResult = text;
  102:   };
  103: };
  104: 
  105: 
  106: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>