webshims-rails 1.11.2 → 1.11.3

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 (38) hide show
  1. checksums.yaml +6 -14
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/webshims/polyfiller.js +3 -4
  4. data/vendor/assets/javascripts/webshims/shims/combos/1.js +20 -8
  5. data/vendor/assets/javascripts/webshims/shims/combos/10.js +43 -2
  6. data/vendor/assets/javascripts/webshims/shims/combos/11.js +3 -0
  7. data/vendor/assets/javascripts/webshims/shims/combos/12.js +12 -4
  8. data/vendor/assets/javascripts/webshims/shims/combos/13.js +12 -4
  9. data/vendor/assets/javascripts/webshims/shims/combos/14.js +40 -2
  10. data/vendor/assets/javascripts/webshims/shims/combos/15.js +48 -6
  11. data/vendor/assets/javascripts/webshims/shims/combos/16.js +60 -10
  12. data/vendor/assets/javascripts/webshims/shims/combos/17.js +3 -0
  13. data/vendor/assets/javascripts/webshims/shims/combos/18.js +3 -0
  14. data/vendor/assets/javascripts/webshims/shims/combos/19.js +115 -17
  15. data/vendor/assets/javascripts/webshims/shims/combos/2.js +60 -10
  16. data/vendor/assets/javascripts/webshims/shims/combos/20.js +115 -17
  17. data/vendor/assets/javascripts/webshims/shims/combos/21.js +63 -11
  18. data/vendor/assets/javascripts/webshims/shims/combos/23.js +12 -4
  19. data/vendor/assets/javascripts/webshims/shims/combos/24.js +3 -5
  20. data/vendor/assets/javascripts/webshims/shims/combos/25.js +115 -17
  21. data/vendor/assets/javascripts/webshims/shims/combos/26.js +40 -2
  22. data/vendor/assets/javascripts/webshims/shims/combos/3.js +48 -6
  23. data/vendor/assets/javascripts/webshims/shims/combos/30.js +48 -6
  24. data/vendor/assets/javascripts/webshims/shims/combos/31.js +48 -6
  25. data/vendor/assets/javascripts/webshims/shims/combos/4.js +40 -2
  26. data/vendor/assets/javascripts/webshims/shims/combos/5.js +3 -0
  27. data/vendor/assets/javascripts/webshims/shims/combos/6.js +3 -0
  28. data/vendor/assets/javascripts/webshims/shims/combos/7.js +60 -10
  29. data/vendor/assets/javascripts/webshims/shims/combos/8.js +60 -10
  30. data/vendor/assets/javascripts/webshims/shims/combos/9.js +43 -2
  31. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +40 -2
  32. data/vendor/assets/javascripts/webshims/shims/form-core.js +8 -4
  33. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +3 -0
  34. data/vendor/assets/javascripts/webshims/shims/form-shim-extend2.js +3 -5
  35. data/vendor/assets/javascripts/webshims/shims/form-validation.js +137 -0
  36. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +12 -4
  37. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +63 -11
  38. metadata +6 -6
@@ -3,6 +3,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
3
3
  "use strict";
4
4
  var supportHrefNormalized = !('hrefNormalized' in $.support) || $.support.hrefNormalized;
5
5
  var supportGetSetAttribute = !('getSetAttribute' in $.support) || $.support.getSetAttribute;
6
+ var has = Object.prototype.hasOwnProperty;
6
7
  webshims.assumeARIA = supportGetSetAttribute || Modernizr.canvas || Modernizr.video || Modernizr.boxsizing;
7
8
 
8
9
  if($('<input type="email" />').attr('type') == 'text' || $('<form />').attr('novalidate') === "" || ('required' in $('<input />')[0].attributes)){
@@ -75,6 +76,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
75
76
  //proxying attribute
76
77
  var olds = {};
77
78
  var havePolyfill = {};
79
+ var hasPolyfillMethod = {};
78
80
  var extendedProps = {};
79
81
  var extendQ = {};
80
82
  var modifyProps = {};
@@ -180,6 +182,39 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
180
182
  };
181
183
  });
182
184
 
185
+ //add support for $('video').trigger('play') in case extendNative is set to false
186
+ if(!webshims.cfg.extendNative && !webshims.cfg.noTriggerOverride){
187
+ (function(oldTrigger){
188
+ $.event.trigger = function(event, data, elem, onlyHandlers){
189
+
190
+ if(!hasPolyfillMethod[event] || onlyHandlers || !elem || elem.nodeType !== 1){
191
+ return oldTrigger.apply(this, arguments);
192
+ }
193
+ var ret, isOrig, origName;
194
+ var origFn = elem[event];
195
+ var polyfilledFn = $.prop(elem, event);
196
+ var changeFn = polyfilledFn && origFn != polyfilledFn;
197
+ if(changeFn){
198
+ origName = '__ws'+event;
199
+ isOrig = (event in elem) && has.call(elem, event);
200
+ elem[event] = polyfilledFn;
201
+ elem[origName] = origFn;
202
+ }
203
+
204
+ ret = oldTrigger.apply(this, arguments);
205
+ if (changeFn) {
206
+ if(isOrig){
207
+ elem[event] = origFn;
208
+ } else {
209
+ delete elem[event];
210
+ }
211
+ delete elem[origName];
212
+ }
213
+
214
+ return ret;
215
+ };
216
+ })($.event.trigger);
217
+ }
183
218
 
184
219
  ['removeAttr', 'prop', 'attr'].forEach(function(type){
185
220
  olds[type] = $[type];
@@ -264,6 +299,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
264
299
  }
265
300
  var oldDesc = extendedProps[nodeName][prop][type];
266
301
  var getSup = function(propType, descriptor, oDesc){
302
+ var origProp;
267
303
  if(descriptor && descriptor[propType]){
268
304
  return descriptor[propType];
269
305
  }
@@ -280,8 +316,10 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
280
316
  };
281
317
  }
282
318
  if(type == 'prop' && propType == 'value' && desc.value.apply){
319
+ origProp = '__ws'+prop;
320
+ hasPolyfillMethod[prop] = true;
283
321
  return function(value){
284
- var sup = olds[type](this, prop);
322
+ var sup = this[origProp] || olds[type](this, prop);
285
323
  if(sup && sup.apply){
286
324
  sup = sup.apply(this, arguments);
287
325
  }
@@ -319,7 +357,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
319
357
 
320
358
  var extendNativeValue = (function(){
321
359
  var UNKNOWN = webshims.getPrototypeOf(document.createElement('foobar'));
322
- var has = Object.prototype.hasOwnProperty;
360
+
323
361
  //see also: https://github.com/lojjic/PIE/issues/40 | https://prototype.lighthouseapp.com/projects/8886/tickets/1107-ie8-fatal-crash-when-prototypejs-is-loaded-with-rounded-cornershtc
324
362
  var isExtendNativeSave = Modernizr.advancedObjectProperties && Modernizr.objectAccessor;
325
363
  return function(nodeName, prop, desc){
@@ -1924,6 +1962,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1924
1962
  if(!langCfg['datetime-local']){
1925
1963
  langCfg['datetime-local'] = {};
1926
1964
  }
1965
+ if(!langCfg.time){
1966
+ langCfg.time = {};
1967
+ }
1927
1968
  if(!langCfg['datetime-local'].currentText && langCfg.time.currentText){
1928
1969
  langCfg['datetime-local'].currentText = langCfg.time.currentText;
1929
1970
  }
@@ -3,6 +3,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
3
3
  "use strict";
4
4
  var supportHrefNormalized = !('hrefNormalized' in $.support) || $.support.hrefNormalized;
5
5
  var supportGetSetAttribute = !('getSetAttribute' in $.support) || $.support.getSetAttribute;
6
+ var has = Object.prototype.hasOwnProperty;
6
7
  webshims.assumeARIA = supportGetSetAttribute || Modernizr.canvas || Modernizr.video || Modernizr.boxsizing;
7
8
 
8
9
  if($('<input type="email" />').attr('type') == 'text' || $('<form />').attr('novalidate') === "" || ('required' in $('<input />')[0].attributes)){
@@ -75,6 +76,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
75
76
  //proxying attribute
76
77
  var olds = {};
77
78
  var havePolyfill = {};
79
+ var hasPolyfillMethod = {};
78
80
  var extendedProps = {};
79
81
  var extendQ = {};
80
82
  var modifyProps = {};
@@ -180,6 +182,39 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
180
182
  };
181
183
  });
182
184
 
185
+ //add support for $('video').trigger('play') in case extendNative is set to false
186
+ if(!webshims.cfg.extendNative && !webshims.cfg.noTriggerOverride){
187
+ (function(oldTrigger){
188
+ $.event.trigger = function(event, data, elem, onlyHandlers){
189
+
190
+ if(!hasPolyfillMethod[event] || onlyHandlers || !elem || elem.nodeType !== 1){
191
+ return oldTrigger.apply(this, arguments);
192
+ }
193
+ var ret, isOrig, origName;
194
+ var origFn = elem[event];
195
+ var polyfilledFn = $.prop(elem, event);
196
+ var changeFn = polyfilledFn && origFn != polyfilledFn;
197
+ if(changeFn){
198
+ origName = '__ws'+event;
199
+ isOrig = (event in elem) && has.call(elem, event);
200
+ elem[event] = polyfilledFn;
201
+ elem[origName] = origFn;
202
+ }
203
+
204
+ ret = oldTrigger.apply(this, arguments);
205
+ if (changeFn) {
206
+ if(isOrig){
207
+ elem[event] = origFn;
208
+ } else {
209
+ delete elem[event];
210
+ }
211
+ delete elem[origName];
212
+ }
213
+
214
+ return ret;
215
+ };
216
+ })($.event.trigger);
217
+ }
183
218
 
184
219
  ['removeAttr', 'prop', 'attr'].forEach(function(type){
185
220
  olds[type] = $[type];
@@ -264,6 +299,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
264
299
  }
265
300
  var oldDesc = extendedProps[nodeName][prop][type];
266
301
  var getSup = function(propType, descriptor, oDesc){
302
+ var origProp;
267
303
  if(descriptor && descriptor[propType]){
268
304
  return descriptor[propType];
269
305
  }
@@ -280,8 +316,10 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
280
316
  };
281
317
  }
282
318
  if(type == 'prop' && propType == 'value' && desc.value.apply){
319
+ origProp = '__ws'+prop;
320
+ hasPolyfillMethod[prop] = true;
283
321
  return function(value){
284
- var sup = olds[type](this, prop);
322
+ var sup = this[origProp] || olds[type](this, prop);
285
323
  if(sup && sup.apply){
286
324
  sup = sup.apply(this, arguments);
287
325
  }
@@ -319,7 +357,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
319
357
 
320
358
  var extendNativeValue = (function(){
321
359
  var UNKNOWN = webshims.getPrototypeOf(document.createElement('foobar'));
322
- var has = Object.prototype.hasOwnProperty;
360
+
323
361
  //see also: https://github.com/lojjic/PIE/issues/40 | https://prototype.lighthouseapp.com/projects/8886/tickets/1107-ie8-fatal-crash-when-prototypejs-is-loaded-with-rounded-cornershtc
324
362
  var isExtendNativeSave = Modernizr.advancedObjectProperties && Modernizr.objectAccessor;
325
363
  return function(nodeName, prop, desc){
@@ -46,17 +46,21 @@ webshims.register('form-core', function($, webshims, window, document, undefined
46
46
  /*
47
47
  * Selectors for all browsers
48
48
  */
49
+ var rElementsGroup = /^(?:form|fieldset)$/i;
49
50
  var hasInvalid = function(elem){
50
51
  var ret = false;
51
52
  $(elem).jProp('elements').each(function(){
52
- ret = $(this).is(':invalid');
53
- if(ret){
54
- return false;
53
+ if(!rElementsGroup.test(elem.nodeName || '')){
54
+ ret = $(this).is(':invalid');
55
+ if(ret){
56
+ return false;
57
+ }
55
58
  }
59
+
56
60
  });
57
61
  return ret;
58
62
  };
59
- var rElementsGroup = /^(?:form)$/i;///^(?:form|fieldset)$/i
63
+
60
64
  $.extend($.expr[":"], {
61
65
  "valid-element": function(elem){
62
66
  return rElementsGroup.test(elem.nodeName || '') ? !hasInvalid(elem) :!!($.prop(elem, 'willValidate') && isValid(elem));
@@ -268,6 +268,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
268
268
  if(!langCfg['datetime-local']){
269
269
  langCfg['datetime-local'] = {};
270
270
  }
271
+ if(!langCfg.time){
272
+ langCfg.time = {};
273
+ }
271
274
  if(!langCfg['datetime-local'].currentText && langCfg.time.currentText){
272
275
  langCfg['datetime-local'].currentText = langCfg.time.currentText;
273
276
  }
@@ -577,6 +577,7 @@ try {
577
577
  }
578
578
 
579
579
  (function(){
580
+ if(options.noPlaceholderPolyfill){return;}
580
581
  var bustedPlaceholder;
581
582
  Modernizr.textareaPlaceholder = !!('placeholder' in $('<textarea />')[0]);
582
583
  if(Modernizr.input.placeholder && options.overridePlaceholder){
@@ -759,7 +760,6 @@ try {
759
760
  create: function(elem){
760
761
  var data = $.data(elem, 'placeHolder');
761
762
  var form;
762
- var responsiveElem;
763
763
  if(data){return data;}
764
764
  data = $.data(elem, 'placeHolder', {});
765
765
 
@@ -779,7 +779,6 @@ try {
779
779
  if(elem.type == 'password' || isOver){
780
780
  data.text = createPlaceholder(elem);
781
781
  if(isResponsive || $(elem).is('.responsive-width') || (elem.currentStyle || {width: ''}).width.indexOf('%') != -1){
782
- responsiveElem = true;
783
782
  data.box = data.text;
784
783
  } else {
785
784
  data.box = $(elem)
@@ -1019,7 +1018,6 @@ try {
1019
1018
 
1020
1019
  //pro forma
1021
1020
  ,color: 1
1022
- //,range: 1
1023
1021
  },
1024
1022
  observe = function(input){
1025
1023
  var timer,
@@ -1041,7 +1039,7 @@ try {
1041
1039
  extraTimer = setTimeout(trigger, 9);
1042
1040
  },
1043
1041
  unbind = function(){
1044
- input.unbind('focusout', unbind).unbind('keyup keypress keydown paste cut', extraTest).unbind('input change updateInput', trigger);
1042
+ input.unbind('focusout', unbind).unbind('keyup keypress keydown paste cut', extraTest).unbind('input change updateInput triggerinput', trigger);
1045
1043
  clearInterval(timer);
1046
1044
  setTimeout(function(){
1047
1045
  trigger();
@@ -1057,7 +1055,7 @@ try {
1057
1055
  input.on({
1058
1056
  'keyup keypress keydown paste cut': extraTest,
1059
1057
  focusout: unbind,
1060
- 'input updateInput change': trigger
1058
+ 'input updateInput change triggerinput': trigger
1061
1059
  });
1062
1060
  }
1063
1061
  ;
@@ -770,4 +770,141 @@ webshims.register('form-validation', function($, webshims, window, document, und
770
770
 
771
771
  })();
772
772
  }
773
+
774
+ if(!$.event.special.change && !$.event.special.input && Modernizr.inputtypes && options.fixRangeChange){
775
+ var rangeChange = {
776
+
777
+ trigger: function(e){
778
+ if(rangeChange.blockElement){
779
+ rangeChange.blockElement = false;
780
+ setTimeout(function(){
781
+ if(rangeChange.requestedChange && rangeChange.value != rangeChange.requestedChange.value){
782
+ $(rangeChange.requestedChange).trigger('change');
783
+ }
784
+ rangeChange.value = false;
785
+ }, 9);
786
+ }
787
+
788
+ },
789
+ lastValue: false,
790
+ updateInputValue: function(e){
791
+ rangeChange.lastValue = e.target.value;
792
+ },
793
+ triggerInput: function(e){
794
+ if(rangeChange.lastValue !== false && rangeChange.lastValue != e.target.value){
795
+ $(e.target).trigger('input');
796
+ }
797
+ },
798
+ inputTeardown: function(e){
799
+ $(e.target)
800
+ .off('input', rangeChange.updateInputValue)
801
+ .off('blur', rangeChange.inputTeardown)
802
+ ;
803
+ rangeChange.lastValue = false;
804
+ },
805
+ inputSetup: function(e){
806
+
807
+ if(e.target.type == 'range'){
808
+ rangeChange.inputTeardown(e);
809
+ rangeChange.lastValue = e.target.value;
810
+ $(e.target)
811
+ .on('input', rangeChange.updateInputValue)
812
+ .on('blur', rangeChange.inputTeardown)
813
+ ;
814
+ }
815
+ }
816
+ };
817
+
818
+
819
+ $.each([{name: 'key', evt: 'keyup'}, {name: 'mouse', evt: 'mouseup'}, {name: 'touch', evt: 'touchend'}], function(i, obj){
820
+ var setup = obj.name + 'Setup';
821
+ var commit = obj.name + 'Commit';
822
+ rangeChange[obj.name+'Block'] = function(e){
823
+
824
+ if(!rangeChange.blockElement && e.target.type == 'range'){
825
+
826
+ rangeChange.blockElement = e.target;
827
+ rangeChange.value = e.target.value;
828
+ $(rangeChange.blockElement)
829
+ .off('blur', rangeChange.trigger)
830
+ .on('blur', rangeChange.trigger)
831
+ ;
832
+
833
+ $(document.body)
834
+ .off(obj.evt, rangeChange[commit])
835
+ .on(obj.evt, rangeChange[commit])
836
+ ;
837
+ }
838
+ };
839
+
840
+ rangeChange[commit] = function(e){
841
+ $(document.body).off(obj.evt, rangeChange[commit]);
842
+ rangeChange.trigger();
843
+ };
844
+
845
+ });
846
+
847
+ $(document.body || 'html').on({
848
+ mousedown: rangeChange.mouseBlock,
849
+ 'keydown kepress': function(e){
850
+ if(e.keyCode < 45 && e.keyCode > 30){
851
+ rangeChange.keyBlock(e);
852
+ }
853
+ },
854
+ 'touchstart': rangeChange.touchBlock,
855
+ focusin: rangeChange.inputSetup
856
+ });
857
+
858
+ $.extend(true, $.event.special, {
859
+ change: {
860
+ handle: function(e){
861
+
862
+ if(!e.isTrigger && rangeChange.blockElement == e.target){
863
+ rangeChange.requestedChange = e.target;
864
+ rangeChange.triggerInput(e);
865
+ return false;
866
+ } else if(rangeChange.requestedChange == e.target){
867
+ rangeChange.requestedChange = false;
868
+ }
869
+ e.handleObj.handler.apply(this, arguments);
870
+ }
871
+ },
872
+ input: {
873
+ handle: (function(){
874
+ var lastValue, lastElement;
875
+
876
+ var remove = function(){
877
+ if(lastElement){
878
+ $(lastElement).off('change', remove);
879
+ }
880
+ lastValue = false;
881
+ lastElement = false;
882
+ };
883
+
884
+ var setup = function(e){
885
+ remove(e);
886
+ lastElement = e.target;
887
+ lastValue = e.target.value;
888
+ $(e.target).on('change', remove);
889
+ };
890
+
891
+ return function(e){
892
+ var value;
893
+ if(!e.isTrigger && e.target.type == 'range'){
894
+
895
+ if(lastElement != e.target){
896
+ setup(e);
897
+ } else if(lastElement == e.target){
898
+ if(lastValue == (value = e.target.value)){
899
+ return false;
900
+ }
901
+ lastValue = e.target.value;
902
+ }
903
+ }
904
+ e.handleObj.handler.apply(this, arguments);
905
+ };
906
+ })()
907
+ }
908
+ });
909
+ }
773
910
  });
@@ -136,7 +136,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
136
136
  src.server = tmp;
137
137
  }
138
138
 
139
- tmp = elem.attr('type');
139
+ tmp = elem.attr('type') || elem.attr('data-type');
140
140
  if(tmp){
141
141
  src.type = tmp;
142
142
  src.container = $.trim(tmp.split(';')[0]);
@@ -160,6 +160,11 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
160
160
  }
161
161
  }
162
162
  }
163
+
164
+ if(!src.container){
165
+ $(elem).attr('data-wsrecheckmimetype', '');
166
+ }
167
+
163
168
  tmp = elem.attr('media');
164
169
  if(tmp){
165
170
  src.media = tmp;
@@ -393,15 +398,18 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
393
398
 
394
399
  var handleThird = (function(){
395
400
  var requested;
401
+ var readyType = hasSwf ? swfType : 'mediaelement-yt';
396
402
  return function( mediaElem, ret, data ){
403
+ //readd to ready
397
404
 
398
- webshims.ready(hasSwf ? swfType : 'mediaelement-yt', function(){
399
- if(mediaelement.createSWF){
405
+
406
+ webshims.ready(readyType, function(){
407
+ if(mediaelement.createSWF && $(mediaElem).parent()[0]){
400
408
  mediaelement.createSWF( mediaElem, ret, data );
401
409
  } else if(!requested) {
402
410
  requested = true;
403
411
  loadThird();
404
- //readd to ready
412
+
405
413
  handleThird( mediaElem, ret, data );
406
414
  }
407
415
  });
@@ -57,15 +57,6 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
57
57
  lastDuration: 0
58
58
  }, getProps, getSetProps);
59
59
 
60
- var idRep = /^jarisplayer-/;
61
- var getSwfDataFromID = function(id){
62
-
63
- var elem = document.getElementById(id.replace(idRep, ''));
64
- if(!elem){return;}
65
- var data = webshims.data(elem, 'mediaelement');
66
- return data.isActive == 'third' ? data : null;
67
- };
68
-
69
60
 
70
61
  var getSwfDataFromElem = function(elem){
71
62
  try {
@@ -658,6 +649,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
658
649
  box = data.shadowElem;
659
650
  resetSwfProps(data);
660
651
  } else {
652
+ $(document.getElementById('wrapper-'+ elemId )).remove();
661
653
  box = $('<div class="polyfill-'+ (elemNodeName) +' polyfill-mediaelement" id="wrapper-'+ elemId +'"><div id="'+ elemId +'"></div>')
662
654
  .css({
663
655
  position: 'relative',
@@ -740,8 +732,11 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
740
732
  ;
741
733
  }
742
734
 
743
-
744
- if(!mediaelement.jarisEvent[data.id] || mediaelement.jarisEvent[data.id].elem != elem){
735
+ if(mediaelement.jarisEvent[data.id] && mediaelement.jarisEvent[data.id].elem != elem){
736
+ webshims.error('something went wrong');
737
+ return;
738
+ } else if(!mediaelement.jarisEvent[data.id]){
739
+
745
740
  mediaelement.jarisEvent[data.id] = function(jaris){
746
741
 
747
742
  if(jaris.type == 'ready'){
@@ -947,6 +942,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
947
942
  descs[fn] = {
948
943
  value: function(){
949
944
  var data = getSwfDataFromElem(this);
945
+
950
946
  if(data){
951
947
  if(data.stopPlayPause){
952
948
  clearTimeout(data.stopPlayPause);
@@ -969,6 +965,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
969
965
 
970
966
  webshims.onNodeNamesPropertyModify(nodeName, 'controls', function(val, boolProp){
971
967
  var data = getSwfDataFromElem(this);
968
+
972
969
  $(this)[boolProp ? 'addClass' : 'removeClass']('webshims-controls');
973
970
 
974
971
  if(data){
@@ -1102,5 +1099,60 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
1102
1099
  } else if(!('media' in document.createElement('source'))){
1103
1100
  webshims.reflectProperties('source', ['media']);
1104
1101
  }
1102
+ if(options.experimentallyMimetypeCheck){
1103
+ (function(){
1104
+ var ADDBACK = $.fn.addBack ? 'addBack' : 'andSelf';
1105
+ var getMimeType = function(){
1106
+ var done;
1107
+ var unknown = 'media/unknown please provide mime type';
1108
+ var media = $(this);
1109
+ var xhrs = [];
1110
+ media
1111
+ .not('.ws-after-check')
1112
+ .find('source')
1113
+ [ADDBACK]()
1114
+ .filter('[data-wsrecheckmimetype]:not([type])')
1115
+ .each(function(){
1116
+ var source = $(this).removeAttr('data-wsrecheckmimetype');
1117
+ var error = function(){
1118
+ source.attr('data-type', unknown);
1119
+ };
1120
+ try {
1121
+ xhrs.push(
1122
+ $.ajax({
1123
+ type: 'head',
1124
+ url: $.attr(this, 'src'),
1125
+ success: function(content, status, xhr){
1126
+ var mime = xhr.getResponseHeader('Content-Type');
1127
+ if(mime){
1128
+ done = true;
1129
+ }
1130
+ source.attr('data-type', mime || unknown);
1131
+ },
1132
+ error: error
1133
+ })
1134
+ )
1135
+ ;
1136
+ } catch(er){
1137
+ error();
1138
+ }
1139
+ })
1140
+ ;
1141
+ if(xhrs.length){
1142
+ media.addClass('ws-after-check');
1143
+ $.when.apply($, xhrs).always(function(){
1144
+ media.mediaLoad();
1145
+ setTimeout(function(){
1146
+ media.removeClass('ws-after-check');
1147
+ }, 9);
1148
+ });
1149
+ }
1150
+ };
1151
+ $('audio.media-error, video.media-error').each(getMimeType);
1152
+ $(document).on('mediaerror', function(e){
1153
+ getMimeType.call(e.target);
1154
+ });
1155
+ })();
1156
+ }
1105
1157
 
1106
1158
  });
metadata CHANGED
@@ -1,27 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webshims-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.11.2
4
+ version: 1.11.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Reese
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-27 00:00:00.000000000 Z
11
+ date: 2013-11-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>'
17
+ - - '>'
18
18
  - !ruby/object:Gem::Version
19
19
  version: 3.1.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ! '>'
24
+ - - '>'
25
25
  - !ruby/object:Gem::Version
26
26
  version: 3.1.0
27
27
  description: Makes it simple to include the webshims js library (by Alexander Farkas)
@@ -168,12 +168,12 @@ require_paths:
168
168
  - lib
169
169
  required_ruby_version: !ruby/object:Gem::Requirement
170
170
  requirements:
171
- - - ! '>='
171
+ - - '>='
172
172
  - !ruby/object:Gem::Version
173
173
  version: '0'
174
174
  required_rubygems_version: !ruby/object:Gem::Requirement
175
175
  requirements:
176
- - - ! '>='
176
+ - - '>='
177
177
  - !ruby/object:Gem::Version
178
178
  version: '0'
179
179
  requirements: []