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.
Files changed (53) hide show
  1. checksums.yaml +8 -8
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/readme.textile +14 -1
  4. data/vendor/assets/javascripts/webshims/polyfiller.js +2 -1
  5. data/vendor/assets/javascripts/webshims/shims/combos/1.js +12 -63
  6. data/vendor/assets/javascripts/webshims/shims/combos/10.js +17 -7
  7. data/vendor/assets/javascripts/webshims/shims/combos/11.js +17 -3
  8. data/vendor/assets/javascripts/webshims/shims/combos/12.js +11 -12
  9. data/vendor/assets/javascripts/webshims/shims/combos/13.js +11 -12
  10. data/vendor/assets/javascripts/webshims/shims/combos/14.js +0 -4
  11. data/vendor/assets/javascripts/webshims/shims/combos/15.js +10 -59
  12. data/vendor/assets/javascripts/webshims/shims/combos/16.js +21 -71
  13. data/vendor/assets/javascripts/webshims/shims/combos/17.js +17 -3
  14. data/vendor/assets/javascripts/webshims/shims/combos/18.js +17 -3
  15. data/vendor/assets/javascripts/webshims/shims/combos/19.js +58 -19
  16. data/vendor/assets/javascripts/webshims/shims/combos/2.js +12 -67
  17. data/vendor/assets/javascripts/webshims/shims/combos/20.js +58 -19
  18. data/vendor/assets/javascripts/webshims/shims/combos/21.js +47 -3
  19. data/vendor/assets/javascripts/webshims/shims/combos/23.js +11 -12
  20. data/vendor/assets/javascripts/webshims/shims/combos/24.js +324 -79
  21. data/vendor/assets/javascripts/webshims/shims/combos/25.js +63 -21
  22. data/vendor/assets/javascripts/webshims/shims/combos/26.js +5 -6
  23. data/vendor/assets/javascripts/webshims/shims/combos/27.js +5 -2
  24. data/vendor/assets/javascripts/webshims/shims/combos/28.js +47 -7
  25. data/vendor/assets/javascripts/webshims/shims/combos/3.js +1 -55
  26. data/vendor/assets/javascripts/webshims/shims/combos/30.js +1 -55
  27. data/vendor/assets/javascripts/webshims/shims/combos/31.js +1 -55
  28. data/vendor/assets/javascripts/webshims/shims/combos/4.js +0 -4
  29. data/vendor/assets/javascripts/webshims/shims/combos/5.js +17 -3
  30. data/vendor/assets/javascripts/webshims/shims/combos/6.js +17 -3
  31. data/vendor/assets/javascripts/webshims/shims/combos/7.js +12 -67
  32. data/vendor/assets/javascripts/webshims/shims/combos/8.js +12 -67
  33. data/vendor/assets/javascripts/webshims/shims/combos/9.js +17 -7
  34. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +0 -4
  35. data/vendor/assets/javascripts/webshims/shims/filereader.js +5 -2
  36. data/vendor/assets/javascripts/webshims/shims/form-core.js +1 -51
  37. data/vendor/assets/javascripts/webshims/shims/form-datalist-lazy.js +24 -15
  38. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +6 -2
  39. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +9 -4
  40. data/vendor/assets/javascripts/webshims/shims/form-validation.js +135 -24
  41. data/vendor/assets/javascripts/webshims/shims/form-validators.js +189 -55
  42. data/vendor/assets/javascripts/webshims/shims/forms-picker.js +4 -1
  43. data/vendor/assets/javascripts/webshims/shims/jpicker/jpicker.css +3 -1
  44. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +11 -12
  45. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +47 -3
  46. data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +28 -8
  47. data/vendor/assets/javascripts/webshims/shims/mediagroup.js +29 -0
  48. data/vendor/assets/javascripts/webshims/shims/range-ui.js +11 -1
  49. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +17 -4
  50. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +17 -6
  51. data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
  52. metadata +3 -3
  53. 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($.isReady && formReady){
26
- $('input, select, textarea').each(function(){
27
- testValidityRules(this);
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(!elem.form || (!initTest && !$.prop(elem, 'willValidate')) ){return;}
33
- blockCustom = true;
34
- var customMismatchedRule = $.data(elem, 'customMismatchedRule');
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
- if(customMismatchedRule || !validity.customError){
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
- if(message){
56
- $.data(elem, 'customMismatchedRule', customMismatchedRule);
73
+ if(message != 'async'){
74
+ setMessage(message, customMismatchedRule);
57
75
  }
58
- $(elem).setCustomValidity(message);
59
76
  }
60
- blockCustom = false;
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
- var oldCustomValidity = $.fn.setCustomValidity;
68
-
69
-
70
- $.fn.setCustomValidity = function(message){
71
- if(!blockCustom){
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')).each(function(){
81
- testValidityRules(this);
82
- });
83
- initTest = false;
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 change', onEventTest);
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 = $.webshims.addCustomValidityRule;
105
- addCustomValidityRule('partialPattern', function(elem, val){
106
- if(!val || !elem.getAttribute('data-partial-pattern')){return;}
107
- var pattern = $(elem).data('partial-pattern');
108
- if(!pattern){return;}
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
- addCustomValidityRule('tooShort', function(elem, val){
113
- if(!val || !elem.getAttribute('data-minlength')){return;}
114
- return $(elem).data('minlength') > val.length;
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
- $.webshims.refreshCustomValidityRules(this);
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
- $.webshims.ready('form-validation', function(){
172
- if($.webshims.modules){
173
- getGroupElements = $.webshims.modules["form-core"].getGroupElements || 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( !elem.getAttribute('data-dependent-validation') ){return;}
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
- $.webshims.refreshCustomValidityRules(elem);
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
- options.push('<li role="presentation"><button value="'+ val +'" '+disabled+' data-action="changeInput" tabindex="-1" role="option">'+ (label || data.formatValue(val, false)) +'</button></li>');
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: 31px;
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')) && !noSwitch[(error = media.prop('error'))]
47
+ (media = $(e.target).closest('audio, video')) && (error = media.prop('error')) && !noSwitch[error.code]
48
48
  ){
49
- if(error == null){
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 = {