mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-17 22:32:51 +00:00
Support incremental=true for input controls (bug 279012). Patch by smaug@welho.com, r=allan@beaufour.dk, sr=me.
This commit is contained in:
parent
27c6760db2
commit
2560574e5b
@ -57,6 +57,7 @@ nsIAtom *nsXFormsAtoms::nodeset;
|
||||
nsIAtom *nsXFormsAtoms::model;
|
||||
nsIAtom *nsXFormsAtoms::selected;
|
||||
nsIAtom *nsXFormsAtoms::appearance;
|
||||
nsIAtom *nsXFormsAtoms::incremental;
|
||||
|
||||
const nsStaticAtom nsXFormsAtoms::Atoms_info[] = {
|
||||
{ "src", &nsXFormsAtoms::src },
|
||||
@ -76,7 +77,8 @@ const nsStaticAtom nsXFormsAtoms::Atoms_info[] = {
|
||||
{ "nodeset", &nsXFormsAtoms::nodeset },
|
||||
{ "model", &nsXFormsAtoms::model },
|
||||
{ "selected", &nsXFormsAtoms::selected },
|
||||
{ "appearance", &nsXFormsAtoms::appearance }
|
||||
{ "appearance", &nsXFormsAtoms::appearance },
|
||||
{ "incremental", &nsXFormsAtoms::incremental }
|
||||
};
|
||||
|
||||
void
|
||||
|
@ -61,6 +61,7 @@ class nsXFormsAtoms
|
||||
static NS_HIDDEN_(nsIAtom *) model;
|
||||
static NS_HIDDEN_(nsIAtom *) selected;
|
||||
static NS_HIDDEN_(nsIAtom *) appearance;
|
||||
static NS_HIDDEN_(nsIAtom *) incremental;
|
||||
static NS_HIDDEN_(nsIAtom *) value;
|
||||
|
||||
static NS_HIDDEN_(void) InitAtoms();
|
||||
|
@ -56,6 +56,7 @@
|
||||
#include "nsIModelElementPrivate.h"
|
||||
#include "nsIContent.h"
|
||||
#include "nsIDOMXPathExpression.h"
|
||||
#include "nsXFormsAtoms.h"
|
||||
|
||||
/**
|
||||
* Implementation of the \<input\>, \<secret\>, and \<textarea\> elements.
|
||||
@ -75,6 +76,8 @@ public:
|
||||
|
||||
// nsIXTFElement overrides
|
||||
NS_IMETHOD OnDestroyed();
|
||||
NS_IMETHOD AttributeSet(nsIAtom *aName, const nsAString &aValue);
|
||||
NS_IMETHOD HandleDefault(nsIDOMEvent *aEvent, PRBool *aHandled);
|
||||
|
||||
// nsIXFormsControl
|
||||
NS_IMETHOD Refresh();
|
||||
@ -95,13 +98,17 @@ public:
|
||||
|
||||
// nsXFormsInputElement
|
||||
nsXFormsInputElement(ControlType aType)
|
||||
: mType(aType)
|
||||
: mType(aType), mIncremental(PR_FALSE)
|
||||
{}
|
||||
|
||||
private:
|
||||
// Updates the instance data node bound to this form control.
|
||||
nsresult UpdateInstanceData();
|
||||
|
||||
nsCOMPtr<nsIDOMElement> mLabel;
|
||||
nsCOMPtr<nsIDOMElement> mControl;
|
||||
ControlType mType;
|
||||
PRBool mIncremental;
|
||||
};
|
||||
|
||||
NS_IMPL_ISUPPORTS_INHERITED3(nsXFormsInputElement,
|
||||
@ -205,6 +212,36 @@ nsXFormsInputElement::OnDestroyed()
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXFormsInputElement::AttributeSet(nsIAtom *aName, const nsAString &aValue)
|
||||
{
|
||||
nsXFormsControlStub::WillSetAttribute(aName, aValue);
|
||||
|
||||
if (aName == nsXFormsAtoms::incremental)
|
||||
mIncremental = aValue.EqualsLiteral("true");
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXFormsInputElement::HandleDefault(nsIDOMEvent *aEvent,
|
||||
PRBool *aHandled)
|
||||
{
|
||||
nsresult rv;
|
||||
rv = nsXFormsControlStub::HandleDefault(aEvent, aHandled);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
if (*aHandled || !mIncremental) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsAutoString type;
|
||||
aEvent->GetType(type);
|
||||
if (type.EqualsLiteral("keyup"))
|
||||
UpdateInstanceData();
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// nsIDOMEventListener
|
||||
|
||||
NS_IMETHODIMP
|
||||
@ -221,6 +258,12 @@ nsXFormsInputElement::Focus(nsIDOMEvent *aEvent)
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXFormsInputElement::Blur(nsIDOMEvent *aEvent)
|
||||
{
|
||||
return UpdateInstanceData();
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsXFormsInputElement::UpdateInstanceData()
|
||||
{
|
||||
if (!mControl && !mBoundNode && !mModel)
|
||||
return NS_OK;
|
||||
|
Loading…
x
Reference in New Issue
Block a user