diff --git a/mozilla/content/html/content/src/nsHTMLTableRowElement.cpp b/mozilla/content/html/content/src/nsHTMLTableRowElement.cpp
index 194b3de251c..d7eb4028482 100644
--- a/mozilla/content/html/content/src/nsHTMLTableRowElement.cpp
+++ b/mozilla/content/html/content/src/nsHTMLTableRowElement.cpp
@@ -44,6 +44,86 @@ static NS_DEFINE_IID(kIDOMHTMLTableSectionElementIID, NS_IDOMHTMLTABLESECTIONELE
static NS_DEFINE_IID(kIDOMHTMLTableCellElementIID, NS_IDOMHTMLTABLECELLELEMENT_IID);
static NS_DEFINE_IID(kIDOMHTMLCollectionIID, NS_IDOMHTMLCOLLECTION_IID);
+// nsTableCellCollection is needed because GenericElementCollection
+// only supports element of a single tag. This collection supports
+// elements
or | elements.
+
+class nsTableCellCollection : public GenericElementCollection
+{
+public:
+
+ nsTableCellCollection(nsIContent* aParent,
+ nsIAtom* aTag);
+ NS_IMETHOD GetLength(PRUint32* aLength);
+ NS_IMETHOD Item(PRUint32 aIndex, nsIDOMNode** aReturn);
+};
+
+nsTableCellCollection::nsTableCellCollection(nsIContent* aParent,
+ nsIAtom* aTag)
+ : GenericElementCollection(aParent, aTag)
+{
+}
+
+NS_IMETHODIMP
+nsTableCellCollection::GetLength(PRUint32* aLength)
+{
+ if (!aLength) {
+ return NS_ERROR_NULL_POINTER;
+ }
+ *aLength = 0;
+ nsresult result = NS_OK;
+ if (mParent) {
+ nsIContent* child = nsnull;
+ PRUint32 childIndex = 0;
+ mParent->ChildAt(childIndex, child);
+ while (child) {
+ nsIAtom* childTag;
+ child->GetTag(childTag);
+ if ((nsHTMLAtoms::td ==childTag) || (nsHTMLAtoms::th ==childTag)) {
+ (*aLength)++;
+ }
+ NS_RELEASE(childTag);
+ NS_RELEASE(child);
+ childIndex++;
+ mParent->ChildAt(childIndex, child);
+ }
+ }
+ return result;
+}
+
+NS_IMETHODIMP
+nsTableCellCollection::Item(PRUint32 aIndex,
+ nsIDOMNode** aReturn)
+{
+ *aReturn = nsnull;
+ PRUint32 theIndex = 0;
+ nsresult rv = NS_OK;
+ if (mParent) {
+ nsIContent* child = nsnull;
+ PRUint32 childIndex = 0;
+ mParent->ChildAt(childIndex, child);
+ while (child) {
+ nsIAtom* childTag;
+ child->GetTag(childTag);
+ if ((nsHTMLAtoms::td ==childTag) || (nsHTMLAtoms::th ==childTag)) {
+ if (aIndex == theIndex) {
+ child->QueryInterface(kIDOMNodeIID, (void**)aReturn); // out-param addref
+ NS_ASSERTION(aReturn, "content element must be an nsIDOMNode");
+ NS_RELEASE(childTag);
+ NS_RELEASE(child);
+ break;
+ }
+ theIndex++;
+ }
+ NS_RELEASE(childTag);
+ NS_RELEASE(child);
+ childIndex++;
+ mParent->ChildAt(childIndex, child);
+ }
+ }
+ return rv;
+}
+
class nsHTMLTableRowElement : public nsIDOMHTMLTableRowElement,
public nsIScriptObjectOwner,
public nsIDOMEventReceiver,
@@ -101,7 +181,7 @@ protected:
nsresult GetSection(nsIDOMHTMLTableSectionElement** aSection);
nsresult GetTable(nsIDOMHTMLTableElement** aTable);
nsGenericHTMLContainerElement mInner;
- GenericElementCollection* mCells;
+ nsTableCellCollection* mCells;
};
#ifdef XXX_debugging
@@ -396,7 +476,7 @@ NS_IMETHODIMP
nsHTMLTableRowElement::GetCells(nsIDOMHTMLCollection** aValue)
{
if (nsnull == mCells) {
- mCells = new GenericElementCollection(this, nsHTMLAtoms::td);
+ mCells = new nsTableCellCollection(this, nsHTMLAtoms::td);
NS_ADDREF(mCells); // this table's reference, released in the destructor
}
mCells->QueryInterface(kIDOMHTMLCollectionIID, (void **)aValue); // caller's addref
@@ -644,3 +724,5 @@ nsHTMLTableRowElement::HandleDOMEvent(nsIPresContext& aPresContext,
aFlags, aEventStatus);
}
+
+
diff --git a/mozilla/layout/html/content/src/nsHTMLTableRowElement.cpp b/mozilla/layout/html/content/src/nsHTMLTableRowElement.cpp
index 194b3de251c..d7eb4028482 100644
--- a/mozilla/layout/html/content/src/nsHTMLTableRowElement.cpp
+++ b/mozilla/layout/html/content/src/nsHTMLTableRowElement.cpp
@@ -44,6 +44,86 @@ static NS_DEFINE_IID(kIDOMHTMLTableSectionElementIID, NS_IDOMHTMLTABLESECTIONELE
static NS_DEFINE_IID(kIDOMHTMLTableCellElementIID, NS_IDOMHTMLTABLECELLELEMENT_IID);
static NS_DEFINE_IID(kIDOMHTMLCollectionIID, NS_IDOMHTMLCOLLECTION_IID);
+// nsTableCellCollection is needed because GenericElementCollection
+// only supports element of a single tag. This collection supports
+// elements | or | elements.
+
+class nsTableCellCollection : public GenericElementCollection
+{
+public:
+
+ nsTableCellCollection(nsIContent* aParent,
+ nsIAtom* aTag);
+ NS_IMETHOD GetLength(PRUint32* aLength);
+ NS_IMETHOD Item(PRUint32 aIndex, nsIDOMNode** aReturn);
+};
+
+nsTableCellCollection::nsTableCellCollection(nsIContent* aParent,
+ nsIAtom* aTag)
+ : GenericElementCollection(aParent, aTag)
+{
+}
+
+NS_IMETHODIMP
+nsTableCellCollection::GetLength(PRUint32* aLength)
+{
+ if (!aLength) {
+ return NS_ERROR_NULL_POINTER;
+ }
+ *aLength = 0;
+ nsresult result = NS_OK;
+ if (mParent) {
+ nsIContent* child = nsnull;
+ PRUint32 childIndex = 0;
+ mParent->ChildAt(childIndex, child);
+ while (child) {
+ nsIAtom* childTag;
+ child->GetTag(childTag);
+ if ((nsHTMLAtoms::td ==childTag) || (nsHTMLAtoms::th ==childTag)) {
+ (*aLength)++;
+ }
+ NS_RELEASE(childTag);
+ NS_RELEASE(child);
+ childIndex++;
+ mParent->ChildAt(childIndex, child);
+ }
+ }
+ return result;
+}
+
+NS_IMETHODIMP
+nsTableCellCollection::Item(PRUint32 aIndex,
+ nsIDOMNode** aReturn)
+{
+ *aReturn = nsnull;
+ PRUint32 theIndex = 0;
+ nsresult rv = NS_OK;
+ if (mParent) {
+ nsIContent* child = nsnull;
+ PRUint32 childIndex = 0;
+ mParent->ChildAt(childIndex, child);
+ while (child) {
+ nsIAtom* childTag;
+ child->GetTag(childTag);
+ if ((nsHTMLAtoms::td ==childTag) || (nsHTMLAtoms::th ==childTag)) {
+ if (aIndex == theIndex) {
+ child->QueryInterface(kIDOMNodeIID, (void**)aReturn); // out-param addref
+ NS_ASSERTION(aReturn, "content element must be an nsIDOMNode");
+ NS_RELEASE(childTag);
+ NS_RELEASE(child);
+ break;
+ }
+ theIndex++;
+ }
+ NS_RELEASE(childTag);
+ NS_RELEASE(child);
+ childIndex++;
+ mParent->ChildAt(childIndex, child);
+ }
+ }
+ return rv;
+}
+
class nsHTMLTableRowElement : public nsIDOMHTMLTableRowElement,
public nsIScriptObjectOwner,
public nsIDOMEventReceiver,
@@ -101,7 +181,7 @@ protected:
nsresult GetSection(nsIDOMHTMLTableSectionElement** aSection);
nsresult GetTable(nsIDOMHTMLTableElement** aTable);
nsGenericHTMLContainerElement mInner;
- GenericElementCollection* mCells;
+ nsTableCellCollection* mCells;
};
#ifdef XXX_debugging
@@ -396,7 +476,7 @@ NS_IMETHODIMP
nsHTMLTableRowElement::GetCells(nsIDOMHTMLCollection** aValue)
{
if (nsnull == mCells) {
- mCells = new GenericElementCollection(this, nsHTMLAtoms::td);
+ mCells = new nsTableCellCollection(this, nsHTMLAtoms::td);
NS_ADDREF(mCells); // this table's reference, released in the destructor
}
mCells->QueryInterface(kIDOMHTMLCollectionIID, (void **)aValue); // caller's addref
@@ -644,3 +724,5 @@ nsHTMLTableRowElement::HandleDOMEvent(nsIPresContext& aPresContext,
aFlags, aEventStatus);
}
+
+
|