/*
 * This file is part of the WebKit project.
 *
 * Copyright (C) 2009 Michelangelo De Simone <micdesim@gmail.com>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public License
 * along with this library; see the file COPYING.LIB.  If not, write to
 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA 02110-1301, USA.
 *
 */

module html {

    interface [OmitConstructor] ValidityState {
        readonly attribute boolean         valueMissing;
        readonly attribute boolean         typeMismatch;
        readonly attribute boolean         patternMismatch;
        readonly attribute boolean         tooLong;
        readonly attribute boolean         rangeUnderflow;
        readonly attribute boolean         rangeOverflow;
        readonly attribute boolean         stepMismatch;
        readonly attribute boolean         customError;
        readonly attribute boolean         valid;
    };
}
