webshims-rails 1.10.11 → 1.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 = {
|