webshims-rails 1.11.2 → 1.11.3

Sign up to get free protection for your applications and to get access to all the features.
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: []