webshims-rails 1.10.11 → 1.11.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/webshims-rails/version.rb +2 -2
- data/readme.textile +14 -1
- data/vendor/assets/javascripts/webshims/polyfiller.js +2 -1
- data/vendor/assets/javascripts/webshims/shims/combos/1.js +12 -63
- data/vendor/assets/javascripts/webshims/shims/combos/10.js +17 -7
- data/vendor/assets/javascripts/webshims/shims/combos/11.js +17 -3
- data/vendor/assets/javascripts/webshims/shims/combos/12.js +11 -12
- data/vendor/assets/javascripts/webshims/shims/combos/13.js +11 -12
- data/vendor/assets/javascripts/webshims/shims/combos/14.js +0 -4
- data/vendor/assets/javascripts/webshims/shims/combos/15.js +10 -59
- data/vendor/assets/javascripts/webshims/shims/combos/16.js +21 -71
- data/vendor/assets/javascripts/webshims/shims/combos/17.js +17 -3
- data/vendor/assets/javascripts/webshims/shims/combos/18.js +17 -3
- data/vendor/assets/javascripts/webshims/shims/combos/19.js +58 -19
- data/vendor/assets/javascripts/webshims/shims/combos/2.js +12 -67
- data/vendor/assets/javascripts/webshims/shims/combos/20.js +58 -19
- data/vendor/assets/javascripts/webshims/shims/combos/21.js +47 -3
- data/vendor/assets/javascripts/webshims/shims/combos/23.js +11 -12
- data/vendor/assets/javascripts/webshims/shims/combos/24.js +324 -79
- data/vendor/assets/javascripts/webshims/shims/combos/25.js +63 -21
- data/vendor/assets/javascripts/webshims/shims/combos/26.js +5 -6
- data/vendor/assets/javascripts/webshims/shims/combos/27.js +5 -2
- data/vendor/assets/javascripts/webshims/shims/combos/28.js +47 -7
- data/vendor/assets/javascripts/webshims/shims/combos/3.js +1 -55
- data/vendor/assets/javascripts/webshims/shims/combos/30.js +1 -55
- data/vendor/assets/javascripts/webshims/shims/combos/31.js +1 -55
- data/vendor/assets/javascripts/webshims/shims/combos/4.js +0 -4
- data/vendor/assets/javascripts/webshims/shims/combos/5.js +17 -3
- data/vendor/assets/javascripts/webshims/shims/combos/6.js +17 -3
- data/vendor/assets/javascripts/webshims/shims/combos/7.js +12 -67
- data/vendor/assets/javascripts/webshims/shims/combos/8.js +12 -67
- data/vendor/assets/javascripts/webshims/shims/combos/9.js +17 -7
- data/vendor/assets/javascripts/webshims/shims/dom-extend.js +0 -4
- data/vendor/assets/javascripts/webshims/shims/filereader.js +5 -2
- data/vendor/assets/javascripts/webshims/shims/form-core.js +1 -51
- data/vendor/assets/javascripts/webshims/shims/form-datalist-lazy.js +24 -15
- data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +6 -2
- data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +9 -4
- data/vendor/assets/javascripts/webshims/shims/form-validation.js +135 -24
- data/vendor/assets/javascripts/webshims/shims/form-validators.js +189 -55
- data/vendor/assets/javascripts/webshims/shims/forms-picker.js +4 -1
- data/vendor/assets/javascripts/webshims/shims/jpicker/jpicker.css +3 -1
- data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +11 -12
- data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +47 -3
- data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +28 -8
- data/vendor/assets/javascripts/webshims/shims/mediagroup.js +29 -0
- data/vendor/assets/javascripts/webshims/shims/range-ui.js +11 -1
- data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +17 -4
- data/vendor/assets/javascripts/webshims/shims/styles/shim.css +17 -6
- data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
- metadata +3 -3
- data/vendor/assets/javascripts/webshims/shims/swf/jwwebshims.swf +0 -0
@@ -13,7 +13,16 @@ webshims.register('form-validators', function($, webshims, window, document, und
|
|
13
13
|
var onEventTest = function(e){
|
14
14
|
webshims.refreshCustomValidityRules(e.target);
|
15
15
|
};
|
16
|
-
|
16
|
+
var noValidate = function(){
|
17
|
+
return !noValidate.types[this.type];
|
18
|
+
};
|
19
|
+
noValidate.types = {
|
20
|
+
hidden: 1,
|
21
|
+
image: 1,
|
22
|
+
button: 1,
|
23
|
+
reset: 1,
|
24
|
+
submit: 1
|
25
|
+
};
|
17
26
|
|
18
27
|
webshims.customErrorMessages = {};
|
19
28
|
webshims.addCustomValidityRule = function(name, test, defaultMessage){
|
@@ -22,68 +31,78 @@ webshims.register('form-validators', function($, webshims, window, document, und
|
|
22
31
|
webshims.customErrorMessages[name] = [];
|
23
32
|
webshims.customErrorMessages[name][''] = defaultMessage || name;
|
24
33
|
}
|
25
|
-
if(
|
26
|
-
$('input, select, textarea')
|
27
|
-
|
28
|
-
|
34
|
+
if(formReady){
|
35
|
+
$('input, select, textarea')
|
36
|
+
.filter(noValidate)
|
37
|
+
.each(function(){
|
38
|
+
testValidityRules(this);
|
39
|
+
})
|
40
|
+
;
|
29
41
|
}
|
30
42
|
};
|
31
43
|
webshims.refreshCustomValidityRules = function(elem){
|
32
|
-
if(!
|
33
|
-
|
34
|
-
var
|
44
|
+
if(!initTest){return;}
|
45
|
+
|
46
|
+
var data = $(elem).data() || $.data(elem, {});
|
47
|
+
var customMismatchedRule = data.customMismatchedRule;
|
35
48
|
var validity = $.prop(elem, 'validity') || {};
|
36
49
|
var message = '';
|
37
|
-
|
50
|
+
var setMessage = function(message, errorType){
|
51
|
+
blockCustom = true;
|
52
|
+
data.customMismatchedRule = message ? errorType : '';
|
53
|
+
|
54
|
+
if(typeof message != 'string'){
|
55
|
+
message = $(elem).data('errormessage') || elem.getAttribute('x-moz-errormessage') || webshims.customErrorMessages[errorType][webshims.activeLang()] || webshims.customErrorMessages[errorType][''];
|
56
|
+
}
|
57
|
+
|
58
|
+
if(typeof message == 'object'){
|
59
|
+
message = message[errorType] || message.customError || message.defaultMessage;
|
60
|
+
}
|
61
|
+
$(elem).setCustomValidity(message);
|
62
|
+
blockCustom = false;
|
63
|
+
};
|
64
|
+
if(customMismatchedRule || validity.valid || (data.dependentValidation && !data.dependentValidation._init)){
|
38
65
|
var val = $(elem).val();
|
39
66
|
$.each(customValidityRules, function(name, test){
|
40
|
-
message = test(elem, val) || '';
|
67
|
+
message = test(elem, val, data, setMessage) || '';
|
41
68
|
customMismatchedRule = name;
|
42
69
|
if(message){
|
43
|
-
|
44
|
-
if(typeof message != 'string'){
|
45
|
-
message = $(elem).data('errormessage') || elem.getAttribute('x-moz-errormessage') || webshims.customErrorMessages[name][webshims.activeLang()] || webshims.customErrorMessages[name][''];
|
46
|
-
}
|
47
|
-
|
48
|
-
if(typeof message == 'object'){
|
49
|
-
message = message[name] || message.customError || message.defaultMessage;
|
50
|
-
}
|
51
70
|
return false;
|
52
71
|
}
|
53
72
|
});
|
54
|
-
|
55
|
-
|
56
|
-
$.data(elem, 'customMismatchedRule', customMismatchedRule);
|
73
|
+
if(message != 'async'){
|
74
|
+
setMessage(message, customMismatchedRule);
|
57
75
|
}
|
58
|
-
$(elem).setCustomValidity(message);
|
59
76
|
}
|
60
|
-
|
77
|
+
return message;
|
61
78
|
};
|
62
79
|
var testValidityRules = webshims.refreshCustomValidityRules;
|
63
80
|
|
64
81
|
webshims.ready('forms form-validation', function(){
|
65
82
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
this.data('customMismatchedRule', '');
|
83
|
+
$.propHooks.setCustomValidity = {
|
84
|
+
get: function(elem){
|
85
|
+
if(!blockCustom){
|
86
|
+
$.data(elem, 'customMismatchedRule', '');
|
87
|
+
}
|
88
|
+
return null;
|
73
89
|
}
|
74
|
-
return oldCustomValidity.apply(this, arguments);
|
75
90
|
};
|
76
91
|
|
92
|
+
|
77
93
|
setTimeout(function(){
|
78
94
|
webshims.addReady(function(context, selfElement){
|
79
95
|
initTest = true;
|
80
|
-
$('input, select, textarea', context).add(selfElement.filter('input, select, textarea'))
|
81
|
-
|
82
|
-
|
83
|
-
|
96
|
+
$('input, select, textarea', context).add(selfElement.filter('input, select, textarea'))
|
97
|
+
.filter(noValidate)
|
98
|
+
.each(function(){
|
99
|
+
testValidityRules(this);
|
100
|
+
})
|
101
|
+
;
|
102
|
+
|
84
103
|
formReady = true;
|
85
104
|
});
|
86
|
-
$(document).on('refreshCustomValidityRules
|
105
|
+
$(document).on('refreshCustomValidityRules', onEventTest);
|
87
106
|
}, 9);
|
88
107
|
|
89
108
|
});
|
@@ -101,17 +120,20 @@ webshims.register('form-validators', function($, webshims, window, document, und
|
|
101
120
|
*/
|
102
121
|
(function(){
|
103
122
|
|
104
|
-
var addCustomValidityRule =
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
123
|
+
var addCustomValidityRule = webshims.addCustomValidityRule;
|
124
|
+
var getId = function(name){
|
125
|
+
return document.getElementById(name);
|
126
|
+
};
|
127
|
+
addCustomValidityRule('partialPattern', function(elem, val, pattern){
|
128
|
+
pattern = pattern.partialPattern;
|
129
|
+
if(!val || !pattern){return;}
|
109
130
|
return !(new RegExp('(' + pattern + ')', 'i').test(val));
|
110
131
|
}, 'This format is not allowed here.');
|
111
132
|
|
112
|
-
|
113
|
-
|
114
|
-
|
133
|
+
|
134
|
+
addCustomValidityRule('tooShort', function(elem, val, data){
|
135
|
+
if(!val || !data.minlength){return;}
|
136
|
+
return data.minlength > val.length;
|
115
137
|
}, 'Entered value is too short.');
|
116
138
|
|
117
139
|
var groupTimer = {};
|
@@ -129,7 +151,7 @@ webshims.register('form-validators', function($, webshims, window, document, und
|
|
129
151
|
.unbind('click.groupRequired')
|
130
152
|
.bind('click.groupRequired', function(){
|
131
153
|
checkboxes.filter('.group-required').each(function(){
|
132
|
-
|
154
|
+
webshims.refreshCustomValidityRules(this);
|
133
155
|
});
|
134
156
|
})
|
135
157
|
;
|
@@ -168,19 +190,16 @@ webshims.register('form-validators', function($, webshims, window, document, und
|
|
168
190
|
var getGroupElements = function(elem) {
|
169
191
|
return $(elem.form[elem.name]).filter('[type="radio"]');
|
170
192
|
};
|
171
|
-
|
172
|
-
if(
|
173
|
-
getGroupElements =
|
193
|
+
webshims.ready('form-validation', function(){
|
194
|
+
if(webshims.modules){
|
195
|
+
getGroupElements = webshims.modules["form-core"].getGroupElements || getGroupElements;
|
174
196
|
}
|
175
197
|
});
|
176
198
|
|
177
|
-
addCustomValidityRule('dependent', function(elem, val){
|
178
|
-
|
179
|
-
if( !
|
180
|
-
|
181
|
-
var data = $(elem).data('dependentValidation');
|
199
|
+
addCustomValidityRule('dependent', function(elem, val, data){
|
200
|
+
data = data.dependentValidation;
|
201
|
+
if( !data ){return;}
|
182
202
|
var specialVal;
|
183
|
-
if(!data){return;}
|
184
203
|
var depFn = function(e){
|
185
204
|
var val = $.prop(data.masterElement, data["from-prop"]);
|
186
205
|
if(specialVal){
|
@@ -229,7 +248,7 @@ webshims.register('form-validators', function($, webshims, window, document, und
|
|
229
248
|
$(data.masterElement.type === 'radio' && getGroupElements(data.masterElement) || data.masterElement).bind('change', depFn);
|
230
249
|
} else {
|
231
250
|
$(data.masterElement).bind('change', function(){
|
232
|
-
|
251
|
+
webshims.refreshCustomValidityRules(elem);
|
233
252
|
$(elem).getShadowElement().filter('.user-error, .user-success').trigger('refreshvalidityui');
|
234
253
|
});
|
235
254
|
}
|
@@ -243,6 +262,121 @@ webshims.register('form-validators', function($, webshims, window, document, und
|
|
243
262
|
}
|
244
263
|
|
245
264
|
}, 'The value of this field does not repeat the value of the other field');
|
265
|
+
|
266
|
+
|
267
|
+
if(window.JSON){
|
268
|
+
addCustomValidityRule('ajaxvalidate', function(elem, val, data){
|
269
|
+
if(!val || !data.ajaxvalidate){return;}
|
270
|
+
var opts;
|
271
|
+
if(!data.remoteValidate){
|
272
|
+
if(typeof data.ajaxvalidate == 'string'){
|
273
|
+
data.ajaxvalidate = {url: data.ajaxvalidate, depends: $([])};
|
274
|
+
} else {
|
275
|
+
data.ajaxvalidate.depends = data.ajaxvalidate.depends ? $(data.ajaxvalidate.depends).map(getId) : $([]);
|
276
|
+
}
|
277
|
+
|
278
|
+
data.ajaxvalidate.depends.on('refreshCustomValidityRules', function(){
|
279
|
+
webshims.refreshCustomValidityRules(elem);
|
280
|
+
});
|
281
|
+
|
282
|
+
opts = data.ajaxvalidate;
|
283
|
+
|
284
|
+
var remoteValidate = {
|
285
|
+
ajaxLoading: false,
|
286
|
+
restartAjax: false,
|
287
|
+
message: 'async',
|
288
|
+
cache: {},
|
289
|
+
update: function(remoteData){
|
290
|
+
if(this.ajaxLoading){
|
291
|
+
this.restartAjax = remoteData;
|
292
|
+
} else {
|
293
|
+
this.restartAjax = false;
|
294
|
+
this.ajaxLoading = true;
|
295
|
+
$.ajax(
|
296
|
+
$.extend({}, opts, {
|
297
|
+
url: opts.url,
|
298
|
+
dataType: 'json',
|
299
|
+
depData: remoteData,
|
300
|
+
data: opts.fullForm ?
|
301
|
+
$(elem).jProp('form').serializeArray() :
|
302
|
+
remoteData,
|
303
|
+
success: this.getResponse,
|
304
|
+
complete: this._complete
|
305
|
+
})
|
306
|
+
);
|
307
|
+
}
|
308
|
+
},
|
309
|
+
_complete: function(){
|
310
|
+
remoteValidate.ajaxLoading = false;
|
311
|
+
if(remoteValidate.restartAjax){
|
312
|
+
this.update(remoteValidate.restartAjax);
|
313
|
+
}
|
314
|
+
remoteValidate.restartAjax = false;
|
315
|
+
},
|
316
|
+
getResponse: function(data){
|
317
|
+
var old = webshims.refreshCustomValidityRules;
|
318
|
+
if(!data){
|
319
|
+
data = {message: '', valid: true};
|
320
|
+
} else if(typeof data == 'string'){
|
321
|
+
data = JSON.parse(data);
|
322
|
+
}
|
323
|
+
|
324
|
+
remoteValidate.message = ('message' in data) ? data.message : !data.valid;
|
325
|
+
remoteValidate.lastMessage = remoteValidate.message;
|
326
|
+
remoteValidate.blockUpdate = true;
|
327
|
+
$(elem).triggerHandler('refreshvalidityui');
|
328
|
+
remoteValidate.message = 'async';
|
329
|
+
remoteValidate.blockUpdate = false;
|
330
|
+
},
|
331
|
+
getData: function(){
|
332
|
+
var data;
|
333
|
+
data = {};
|
334
|
+
data[$.prop(elem, 'name') || $.prop(elem, 'id')] = $(elem).val();
|
335
|
+
opts.depends.each(function(){
|
336
|
+
if($(this).is(':invalid')){
|
337
|
+
data = false;
|
338
|
+
return false;
|
339
|
+
}
|
340
|
+
data[$.prop(this, 'name') || $.prop(this, 'id')] = $(this).val();
|
341
|
+
});
|
342
|
+
return data;
|
343
|
+
},
|
344
|
+
getTempMessage: function(){
|
345
|
+
var message = 'async';
|
346
|
+
var remoteData, dataStr;
|
347
|
+
if(!data.remoteValidate.blockUpdate){
|
348
|
+
remoteData = this.getData();
|
349
|
+
if(!remoteData){
|
350
|
+
message = '';
|
351
|
+
} else {
|
352
|
+
try {
|
353
|
+
dataStr = JSON.stringify(remoteData);
|
354
|
+
} catch(er){}
|
355
|
+
|
356
|
+
if(dataStr === this.lastString){
|
357
|
+
message = this.ajaxLoading ? 'async' : this.lastMessage;
|
358
|
+
} else {
|
359
|
+
this.lastString = dataStr;
|
360
|
+
this.lastMessage = 'async';
|
361
|
+
clearTimeout(data.remoteValidate.timer);
|
362
|
+
data.remoteValidate.timer = setTimeout(function(){
|
363
|
+
data.remoteValidate.update(remoteData);
|
364
|
+
}, 9);
|
365
|
+
}
|
366
|
+
|
367
|
+
}
|
368
|
+
} else {
|
369
|
+
message = remoteValidate.message;
|
370
|
+
}
|
371
|
+
return message;
|
372
|
+
}
|
373
|
+
};
|
374
|
+
data.remoteValidate = remoteValidate;
|
375
|
+
}
|
376
|
+
|
377
|
+
return data.remoteValidate.getTempMessage();
|
378
|
+
}, 'remote error');
|
379
|
+
}
|
246
380
|
})();
|
247
381
|
|
248
382
|
});
|
@@ -886,7 +886,10 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
|
|
886
886
|
'' :
|
887
887
|
' disabled="" '
|
888
888
|
;
|
889
|
-
|
889
|
+
if(label){
|
890
|
+
label = ' <span class="ws-label">'+ label +'</span>';
|
891
|
+
}
|
892
|
+
options.push('<li role="presentation"><button value="'+ val +'" '+disabled+' data-action="changeInput" tabindex="-1" role="option"><span class="ws-value">'+ data.formatValue(val, false) +'</span>'+ label +'</button></li>');
|
890
893
|
});
|
891
894
|
if(options.length){
|
892
895
|
id++;
|
@@ -175,11 +175,12 @@ table.jPicker {
|
|
175
175
|
.jPicker td.Radio {
|
176
176
|
margin: 0px;
|
177
177
|
padding: 0px;
|
178
|
-
width:
|
178
|
+
width: 32px;
|
179
179
|
}
|
180
180
|
.jPicker td.Radio input {
|
181
181
|
margin: 0px 5px 0px 0px;
|
182
182
|
padding: 0px;
|
183
|
+
display: inline-block;
|
183
184
|
}
|
184
185
|
.jPicker td.Text {
|
185
186
|
font-size: 12px !important;
|
@@ -205,6 +206,7 @@ table.jPicker {
|
|
205
206
|
}
|
206
207
|
.jPicker tr.Hex td.Text input.Hex {
|
207
208
|
width: 45px;
|
209
|
+
display: inline-block;
|
208
210
|
margin-left: 2px;
|
209
211
|
text-align: center;
|
210
212
|
}
|
@@ -24,6 +24,7 @@
|
|
24
24
|
if(hasNative){
|
25
25
|
var videoElem = document.createElement('video');
|
26
26
|
Modernizr.videoBuffered = ('buffered' in videoElem);
|
27
|
+
Modernizr.mediaDefaultMuted = ('defaultMuted' in videoElem);
|
27
28
|
supportsLoop = ('loop' in videoElem);
|
28
29
|
|
29
30
|
webshims.capturingEvents(['play', 'playing', 'waiting', 'paused', 'ended', 'durationchange', 'loadedmetadata', 'canplay', 'volumechange']);
|
@@ -37,20 +38,15 @@
|
|
37
38
|
|
38
39
|
if(!options.preferFlash){
|
39
40
|
var noSwitch = {
|
40
|
-
1: 1
|
41
|
-
2: 1
|
41
|
+
1: 1
|
42
42
|
};
|
43
43
|
var switchOptions = function(e){
|
44
44
|
var media, error, parent;
|
45
45
|
if(!options.preferFlash &&
|
46
46
|
($(e.target).is('audio, video') || ((parent = e.target.parentNode) && $('source:last', parent)[0] == e.target)) &&
|
47
|
-
(media = $(e.target).closest('audio, video')) &&
|
47
|
+
(media = $(e.target).closest('audio, video')) && (error = media.prop('error')) && !noSwitch[error.code]
|
48
48
|
){
|
49
|
-
|
50
|
-
webshims.warn("There was an unspecified error on a mediaelement");
|
51
|
-
return;
|
52
|
-
|
53
|
-
}
|
49
|
+
|
54
50
|
$(function(){
|
55
51
|
if(hasSwf && !options.preferFlash){
|
56
52
|
loadSwf();
|
@@ -62,7 +58,7 @@
|
|
62
58
|
$('audio, video').each(function(){
|
63
59
|
webshims.mediaelement.selectSource(this);
|
64
60
|
});
|
65
|
-
webshims.error("switching mediaelements option to 'preferFlash', due to an error with native player: "+e.target.src+" Mediaerror: "+ media.prop('error'));
|
61
|
+
webshims.error("switching mediaelements option to 'preferFlash', due to an error with native player: "+e.target.src+" Mediaerror: "+ media.prop('error')+ 'first error: '+ error);
|
66
62
|
}
|
67
63
|
}, 9);
|
68
64
|
});
|
@@ -268,7 +264,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
|
|
268
264
|
if(src.indexOf('rtmp') === 0){
|
269
265
|
return nodeName+'/rtmp';
|
270
266
|
}
|
271
|
-
src = src.split('?')[0].split('.');
|
267
|
+
src = src.split('?')[0].split('#')[0].split('.');
|
272
268
|
src = src[src.length - 1];
|
273
269
|
var mt;
|
274
270
|
|
@@ -387,7 +383,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
|
|
387
383
|
webshims.error('mediaelementError: '+ message);
|
388
384
|
setTimeout(function(){
|
389
385
|
if($(elem).data('mediaerror')){
|
390
|
-
$(elem).trigger('mediaerror');
|
386
|
+
$(elem).addClass('media-error').trigger('mediaerror');
|
391
387
|
}
|
392
388
|
}, 1);
|
393
389
|
}
|
@@ -451,6 +447,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
|
|
451
447
|
var parent = elem.parentNode;
|
452
448
|
|
453
449
|
clearTimeout(baseData.loadTimer);
|
450
|
+
$(elem).removeClass('media-error');
|
454
451
|
$.data(elem, 'mediaerror', false);
|
455
452
|
|
456
453
|
if(!_srces.length || !parent || parent.nodeType != 1 || stopParent.test(parent.nodeName || '')){return;}
|
@@ -478,7 +475,9 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
|
|
478
475
|
var testFixMedia = function(){
|
479
476
|
if(webshims.implement(this, 'mediaelement')){
|
480
477
|
selectSource(this);
|
481
|
-
|
478
|
+
if(!Modernizr.mediaDefaultMuted && $.attr(this, 'muted') != null){
|
479
|
+
$.prop(this, 'muted', true);
|
480
|
+
}
|
482
481
|
//fixes for FF 12 and IE9/10 || does not hurt, if run in other browsers
|
483
482
|
if(hasNative && (!supportsLoop || ('ActiveXObject' in window))){
|
484
483
|
var bufferTimer;
|
@@ -16,6 +16,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
16
16
|
networkState: 0,
|
17
17
|
videoHeight: 0,
|
18
18
|
videoWidth: 0,
|
19
|
+
seeking: false,
|
19
20
|
error: null,
|
20
21
|
buffered: {
|
21
22
|
start: function(index){
|
@@ -119,7 +120,12 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
119
120
|
}
|
120
121
|
data.readyState = readyState;
|
121
122
|
};
|
122
|
-
|
123
|
+
var callSeeked = function(data){
|
124
|
+
if(data.seeking && Math.abs(data.currentTime - data._lastSeektime) < 2){
|
125
|
+
data.seeking = false;
|
126
|
+
$(data._elem).triggerHandler('seeked');
|
127
|
+
}
|
128
|
+
};
|
123
129
|
|
124
130
|
|
125
131
|
mediaelement.jarisEvent = {};
|
@@ -148,6 +154,20 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
148
154
|
}
|
149
155
|
}
|
150
156
|
},
|
157
|
+
onSeek: function(jaris, data){
|
158
|
+
data._lastSeektime = jaris.seekTime;
|
159
|
+
|
160
|
+
data.seeking = true;
|
161
|
+
$(data._elem).triggerHandler('seeking');
|
162
|
+
clearTimeout(data._seekedTimer);
|
163
|
+
data._seekedTimer = setTimeout(function(){
|
164
|
+
callSeeked(data);
|
165
|
+
data.seeking = false;
|
166
|
+
}, 300);
|
167
|
+
},
|
168
|
+
onConnectionFailed: function(){
|
169
|
+
webshims.error('media error');
|
170
|
+
},
|
151
171
|
onNotBuffering: function(jaris, data){
|
152
172
|
setReadyState(3, data);
|
153
173
|
},
|
@@ -203,7 +223,9 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
203
223
|
setReadyState(3, data);
|
204
224
|
trigger(data._elem, 'playing');
|
205
225
|
}
|
206
|
-
|
226
|
+
if(data.seeking){
|
227
|
+
callSeeked(data);
|
228
|
+
}
|
207
229
|
trigger(data._elem, 'timeupdate');
|
208
230
|
},
|
209
231
|
onProgress: function(jaris, data){
|
@@ -259,6 +281,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
259
281
|
|
260
282
|
return function(jaris, data){
|
261
283
|
var i = 0;
|
284
|
+
|
262
285
|
var doneFn = function(){
|
263
286
|
if(i > 9){
|
264
287
|
data.tryedReframeing = 0;
|
@@ -418,11 +441,12 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
418
441
|
|
419
442
|
|
420
443
|
var resetSwfProps = (function(){
|
421
|
-
var resetProtoProps = ['_calledMeta', 'lastDuration', '_bufferedEnd', '_bufferedStart', '_ppFlag', 'currentSrc', 'currentTime', 'duration', 'ended', 'networkState', 'paused', 'videoHeight', 'videoWidth'];
|
444
|
+
var resetProtoProps = ['_calledMeta', 'lastDuration', '_bufferedEnd', '_bufferedStart', '_ppFlag', 'currentSrc', 'currentTime', 'duration', 'ended', 'networkState', 'paused', 'seeking', 'videoHeight', 'videoWidth'];
|
422
445
|
var len = resetProtoProps.length;
|
423
446
|
return function(data){
|
424
447
|
|
425
448
|
if(!data){return;}
|
449
|
+
clearTimeout(data._seekedTimer);
|
426
450
|
var lenI = len;
|
427
451
|
var networkState = data.networkState;
|
428
452
|
setReadyState(0, data);
|
@@ -864,6 +888,8 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
864
888
|
descs[key].set = setFn;
|
865
889
|
};
|
866
890
|
|
891
|
+
createGetSetProp('seeking');
|
892
|
+
|
867
893
|
createGetSetProp('volume', function(v){
|
868
894
|
var data = getSwfDataFromElem(this);
|
869
895
|
if(data){
|
@@ -974,8 +1000,26 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
974
1000
|
});
|
975
1001
|
|
976
1002
|
mediaSup = webshims.defineNodeNameProperties(nodeName, descs, 'prop');
|
1003
|
+
|
1004
|
+
if(!Modernizr.mediaDefaultMuted){
|
1005
|
+
webshims.defineNodeNameProperties(nodeName, {
|
1006
|
+
defaultMuted: {
|
1007
|
+
get: function(){
|
1008
|
+
return $.attr(this, 'muted') != null;
|
1009
|
+
},
|
1010
|
+
set: function(val){
|
1011
|
+
if(val){
|
1012
|
+
$.attr(this, 'muted', '');
|
1013
|
+
} else {
|
1014
|
+
$(this).removeAttr('muted');
|
1015
|
+
}
|
1016
|
+
}
|
1017
|
+
}
|
1018
|
+
}, 'prop');
|
1019
|
+
}
|
977
1020
|
});
|
978
1021
|
|
1022
|
+
|
979
1023
|
if(hasFlash && $.cleanData){
|
980
1024
|
var oldClean = $.cleanData;
|
981
1025
|
var flashNames = {
|