react / wstein / node_modules / jest-cli / node_modules / jsdom / node_modules / nwmatcher / src / modules / nwmatcher-webforms.js
81144 views/*1* Copyright (C) 2007-2015 Diego Perini2* All rights reserved.3*4* this is just a small example to show5* how an extension for NWMatcher could be6* adapted to handle WebForms/HTML5 selectors7*8* Pseudo Selectors9* :default, :indeterminate, :optional, :required,10* :valid, :invalid, :in-range, :out-of-range,11* :read-only, :read-write12* :has, :matches (not yet in a defined specification)13*14*/1516// for UI pseudo-classes extensions (WebForms/HTML5)17NW.Dom.registerSelector(18'html5:pseudos',19/^\:(default|indeterminate|optional|required|valid|invalid|in-range|out-of-range|read-only|read-write)(.*)/,20(function(global) {2122return function(match, source) {2324var status = true,2526HTML5PseudoClasses = global.Object({27'default': 4, 'indeterminate': 4, 'invalid': 4, 'valid': 4,28'optional': 4, 'required': 4, 'read-write': 4, 'read-only': 429});3031switch (match[1]) {3233// HTML5 UI element states (form controls)34case 'default':35// only radio buttons, check boxes and option elements36source = 'if(((typeof e.form!=="undefined"&&(/radio|checkbox/i).test(e.type))||/option/i.test(e.nodeName))&&(e.defaultChecked||e.defaultSelected)){' + source + '}';37break;3839case 'indeterminate':40// only radio buttons, check boxes and option elements41source = 'if(typeof e.form!=="undefined"&&(/radio|checkbox/i).test(e.type)&&s.select("[checked]",e.form).length===0){' + source + '}';42break;4344case 'optional':45// only fields for which "required" applies46source = 'if(typeof e.form!=="undefined"&&typeof e.required!="undefined"&&!e.required){' + source + '}';47break;4849case 'required':50// only fields for which "required" applies51source = 'if(typeof e.form!=="undefined"&&typeof e.required!="undefined"&&e.required){' + source + '}';52break;5354case 'read-write':55// only fields for which "readOnly" applies56source = 'if(typeof e.form!=="undefined"&&typeof e.readOnly!="undefined"&&!e.readOnly){' + source + '}';57break;5859case 'read-only':60// only fields for which "readOnly" applies61source = 'if(typeof e.form!=="undefined"&&typeof e.readOnly!="undefined"&&e.readOnly){' + source + '}';62break;6364case 'invalid':65// only fields for which validity applies66source = 'if(typeof e.form!=="undefined"&&typeof e.validity=="object"&&!e.validity.valid){' + source + '}';67break;6869case 'valid':70// only fields for which validity applies71source = 'if(typeof e.form!=="undefined"&&typeof e.validity=="object"&&e.validity.valid){' + source + '}';72break;7374case 'in-range':75// only fields for which validity applies76source = 'if(typeof e.form!=="undefined"&&' +77'(s.getAttribute(e,"min")||s.getAttribute(e,"max"))&&' +78'typeof e.validity=="object"&&!e.validity.typeMismatch&&' +79'!e.validity.rangeUnderflow&&!e.validity.rangeOverflow){' + source + '}';80break;8182case 'out-of-range':83// only fields for which validity applies84source = 'if(typeof e.form!=="undefined"&&' +85'(s.getAttribute(e,"min")||s.getAttribute(e,"max"))&&' +86'typeof e.validity=="object"&&(e.validity.rangeUnderflow||e.validity.rangeOverflow)){' + source + '}';87break;8889default:90status = false;91break;9293}9495// compiler will add this to "source"96return global.Object({97'source': source,98'status': status99});100101};102103})(this));104105106