зеркало из https://github.com/mozilla/pjs.git
53259 - min-width and max-width not supported on form control
59035 - type of a BUTTON should default to submit when type isn't specified r=kmcclusk sr=buster
This commit is contained in:
Родитель
ca5b944c63
Коммит
b554f7fdda
|
@ -304,9 +304,26 @@ nsHTMLButtonControlFrame::IsReset(PRInt32 type)
|
||||||
}
|
}
|
||||||
|
|
||||||
PRBool
|
PRBool
|
||||||
nsHTMLButtonControlFrame::IsSubmit(PRInt32 type)
|
nsHTMLButtonControlFrame::IsSubmit(nsIPresContext* aPresContext, PRInt32 type)
|
||||||
{
|
{
|
||||||
if (NS_FORM_BUTTON_SUBMIT == type) {
|
nsCompatibility mode;
|
||||||
|
aPresContext->GetCompatibilityMode(&mode);
|
||||||
|
if (eCompatibility_Standard == mode && mContent != nsnull) {
|
||||||
|
// The default type for a html4 button is NS_FORM_BUTTON_BUTTON,
|
||||||
|
// but that does not mean that the type was actually set to "button"
|
||||||
|
// so we need to check here to see if a type was actually set
|
||||||
|
// and oif it wasn't explicitly then we we allow to be a submit
|
||||||
|
if (NS_FORM_BUTTON_BUTTON == type) {
|
||||||
|
nsAutoString type;
|
||||||
|
if (NS_CONTENT_ATTR_HAS_VALUE == mContent->GetAttribute(kNameSpaceID_HTML, nsHTMLAtoms::type, type)) {
|
||||||
|
return PR_FALSE;
|
||||||
|
} else {
|
||||||
|
return PR_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NS_FORM_BUTTON_SUBMIT == type || NS_FORM_INPUT_SUBMIT == type) {
|
||||||
return PR_TRUE;
|
return PR_TRUE;
|
||||||
} else {
|
} else {
|
||||||
return PR_FALSE;
|
return PR_FALSE;
|
||||||
|
@ -337,7 +354,7 @@ nsHTMLButtonControlFrame::MouseClicked(nsIPresContext* aPresContext)
|
||||||
mFormFrame->OnReset(aPresContext);
|
mFormFrame->OnReset(aPresContext);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (IsSubmit(type) == PR_TRUE) {
|
else if (IsSubmit(aPresContext, type) == PR_TRUE) {
|
||||||
event.message = NS_FORM_SUBMIT;
|
event.message = NS_FORM_SUBMIT;
|
||||||
presShell->HandleEventWithTarget(&event, nsnull, formContent, NS_EVENT_FLAG_INIT, &status);
|
presShell->HandleEventWithTarget(&event, nsnull, formContent, NS_EVENT_FLAG_INIT, &status);
|
||||||
if (nsEventStatus_eConsumeNoDefault != status && mFormFrame) {
|
if (nsEventStatus_eConsumeNoDefault != status && mFormFrame) {
|
||||||
|
@ -658,18 +675,37 @@ nsHTMLButtonControlFrame::Reflow(nsIPresContext* aPresContext,
|
||||||
focusPadding.top + aReflowState.mComputedBorderPadding.top,
|
focusPadding.top + aReflowState.mComputedBorderPadding.top,
|
||||||
0, aStatus);
|
0, aStatus);
|
||||||
|
|
||||||
|
// calculate the min internal size so the contents gets centered correctly
|
||||||
|
nscoord minInternalWidth = aReflowState.mComputedMinWidth == 0?0:aReflowState.mComputedMinWidth -
|
||||||
|
(aReflowState.mComputedBorderPadding.left + aReflowState.mComputedBorderPadding.right);
|
||||||
|
nscoord minInternalHeight = aReflowState.mComputedMinHeight == 0?0:aReflowState.mComputedMinHeight -
|
||||||
|
(aReflowState.mComputedBorderPadding.top + aReflowState.mComputedBorderPadding.bottom);
|
||||||
|
|
||||||
// center child vertically
|
// center child vertically
|
||||||
nscoord yoff = 0;
|
nscoord yoff = 0;
|
||||||
if (aReflowState.mComputedHeight != NS_INTRINSICSIZE) {
|
if (aReflowState.mComputedHeight != NS_INTRINSICSIZE) {
|
||||||
yoff = (aReflowState.mComputedHeight - aDesiredSize.height)/2;
|
yoff = (aReflowState.mComputedHeight - aDesiredSize.height)/2;
|
||||||
if (yoff < 0)
|
if (yoff < 0) {
|
||||||
yoff = 0;
|
yoff = 0;
|
||||||
|
}
|
||||||
|
} else if (aDesiredSize.height < minInternalHeight) {
|
||||||
|
yoff = (minInternalHeight - aDesiredSize.height) / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// center child horizontally
|
||||||
|
nscoord xoff = 0;
|
||||||
|
if (aReflowState.mComputedHeight != NS_INTRINSICSIZE) {
|
||||||
|
xoff = (aReflowState.mComputedWidth - aDesiredSize.width)/2;
|
||||||
|
if (xoff < 0) {
|
||||||
|
xoff = 0;
|
||||||
|
}
|
||||||
|
} else if (aDesiredSize.width < minInternalWidth) {
|
||||||
|
xoff = (minInternalWidth - aDesiredSize.width) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
// Place the child
|
// Place the child
|
||||||
FinishReflowChild(firstKid, aPresContext, aDesiredSize,
|
FinishReflowChild(firstKid, aPresContext, aDesiredSize,
|
||||||
focusPadding.left + aReflowState.mComputedBorderPadding.left,
|
xoff + focusPadding.left + aReflowState.mComputedBorderPadding.left,
|
||||||
yoff + focusPadding.top + aReflowState.mComputedBorderPadding.top, 0);
|
yoff + focusPadding.top + aReflowState.mComputedBorderPadding.top, 0);
|
||||||
|
|
||||||
#if 0 // old way
|
#if 0 // old way
|
||||||
|
@ -716,6 +752,20 @@ nsHTMLButtonControlFrame::Reflow(nsIPresContext* aPresContext,
|
||||||
aDesiredSize.maxElementSize->height = aDesiredSize.height;
|
aDesiredSize.maxElementSize->height = aDesiredSize.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Make sure we obey min/max-width and min/max-height
|
||||||
|
if (aDesiredSize.width > aReflowState.mComputedMaxWidth) {
|
||||||
|
aDesiredSize.width = aReflowState.mComputedMaxWidth;
|
||||||
|
}
|
||||||
|
if (aDesiredSize.width < aReflowState.mComputedMinWidth) {
|
||||||
|
aDesiredSize.width = aReflowState.mComputedMinWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (aDesiredSize.height > aReflowState.mComputedMaxHeight) {
|
||||||
|
aDesiredSize.height = aReflowState.mComputedMaxHeight;
|
||||||
|
}
|
||||||
|
if (aDesiredSize.height < aReflowState.mComputedMinHeight) {
|
||||||
|
aDesiredSize.height = aReflowState.mComputedMinHeight;
|
||||||
|
}
|
||||||
aStatus = NS_FRAME_COMPLETE;
|
aStatus = NS_FRAME_COMPLETE;
|
||||||
|
|
||||||
nsFormControlFrame::SetupCachedSizes(mCacheSize, mCachedMaxElementSize, aDesiredSize);
|
nsFormControlFrame::SetupCachedSizes(mCacheSize, mCachedMaxElementSize, aDesiredSize);
|
||||||
|
|
|
@ -146,7 +146,7 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual PRBool IsReset(PRInt32 type);
|
virtual PRBool IsReset(PRInt32 type);
|
||||||
virtual PRBool IsSubmit(PRInt32 type);
|
virtual PRBool IsSubmit(nsIPresContext* aPresContext, PRInt32 type);
|
||||||
NS_IMETHOD AddComputedBorderPaddingToDesiredSize(nsHTMLReflowMetrics& aDesiredSize,
|
NS_IMETHOD AddComputedBorderPaddingToDesiredSize(nsHTMLReflowMetrics& aDesiredSize,
|
||||||
const nsHTMLReflowState& aSuggestedReflowState);
|
const nsHTMLReflowState& aSuggestedReflowState);
|
||||||
NS_IMETHOD_(nsrefcnt) AddRef(void);
|
NS_IMETHOD_(nsrefcnt) AddRef(void);
|
||||||
|
|
|
@ -304,9 +304,26 @@ nsHTMLButtonControlFrame::IsReset(PRInt32 type)
|
||||||
}
|
}
|
||||||
|
|
||||||
PRBool
|
PRBool
|
||||||
nsHTMLButtonControlFrame::IsSubmit(PRInt32 type)
|
nsHTMLButtonControlFrame::IsSubmit(nsIPresContext* aPresContext, PRInt32 type)
|
||||||
{
|
{
|
||||||
if (NS_FORM_BUTTON_SUBMIT == type) {
|
nsCompatibility mode;
|
||||||
|
aPresContext->GetCompatibilityMode(&mode);
|
||||||
|
if (eCompatibility_Standard == mode && mContent != nsnull) {
|
||||||
|
// The default type for a html4 button is NS_FORM_BUTTON_BUTTON,
|
||||||
|
// but that does not mean that the type was actually set to "button"
|
||||||
|
// so we need to check here to see if a type was actually set
|
||||||
|
// and oif it wasn't explicitly then we we allow to be a submit
|
||||||
|
if (NS_FORM_BUTTON_BUTTON == type) {
|
||||||
|
nsAutoString type;
|
||||||
|
if (NS_CONTENT_ATTR_HAS_VALUE == mContent->GetAttribute(kNameSpaceID_HTML, nsHTMLAtoms::type, type)) {
|
||||||
|
return PR_FALSE;
|
||||||
|
} else {
|
||||||
|
return PR_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NS_FORM_BUTTON_SUBMIT == type || NS_FORM_INPUT_SUBMIT == type) {
|
||||||
return PR_TRUE;
|
return PR_TRUE;
|
||||||
} else {
|
} else {
|
||||||
return PR_FALSE;
|
return PR_FALSE;
|
||||||
|
@ -337,7 +354,7 @@ nsHTMLButtonControlFrame::MouseClicked(nsIPresContext* aPresContext)
|
||||||
mFormFrame->OnReset(aPresContext);
|
mFormFrame->OnReset(aPresContext);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (IsSubmit(type) == PR_TRUE) {
|
else if (IsSubmit(aPresContext, type) == PR_TRUE) {
|
||||||
event.message = NS_FORM_SUBMIT;
|
event.message = NS_FORM_SUBMIT;
|
||||||
presShell->HandleEventWithTarget(&event, nsnull, formContent, NS_EVENT_FLAG_INIT, &status);
|
presShell->HandleEventWithTarget(&event, nsnull, formContent, NS_EVENT_FLAG_INIT, &status);
|
||||||
if (nsEventStatus_eConsumeNoDefault != status && mFormFrame) {
|
if (nsEventStatus_eConsumeNoDefault != status && mFormFrame) {
|
||||||
|
@ -658,18 +675,37 @@ nsHTMLButtonControlFrame::Reflow(nsIPresContext* aPresContext,
|
||||||
focusPadding.top + aReflowState.mComputedBorderPadding.top,
|
focusPadding.top + aReflowState.mComputedBorderPadding.top,
|
||||||
0, aStatus);
|
0, aStatus);
|
||||||
|
|
||||||
|
// calculate the min internal size so the contents gets centered correctly
|
||||||
|
nscoord minInternalWidth = aReflowState.mComputedMinWidth == 0?0:aReflowState.mComputedMinWidth -
|
||||||
|
(aReflowState.mComputedBorderPadding.left + aReflowState.mComputedBorderPadding.right);
|
||||||
|
nscoord minInternalHeight = aReflowState.mComputedMinHeight == 0?0:aReflowState.mComputedMinHeight -
|
||||||
|
(aReflowState.mComputedBorderPadding.top + aReflowState.mComputedBorderPadding.bottom);
|
||||||
|
|
||||||
// center child vertically
|
// center child vertically
|
||||||
nscoord yoff = 0;
|
nscoord yoff = 0;
|
||||||
if (aReflowState.mComputedHeight != NS_INTRINSICSIZE) {
|
if (aReflowState.mComputedHeight != NS_INTRINSICSIZE) {
|
||||||
yoff = (aReflowState.mComputedHeight - aDesiredSize.height)/2;
|
yoff = (aReflowState.mComputedHeight - aDesiredSize.height)/2;
|
||||||
if (yoff < 0)
|
if (yoff < 0) {
|
||||||
yoff = 0;
|
yoff = 0;
|
||||||
|
}
|
||||||
|
} else if (aDesiredSize.height < minInternalHeight) {
|
||||||
|
yoff = (minInternalHeight - aDesiredSize.height) / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// center child horizontally
|
||||||
|
nscoord xoff = 0;
|
||||||
|
if (aReflowState.mComputedHeight != NS_INTRINSICSIZE) {
|
||||||
|
xoff = (aReflowState.mComputedWidth - aDesiredSize.width)/2;
|
||||||
|
if (xoff < 0) {
|
||||||
|
xoff = 0;
|
||||||
|
}
|
||||||
|
} else if (aDesiredSize.width < minInternalWidth) {
|
||||||
|
xoff = (minInternalWidth - aDesiredSize.width) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
// Place the child
|
// Place the child
|
||||||
FinishReflowChild(firstKid, aPresContext, aDesiredSize,
|
FinishReflowChild(firstKid, aPresContext, aDesiredSize,
|
||||||
focusPadding.left + aReflowState.mComputedBorderPadding.left,
|
xoff + focusPadding.left + aReflowState.mComputedBorderPadding.left,
|
||||||
yoff + focusPadding.top + aReflowState.mComputedBorderPadding.top, 0);
|
yoff + focusPadding.top + aReflowState.mComputedBorderPadding.top, 0);
|
||||||
|
|
||||||
#if 0 // old way
|
#if 0 // old way
|
||||||
|
@ -716,6 +752,20 @@ nsHTMLButtonControlFrame::Reflow(nsIPresContext* aPresContext,
|
||||||
aDesiredSize.maxElementSize->height = aDesiredSize.height;
|
aDesiredSize.maxElementSize->height = aDesiredSize.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Make sure we obey min/max-width and min/max-height
|
||||||
|
if (aDesiredSize.width > aReflowState.mComputedMaxWidth) {
|
||||||
|
aDesiredSize.width = aReflowState.mComputedMaxWidth;
|
||||||
|
}
|
||||||
|
if (aDesiredSize.width < aReflowState.mComputedMinWidth) {
|
||||||
|
aDesiredSize.width = aReflowState.mComputedMinWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (aDesiredSize.height > aReflowState.mComputedMaxHeight) {
|
||||||
|
aDesiredSize.height = aReflowState.mComputedMaxHeight;
|
||||||
|
}
|
||||||
|
if (aDesiredSize.height < aReflowState.mComputedMinHeight) {
|
||||||
|
aDesiredSize.height = aReflowState.mComputedMinHeight;
|
||||||
|
}
|
||||||
aStatus = NS_FRAME_COMPLETE;
|
aStatus = NS_FRAME_COMPLETE;
|
||||||
|
|
||||||
nsFormControlFrame::SetupCachedSizes(mCacheSize, mCachedMaxElementSize, aDesiredSize);
|
nsFormControlFrame::SetupCachedSizes(mCacheSize, mCachedMaxElementSize, aDesiredSize);
|
||||||
|
|
|
@ -146,7 +146,7 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual PRBool IsReset(PRInt32 type);
|
virtual PRBool IsReset(PRInt32 type);
|
||||||
virtual PRBool IsSubmit(PRInt32 type);
|
virtual PRBool IsSubmit(nsIPresContext* aPresContext, PRInt32 type);
|
||||||
NS_IMETHOD AddComputedBorderPaddingToDesiredSize(nsHTMLReflowMetrics& aDesiredSize,
|
NS_IMETHOD AddComputedBorderPaddingToDesiredSize(nsHTMLReflowMetrics& aDesiredSize,
|
||||||
const nsHTMLReflowState& aSuggestedReflowState);
|
const nsHTMLReflowState& aSuggestedReflowState);
|
||||||
NS_IMETHOD_(nsrefcnt) AddRef(void);
|
NS_IMETHOD_(nsrefcnt) AddRef(void);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче