'use strict';
try {
var cssPropertyParsers = require('cssstyle/lib/parsers');
} catch (err) {
}
if (cssPropertyParsers) {
var shorthandParser = cssPropertyParsers.shorthandParser;
cssPropertyParsers.shorthandParser = function() {
var result = shorthandParser.apply(this, arguments);
return result === '' ? {} : result;
};
var badInt = cssPropertyParsers.parseInteger('5');
if (badInt !== '5') {
cssPropertyParsers.parseInteger = function parseInteger(val) {
return String(parseInt(val, 10));
};
}
var badNum = cssPropertyParsers.parseNumber('0.5');
if (badNum !== '0.5') {
cssPropertyParsers.parseNumber = function parseNumber(val) {
return String(parseFloat(val, 10));
};
}
}
try {
var utilsId = require.resolve('jsdom/lib/jsdom/browser/utils');
} catch (err) {
}
if (utilsId) {
require.cache[utilsId] = {
id: utilsId,
exports: {
NOT_IMPLEMENTED: function(target, nameForErrorMessage) {
var message = 'NOT IMPLEMENTED' + (
nameForErrorMessage ? ': ' + nameForErrorMessage : ''
);
return function() {
if (!jsdom.debugMode) {
var raise = (target && target.raise) || (this && this.raise);
if (raise && raise.call) {
raise.call(this, 'error', message);
} else {
throw new Error(message);
}
}
};
}
}
};
}
var jsdom = require('jsdom');
var define = require('jsdom/lib/jsdom/level2/html').define;
var elements = jsdom.defaultLevel;
function _getTimeRangeDummy() {
return {
length: 0,
start: function() { return 0; },
end: function() { return 0; }
};
}
if (elements && !elements.HTMLMediaElement) {
define('HTMLMediaElement', {
_init: function() {
this._muted = this.defaultMuted;
this._volume = 1.0;
this.readyState = 0;
},
proto: {
set defaultPlaybackRate(v) {
if (v === 0.0) {
throw new elements.DOMException(elements.NOT_SUPPORTED_ERR);
}
if (this._defaultPlaybackRate !== v) {
this._defaultPlaybackRate = v;
this._dispatchRateChange();
}
},
_dispatchRateChange: function() {
var ev = this._ownerDocument.createEvent('HTMLEvents');
ev.initEvent('ratechange', false, false);
this.dispatchEvent(ev);
},
get defaultPlaybackRate() {
if (this._defaultPlaybackRate === undefined) {
return 1.0;
}
return this._defaultPlaybackRate;
},
get playbackRate() {
if (this._playbackRate === undefined) {
return 1.0;
}
return this._playbackRate;
},
set playbackRate(v) {
if (v !== this._playbackRate) {
this._playbackRate = v;
this._dispatchRateChange();
}
},
get muted() {
return this._muted;
},
_dispatchVolumeChange: function() {
var ev = this._ownerDocument.createEvent('HTMLEvents');
ev.initEvent('volumechange', false, false);
this.dispatchEvent(ev);
},
set muted(v) {
if (v !== this._muted) {
this._muted = v;
this._dispatchVolumeChange();
}
},
get defaultMuted() {
return this.getAttribute('muted') !== null;
},
set defaultMuted(v) {
if (v) {
this.setAttribute('muted', v);
} else {
this.removeAttribute('muted');
}
},
get volume() {
return this._volume;
},
set volume(v) {
if (v < 0 || v > 1) {
throw new elements.DOMException(elements.INDEX_SIZE_ERR);
}
if (this._volume !== v) {
this._volume = v;
this._dispatchVolumeChange();
}
},
currentSrc: '',
buffered: _getTimeRangeDummy(),
networkState: 0,
load: function() {
},
canPlayType: function() {
return false;
},
seeking: false,
duration: 0,
startDate: NaN,
paused: true,
played: _getTimeRangeDummy(),
seekable: _getTimeRangeDummy(),
ended: false,
play: function() {
},
pause: function() {
},
audioTracks: [],
videoTracks: [],
textTracks: [],
addTextTrack: function() {
}
},
attributes: [
{ prop: 'autoplay', type: 'boolean' },
{ prop: 'controls', type: 'boolean' },
'crossOrigin',
'currentTime',
'preload',
{ prop: 'loop', type: 'boolean' },
'mediaGroup',
]
});
}
if (elements && !elements.HTMLVideoElement) {
define('HTMLVideoElement', {
tagName: 'VIDEO',
parentClass: elements.HTMLMediaElement,
attributes: [
{ prop: 'height', type: 'long' },
'poster',
{ prop: 'videoHeight', type: 'long' },
{ prop: 'videoWidth', type: 'long' },
{ prop: 'width', type: 'long' }
]
});
}
if (elements && elements.HTMLInputElement) {
var proto = elements.HTMLInputElement.prototype;
var desc = Object.getOwnPropertyDescriptor(proto, 'checked');
if (desc) {
desc.set = function(checked) {
this._initDefaultChecked();
if (checked || (checked === '')) {
this.setAttribute('checked', 'checked');
if (this.type === 'radio') {
var elements = this._ownerDocument.getElementsByName(this.name);
for (var i = 0; i < elements.length; i++) {
var other = elements[i];
if (other !== this &&
other.tagName === 'INPUT' &&
other.type === 'radio' &&
other.form === this.form) {
other.checked = false;
}
}
}
} else {
this.removeAttribute('checked');
}
};
Object.defineProperty(proto, 'checked', desc);
}
}
if (elements && elements.HTMLSelectElement) {
var proto = elements.HTMLSelectElement.prototype;
var oldAttrModified = proto._attrModified;
proto._attrModified = function(name, value) {
if (name === 'multiple' && !value) {
var leaveNextOptionSelected = true;
this.options._toArray().forEach(function(option) {
if (option.selected) {
if (leaveNextOptionSelected) {
leaveNextOptionSelected = false;
} else {
option.selected = false;
}
}
});
}
return oldAttrModified.apply(this, arguments);
};
}
module.exports = jsdom;