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.
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 = {