Mise à jour de webshims
This commit is contained in:
parent
a1e70d9a29
commit
c1148aefeb
@ -290,7 +290,7 @@ GEM
|
||||
warden (1.2.3)
|
||||
rack (>= 1.0)
|
||||
webrick (1.3.1)
|
||||
webshims-rails (1.14.4)
|
||||
webshims-rails (1.14.5)
|
||||
rails (> 3.1.0)
|
||||
|
||||
PLATFORMS
|
||||
|
@ -104,6 +104,11 @@
|
||||
var getAutoEnhance = function(prop){
|
||||
return !webCFG.enhanceAuto && prop == 'auto' ? false : prop;
|
||||
};
|
||||
var featureAlias = {
|
||||
matchmedia: 'matchMedia',
|
||||
xhr2: 'filereader',
|
||||
promise: 'es6'
|
||||
};
|
||||
|
||||
clearInterval(webshims.timer);
|
||||
support.advancedObjectProperties = support.objectAccessor = support.ES5 = !!('create' in Object && 'seal' in Object);
|
||||
@ -121,7 +126,7 @@
|
||||
}
|
||||
|
||||
$.extend(webshims, {
|
||||
version: '1.14.4',
|
||||
version: '1.14.5',
|
||||
|
||||
cfg: {
|
||||
enhanceAuto: window.Audio && (!window.matchMedia || matchMedia('(min-device-width: 721px)').matches),
|
||||
@ -244,12 +249,9 @@
|
||||
}
|
||||
|
||||
$.each(features, function(i, feature){
|
||||
if(feature == 'xhr2'){
|
||||
feature = 'filereader';
|
||||
}
|
||||
if(feature == 'promise'){
|
||||
feature = 'es6';
|
||||
}
|
||||
|
||||
feature = featureAlias[feature] || feature;
|
||||
|
||||
if(!webshimsFeatures[feature]){
|
||||
WSDEBUG && webshims.error("could not find webshims-feature (aborted): "+ feature);
|
||||
isReady(feature, true);
|
||||
@ -1010,7 +1012,7 @@
|
||||
|
||||
support.inputtypes = inputtypes;
|
||||
|
||||
$.each(['number', 'range', 'date', 'datetime-local', 'month', 'color'], function(i, type){
|
||||
$.each(['range', 'date', 'datetime-local', 'month', 'color', 'number'], function(i, type){
|
||||
input.setAttribute('type', type);
|
||||
inputtypes[type] = (input.type == type && (input.value = '(') && input.value != '(');
|
||||
});
|
||||
@ -1026,7 +1028,7 @@
|
||||
try {
|
||||
if(fieldset.querySelector(':invalid')){
|
||||
fieldset.disabled = true;
|
||||
tmp = !fieldset.querySelector(':invalid');
|
||||
tmp = !fieldset.querySelector(':invalid') && fieldset.querySelector(':disabled');
|
||||
}
|
||||
} catch(er){}
|
||||
support.fieldsetdisabled = !!tmp;
|
||||
@ -1035,15 +1037,39 @@
|
||||
if(support[formvalidation]){
|
||||
bustedWidgetUi = !support.fieldsetdisabled || !support.fieldsetelements || !('value' in progress) || !('value' in output);
|
||||
replaceBustedUI = bustedWidgetUi && (/Android/i).test(navigator.userAgent);
|
||||
bugs.bustedValidity = bustedValidity = window.opera || bugs.bustedValidity || bustedWidgetUi || !support.datalist;
|
||||
} else {
|
||||
bugs.bustedValidity = false;
|
||||
bustedValidity = window.opera || bugs.bustedValidity || bustedWidgetUi || !support.datalist;
|
||||
|
||||
if(!bustedValidity && inputtypes.number){
|
||||
bustedValidity = true;
|
||||
try {
|
||||
input.type = 'number';
|
||||
input.value = '';
|
||||
input.stepUp();
|
||||
bustedValidity = input.value != '1';
|
||||
} catch(e){}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
bugs.bustedValidity = bustedValidity;
|
||||
|
||||
formExtend = support[formvalidation] && !bustedValidity ? 'form-native-extend' : fShim;
|
||||
initialFormTest = $.noop;
|
||||
return false;
|
||||
};
|
||||
var typeTest = function(o){
|
||||
var ret = true;
|
||||
if(!o._types){
|
||||
o._types = o.types.split(' ');
|
||||
}
|
||||
$.each(o._types, function(i, name){
|
||||
if((name in inputtypes) && !inputtypes[name]){
|
||||
ret = false;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
return ret;
|
||||
};
|
||||
|
||||
|
||||
webshims.validationMessages = webshims.validityMessages = {
|
||||
@ -1129,18 +1155,12 @@
|
||||
types: 'date time range number'
|
||||
},
|
||||
test: function(){
|
||||
var ret = true;
|
||||
var o = this.options;
|
||||
if(!o._types){
|
||||
o._types = o.types.split(' ');
|
||||
}
|
||||
initialFormTest();
|
||||
$.each(o._types, function(i, name){
|
||||
if((name in inputtypes) && !inputtypes[name]){
|
||||
ret = false;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
var ret = !bustedValidity;
|
||||
|
||||
if(ret){
|
||||
ret = typeTest(this.options);
|
||||
}
|
||||
|
||||
return ret;
|
||||
},
|
||||
@ -1169,7 +1189,7 @@
|
||||
if(!o.replaceUI && replaceBustedUI){
|
||||
o.replaceUI = true;
|
||||
}
|
||||
return !o.replaceUI && modules[fNuAPI].test();
|
||||
return !o.replaceUI && typeTest(o);
|
||||
},
|
||||
d: ['forms', DOMSUPPORT, fNuAPI, 'range-ui'],
|
||||
options: {
|
||||
@ -1177,7 +1197,6 @@
|
||||
calculateWidth: true,
|
||||
animate: true
|
||||
}
|
||||
// ,replaceUI: false
|
||||
},
|
||||
c: [6, 5, 9, 10, 17, 11]
|
||||
});
|
||||
|
@ -250,6 +250,9 @@ webshims.isReady('swfmini', true);
|
||||
};
|
||||
var lazyLoad = function(){
|
||||
var toLoad = ['form-validation'];
|
||||
|
||||
$(document).off('.lazyloadvalidation');
|
||||
|
||||
if(options.lazyCustomMessages){
|
||||
options.customMessages = true;
|
||||
toLoad.push('form-message');
|
||||
@ -264,7 +267,6 @@ webshims.isReady('swfmini', true);
|
||||
toLoad.push('form-validators');
|
||||
}
|
||||
webshims.reTest(toLoad);
|
||||
$(document).off('.lazyloadvalidation');
|
||||
};
|
||||
/*
|
||||
* Selectors for all browsers
|
||||
@ -321,11 +323,11 @@ webshims.isReady('swfmini', true);
|
||||
};
|
||||
$.extend(exp, {
|
||||
"enabled": function( elem ) {
|
||||
return elem.disabled === false && !$(elem).is('fieldset[disabled] *');
|
||||
return 'disabled' in elem && elem.disabled === false && !$.find.matchesSelector(elem, 'fieldset[disabled] *');
|
||||
},
|
||||
|
||||
"disabled": function( elem ) {
|
||||
return elem.disabled === true || ('disabled' in elem && $(elem).is('fieldset[disabled] *'));
|
||||
return elem.disabled === true || ('disabled' in elem && $.find.matchesSelector(elem, 'fieldset[disabled] *'));
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -504,8 +506,7 @@ webshims.isReady('swfmini', true);
|
||||
};
|
||||
|
||||
|
||||
|
||||
$(document).on('focusin.lazyloadvalidation', function(e){
|
||||
$(document).on('focusin.lazyloadvalidation mousedown.lazyloadvalidation touchstart.lazyloadvalidation', function(e){
|
||||
if('form' in e.target){
|
||||
lazyLoad();
|
||||
}
|
||||
@ -536,6 +537,14 @@ webshims.isReady('swfmini', true);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
if(options.addValidators && options.fastValidators){
|
||||
webshims.reTest(['form-validators', 'form-validation']);
|
||||
}
|
||||
|
||||
if(document.readyState == 'complete'){
|
||||
webshims.isReady('WINDOWLOAD', true);
|
||||
}
|
||||
});
|
||||
;(function(webshims){
|
||||
"use strict";
|
||||
@ -1070,6 +1079,10 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
|
||||
webshims.ready(swfType, initMediaElements);
|
||||
}
|
||||
webshims.ready('track', loadTrackUi);
|
||||
|
||||
if(document.readyState == 'complete'){
|
||||
webshims.isReady('WINDOWLOAD', true);
|
||||
}
|
||||
});
|
||||
|
||||
})(webshims);
|
||||
|
@ -549,8 +549,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
webshims.warn(type +' already implemented for element #'+elem.id);
|
||||
return false;
|
||||
}
|
||||
|
||||
data[type] = true;
|
||||
return true;
|
||||
return !$(elem).hasClass('ws-nopolyfill');
|
||||
},
|
||||
extendUNDEFProp: function(obj, props){
|
||||
$.each(props, function(name, prop){
|
||||
@ -2015,9 +2016,11 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
$(element).attr({'aria-labelledby': labels.map(getId).get().join(' ')});
|
||||
if(!noFocus){
|
||||
labels.on('click', function(e){
|
||||
element.getShadowFocusElement().focus();
|
||||
e.preventDefault();
|
||||
return false;
|
||||
if(!e.isDefaultPrevented()){
|
||||
element.getShadowFocusElement().focus();
|
||||
e.preventDefault();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
@ -3706,27 +3709,27 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
|
||||
var replace = {};
|
||||
|
||||
|
||||
if(options.replaceUI){
|
||||
if( $.isPlainObject(options.replaceUI) ){
|
||||
$.extend(replace, options.replaceUI);
|
||||
} else {
|
||||
$.extend(replace, {
|
||||
'range': 1,
|
||||
'number': 1,
|
||||
'time': 1,
|
||||
'month': 1,
|
||||
'date': 1,
|
||||
'color': 1,
|
||||
'datetime-local': 1
|
||||
});
|
||||
}
|
||||
$.each($.extend(replace, $.isPlainObject(options.replaceUI) ? options.replaceUI : {
|
||||
'range': 1,
|
||||
'number': 1,
|
||||
'time': 1,
|
||||
'month': 1,
|
||||
'date': 1,
|
||||
'color': 1,
|
||||
'datetime-local': 1
|
||||
}), function(name, val){
|
||||
if(supportInputTypes[name] && val == 'auto'){
|
||||
replace[name] = webshims._getAutoEnhance(val);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if(supportInputTypes.number && navigator.userAgent.indexOf('Touch') == -1 && ((/MSIE 1[0|1]\.\d/.test(navigator.userAgent)) || (/Trident\/7\.0/.test(navigator.userAgent)))){
|
||||
replace.number = 1;
|
||||
}
|
||||
|
||||
if(!supportInputTypes.range || replace.range){
|
||||
if(replace.range !== false && (!supportInputTypes.range || replace.range)){
|
||||
extendType('range', {
|
||||
_create: function(opts, set){
|
||||
var data = $('<span />').insertAfter(opts.orig).rangeUI(opts).data('rangeUi');
|
||||
@ -3737,12 +3740,13 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
|
||||
|
||||
['number', 'time', 'month', 'date', 'color', 'datetime-local'].forEach(function(name){
|
||||
if(!supportInputTypes[name] || replace[name]){
|
||||
if(replace[name] !== false && (!supportInputTypes[name] || replace[name])){
|
||||
extendType(name, {
|
||||
_create: function(opts, set){
|
||||
if(opts.monthSelect || opts.daySelect || opts.yearSelect){
|
||||
opts.splitInput = true;
|
||||
}
|
||||
|
||||
if(opts.splitInput && !splitInputs[name]){
|
||||
webshims.warn('splitInput not supported for '+ name);
|
||||
opts.splitInput = false;
|
||||
|
@ -803,9 +803,11 @@
|
||||
$(element).attr({'aria-labelledby': labels.map(getId).get().join(' ')});
|
||||
if(!noFocus){
|
||||
labels.on('click', function(e){
|
||||
element.getShadowFocusElement().focus();
|
||||
e.preventDefault();
|
||||
return false;
|
||||
if(!e.isDefaultPrevented()){
|
||||
element.getShadowFocusElement().focus();
|
||||
e.preventDefault();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
@ -2494,27 +2496,27 @@
|
||||
|
||||
var replace = {};
|
||||
|
||||
|
||||
if(options.replaceUI){
|
||||
if( $.isPlainObject(options.replaceUI) ){
|
||||
$.extend(replace, options.replaceUI);
|
||||
} else {
|
||||
$.extend(replace, {
|
||||
'range': 1,
|
||||
'number': 1,
|
||||
'time': 1,
|
||||
'month': 1,
|
||||
'date': 1,
|
||||
'color': 1,
|
||||
'datetime-local': 1
|
||||
});
|
||||
}
|
||||
$.each($.extend(replace, $.isPlainObject(options.replaceUI) ? options.replaceUI : {
|
||||
'range': 1,
|
||||
'number': 1,
|
||||
'time': 1,
|
||||
'month': 1,
|
||||
'date': 1,
|
||||
'color': 1,
|
||||
'datetime-local': 1
|
||||
}), function(name, val){
|
||||
if(supportInputTypes[name] && val == 'auto'){
|
||||
replace[name] = webshims._getAutoEnhance(val);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if(supportInputTypes.number && navigator.userAgent.indexOf('Touch') == -1 && ((/MSIE 1[0|1]\.\d/.test(navigator.userAgent)) || (/Trident\/7\.0/.test(navigator.userAgent)))){
|
||||
replace.number = 1;
|
||||
}
|
||||
|
||||
if(!supportInputTypes.range || replace.range){
|
||||
if(replace.range !== false && (!supportInputTypes.range || replace.range)){
|
||||
extendType('range', {
|
||||
_create: function(opts, set){
|
||||
var data = $('<span />').insertAfter(opts.orig).rangeUI(opts).data('rangeUi');
|
||||
@ -2525,12 +2527,13 @@
|
||||
|
||||
|
||||
['number', 'time', 'month', 'date', 'color', 'datetime-local'].forEach(function(name){
|
||||
if(!supportInputTypes[name] || replace[name]){
|
||||
if(replace[name] !== false && (!supportInputTypes[name] || replace[name])){
|
||||
extendType(name, {
|
||||
_create: function(opts, set){
|
||||
if(opts.monthSelect || opts.daySelect || opts.yearSelect){
|
||||
opts.splitInput = true;
|
||||
}
|
||||
|
||||
if(opts.splitInput && !splitInputs[name]){
|
||||
webshims.warn('splitInput not supported for '+ name);
|
||||
opts.splitInput = false;
|
||||
|
@ -754,6 +754,10 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
|
||||
webshims.ready(swfType, initMediaElements);
|
||||
}
|
||||
webshims.ready('track', loadTrackUi);
|
||||
|
||||
if(document.readyState == 'complete'){
|
||||
webshims.isReady('WINDOWLOAD', true);
|
||||
}
|
||||
});
|
||||
|
||||
})(webshims);
|
||||
|
@ -531,6 +531,10 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
|
||||
webshims.ready(swfType, initMediaElements);
|
||||
}
|
||||
webshims.ready('track', loadTrackUi);
|
||||
|
||||
if(document.readyState == 'complete'){
|
||||
webshims.isReady('WINDOWLOAD', true);
|
||||
}
|
||||
});
|
||||
|
||||
})(webshims);
|
||||
|
@ -553,7 +553,6 @@ webshims.register('form-native-extend', function($, webshims, window, doc, undef
|
||||
}
|
||||
|
||||
var nan = parseInt('NaN', 10),
|
||||
doc = document,
|
||||
typeModels = webshims.inputTypes,
|
||||
isNumber = function(string){
|
||||
return (typeof string == 'number' || (string && string == string * 1));
|
||||
|
@ -549,8 +549,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
webshims.warn(type +' already implemented for element #'+elem.id);
|
||||
return false;
|
||||
}
|
||||
|
||||
data[type] = true;
|
||||
return true;
|
||||
return !$(elem).hasClass('ws-nopolyfill');
|
||||
},
|
||||
extendUNDEFProp: function(obj, props){
|
||||
$.each(props, function(name, prop){
|
||||
@ -1239,6 +1240,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
};
|
||||
var lazyLoad = function(){
|
||||
var toLoad = ['form-validation'];
|
||||
|
||||
$(document).off('.lazyloadvalidation');
|
||||
|
||||
if(options.lazyCustomMessages){
|
||||
options.customMessages = true;
|
||||
toLoad.push('form-message');
|
||||
@ -1253,7 +1257,6 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
toLoad.push('form-validators');
|
||||
}
|
||||
webshims.reTest(toLoad);
|
||||
$(document).off('.lazyloadvalidation');
|
||||
};
|
||||
/*
|
||||
* Selectors for all browsers
|
||||
@ -1310,11 +1313,11 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
};
|
||||
$.extend(exp, {
|
||||
"enabled": function( elem ) {
|
||||
return elem.disabled === false && !$(elem).is('fieldset[disabled] *');
|
||||
return 'disabled' in elem && elem.disabled === false && !$.find.matchesSelector(elem, 'fieldset[disabled] *');
|
||||
},
|
||||
|
||||
"disabled": function( elem ) {
|
||||
return elem.disabled === true || ('disabled' in elem && $(elem).is('fieldset[disabled] *'));
|
||||
return elem.disabled === true || ('disabled' in elem && $.find.matchesSelector(elem, 'fieldset[disabled] *'));
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -1493,8 +1496,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
};
|
||||
|
||||
|
||||
|
||||
$(document).on('focusin.lazyloadvalidation', function(e){
|
||||
$(document).on('focusin.lazyloadvalidation mousedown.lazyloadvalidation touchstart.lazyloadvalidation', function(e){
|
||||
if('form' in e.target){
|
||||
lazyLoad();
|
||||
}
|
||||
@ -1525,6 +1527,14 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
if(options.addValidators && options.fastValidators){
|
||||
webshims.reTest(['form-validators', 'form-validation']);
|
||||
}
|
||||
|
||||
if(document.readyState == 'complete'){
|
||||
webshims.isReady('WINDOWLOAD', true);
|
||||
}
|
||||
});
|
||||
;webshims.register('form-shim-extend', function($, webshims, window, document, undefined, options){
|
||||
"use strict";
|
||||
@ -1920,7 +1930,7 @@ var rsubmittable = /^(?:select|textarea|input)/i;
|
||||
;
|
||||
return function(){
|
||||
var elem = $(this).getNativeElement()[0];
|
||||
return !!(!elem.readOnly && !types[elem.type] && !$(elem).is(':disabled') );
|
||||
return !!(!elem.readOnly && !types[elem.type] && !$.find.matchesSelector(elem, ':disabled') );
|
||||
};
|
||||
})()
|
||||
},
|
||||
|
@ -772,8 +772,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
webshims.warn(type +' already implemented for element #'+elem.id);
|
||||
return false;
|
||||
}
|
||||
|
||||
data[type] = true;
|
||||
return true;
|
||||
return !$(elem).hasClass('ws-nopolyfill');
|
||||
},
|
||||
extendUNDEFProp: function(obj, props){
|
||||
$.each(props, function(name, prop){
|
||||
@ -1462,6 +1463,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
};
|
||||
var lazyLoad = function(){
|
||||
var toLoad = ['form-validation'];
|
||||
|
||||
$(document).off('.lazyloadvalidation');
|
||||
|
||||
if(options.lazyCustomMessages){
|
||||
options.customMessages = true;
|
||||
toLoad.push('form-message');
|
||||
@ -1476,7 +1480,6 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
toLoad.push('form-validators');
|
||||
}
|
||||
webshims.reTest(toLoad);
|
||||
$(document).off('.lazyloadvalidation');
|
||||
};
|
||||
/*
|
||||
* Selectors for all browsers
|
||||
@ -1533,11 +1536,11 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
};
|
||||
$.extend(exp, {
|
||||
"enabled": function( elem ) {
|
||||
return elem.disabled === false && !$(elem).is('fieldset[disabled] *');
|
||||
return 'disabled' in elem && elem.disabled === false && !$.find.matchesSelector(elem, 'fieldset[disabled] *');
|
||||
},
|
||||
|
||||
"disabled": function( elem ) {
|
||||
return elem.disabled === true || ('disabled' in elem && $(elem).is('fieldset[disabled] *'));
|
||||
return elem.disabled === true || ('disabled' in elem && $.find.matchesSelector(elem, 'fieldset[disabled] *'));
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -1716,8 +1719,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
};
|
||||
|
||||
|
||||
|
||||
$(document).on('focusin.lazyloadvalidation', function(e){
|
||||
$(document).on('focusin.lazyloadvalidation mousedown.lazyloadvalidation touchstart.lazyloadvalidation', function(e){
|
||||
if('form' in e.target){
|
||||
lazyLoad();
|
||||
}
|
||||
@ -1748,6 +1750,14 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
if(options.addValidators && options.fastValidators){
|
||||
webshims.reTest(['form-validators', 'form-validation']);
|
||||
}
|
||||
|
||||
if(document.readyState == 'complete'){
|
||||
webshims.isReady('WINDOWLOAD', true);
|
||||
}
|
||||
});
|
||||
;webshims.register('form-shim-extend', function($, webshims, window, document, undefined, options){
|
||||
"use strict";
|
||||
@ -2143,7 +2153,7 @@ var rsubmittable = /^(?:select|textarea|input)/i;
|
||||
;
|
||||
return function(){
|
||||
var elem = $(this).getNativeElement()[0];
|
||||
return !!(!elem.readOnly && !types[elem.type] && !$(elem).is(':disabled') );
|
||||
return !!(!elem.readOnly && !types[elem.type] && !$.find.matchesSelector(elem, ':disabled') );
|
||||
};
|
||||
})()
|
||||
},
|
||||
@ -3698,6 +3708,10 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
|
||||
webshims.ready(swfType, initMediaElements);
|
||||
}
|
||||
webshims.ready('track', loadTrackUi);
|
||||
|
||||
if(document.readyState == 'complete'){
|
||||
webshims.isReady('WINDOWLOAD', true);
|
||||
}
|
||||
});
|
||||
|
||||
})(webshims);
|
||||
|
@ -30,7 +30,6 @@ webshims.register('form-number-date-api', function($, webshims, window, document
|
||||
}
|
||||
|
||||
var nan = parseInt('NaN', 10),
|
||||
doc = document,
|
||||
typeModels = webshims.inputTypes,
|
||||
isNumber = function(string){
|
||||
return (typeof string == 'number' || (string && string == string * 1));
|
||||
@ -1420,9 +1419,11 @@ webshims.register('form-number-date-api', function($, webshims, window, document
|
||||
$(element).attr({'aria-labelledby': labels.map(getId).get().join(' ')});
|
||||
if(!noFocus){
|
||||
labels.on('click', function(e){
|
||||
element.getShadowFocusElement().focus();
|
||||
e.preventDefault();
|
||||
return false;
|
||||
if(!e.isDefaultPrevented()){
|
||||
element.getShadowFocusElement().focus();
|
||||
e.preventDefault();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
@ -3111,27 +3112,27 @@ webshims.register('form-number-date-api', function($, webshims, window, document
|
||||
|
||||
var replace = {};
|
||||
|
||||
|
||||
if(options.replaceUI){
|
||||
if( $.isPlainObject(options.replaceUI) ){
|
||||
$.extend(replace, options.replaceUI);
|
||||
} else {
|
||||
$.extend(replace, {
|
||||
'range': 1,
|
||||
'number': 1,
|
||||
'time': 1,
|
||||
'month': 1,
|
||||
'date': 1,
|
||||
'color': 1,
|
||||
'datetime-local': 1
|
||||
});
|
||||
}
|
||||
$.each($.extend(replace, $.isPlainObject(options.replaceUI) ? options.replaceUI : {
|
||||
'range': 1,
|
||||
'number': 1,
|
||||
'time': 1,
|
||||
'month': 1,
|
||||
'date': 1,
|
||||
'color': 1,
|
||||
'datetime-local': 1
|
||||
}), function(name, val){
|
||||
if(supportInputTypes[name] && val == 'auto'){
|
||||
replace[name] = webshims._getAutoEnhance(val);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if(supportInputTypes.number && navigator.userAgent.indexOf('Touch') == -1 && ((/MSIE 1[0|1]\.\d/.test(navigator.userAgent)) || (/Trident\/7\.0/.test(navigator.userAgent)))){
|
||||
replace.number = 1;
|
||||
}
|
||||
|
||||
if(!supportInputTypes.range || replace.range){
|
||||
if(replace.range !== false && (!supportInputTypes.range || replace.range)){
|
||||
extendType('range', {
|
||||
_create: function(opts, set){
|
||||
var data = $('<span />').insertAfter(opts.orig).rangeUI(opts).data('rangeUi');
|
||||
@ -3142,12 +3143,13 @@ webshims.register('form-number-date-api', function($, webshims, window, document
|
||||
|
||||
|
||||
['number', 'time', 'month', 'date', 'color', 'datetime-local'].forEach(function(name){
|
||||
if(!supportInputTypes[name] || replace[name]){
|
||||
if(replace[name] !== false && (!supportInputTypes[name] || replace[name])){
|
||||
extendType(name, {
|
||||
_create: function(opts, set){
|
||||
if(opts.monthSelect || opts.daySelect || opts.yearSelect){
|
||||
opts.splitInput = true;
|
||||
}
|
||||
|
||||
if(opts.splitInput && !splitInputs[name]){
|
||||
webshims.warn('splitInput not supported for '+ name);
|
||||
opts.splitInput = false;
|
||||
|
@ -10,23 +10,65 @@
|
||||
|
||||
webshim.isReady('picture', true);
|
||||
setTimeout(function(){
|
||||
webshim.ready('matchMedia', function(){
|
||||
if(window.picturefill){
|
||||
var sel = 'picture, img[srcset]';
|
||||
webshim.addReady(function(context){
|
||||
if(context.querySelector(sel)){
|
||||
window.picturefill();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
if(window.picturefill){
|
||||
var sel = 'picture, img[srcset]';
|
||||
webshim.addReady(function(context){
|
||||
if(context.querySelector(sel)){
|
||||
window.picturefill();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
})();
|
||||
|
||||
/*! Picturefill - v2.1.0-beta - 2014-06-03
|
||||
/*! Picturefill - v2.1.0-beta - 2014-07-15
|
||||
* http://scottjehl.github.io/picturefill
|
||||
* Copyright (c) 2014 https://github.com/scottjehl/picturefill/blob/master/Authors.txt; Licensed MIT */
|
||||
/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. Dual MIT/BSD license */
|
||||
|
||||
window.matchMedia || (window.matchMedia = function() {
|
||||
"use strict";
|
||||
|
||||
// For browsers that support matchMedium api such as IE 9 and webkit
|
||||
var styleMedia = (window.styleMedia || window.media);
|
||||
|
||||
// For those that don't support matchMedium
|
||||
if (!styleMedia) {
|
||||
var style = document.createElement('style'),
|
||||
script = document.getElementsByTagName('script')[0],
|
||||
info = null;
|
||||
|
||||
style.type = 'text/css';
|
||||
style.id = 'matchmediajs-test';
|
||||
|
||||
script.parentNode.insertBefore(style, script);
|
||||
|
||||
// 'style.currentStyle' is used by IE <= 8 and 'window.getComputedStyle' for all other browsers
|
||||
info = ('getComputedStyle' in window) && window.getComputedStyle(style, null) || style.currentStyle;
|
||||
|
||||
styleMedia = {
|
||||
matchMedium: function(media) {
|
||||
var text = '@media ' + media + '{ #matchmediajs-test { width: 1px; } }';
|
||||
|
||||
// 'style.styleSheet' is used by IE <= 8 and 'style.textContent' for all other browsers
|
||||
if (style.styleSheet) {
|
||||
style.styleSheet.cssText = text;
|
||||
} else {
|
||||
style.textContent = text;
|
||||
}
|
||||
|
||||
// Test if media query is true or false
|
||||
return info.width === '1px';
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
return function(media) {
|
||||
return {
|
||||
matches: styleMedia.matchMedium(media || 'all'),
|
||||
media: media || 'all'
|
||||
};
|
||||
};
|
||||
}());
|
||||
/*! Picturefill - Responsive Images that work today.
|
||||
* Author: Scott Jehl, Filament Group, 2012 ( new proposal implemented by Shawn Jansepar )
|
||||
* License: MIT/GPLv2
|
||||
@ -38,6 +80,7 @@
|
||||
|
||||
// If picture is supported, well, that's awesome. Let's get outta here...
|
||||
if ( w.HTMLPictureElement ) {
|
||||
w.picturefill = function() { };
|
||||
return;
|
||||
}
|
||||
|
||||
@ -51,7 +94,8 @@
|
||||
pf.ns = "picturefill";
|
||||
|
||||
// srcset support test
|
||||
pf.srcsetSupported = new w.Image().srcset !== undefined;
|
||||
pf.srcsetSupported = "srcset" in doc.createElement( "img" );
|
||||
pf.sizesSupported = w.HTMLImageElement.sizes;
|
||||
|
||||
// just a string trim workaround
|
||||
pf.trim = function( str ) {
|
||||
@ -82,8 +126,8 @@
|
||||
* http://dev.w3.org/csswg/css-values-3/#length-value
|
||||
*/
|
||||
pf.getWidthFromLength = function( length ) {
|
||||
// If no length was specified, or it is 0, default to `100vw` (per the spec).
|
||||
length = length && parseFloat( length ) > 0 ? length : "100vw";
|
||||
// If no length was specified, or it is 0 or negative, default to `100vw` (per the spec).
|
||||
length = length && ( parseFloat( length ) > 0 || length.indexOf( "calc(" ) > -1 ) ? length : "100vw";
|
||||
|
||||
/**
|
||||
* If length is specified in `vw` units, use `%` instead since the div we’re measuring
|
||||
@ -101,7 +145,12 @@
|
||||
|
||||
// Positioning styles help prevent padding/margin/width on `html` from throwing calculations off.
|
||||
pf.lengthEl.style.cssText = "position: absolute; left: 0; width: " + length + ";";
|
||||
// Using offsetWidth to get width from CSS
|
||||
|
||||
if ( pf.lengthEl.offsetWidth <= 0 ) {
|
||||
// Something has gone wrong. `calc()` is in use and unsupported, most likely. Default to `100vw` (`100%`, for broader support.):
|
||||
pf.lengthEl.style.cssText = "width: 100%;";
|
||||
}
|
||||
|
||||
return pf.lengthEl.offsetWidth;
|
||||
};
|
||||
|
||||
@ -263,38 +312,32 @@
|
||||
return candidates;
|
||||
};
|
||||
|
||||
pf.parseDescriptor = function( descriptor, sizes ) {
|
||||
pf.parseDescriptor = function( descriptor, sizesattr ) {
|
||||
// 11. Descriptor parser: Let candidates be an initially empty source set. The order of entries in the list
|
||||
// is the order in which entries are added to the list.
|
||||
var sizeDescriptor = descriptor && descriptor.replace(/(^\s+|\s+$)/g, ""),
|
||||
widthInCssPixels = sizes ? pf.findWidthFromSourceSize( sizes ) : "100%",
|
||||
var sizes = sizesattr || "100vw",
|
||||
sizeDescriptor = descriptor && descriptor.replace(/(^\s+|\s+$)/g, ""),
|
||||
widthInCssPixels = pf.findWidthFromSourceSize( sizes ),
|
||||
resCandidate;
|
||||
|
||||
if ( sizeDescriptor ) {
|
||||
var splitDescriptor = sizeDescriptor.split(" ");
|
||||
|
||||
for (var i = splitDescriptor.length + 1; i >= 0; i--) {
|
||||
if ( splitDescriptor[ i ] !== undefined ) {
|
||||
var curr = splitDescriptor[ i ],
|
||||
lastchar = curr && curr.slice( curr.length - 1 );
|
||||
|
||||
var curr = splitDescriptor[ i ],
|
||||
lastchar = curr && curr.slice( curr.length - 1 );
|
||||
|
||||
if ( lastchar === "w" || lastchar === "x" ) {
|
||||
resCandidate = curr;
|
||||
}
|
||||
if ( sizes && resCandidate ) {
|
||||
// get the dpr by taking the length / width in css pixels
|
||||
resCandidate = parseFloat( ( parseInt( curr, 10 ) / widthInCssPixels ) );
|
||||
} else {
|
||||
// get the dpr by grabbing the value of Nx
|
||||
var res = curr && parseFloat( curr, 10 );
|
||||
|
||||
resCandidate = res && !isNaN( res ) && lastchar === "x" || lastchar === "w" ? res : 1;
|
||||
if ( ( lastchar === "h" || lastchar === "w" ) && !pf.sizesSupported ) {
|
||||
resCandidate = parseFloat( ( parseInt( curr, 10 ) / widthInCssPixels ) );
|
||||
} else if ( lastchar === "x" ) {
|
||||
var res = curr && parseFloat( curr, 10 );
|
||||
resCandidate = res && !isNaN( res ) ? res : 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
resCandidate = 1;
|
||||
}
|
||||
return resCandidate;
|
||||
return resCandidate || 1;
|
||||
};
|
||||
|
||||
/**
|
||||
@ -372,7 +415,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
if ( !pf.endsWith( picImg.src, bestCandidate.url ) ) {
|
||||
if ( bestCandidate && !pf.endsWith( picImg.src, bestCandidate.url ) ) {
|
||||
picImg.src = bestCandidate.url;
|
||||
// currentSrc attribute and property to match
|
||||
// http://picture.responsiveimages.org/#the-img-element
|
||||
@ -405,32 +448,26 @@
|
||||
};
|
||||
|
||||
/*
|
||||
* Find all picture elements and,
|
||||
* in browsers that don't natively support srcset, find all img elements
|
||||
* with srcset attrs that don't have picture parents
|
||||
* Find all `img` elements, and add them to the candidate list if they have
|
||||
* a `picture` parent, a `sizes` attribute in basic `srcset` supporting browsers,
|
||||
* a `srcset` attribute at all, and they haven’t been evaluated already.
|
||||
*/
|
||||
pf.getAllElements = function() {
|
||||
var pictures = doc.getElementsByTagName( "picture" ),
|
||||
elems = [],
|
||||
var elems = [],
|
||||
imgs = doc.getElementsByTagName( "img" );
|
||||
|
||||
for ( var h = 0, len = pictures.length + imgs.length; h < len; h++ ) {
|
||||
if ( h < pictures.length ) {
|
||||
elems[ h ] = pictures[ h ];
|
||||
} else {
|
||||
var currImg = imgs[ h - pictures.length ];
|
||||
for ( var h = 0, len = imgs.length; h < len; h++ ) {
|
||||
var currImg = imgs[ h ];
|
||||
|
||||
if ( currImg.parentNode.nodeName.toUpperCase() !== "PICTURE" &&
|
||||
( ( pf.srcsetSupported && currImg.getAttribute( "sizes" ) ) ||
|
||||
currImg.getAttribute( "srcset" ) !== null ) ) {
|
||||
elems.push( currImg );
|
||||
}
|
||||
if ( currImg.parentNode.nodeName.toUpperCase() === "PICTURE" ||
|
||||
( currImg.getAttribute( "srcset" ) !== null ) || currImg[ pf.ns ] && currImg[ pf.ns ].srcset !== null ) {
|
||||
elems.push( currImg );
|
||||
}
|
||||
}
|
||||
return elems;
|
||||
};
|
||||
|
||||
pf.getMatch = function( picture ) {
|
||||
pf.getMatch = function( img, picture ) {
|
||||
var sources = picture.childNodes,
|
||||
match;
|
||||
|
||||
@ -443,9 +480,9 @@
|
||||
continue;
|
||||
}
|
||||
|
||||
// Hitting an `img` element stops the search for `sources`.
|
||||
// Hitting the `img` element that started everything stops the search for `sources`.
|
||||
// If no previous `source` matches, the `img` itself is evaluated later.
|
||||
if ( source.nodeName.toUpperCase() === "IMG" ) {
|
||||
if ( source === img ) {
|
||||
return match;
|
||||
}
|
||||
|
||||
@ -477,24 +514,22 @@
|
||||
return match;
|
||||
};
|
||||
|
||||
function picturefill( options ) {
|
||||
function picturefill( opt ) {
|
||||
var elements,
|
||||
element,
|
||||
elemType,
|
||||
parent,
|
||||
firstMatch,
|
||||
candidates,
|
||||
picImg;
|
||||
|
||||
options = options || {};
|
||||
options = opt || {};
|
||||
elements = options.elements || pf.getAllElements();
|
||||
|
||||
// Loop through all elements
|
||||
for ( var i = 0, plen = elements.length; i < plen; i++ ) {
|
||||
element = elements[ i ];
|
||||
elemType = element.nodeName.toUpperCase();
|
||||
parent = element.parentNode;
|
||||
firstMatch = undefined;
|
||||
candidates = undefined;
|
||||
picImg = undefined;
|
||||
|
||||
// expando for caching data on the img
|
||||
if ( !element[ pf.ns ] ) {
|
||||
@ -508,16 +543,16 @@
|
||||
continue;
|
||||
}
|
||||
|
||||
// if element is a picture element
|
||||
if ( elemType === "PICTURE" ) {
|
||||
// if `img` is in a `picture` element
|
||||
if ( parent.nodeName.toUpperCase() === "PICTURE" ) {
|
||||
|
||||
// IE9 video workaround
|
||||
pf.removeVideoShim( element );
|
||||
pf.removeVideoShim( parent );
|
||||
|
||||
// return the first match which might undefined
|
||||
// returns false if there is a pending source
|
||||
// TODO the return type here is brutal, cleanup
|
||||
firstMatch = pf.getMatch( element );
|
||||
firstMatch = pf.getMatch( element, parent );
|
||||
|
||||
// if any sources are pending in this picture due to async type test(s)
|
||||
// remove the evaluated attr and skip for now ( the pending test will
|
||||
@ -525,43 +560,32 @@
|
||||
if ( firstMatch === false ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Find any existing img element in the picture element
|
||||
picImg = element.getElementsByTagName( "img" )[ 0 ];
|
||||
} else {
|
||||
// if it's an img element
|
||||
firstMatch = undefined;
|
||||
picImg = element;
|
||||
}
|
||||
|
||||
if ( picImg ) {
|
||||
|
||||
// expando for caching data on the img
|
||||
if ( !picImg[ pf.ns ] ) {
|
||||
picImg[ pf.ns ] = {};
|
||||
}
|
||||
|
||||
// Cache and remove `srcset` if present and we’re going to be doing `sizes`/`picture` polyfilling to it.
|
||||
if ( picImg.srcset && ( elemType === "PICTURE" || picImg.getAttribute( "sizes" ) ) ) {
|
||||
pf.dodgeSrcset( picImg );
|
||||
}
|
||||
|
||||
if ( firstMatch ) {
|
||||
candidates = pf.processSourceSet( firstMatch );
|
||||
pf.applyBestCandidate( candidates, picImg );
|
||||
} else {
|
||||
// No sources matched, so we’re down to processing the inner `img` as a source.
|
||||
candidates = pf.processSourceSet( picImg );
|
||||
|
||||
if ( picImg.srcset === undefined || picImg[ pf.ns ].srcset ) {
|
||||
// Either `srcset` is completely unsupported, or we need to polyfill `sizes` functionality.
|
||||
pf.applyBestCandidate( candidates, picImg );
|
||||
} // Else, resolution-only `srcset` is supported natively.
|
||||
}
|
||||
|
||||
// set evaluated to true to avoid unnecessary reparsing
|
||||
element[ pf.ns ].evaluated = true;
|
||||
// Cache and remove `srcset` if present and we’re going to be doing `picture`/`srcset`/`sizes` polyfilling to it.
|
||||
if ( parent.nodeName.toUpperCase() === "PICTURE" ||
|
||||
( element.srcset && !pf.srcsetSupported ) ||
|
||||
( !pf.sizesSupported && ( element.srcset && element.srcset.indexOf("w") > -1 ) ) ) {
|
||||
pf.dodgeSrcset( element );
|
||||
}
|
||||
|
||||
if ( firstMatch ) {
|
||||
candidates = pf.processSourceSet( firstMatch );
|
||||
pf.applyBestCandidate( candidates, element );
|
||||
} else {
|
||||
// No sources matched, so we’re down to processing the inner `img` as a source.
|
||||
candidates = pf.processSourceSet( element );
|
||||
|
||||
if ( element.srcset === undefined || element[ pf.ns ].srcset ) {
|
||||
// Either `srcset` is completely unsupported, or we need to polyfill `sizes` functionality.
|
||||
pf.applyBestCandidate( candidates, element );
|
||||
} // Else, resolution-only `srcset` is supported natively.
|
||||
}
|
||||
|
||||
// set evaluated to true to avoid unnecessary reparsing
|
||||
element[ pf.ns ].evaluated = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -596,7 +620,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
webshim.ready('matchMedia', runPicturefill);
|
||||
runPicturefill();
|
||||
|
||||
/* expose methods for testing */
|
||||
picturefill._ = pf;
|
||||
@ -615,6 +639,7 @@
|
||||
|
||||
} )( this, this.document );
|
||||
|
||||
|
||||
;/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. Dual MIT/BSD license */
|
||||
|
||||
window.matchMedia || (window.matchMedia = function() {
|
||||
|
@ -772,8 +772,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
webshims.warn(type +' already implemented for element #'+elem.id);
|
||||
return false;
|
||||
}
|
||||
|
||||
data[type] = true;
|
||||
return true;
|
||||
return !$(elem).hasClass('ws-nopolyfill');
|
||||
},
|
||||
extendUNDEFProp: function(obj, props){
|
||||
$.each(props, function(name, prop){
|
||||
@ -1462,6 +1463,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
};
|
||||
var lazyLoad = function(){
|
||||
var toLoad = ['form-validation'];
|
||||
|
||||
$(document).off('.lazyloadvalidation');
|
||||
|
||||
if(options.lazyCustomMessages){
|
||||
options.customMessages = true;
|
||||
toLoad.push('form-message');
|
||||
@ -1476,7 +1480,6 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
toLoad.push('form-validators');
|
||||
}
|
||||
webshims.reTest(toLoad);
|
||||
$(document).off('.lazyloadvalidation');
|
||||
};
|
||||
/*
|
||||
* Selectors for all browsers
|
||||
@ -1533,11 +1536,11 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
};
|
||||
$.extend(exp, {
|
||||
"enabled": function( elem ) {
|
||||
return elem.disabled === false && !$(elem).is('fieldset[disabled] *');
|
||||
return 'disabled' in elem && elem.disabled === false && !$.find.matchesSelector(elem, 'fieldset[disabled] *');
|
||||
},
|
||||
|
||||
"disabled": function( elem ) {
|
||||
return elem.disabled === true || ('disabled' in elem && $(elem).is('fieldset[disabled] *'));
|
||||
return elem.disabled === true || ('disabled' in elem && $.find.matchesSelector(elem, 'fieldset[disabled] *'));
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -1716,8 +1719,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
};
|
||||
|
||||
|
||||
|
||||
$(document).on('focusin.lazyloadvalidation', function(e){
|
||||
$(document).on('focusin.lazyloadvalidation mousedown.lazyloadvalidation touchstart.lazyloadvalidation', function(e){
|
||||
if('form' in e.target){
|
||||
lazyLoad();
|
||||
}
|
||||
@ -1748,6 +1750,14 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
if(options.addValidators && options.fastValidators){
|
||||
webshims.reTest(['form-validators', 'form-validation']);
|
||||
}
|
||||
|
||||
if(document.readyState == 'complete'){
|
||||
webshims.isReady('WINDOWLOAD', true);
|
||||
}
|
||||
});
|
||||
;webshims.register('form-datalist', function($, webshims, window, document, undefined, options){
|
||||
"use strict";
|
||||
@ -2579,6 +2589,10 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
|
||||
webshims.ready(swfType, initMediaElements);
|
||||
}
|
||||
webshims.ready('track', loadTrackUi);
|
||||
|
||||
if(document.readyState == 'complete'){
|
||||
webshims.isReady('WINDOWLOAD', true);
|
||||
}
|
||||
});
|
||||
|
||||
})(webshims);
|
||||
|
@ -462,6 +462,7 @@
|
||||
var onEvent = {
|
||||
onPlayPause: function(jaris, data, override){
|
||||
var playing, type;
|
||||
var idled = data.paused || data.ended;
|
||||
if(override == null){
|
||||
try {
|
||||
playing = data.api.api_get("isPlaying");
|
||||
@ -469,7 +470,7 @@
|
||||
} else {
|
||||
playing = override;
|
||||
}
|
||||
if(playing == data.paused){
|
||||
if(playing == idled || playing == null){
|
||||
|
||||
data.paused = !playing;
|
||||
type = data.paused ? 'pause' : 'play';
|
||||
@ -1546,11 +1547,11 @@
|
||||
var media, error, parent;
|
||||
if(
|
||||
($(e.target).is('audio, video') || ((parent = e.target.parentNode) && $('source', parent).last()[0] == e.target)) &&
|
||||
(media = $(e.target).closest('audio, video')) && !media.is('.nonnative-api-active')
|
||||
(media = $(e.target).closest('audio, video')) && !media.hasClass('nonnative-api-active')
|
||||
){
|
||||
error = media.prop('error');
|
||||
setTimeout(function(){
|
||||
if(!media.is('.nonnative-api-active')){
|
||||
if(!media.hasClass('nonnative-api-active')){
|
||||
if(error && switchErrors[error.code]){
|
||||
options.preferFlash = true;
|
||||
document.removeEventListener('error', switchOptions, true);
|
||||
|
@ -754,6 +754,10 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
|
||||
webshims.ready(swfType, initMediaElements);
|
||||
}
|
||||
webshims.ready('track', loadTrackUi);
|
||||
|
||||
if(document.readyState == 'complete'){
|
||||
webshims.isReady('WINDOWLOAD', true);
|
||||
}
|
||||
});
|
||||
|
||||
})(webshims);
|
||||
|
@ -549,8 +549,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
webshims.warn(type +' already implemented for element #'+elem.id);
|
||||
return false;
|
||||
}
|
||||
|
||||
data[type] = true;
|
||||
return true;
|
||||
return !$(elem).hasClass('ws-nopolyfill');
|
||||
},
|
||||
extendUNDEFProp: function(obj, props){
|
||||
$.each(props, function(name, prop){
|
||||
@ -1549,7 +1550,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
writeable: false,
|
||||
get: function(){
|
||||
if(this.type != 'file'){return null;}
|
||||
if(!$(this).is('.ws-filereader')){
|
||||
if(!$(this).hasClass('ws-filereader')){
|
||||
webshim.info("please add the 'ws-filereader' class to your input[type='file'] to implement files-property");
|
||||
}
|
||||
return webshim.data(this, 'fileList') || [];
|
||||
@ -1808,6 +1809,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
var onEvent = {
|
||||
onPlayPause: function(jaris, data, override){
|
||||
var playing, type;
|
||||
var idled = data.paused || data.ended;
|
||||
if(override == null){
|
||||
try {
|
||||
playing = data.api.api_get("isPlaying");
|
||||
@ -1815,7 +1817,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
} else {
|
||||
playing = override;
|
||||
}
|
||||
if(playing == data.paused){
|
||||
if(playing == idled || playing == null){
|
||||
|
||||
data.paused = !playing;
|
||||
type = data.paused ? 'pause' : 'play';
|
||||
@ -2892,11 +2894,11 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
var media, error, parent;
|
||||
if(
|
||||
($(e.target).is('audio, video') || ((parent = e.target.parentNode) && $('source', parent).last()[0] == e.target)) &&
|
||||
(media = $(e.target).closest('audio, video')) && !media.is('.nonnative-api-active')
|
||||
(media = $(e.target).closest('audio, video')) && !media.hasClass('nonnative-api-active')
|
||||
){
|
||||
error = media.prop('error');
|
||||
setTimeout(function(){
|
||||
if(!media.is('.nonnative-api-active')){
|
||||
if(!media.hasClass('nonnative-api-active')){
|
||||
if(error && switchErrors[error.code]){
|
||||
options.preferFlash = true;
|
||||
document.removeEventListener('error', switchOptions, true);
|
||||
|
@ -7570,7 +7570,7 @@ Globally exposed namespace with the most frequently used public classes and hand
|
||||
writeable: false,
|
||||
get: function(){
|
||||
if(this.type != 'file'){return null;}
|
||||
if(!$(this).is('.ws-filereader')){
|
||||
if(!$(this).hasClass('ws-filereader')){
|
||||
webshim.info("please add the 'ws-filereader' class to your input[type='file'] to implement files-property");
|
||||
}
|
||||
return webshim.data(this, 'fileList') || [];
|
||||
|
@ -156,18 +156,37 @@ webshims.register('form-shim-extend2', function($, webshims, window, document, u
|
||||
if(!support.fieldsetdisabled || !support.fieldsetelements){
|
||||
(function(){
|
||||
if(!support.fieldsetdisabled){
|
||||
var hasIsDisabled = 'isDisabled' in document.createElement('div');
|
||||
var isFieldsetGroup = {
|
||||
fieldset: 1,
|
||||
FIELDSET: 1
|
||||
};
|
||||
var disableElementsSel = 'input, textarea, select, button';
|
||||
|
||||
var isDisabledChild = function(elem){
|
||||
if(hasIsDisabled && !elem.isDisabled){
|
||||
return false;
|
||||
}
|
||||
return $.find.matchesSelector(elem, 'fieldset[disabled] *' );
|
||||
};
|
||||
var isDisabledChildFilter = hasIsDisabled ?
|
||||
function(){
|
||||
return this.isDisabled && $.find.matchesSelector(this, 'fieldset[disabled] *' );
|
||||
} :
|
||||
'fieldset[disabled] *';
|
||||
var isEnableChildFilter = hasIsDisabled ?
|
||||
function(){
|
||||
return !this.isDisabled && !$.find.matchesSelector(this, 'fieldset[disabled] *' );
|
||||
} :
|
||||
':not(fieldset[disabled] *)';
|
||||
|
||||
$.extend($.expr[":"], {
|
||||
"enabled": function( elem ) {
|
||||
return elem.disabled === false || (isFieldsetGroup[elem.nodeName] && webshims.contentAttr(elem, 'disabled') == null && !$(elem).is('fieldset[disabled] *')) ;
|
||||
return isFieldsetGroup[elem.nodeName] ? (webshims.contentAttr(elem, 'disabled') == null && !isDisabledChild(elem)) : elem.disabled === false;
|
||||
},
|
||||
|
||||
"disabled": function( elem ) {
|
||||
return elem.disabled === true || (isFieldsetGroup[elem.nodeName] && (webshims.contentAttr(elem, 'disabled') != null || $(elem).is('fieldset[disabled] *')));
|
||||
return isFieldsetGroup[elem.nodeName] ? (webshims.contentAttr(elem, 'disabled') != null || isDisabledChild(elem)) : elem.disabled === true;
|
||||
}
|
||||
});
|
||||
|
||||
@ -197,11 +216,12 @@ webshims.register('form-shim-extend2', function($, webshims, window, document, u
|
||||
|
||||
if(value){
|
||||
$(this.querySelectorAll(disableElementsSel)).each(groupControl.disable);
|
||||
} else if(!$(this).is('fieldset[disabled] *')){
|
||||
|
||||
} else if(!isDisabledChild(this)){
|
||||
var elements = $(this.querySelectorAll(disableElementsSel));
|
||||
|
||||
if( this.querySelector('fieldset[disabled]') ){
|
||||
elements = elements.not('fieldset[disabled] *');
|
||||
elements = elements.filter(isEnableChildFilter);
|
||||
}
|
||||
|
||||
elements.each(groupControl.enable);
|
||||
@ -218,7 +238,8 @@ webshims.register('form-shim-extend2', function($, webshims, window, document, u
|
||||
if(value){
|
||||
webshims.data(this, 'groupedisabled', false);
|
||||
desc.prop._supset.call(this, value);
|
||||
} else if($(this).is('fieldset[disabled] *')){
|
||||
|
||||
} else if(isDisabledChild(this)){
|
||||
webshims.data(this, 'groupedisabled', true);
|
||||
desc.prop._supset.call(this, true);
|
||||
} else {
|
||||
@ -242,7 +263,7 @@ webshims.register('form-shim-extend2', function($, webshims, window, document, u
|
||||
webshims.addReady(function(context){
|
||||
|
||||
$(context)
|
||||
.filter('fieldset[disabled], fieldset[disabled] *')
|
||||
.filter(isDisabledChildFilter)
|
||||
.find(disableElementsSel)
|
||||
.each(groupControl.disable)
|
||||
;
|
||||
@ -254,7 +275,6 @@ webshims.register('form-shim-extend2', function($, webshims, window, document, u
|
||||
var isForm = {form: 1, FORM: 1};
|
||||
$.prop = function(elem, name, value){
|
||||
var ret;
|
||||
//TODO: cache + perftest
|
||||
if(elem && elem.nodeType == 1 && value === undefined && isForm[elem.nodeName] && elem.id){
|
||||
ret = document.getElementsByName(name);
|
||||
if(!ret || !ret.length){
|
||||
@ -896,7 +916,7 @@ webshims.register('form-shim-extend2', function($, webshims, window, document, u
|
||||
|
||||
if(elem.type == 'password' || isOver){
|
||||
data.text = createPlaceholder(elem);
|
||||
if(isResponsive || $(elem).is('.responsive-width') || (elem.currentStyle || {width: ''}).width.indexOf('%') != -1){
|
||||
if(isResponsive || $(elem).hasClass('responsive-width') || (elem.currentStyle || {width: ''}).width.indexOf('%') != -1){
|
||||
data.box = data.text;
|
||||
} else {
|
||||
data.box = $('<span class="placeholder-box placeholder-box-'+ (elem.nodeName || '').toLowerCase() +' placeholder-box-'+$.css(elem, 'float')+'" />')
|
||||
@ -1569,7 +1589,7 @@ webshims.register('form-shim-extend2', function($, webshims, window, document, u
|
||||
writeable: false,
|
||||
get: function(){
|
||||
if(this.type != 'file'){return null;}
|
||||
if(!$(this).is('.ws-filereader')){
|
||||
if(!$(this).hasClass('ws-filereader')){
|
||||
webshim.info("please add the 'ws-filereader' class to your input[type='file'] to implement files-property");
|
||||
}
|
||||
return webshim.data(this, 'fileList') || [];
|
||||
|
@ -392,7 +392,7 @@ var rsubmittable = /^(?:select|textarea|input)/i;
|
||||
;
|
||||
return function(){
|
||||
var elem = $(this).getNativeElement()[0];
|
||||
return !!(!elem.readOnly && !types[elem.type] && !$(elem).is(':disabled') );
|
||||
return !!(!elem.readOnly && !types[elem.type] && !$.find.matchesSelector(elem, ':disabled') );
|
||||
};
|
||||
})()
|
||||
},
|
||||
@ -1149,7 +1149,6 @@ webshims.defineNodeNamesProperties(['input', 'button'], formSubmitterDescriptors
|
||||
}
|
||||
|
||||
var nan = parseInt('NaN', 10),
|
||||
doc = document,
|
||||
typeModels = webshims.inputTypes,
|
||||
isNumber = function(string){
|
||||
return (typeof string == 'number' || (string && string == string * 1));
|
||||
|
@ -241,7 +241,6 @@ webshims.register('form-native-extend', function($, webshims, window, doc, undef
|
||||
}
|
||||
|
||||
var nan = parseInt('NaN', 10),
|
||||
doc = document,
|
||||
typeModels = webshims.inputTypes,
|
||||
isNumber = function(string){
|
||||
return (typeof string == 'number' || (string && string == string * 1));
|
||||
|
@ -549,8 +549,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
webshims.warn(type +' already implemented for element #'+elem.id);
|
||||
return false;
|
||||
}
|
||||
|
||||
data[type] = true;
|
||||
return true;
|
||||
return !$(elem).hasClass('ws-nopolyfill');
|
||||
},
|
||||
extendUNDEFProp: function(obj, props){
|
||||
$.each(props, function(name, prop){
|
||||
@ -1239,6 +1240,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
};
|
||||
var lazyLoad = function(){
|
||||
var toLoad = ['form-validation'];
|
||||
|
||||
$(document).off('.lazyloadvalidation');
|
||||
|
||||
if(options.lazyCustomMessages){
|
||||
options.customMessages = true;
|
||||
toLoad.push('form-message');
|
||||
@ -1253,7 +1257,6 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
toLoad.push('form-validators');
|
||||
}
|
||||
webshims.reTest(toLoad);
|
||||
$(document).off('.lazyloadvalidation');
|
||||
};
|
||||
/*
|
||||
* Selectors for all browsers
|
||||
@ -1310,11 +1313,11 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
};
|
||||
$.extend(exp, {
|
||||
"enabled": function( elem ) {
|
||||
return elem.disabled === false && !$(elem).is('fieldset[disabled] *');
|
||||
return 'disabled' in elem && elem.disabled === false && !$.find.matchesSelector(elem, 'fieldset[disabled] *');
|
||||
},
|
||||
|
||||
"disabled": function( elem ) {
|
||||
return elem.disabled === true || ('disabled' in elem && $(elem).is('fieldset[disabled] *'));
|
||||
return elem.disabled === true || ('disabled' in elem && $.find.matchesSelector(elem, 'fieldset[disabled] *'));
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -1493,8 +1496,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
};
|
||||
|
||||
|
||||
|
||||
$(document).on('focusin.lazyloadvalidation', function(e){
|
||||
$(document).on('focusin.lazyloadvalidation mousedown.lazyloadvalidation touchstart.lazyloadvalidation', function(e){
|
||||
if('form' in e.target){
|
||||
lazyLoad();
|
||||
}
|
||||
@ -1525,6 +1527,14 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
if(options.addValidators && options.fastValidators){
|
||||
webshims.reTest(['form-validators', 'form-validation']);
|
||||
}
|
||||
|
||||
if(document.readyState == 'complete'){
|
||||
webshims.isReady('WINDOWLOAD', true);
|
||||
}
|
||||
});
|
||||
;webshims.register('form-message', function($, webshims, window, document, undefined, options){
|
||||
"use strict";
|
||||
|
@ -549,8 +549,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
webshims.warn(type +' already implemented for element #'+elem.id);
|
||||
return false;
|
||||
}
|
||||
|
||||
data[type] = true;
|
||||
return true;
|
||||
return !$(elem).hasClass('ws-nopolyfill');
|
||||
},
|
||||
extendUNDEFProp: function(obj, props){
|
||||
$.each(props, function(name, prop){
|
||||
@ -1239,6 +1240,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
};
|
||||
var lazyLoad = function(){
|
||||
var toLoad = ['form-validation'];
|
||||
|
||||
$(document).off('.lazyloadvalidation');
|
||||
|
||||
if(options.lazyCustomMessages){
|
||||
options.customMessages = true;
|
||||
toLoad.push('form-message');
|
||||
@ -1253,7 +1257,6 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
toLoad.push('form-validators');
|
||||
}
|
||||
webshims.reTest(toLoad);
|
||||
$(document).off('.lazyloadvalidation');
|
||||
};
|
||||
/*
|
||||
* Selectors for all browsers
|
||||
@ -1310,11 +1313,11 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
};
|
||||
$.extend(exp, {
|
||||
"enabled": function( elem ) {
|
||||
return elem.disabled === false && !$(elem).is('fieldset[disabled] *');
|
||||
return 'disabled' in elem && elem.disabled === false && !$.find.matchesSelector(elem, 'fieldset[disabled] *');
|
||||
},
|
||||
|
||||
"disabled": function( elem ) {
|
||||
return elem.disabled === true || ('disabled' in elem && $(elem).is('fieldset[disabled] *'));
|
||||
return elem.disabled === true || ('disabled' in elem && $.find.matchesSelector(elem, 'fieldset[disabled] *'));
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -1493,8 +1496,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
};
|
||||
|
||||
|
||||
|
||||
$(document).on('focusin.lazyloadvalidation', function(e){
|
||||
$(document).on('focusin.lazyloadvalidation mousedown.lazyloadvalidation touchstart.lazyloadvalidation', function(e){
|
||||
if('form' in e.target){
|
||||
lazyLoad();
|
||||
}
|
||||
@ -1525,6 +1527,14 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
if(options.addValidators && options.fastValidators){
|
||||
webshims.reTest(['form-validators', 'form-validation']);
|
||||
}
|
||||
|
||||
if(document.readyState == 'complete'){
|
||||
webshims.isReady('WINDOWLOAD', true);
|
||||
}
|
||||
});
|
||||
;webshims.register('form-message', function($, webshims, window, document, undefined, options){
|
||||
"use strict";
|
||||
|
@ -549,8 +549,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
webshims.warn(type +' already implemented for element #'+elem.id);
|
||||
return false;
|
||||
}
|
||||
|
||||
data[type] = true;
|
||||
return true;
|
||||
return !$(elem).hasClass('ws-nopolyfill');
|
||||
},
|
||||
extendUNDEFProp: function(obj, props){
|
||||
$.each(props, function(name, prop){
|
||||
@ -1239,6 +1240,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
};
|
||||
var lazyLoad = function(){
|
||||
var toLoad = ['form-validation'];
|
||||
|
||||
$(document).off('.lazyloadvalidation');
|
||||
|
||||
if(options.lazyCustomMessages){
|
||||
options.customMessages = true;
|
||||
toLoad.push('form-message');
|
||||
@ -1253,7 +1257,6 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
toLoad.push('form-validators');
|
||||
}
|
||||
webshims.reTest(toLoad);
|
||||
$(document).off('.lazyloadvalidation');
|
||||
};
|
||||
/*
|
||||
* Selectors for all browsers
|
||||
@ -1310,11 +1313,11 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
};
|
||||
$.extend(exp, {
|
||||
"enabled": function( elem ) {
|
||||
return elem.disabled === false && !$(elem).is('fieldset[disabled] *');
|
||||
return 'disabled' in elem && elem.disabled === false && !$.find.matchesSelector(elem, 'fieldset[disabled] *');
|
||||
},
|
||||
|
||||
"disabled": function( elem ) {
|
||||
return elem.disabled === true || ('disabled' in elem && $(elem).is('fieldset[disabled] *'));
|
||||
return elem.disabled === true || ('disabled' in elem && $.find.matchesSelector(elem, 'fieldset[disabled] *'));
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -1493,8 +1496,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
};
|
||||
|
||||
|
||||
|
||||
$(document).on('focusin.lazyloadvalidation', function(e){
|
||||
$(document).on('focusin.lazyloadvalidation mousedown.lazyloadvalidation touchstart.lazyloadvalidation', function(e){
|
||||
if('form' in e.target){
|
||||
lazyLoad();
|
||||
}
|
||||
@ -1525,6 +1527,14 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
if(options.addValidators && options.fastValidators){
|
||||
webshims.reTest(['form-validators', 'form-validation']);
|
||||
}
|
||||
|
||||
if(document.readyState == 'complete'){
|
||||
webshims.isReady('WINDOWLOAD', true);
|
||||
}
|
||||
});
|
||||
;webshims.register('form-datalist', function($, webshims, window, document, undefined, options){
|
||||
"use strict";
|
||||
|
@ -30,7 +30,6 @@ webshims.register('form-number-date-api', function($, webshims, window, document
|
||||
}
|
||||
|
||||
var nan = parseInt('NaN', 10),
|
||||
doc = document,
|
||||
typeModels = webshims.inputTypes,
|
||||
isNumber = function(string){
|
||||
return (typeof string == 'number' || (string && string == string * 1));
|
||||
|
@ -549,8 +549,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
webshims.warn(type +' already implemented for element #'+elem.id);
|
||||
return false;
|
||||
}
|
||||
|
||||
data[type] = true;
|
||||
return true;
|
||||
return !$(elem).hasClass('ws-nopolyfill');
|
||||
},
|
||||
extendUNDEFProp: function(obj, props){
|
||||
$.each(props, function(name, prop){
|
||||
|
@ -549,8 +549,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
webshims.warn(type +' already implemented for element #'+elem.id);
|
||||
return false;
|
||||
}
|
||||
|
||||
data[type] = true;
|
||||
return true;
|
||||
return !$(elem).hasClass('ws-nopolyfill');
|
||||
},
|
||||
extendUNDEFProp: function(obj, props){
|
||||
$.each(props, function(name, prop){
|
||||
|
@ -241,7 +241,6 @@ webshims.register('form-native-extend', function($, webshims, window, doc, undef
|
||||
}
|
||||
|
||||
var nan = parseInt('NaN', 10),
|
||||
doc = document,
|
||||
typeModels = webshims.inputTypes,
|
||||
isNumber = function(string){
|
||||
return (typeof string == 'number' || (string && string == string * 1));
|
||||
@ -1631,9 +1630,11 @@ webshims.register('form-native-extend', function($, webshims, window, doc, undef
|
||||
$(element).attr({'aria-labelledby': labels.map(getId).get().join(' ')});
|
||||
if(!noFocus){
|
||||
labels.on('click', function(e){
|
||||
element.getShadowFocusElement().focus();
|
||||
e.preventDefault();
|
||||
return false;
|
||||
if(!e.isDefaultPrevented()){
|
||||
element.getShadowFocusElement().focus();
|
||||
e.preventDefault();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
@ -3322,27 +3323,27 @@ webshims.register('form-native-extend', function($, webshims, window, doc, undef
|
||||
|
||||
var replace = {};
|
||||
|
||||
|
||||
if(options.replaceUI){
|
||||
if( $.isPlainObject(options.replaceUI) ){
|
||||
$.extend(replace, options.replaceUI);
|
||||
} else {
|
||||
$.extend(replace, {
|
||||
'range': 1,
|
||||
'number': 1,
|
||||
'time': 1,
|
||||
'month': 1,
|
||||
'date': 1,
|
||||
'color': 1,
|
||||
'datetime-local': 1
|
||||
});
|
||||
}
|
||||
$.each($.extend(replace, $.isPlainObject(options.replaceUI) ? options.replaceUI : {
|
||||
'range': 1,
|
||||
'number': 1,
|
||||
'time': 1,
|
||||
'month': 1,
|
||||
'date': 1,
|
||||
'color': 1,
|
||||
'datetime-local': 1
|
||||
}), function(name, val){
|
||||
if(supportInputTypes[name] && val == 'auto'){
|
||||
replace[name] = webshims._getAutoEnhance(val);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if(supportInputTypes.number && navigator.userAgent.indexOf('Touch') == -1 && ((/MSIE 1[0|1]\.\d/.test(navigator.userAgent)) || (/Trident\/7\.0/.test(navigator.userAgent)))){
|
||||
replace.number = 1;
|
||||
}
|
||||
|
||||
if(!supportInputTypes.range || replace.range){
|
||||
if(replace.range !== false && (!supportInputTypes.range || replace.range)){
|
||||
extendType('range', {
|
||||
_create: function(opts, set){
|
||||
var data = $('<span />').insertAfter(opts.orig).rangeUI(opts).data('rangeUi');
|
||||
@ -3353,12 +3354,13 @@ webshims.register('form-native-extend', function($, webshims, window, doc, undef
|
||||
|
||||
|
||||
['number', 'time', 'month', 'date', 'color', 'datetime-local'].forEach(function(name){
|
||||
if(!supportInputTypes[name] || replace[name]){
|
||||
if(replace[name] !== false && (!supportInputTypes[name] || replace[name])){
|
||||
extendType(name, {
|
||||
_create: function(opts, set){
|
||||
if(opts.monthSelect || opts.daySelect || opts.yearSelect){
|
||||
opts.splitInput = true;
|
||||
}
|
||||
|
||||
if(opts.splitInput && !splitInputs[name]){
|
||||
webshims.warn('splitInput not supported for '+ name);
|
||||
opts.splitInput = false;
|
||||
|
@ -241,7 +241,6 @@ webshims.register('form-native-extend', function($, webshims, window, doc, undef
|
||||
}
|
||||
|
||||
var nan = parseInt('NaN', 10),
|
||||
doc = document,
|
||||
typeModels = webshims.inputTypes,
|
||||
isNumber = function(string){
|
||||
return (typeof string == 'number' || (string && string == string * 1));
|
||||
@ -1631,9 +1630,11 @@ webshims.register('form-native-extend', function($, webshims, window, doc, undef
|
||||
$(element).attr({'aria-labelledby': labels.map(getId).get().join(' ')});
|
||||
if(!noFocus){
|
||||
labels.on('click', function(e){
|
||||
element.getShadowFocusElement().focus();
|
||||
e.preventDefault();
|
||||
return false;
|
||||
if(!e.isDefaultPrevented()){
|
||||
element.getShadowFocusElement().focus();
|
||||
e.preventDefault();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
@ -3322,27 +3323,27 @@ webshims.register('form-native-extend', function($, webshims, window, doc, undef
|
||||
|
||||
var replace = {};
|
||||
|
||||
|
||||
if(options.replaceUI){
|
||||
if( $.isPlainObject(options.replaceUI) ){
|
||||
$.extend(replace, options.replaceUI);
|
||||
} else {
|
||||
$.extend(replace, {
|
||||
'range': 1,
|
||||
'number': 1,
|
||||
'time': 1,
|
||||
'month': 1,
|
||||
'date': 1,
|
||||
'color': 1,
|
||||
'datetime-local': 1
|
||||
});
|
||||
}
|
||||
$.each($.extend(replace, $.isPlainObject(options.replaceUI) ? options.replaceUI : {
|
||||
'range': 1,
|
||||
'number': 1,
|
||||
'time': 1,
|
||||
'month': 1,
|
||||
'date': 1,
|
||||
'color': 1,
|
||||
'datetime-local': 1
|
||||
}), function(name, val){
|
||||
if(supportInputTypes[name] && val == 'auto'){
|
||||
replace[name] = webshims._getAutoEnhance(val);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if(supportInputTypes.number && navigator.userAgent.indexOf('Touch') == -1 && ((/MSIE 1[0|1]\.\d/.test(navigator.userAgent)) || (/Trident\/7\.0/.test(navigator.userAgent)))){
|
||||
replace.number = 1;
|
||||
}
|
||||
|
||||
if(!supportInputTypes.range || replace.range){
|
||||
if(replace.range !== false && (!supportInputTypes.range || replace.range)){
|
||||
extendType('range', {
|
||||
_create: function(opts, set){
|
||||
var data = $('<span />').insertAfter(opts.orig).rangeUI(opts).data('rangeUi');
|
||||
@ -3353,12 +3354,13 @@ webshims.register('form-native-extend', function($, webshims, window, doc, undef
|
||||
|
||||
|
||||
['number', 'time', 'month', 'date', 'color', 'datetime-local'].forEach(function(name){
|
||||
if(!supportInputTypes[name] || replace[name]){
|
||||
if(replace[name] !== false && (!supportInputTypes[name] || replace[name])){
|
||||
extendType(name, {
|
||||
_create: function(opts, set){
|
||||
if(opts.monthSelect || opts.daySelect || opts.yearSelect){
|
||||
opts.splitInput = true;
|
||||
}
|
||||
|
||||
if(opts.splitInput && !splitInputs[name]){
|
||||
webshims.warn('splitInput not supported for '+ name);
|
||||
opts.splitInput = false;
|
||||
|
@ -772,8 +772,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
webshims.warn(type +' already implemented for element #'+elem.id);
|
||||
return false;
|
||||
}
|
||||
|
||||
data[type] = true;
|
||||
return true;
|
||||
return !$(elem).hasClass('ws-nopolyfill');
|
||||
},
|
||||
extendUNDEFProp: function(obj, props){
|
||||
$.each(props, function(name, prop){
|
||||
@ -1462,6 +1463,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
};
|
||||
var lazyLoad = function(){
|
||||
var toLoad = ['form-validation'];
|
||||
|
||||
$(document).off('.lazyloadvalidation');
|
||||
|
||||
if(options.lazyCustomMessages){
|
||||
options.customMessages = true;
|
||||
toLoad.push('form-message');
|
||||
@ -1476,7 +1480,6 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
toLoad.push('form-validators');
|
||||
}
|
||||
webshims.reTest(toLoad);
|
||||
$(document).off('.lazyloadvalidation');
|
||||
};
|
||||
/*
|
||||
* Selectors for all browsers
|
||||
@ -1533,11 +1536,11 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
};
|
||||
$.extend(exp, {
|
||||
"enabled": function( elem ) {
|
||||
return elem.disabled === false && !$(elem).is('fieldset[disabled] *');
|
||||
return 'disabled' in elem && elem.disabled === false && !$.find.matchesSelector(elem, 'fieldset[disabled] *');
|
||||
},
|
||||
|
||||
"disabled": function( elem ) {
|
||||
return elem.disabled === true || ('disabled' in elem && $(elem).is('fieldset[disabled] *'));
|
||||
return elem.disabled === true || ('disabled' in elem && $.find.matchesSelector(elem, 'fieldset[disabled] *'));
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -1716,8 +1719,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
};
|
||||
|
||||
|
||||
|
||||
$(document).on('focusin.lazyloadvalidation', function(e){
|
||||
$(document).on('focusin.lazyloadvalidation mousedown.lazyloadvalidation touchstart.lazyloadvalidation', function(e){
|
||||
if('form' in e.target){
|
||||
lazyLoad();
|
||||
}
|
||||
@ -1748,6 +1750,14 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
if(options.addValidators && options.fastValidators){
|
||||
webshims.reTest(['form-validators', 'form-validation']);
|
||||
}
|
||||
|
||||
if(document.readyState == 'complete'){
|
||||
webshims.isReady('WINDOWLOAD', true);
|
||||
}
|
||||
});
|
||||
;webshims.register('form-message', function($, webshims, window, document, undefined, options){
|
||||
"use strict";
|
||||
@ -2891,6 +2901,10 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
|
||||
webshims.ready(swfType, initMediaElements);
|
||||
}
|
||||
webshims.ready('track', loadTrackUi);
|
||||
|
||||
if(document.readyState == 'complete'){
|
||||
webshims.isReady('WINDOWLOAD', true);
|
||||
}
|
||||
});
|
||||
|
||||
})(webshims);
|
||||
|
@ -772,8 +772,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
webshims.warn(type +' already implemented for element #'+elem.id);
|
||||
return false;
|
||||
}
|
||||
|
||||
data[type] = true;
|
||||
return true;
|
||||
return !$(elem).hasClass('ws-nopolyfill');
|
||||
},
|
||||
extendUNDEFProp: function(obj, props){
|
||||
$.each(props, function(name, prop){
|
||||
@ -1462,6 +1463,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
};
|
||||
var lazyLoad = function(){
|
||||
var toLoad = ['form-validation'];
|
||||
|
||||
$(document).off('.lazyloadvalidation');
|
||||
|
||||
if(options.lazyCustomMessages){
|
||||
options.customMessages = true;
|
||||
toLoad.push('form-message');
|
||||
@ -1476,7 +1480,6 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
toLoad.push('form-validators');
|
||||
}
|
||||
webshims.reTest(toLoad);
|
||||
$(document).off('.lazyloadvalidation');
|
||||
};
|
||||
/*
|
||||
* Selectors for all browsers
|
||||
@ -1533,11 +1536,11 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
};
|
||||
$.extend(exp, {
|
||||
"enabled": function( elem ) {
|
||||
return elem.disabled === false && !$(elem).is('fieldset[disabled] *');
|
||||
return 'disabled' in elem && elem.disabled === false && !$.find.matchesSelector(elem, 'fieldset[disabled] *');
|
||||
},
|
||||
|
||||
"disabled": function( elem ) {
|
||||
return elem.disabled === true || ('disabled' in elem && $(elem).is('fieldset[disabled] *'));
|
||||
return elem.disabled === true || ('disabled' in elem && $.find.matchesSelector(elem, 'fieldset[disabled] *'));
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -1716,8 +1719,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
};
|
||||
|
||||
|
||||
|
||||
$(document).on('focusin.lazyloadvalidation', function(e){
|
||||
$(document).on('focusin.lazyloadvalidation mousedown.lazyloadvalidation touchstart.lazyloadvalidation', function(e){
|
||||
if('form' in e.target){
|
||||
lazyLoad();
|
||||
}
|
||||
@ -1748,6 +1750,14 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
if(options.addValidators && options.fastValidators){
|
||||
webshims.reTest(['form-validators', 'form-validation']);
|
||||
}
|
||||
|
||||
if(document.readyState == 'complete'){
|
||||
webshims.isReady('WINDOWLOAD', true);
|
||||
}
|
||||
});
|
||||
;webshims.register('form-message', function($, webshims, window, document, undefined, options){
|
||||
"use strict";
|
||||
@ -2594,6 +2604,10 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
|
||||
webshims.ready(swfType, initMediaElements);
|
||||
}
|
||||
webshims.ready('track', loadTrackUi);
|
||||
|
||||
if(document.readyState == 'complete'){
|
||||
webshims.isReady('WINDOWLOAD', true);
|
||||
}
|
||||
});
|
||||
|
||||
})(webshims);
|
||||
|
@ -549,8 +549,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
webshims.warn(type +' already implemented for element #'+elem.id);
|
||||
return false;
|
||||
}
|
||||
|
||||
data[type] = true;
|
||||
return true;
|
||||
return !$(elem).hasClass('ws-nopolyfill');
|
||||
},
|
||||
extendUNDEFProp: function(obj, props){
|
||||
$.each(props, function(name, prop){
|
||||
@ -2015,9 +2016,11 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
$(element).attr({'aria-labelledby': labels.map(getId).get().join(' ')});
|
||||
if(!noFocus){
|
||||
labels.on('click', function(e){
|
||||
element.getShadowFocusElement().focus();
|
||||
e.preventDefault();
|
||||
return false;
|
||||
if(!e.isDefaultPrevented()){
|
||||
element.getShadowFocusElement().focus();
|
||||
e.preventDefault();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
@ -3706,27 +3709,27 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
|
||||
var replace = {};
|
||||
|
||||
|
||||
if(options.replaceUI){
|
||||
if( $.isPlainObject(options.replaceUI) ){
|
||||
$.extend(replace, options.replaceUI);
|
||||
} else {
|
||||
$.extend(replace, {
|
||||
'range': 1,
|
||||
'number': 1,
|
||||
'time': 1,
|
||||
'month': 1,
|
||||
'date': 1,
|
||||
'color': 1,
|
||||
'datetime-local': 1
|
||||
});
|
||||
}
|
||||
$.each($.extend(replace, $.isPlainObject(options.replaceUI) ? options.replaceUI : {
|
||||
'range': 1,
|
||||
'number': 1,
|
||||
'time': 1,
|
||||
'month': 1,
|
||||
'date': 1,
|
||||
'color': 1,
|
||||
'datetime-local': 1
|
||||
}), function(name, val){
|
||||
if(supportInputTypes[name] && val == 'auto'){
|
||||
replace[name] = webshims._getAutoEnhance(val);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if(supportInputTypes.number && navigator.userAgent.indexOf('Touch') == -1 && ((/MSIE 1[0|1]\.\d/.test(navigator.userAgent)) || (/Trident\/7\.0/.test(navigator.userAgent)))){
|
||||
replace.number = 1;
|
||||
}
|
||||
|
||||
if(!supportInputTypes.range || replace.range){
|
||||
if(replace.range !== false && (!supportInputTypes.range || replace.range)){
|
||||
extendType('range', {
|
||||
_create: function(opts, set){
|
||||
var data = $('<span />').insertAfter(opts.orig).rangeUI(opts).data('rangeUi');
|
||||
@ -3737,12 +3740,13 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
|
||||
|
||||
['number', 'time', 'month', 'date', 'color', 'datetime-local'].forEach(function(name){
|
||||
if(!supportInputTypes[name] || replace[name]){
|
||||
if(replace[name] !== false && (!supportInputTypes[name] || replace[name])){
|
||||
extendType(name, {
|
||||
_create: function(opts, set){
|
||||
if(opts.monthSelect || opts.daySelect || opts.yearSelect){
|
||||
opts.splitInput = true;
|
||||
}
|
||||
|
||||
if(opts.splitInput && !splitInputs[name]){
|
||||
webshims.warn('splitInput not supported for '+ name);
|
||||
opts.splitInput = false;
|
||||
|
@ -276,30 +276,6 @@ webshims.register('jmebase', function($, webshims, window, doc, undefined){
|
||||
jmeData.media = media;
|
||||
jmeData.player = base;
|
||||
media
|
||||
.on('ended emptied play', (function(){
|
||||
var timer;
|
||||
var releaseEmptied = function(){
|
||||
stopEmptiedEvent = false;
|
||||
};
|
||||
var ended = function(){
|
||||
removeCanPlay();
|
||||
media.jmeFn('pause');
|
||||
if(!options.noReload && media.prop('ended') && media.prop('paused') && !media.prop('autoplay') && !media.prop('loop') && !media.hasClass('no-reload')){
|
||||
stopEmptiedEvent = true;
|
||||
media.jmeFn('load');
|
||||
base.attr('data-state', 'ended');
|
||||
setTimeout(releaseEmptied);
|
||||
|
||||
}
|
||||
};
|
||||
return function(e){
|
||||
|
||||
clearTimeout(timer);
|
||||
if(e.type == 'ended' && !options.noReload && !media.prop('autoplay') && !media.prop('loop') && !media.hasClass('no-reload')){
|
||||
timer = setTimeout(ended);
|
||||
}
|
||||
};
|
||||
})())
|
||||
.on('emptied waiting canplay canplaythrough playing ended pause mediaerror', mediaUpdateFn)
|
||||
.on('volumechange updateJMEState', function(){
|
||||
var volume = $.prop(this, 'volume');
|
||||
|
@ -276,30 +276,6 @@ webshims.register('jmebase', function($, webshims, window, doc, undefined){
|
||||
jmeData.media = media;
|
||||
jmeData.player = base;
|
||||
media
|
||||
.on('ended emptied play', (function(){
|
||||
var timer;
|
||||
var releaseEmptied = function(){
|
||||
stopEmptiedEvent = false;
|
||||
};
|
||||
var ended = function(){
|
||||
removeCanPlay();
|
||||
media.jmeFn('pause');
|
||||
if(!options.noReload && media.prop('ended') && media.prop('paused') && !media.prop('autoplay') && !media.prop('loop') && !media.hasClass('no-reload')){
|
||||
stopEmptiedEvent = true;
|
||||
media.jmeFn('load');
|
||||
base.attr('data-state', 'ended');
|
||||
setTimeout(releaseEmptied);
|
||||
|
||||
}
|
||||
};
|
||||
return function(e){
|
||||
|
||||
clearTimeout(timer);
|
||||
if(e.type == 'ended' && !options.noReload && !media.prop('autoplay') && !media.prop('loop') && !media.hasClass('no-reload')){
|
||||
timer = setTimeout(ended);
|
||||
}
|
||||
};
|
||||
})())
|
||||
.on('emptied waiting canplay canplaythrough playing ended pause mediaerror', mediaUpdateFn)
|
||||
.on('volumechange updateJMEState', function(){
|
||||
var volume = $.prop(this, 'volume');
|
||||
@ -598,17 +574,33 @@ webshims.register('jmebase', function($, webshims, window, doc, undefined){
|
||||
var regYt = /youtube\.com\/[watch\?|v\/]+/i;
|
||||
|
||||
var isInitial = data.media.prop('paused');
|
||||
var isEnded = data.media.prop('ended');
|
||||
if(isInitial){
|
||||
data.player.addClass('initial-state');
|
||||
}
|
||||
if(isEnded){
|
||||
data.player.addClass('ended-state');
|
||||
}
|
||||
if(!('backgroundSize' in $poster[0].style)){
|
||||
data.player.addClass('no-backgroundsize');
|
||||
}
|
||||
data.media.on('playing waiting seeked seeking', function(){
|
||||
data.media.on('play playing waiting seeked seeking', function(e){
|
||||
|
||||
if(isInitial){
|
||||
isInitial = false;
|
||||
data.player.removeClass('initial-state');
|
||||
}
|
||||
|
||||
if(isEnded){
|
||||
isEnded = false;
|
||||
data.player.removeClass('ended-state');
|
||||
}
|
||||
});
|
||||
data.media.on('ended', function(){
|
||||
if(!isEnded && !data.media.prop('loop') && data.media.prop('ended')){
|
||||
isEnded = true;
|
||||
data.player.addClass('ended-state');
|
||||
}
|
||||
});
|
||||
return function(){
|
||||
var poster = data.media.attr('poster');
|
||||
@ -640,6 +632,11 @@ webshims.register('jmebase', function($, webshims, window, doc, undefined){
|
||||
isInitial = true;
|
||||
}
|
||||
|
||||
if(isEnded){
|
||||
isEnded = false;
|
||||
data.player.removeClass('ended-state');
|
||||
}
|
||||
|
||||
if(lastYoutubeState !== hasYt){
|
||||
lastYoutubeState = hasYt;
|
||||
data.player[hasYt ? 'addClass' : 'removeClass']('has-ytposter');
|
||||
|
@ -276,30 +276,6 @@ webshims.register('jmebase', function($, webshims, window, doc, undefined){
|
||||
jmeData.media = media;
|
||||
jmeData.player = base;
|
||||
media
|
||||
.on('ended emptied play', (function(){
|
||||
var timer;
|
||||
var releaseEmptied = function(){
|
||||
stopEmptiedEvent = false;
|
||||
};
|
||||
var ended = function(){
|
||||
removeCanPlay();
|
||||
media.jmeFn('pause');
|
||||
if(!options.noReload && media.prop('ended') && media.prop('paused') && !media.prop('autoplay') && !media.prop('loop') && !media.hasClass('no-reload')){
|
||||
stopEmptiedEvent = true;
|
||||
media.jmeFn('load');
|
||||
base.attr('data-state', 'ended');
|
||||
setTimeout(releaseEmptied);
|
||||
|
||||
}
|
||||
};
|
||||
return function(e){
|
||||
|
||||
clearTimeout(timer);
|
||||
if(e.type == 'ended' && !options.noReload && !media.prop('autoplay') && !media.prop('loop') && !media.hasClass('no-reload')){
|
||||
timer = setTimeout(ended);
|
||||
}
|
||||
};
|
||||
})())
|
||||
.on('emptied waiting canplay canplaythrough playing ended pause mediaerror', mediaUpdateFn)
|
||||
.on('volumechange updateJMEState', function(){
|
||||
var volume = $.prop(this, 'volume');
|
||||
@ -598,17 +574,33 @@ webshims.register('jmebase', function($, webshims, window, doc, undefined){
|
||||
var regYt = /youtube\.com\/[watch\?|v\/]+/i;
|
||||
|
||||
var isInitial = data.media.prop('paused');
|
||||
var isEnded = data.media.prop('ended');
|
||||
if(isInitial){
|
||||
data.player.addClass('initial-state');
|
||||
}
|
||||
if(isEnded){
|
||||
data.player.addClass('ended-state');
|
||||
}
|
||||
if(!('backgroundSize' in $poster[0].style)){
|
||||
data.player.addClass('no-backgroundsize');
|
||||
}
|
||||
data.media.on('playing waiting seeked seeking', function(){
|
||||
data.media.on('play playing waiting seeked seeking', function(e){
|
||||
|
||||
if(isInitial){
|
||||
isInitial = false;
|
||||
data.player.removeClass('initial-state');
|
||||
}
|
||||
|
||||
if(isEnded){
|
||||
isEnded = false;
|
||||
data.player.removeClass('ended-state');
|
||||
}
|
||||
});
|
||||
data.media.on('ended', function(){
|
||||
if(!isEnded && !data.media.prop('loop') && data.media.prop('ended')){
|
||||
isEnded = true;
|
||||
data.player.addClass('ended-state');
|
||||
}
|
||||
});
|
||||
return function(){
|
||||
var poster = data.media.attr('poster');
|
||||
@ -640,6 +632,11 @@ webshims.register('jmebase', function($, webshims, window, doc, undefined){
|
||||
isInitial = true;
|
||||
}
|
||||
|
||||
if(isEnded){
|
||||
isEnded = false;
|
||||
data.player.removeClass('ended-state');
|
||||
}
|
||||
|
||||
if(lastYoutubeState !== hasYt){
|
||||
lastYoutubeState = hasYt;
|
||||
data.player[hasYt ? 'addClass' : 'removeClass']('has-ytposter');
|
||||
|
@ -549,8 +549,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
|
||||
webshims.warn(type +' already implemented for element #'+elem.id);
|
||||
return false;
|
||||
}
|
||||
|
||||
data[type] = true;
|
||||
return true;
|
||||
return !$(elem).hasClass('ws-nopolyfill');
|
||||
},
|
||||
extendUNDEFProp: function(obj, props){
|
||||
$.each(props, function(name, prop){
|
||||
|
@ -337,7 +337,7 @@ webshim.register('filereader', function($, webshim, window, document, undefined,
|
||||
writeable: false,
|
||||
get: function(){
|
||||
if(this.type != 'file'){return null;}
|
||||
if(!$(this).is('.ws-filereader')){
|
||||
if(!$(this).hasClass('ws-filereader')){
|
||||
webshim.info("please add the 'ws-filereader' class to your input[type='file'] to implement files-property");
|
||||
}
|
||||
return webshim.data(this, 'fileList') || [];
|
||||
|
@ -27,6 +27,9 @@ webshims.register('form-core', function($, webshims, window, document, undefined
|
||||
};
|
||||
var lazyLoad = function(){
|
||||
var toLoad = ['form-validation'];
|
||||
|
||||
$(document).off('.lazyloadvalidation');
|
||||
|
||||
if(options.lazyCustomMessages){
|
||||
options.customMessages = true;
|
||||
toLoad.push('form-message');
|
||||
@ -41,7 +44,6 @@ webshims.register('form-core', function($, webshims, window, document, undefined
|
||||
toLoad.push('form-validators');
|
||||
}
|
||||
webshims.reTest(toLoad);
|
||||
$(document).off('.lazyloadvalidation');
|
||||
};
|
||||
/*
|
||||
* Selectors for all browsers
|
||||
@ -98,11 +100,11 @@ webshims.register('form-core', function($, webshims, window, document, undefined
|
||||
};
|
||||
$.extend(exp, {
|
||||
"enabled": function( elem ) {
|
||||
return elem.disabled === false && !$(elem).is('fieldset[disabled] *');
|
||||
return 'disabled' in elem && elem.disabled === false && !$.find.matchesSelector(elem, 'fieldset[disabled] *');
|
||||
},
|
||||
|
||||
"disabled": function( elem ) {
|
||||
return elem.disabled === true || ('disabled' in elem && $(elem).is('fieldset[disabled] *'));
|
||||
return elem.disabled === true || ('disabled' in elem && $.find.matchesSelector(elem, 'fieldset[disabled] *'));
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -281,8 +283,7 @@ webshims.register('form-core', function($, webshims, window, document, undefined
|
||||
};
|
||||
|
||||
|
||||
|
||||
$(document).on('focusin.lazyloadvalidation', function(e){
|
||||
$(document).on('focusin.lazyloadvalidation mousedown.lazyloadvalidation touchstart.lazyloadvalidation', function(e){
|
||||
if('form' in e.target){
|
||||
lazyLoad();
|
||||
}
|
||||
@ -313,4 +314,12 @@ webshims.register('form-core', function($, webshims, window, document, undefined
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
if(options.addValidators && options.fastValidators){
|
||||
webshims.reTest(['form-validators', 'form-validation']);
|
||||
}
|
||||
|
||||
if(document.readyState == 'complete'){
|
||||
webshims.isReady('WINDOWLOAD', true);
|
||||
}
|
||||
});
|
||||
|
@ -270,11 +270,15 @@ webshims.register('form-datalist-lazy', function($, webshims, window, document,
|
||||
$(this.input).removeAttr('aria-activedescendant').triggerHandler('datalistcreated', [{instance: this}]);
|
||||
|
||||
if(_forceShow || this.popover.isVisible){
|
||||
if(this.options.valueCompletion && this.lastCompletedValue && !$.prop(this.input, 'value').indexOf(this.lastCompletedValue)){
|
||||
|
||||
if(this.options.valueCompletion && this.lastCompletedValue && (value = $.prop(this.input, 'value')) && !value.indexOf(this.lastCompletedValue)){
|
||||
$.prop(this.input, 'value', this.lastCompletedValue);
|
||||
$(this.input).triggerHandler('updateInput');
|
||||
}
|
||||
this.lastCompletedValue = "";
|
||||
|
||||
if(value != this.lastCompletedValue){
|
||||
this.lastCompletedValue = "";
|
||||
}
|
||||
this.showHideOptions();
|
||||
} else {
|
||||
this.lastCompletedValue = "";
|
||||
@ -545,7 +549,7 @@ webshims.register('form-datalist-lazy', function($, webshims, window, document,
|
||||
}
|
||||
items.removeClass('active-item');
|
||||
this.shadowList.addClass('list-item-active');
|
||||
activeItem = items.filter(':eq('+ index +')').addClass('active-item');
|
||||
activeItem = items.eq(index).addClass('active-item');
|
||||
|
||||
if(doValue){
|
||||
if(doValue != 'onlyScroll'){
|
||||
|
@ -30,7 +30,6 @@ webshims.register('form-number-date-api', function($, webshims, window, document
|
||||
}
|
||||
|
||||
var nan = parseInt('NaN', 10),
|
||||
doc = document,
|
||||
typeModels = webshims.inputTypes,
|
||||
isNumber = function(string){
|
||||
return (typeof string == 'number' || (string && string == string * 1));
|
||||
|
@ -183,9 +183,11 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
|
||||
$(element).attr({'aria-labelledby': labels.map(getId).get().join(' ')});
|
||||
if(!noFocus){
|
||||
labels.on('click', function(e){
|
||||
element.getShadowFocusElement().focus();
|
||||
e.preventDefault();
|
||||
return false;
|
||||
if(!e.isDefaultPrevented()){
|
||||
element.getShadowFocusElement().focus();
|
||||
e.preventDefault();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
@ -1874,27 +1876,27 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
|
||||
|
||||
var replace = {};
|
||||
|
||||
|
||||
if(options.replaceUI){
|
||||
if( $.isPlainObject(options.replaceUI) ){
|
||||
$.extend(replace, options.replaceUI);
|
||||
} else {
|
||||
$.extend(replace, {
|
||||
'range': 1,
|
||||
'number': 1,
|
||||
'time': 1,
|
||||
'month': 1,
|
||||
'date': 1,
|
||||
'color': 1,
|
||||
'datetime-local': 1
|
||||
});
|
||||
}
|
||||
$.each($.extend(replace, $.isPlainObject(options.replaceUI) ? options.replaceUI : {
|
||||
'range': 1,
|
||||
'number': 1,
|
||||
'time': 1,
|
||||
'month': 1,
|
||||
'date': 1,
|
||||
'color': 1,
|
||||
'datetime-local': 1
|
||||
}), function(name, val){
|
||||
if(supportInputTypes[name] && val == 'auto'){
|
||||
replace[name] = webshims._getAutoEnhance(val);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if(supportInputTypes.number && navigator.userAgent.indexOf('Touch') == -1 && ((/MSIE 1[0|1]\.\d/.test(navigator.userAgent)) || (/Trident\/7\.0/.test(navigator.userAgent)))){
|
||||
replace.number = 1;
|
||||
}
|
||||
|
||||
if(!supportInputTypes.range || replace.range){
|
||||
if(replace.range !== false && (!supportInputTypes.range || replace.range)){
|
||||
extendType('range', {
|
||||
_create: function(opts, set){
|
||||
var data = $('<span />').insertAfter(opts.orig).rangeUI(opts).data('rangeUi');
|
||||
@ -1905,12 +1907,13 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
|
||||
|
||||
|
||||
['number', 'time', 'month', 'date', 'color', 'datetime-local'].forEach(function(name){
|
||||
if(!supportInputTypes[name] || replace[name]){
|
||||
if(replace[name] !== false && (!supportInputTypes[name] || replace[name])){
|
||||
extendType(name, {
|
||||
_create: function(opts, set){
|
||||
if(opts.monthSelect || opts.daySelect || opts.yearSelect){
|
||||
opts.splitInput = true;
|
||||
}
|
||||
|
||||
if(opts.splitInput && !splitInputs[name]){
|
||||
webshims.warn('splitInput not supported for '+ name);
|
||||
opts.splitInput = false;
|
||||
|
@ -392,7 +392,7 @@ var rsubmittable = /^(?:select|textarea|input)/i;
|
||||
;
|
||||
return function(){
|
||||
var elem = $(this).getNativeElement()[0];
|
||||
return !!(!elem.readOnly && !types[elem.type] && !$(elem).is(':disabled') );
|
||||
return !!(!elem.readOnly && !types[elem.type] && !$.find.matchesSelector(elem, ':disabled') );
|
||||
};
|
||||
})()
|
||||
},
|
||||
|
@ -156,18 +156,37 @@ webshims.register('form-shim-extend2', function($, webshims, window, document, u
|
||||
if(!support.fieldsetdisabled || !support.fieldsetelements){
|
||||
(function(){
|
||||
if(!support.fieldsetdisabled){
|
||||
var hasIsDisabled = 'isDisabled' in document.createElement('div');
|
||||
var isFieldsetGroup = {
|
||||
fieldset: 1,
|
||||
FIELDSET: 1
|
||||
};
|
||||
var disableElementsSel = 'input, textarea, select, button';
|
||||
|
||||
var isDisabledChild = function(elem){
|
||||
if(hasIsDisabled && !elem.isDisabled){
|
||||
return false;
|
||||
}
|
||||
return $.find.matchesSelector(elem, 'fieldset[disabled] *' );
|
||||
};
|
||||
var isDisabledChildFilter = hasIsDisabled ?
|
||||
function(){
|
||||
return this.isDisabled && $.find.matchesSelector(this, 'fieldset[disabled] *' );
|
||||
} :
|
||||
'fieldset[disabled] *';
|
||||
var isEnableChildFilter = hasIsDisabled ?
|
||||
function(){
|
||||
return !this.isDisabled && !$.find.matchesSelector(this, 'fieldset[disabled] *' );
|
||||
} :
|
||||
':not(fieldset[disabled] *)';
|
||||
|
||||
$.extend($.expr[":"], {
|
||||
"enabled": function( elem ) {
|
||||
return elem.disabled === false || (isFieldsetGroup[elem.nodeName] && webshims.contentAttr(elem, 'disabled') == null && !$(elem).is('fieldset[disabled] *')) ;
|
||||
return isFieldsetGroup[elem.nodeName] ? (webshims.contentAttr(elem, 'disabled') == null && !isDisabledChild(elem)) : elem.disabled === false;
|
||||
},
|
||||
|
||||
"disabled": function( elem ) {
|
||||
return elem.disabled === true || (isFieldsetGroup[elem.nodeName] && (webshims.contentAttr(elem, 'disabled') != null || $(elem).is('fieldset[disabled] *')));
|
||||
return isFieldsetGroup[elem.nodeName] ? (webshims.contentAttr(elem, 'disabled') != null || isDisabledChild(elem)) : elem.disabled === true;
|
||||
}
|
||||
});
|
||||
|
||||
@ -197,11 +216,12 @@ webshims.register('form-shim-extend2', function($, webshims, window, document, u
|
||||
|
||||
if(value){
|
||||
$(this.querySelectorAll(disableElementsSel)).each(groupControl.disable);
|
||||
} else if(!$(this).is('fieldset[disabled] *')){
|
||||
|
||||
} else if(!isDisabledChild(this)){
|
||||
var elements = $(this.querySelectorAll(disableElementsSel));
|
||||
|
||||
if( this.querySelector('fieldset[disabled]') ){
|
||||
elements = elements.not('fieldset[disabled] *');
|
||||
elements = elements.filter(isEnableChildFilter);
|
||||
}
|
||||
|
||||
elements.each(groupControl.enable);
|
||||
@ -218,7 +238,8 @@ webshims.register('form-shim-extend2', function($, webshims, window, document, u
|
||||
if(value){
|
||||
webshims.data(this, 'groupedisabled', false);
|
||||
desc.prop._supset.call(this, value);
|
||||
} else if($(this).is('fieldset[disabled] *')){
|
||||
|
||||
} else if(isDisabledChild(this)){
|
||||
webshims.data(this, 'groupedisabled', true);
|
||||
desc.prop._supset.call(this, true);
|
||||
} else {
|
||||
@ -242,7 +263,7 @@ webshims.register('form-shim-extend2', function($, webshims, window, document, u
|
||||
webshims.addReady(function(context){
|
||||
|
||||
$(context)
|
||||
.filter('fieldset[disabled], fieldset[disabled] *')
|
||||
.filter(isDisabledChildFilter)
|
||||
.find(disableElementsSel)
|
||||
.each(groupControl.disable)
|
||||
;
|
||||
@ -254,7 +275,6 @@ webshims.register('form-shim-extend2', function($, webshims, window, document, u
|
||||
var isForm = {form: 1, FORM: 1};
|
||||
$.prop = function(elem, name, value){
|
||||
var ret;
|
||||
//TODO: cache + perftest
|
||||
if(elem && elem.nodeType == 1 && value === undefined && isForm[elem.nodeName] && elem.id){
|
||||
ret = document.getElementsByName(name);
|
||||
if(!ret || !ret.length){
|
||||
@ -896,7 +916,7 @@ webshims.register('form-shim-extend2', function($, webshims, window, document, u
|
||||
|
||||
if(elem.type == 'password' || isOver){
|
||||
data.text = createPlaceholder(elem);
|
||||
if(isResponsive || $(elem).is('.responsive-width') || (elem.currentStyle || {width: ''}).width.indexOf('%') != -1){
|
||||
if(isResponsive || $(elem).hasClass('responsive-width') || (elem.currentStyle || {width: ''}).width.indexOf('%') != -1){
|
||||
data.box = data.text;
|
||||
} else {
|
||||
data.box = $('<span class="placeholder-box placeholder-box-'+ (elem.nodeName || '').toLowerCase() +' placeholder-box-'+$.css(elem, 'float')+'" />')
|
||||
|
@ -111,7 +111,7 @@ webshims.register('form-validation', function($, webshims, window, document, und
|
||||
shadowType = shadowElem.prop('type');
|
||||
}
|
||||
if(
|
||||
(chromeBugs && (e.type == 'change' || webkitVersion < 537.36) && noFocusWidgets[shadowType] && $(e.target).is(':focus')) ||
|
||||
(chromeBugs && (e.type == 'change' || webkitVersion < 537.36) && noFocusWidgets[shadowType] && $.find.matchesSelector(e.target, ':focus')) ||
|
||||
(e.type == 'focusout' && elem.type == 'radio' && isInGroup(elem.name))
|
||||
){
|
||||
return;
|
||||
@ -438,9 +438,9 @@ webshims.register('form-validation', function($, webshims, window, document, und
|
||||
this.lastElement = $(element).getShadowFocusElement();
|
||||
if(!this.prepared || !this.options.prepareFor){
|
||||
if(opts.appendTo == 'element' || (opts.inline && opts.appendTo == 'auto')){
|
||||
parentElem = element.parent();
|
||||
parentElem = visual.parent();
|
||||
} else if(opts.appendTo == 'auto'){
|
||||
parentElem = this._getAutoAppendElement(element);
|
||||
parentElem = this._getAutoAppendElement(visual);
|
||||
} else {
|
||||
parentElem = $(opts.appendTo);
|
||||
}
|
||||
@ -679,7 +679,7 @@ webshims.register('form-validation', function($, webshims, window, document, und
|
||||
var ret = $(elem).data('errortype');
|
||||
if(!ret){
|
||||
$.each(fields, function(errorName, cNames){
|
||||
if($(elem).is(cNames)){
|
||||
if($.find.matchesSelector(elem, cNames)){
|
||||
ret = errorName;
|
||||
return false;
|
||||
}
|
||||
@ -724,7 +724,8 @@ webshims.register('form-validation', function($, webshims, window, document, und
|
||||
};
|
||||
})(),
|
||||
initIvalContentMessage: function(elem){
|
||||
if($(elem).jProp('form').is(iVal.sel)){
|
||||
var form;
|
||||
if(iVal.sel && (form = $.prop(elem, 'form')) && $.find.matchesSelector(form, iVal.sel)){
|
||||
this.get(elem);
|
||||
}
|
||||
},
|
||||
@ -794,7 +795,7 @@ webshims.register('form-validation', function($, webshims, window, document, und
|
||||
switchValidityClass({type: 'input', target: input});
|
||||
};
|
||||
$(input)
|
||||
.filter('input:not([type="checkbox"]):not([type="radio"])')
|
||||
.filter('input:not([type="checkbox"]):not([type="radio"]), textarea')
|
||||
.off('.recheckinvalid')
|
||||
.on('input.recheckinvalid', function(){
|
||||
clearTimeout(timer);
|
||||
@ -840,7 +841,7 @@ webshims.register('form-validation', function($, webshims, window, document, und
|
||||
this.hideError(elem, true).removeClass(successWrapperClass);
|
||||
},
|
||||
toggle: function(elem){
|
||||
if($(elem).is(':invalid')){
|
||||
if($.find.matchesSelector(elem, ':invalid')){
|
||||
this.showError(elem);
|
||||
} else {
|
||||
this.hideError(elem);
|
||||
@ -851,25 +852,21 @@ webshims.register('form-validation', function($, webshims, window, document, und
|
||||
$(document.body)
|
||||
.on({
|
||||
'changedvaliditystate': function(e){
|
||||
if(iVal.sel){
|
||||
var form = $(e.target).jProp('form');
|
||||
if(form.is(iVal.sel)){
|
||||
webshims.errorbox.toggle(e.target);
|
||||
}
|
||||
var form;
|
||||
if(iVal.sel && (form = $.prop(e.target, 'form')) && $.find.matchesSelector(form, iVal.sel)){
|
||||
webshims.errorbox.toggle(e.target);
|
||||
}
|
||||
},
|
||||
'resetvalidityui.webshims': function(e){
|
||||
if (iVal.sel) {
|
||||
var form = $(e.target).jProp('form');
|
||||
if (form.is(iVal.sel)) {
|
||||
webshims.errorbox.reset(e.target);
|
||||
}
|
||||
var form;
|
||||
if(iVal.sel && (form = $.prop(e.target, 'form')) && $.find.matchesSelector(form, iVal.sel)){
|
||||
webshims.errorbox.reset(e.target);
|
||||
}
|
||||
},
|
||||
firstinvalid: function(e){
|
||||
var form;
|
||||
if(iVal.sel && iVal.handleBubble){
|
||||
var form = $(e.target).jProp('form');
|
||||
if(form.is(iVal.sel)){
|
||||
if(iVal.sel && (form = $.prop(e.target, 'form')) && $.find.matchesSelector(form, iVal.sel)){
|
||||
e.preventDefault();
|
||||
if(iVal.handleBubble != 'none'){
|
||||
webshims.validityAlert.showFor( e.target, false, false, iVal.handleBubble == 'hide' );
|
||||
@ -878,7 +875,7 @@ webshims.register('form-validation', function($, webshims, window, document, und
|
||||
}
|
||||
},
|
||||
submit: function(e){
|
||||
if(iVal.sel && iVal.submitCheck && $(e.target).is(iVal.sel) && $.prop(e.target, 'noValidate') && !$(e.target).checkValidity()){
|
||||
if(iVal.sel && iVal.submitCheck && $.find.matchesSelector(e.target, iVal.sel) && $.prop(e.target, 'noValidate') && !$(e.target).checkValidity()){
|
||||
e.stopImmediatePropagation();
|
||||
return false;
|
||||
}
|
||||
|
@ -1,6 +1,11 @@
|
||||
webshims.register('form-validators', function($, webshims, window, document, undefined, options){
|
||||
"use strict";
|
||||
var iValClasses = '.'+ options.iVal.errorClass +', .'+options.iVal.successClass;
|
||||
|
||||
var iValClasses;
|
||||
webshims.ready('form-validation', function(){
|
||||
iValClasses = '.'+ options.iVal.errorClass +', .'+options.iVal.successClass;
|
||||
});
|
||||
|
||||
(function(){
|
||||
if(webshims.refreshCustomValidityRules){
|
||||
webshims.error("form-validators already included. please remove custom-validity.js");
|
||||
@ -30,7 +35,7 @@ var iValClasses = '.'+ options.iVal.errorClass +', .'+options.iVal.successClass;
|
||||
elem = elements[id].elem;
|
||||
if(elem != noTest && elements[id].val != (val = elem.value)){
|
||||
elements[id].val = val;
|
||||
if($(elem).hasClass(iValClasses)){
|
||||
if(iValClasses && $.find.matchesSelector(elem, iValClasses)){
|
||||
$(elem).trigger('updatevalidation.webshims');
|
||||
} else {
|
||||
testValidityRules(elem);
|
||||
@ -337,7 +342,7 @@ var iValClasses = '.'+ options.iVal.errorClass +', .'+options.iVal.successClass;
|
||||
val = !val;
|
||||
}
|
||||
$.prop( elem, data.prop, val);
|
||||
if(e){
|
||||
if(iValClasses && e){
|
||||
$(elem).getShadowElement().filter(iValClasses).trigger('updatevalidation.webshims');
|
||||
}
|
||||
};
|
||||
@ -377,11 +382,13 @@ var iValClasses = '.'+ options.iVal.errorClass +', .'+options.iVal.successClass;
|
||||
} else {
|
||||
$(data.masterElement).on('change', function(){
|
||||
webshims.refreshCustomValidityRules(elem);
|
||||
$(elem)
|
||||
.getShadowElement()
|
||||
.filter(iValClasses)
|
||||
.trigger('updatevalidation.webshims')
|
||||
;
|
||||
if(iValClasses){
|
||||
$(elem)
|
||||
.getShadowElement()
|
||||
.filter(iValClasses)
|
||||
.trigger('updatevalidation.webshims')
|
||||
;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -416,7 +423,7 @@ var iValClasses = '.'+ options.iVal.errorClass +', .'+options.iVal.successClass;
|
||||
}
|
||||
|
||||
data.ajaxvalidate.depends.on('change', function(){
|
||||
if($(this).is(':valid')){
|
||||
if($.find.matchesSelector(this, ':valid')){
|
||||
webshims.refreshCustomValidityRules(elem);
|
||||
}
|
||||
});
|
||||
@ -479,7 +486,7 @@ var iValClasses = '.'+ options.iVal.errorClass +', .'+options.iVal.successClass;
|
||||
data = {};
|
||||
data[$.prop(elem, 'name') || $.prop(elem, 'id')] = $(elem).val();
|
||||
opts.depends.each(function(){
|
||||
if($(this).is(':invalid')){
|
||||
if($.find.matchesSelector(this, ':invalid')){
|
||||
data = false;
|
||||
return false;
|
||||
}
|
||||
|
@ -1495,7 +1495,7 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
|
||||
data._commonDateInit = true;
|
||||
var o = data.options;
|
||||
var actionfn = function(e){
|
||||
if(!$(this).is('.othermonth') || $(this).css('cursor') == 'pointer'){
|
||||
if(!$(this).hasClass('othermonth') || $(this).css('cursor') == 'pointer'){
|
||||
popover.actionFn({
|
||||
'data-action': $.attr(this, 'data-action'),
|
||||
value: $(this).val() || $.attr(this, 'value')
|
||||
@ -1550,13 +1550,13 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
|
||||
|
||||
$('button', popover.buttonRow).each(function(){
|
||||
var text;
|
||||
if($(this).is('.ws-empty')){
|
||||
if($(this).hasClass('ws-empty')){
|
||||
text = curCfg.date.clear;
|
||||
if(!text){
|
||||
text = formcfg[''].date.clear || 'clear';
|
||||
webshims.warn("could not get clear text from form cfg");
|
||||
}
|
||||
} else if($(this).is('.ws-current')){
|
||||
} else if($(this).hasClass('ws-current')){
|
||||
text = (curCfg[data.type] || {}).currentText;
|
||||
if(!text){
|
||||
text = (formcfg[''][[data.type]] || {}).currentText || (curCfg.date || {}).currentText || 'current';
|
||||
|
@ -276,30 +276,6 @@ webshims.register('jmebase', function($, webshims, window, doc, undefined){
|
||||
jmeData.media = media;
|
||||
jmeData.player = base;
|
||||
media
|
||||
.on('ended emptied play', (function(){
|
||||
var timer;
|
||||
var releaseEmptied = function(){
|
||||
stopEmptiedEvent = false;
|
||||
};
|
||||
var ended = function(){
|
||||
removeCanPlay();
|
||||
media.jmeFn('pause');
|
||||
if(!options.noReload && media.prop('ended') && media.prop('paused') && !media.prop('autoplay') && !media.prop('loop') && !media.hasClass('no-reload')){
|
||||
stopEmptiedEvent = true;
|
||||
media.jmeFn('load');
|
||||
base.attr('data-state', 'ended');
|
||||
setTimeout(releaseEmptied);
|
||||
|
||||
}
|
||||
};
|
||||
return function(e){
|
||||
|
||||
clearTimeout(timer);
|
||||
if(e.type == 'ended' && !options.noReload && !media.prop('autoplay') && !media.prop('loop') && !media.hasClass('no-reload')){
|
||||
timer = setTimeout(ended);
|
||||
}
|
||||
};
|
||||
})())
|
||||
.on('emptied waiting canplay canplaythrough playing ended pause mediaerror', mediaUpdateFn)
|
||||
.on('volumechange updateJMEState', function(){
|
||||
var volume = $.prop(this, 'volume');
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* thx to http://icomoon.io */
|
||||
.mediaplayer[data-state="waiting"] > .jme-media-overlay, .mediaplayer .fullscreen, .mediaplayer .fullscreen.state-exitfullscreen, .mediaplayer .mediaconfigmenu, .mediaplayer[data-state="idle"] > .jme-media-overlay, .mediaplayer button.play-pause, .mediaplayer button.play-pause.state-playing, .mediaplayer .mute-unmute, .mediaplayer[data-volume="medium"] .mute-unmute, .mediaplayer[data-volume="low"] .mute-unmute, .mediaplayer[data-volume="no"] .mute-unmute, .mediaplayer .state-unmute.mute-unmute, .mediaplayer .captions, .mediaplayer .subtitle-menu button[aria-checked="true"], .mediaplayer .subtitle-menu button, .mediaplayer .playlist-next, .mediaplayer .playlist-prev, .mediaplayer .chapters, .mediaplayer[data-state="ended"] > .jme-media-overlay {
|
||||
.mediaplayer[data-state="waiting"] > .jme-media-overlay, .mediaplayer .fullscreen, .mediaplayer .fullscreen.state-exitfullscreen, .mediaplayer .mediaconfigmenu, .mediaplayer.initial-state > .jme-media-overlay, .mediaplayer button.play-pause, .mediaplayer button.play-pause.state-playing, .mediaplayer .mute-unmute, .mediaplayer[data-volume="medium"] .mute-unmute, .mediaplayer[data-volume="low"] .mute-unmute, .mediaplayer[data-volume="no"] .mute-unmute, .mediaplayer .state-unmute.mute-unmute, .mediaplayer .captions, .mediaplayer .subtitle-menu button[aria-checked="true"], .mediaplayer .subtitle-menu button, .mediaplayer .playlist-next, .mediaplayer .playlist-prev, .mediaplayer .chapters, .mediaplayer.ended-state > .jme-media-overlay {
|
||||
font-family: 'jme';
|
||||
speak: none;
|
||||
font-style: normal;
|
||||
@ -29,7 +29,7 @@
|
||||
content: "\e606";
|
||||
}
|
||||
|
||||
.mediaplayer[data-state="idle"] > .jme-media-overlay:before {
|
||||
.mediaplayer.initial-state > .jme-media-overlay:before {
|
||||
content: "\e608";
|
||||
}
|
||||
|
||||
@ -85,7 +85,7 @@
|
||||
content: "\e615";
|
||||
}
|
||||
|
||||
.mediaplayer[data-state="ended"] > .jme-media-overlay:before {
|
||||
.mediaplayer.ended-state > .jme-media-overlay:before {
|
||||
content: "\e601";
|
||||
}
|
||||
|
||||
@ -99,6 +99,15 @@
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
@-webkit-keyframes jmespin {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
@keyframes jmespin {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
@ -264,17 +273,17 @@
|
||||
.mediaplayer[data-state="idle"] {
|
||||
cursor: pointer;
|
||||
}
|
||||
.mediaplayer[data-state="idle"] > .jme-media-overlay {
|
||||
.mediaplayer.initial-state > .jme-media-overlay {
|
||||
background-position: 1px 1px;
|
||||
}
|
||||
.mediaplayer[data-state="idle"].has-ytposter.no-backgroundsize > .jme-media-overlay:before {
|
||||
.mediaplayer.initial-state.has-ytposter.no-backgroundsize > .jme-media-overlay:before {
|
||||
content: "";
|
||||
background-position: 2px 2px;
|
||||
}
|
||||
.mediaplayer[data-state="ended"] {
|
||||
.mediaplayer.ended-state {
|
||||
cursor: pointer;
|
||||
}
|
||||
.mediaplayer[data-state="ended"] > .jme-media-overlay {
|
||||
.mediaplayer.ended-state > .jme-media-overlay {
|
||||
background-position: 3px 3px;
|
||||
}
|
||||
.mediaplayer[data-state="waiting"] {
|
||||
@ -284,6 +293,10 @@
|
||||
background-position: 4px 4px;
|
||||
}
|
||||
.mediaplayer[data-state="waiting"] > .jme-media-overlay:before {
|
||||
-webkit-animation-name: jmespin;
|
||||
-webkit-animation-iteration-count: infinite;
|
||||
-webkit-animation-duration: 1100ms;
|
||||
-webkit-animation-timing-function: linear;
|
||||
animation-name: jmespin;
|
||||
animation-iteration-count: infinite;
|
||||
animation-duration: 1100ms;
|
||||
@ -308,9 +321,10 @@
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: #000 no-repeat center / contain;
|
||||
background: #000 no-repeat center;
|
||||
background-size: contain;
|
||||
}
|
||||
.mediaplayer.initial-state .ws-poster {
|
||||
.mediaplayer.initial-state .ws-poster, .mediaplayer.ended-state .ws-poster {
|
||||
display: block;
|
||||
}
|
||||
.mediaplayer.no-poster .ws-poster, .mediaplayer.no-backgroundsize div.ws-poster {
|
||||
|
@ -30,6 +30,15 @@ $browser-context: 16; // Default
|
||||
@return #{$pixels/$context}em
|
||||
}
|
||||
|
||||
@-webkit-keyframes jmespin {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes jmespin {
|
||||
0% {
|
||||
@ -186,7 +195,9 @@ $browser-context: 16; // Default
|
||||
|
||||
&[data-state="idle"] {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
&.initial-state {
|
||||
> .jme-media-overlay {
|
||||
@extend %icon-play-circle;
|
||||
background-position: 1px 1px;
|
||||
@ -198,7 +209,7 @@ $browser-context: 16; // Default
|
||||
}
|
||||
}
|
||||
|
||||
&[data-state="ended"] {
|
||||
&.ended-state {
|
||||
cursor: pointer;
|
||||
> .jme-media-overlay {
|
||||
@extend %icon-loop;
|
||||
@ -213,6 +224,11 @@ $browser-context: 16; // Default
|
||||
background-position: 4px 4px;
|
||||
|
||||
&:before {
|
||||
-webkit-animation-name: jmespin;
|
||||
-webkit-animation-iteration-count: infinite;
|
||||
-webkit-animation-duration: 1100ms;
|
||||
-webkit-animation-timing-function: linear;
|
||||
|
||||
animation-name: jmespin;
|
||||
animation-iteration-count: infinite;
|
||||
animation-duration: 1100ms;
|
||||
@ -243,10 +259,12 @@ $browser-context: 16; // Default
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: #000 no-repeat center / contain;
|
||||
background: #000 no-repeat center;
|
||||
background-size: contain;
|
||||
}
|
||||
|
||||
&.initial-state .ws-poster {
|
||||
&.initial-state .ws-poster,
|
||||
&.ended-state .ws-poster {
|
||||
display: block;
|
||||
}
|
||||
|
||||
|
@ -353,6 +353,7 @@ webshims.register('mediacontrols-lazy', function($, webshims, window, doc, undef
|
||||
delete base._seekpause;
|
||||
}
|
||||
wasPaused = null;
|
||||
media.triggerHandler('updateprogress');
|
||||
}
|
||||
});
|
||||
|
||||
@ -1316,10 +1317,11 @@ webshims.register('mediacontrols-lazy', function($, webshims, window, doc, undef
|
||||
|
||||
$.jme.registerPlugin('buffer-progress', {
|
||||
_create: function(control, media, base, options){
|
||||
var progressTimer;
|
||||
var indicator = $('<div class="buffer-progress-indicator" />').appendTo(control);
|
||||
var drawBufferProgress = function(){
|
||||
var progress = media.jmeProp('progress');
|
||||
|
||||
clearTimeout(progressTimer);
|
||||
|
||||
if(options.progress !== progress){
|
||||
options.progress = progress;
|
||||
@ -1332,7 +1334,14 @@ webshims.register('mediacontrols-lazy', function($, webshims, window, doc, undef
|
||||
indicator.css('width', 0);
|
||||
options.progress = 0;
|
||||
},
|
||||
playing: drawBufferProgress
|
||||
playing: drawBufferProgress,
|
||||
'seeked seeking updateprogress': function(e){
|
||||
clearTimeout(progressTimer);
|
||||
if(e.type != 'seeking'){
|
||||
progressTimer = setTimeout(drawBufferProgress, 100);
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
drawBufferProgress();
|
||||
}
|
||||
@ -1418,8 +1427,8 @@ webshims.register('mediacontrols-lazy', function($, webshims, window, doc, undef
|
||||
var buttons = this.buttons.not(':disabled');
|
||||
var activeButton = buttons.filter(':focus');
|
||||
|
||||
activeButton = buttons[buttons.index(activeButton) + dir] || buttons.filter(dir > 0 ? ':first' : ':last');
|
||||
activeButton.trigger('focus');
|
||||
activeButton = (activeButton[0] && buttons[buttons.index(activeButton) + dir]) || buttons[dir > 0 ? 'first' : 'last']();
|
||||
$(activeButton).trigger('focus');
|
||||
e.preventDefault();
|
||||
}
|
||||
},
|
||||
|
@ -151,17 +151,33 @@ webshims.register('mediacontrols', function($, webshims, window){
|
||||
var regYt = /youtube\.com\/[watch\?|v\/]+/i;
|
||||
|
||||
var isInitial = data.media.prop('paused');
|
||||
var isEnded = data.media.prop('ended');
|
||||
if(isInitial){
|
||||
data.player.addClass('initial-state');
|
||||
}
|
||||
if(isEnded){
|
||||
data.player.addClass('ended-state');
|
||||
}
|
||||
if(!('backgroundSize' in $poster[0].style)){
|
||||
data.player.addClass('no-backgroundsize');
|
||||
}
|
||||
data.media.on('playing waiting seeked seeking', function(){
|
||||
data.media.on('play playing waiting seeked seeking', function(e){
|
||||
|
||||
if(isInitial){
|
||||
isInitial = false;
|
||||
data.player.removeClass('initial-state');
|
||||
}
|
||||
|
||||
if(isEnded){
|
||||
isEnded = false;
|
||||
data.player.removeClass('ended-state');
|
||||
}
|
||||
});
|
||||
data.media.on('ended', function(){
|
||||
if(!isEnded && !data.media.prop('loop') && data.media.prop('ended')){
|
||||
isEnded = true;
|
||||
data.player.addClass('ended-state');
|
||||
}
|
||||
});
|
||||
return function(){
|
||||
var poster = data.media.attr('poster');
|
||||
@ -193,6 +209,11 @@ webshims.register('mediacontrols', function($, webshims, window){
|
||||
isInitial = true;
|
||||
}
|
||||
|
||||
if(isEnded){
|
||||
isEnded = false;
|
||||
data.player.removeClass('ended-state');
|
||||
}
|
||||
|
||||
if(lastYoutubeState !== hasYt){
|
||||
lastYoutubeState = hasYt;
|
||||
data.player[hasYt ? 'addClass' : 'removeClass']('has-ytposter');
|
||||
|
@ -531,6 +531,10 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
|
||||
webshims.ready(swfType, initMediaElements);
|
||||
}
|
||||
webshims.ready('track', loadTrackUi);
|
||||
|
||||
if(document.readyState == 'complete'){
|
||||
webshims.isReady('WINDOWLOAD', true);
|
||||
}
|
||||
});
|
||||
|
||||
})(webshims);
|
||||
|
@ -127,6 +127,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
||||
var onEvent = {
|
||||
onPlayPause: function(jaris, data, override){
|
||||
var playing, type;
|
||||
var idled = data.paused || data.ended;
|
||||
if(override == null){
|
||||
try {
|
||||
playing = data.api.api_get("isPlaying");
|
||||
@ -134,7 +135,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
||||
} else {
|
||||
playing = override;
|
||||
}
|
||||
if(playing == data.paused){
|
||||
if(playing == idled || playing == null){
|
||||
|
||||
data.paused = !playing;
|
||||
type = data.paused ? 'pause' : 'play';
|
||||
@ -1211,11 +1212,11 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
||||
var media, error, parent;
|
||||
if(
|
||||
($(e.target).is('audio, video') || ((parent = e.target.parentNode) && $('source', parent).last()[0] == e.target)) &&
|
||||
(media = $(e.target).closest('audio, video')) && !media.is('.nonnative-api-active')
|
||||
(media = $(e.target).closest('audio, video')) && !media.hasClass('nonnative-api-active')
|
||||
){
|
||||
error = media.prop('error');
|
||||
setTimeout(function(){
|
||||
if(!media.is('.nonnative-api-active')){
|
||||
if(!media.hasClass('nonnative-api-active')){
|
||||
if(error && switchErrors[error.code]){
|
||||
options.preferFlash = true;
|
||||
document.removeEventListener('error', switchOptions, true);
|
||||
|
@ -10,23 +10,65 @@
|
||||
|
||||
webshim.isReady('picture', true);
|
||||
setTimeout(function(){
|
||||
webshim.ready('matchMedia', function(){
|
||||
if(window.picturefill){
|
||||
var sel = 'picture, img[srcset]';
|
||||
webshim.addReady(function(context){
|
||||
if(context.querySelector(sel)){
|
||||
window.picturefill();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
if(window.picturefill){
|
||||
var sel = 'picture, img[srcset]';
|
||||
webshim.addReady(function(context){
|
||||
if(context.querySelector(sel)){
|
||||
window.picturefill();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
})();
|
||||
|
||||
/*! Picturefill - v2.1.0-beta - 2014-06-03
|
||||
/*! Picturefill - v2.1.0-beta - 2014-07-15
|
||||
* http://scottjehl.github.io/picturefill
|
||||
* Copyright (c) 2014 https://github.com/scottjehl/picturefill/blob/master/Authors.txt; Licensed MIT */
|
||||
/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. Dual MIT/BSD license */
|
||||
|
||||
window.matchMedia || (window.matchMedia = function() {
|
||||
"use strict";
|
||||
|
||||
// For browsers that support matchMedium api such as IE 9 and webkit
|
||||
var styleMedia = (window.styleMedia || window.media);
|
||||
|
||||
// For those that don't support matchMedium
|
||||
if (!styleMedia) {
|
||||
var style = document.createElement('style'),
|
||||
script = document.getElementsByTagName('script')[0],
|
||||
info = null;
|
||||
|
||||
style.type = 'text/css';
|
||||
style.id = 'matchmediajs-test';
|
||||
|
||||
script.parentNode.insertBefore(style, script);
|
||||
|
||||
// 'style.currentStyle' is used by IE <= 8 and 'window.getComputedStyle' for all other browsers
|
||||
info = ('getComputedStyle' in window) && window.getComputedStyle(style, null) || style.currentStyle;
|
||||
|
||||
styleMedia = {
|
||||
matchMedium: function(media) {
|
||||
var text = '@media ' + media + '{ #matchmediajs-test { width: 1px; } }';
|
||||
|
||||
// 'style.styleSheet' is used by IE <= 8 and 'style.textContent' for all other browsers
|
||||
if (style.styleSheet) {
|
||||
style.styleSheet.cssText = text;
|
||||
} else {
|
||||
style.textContent = text;
|
||||
}
|
||||
|
||||
// Test if media query is true or false
|
||||
return info.width === '1px';
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
return function(media) {
|
||||
return {
|
||||
matches: styleMedia.matchMedium(media || 'all'),
|
||||
media: media || 'all'
|
||||
};
|
||||
};
|
||||
}());
|
||||
/*! Picturefill - Responsive Images that work today.
|
||||
* Author: Scott Jehl, Filament Group, 2012 ( new proposal implemented by Shawn Jansepar )
|
||||
* License: MIT/GPLv2
|
||||
@ -38,6 +80,7 @@
|
||||
|
||||
// If picture is supported, well, that's awesome. Let's get outta here...
|
||||
if ( w.HTMLPictureElement ) {
|
||||
w.picturefill = function() { };
|
||||
return;
|
||||
}
|
||||
|
||||
@ -51,7 +94,8 @@
|
||||
pf.ns = "picturefill";
|
||||
|
||||
// srcset support test
|
||||
pf.srcsetSupported = new w.Image().srcset !== undefined;
|
||||
pf.srcsetSupported = "srcset" in doc.createElement( "img" );
|
||||
pf.sizesSupported = w.HTMLImageElement.sizes;
|
||||
|
||||
// just a string trim workaround
|
||||
pf.trim = function( str ) {
|
||||
@ -82,8 +126,8 @@
|
||||
* http://dev.w3.org/csswg/css-values-3/#length-value
|
||||
*/
|
||||
pf.getWidthFromLength = function( length ) {
|
||||
// If no length was specified, or it is 0, default to `100vw` (per the spec).
|
||||
length = length && parseFloat( length ) > 0 ? length : "100vw";
|
||||
// If no length was specified, or it is 0 or negative, default to `100vw` (per the spec).
|
||||
length = length && ( parseFloat( length ) > 0 || length.indexOf( "calc(" ) > -1 ) ? length : "100vw";
|
||||
|
||||
/**
|
||||
* If length is specified in `vw` units, use `%` instead since the div we’re measuring
|
||||
@ -101,7 +145,12 @@
|
||||
|
||||
// Positioning styles help prevent padding/margin/width on `html` from throwing calculations off.
|
||||
pf.lengthEl.style.cssText = "position: absolute; left: 0; width: " + length + ";";
|
||||
// Using offsetWidth to get width from CSS
|
||||
|
||||
if ( pf.lengthEl.offsetWidth <= 0 ) {
|
||||
// Something has gone wrong. `calc()` is in use and unsupported, most likely. Default to `100vw` (`100%`, for broader support.):
|
||||
pf.lengthEl.style.cssText = "width: 100%;";
|
||||
}
|
||||
|
||||
return pf.lengthEl.offsetWidth;
|
||||
};
|
||||
|
||||
@ -263,38 +312,32 @@
|
||||
return candidates;
|
||||
};
|
||||
|
||||
pf.parseDescriptor = function( descriptor, sizes ) {
|
||||
pf.parseDescriptor = function( descriptor, sizesattr ) {
|
||||
// 11. Descriptor parser: Let candidates be an initially empty source set. The order of entries in the list
|
||||
// is the order in which entries are added to the list.
|
||||
var sizeDescriptor = descriptor && descriptor.replace(/(^\s+|\s+$)/g, ""),
|
||||
widthInCssPixels = sizes ? pf.findWidthFromSourceSize( sizes ) : "100%",
|
||||
var sizes = sizesattr || "100vw",
|
||||
sizeDescriptor = descriptor && descriptor.replace(/(^\s+|\s+$)/g, ""),
|
||||
widthInCssPixels = pf.findWidthFromSourceSize( sizes ),
|
||||
resCandidate;
|
||||
|
||||
if ( sizeDescriptor ) {
|
||||
var splitDescriptor = sizeDescriptor.split(" ");
|
||||
|
||||
for (var i = splitDescriptor.length + 1; i >= 0; i--) {
|
||||
if ( splitDescriptor[ i ] !== undefined ) {
|
||||
var curr = splitDescriptor[ i ],
|
||||
lastchar = curr && curr.slice( curr.length - 1 );
|
||||
|
||||
var curr = splitDescriptor[ i ],
|
||||
lastchar = curr && curr.slice( curr.length - 1 );
|
||||
|
||||
if ( lastchar === "w" || lastchar === "x" ) {
|
||||
resCandidate = curr;
|
||||
}
|
||||
if ( sizes && resCandidate ) {
|
||||
// get the dpr by taking the length / width in css pixels
|
||||
resCandidate = parseFloat( ( parseInt( curr, 10 ) / widthInCssPixels ) );
|
||||
} else {
|
||||
// get the dpr by grabbing the value of Nx
|
||||
var res = curr && parseFloat( curr, 10 );
|
||||
|
||||
resCandidate = res && !isNaN( res ) && lastchar === "x" || lastchar === "w" ? res : 1;
|
||||
if ( ( lastchar === "h" || lastchar === "w" ) && !pf.sizesSupported ) {
|
||||
resCandidate = parseFloat( ( parseInt( curr, 10 ) / widthInCssPixels ) );
|
||||
} else if ( lastchar === "x" ) {
|
||||
var res = curr && parseFloat( curr, 10 );
|
||||
resCandidate = res && !isNaN( res ) ? res : 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
resCandidate = 1;
|
||||
}
|
||||
return resCandidate;
|
||||
return resCandidate || 1;
|
||||
};
|
||||
|
||||
/**
|
||||
@ -372,7 +415,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
if ( !pf.endsWith( picImg.src, bestCandidate.url ) ) {
|
||||
if ( bestCandidate && !pf.endsWith( picImg.src, bestCandidate.url ) ) {
|
||||
picImg.src = bestCandidate.url;
|
||||
// currentSrc attribute and property to match
|
||||
// http://picture.responsiveimages.org/#the-img-element
|
||||
@ -405,32 +448,26 @@
|
||||
};
|
||||
|
||||
/*
|
||||
* Find all picture elements and,
|
||||
* in browsers that don't natively support srcset, find all img elements
|
||||
* with srcset attrs that don't have picture parents
|
||||
* Find all `img` elements, and add them to the candidate list if they have
|
||||
* a `picture` parent, a `sizes` attribute in basic `srcset` supporting browsers,
|
||||
* a `srcset` attribute at all, and they haven’t been evaluated already.
|
||||
*/
|
||||
pf.getAllElements = function() {
|
||||
var pictures = doc.getElementsByTagName( "picture" ),
|
||||
elems = [],
|
||||
var elems = [],
|
||||
imgs = doc.getElementsByTagName( "img" );
|
||||
|
||||
for ( var h = 0, len = pictures.length + imgs.length; h < len; h++ ) {
|
||||
if ( h < pictures.length ) {
|
||||
elems[ h ] = pictures[ h ];
|
||||
} else {
|
||||
var currImg = imgs[ h - pictures.length ];
|
||||
for ( var h = 0, len = imgs.length; h < len; h++ ) {
|
||||
var currImg = imgs[ h ];
|
||||
|
||||
if ( currImg.parentNode.nodeName.toUpperCase() !== "PICTURE" &&
|
||||
( ( pf.srcsetSupported && currImg.getAttribute( "sizes" ) ) ||
|
||||
currImg.getAttribute( "srcset" ) !== null ) ) {
|
||||
elems.push( currImg );
|
||||
}
|
||||
if ( currImg.parentNode.nodeName.toUpperCase() === "PICTURE" ||
|
||||
( currImg.getAttribute( "srcset" ) !== null ) || currImg[ pf.ns ] && currImg[ pf.ns ].srcset !== null ) {
|
||||
elems.push( currImg );
|
||||
}
|
||||
}
|
||||
return elems;
|
||||
};
|
||||
|
||||
pf.getMatch = function( picture ) {
|
||||
pf.getMatch = function( img, picture ) {
|
||||
var sources = picture.childNodes,
|
||||
match;
|
||||
|
||||
@ -443,9 +480,9 @@
|
||||
continue;
|
||||
}
|
||||
|
||||
// Hitting an `img` element stops the search for `sources`.
|
||||
// Hitting the `img` element that started everything stops the search for `sources`.
|
||||
// If no previous `source` matches, the `img` itself is evaluated later.
|
||||
if ( source.nodeName.toUpperCase() === "IMG" ) {
|
||||
if ( source === img ) {
|
||||
return match;
|
||||
}
|
||||
|
||||
@ -477,24 +514,22 @@
|
||||
return match;
|
||||
};
|
||||
|
||||
function picturefill( options ) {
|
||||
function picturefill( opt ) {
|
||||
var elements,
|
||||
element,
|
||||
elemType,
|
||||
parent,
|
||||
firstMatch,
|
||||
candidates,
|
||||
picImg;
|
||||
|
||||
options = options || {};
|
||||
options = opt || {};
|
||||
elements = options.elements || pf.getAllElements();
|
||||
|
||||
// Loop through all elements
|
||||
for ( var i = 0, plen = elements.length; i < plen; i++ ) {
|
||||
element = elements[ i ];
|
||||
elemType = element.nodeName.toUpperCase();
|
||||
parent = element.parentNode;
|
||||
firstMatch = undefined;
|
||||
candidates = undefined;
|
||||
picImg = undefined;
|
||||
|
||||
// expando for caching data on the img
|
||||
if ( !element[ pf.ns ] ) {
|
||||
@ -508,16 +543,16 @@
|
||||
continue;
|
||||
}
|
||||
|
||||
// if element is a picture element
|
||||
if ( elemType === "PICTURE" ) {
|
||||
// if `img` is in a `picture` element
|
||||
if ( parent.nodeName.toUpperCase() === "PICTURE" ) {
|
||||
|
||||
// IE9 video workaround
|
||||
pf.removeVideoShim( element );
|
||||
pf.removeVideoShim( parent );
|
||||
|
||||
// return the first match which might undefined
|
||||
// returns false if there is a pending source
|
||||
// TODO the return type here is brutal, cleanup
|
||||
firstMatch = pf.getMatch( element );
|
||||
firstMatch = pf.getMatch( element, parent );
|
||||
|
||||
// if any sources are pending in this picture due to async type test(s)
|
||||
// remove the evaluated attr and skip for now ( the pending test will
|
||||
@ -525,43 +560,32 @@
|
||||
if ( firstMatch === false ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Find any existing img element in the picture element
|
||||
picImg = element.getElementsByTagName( "img" )[ 0 ];
|
||||
} else {
|
||||
// if it's an img element
|
||||
firstMatch = undefined;
|
||||
picImg = element;
|
||||
}
|
||||
|
||||
if ( picImg ) {
|
||||
|
||||
// expando for caching data on the img
|
||||
if ( !picImg[ pf.ns ] ) {
|
||||
picImg[ pf.ns ] = {};
|
||||
}
|
||||
|
||||
// Cache and remove `srcset` if present and we’re going to be doing `sizes`/`picture` polyfilling to it.
|
||||
if ( picImg.srcset && ( elemType === "PICTURE" || picImg.getAttribute( "sizes" ) ) ) {
|
||||
pf.dodgeSrcset( picImg );
|
||||
}
|
||||
|
||||
if ( firstMatch ) {
|
||||
candidates = pf.processSourceSet( firstMatch );
|
||||
pf.applyBestCandidate( candidates, picImg );
|
||||
} else {
|
||||
// No sources matched, so we’re down to processing the inner `img` as a source.
|
||||
candidates = pf.processSourceSet( picImg );
|
||||
|
||||
if ( picImg.srcset === undefined || picImg[ pf.ns ].srcset ) {
|
||||
// Either `srcset` is completely unsupported, or we need to polyfill `sizes` functionality.
|
||||
pf.applyBestCandidate( candidates, picImg );
|
||||
} // Else, resolution-only `srcset` is supported natively.
|
||||
}
|
||||
|
||||
// set evaluated to true to avoid unnecessary reparsing
|
||||
element[ pf.ns ].evaluated = true;
|
||||
// Cache and remove `srcset` if present and we’re going to be doing `picture`/`srcset`/`sizes` polyfilling to it.
|
||||
if ( parent.nodeName.toUpperCase() === "PICTURE" ||
|
||||
( element.srcset && !pf.srcsetSupported ) ||
|
||||
( !pf.sizesSupported && ( element.srcset && element.srcset.indexOf("w") > -1 ) ) ) {
|
||||
pf.dodgeSrcset( element );
|
||||
}
|
||||
|
||||
if ( firstMatch ) {
|
||||
candidates = pf.processSourceSet( firstMatch );
|
||||
pf.applyBestCandidate( candidates, element );
|
||||
} else {
|
||||
// No sources matched, so we’re down to processing the inner `img` as a source.
|
||||
candidates = pf.processSourceSet( element );
|
||||
|
||||
if ( element.srcset === undefined || element[ pf.ns ].srcset ) {
|
||||
// Either `srcset` is completely unsupported, or we need to polyfill `sizes` functionality.
|
||||
pf.applyBestCandidate( candidates, element );
|
||||
} // Else, resolution-only `srcset` is supported natively.
|
||||
}
|
||||
|
||||
// set evaluated to true to avoid unnecessary reparsing
|
||||
element[ pf.ns ].evaluated = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -596,7 +620,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
webshim.ready('matchMedia', runPicturefill);
|
||||
runPicturefill();
|
||||
|
||||
/* expose methods for testing */
|
||||
picturefill._ = pf;
|
||||
@ -615,3 +639,4 @@
|
||||
|
||||
} )( this, this.document );
|
||||
|
||||
|
||||
|
934
public/webshims/shims/plugins/jquery.ui.position.js
vendored
934
public/webshims/shims/plugins/jquery.ui.position.js
vendored
@ -1,497 +1,515 @@
|
||||
/*!
|
||||
* jQuery UI Position 1.10.3
|
||||
* jQuery UI Position 1.11.0
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright 2013 jQuery Foundation and other contributors
|
||||
* Copyright 2014 jQuery Foundation and other contributors
|
||||
* Released under the MIT license.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://api.jqueryui.com/position/
|
||||
*/
|
||||
(function( $, undefined ) {
|
||||
(function( factory ) {
|
||||
if ( typeof define === "function" && define.amd ) {
|
||||
|
||||
$.ui = $.ui || {};
|
||||
// AMD. Register as an anonymous module.
|
||||
define( [ "jquery" ], factory );
|
||||
} else {
|
||||
|
||||
var cachedScrollbarWidth,
|
||||
max = Math.max,
|
||||
abs = Math.abs,
|
||||
round = Math.round,
|
||||
rhorizontal = /left|center|right/,
|
||||
rvertical = /top|center|bottom/,
|
||||
roffset = /[\+\-]\d+(\.[\d]+)?%?/,
|
||||
rposition = /^\w+/,
|
||||
rpercent = /%$/,
|
||||
_position = $.fn.position;
|
||||
|
||||
function getOffsets( offsets, width, height ) {
|
||||
return [
|
||||
parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
|
||||
parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
|
||||
];
|
||||
}
|
||||
|
||||
function parseCss( element, property ) {
|
||||
return parseInt( $.css( element, property ), 10 ) || 0;
|
||||
}
|
||||
|
||||
function getDimensions( elem ) {
|
||||
var raw = elem[0];
|
||||
if ( raw.nodeType === 9 ) {
|
||||
return {
|
||||
width: elem.width(),
|
||||
height: elem.height(),
|
||||
offset: { top: 0, left: 0 }
|
||||
};
|
||||
// Browser globals
|
||||
factory( window.webshims && window.webshims.$ || jQuery );
|
||||
}
|
||||
if ( $.isWindow( raw ) ) {
|
||||
return {
|
||||
width: elem.width(),
|
||||
height: elem.height(),
|
||||
offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
|
||||
};
|
||||
}
|
||||
if ( raw.preventDefault ) {
|
||||
return {
|
||||
width: 0,
|
||||
height: 0,
|
||||
offset: { top: raw.pageY, left: raw.pageX }
|
||||
};
|
||||
}
|
||||
return {
|
||||
width: elem.outerWidth(),
|
||||
height: elem.outerHeight(),
|
||||
offset: elem.offset()
|
||||
};
|
||||
}
|
||||
}(function( $ ) {
|
||||
(function() {
|
||||
|
||||
$.position = {
|
||||
scrollbarWidth: function() {
|
||||
if ( cachedScrollbarWidth !== undefined ) {
|
||||
return cachedScrollbarWidth;
|
||||
}
|
||||
var w1, w2,
|
||||
div = $( "<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
|
||||
innerDiv = div.children()[0];
|
||||
$.ui = $.ui || {};
|
||||
|
||||
$( "body" ).append( div );
|
||||
w1 = innerDiv.offsetWidth;
|
||||
div.css( "overflow", "scroll" );
|
||||
var cachedScrollbarWidth, supportsOffsetFractions,
|
||||
max = Math.max,
|
||||
abs = Math.abs,
|
||||
round = Math.round,
|
||||
rhorizontal = /left|center|right/,
|
||||
rvertical = /top|center|bottom/,
|
||||
roffset = /[\+\-]\d+(\.[\d]+)?%?/,
|
||||
rposition = /^\w+/,
|
||||
rpercent = /%$/,
|
||||
_position = $.fn.position;
|
||||
|
||||
w2 = innerDiv.offsetWidth;
|
||||
|
||||
if ( w1 === w2 ) {
|
||||
w2 = div[0].clientWidth;
|
||||
function getOffsets( offsets, width, height ) {
|
||||
return [
|
||||
parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
|
||||
parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
|
||||
];
|
||||
}
|
||||
|
||||
div.remove();
|
||||
|
||||
return (cachedScrollbarWidth = w1 - w2);
|
||||
},
|
||||
getScrollInfo: function( within ) {
|
||||
var overflowX = within.isWindow ? "" : within.element.css( "overflow-x" ),
|
||||
overflowY = within.isWindow ? "" : within.element.css( "overflow-y" ),
|
||||
hasOverflowX = overflowX === "scroll" ||
|
||||
( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
|
||||
hasOverflowY = overflowY === "scroll" ||
|
||||
( overflowY === "auto" && within.height < within.element[0].scrollHeight );
|
||||
return {
|
||||
width: hasOverflowY ? $.position.scrollbarWidth() : 0,
|
||||
height: hasOverflowX ? $.position.scrollbarWidth() : 0
|
||||
};
|
||||
},
|
||||
getWithinInfo: function( element ) {
|
||||
var withinElement = $( element || window ),
|
||||
isWindow = $.isWindow( withinElement[0] );
|
||||
return {
|
||||
element: withinElement,
|
||||
isWindow: isWindow,
|
||||
offset: withinElement.offset() || { left: 0, top: 0 },
|
||||
scrollLeft: withinElement.scrollLeft(),
|
||||
scrollTop: withinElement.scrollTop(),
|
||||
width: isWindow ? withinElement.width() : withinElement.outerWidth(),
|
||||
height: isWindow ? withinElement.height() : withinElement.outerHeight()
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
$.fn.position = function( options ) {
|
||||
if ( !options || !options.of ) {
|
||||
return _position.apply( this, arguments );
|
||||
}
|
||||
|
||||
// make a copy, we don't want to modify arguments
|
||||
options = $.extend( {}, options );
|
||||
|
||||
var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
|
||||
target = $( options.of ),
|
||||
within = $.position.getWithinInfo( options.within ),
|
||||
scrollInfo = $.position.getScrollInfo( within ),
|
||||
collision = ( options.collision || "flip" ).split( " " ),
|
||||
offsets = {};
|
||||
|
||||
dimensions = getDimensions( target );
|
||||
if ( target[0].preventDefault ) {
|
||||
// force left top to allow flipping
|
||||
options.at = "left top";
|
||||
}
|
||||
targetWidth = dimensions.width;
|
||||
targetHeight = dimensions.height;
|
||||
targetOffset = dimensions.offset;
|
||||
// clone to reuse original targetOffset later
|
||||
basePosition = $.extend( {}, targetOffset );
|
||||
|
||||
// force my and at to have valid horizontal and vertical positions
|
||||
// if a value is missing or invalid, it will be converted to center
|
||||
$.each( [ "my", "at" ], function() {
|
||||
var pos = ( options[ this ] || "" ).split( " " ),
|
||||
horizontalOffset,
|
||||
verticalOffset;
|
||||
|
||||
if ( pos.length === 1) {
|
||||
pos = rhorizontal.test( pos[ 0 ] ) ?
|
||||
pos.concat( [ "center" ] ) :
|
||||
rvertical.test( pos[ 0 ] ) ?
|
||||
[ "center" ].concat( pos ) :
|
||||
[ "center", "center" ];
|
||||
}
|
||||
pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
|
||||
pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
|
||||
|
||||
// calculate offsets
|
||||
horizontalOffset = roffset.exec( pos[ 0 ] );
|
||||
verticalOffset = roffset.exec( pos[ 1 ] );
|
||||
offsets[ this ] = [
|
||||
horizontalOffset ? horizontalOffset[ 0 ] : 0,
|
||||
verticalOffset ? verticalOffset[ 0 ] : 0
|
||||
];
|
||||
|
||||
// reduce to just the positions without the offsets
|
||||
options[ this ] = [
|
||||
rposition.exec( pos[ 0 ] )[ 0 ],
|
||||
rposition.exec( pos[ 1 ] )[ 0 ]
|
||||
];
|
||||
});
|
||||
|
||||
// normalize collision option
|
||||
if ( collision.length === 1 ) {
|
||||
collision[ 1 ] = collision[ 0 ];
|
||||
}
|
||||
|
||||
if ( options.at[ 0 ] === "right" ) {
|
||||
basePosition.left += targetWidth;
|
||||
} else if ( options.at[ 0 ] === "center" ) {
|
||||
basePosition.left += targetWidth / 2;
|
||||
}
|
||||
|
||||
if ( options.at[ 1 ] === "bottom" ) {
|
||||
basePosition.top += targetHeight;
|
||||
} else if ( options.at[ 1 ] === "center" ) {
|
||||
basePosition.top += targetHeight / 2;
|
||||
}
|
||||
|
||||
atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
|
||||
basePosition.left += atOffset[ 0 ];
|
||||
basePosition.top += atOffset[ 1 ];
|
||||
|
||||
return this.each(function() {
|
||||
var collisionPosition, using,
|
||||
elem = $( this ),
|
||||
elemWidth = elem.outerWidth(),
|
||||
elemHeight = elem.outerHeight(),
|
||||
marginLeft = parseCss( this, "marginLeft" ),
|
||||
marginTop = parseCss( this, "marginTop" ),
|
||||
collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width,
|
||||
collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height,
|
||||
position = $.extend( {}, basePosition ),
|
||||
myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
|
||||
|
||||
if ( options.my[ 0 ] === "right" ) {
|
||||
position.left -= elemWidth;
|
||||
} else if ( options.my[ 0 ] === "center" ) {
|
||||
position.left -= elemWidth / 2;
|
||||
function parseCss( element, property ) {
|
||||
return parseInt( $.css( element, property ), 10 ) || 0;
|
||||
}
|
||||
|
||||
if ( options.my[ 1 ] === "bottom" ) {
|
||||
position.top -= elemHeight;
|
||||
} else if ( options.my[ 1 ] === "center" ) {
|
||||
position.top -= elemHeight / 2;
|
||||
}
|
||||
|
||||
position.left += myOffset[ 0 ];
|
||||
position.top += myOffset[ 1 ];
|
||||
|
||||
// if the browser doesn't support fractions, then round for consistent results
|
||||
if ( !$.support.offsetFractions ) {
|
||||
position.left = round( position.left );
|
||||
position.top = round( position.top );
|
||||
}
|
||||
|
||||
collisionPosition = {
|
||||
marginLeft: marginLeft,
|
||||
marginTop: marginTop
|
||||
};
|
||||
|
||||
$.each( [ "left", "top" ], function( i, dir ) {
|
||||
if ( $.ui.position[ collision[ i ] ] ) {
|
||||
$.ui.position[ collision[ i ] ][ dir ]( position, {
|
||||
targetWidth: targetWidth,
|
||||
targetHeight: targetHeight,
|
||||
elemWidth: elemWidth,
|
||||
elemHeight: elemHeight,
|
||||
collisionPosition: collisionPosition,
|
||||
collisionWidth: collisionWidth,
|
||||
collisionHeight: collisionHeight,
|
||||
offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
|
||||
my: options.my,
|
||||
at: options.at,
|
||||
within: within,
|
||||
elem : elem
|
||||
});
|
||||
function getDimensions( elem ) {
|
||||
var raw = elem[0];
|
||||
if ( raw.nodeType === 9 ) {
|
||||
return {
|
||||
width: elem.width(),
|
||||
height: elem.height(),
|
||||
offset: { top: 0, left: 0 }
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
if ( options.using ) {
|
||||
// adds feedback as second argument to using callback, if present
|
||||
using = function( props ) {
|
||||
var left = targetOffset.left - position.left,
|
||||
right = left + targetWidth - elemWidth,
|
||||
top = targetOffset.top - position.top,
|
||||
bottom = top + targetHeight - elemHeight,
|
||||
feedback = {
|
||||
target: {
|
||||
element: target,
|
||||
left: targetOffset.left,
|
||||
top: targetOffset.top,
|
||||
width: targetWidth,
|
||||
height: targetHeight
|
||||
},
|
||||
element: {
|
||||
element: elem,
|
||||
left: position.left,
|
||||
top: position.top,
|
||||
width: elemWidth,
|
||||
height: elemHeight
|
||||
},
|
||||
horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
|
||||
vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
|
||||
};
|
||||
if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
|
||||
feedback.horizontal = "center";
|
||||
}
|
||||
if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
|
||||
feedback.vertical = "middle";
|
||||
}
|
||||
if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
|
||||
feedback.important = "horizontal";
|
||||
} else {
|
||||
feedback.important = "vertical";
|
||||
}
|
||||
options.using.call( this, props, feedback );
|
||||
if ( $.isWindow( raw ) ) {
|
||||
return {
|
||||
width: elem.width(),
|
||||
height: elem.height(),
|
||||
offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
|
||||
};
|
||||
}
|
||||
if ( raw.preventDefault ) {
|
||||
return {
|
||||
width: 0,
|
||||
height: 0,
|
||||
offset: { top: raw.pageY, left: raw.pageX }
|
||||
};
|
||||
}
|
||||
return {
|
||||
width: elem.outerWidth(),
|
||||
height: elem.outerHeight(),
|
||||
offset: elem.offset()
|
||||
};
|
||||
}
|
||||
|
||||
elem.offset( $.extend( position, { using: using } ) );
|
||||
});
|
||||
};
|
||||
$.position = {
|
||||
scrollbarWidth: function() {
|
||||
if ( cachedScrollbarWidth !== undefined ) {
|
||||
return cachedScrollbarWidth;
|
||||
}
|
||||
var w1, w2,
|
||||
div = $( "<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
|
||||
innerDiv = div.children()[0];
|
||||
|
||||
$.ui.position = {
|
||||
fit: {
|
||||
left: function( position, data ) {
|
||||
var within = data.within,
|
||||
withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
|
||||
outerWidth = within.width,
|
||||
collisionPosLeft = position.left - data.collisionPosition.marginLeft,
|
||||
overLeft = withinOffset - collisionPosLeft,
|
||||
overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
|
||||
newOverRight;
|
||||
$( "body" ).append( div );
|
||||
w1 = innerDiv.offsetWidth;
|
||||
div.css( "overflow", "scroll" );
|
||||
|
||||
// element is wider than within
|
||||
if ( data.collisionWidth > outerWidth ) {
|
||||
// element is initially over the left side of within
|
||||
if ( overLeft > 0 && overRight <= 0 ) {
|
||||
newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
|
||||
position.left += overLeft - newOverRight;
|
||||
// element is initially over right side of within
|
||||
} else if ( overRight > 0 && overLeft <= 0 ) {
|
||||
position.left = withinOffset;
|
||||
// element is initially over both left and right sides of within
|
||||
} else {
|
||||
if ( overLeft > overRight ) {
|
||||
position.left = withinOffset + outerWidth - data.collisionWidth;
|
||||
w2 = innerDiv.offsetWidth;
|
||||
|
||||
if ( w1 === w2 ) {
|
||||
w2 = div[0].clientWidth;
|
||||
}
|
||||
|
||||
div.remove();
|
||||
|
||||
return (cachedScrollbarWidth = w1 - w2);
|
||||
},
|
||||
getScrollInfo: function( within ) {
|
||||
var overflowX = within.isWindow || within.isDocument ? "" :
|
||||
within.element.css( "overflow-x" ),
|
||||
overflowY = within.isWindow || within.isDocument ? "" :
|
||||
within.element.css( "overflow-y" ),
|
||||
hasOverflowX = overflowX === "scroll" ||
|
||||
( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
|
||||
hasOverflowY = overflowY === "scroll" ||
|
||||
( overflowY === "auto" && within.height < within.element[0].scrollHeight );
|
||||
return {
|
||||
width: hasOverflowY ? $.position.scrollbarWidth() : 0,
|
||||
height: hasOverflowX ? $.position.scrollbarWidth() : 0
|
||||
};
|
||||
},
|
||||
getWithinInfo: function( element ) {
|
||||
var withinElement = $( element || window ),
|
||||
isWindow = $.isWindow( withinElement[0] ),
|
||||
isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9;
|
||||
return {
|
||||
element: withinElement,
|
||||
isWindow: isWindow,
|
||||
isDocument: isDocument,
|
||||
offset: withinElement.offset() || { left: 0, top: 0 },
|
||||
scrollLeft: withinElement.scrollLeft(),
|
||||
scrollTop: withinElement.scrollTop(),
|
||||
width: isWindow ? withinElement.width() : withinElement.outerWidth(),
|
||||
height: isWindow ? withinElement.height() : withinElement.outerHeight()
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
$.fn.position = function( options ) {
|
||||
if ( !options || !options.of ) {
|
||||
return _position.apply( this, arguments );
|
||||
}
|
||||
|
||||
// make a copy, we don't want to modify arguments
|
||||
options = $.extend( {}, options );
|
||||
|
||||
var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
|
||||
target = $( options.of ),
|
||||
within = $.position.getWithinInfo( options.within ),
|
||||
scrollInfo = $.position.getScrollInfo( within ),
|
||||
collision = ( options.collision || "flip" ).split( " " ),
|
||||
offsets = {};
|
||||
|
||||
dimensions = getDimensions( target );
|
||||
if ( target[0].preventDefault ) {
|
||||
// force left top to allow flipping
|
||||
options.at = "left top";
|
||||
}
|
||||
targetWidth = dimensions.width;
|
||||
targetHeight = dimensions.height;
|
||||
targetOffset = dimensions.offset;
|
||||
// clone to reuse original targetOffset later
|
||||
basePosition = $.extend( {}, targetOffset );
|
||||
|
||||
// force my and at to have valid horizontal and vertical positions
|
||||
// if a value is missing or invalid, it will be converted to center
|
||||
$.each( [ "my", "at" ], function() {
|
||||
var pos = ( options[ this ] || "" ).split( " " ),
|
||||
horizontalOffset,
|
||||
verticalOffset;
|
||||
|
||||
if ( pos.length === 1) {
|
||||
pos = rhorizontal.test( pos[ 0 ] ) ?
|
||||
pos.concat( [ "center" ] ) :
|
||||
rvertical.test( pos[ 0 ] ) ?
|
||||
[ "center" ].concat( pos ) :
|
||||
[ "center", "center" ];
|
||||
}
|
||||
pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
|
||||
pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
|
||||
|
||||
// calculate offsets
|
||||
horizontalOffset = roffset.exec( pos[ 0 ] );
|
||||
verticalOffset = roffset.exec( pos[ 1 ] );
|
||||
offsets[ this ] = [
|
||||
horizontalOffset ? horizontalOffset[ 0 ] : 0,
|
||||
verticalOffset ? verticalOffset[ 0 ] : 0
|
||||
];
|
||||
|
||||
// reduce to just the positions without the offsets
|
||||
options[ this ] = [
|
||||
rposition.exec( pos[ 0 ] )[ 0 ],
|
||||
rposition.exec( pos[ 1 ] )[ 0 ]
|
||||
];
|
||||
});
|
||||
|
||||
// normalize collision option
|
||||
if ( collision.length === 1 ) {
|
||||
collision[ 1 ] = collision[ 0 ];
|
||||
}
|
||||
|
||||
if ( options.at[ 0 ] === "right" ) {
|
||||
basePosition.left += targetWidth;
|
||||
} else if ( options.at[ 0 ] === "center" ) {
|
||||
basePosition.left += targetWidth / 2;
|
||||
}
|
||||
|
||||
if ( options.at[ 1 ] === "bottom" ) {
|
||||
basePosition.top += targetHeight;
|
||||
} else if ( options.at[ 1 ] === "center" ) {
|
||||
basePosition.top += targetHeight / 2;
|
||||
}
|
||||
|
||||
atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
|
||||
basePosition.left += atOffset[ 0 ];
|
||||
basePosition.top += atOffset[ 1 ];
|
||||
|
||||
return this.each(function() {
|
||||
var collisionPosition, using,
|
||||
elem = $( this ),
|
||||
elemWidth = elem.outerWidth(),
|
||||
elemHeight = elem.outerHeight(),
|
||||
marginLeft = parseCss( this, "marginLeft" ),
|
||||
marginTop = parseCss( this, "marginTop" ),
|
||||
collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width,
|
||||
collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height,
|
||||
position = $.extend( {}, basePosition ),
|
||||
myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
|
||||
|
||||
if ( options.my[ 0 ] === "right" ) {
|
||||
position.left -= elemWidth;
|
||||
} else if ( options.my[ 0 ] === "center" ) {
|
||||
position.left -= elemWidth / 2;
|
||||
}
|
||||
|
||||
if ( options.my[ 1 ] === "bottom" ) {
|
||||
position.top -= elemHeight;
|
||||
} else if ( options.my[ 1 ] === "center" ) {
|
||||
position.top -= elemHeight / 2;
|
||||
}
|
||||
|
||||
position.left += myOffset[ 0 ];
|
||||
position.top += myOffset[ 1 ];
|
||||
|
||||
// if the browser doesn't support fractions, then round for consistent results
|
||||
if ( !supportsOffsetFractions ) {
|
||||
position.left = round( position.left );
|
||||
position.top = round( position.top );
|
||||
}
|
||||
|
||||
collisionPosition = {
|
||||
marginLeft: marginLeft,
|
||||
marginTop: marginTop
|
||||
};
|
||||
|
||||
$.each( [ "left", "top" ], function( i, dir ) {
|
||||
if ( $.ui.position[ collision[ i ] ] ) {
|
||||
$.ui.position[ collision[ i ] ][ dir ]( position, {
|
||||
targetWidth: targetWidth,
|
||||
targetHeight: targetHeight,
|
||||
elemWidth: elemWidth,
|
||||
elemHeight: elemHeight,
|
||||
collisionPosition: collisionPosition,
|
||||
collisionWidth: collisionWidth,
|
||||
collisionHeight: collisionHeight,
|
||||
offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
|
||||
my: options.my,
|
||||
at: options.at,
|
||||
within: within,
|
||||
elem: elem
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
if ( options.using ) {
|
||||
// adds feedback as second argument to using callback, if present
|
||||
using = function( props ) {
|
||||
var left = targetOffset.left - position.left,
|
||||
right = left + targetWidth - elemWidth,
|
||||
top = targetOffset.top - position.top,
|
||||
bottom = top + targetHeight - elemHeight,
|
||||
feedback = {
|
||||
target: {
|
||||
element: target,
|
||||
left: targetOffset.left,
|
||||
top: targetOffset.top,
|
||||
width: targetWidth,
|
||||
height: targetHeight
|
||||
},
|
||||
element: {
|
||||
element: elem,
|
||||
left: position.left,
|
||||
top: position.top,
|
||||
width: elemWidth,
|
||||
height: elemHeight
|
||||
},
|
||||
horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
|
||||
vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
|
||||
};
|
||||
if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
|
||||
feedback.horizontal = "center";
|
||||
}
|
||||
if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
|
||||
feedback.vertical = "middle";
|
||||
}
|
||||
if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
|
||||
feedback.important = "horizontal";
|
||||
} else {
|
||||
feedback.important = "vertical";
|
||||
}
|
||||
options.using.call( this, props, feedback );
|
||||
};
|
||||
}
|
||||
|
||||
elem.offset( $.extend( position, { using: using } ) );
|
||||
});
|
||||
};
|
||||
|
||||
$.ui.position = {
|
||||
fit: {
|
||||
left: function( position, data ) {
|
||||
var within = data.within,
|
||||
withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
|
||||
outerWidth = within.width,
|
||||
collisionPosLeft = position.left - data.collisionPosition.marginLeft,
|
||||
overLeft = withinOffset - collisionPosLeft,
|
||||
overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
|
||||
newOverRight;
|
||||
|
||||
// element is wider than within
|
||||
if ( data.collisionWidth > outerWidth ) {
|
||||
// element is initially over the left side of within
|
||||
if ( overLeft > 0 && overRight <= 0 ) {
|
||||
newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
|
||||
position.left += overLeft - newOverRight;
|
||||
// element is initially over right side of within
|
||||
} else if ( overRight > 0 && overLeft <= 0 ) {
|
||||
position.left = withinOffset;
|
||||
// element is initially over both left and right sides of within
|
||||
} else {
|
||||
if ( overLeft > overRight ) {
|
||||
position.left = withinOffset + outerWidth - data.collisionWidth;
|
||||
} else {
|
||||
position.left = withinOffset;
|
||||
}
|
||||
}
|
||||
// too far left -> align with left edge
|
||||
} else if ( overLeft > 0 ) {
|
||||
position.left += overLeft;
|
||||
// too far right -> align with right edge
|
||||
} else if ( overRight > 0 ) {
|
||||
position.left -= overRight;
|
||||
// adjust based on position and margin
|
||||
} else {
|
||||
position.left = withinOffset;
|
||||
position.left = max( position.left - collisionPosLeft, position.left );
|
||||
}
|
||||
},
|
||||
top: function( position, data ) {
|
||||
var within = data.within,
|
||||
withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
|
||||
outerHeight = data.within.height,
|
||||
collisionPosTop = position.top - data.collisionPosition.marginTop,
|
||||
overTop = withinOffset - collisionPosTop,
|
||||
overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
|
||||
newOverBottom;
|
||||
|
||||
// element is taller than within
|
||||
if ( data.collisionHeight > outerHeight ) {
|
||||
// element is initially over the top of within
|
||||
if ( overTop > 0 && overBottom <= 0 ) {
|
||||
newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
|
||||
position.top += overTop - newOverBottom;
|
||||
// element is initially over bottom of within
|
||||
} else if ( overBottom > 0 && overTop <= 0 ) {
|
||||
position.top = withinOffset;
|
||||
// element is initially over both top and bottom of within
|
||||
} else {
|
||||
if ( overTop > overBottom ) {
|
||||
position.top = withinOffset + outerHeight - data.collisionHeight;
|
||||
} else {
|
||||
position.top = withinOffset;
|
||||
}
|
||||
}
|
||||
// too far up -> align with top
|
||||
} else if ( overTop > 0 ) {
|
||||
position.top += overTop;
|
||||
// too far down -> align with bottom edge
|
||||
} else if ( overBottom > 0 ) {
|
||||
position.top -= overBottom;
|
||||
// adjust based on position and margin
|
||||
} else {
|
||||
position.top = max( position.top - collisionPosTop, position.top );
|
||||
}
|
||||
}
|
||||
// too far left -> align with left edge
|
||||
} else if ( overLeft > 0 ) {
|
||||
position.left += overLeft;
|
||||
// too far right -> align with right edge
|
||||
} else if ( overRight > 0 ) {
|
||||
position.left -= overRight;
|
||||
// adjust based on position and margin
|
||||
} else {
|
||||
position.left = max( position.left - collisionPosLeft, position.left );
|
||||
}
|
||||
},
|
||||
top: function( position, data ) {
|
||||
var within = data.within,
|
||||
withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
|
||||
outerHeight = data.within.height,
|
||||
collisionPosTop = position.top - data.collisionPosition.marginTop,
|
||||
overTop = withinOffset - collisionPosTop,
|
||||
overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
|
||||
newOverBottom;
|
||||
},
|
||||
flip: {
|
||||
left: function( position, data ) {
|
||||
var within = data.within,
|
||||
withinOffset = within.offset.left + within.scrollLeft,
|
||||
outerWidth = within.width,
|
||||
offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
|
||||
collisionPosLeft = position.left - data.collisionPosition.marginLeft,
|
||||
overLeft = collisionPosLeft - offsetLeft,
|
||||
overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
|
||||
myOffset = data.my[ 0 ] === "left" ?
|
||||
-data.elemWidth :
|
||||
data.my[ 0 ] === "right" ?
|
||||
data.elemWidth :
|
||||
0,
|
||||
atOffset = data.at[ 0 ] === "left" ?
|
||||
data.targetWidth :
|
||||
data.at[ 0 ] === "right" ?
|
||||
-data.targetWidth :
|
||||
0,
|
||||
offset = -2 * data.offset[ 0 ],
|
||||
newOverRight,
|
||||
newOverLeft;
|
||||
|
||||
// element is taller than within
|
||||
if ( data.collisionHeight > outerHeight ) {
|
||||
// element is initially over the top of within
|
||||
if ( overTop > 0 && overBottom <= 0 ) {
|
||||
newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
|
||||
position.top += overTop - newOverBottom;
|
||||
// element is initially over bottom of within
|
||||
} else if ( overBottom > 0 && overTop <= 0 ) {
|
||||
position.top = withinOffset;
|
||||
// element is initially over both top and bottom of within
|
||||
} else {
|
||||
if ( overTop > overBottom ) {
|
||||
position.top = withinOffset + outerHeight - data.collisionHeight;
|
||||
} else {
|
||||
position.top = withinOffset;
|
||||
if ( overLeft < 0 ) {
|
||||
newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
|
||||
if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
|
||||
position.left += myOffset + atOffset + offset;
|
||||
}
|
||||
} else if ( overRight > 0 ) {
|
||||
newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
|
||||
if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
|
||||
position.left += myOffset + atOffset + offset;
|
||||
}
|
||||
}
|
||||
},
|
||||
top: function( position, data ) {
|
||||
var within = data.within,
|
||||
withinOffset = within.offset.top + within.scrollTop,
|
||||
outerHeight = within.height,
|
||||
offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
|
||||
collisionPosTop = position.top - data.collisionPosition.marginTop,
|
||||
overTop = collisionPosTop - offsetTop,
|
||||
overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
|
||||
top = data.my[ 1 ] === "top",
|
||||
myOffset = top ?
|
||||
-data.elemHeight :
|
||||
data.my[ 1 ] === "bottom" ?
|
||||
data.elemHeight :
|
||||
0,
|
||||
atOffset = data.at[ 1 ] === "top" ?
|
||||
data.targetHeight :
|
||||
data.at[ 1 ] === "bottom" ?
|
||||
-data.targetHeight :
|
||||
0,
|
||||
offset = -2 * data.offset[ 1 ],
|
||||
newOverTop,
|
||||
newOverBottom;
|
||||
if ( overTop < 0 ) {
|
||||
newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
|
||||
if ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) {
|
||||
position.top += myOffset + atOffset + offset;
|
||||
}
|
||||
} else if ( overBottom > 0 ) {
|
||||
newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
|
||||
if ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) {
|
||||
position.top += myOffset + atOffset + offset;
|
||||
}
|
||||
}
|
||||
}
|
||||
// too far up -> align with top
|
||||
} else if ( overTop > 0 ) {
|
||||
position.top += overTop;
|
||||
// too far down -> align with bottom edge
|
||||
} else if ( overBottom > 0 ) {
|
||||
position.top -= overBottom;
|
||||
// adjust based on position and margin
|
||||
} else {
|
||||
position.top = max( position.top - collisionPosTop, position.top );
|
||||
}
|
||||
}
|
||||
},
|
||||
flip: {
|
||||
left: function( position, data ) {
|
||||
var within = data.within,
|
||||
withinOffset = within.offset.left + within.scrollLeft,
|
||||
outerWidth = within.width,
|
||||
offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
|
||||
collisionPosLeft = position.left - data.collisionPosition.marginLeft,
|
||||
overLeft = collisionPosLeft - offsetLeft,
|
||||
overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
|
||||
myOffset = data.my[ 0 ] === "left" ?
|
||||
-data.elemWidth :
|
||||
data.my[ 0 ] === "right" ?
|
||||
data.elemWidth :
|
||||
0,
|
||||
atOffset = data.at[ 0 ] === "left" ?
|
||||
data.targetWidth :
|
||||
data.at[ 0 ] === "right" ?
|
||||
-data.targetWidth :
|
||||
0,
|
||||
offset = -2 * data.offset[ 0 ],
|
||||
newOverRight,
|
||||
newOverLeft;
|
||||
|
||||
if ( overLeft < 0 ) {
|
||||
newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
|
||||
if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
|
||||
position.left += myOffset + atOffset + offset;
|
||||
},
|
||||
flipfit: {
|
||||
left: function() {
|
||||
$.ui.position.flip.left.apply( this, arguments );
|
||||
$.ui.position.fit.left.apply( this, arguments );
|
||||
},
|
||||
top: function() {
|
||||
$.ui.position.flip.top.apply( this, arguments );
|
||||
$.ui.position.fit.top.apply( this, arguments );
|
||||
}
|
||||
}
|
||||
else if ( overRight > 0 ) {
|
||||
newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
|
||||
if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
|
||||
position.left += myOffset + atOffset + offset;
|
||||
}
|
||||
}
|
||||
},
|
||||
top: function( position, data ) {
|
||||
var within = data.within,
|
||||
withinOffset = within.offset.top + within.scrollTop,
|
||||
outerHeight = within.height,
|
||||
offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
|
||||
collisionPosTop = position.top - data.collisionPosition.marginTop,
|
||||
overTop = collisionPosTop - offsetTop,
|
||||
overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
|
||||
top = data.my[ 1 ] === "top",
|
||||
myOffset = top ?
|
||||
-data.elemHeight :
|
||||
data.my[ 1 ] === "bottom" ?
|
||||
data.elemHeight :
|
||||
0,
|
||||
atOffset = data.at[ 1 ] === "top" ?
|
||||
data.targetHeight :
|
||||
data.at[ 1 ] === "bottom" ?
|
||||
-data.targetHeight :
|
||||
0,
|
||||
offset = -2 * data.offset[ 1 ],
|
||||
newOverTop,
|
||||
newOverBottom;
|
||||
if ( overTop < 0 ) {
|
||||
newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
|
||||
if ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) {
|
||||
position.top += myOffset + atOffset + offset;
|
||||
}
|
||||
}
|
||||
else if ( overBottom > 0 ) {
|
||||
newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
|
||||
if ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) {
|
||||
position.top += myOffset + atOffset + offset;
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
flipfit: {
|
||||
left: function() {
|
||||
$.ui.position.flip.left.apply( this, arguments );
|
||||
$.ui.position.fit.left.apply( this, arguments );
|
||||
},
|
||||
top: function() {
|
||||
$.ui.position.flip.top.apply( this, arguments );
|
||||
$.ui.position.fit.top.apply( this, arguments );
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
// fraction support test
|
||||
(function () {
|
||||
var testElement, testElementParent, testElementStyle, offsetLeft, i,
|
||||
body = document.getElementsByTagName( "body" )[ 0 ],
|
||||
div = document.createElement( "div" );
|
||||
(function() {
|
||||
var testElement, testElementParent, testElementStyle, offsetLeft, i,
|
||||
body = document.getElementsByTagName( "body" )[ 0 ],
|
||||
div = document.createElement( "div" );
|
||||
|
||||
//Create a "fake body" for testing based on method used in jQuery.support
|
||||
testElement = document.createElement( body ? "div" : "body" );
|
||||
testElementStyle = {
|
||||
visibility: "hidden",
|
||||
width: 0,
|
||||
height: 0,
|
||||
border: 0,
|
||||
margin: 0,
|
||||
background: "none"
|
||||
};
|
||||
if ( body ) {
|
||||
$.extend( testElementStyle, {
|
||||
position: "absolute",
|
||||
left: "-1000px",
|
||||
top: "-1000px"
|
||||
});
|
||||
}
|
||||
for ( i in testElementStyle ) {
|
||||
testElement.style[ i ] = testElementStyle[ i ];
|
||||
}
|
||||
testElement.appendChild( div );
|
||||
testElementParent = body || document.documentElement;
|
||||
testElementParent.insertBefore( testElement, testElementParent.firstChild );
|
||||
//Create a "fake body" for testing based on method used in jQuery.support
|
||||
testElement = document.createElement( body ? "div" : "body" );
|
||||
testElementStyle = {
|
||||
visibility: "hidden",
|
||||
width: 0,
|
||||
height: 0,
|
||||
border: 0,
|
||||
margin: 0,
|
||||
background: "none"
|
||||
};
|
||||
if ( body ) {
|
||||
$.extend( testElementStyle, {
|
||||
position: "absolute",
|
||||
left: "-1000px",
|
||||
top: "-1000px"
|
||||
});
|
||||
}
|
||||
for ( i in testElementStyle ) {
|
||||
testElement.style[ i ] = testElementStyle[ i ];
|
||||
}
|
||||
testElement.appendChild( div );
|
||||
testElementParent = body || document.documentElement;
|
||||
testElementParent.insertBefore( testElement, testElementParent.firstChild );
|
||||
|
||||
div.style.cssText = "position: absolute; left: 10.7432222px;";
|
||||
div.style.cssText = "position: absolute; left: 10.7432222px;";
|
||||
|
||||
offsetLeft = $( div ).offset().left;
|
||||
$.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11;
|
||||
offsetLeft = $( div ).offset().left;
|
||||
supportsOffsetFractions = offsetLeft > 10 && offsetLeft < 11;
|
||||
|
||||
testElement.innerHTML = "";
|
||||
testElementParent.removeChild( testElement );
|
||||
})();
|
||||
testElement.innerHTML = "";
|
||||
testElementParent.removeChild( testElement );
|
||||
})();
|
||||
|
||||
})();
|
||||
|
||||
return $.ui.position;
|
||||
|
||||
}));
|
||||
|
||||
}( window.webshims && window.webshims.$ || jQuery ) );
|
||||
|
@ -1,684 +0,0 @@
|
||||
(function() {
|
||||
var define, requireModule, require, requirejs;
|
||||
|
||||
(function() {
|
||||
var registry = {}, seen = {};
|
||||
|
||||
define = function(name, deps, callback) {
|
||||
registry[name] = { deps: deps, callback: callback };
|
||||
};
|
||||
|
||||
requirejs = require = requireModule = function(name) {
|
||||
requirejs._eak_seen = registry;
|
||||
|
||||
if (seen[name]) { return seen[name]; }
|
||||
seen[name] = {};
|
||||
|
||||
if (!registry[name]) {
|
||||
throw new Error("Could not find module " + name);
|
||||
}
|
||||
|
||||
var mod = registry[name],
|
||||
deps = mod.deps,
|
||||
callback = mod.callback,
|
||||
reified = [],
|
||||
exports;
|
||||
|
||||
for (var i=0, l=deps.length; i<l; i++) {
|
||||
if (deps[i] === 'exports') {
|
||||
reified.push(exports = {});
|
||||
} else {
|
||||
reified.push(requireModule(resolve(deps[i])));
|
||||
}
|
||||
}
|
||||
|
||||
var value = callback.apply(this, reified);
|
||||
return seen[name] = exports || value;
|
||||
|
||||
function resolve(child) {
|
||||
if (child.charAt(0) !== '.') { return child; }
|
||||
var parts = child.split("/");
|
||||
var parentBase = name.split("/").slice(0, -1);
|
||||
|
||||
for (var i=0, l=parts.length; i<l; i++) {
|
||||
var part = parts[i];
|
||||
|
||||
if (part === '..') { parentBase.pop(); }
|
||||
else if (part === '.') { continue; }
|
||||
else { parentBase.push(part); }
|
||||
}
|
||||
|
||||
return parentBase.join("/");
|
||||
}
|
||||
};
|
||||
})();
|
||||
|
||||
define("promise/all",
|
||||
["./utils","exports"],
|
||||
function(__dependency1__, __exports__) {
|
||||
"use strict";
|
||||
/* global toString */
|
||||
|
||||
var isArray = __dependency1__.isArray;
|
||||
var isFunction = __dependency1__.isFunction;
|
||||
|
||||
/**
|
||||
Returns a promise that is fulfilled when all the given promises have been
|
||||
fulfilled, or rejected if any of them become rejected. The return promise
|
||||
is fulfilled with an array that gives all the values in the order they were
|
||||
passed in the `promises` array argument.
|
||||
|
||||
Example:
|
||||
|
||||
```javascript
|
||||
var promise1 = RSVP.resolve(1);
|
||||
var promise2 = RSVP.resolve(2);
|
||||
var promise3 = RSVP.resolve(3);
|
||||
var promises = [ promise1, promise2, promise3 ];
|
||||
|
||||
RSVP.all(promises).then(function(array){
|
||||
// The array here would be [ 1, 2, 3 ];
|
||||
});
|
||||
```
|
||||
|
||||
If any of the `promises` given to `RSVP.all` are rejected, the first promise
|
||||
that is rejected will be given as an argument to the returned promises's
|
||||
rejection handler. For example:
|
||||
|
||||
Example:
|
||||
|
||||
```javascript
|
||||
var promise1 = RSVP.resolve(1);
|
||||
var promise2 = RSVP.reject(new Error("2"));
|
||||
var promise3 = RSVP.reject(new Error("3"));
|
||||
var promises = [ promise1, promise2, promise3 ];
|
||||
|
||||
RSVP.all(promises).then(function(array){
|
||||
// Code here never runs because there are rejected promises!
|
||||
}, function(error) {
|
||||
// error.message === "2"
|
||||
});
|
||||
```
|
||||
|
||||
@method all
|
||||
@for RSVP
|
||||
@param {Array} promises
|
||||
@param {String} label
|
||||
@return {Promise} promise that is fulfilled when all `promises` have been
|
||||
fulfilled, or rejected if any of them become rejected.
|
||||
*/
|
||||
function all(promises) {
|
||||
/*jshint validthis:true */
|
||||
var Promise = this;
|
||||
|
||||
if (!isArray(promises)) {
|
||||
throw new TypeError('You must pass an array to all.');
|
||||
}
|
||||
|
||||
return new Promise(function(resolve, reject) {
|
||||
var results = [], remaining = promises.length,
|
||||
promise;
|
||||
|
||||
if (remaining === 0) {
|
||||
resolve([]);
|
||||
}
|
||||
|
||||
function resolver(index) {
|
||||
return function(value) {
|
||||
resolveAll(index, value);
|
||||
};
|
||||
}
|
||||
|
||||
function resolveAll(index, value) {
|
||||
results[index] = value;
|
||||
if (--remaining === 0) {
|
||||
resolve(results);
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = 0; i < promises.length; i++) {
|
||||
promise = promises[i];
|
||||
|
||||
if (promise && isFunction(promise.then)) {
|
||||
promise.then(resolver(i), reject);
|
||||
} else {
|
||||
resolveAll(i, promise);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
__exports__.all = all;
|
||||
});
|
||||
define("promise/asap",
|
||||
["exports"],
|
||||
function(__exports__) {
|
||||
"use strict";
|
||||
var browserGlobal = (typeof window !== 'undefined') ? window : {};
|
||||
var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;
|
||||
var local = (typeof global !== 'undefined') ? global : (this === undefined? window:this);
|
||||
|
||||
// node
|
||||
function useNextTick() {
|
||||
return function() {
|
||||
process.nextTick(flush);
|
||||
};
|
||||
}
|
||||
|
||||
function useMutationObserver() {
|
||||
var iterations = 0;
|
||||
var observer = new BrowserMutationObserver(flush);
|
||||
var node = document.createTextNode('');
|
||||
observer.observe(node, { characterData: true });
|
||||
|
||||
return function() {
|
||||
node.data = (iterations = ++iterations % 2);
|
||||
};
|
||||
}
|
||||
|
||||
function useSetTimeout() {
|
||||
return function() {
|
||||
local.setTimeout(flush, 1);
|
||||
};
|
||||
}
|
||||
|
||||
var queue = [];
|
||||
function flush() {
|
||||
for (var i = 0; i < queue.length; i++) {
|
||||
var tuple = queue[i];
|
||||
var callback = tuple[0], arg = tuple[1];
|
||||
callback(arg);
|
||||
}
|
||||
queue = [];
|
||||
}
|
||||
|
||||
var scheduleFlush;
|
||||
|
||||
// Decide what async method to use to triggering processing of queued callbacks:
|
||||
if (typeof process !== 'undefined' && {}.toString.call(process) === '[object process]') {
|
||||
scheduleFlush = useNextTick();
|
||||
} else if (BrowserMutationObserver) {
|
||||
scheduleFlush = useMutationObserver();
|
||||
} else {
|
||||
scheduleFlush = useSetTimeout();
|
||||
}
|
||||
|
||||
function asap(callback, arg) {
|
||||
var length = queue.push([callback, arg]);
|
||||
if (length === 1) {
|
||||
// If length is 1, that means that we need to schedule an async flush.
|
||||
// If additional callbacks are queued before the queue is flushed, they
|
||||
// will be processed by this flush that we are scheduling.
|
||||
scheduleFlush();
|
||||
}
|
||||
}
|
||||
|
||||
__exports__.asap = asap;
|
||||
});
|
||||
define("promise/config",
|
||||
["exports"],
|
||||
function(__exports__) {
|
||||
"use strict";
|
||||
var config = {
|
||||
instrument: false
|
||||
};
|
||||
|
||||
function configure(name, value) {
|
||||
if (arguments.length === 2) {
|
||||
config[name] = value;
|
||||
} else {
|
||||
return config[name];
|
||||
}
|
||||
}
|
||||
|
||||
__exports__.config = config;
|
||||
__exports__.configure = configure;
|
||||
});
|
||||
define("promise/polyfill",
|
||||
["./promise","./utils","exports"],
|
||||
function(__dependency1__, __dependency2__, __exports__) {
|
||||
"use strict";
|
||||
/*global self*/
|
||||
var RSVPPromise = __dependency1__.Promise;
|
||||
var isFunction = __dependency2__.isFunction;
|
||||
|
||||
function polyfill() {
|
||||
var local;
|
||||
|
||||
if (typeof global !== 'undefined') {
|
||||
local = global;
|
||||
} else if (typeof window !== 'undefined' && window.document) {
|
||||
local = window;
|
||||
} else {
|
||||
local = self;
|
||||
}
|
||||
|
||||
var es6PromiseSupport =
|
||||
"Promise" in local &&
|
||||
// Some of these methods are missing from
|
||||
// Firefox/Chrome experimental implementations
|
||||
"resolve" in local.Promise &&
|
||||
"reject" in local.Promise &&
|
||||
"all" in local.Promise &&
|
||||
"race" in local.Promise &&
|
||||
// Older version of the spec had a resolver object
|
||||
// as the arg rather than a function
|
||||
(function() {
|
||||
var resolve;
|
||||
new local.Promise(function(r) { resolve = r; });
|
||||
return isFunction(resolve);
|
||||
}());
|
||||
|
||||
if (!es6PromiseSupport) {
|
||||
local.Promise = RSVPPromise;
|
||||
}
|
||||
}
|
||||
|
||||
__exports__.polyfill = polyfill;
|
||||
});
|
||||
define("promise/promise",
|
||||
["./config","./utils","./all","./race","./resolve","./reject","./asap","exports"],
|
||||
function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __exports__) {
|
||||
"use strict";
|
||||
var config = __dependency1__.config;
|
||||
var configure = __dependency1__.configure;
|
||||
var objectOrFunction = __dependency2__.objectOrFunction;
|
||||
var isFunction = __dependency2__.isFunction;
|
||||
var now = __dependency2__.now;
|
||||
var all = __dependency3__.all;
|
||||
var race = __dependency4__.race;
|
||||
var staticResolve = __dependency5__.resolve;
|
||||
var staticReject = __dependency6__.reject;
|
||||
var asap = __dependency7__.asap;
|
||||
|
||||
var counter = 0;
|
||||
|
||||
config.async = asap; // default async is asap;
|
||||
|
||||
function Promise(resolver) {
|
||||
if (!isFunction(resolver)) {
|
||||
throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');
|
||||
}
|
||||
|
||||
if (!(this instanceof Promise)) {
|
||||
throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");
|
||||
}
|
||||
|
||||
this._subscribers = [];
|
||||
|
||||
invokeResolver(resolver, this);
|
||||
}
|
||||
|
||||
function invokeResolver(resolver, promise) {
|
||||
function resolvePromise(value) {
|
||||
resolve(promise, value);
|
||||
}
|
||||
|
||||
function rejectPromise(reason) {
|
||||
reject(promise, reason);
|
||||
}
|
||||
|
||||
try {
|
||||
resolver(resolvePromise, rejectPromise);
|
||||
} catch(e) {
|
||||
rejectPromise(e);
|
||||
}
|
||||
}
|
||||
|
||||
function invokeCallback(settled, promise, callback, detail) {
|
||||
var hasCallback = isFunction(callback),
|
||||
value, error, succeeded, failed;
|
||||
|
||||
if (hasCallback) {
|
||||
try {
|
||||
value = callback(detail);
|
||||
succeeded = true;
|
||||
} catch(e) {
|
||||
failed = true;
|
||||
error = e;
|
||||
}
|
||||
} else {
|
||||
value = detail;
|
||||
succeeded = true;
|
||||
}
|
||||
|
||||
if (handleThenable(promise, value)) {
|
||||
return;
|
||||
} else if (hasCallback && succeeded) {
|
||||
resolve(promise, value);
|
||||
} else if (failed) {
|
||||
reject(promise, error);
|
||||
} else if (settled === FULFILLED) {
|
||||
resolve(promise, value);
|
||||
} else if (settled === REJECTED) {
|
||||
reject(promise, value);
|
||||
}
|
||||
}
|
||||
|
||||
var PENDING = void 0;
|
||||
var SEALED = 0;
|
||||
var FULFILLED = 1;
|
||||
var REJECTED = 2;
|
||||
|
||||
function subscribe(parent, child, onFulfillment, onRejection) {
|
||||
var subscribers = parent._subscribers;
|
||||
var length = subscribers.length;
|
||||
|
||||
subscribers[length] = child;
|
||||
subscribers[length + FULFILLED] = onFulfillment;
|
||||
subscribers[length + REJECTED] = onRejection;
|
||||
}
|
||||
|
||||
function publish(promise, settled) {
|
||||
var child, callback, subscribers = promise._subscribers, detail = promise._detail;
|
||||
|
||||
for (var i = 0; i < subscribers.length; i += 3) {
|
||||
child = subscribers[i];
|
||||
callback = subscribers[i + settled];
|
||||
|
||||
invokeCallback(settled, child, callback, detail);
|
||||
}
|
||||
|
||||
promise._subscribers = null;
|
||||
}
|
||||
|
||||
Promise.prototype = {
|
||||
constructor: Promise,
|
||||
|
||||
_state: undefined,
|
||||
_detail: undefined,
|
||||
_subscribers: undefined,
|
||||
|
||||
then: function(onFulfillment, onRejection) {
|
||||
var promise = this;
|
||||
|
||||
var thenPromise = new this.constructor(function() {});
|
||||
|
||||
if (this._state) {
|
||||
var callbacks = arguments;
|
||||
config.async(function invokePromiseCallback() {
|
||||
invokeCallback(promise._state, thenPromise, callbacks[promise._state - 1], promise._detail);
|
||||
});
|
||||
} else {
|
||||
subscribe(this, thenPromise, onFulfillment, onRejection);
|
||||
}
|
||||
|
||||
return thenPromise;
|
||||
},
|
||||
|
||||
'catch': function(onRejection) {
|
||||
return this.then(null, onRejection);
|
||||
}
|
||||
};
|
||||
|
||||
Promise.all = all;
|
||||
Promise.race = race;
|
||||
Promise.resolve = staticResolve;
|
||||
Promise.reject = staticReject;
|
||||
|
||||
function handleThenable(promise, value) {
|
||||
var then = null,
|
||||
resolved;
|
||||
|
||||
try {
|
||||
if (promise === value) {
|
||||
throw new TypeError("A promises callback cannot return that same promise.");
|
||||
}
|
||||
|
||||
if (objectOrFunction(value)) {
|
||||
then = value.then;
|
||||
|
||||
if (isFunction(then)) {
|
||||
then.call(value, function(val) {
|
||||
if (resolved) { return true; }
|
||||
resolved = true;
|
||||
|
||||
if (value !== val) {
|
||||
resolve(promise, val);
|
||||
} else {
|
||||
fulfill(promise, val);
|
||||
}
|
||||
}, function(val) {
|
||||
if (resolved) { return true; }
|
||||
resolved = true;
|
||||
|
||||
reject(promise, val);
|
||||
});
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
if (resolved) { return true; }
|
||||
reject(promise, error);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function resolve(promise, value) {
|
||||
if (promise === value) {
|
||||
fulfill(promise, value);
|
||||
} else if (!handleThenable(promise, value)) {
|
||||
fulfill(promise, value);
|
||||
}
|
||||
}
|
||||
|
||||
function fulfill(promise, value) {
|
||||
if (promise._state !== PENDING) { return; }
|
||||
promise._state = SEALED;
|
||||
promise._detail = value;
|
||||
|
||||
config.async(publishFulfillment, promise);
|
||||
}
|
||||
|
||||
function reject(promise, reason) {
|
||||
if (promise._state !== PENDING) { return; }
|
||||
promise._state = SEALED;
|
||||
promise._detail = reason;
|
||||
|
||||
config.async(publishRejection, promise);
|
||||
}
|
||||
|
||||
function publishFulfillment(promise) {
|
||||
publish(promise, promise._state = FULFILLED);
|
||||
}
|
||||
|
||||
function publishRejection(promise) {
|
||||
publish(promise, promise._state = REJECTED);
|
||||
}
|
||||
|
||||
__exports__.Promise = Promise;
|
||||
});
|
||||
define("promise/race",
|
||||
["./utils","exports"],
|
||||
function(__dependency1__, __exports__) {
|
||||
"use strict";
|
||||
/* global toString */
|
||||
var isArray = __dependency1__.isArray;
|
||||
|
||||
/**
|
||||
`RSVP.race` allows you to watch a series of promises and act as soon as the
|
||||
first promise given to the `promises` argument fulfills or rejects.
|
||||
|
||||
Example:
|
||||
|
||||
```javascript
|
||||
var promise1 = new RSVP.Promise(function(resolve, reject){
|
||||
setTimeout(function(){
|
||||
resolve("promise 1");
|
||||
}, 200);
|
||||
});
|
||||
|
||||
var promise2 = new RSVP.Promise(function(resolve, reject){
|
||||
setTimeout(function(){
|
||||
resolve("promise 2");
|
||||
}, 100);
|
||||
});
|
||||
|
||||
RSVP.race([promise1, promise2]).then(function(result){
|
||||
// result === "promise 2" because it was resolved before promise1
|
||||
// was resolved.
|
||||
});
|
||||
```
|
||||
|
||||
`RSVP.race` is deterministic in that only the state of the first completed
|
||||
promise matters. For example, even if other promises given to the `promises`
|
||||
array argument are resolved, but the first completed promise has become
|
||||
rejected before the other promises became fulfilled, the returned promise
|
||||
will become rejected:
|
||||
|
||||
```javascript
|
||||
var promise1 = new RSVP.Promise(function(resolve, reject){
|
||||
setTimeout(function(){
|
||||
resolve("promise 1");
|
||||
}, 200);
|
||||
});
|
||||
|
||||
var promise2 = new RSVP.Promise(function(resolve, reject){
|
||||
setTimeout(function(){
|
||||
reject(new Error("promise 2"));
|
||||
}, 100);
|
||||
});
|
||||
|
||||
RSVP.race([promise1, promise2]).then(function(result){
|
||||
// Code here never runs because there are rejected promises!
|
||||
}, function(reason){
|
||||
// reason.message === "promise2" because promise 2 became rejected before
|
||||
// promise 1 became fulfilled
|
||||
});
|
||||
```
|
||||
|
||||
@method race
|
||||
@for RSVP
|
||||
@param {Array} promises array of promises to observe
|
||||
@param {String} label optional string for describing the promise returned.
|
||||
Useful for tooling.
|
||||
@return {Promise} a promise that becomes fulfilled with the value the first
|
||||
completed promises is resolved with if the first completed promise was
|
||||
fulfilled, or rejected with the reason that the first completed promise
|
||||
was rejected with.
|
||||
*/
|
||||
function race(promises) {
|
||||
/*jshint validthis:true */
|
||||
var Promise = this;
|
||||
|
||||
if (!isArray(promises)) {
|
||||
throw new TypeError('You must pass an array to race.');
|
||||
}
|
||||
return new Promise(function(resolve, reject) {
|
||||
var results = [], promise;
|
||||
|
||||
for (var i = 0; i < promises.length; i++) {
|
||||
promise = promises[i];
|
||||
|
||||
if (promise && typeof promise.then === 'function') {
|
||||
promise.then(resolve, reject);
|
||||
} else {
|
||||
resolve(promise);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
__exports__.race = race;
|
||||
});
|
||||
define("promise/reject",
|
||||
["exports"],
|
||||
function(__exports__) {
|
||||
"use strict";
|
||||
/**
|
||||
`RSVP.reject` returns a promise that will become rejected with the passed
|
||||
`reason`. `RSVP.reject` is essentially shorthand for the following:
|
||||
|
||||
```javascript
|
||||
var promise = new RSVP.Promise(function(resolve, reject){
|
||||
reject(new Error('WHOOPS'));
|
||||
});
|
||||
|
||||
promise.then(function(value){
|
||||
// Code here doesn't run because the promise is rejected!
|
||||
}, function(reason){
|
||||
// reason.message === 'WHOOPS'
|
||||
});
|
||||
```
|
||||
|
||||
Instead of writing the above, your code now simply becomes the following:
|
||||
|
||||
```javascript
|
||||
var promise = RSVP.reject(new Error('WHOOPS'));
|
||||
|
||||
promise.then(function(value){
|
||||
// Code here doesn't run because the promise is rejected!
|
||||
}, function(reason){
|
||||
// reason.message === 'WHOOPS'
|
||||
});
|
||||
```
|
||||
|
||||
@method reject
|
||||
@for RSVP
|
||||
@param {Any} reason value that the returned promise will be rejected with.
|
||||
@param {String} label optional string for identifying the returned promise.
|
||||
Useful for tooling.
|
||||
@return {Promise} a promise that will become rejected with the given
|
||||
`reason`.
|
||||
*/
|
||||
function reject(reason) {
|
||||
/*jshint validthis:true */
|
||||
var Promise = this;
|
||||
|
||||
return new Promise(function (resolve, reject) {
|
||||
reject(reason);
|
||||
});
|
||||
}
|
||||
|
||||
__exports__.reject = reject;
|
||||
});
|
||||
define("promise/resolve",
|
||||
["exports"],
|
||||
function(__exports__) {
|
||||
"use strict";
|
||||
function resolve(value) {
|
||||
/*jshint validthis:true */
|
||||
if (value && typeof value === 'object' && value.constructor === this) {
|
||||
return value;
|
||||
}
|
||||
|
||||
var Promise = this;
|
||||
|
||||
return new Promise(function(resolve) {
|
||||
resolve(value);
|
||||
});
|
||||
}
|
||||
|
||||
__exports__.resolve = resolve;
|
||||
});
|
||||
define("promise/utils",
|
||||
["exports"],
|
||||
function(__exports__) {
|
||||
"use strict";
|
||||
function objectOrFunction(x) {
|
||||
return isFunction(x) || (typeof x === "object" && x !== null);
|
||||
}
|
||||
|
||||
function isFunction(x) {
|
||||
return typeof x === "function";
|
||||
}
|
||||
|
||||
function isArray(x) {
|
||||
return Object.prototype.toString.call(x) === "[object Array]";
|
||||
}
|
||||
|
||||
// Date.now is not available in browsers < IE9
|
||||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now#Compatibility
|
||||
var now = Date.now || function() { return new Date().getTime(); };
|
||||
|
||||
|
||||
__exports__.objectOrFunction = objectOrFunction;
|
||||
__exports__.isFunction = isFunction;
|
||||
__exports__.isArray = isArray;
|
||||
__exports__.now = now;
|
||||
});
|
||||
requireModule('promise/polyfill').polyfill();
|
||||
}());
|
@ -1,12 +1,12 @@
|
||||
/*!
|
||||
* Sizzle CSS Selector Engine v1.10.18
|
||||
* Sizzle CSS Selector Engine v1.10.19
|
||||
* http://sizzlejs.com/
|
||||
*
|
||||
* Copyright 2013 jQuery Foundation, Inc. and other contributors
|
||||
* Released under the MIT license
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* Date: 2014-02-05
|
||||
* Date: 2014-04-18
|
||||
*/
|
||||
(function( window ) {
|
||||
|
||||
@ -15,6 +15,7 @@
|
||||
Expr,
|
||||
getText,
|
||||
isXML,
|
||||
tokenize,
|
||||
compile,
|
||||
select,
|
||||
outermostContext,
|
||||
@ -83,17 +84,23 @@
|
||||
// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
|
||||
identifier = characterEncoding.replace( "w", "w#" ),
|
||||
|
||||
// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
|
||||
attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
|
||||
"*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
|
||||
// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
|
||||
attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace +
|
||||
// Operator (capture 2)
|
||||
"*([*^$|!~]?=)" + whitespace +
|
||||
// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
|
||||
"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
|
||||
"*\\]",
|
||||
|
||||
// Prefer arguments quoted,
|
||||
// then not containing pseudos/brackets,
|
||||
// then attribute selectors/non-parenthetical expressions,
|
||||
// then anything else
|
||||
// These preferences are here to reduce the number of selectors
|
||||
// needing tokenize in the PSEUDO preFilter
|
||||
pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)",
|
||||
pseudos = ":(" + characterEncoding + ")(?:\\((" +
|
||||
// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
|
||||
// 1. quoted (capture 3; capture 4 or capture 5)
|
||||
"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
|
||||
// 2. simple (capture 6)
|
||||
"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
|
||||
// 3. anything else (capture 2)
|
||||
".*" +
|
||||
")\\)|)",
|
||||
|
||||
// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
|
||||
rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
|
||||
@ -534,7 +541,7 @@
|
||||
var m = context.getElementById( id );
|
||||
// Check parentNode to catch when Blackberry 4.6 returns
|
||||
// nodes that are no longer in the document #6963
|
||||
return m && m.parentNode ? [m] : [];
|
||||
return m && m.parentNode ? [ m ] : [];
|
||||
}
|
||||
};
|
||||
Expr.filter["ID"] = function( id ) {
|
||||
@ -614,11 +621,13 @@
|
||||
// setting a boolean content attribute,
|
||||
// since its presence should be enough
|
||||
// http://bugs.jquery.com/ticket/12359
|
||||
div.innerHTML = "<select t=''><option selected=''></option></select>";
|
||||
div.innerHTML = "<select msallowclip=''><option selected=''></option></select>";
|
||||
|
||||
// Support: IE8, Opera 10-12
|
||||
// Support: IE8, Opera 11-12.16
|
||||
// Nothing should be selected when empty strings follow ^= or $= or *=
|
||||
if ( div.querySelectorAll("[t^='']").length ) {
|
||||
// The test attribute must be unknown in Opera but "safe" for WinRT
|
||||
// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
|
||||
if ( div.querySelectorAll("[msallowclip^='']").length ) {
|
||||
rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
|
||||
}
|
||||
|
||||
@ -661,7 +670,8 @@
|
||||
});
|
||||
}
|
||||
|
||||
if ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector ||
|
||||
if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
|
||||
docElem.webkitMatchesSelector ||
|
||||
docElem.mozMatchesSelector ||
|
||||
docElem.oMatchesSelector ||
|
||||
docElem.msMatchesSelector) )) ) {
|
||||
@ -842,7 +852,7 @@
|
||||
} catch(e) {}
|
||||
}
|
||||
|
||||
return Sizzle( expr, document, null, [elem] ).length > 0;
|
||||
return Sizzle( expr, document, null, [ elem ] ).length > 0;
|
||||
};
|
||||
|
||||
Sizzle.contains = function( context, elem ) {
|
||||
@ -971,7 +981,7 @@
|
||||
match[1] = match[1].replace( runescape, funescape );
|
||||
|
||||
// Move the given value to match[3] whether quoted or unquoted
|
||||
match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape );
|
||||
match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
|
||||
|
||||
if ( match[2] === "~=" ) {
|
||||
match[3] = " " + match[3] + " ";
|
||||
@ -1014,15 +1024,15 @@
|
||||
|
||||
"PSEUDO": function( match ) {
|
||||
var excess,
|
||||
unquoted = !match[5] && match[2];
|
||||
unquoted = !match[6] && match[2];
|
||||
|
||||
if ( matchExpr["CHILD"].test( match[0] ) ) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Accept quoted arguments as-is
|
||||
if ( match[3] && match[4] !== undefined ) {
|
||||
match[2] = match[4];
|
||||
if ( match[3] ) {
|
||||
match[2] = match[4] || match[5] || "";
|
||||
|
||||
// Strip excess characters from unquoted arguments
|
||||
} else if ( unquoted && rpseudo.test( unquoted ) &&
|
||||
@ -1427,7 +1437,7 @@
|
||||
setFilters.prototype = Expr.filters = Expr.pseudos;
|
||||
Expr.setFilters = new setFilters();
|
||||
|
||||
function tokenize( selector, parseOnly ) {
|
||||
tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
|
||||
var matched, match, tokens, type,
|
||||
soFar, groups, preFilters,
|
||||
cached = tokenCache[ selector + " " ];
|
||||
@ -1492,7 +1502,7 @@
|
||||
Sizzle.error( selector ) :
|
||||
// Cache the tokens
|
||||
tokenCache( selector, groups ).slice( 0 );
|
||||
}
|
||||
};
|
||||
|
||||
function toSelector( tokens ) {
|
||||
var i = 0,
|
||||
@ -2032,7 +2042,6 @@
|
||||
// EXPOSE
|
||||
|
||||
|
||||
|
||||
(function(jQuery){
|
||||
jQuery.find = Sizzle;
|
||||
jQuery.expr = Sizzle.selectors;
|
||||
@ -2044,4 +2053,3 @@
|
||||
webshims.isReady('sizzle', true);
|
||||
})(window.webshims && window.webshims.$ || window.jQuery, window.Sizzle);
|
||||
})( window );
|
||||
|
||||
|
@ -22,6 +22,9 @@ SASS:
|
||||
.hide-spinbtns .input-buttons > .step-controls {
|
||||
display: none;
|
||||
}
|
||||
.hide-spinbtns input[type="number"], [type="number"].hide-spinbtns {
|
||||
-moz-appearance: textfield;
|
||||
}
|
||||
.hide-spinbtns::-webkit-inner-spin-button,
|
||||
.hide-spinbtns ::-webkit-inner-spin-button {
|
||||
display: none;
|
||||
@ -36,6 +39,9 @@ SASS:
|
||||
.hide-inputbtns .input-buttons {
|
||||
display: none;
|
||||
}
|
||||
.hide-inputbtns input[type="number"], [type="number"].hide-inputbtns {
|
||||
-moz-appearance: textfield;
|
||||
}
|
||||
.hide-inputbtns::-webkit-inner-spin-button,
|
||||
.hide-inputbtns ::-webkit-inner-spin-button {
|
||||
display: none;
|
||||
@ -190,6 +196,10 @@ span.has-input-buttons {
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.ws-number[readonly][aria-readonly="false"] {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.input-buttons,
|
||||
.step-controls,
|
||||
.ws-popover-opener {
|
||||
@ -297,12 +307,10 @@ input[type="color"] {
|
||||
margin-right: -39px;
|
||||
}
|
||||
.input-button-size-2 .step-controls {
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
}
|
||||
:focus + .input-button-size-2 .step-controls, :hover + .input-button-size-2 .step-controls, :active + .input-button-size-2 .step-controls, .input-button-size-2:hover .step-controls {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
.step-controls {
|
||||
|
@ -78,7 +78,7 @@ SASS:
|
||||
outline: none;
|
||||
text-align: center;
|
||||
font-family: sans-serif;
|
||||
width: 27.69231em;
|
||||
width: 29.23077em;
|
||||
min-width: 20.76923em;
|
||||
max-width: 98vw;
|
||||
/* Selector API: */
|
||||
|
@ -82,6 +82,11 @@ $btnapis: hide-spinbtns hide-dropdownbtn hide-inputbtns inputbtns-outside a11yhi
|
||||
display: none;
|
||||
}
|
||||
|
||||
input[type="number"],
|
||||
&[type="number"], {
|
||||
-moz-appearance: textfield;
|
||||
}
|
||||
|
||||
&::-webkit-inner-spin-button,
|
||||
::-webkit-inner-spin-button {
|
||||
display: none;
|
||||
@ -101,6 +106,11 @@ $btnapis: hide-spinbtns hide-dropdownbtn hide-inputbtns inputbtns-outside a11yhi
|
||||
display: none;
|
||||
}
|
||||
|
||||
input[type="number"],
|
||||
&[type="number"], {
|
||||
-moz-appearance: textfield;
|
||||
}
|
||||
|
||||
&::-webkit-inner-spin-button,
|
||||
::-webkit-inner-spin-button {
|
||||
display: none;
|
||||
|
@ -73,6 +73,10 @@ span.has-input-buttons {
|
||||
}
|
||||
}
|
||||
|
||||
.ws-number[readonly][aria-readonly="false"] {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.input-buttons,
|
||||
.step-controls,
|
||||
.ws-popover-opener {
|
||||
@ -209,7 +213,6 @@ input[type="color"] {
|
||||
}
|
||||
|
||||
.step-controls {
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
@ -219,7 +222,6 @@ input[type="color"] {
|
||||
&:hover {
|
||||
.step-controls {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -17,7 +17,7 @@ $button-bgcolor: #f5f5f5;
|
||||
outline: none;
|
||||
text-align: center;
|
||||
font-family: sans-serif;
|
||||
width: em(360);
|
||||
width: em(380);
|
||||
min-width: em(270);
|
||||
max-width: 98vw;
|
||||
|
||||
|
@ -408,6 +408,7 @@ input[data-wslist]::-webkit-calendar-picker-indicator {
|
||||
|
||||
.datalist-polyfill {
|
||||
position: absolute;
|
||||
text-align: left;
|
||||
|
||||
.ws-po-box {
|
||||
padding: em(5) 0;
|
||||
@ -437,7 +438,7 @@ input[data-wslist]::-webkit-calendar-picker-indicator {
|
||||
|
||||
li {
|
||||
margin: em(1) 0;
|
||||
padding: em(2) em(10);
|
||||
padding: em(4) em(10);
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
cursor: default;
|
||||
@ -455,31 +456,26 @@ input[data-wslist]::-webkit-calendar-picker-indicator {
|
||||
}
|
||||
|
||||
.option-value {
|
||||
display: inline-block;
|
||||
display: block;
|
||||
text-overflow: ellipsis;
|
||||
max-width: 100%;
|
||||
color: #000;
|
||||
float: left;
|
||||
transition: color 400ms;
|
||||
}
|
||||
|
||||
.option-label {
|
||||
display: none;
|
||||
max-width: 100%;
|
||||
float: right;
|
||||
|
||||
font-size: 90%;
|
||||
color: #666;
|
||||
text-overflow: ellipsis;
|
||||
vertical-align: bottom;
|
||||
margin-top: 0.15em;
|
||||
margin-left: em(10);
|
||||
text-align: right;
|
||||
margin-top: 0.1em;
|
||||
transition: color 400ms;
|
||||
}
|
||||
|
||||
.has-option-label {
|
||||
.option-label {
|
||||
display: inline-block;
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
@ -499,20 +495,6 @@ input[data-wslist]::-webkit-calendar-picker-indicator {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.ws-is-rtl {
|
||||
|
||||
.option-value {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.option-label {
|
||||
float: left;
|
||||
margin-right: em(10);
|
||||
margin-left: 0;
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -366,6 +366,7 @@ input[data-wslist]::-webkit-calendar-picker-indicator {
|
||||
|
||||
.datalist-polyfill {
|
||||
position: absolute;
|
||||
text-align: left;
|
||||
}
|
||||
.datalist-polyfill .ws-po-box {
|
||||
padding: 0.38462em 0;
|
||||
@ -392,7 +393,7 @@ input[data-wslist]::-webkit-calendar-picker-indicator {
|
||||
}
|
||||
.datalist-polyfill .datalist-box li {
|
||||
margin: 0.07692em 0;
|
||||
padding: 0.15385em 0.76923em;
|
||||
padding: 0.30769em 0.76923em;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
cursor: default;
|
||||
@ -408,28 +409,22 @@ input[data-wslist]::-webkit-calendar-picker-indicator {
|
||||
font-style: normal;
|
||||
}
|
||||
.datalist-polyfill .datalist-box .option-value {
|
||||
display: inline-block;
|
||||
display: block;
|
||||
text-overflow: ellipsis;
|
||||
max-width: 100%;
|
||||
color: #000;
|
||||
float: left;
|
||||
transition: color 400ms;
|
||||
}
|
||||
.datalist-polyfill .datalist-box .option-label {
|
||||
display: none;
|
||||
max-width: 100%;
|
||||
float: right;
|
||||
font-size: 90%;
|
||||
color: #666;
|
||||
text-overflow: ellipsis;
|
||||
vertical-align: bottom;
|
||||
margin-top: 0.15em;
|
||||
margin-left: 0.76923em;
|
||||
text-align: right;
|
||||
margin-top: 0.1em;
|
||||
transition: color 400ms;
|
||||
}
|
||||
.datalist-polyfill .datalist-box .has-option-label .option-label {
|
||||
display: inline-block;
|
||||
display: block;
|
||||
}
|
||||
.datalist-polyfill .datalist-box .hidden-item {
|
||||
display: none !important;
|
||||
@ -444,15 +439,6 @@ input[data-wslist]::-webkit-calendar-picker-indicator {
|
||||
.datalist-polyfill .datalist-box .active-item .option-label {
|
||||
color: #eee;
|
||||
}
|
||||
.datalist-polyfill.ws-is-rtl .option-value {
|
||||
float: right;
|
||||
}
|
||||
.datalist-polyfill.ws-is-rtl .option-label {
|
||||
float: left;
|
||||
margin-right: 0.76923em;
|
||||
margin-left: 0;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.validity-alert {
|
||||
display: inline-block;
|
||||
@ -719,6 +705,9 @@ SASS:
|
||||
.hide-spinbtns .input-buttons > .step-controls {
|
||||
display: none;
|
||||
}
|
||||
.hide-spinbtns input[type="number"], [type="number"].hide-spinbtns {
|
||||
-moz-appearance: textfield;
|
||||
}
|
||||
.hide-spinbtns::-webkit-inner-spin-button,
|
||||
.hide-spinbtns ::-webkit-inner-spin-button {
|
||||
display: none;
|
||||
@ -733,6 +722,9 @@ SASS:
|
||||
.hide-inputbtns .input-buttons {
|
||||
display: none;
|
||||
}
|
||||
.hide-inputbtns input[type="number"], [type="number"].hide-inputbtns {
|
||||
-moz-appearance: textfield;
|
||||
}
|
||||
.hide-inputbtns::-webkit-inner-spin-button,
|
||||
.hide-inputbtns ::-webkit-inner-spin-button {
|
||||
display: none;
|
||||
@ -887,6 +879,10 @@ span.has-input-buttons {
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.ws-number[readonly][aria-readonly="false"] {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.input-buttons,
|
||||
.step-controls,
|
||||
.ws-popover-opener {
|
||||
@ -994,12 +990,10 @@ input[type="color"] {
|
||||
margin-right: -39px;
|
||||
}
|
||||
.input-button-size-2 .step-controls {
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
}
|
||||
:focus + .input-button-size-2 .step-controls, :hover + .input-button-size-2 .step-controls, :active + .input-button-size-2 .step-controls, .input-button-size-2:hover .step-controls {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
.step-controls {
|
||||
|
@ -366,6 +366,7 @@ input[data-wslist]::-webkit-calendar-picker-indicator {
|
||||
|
||||
.datalist-polyfill {
|
||||
position: absolute;
|
||||
text-align: left;
|
||||
}
|
||||
.datalist-polyfill .ws-po-box {
|
||||
padding: 0.38462em 0;
|
||||
@ -392,7 +393,7 @@ input[data-wslist]::-webkit-calendar-picker-indicator {
|
||||
}
|
||||
.datalist-polyfill .datalist-box li {
|
||||
margin: 0.07692em 0;
|
||||
padding: 0.15385em 0.76923em;
|
||||
padding: 0.30769em 0.76923em;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
cursor: default;
|
||||
@ -408,28 +409,22 @@ input[data-wslist]::-webkit-calendar-picker-indicator {
|
||||
font-style: normal;
|
||||
}
|
||||
.datalist-polyfill .datalist-box .option-value {
|
||||
display: inline-block;
|
||||
display: block;
|
||||
text-overflow: ellipsis;
|
||||
max-width: 100%;
|
||||
color: #000;
|
||||
float: left;
|
||||
transition: color 400ms;
|
||||
}
|
||||
.datalist-polyfill .datalist-box .option-label {
|
||||
display: none;
|
||||
max-width: 100%;
|
||||
float: right;
|
||||
font-size: 90%;
|
||||
color: #666;
|
||||
text-overflow: ellipsis;
|
||||
vertical-align: bottom;
|
||||
margin-top: 0.15em;
|
||||
margin-left: 0.76923em;
|
||||
text-align: right;
|
||||
margin-top: 0.1em;
|
||||
transition: color 400ms;
|
||||
}
|
||||
.datalist-polyfill .datalist-box .has-option-label .option-label {
|
||||
display: inline-block;
|
||||
display: block;
|
||||
}
|
||||
.datalist-polyfill .datalist-box .hidden-item {
|
||||
display: none !important;
|
||||
@ -444,15 +439,6 @@ input[data-wslist]::-webkit-calendar-picker-indicator {
|
||||
.datalist-polyfill .datalist-box .active-item .option-label {
|
||||
color: #eee;
|
||||
}
|
||||
.datalist-polyfill.ws-is-rtl .option-value {
|
||||
float: right;
|
||||
}
|
||||
.datalist-polyfill.ws-is-rtl .option-label {
|
||||
float: left;
|
||||
margin-right: 0.76923em;
|
||||
margin-left: 0;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.validity-alert {
|
||||
display: inline-block;
|
||||
|
@ -334,13 +334,13 @@ webshims.register('track-ui', function($, webshims, window, document, undefined)
|
||||
addTrackView();
|
||||
} else {
|
||||
|
||||
if(elem.is('.nonnative-api-active')){
|
||||
if(elem.hasClass('nonnative-api-active')){
|
||||
addTrackView();
|
||||
}
|
||||
elem
|
||||
.on('mediaelementapichange trackapichange', function(){
|
||||
|
||||
if(!usesNativeTrack() || elem.is('.nonnative-api-active')){
|
||||
if(!usesNativeTrack() || elem.hasClass('nonnative-api-active')){
|
||||
addTrackView();
|
||||
} else {
|
||||
clearTimeout(updateTimer);
|
||||
|
@ -12,6 +12,8 @@ class ModerationMailerPreview < ActionMailer::Preview
|
||||
def update
|
||||
ActionMailer::Base.default_url_options[:host] = 'localhost:3000'
|
||||
event = Event.last
|
||||
event.tags += ', ho'
|
||||
event.start_time += 1.day
|
||||
event.description = event.description + '
|
||||
hello world'
|
||||
ModerationMailer.update event, nil
|
||||
|
Loading…
Reference in New Issue
Block a user